using Components.Tiles; using DG.Tweening; using Sirenix.OdinInspector; using UnityEngine; namespace Components { public class AnimatedTile : BaseTile { private enum AnimationType { TranslationAxisY, ScaleAxisY } [SerializeField] private AnimationType animationType; [SerializeField] private Transform holder; [SerializeField] private float speed; [SerializeField] private Ease ease; [ShowIf("animationType", AnimationType.ScaleAxisY)] [SerializeField] private float minScale; [ShowIf("animationType", AnimationType.TranslationAxisY)] [SerializeField] private float minY = -.08f; [ShowIf("animationType", AnimationType.TranslationAxisY)] [SerializeField] private float maxY = .15f; private Tween _tween; protected override void ReleaseReferences() { base.ReleaseReferences(); holder = null; _tween = null; } public override void Initialize() { switch (animationType) { case AnimationType.TranslationAxisY: PlayTranslationAnimation(); break; case AnimationType.ScaleAxisY: PlayScaleAnimation(); break; default: return; } } private void PlayScaleAnimation() { _tween = holder.DOScaleY(minScale, speed) .SetEase(ease) .OnComplete(() => { _tween = holder.DOScaleY(1f, speed) .SetEase(ease) .OnComplete(PlayScaleAnimation); }); } private void PlayTranslationAnimation() { _tween = holder.DOLocalMoveY(minY, speed) .OnComplete(() => { _tween = holder.DOLocalMoveY(maxY, speed) .SetEase(ease) .OnComplete(PlayTranslationAnimation); }) .SetEase(ease); } public override void ResetTile() { _tween?.Kill(); _tween = null; } } }