145 lines
6.8 KiB
C#
145 lines
6.8 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using DG.Tweening;
|
||
using Ichni.RhythmGame;
|
||
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);
|
||
if (MenuManager.instance.songSelectionUIPage.selectedSave.TryGetBeatmapSave(
|
||
difficultyData.saveDifficultyId, out BeatmapSave beatmapSave))
|
||
{
|
||
MenuManager.instance.songSelectionUIPage.songInfoUI.SetBeatmapInfo(beatmapSave);
|
||
}
|
||
else
|
||
{
|
||
// 当前内容尚未创建该难度的记录时,UI 只显示空成绩,不在展示路径修改存档。
|
||
MenuManager.instance.songSelectionUIPage.songInfoUI.SetBeatmapInfo(new BeatmapSave(0f, false, false));
|
||
}
|
||
|
||
MenuInformationRecorder.instance.SetRecordForChapter(
|
||
ChapterSelectionManager.instance.currentChapter,
|
||
MenuManager.instance.songSelectionUIPage.selectedSong,
|
||
MenuManager.instance.songSelectionUIPage.selectedSong.difficultyDataList.IndexOf(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;
|
||
|
||
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();
|
||
}
|
||
}
|
||
}
|