70 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|