Files
ichni_Official/Assets/Scripts/UI/SongSelection/SongSelectionTab.cs
SoulliesOfficial 7580c4d87c 大更
2026-03-14 03:13:10 -04:00

116 lines
3.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using Sirenix.OdinInspector;
using SLSUtilities.WwiseAssistance;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
namespace Ichni.Menu
{
public partial class SongSelectionTab : MonoBehaviour
{
private SongListControllerUI songListController => MenuManager.instance.songSelectionUIPage.songListController;
public bool isLocked;
public SongItemData connectedSong;
public TMP_Text songNameText;
public TMP_Text composerNameText;
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.displaySongName;
composerNameText.text = song.composer;
isLocked = !GameSaveManager.instance.SongSaveModule.CheckStoryKey(song.storyUnlockKey);
lockMark.gameObject.SetActive(isLocked);
quickSwitchButton.onClick.AddListener(() =>
{
if (MenuManager.instance.songSelectionUIPage.songListController.selectedTab == this)
{
if (MenuManager.instance.isEnteringGame)
{
return;
}
MenuManager.instance.isEnteringGame = true;
InformationTransistor.instance.SetInformation(
ChapterSelectionManager.instance.currentChapter,
MenuManager.instance.songSelectionUIPage.selectedSong,
MenuManager.instance.songSelectionUIPage.selectedDifficulty);
AudioManager.Post(AK.EVENTS.ENTERTOGAME);
SongSelectionManager.instance.StopPreviewSong();
MenuManager.instance.transitionUIPage.FadeIn();
Observable.Timer(TimeSpan.FromSeconds(0.6f)).Subscribe(_ =>
{
MenuManager.instance.EnterGame();
});
}
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();
}
}
}
}