use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.register_type::<MyType>()
.add_systems(Startup, setup)
.run();
}
#[derive(Reflect)]
#[reflect(DoThing)]
struct MyType {
value: String,
}
impl DoThing for MyType {
fn do_thing(&self) -> String {
format!("{} World!", self.value)
}
}
#[reflect_trait]
trait DoThing {
fn do_thing(&self) -> String;
}
fn setup(type_registry: Res<AppTypeRegistry>) {
let reflect_value: Box<dyn Reflect> = Box::new(MyType {
value: "Hello".to_string(),
});
let type_registry = type_registry.read();
let reflect_do_thing = type_registry
.get_type_data::<ReflectDoThing>(reflect_value.type_id())
.unwrap();
let my_trait: &dyn DoThing = reflect_do_thing.get(&*reflect_value).unwrap();
info!("{}", my_trait.do_thing());
}