Files
ichni_Official/Assets/Scripts/UI/SongSelection/DifficultySelectionButton.cs

134 lines
6.4 KiB
C#
Raw Normal View History

2025-07-21 05:42:20 -04:00
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;
2025-08-11 14:04:06 -04:00
namespace Ichni.Menu
2025-07-21 05:42:20 -04:00
{
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)
{
2025-08-11 14:04:06 -04:00
gameObject.SetActive(difficulty.isAvailable);
2025-07-21 05:42:20 -04:00
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);
2025-07-26 04:20:25 -04:00
MenuManager.instance.songSelectionUIPage.songInfoUI.SetBeatmapInfo(
MenuManager.instance.songSelectionUIPage.selectedSave.beatmapSaves[difficultyData.difficultyIndex]);
2025-08-11 14:04:06 -04:00
MenuInformationRecorder.instance.songSelectionRecords[ChapterSelectionManager.instance.currentChapter] =
new SongSelectionRecord(MenuManager.instance.songSelectionUIPage.selectedSong, difficultyData);
2025-07-26 04:20:25 -04:00
if (container.selectedButton == this)
{
background.DOColor(difficultyData.color, 0.4f).SetEase(Ease.OutQuart).Play();
return;
}
2025-07-21 05:42:20 -04:00
MenuManager.instance.songSelectionUIPage.difficultySelectionContainer.selectedButton?.Deselect();
MenuManager.instance.songSelectionUIPage.difficultySelectionContainer.selectedButton = this;
2025-08-27 21:45:18 -04:00
MenuInformationRecorder.instance.GetRecordOfThisChapter().difficultyIndex = difficultyData.difficultyIndex;
2025-07-21 05:42:20 -04:00
2025-08-11 14:04:06 -04:00
gameObject.GetComponent<AudioContainer>().PlaySoundFX("SelectDifficluty");
PlaySelectAnimation();
}
public void Deselect()
{
PlayDeselectAnimation();
}
}
public partial class DifficultySelectionButton
{
private Sequence selectionSequence;
private void PlaySelectAnimation()
{
selectionSequence?.Kill(true);
2025-07-21 05:42:20 -04:00
background.sprite = selectedSprite;
2025-08-11 14:04:06 -04:00
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));
2025-07-21 05:42:20 -04:00
2025-08-11 14:04:06 -04:00
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));
2025-07-21 05:42:20 -04:00
2025-08-11 14:04:06 -04:00
selectionSequence.Play();
2025-07-21 05:42:20 -04:00
}
2025-08-11 14:04:06 -04:00
private void PlayDeselectAnimation()
2025-07-21 05:42:20 -04:00
{
2025-08-11 14:04:06 -04:00
selectionSequence?.Kill(true);
2025-07-21 05:42:20 -04:00
background.sprite = unselectedSprite;
background.color = Color.white;
2025-08-11 14:04:06 -04:00
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));
2025-07-21 05:42:20 -04:00
2025-08-11 14:04:06 -04:00
selectionSequence.Play();
2025-07-21 05:42:20 -04:00
}
}
}