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

145 lines
6.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
}
}