using System; using System.Collections; using System.Collections.Generic; using System.Linq; using DG.Tweening; using Sirenix.OdinInspector; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Ichni.Menu.UI { 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) { this.difficultyData = difficulty; difficultyValueText.text = difficulty.difficultyValue.ToString(); difficultyNameText.text = difficulty.GetDifficultyName(); } private Sequence seq; public void Select() { MenuManager.instance.songSelectionUIPage.selectedDifficulty = difficultyData; MenuManager.instance.songSelectionUIPage.songInfoUI.SetCharter(difficultyData.charterName); if(container.selectedButton == this) return; MenuManager.instance.songSelectionUIPage.difficultySelectionContainer.selectedButton?.Deselect(); MenuManager.instance.songSelectionUIPage.difficultySelectionContainer.selectedButton = this; MenuManager.instance.songSelectionUIPage.currentSelectedDifficultyIndex = difficultyData.difficultyIndex; seq?.Kill(true); background.sprite = selectedSprite; seq = DOTween.Sequence(); seq.Append(background.rectTransform.DOAnchorPosX(-7.5f, 0.4f).SetEase(Ease.OutQuart)); seq.Join(background.rectTransform.DOSizeDelta(new Vector2(85, 85), 0.4f).SetEase(Ease.OutQuart)); seq.Join(background.DOColor(difficultyData.color, 0.4f).SetEase(Ease.OutQuart)); seq.Join(innerRing.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); seq.Join(innerRing.rectTransform.DOLocalRotate(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(outerRing.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); seq.Join(outerRing.rectTransform.DOLocalRotate(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(star.rectTransform.DOAnchorPosX(-55, 0.4f).SetEase(Ease.OutQuart)); seq.Join(star.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); seq.Append(upperLeftCorner.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); seq.Join(upperLeftCorner.rectTransform.DOAnchorPos(new Vector2(-52, 52), 0.4f).SetEase(Ease.OutQuart)); seq.Join(lowerLeftCorner.rectTransform.DOScale(Vector3.one, 0.4f).SetEase(Ease.OutQuart)); seq.Join(lowerLeftCorner.rectTransform.DOAnchorPos(new Vector2(-52, -52), 0.4f).SetEase(Ease.OutQuart)); seq.Play(); } public void Deselect() { seq?.Kill(true); background.sprite = unselectedSprite; background.color = Color.white; seq = DOTween.Sequence(); seq.Append(upperLeftCorner.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(upperLeftCorner.rectTransform.DOAnchorPos(Vector2.zero,0.4f).SetEase(Ease.OutQuart)); seq.Join(lowerLeftCorner.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(lowerLeftCorner.rectTransform.DOAnchorPos(Vector2.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(background.rectTransform.DOAnchorPosX(0f, 0.4f).SetEase(Ease.OutQuart)); seq.Join(background.rectTransform.DOSizeDelta(new Vector2(100, 100), 0.4f).SetEase(Ease.OutQuart)); seq.Join(innerRing.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(innerRing.rectTransform.DOLocalRotate(new Vector3(0, 0, 180), 0.4f).SetEase(Ease.OutQuart)); seq.Join(outerRing.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(outerRing.rectTransform.DOLocalRotate(new Vector3(0, 0, -180), 0.4f).SetEase(Ease.OutQuart)); seq.Join(star.rectTransform.DOScale(Vector3.zero, 0.4f).SetEase(Ease.OutQuart)); seq.Join(star.rectTransform.DOAnchorPosX(0, 0.4f).SetEase(Ease.OutQuart)); seq.Play(); } } }