chip-gameV3/Assets/Scripts/UI/Menu/Panels/GamemodePanel.cs

101 lines
3.0 KiB
C#

using DG.Tweening;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GamemodePanel : MenuPanel
{
[Header("Анимация рамки")]
[SerializeField] List<RectTransform> frames;
[SerializeField] Vector2 disabledFrameWH;
[SerializeField] Vector2 enabledFrameWH;
[SerializeField] float frameDuration = 0.15f;
[Header("Анимация персонажа")]
[SerializeField] Image characterImage;
[SerializeField] RectTransform characterRect;
[SerializeField] Vector2 disabledCharacterWH;
[SerializeField] Vector2 enabledCharacterWH;
[SerializeField] Color disabledCharacterColor;
[SerializeField] Color enabledCharacterColor;
[SerializeField] float characterDelay = 0.1f;
[SerializeField] float characterDuration = 0.1f;
[Header("Надпись режима")]
[SerializeField] RectTransform modeSign;
[SerializeField] Vector2 signOffset = new(-200, 0);
[Header("Взаимодействие")]
[SerializeField] private GameMode gameMode;
private Vector2 signStart;
private Sequence _animation;
private float totalTime => frameDuration + characterDelay + characterDuration;
public override void Initialize()
{
signStart = modeSign.anchoredPosition;
}
public override void Enable(int _, float delay)
{
StopAnimation();
_animation = DOTween.Sequence();
foreach (var frame in frames)
{
Tween tween = frame.DOSizeDelta(enabledFrameWH, frameDuration).SetEase(Ease.OutQuad);
_animation.Join(tween);
}
_animation.Insert(characterDelay,
characterRect.DOSizeDelta(enabledCharacterWH, characterDuration).SetEase(Ease.OutQuad));
_animation.Insert(characterDelay,
characterImage.DOColor(enabledCharacterColor, characterDuration).SetEase(Ease.OutQuad));
_animation.Append(
modeSign.DOAnchorPos(signStart - signOffset, totalTime * 0.15f)
.SetEase(Ease.Linear)
);
_animation.Append(
modeSign.DOAnchorPos(signStart, totalTime * 0.85f)
.SetEase(Ease.OutBounce)
);
_animation.PlayForward();
}
public override void Disable(int _)
{
StopAnimation();
_animation = DOTween.Sequence();
foreach (var frame in frames)
{
_animation.Join(frame.DOSizeDelta(disabledFrameWH, frameDuration).SetEase(Ease.InCirc));
}
_animation.Join(
characterRect.DOSizeDelta(disabledCharacterWH, characterDuration).SetEase(Ease.OutQuad));
_animation.Insert(characterDelay,
characterImage.DOColor(disabledCharacterColor, characterDuration).SetEase(Ease.OutQuad));
_animation.PlayForward();
}
public override void Interact() => GameManager.Instance.TryEnterGame(gameMode);
private void StopAnimation()
{
if (_animation != null)
{
_animation.Kill();
_animation = null;
}
}
}