update method
Implementation
void update(double delta) {
delta *= timeScale;
final List<TrackEntry?> tracks = this.tracks;
final int n = tracks.length;
for (int i = 0; i < n; i++) {
final TrackEntry? current = tracks[i];
if (current == null) continue;
current
..animationLast = current.nextAnimationLast
..trackLast = current.nextTrackLast;
double currentDelta = delta * current.timeScale;
if (current.delay > 0) {
current.delay = current.delay - currentDelta;
if (current.delay > 0) continue;
currentDelta = -current.delay;
current.delay = 0.0;
}
TrackEntry? next = current.next;
if (next != null) {
// When the next entry's delay is passed, change to the next entry, preserving leftover time.
final double nextTime = current.trackLast - next.delay;
if (nextTime >= 0) {
next
..delay = 0.0
..trackTime = nextTime + delta * next.timeScale;
current.trackTime = current.trackTime + currentDelta;
setCurrent(i, next, true);
while (next!.mixingFrom != null) {
next.mixTime = next.mixTime + currentDelta;
next = next.mixingFrom;
}
continue;
}
} else if (current.trackLast >= current.trackEnd &&
current.mixingFrom == null) {
tracks[i] = null;
queue.end(current);
disposeNext(current);
continue;
}
if (current.mixingFrom != null && updateMixingFrom(current, delta)) {
// End mixing from entries once all have completed.
TrackEntry? from = current.mixingFrom;
current.mixingFrom = null;
while (from != null) {
queue.end(from);
from = from.mixingFrom;
}
}
current.trackTime = current.trackTime + currentDelta;
}
queue.drain();
}