135 lines
6.4 KiB
C#
135 lines
6.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|