using UnityEngine; namespace AlicizaX.AnimationFlow.Runtime { [Category("Utility")] public class SequenceFrameAnimation : ActionNode { public SpriteRenderer target; public float interval; public Sprite[] sprites; public bool rewind; private int curIndex; private bool is_rewind; private float curTime; private void ResetData() { curIndex = 0; is_rewind = false; curTime = 0; } public override void OnReset() { ResetData(); } public override void OnEnter() { ResetData(); } public override void OnUpdate(float dt) { if (curTime <= 0) { curTime += interval; if (curIndex >= sprites.Length) { return; } target.sprite = sprites[curIndex]; if (is_rewind) { curIndex = Mathf.Max(0, curIndex - 1); } else { curIndex++; if (curIndex >= sprites.Length) { if (rewind) { is_rewind = true; curIndex--; } else { curIndex = 0; } } } } else { curTime -= dt; } } public override float Duration() { return interval * (sprites.Length + 1) * (rewind ? 2 : 1); } public override bool Valid() { return interval > 0 && sprites.Length > 0; } public override bool HasSubTitle() { return true; } public override string SubTitle() { return target != null ? target.name : null; } } }