Files
ichni_Official/Assets/Scripts/UI/SongSelection/SongSelectionTab.cs
SoulliesOfficial abf81ece7b menu
2025-07-26 04:20:25 -04:00

93 lines
3.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using Sirenix.OdinInspector;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
namespace Ichni.Menu.UI
{
public partial class SongSelectionTab : MonoBehaviour
{
private SongListControllerUI songListController => MenuManager.instance.songSelectionUIPage.songListController;
public bool isLocked;
public SongItemData connectedSong;
public TMP_Text songNameText;
public Button quickSwitchButton;
public float distanceToCenter;
[Title("背景图&选中处理")]
public RectTransform background;
public Image selectedImage;
public Image unselectedImage;
public Image lockMark;
public void SetUpTab(SongItemData song)
{
connectedSong = song;
songNameText.text = song.songName;
isLocked = !GameSaveManager.instance.SongSaveModule.CheckUnlock(song.unlockKey);
lockMark.gameObject.SetActive(isLocked);
quickSwitchButton.onClick.AddListener(() =>
{
if (MenuManager.instance.songSelectionUIPage.songListController.selectedTab == this)
{
// MenuManager.instance.prepareUIPage.SetUpPrepareUIPage(song.songName);
// MenuManager.instance.prepareUIPage.FadeIn();
}
else
{
StartCoroutine(MenuManager.instance.songSelectionUIPage.songListController.SnapToTab(this));
}
});
}
private void Update()
{
RectTransform centerPoint = songListController.centerPoint;
RectTransform rectTransform = GetComponent<RectTransform>();
distanceToCenter = Mathf.Abs(centerPoint.position.y - rectTransform.position.y);
float x1 = Mathf.Sqrt(distanceToCenter) * 25 + 25;
float x2 = distanceToCenter * 5 + 25;
float x3 = Mathf.Pow(distanceToCenter, 2) / 10f + 25;
rectTransform.GetChild(0).GetComponent<RectTransform>().anchoredPosition = new Vector2(x2, 0);
}
}
public partial class SongSelectionTab
{
public void SetSelection(bool isSelected)
{
if (isSelected)
{
background.DOScaleY(1.2f, 0.25f)
.SetEase(Ease.OutQuad)
.Play();
selectedImage.DOFade(1, 0.25f)
.SetEase(Ease.OutQuad)
.Play();
}
else
{
background.DOScaleY(1f, 0.25f)
.SetEase(Ease.OutQuad)
.Play();
selectedImage.DOFade(0, 0.25f)
.SetEase(Ease.OutQuad)
.Play();
}
}
}
}