examples/observers/
observer_entity_event.rs1use crate::z_ignore_test_common::*;
2
3use flecs_ecs::prelude::*;
4#[derive(Component)]
15struct Click;
16
17#[derive(Component)]
19struct Resize {
20 width: f32,
21 height: f32,
22}
23
24#[derive(Debug, Copy, Clone)]
25enum CloseReason {
26 User,
27 _System,
28}
29
30#[derive(Component)]
31struct CloseRequested {
32 reason: CloseReason,
33}
34
35fn main() {
36 let world = World::new();
37
38 world
40 .observer::<CloseRequested, ()>()
41 .with(id::<flecs::Any>())
42 .each_iter(|it, _index, _| {
43 let reason = it.param().reason;
44 println!("Close request with reason: {reason:?}");
45 });
46
47 let widget = world.entity_named("MyWidget");
48 println!("widget: {widget:?}");
49
50 widget.observe::<Click>(|| {
52 println!("clicked!");
53 });
54
55 widget.observe_entity::<Click>(|entity| {
56 println!("clicked on {:?}", entity.name());
57 });
58
59 widget.observe_payload(|payload: &Resize| {
61 println!(
62 "widget resized to {{ {}, {} }}!",
63 payload.width, payload.height
64 );
65 });
66
67 widget.observe_payload_entity(|entity, payload: &Resize| {
68 println!(
69 "{} resized to {{ {}, {} }}!",
70 entity.name(),
71 payload.width,
72 payload.height
73 );
74 });
75
76 widget.emit(&Click);
77
78 widget.emit(&Resize {
79 width: 100.0,
80 height: 200.0,
81 });
82
83 widget.emit(&CloseRequested {
84 reason: CloseReason::User,
85 });
86
87 }
95
96#[cfg(feature = "flecs_nightly_tests")]
97#[test]
98fn test() {
99 let output_capture = OutputCapture::capture().unwrap();
100 main();
101 output_capture.test("observer_entity_event".to_string());
102}