mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Time scale, per AnimationState and per track.
This commit is contained in:
parent
821c9ea38b
commit
fc92128519
@ -55,19 +55,19 @@ struct TrackEntry {
|
|||||||
TrackEntry* previous;
|
TrackEntry* previous;
|
||||||
Animation* animation;
|
Animation* animation;
|
||||||
int/*bool*/loop;
|
int/*bool*/loop;
|
||||||
float delay, time, lastTime, endTime;
|
float delay, time, lastTime, endTime, timeScale;
|
||||||
AnimationStateListener listener;
|
AnimationStateListener listener;
|
||||||
float mixTime, mixDuration;
|
float mixTime, mixDuration;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AnimationState {
|
struct AnimationState {
|
||||||
AnimationStateData* const data;
|
AnimationStateData* const data;
|
||||||
|
float timeScale;
|
||||||
|
AnimationStateListener listener;
|
||||||
|
void* context;
|
||||||
|
|
||||||
int trackCount;
|
int trackCount;
|
||||||
TrackEntry** tracks;
|
TrackEntry** tracks;
|
||||||
|
|
||||||
AnimationStateListener listener;
|
|
||||||
void* context;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* @param data May be 0 for no mixing. */
|
/* @param data May be 0 for no mixing. */
|
||||||
|
|||||||
@ -43,6 +43,7 @@
|
|||||||
|
|
||||||
TrackEntry* _TrackEntry_create () {
|
TrackEntry* _TrackEntry_create () {
|
||||||
TrackEntry* entry = NEW(TrackEntry);
|
TrackEntry* entry = NEW(TrackEntry);
|
||||||
|
entry->timeScale = 1;
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,6 +72,7 @@ AnimationState* AnimationState_create (AnimationStateData* data) {
|
|||||||
_AnimationState* internal = NEW(_AnimationState);
|
_AnimationState* internal = NEW(_AnimationState);
|
||||||
AnimationState* self = SUPER(internal);
|
AnimationState* self = SUPER(internal);
|
||||||
internal->events = MALLOC(Event*, 64);
|
internal->events = MALLOC(Event*, 64);
|
||||||
|
self->timeScale = 1;
|
||||||
CONST_CAST(AnimationStateData*, self->data) = data;
|
CONST_CAST(AnimationStateData*, self->data) = data;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -89,6 +91,7 @@ void AnimationState_update (AnimationState* self, float delta) {
|
|||||||
TrackEntry* current = self->tracks[i];
|
TrackEntry* current = self->tracks[i];
|
||||||
if (!current) continue;
|
if (!current) continue;
|
||||||
|
|
||||||
|
delta *= self->timeScale * current->timeScale;
|
||||||
time = current->time + delta;
|
time = current->time + delta;
|
||||||
endTime = current->endTime;
|
endTime = current->endTime;
|
||||||
|
|
||||||
|
|||||||
@ -40,8 +40,10 @@ namespace Spine {
|
|||||||
private AnimationStateData data;
|
private AnimationStateData data;
|
||||||
private List<TrackEntry> tracks = new List<TrackEntry>();
|
private List<TrackEntry> tracks = new List<TrackEntry>();
|
||||||
private List<Event> events = new List<Event>();
|
private List<Event> events = new List<Event>();
|
||||||
|
private float timeScale = 1;
|
||||||
|
|
||||||
public AnimationStateData Data { get { return data; } }
|
public AnimationStateData Data { get { return data; } }
|
||||||
|
public float TimeScale { get { return timeScale; } set { timeScale = value; } }
|
||||||
|
|
||||||
public event EventHandler<StartEndArgs> Start;
|
public event EventHandler<StartEndArgs> Start;
|
||||||
public event EventHandler<StartEndArgs> End;
|
public event EventHandler<StartEndArgs> End;
|
||||||
@ -58,6 +60,7 @@ namespace Spine {
|
|||||||
TrackEntry current = tracks[i];
|
TrackEntry current = tracks[i];
|
||||||
if (current == null) continue;
|
if (current == null) continue;
|
||||||
|
|
||||||
|
delta *= timeScale * current.timeScale;
|
||||||
float time = current.time + delta;
|
float time = current.time + delta;
|
||||||
float endTime = current.endTime;
|
float endTime = current.endTime;
|
||||||
|
|
||||||
@ -264,21 +267,16 @@ namespace Spine {
|
|||||||
internal TrackEntry next, previous;
|
internal TrackEntry next, previous;
|
||||||
internal Animation animation;
|
internal Animation animation;
|
||||||
internal bool loop;
|
internal bool loop;
|
||||||
internal float delay, time, lastTime, endTime;
|
internal float delay, time, lastTime, endTime, timeScale = 1;
|
||||||
internal float mixTime, mixDuration;
|
internal float mixTime, mixDuration;
|
||||||
|
|
||||||
public Animation Animation { get { return animation; } }
|
public Animation Animation { get { return animation; } }
|
||||||
public bool Loop { get { return loop; } set { loop = value; } }
|
|
||||||
public float Delay { get { return delay; } set { delay = value; } }
|
public float Delay { get { return delay; } set { delay = value; } }
|
||||||
public float EndTime { get { return EndTime; } set { EndTime = value; } }
|
public float Time { get { return time; } set { time = value; } }
|
||||||
|
public float LastTime { get { return lastTime; } set { lastTime = value; } }
|
||||||
public float Time {
|
public float EndTime { get { return endTime; } set { endTime = value; } }
|
||||||
get { return time; }
|
public float TimeScale { get { return timeScale; } set { timeScale = value; } }
|
||||||
set {
|
public bool Loop { get { return loop; } set { loop = value; } }
|
||||||
time = value;
|
|
||||||
if (lastTime < value) lastTime = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public event EventHandler<StartEndArgs> Start;
|
public event EventHandler<StartEndArgs> Start;
|
||||||
public event EventHandler<StartEndArgs> End;
|
public event EventHandler<StartEndArgs> End;
|
||||||
|
|||||||
@ -43,6 +43,7 @@ public class AnimationState {
|
|||||||
private Array<TrackEntry> tracks = new Array();
|
private Array<TrackEntry> tracks = new Array();
|
||||||
private final Array<Event> events = new Array();
|
private final Array<Event> events = new Array();
|
||||||
private final Array<AnimationStateListener> listeners = new Array();
|
private final Array<AnimationStateListener> listeners = new Array();
|
||||||
|
private float timeScale;
|
||||||
|
|
||||||
public AnimationState (AnimationStateData data) {
|
public AnimationState (AnimationStateData data) {
|
||||||
if (data == null) throw new IllegalArgumentException("data cannot be null.");
|
if (data == null) throw new IllegalArgumentException("data cannot be null.");
|
||||||
@ -54,6 +55,7 @@ public class AnimationState {
|
|||||||
TrackEntry current = tracks.get(i);
|
TrackEntry current = tracks.get(i);
|
||||||
if (current == null) continue;
|
if (current == null) continue;
|
||||||
|
|
||||||
|
delta *= timeScale * current.timeScale;
|
||||||
float time = current.time + delta;
|
float time = current.time + delta;
|
||||||
float endTime = current.endTime;
|
float endTime = current.endTime;
|
||||||
|
|
||||||
@ -253,6 +255,14 @@ public class AnimationState {
|
|||||||
listeners.removeValue(listener, true);
|
listeners.removeValue(listener, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getTimeScale () {
|
||||||
|
return timeScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimeScale (float timeScale) {
|
||||||
|
this.timeScale = timeScale;
|
||||||
|
}
|
||||||
|
|
||||||
public AnimationStateData getData () {
|
public AnimationStateData getData () {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@ -273,14 +283,15 @@ public class AnimationState {
|
|||||||
TrackEntry next, previous;
|
TrackEntry next, previous;
|
||||||
Animation animation;
|
Animation animation;
|
||||||
boolean loop;
|
boolean loop;
|
||||||
float delay, time, lastTime, endTime;
|
float delay, time, lastTime, endTime, timeScale = 1;
|
||||||
AnimationStateListener listener;
|
|
||||||
float mixTime, mixDuration;
|
float mixTime, mixDuration;
|
||||||
|
AnimationStateListener listener;
|
||||||
|
|
||||||
public void reset () {
|
public void reset () {
|
||||||
animation = null;
|
animation = null;
|
||||||
listener = null;
|
listener = null;
|
||||||
next = null;
|
next = null;
|
||||||
|
timeScale = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Animation getAnimation () {
|
public Animation getAnimation () {
|
||||||
@ -339,6 +350,14 @@ public class AnimationState {
|
|||||||
this.lastTime = lastTime;
|
this.lastTime = lastTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getTimeScale () {
|
||||||
|
return timeScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimeScale (float timeScale) {
|
||||||
|
this.timeScale = timeScale;
|
||||||
|
}
|
||||||
|
|
||||||
public TrackEntry getNext () {
|
public TrackEntry getNext () {
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user