101 lines
3.0 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
} |