using System; using System.Collections; using System.Collections.Generic; using System.Linq; using DG.Tweening; using Sirenix.OdinInspector; using SLSUtilities.WwiseAssistance; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Ichni.Menu { public partial class DifficultySelectionButton : MonoBehaviour { private DifficultySelectionContainer container => MenuManager.instance.songSelectionUIPage.difficultySelectionContainer; public Button button; public DifficultyData difficultyData; public TMP_Text difficultyValueText; public TMP_Text difficultyNameText; public Sprite selectedSprite; public Sprite unselectedSprite; [Title("Parts")] public Image background; public Image innerRing; public Image outerRing; public Image star; public Image upperLeftCorner; public Image lowerLeftCorner; private void Start() { button.onClick.AddListener(Select); } } public partial class DifficultySelectionButton { public void SetUp(DifficultyData difficulty) { gameObject.SetActive(difficulty.isAvailable); this.difficultyData = difficulty; difficultyValueText.text = difficulty.difficultyValue.ToString(); difficultyNameText.text = difficulty.GetDifficultyName(); } public void Select() { MenuManager.instance.songSelectionUIPage.selectedDifficulty = difficultyData; MenuManager.instance.songSelectionUIPage.songInfoUI.SetCharter(difficultyData.charterName); MenuManager.instance.songSelectionUIPage.songInfoUI.SetBeatmapInfo( MenuManager.instance.songSelectionUIPage.selectedSave.beatmapSaves[difficultyData.difficultyIndex]); MenuInformationRecorder.instance.songSelectionRecords[ChapterSelectionManager.instance.currentChapter] = new SongSelectionRecord(MenuManager.instance.songSelectionUIPage.selectedSong, difficultyData); if (container.selectedButton == this) { background.DOColor(difficultyData.color, 0.4f).SetEase(Ease.OutQuart).Play(); return; } MenuManager.instance.songSelectionUIPage.difficultySelectionContainer.selectedButton?.Deselect(); MenuManager.instance.songSelectionUIPage.difficultySelectionContainer.selectedButton = this; MenuInformationRecorder.instance.GetRecordOfThisChapter().difficultyIndex = difficultyData.difficultyIndex; AudioManager.Post(AK.EVENTS.SELECTDIFFICULTY); PlaySelectAnimation(); } public void Deselect() { PlayDeselectAnimation(); } } public partial class DifficultySelectionButton { private Sequence selectionSequence; private void PlaySelectAnimation() { selectionSequence?.Kill(true); background.sprite = selectedSprite; selectionSequence = DOTween.Sequence(); selectionSequence.Append(background.rectTransform.DOAnchorPosX(-7.5f, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(background.rectTransform.DOSizeDelta(new Vector2(85, 85), 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(background.DOColor(difficultyData.color, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(innerRing.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(innerRing.rectTransform.DOLocalRotate(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(outerRing.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(outerRing.rectTransform.DOLocalRotate(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(star.rectTransform.DOAnchorPosX(-55, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(star.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Append(upperLeftCorner.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(upperLeftCorner.rectTransform.DOAnchorPos(new Vector2(-52, 52), 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(lowerLeftCorner.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(lowerLeftCorner.rectTransform.DOAnchorPos(new Vector2(-52, -52), 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Play(); } private void PlayDeselectAnimation() { selectionSequence?.Kill(true); background.sprite = unselectedSprite; background.color = Color.white; selectionSequence = DOTween.Sequence(); selectionSequence.Append(upperLeftCorner.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(upperLeftCorner.rectTransform.DOAnchorPos(Vector2.zero,0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(lowerLeftCorner.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(lowerLeftCorner.rectTransform.DOAnchorPos(Vector2.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(background.rectTransform.DOAnchorPosX(0f, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(background.rectTransform.DOSizeDelta(new Vector2(100, 100), 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(innerRing.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(innerRing.rectTransform.DOLocalRotate(new Vector3(0, 0, 180), 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(outerRing.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(outerRing.rectTransform.DOLocalRotate(new Vector3(0, 0, -180), 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(star.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Join(star.rectTransform.DOAnchorPosX(0, 0.4f).SetEase(Ease.OutQuart)); selectionSequence.Play(); } } }