update method

void update(
  1. double delta
)

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);
}