bevy icon indicating copy to clipboard operation
bevy copied to clipboard

Add some missing reflect attributes

Open mrchantey opened this issue 1 year ago • 0 comments

Objective

  • Some types are missing reflection attributes, which means we can't use them in scene serialization etc.
  • Effected types
    • BorderRadius
    • AnimationTransitions
    • OnAdd
    • OnInsert
    • OnRemove
  • My use-case for OnAdd etc to derive reflect is 'Serializable Observer Components'. Add the component, save the scene, then the observer is re-added on scene load.
#[derive(Reflect)]
struct MySerializeableObserver<T: Event>(#[reflect(ignore)]PhantomData<T>);

impl<T: Event> Component for MySerializeableObserver<T> {
  const STORAGE_TYPE: StorageType  = StorageType::Table;
    fn register_component_hooks(hooks: &mut ComponentHooks) {
      hooks.on_add(|mut world, entity, _| {
        world
          .commands()
          .entity(entity)
          .observe(|_trigger: Trigger<T>| {
            println!("it triggered etc.");
          });
    });
  }
}

Solution

  • Add the missing traits

mrchantey avatar Jul 10 '24 04:07 mrchantey