2.5 update
This commit is contained in:
@@ -10,6 +10,8 @@ namespace BumpCombat.Defense
|
||||
private SpriteRenderer target;
|
||||
private Sprite[] frames;
|
||||
private string key;
|
||||
private float durationScale = 1f;
|
||||
private bool useUnscaledTime;
|
||||
private float frameRemaining;
|
||||
private int frame;
|
||||
private Sprite[] nextFrames;
|
||||
@@ -44,8 +46,12 @@ namespace BumpCombat.Defense
|
||||
bool destroyOnFinish, string followingKey = null,
|
||||
Sprite[] followingFrames = null, float startDelay = 0f)
|
||||
{
|
||||
enabled = true;
|
||||
completionCallback = null;
|
||||
finished = false;
|
||||
animationFinished = false;
|
||||
durationScale = 1f;
|
||||
useUnscaledTime = false;
|
||||
target = renderer;
|
||||
key = sequenceKey;
|
||||
frames = sequenceFrames;
|
||||
@@ -53,6 +59,14 @@ namespace BumpCombat.Defense
|
||||
nextKey = followingKey;
|
||||
nextFrames = followingFrames;
|
||||
delayRemaining = Mathf.Max(0f, startDelay);
|
||||
travelStartProvider = null;
|
||||
travelEndProvider = null;
|
||||
travelCanAdvance = null;
|
||||
travelArrival = null;
|
||||
travelDuration = 0f;
|
||||
travelElapsed = 0f;
|
||||
travelArrivalInvoked = false;
|
||||
hideRendererAtArrival = false;
|
||||
if (target == null || frames == null || frames.Length == 0)
|
||||
{
|
||||
FinishSequence();
|
||||
@@ -61,7 +75,7 @@ namespace BumpCombat.Defense
|
||||
frame = 0;
|
||||
target.sprite = frames[frame];
|
||||
target.enabled = delayRemaining <= 0f;
|
||||
frameRemaining = DefenseTowerArt.FrameSeconds(key, frame);
|
||||
frameRemaining = DefenseTowerArt.FrameSeconds(key, frame) * durationScale;
|
||||
UpdateVisualAlignment();
|
||||
}
|
||||
|
||||
@@ -92,6 +106,18 @@ namespace BumpCombat.Defense
|
||||
|
||||
public bool IsFinished => finished;
|
||||
|
||||
public void SetPlaybackTiming(float newDurationScale, bool useUnscaledTime)
|
||||
{
|
||||
if (float.IsNaN(newDurationScale) || float.IsInfinity(newDurationScale) || newDurationScale <= 0f)
|
||||
throw new ArgumentOutOfRangeException(nameof(newDurationScale), "Playback duration scale must be positive and finite.");
|
||||
|
||||
float previousScale = durationScale;
|
||||
durationScale = newDurationScale;
|
||||
this.useUnscaledTime = useUnscaledTime;
|
||||
if (!finished && frames != null && frames.Length > 0)
|
||||
frameRemaining *= durationScale / previousScale;
|
||||
}
|
||||
|
||||
public void SetCompletionCallback(System.Action callback)
|
||||
{
|
||||
if (callback == null) return;
|
||||
@@ -141,9 +167,10 @@ namespace BumpCombat.Defense
|
||||
return;
|
||||
}
|
||||
if (travelCanAdvance != null && !travelCanAdvance()) return;
|
||||
float deltaTime = useUnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime;
|
||||
if (delayRemaining > 0f)
|
||||
{
|
||||
delayRemaining -= Time.deltaTime;
|
||||
delayRemaining -= deltaTime;
|
||||
if (delayRemaining > 0f) return;
|
||||
if (travelDuration > 0f || travelStartProvider != null)
|
||||
ResolveTravelStart();
|
||||
@@ -151,7 +178,7 @@ namespace BumpCombat.Defense
|
||||
}
|
||||
if (travelDuration > 0f && travelElapsed < travelDuration)
|
||||
{
|
||||
travelElapsed += Time.deltaTime;
|
||||
travelElapsed += deltaTime;
|
||||
Vector2 currentEnd = travelEndProvider != null
|
||||
? travelEndProvider() : travelEnd;
|
||||
transform.position = Vector2.Lerp(
|
||||
@@ -169,7 +196,7 @@ namespace BumpCombat.Defense
|
||||
return;
|
||||
}
|
||||
|
||||
frameRemaining -= Time.deltaTime;
|
||||
frameRemaining -= deltaTime;
|
||||
while (frameRemaining <= 0f)
|
||||
{
|
||||
frame++;
|
||||
@@ -191,7 +218,7 @@ namespace BumpCombat.Defense
|
||||
}
|
||||
target.sprite = frames[frame];
|
||||
UpdateVisualAlignment();
|
||||
frameRemaining += DefenseTowerArt.FrameSeconds(key, frame);
|
||||
frameRemaining += DefenseTowerArt.FrameSeconds(key, frame) * durationScale;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user