com.alicizax.unity.animatio.../Runtime/Core/Utility/SequenceFrameAnimation.cs
陈思海 11e5744b46 init
2025-02-07 16:05:13 +08:00

70 lines
1.8 KiB
C#

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;
}
}
}