Needing to derive AnimationEvent for Event is unnecessary, and the trigger logic coupled to it feels like we're coupling "event producer" logic with the event itself, which feels wrong. It also comes with a bunch of complexity, which is again unnecessary. We can have the flexibility of "custom animation event trigger logic" without this coupling and complexity.
The current animation_events example is also needlessly complicated, due to it needing to work around system ordering issues. The docs describing it are also slightly wrong. We can make this all a non-issue by solving the underlying ordering problem.
Related to this, we use the bevy_animation::Animation system set to solve PostUpdate animation order-of-operations issues. If we move this to bevy_app as part of our "core schedule", we can cut out needless bevy_animation crate dependencies in these instances.
Solution
Remove AnimationEvent, the derive, and all other infrastructure associated with it (such as the bevy_animation/derive crate)
Replace all instances of AnimationEvent traits with Event + Clone
Store and use functions for custom animation trigger logic (ex: clip.add_event_fn()). For "normal" cases users dont need to think about this and should use the simpler clip.add_event()
Run the Animation system set before updating text
Move bevy_animation::Animation to bevy_app::Animation. Remove unnecessary bevy_animation dependency from bevy_ui
Adjust animation_events example to use the simpler clip.add_event API, as the workarounds are no longer necessary
This is polishing work that will land in 0.15, and I think it is simple enough and valuable enough to land in 0.15 with it, in the interest of making the feature as compelling as possible.
Objective
Needing to derive
AnimationEvent
forEvent
is unnecessary, and the trigger logic coupled to it feels like we're coupling "event producer" logic with the event itself, which feels wrong. It also comes with a bunch of complexity, which is again unnecessary. We can have the flexibility of "custom animation event trigger logic" without this coupling and complexity.The current
animation_events
example is also needlessly complicated, due to it needing to work around system ordering issues. The docs describing it are also slightly wrong. We can make this all a non-issue by solving the underlying ordering problem.Related to this, we use the
bevy_animation::Animation
system set to solve PostUpdate animation order-of-operations issues. If we move this to bevy_app as part of our "core schedule", we can cut out needlessbevy_animation
crate dependencies in these instances.Solution
AnimationEvent
, the derive, and all other infrastructure associated with it (such as thebevy_animation/derive
crate)AnimationEvent
traits withEvent + Clone
clip.add_event_fn()
). For "normal" cases users dont need to think about this and should use the simplerclip.add_event()
Animation
system set before updating textbevy_animation::Animation
tobevy_app::Animation
. Remove unnecessarybevy_animation
dependency frombevy_ui
animation_events
example to use the simplerclip.add_event
API, as the workarounds are no longer necessaryThis is polishing work that will land in 0.15, and I think it is simple enough and valuable enough to land in 0.15 with it, in the interest of making the feature as compelling as possible.