update method
Update the animation state and process events
Implementation
void update(double delta) {
// Update animation state
animationState.update(delta);
// Process events
final eventsPtr = SpineBindings.bindings.spine_skeleton_drawable_get_animation_state_events(_drawable.cast());
if (eventsPtr != nullptr) {
final numEvents = SpineBindings.bindings.spine_animation_state_events_get_num_events(eventsPtr.cast());
for (int i = 0; i < numEvents; i++) {
// Get event type
final eventTypeValue = SpineBindings.bindings.spine_animation_state_events_get_event_type(eventsPtr.cast(), i);
final type = EventType.fromValue(eventTypeValue);
// Get track entry
final trackEntryPtr = SpineBindings.bindings.spine_animation_state_events_get_track_entry(eventsPtr.cast(), i);
final trackEntry = TrackEntry.fromPointer(trackEntryPtr);
// Get event (may be null)
final eventPtr = SpineBindings.bindings.spine_animation_state_events_get_event(eventsPtr.cast(), i);
final event = eventPtr.address == 0 ? null : Event.fromPointer(eventPtr);
// Call track entry listener if registered
final trackListener = AnimationStateEventManager.instance.getTrackEntryListener(animationState, trackEntry);
trackListener?.call(type, trackEntry, event);
// Call global state listener
animationState.listener?.call(type, trackEntry, event);
// Remove listener if track entry is being disposed
if (type == EventType.dispose) {
AnimationStateEventManager.instance.removeTrackEntry(animationState, trackEntry);
}
}
// Reset events for next frame
SpineBindings.bindings.spine_animation_state_events_reset(eventsPtr.cast());
}
// Apply animation state to skeleton
animationState.apply(skeleton);
// Update skeleton physics and world transforms
skeleton.update(delta);
skeleton.updateWorldTransform(Physics.update);
}