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(); 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().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(); } } } }