Flecs v4.1
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
builder_i.hpp
Go to the documentation of this file.
1
6#pragma once
7
9
10namespace flecs {
11
16template<typename Base, typename ... Components>
17struct observer_builder_i : query_builder_i<Base, Components ...> {
18 using BaseClass = query_builder_i<Base, Components ...>;
21 : BaseClass(nullptr)
22 , desc_(nullptr)
23 , event_count_(0) { }
24
28 , desc_(desc)
29 , event_count_(0) { }
30
34 Base& event(entity_t evt) {
35 desc_->events[event_count_ ++] = evt;
36 return *this;
37 }
38
42 template <typename E>
43 Base& event() {
44 desc_->events[event_count_ ++] = _::type<E>().id(world_v());
45 return *this;
46 }
47
49 Base& yield_existing(bool value = true) {
50 desc_->yield_existing = value;
51 return *this;
52 }
53
55 Base& observer_flags(ecs_flags32_t flags) {
56 desc_->flags_ |= flags;
57 return *this;
58 }
59
61 Base& ctx(void *ptr) {
62 desc_->ctx = ptr;
63 return *this;
64 }
65
67 Base& run(ecs_iter_action_t action) {
68 desc_->run = action;
69 return *this;
70 }
71
72protected:
73 virtual flecs::world_t* world_v() override = 0;
74
75private:
76 operator Base&() {
77 return *static_cast<Base*>(this);
78 }
79
81 int32_t event_count_;
82};
83
84}
ecs_entity_t entity_t
Entity type.
Definition c_types.hpp:21
ecs_world_t world_t
World type.
Definition c_types.hpp:18
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition flecs.h:577
Query builder interface.
Used with ecs_observer_init().
Definition flecs.h:1349
void * ctx
User context to pass to callback.
Definition flecs.h:1383
ecs_flags32_t flags_
Used for internal purposes.
Definition flecs.h:1403
bool yield_existing
When an observer is created, generate events from existing data.
Definition flecs.h:1364
ecs_run_action_t run
Callback invoked on an event.
Definition flecs.h:1380
ecs_entity_t events[8]
Events to observe (OnAdd, OnRemove, OnSet).
Definition flecs.h:1360
Observer builder interface.
Definition builder_i.hpp:17
Base & event()
Specify the event(s) for when the observer should run.
Definition builder_i.hpp:43
observer_builder_i()
Default constructor.
Definition builder_i.hpp:20
Base & ctx(void *ptr)
Set the observer context.
Definition builder_i.hpp:61
Base & yield_existing(bool value=true)
Invoke the observer for anything that matches its query on creation.
Definition builder_i.hpp:49
Base & run(ecs_iter_action_t action)
Set the observer run callback.
Definition builder_i.hpp:67
Base & event(entity_t evt)
Specify the event(s) for when the observer should run.
Definition builder_i.hpp:34
observer_builder_i(ecs_observer_desc_t *desc)
Construct from an observer descriptor.
Definition builder_i.hpp:26
Base & observer_flags(ecs_flags32_t flags)
Set the observer flags.
Definition builder_i.hpp:55
Query builder interface.
Definition builder_i.hpp:18
Typed query.
Definition impl.hpp:220
Base & desc()
Use with cascade() to iterate results in descending (bottom-to-top) order.
Base & flags(flecs::flags64_t flags)
Override the term ID flags.
Definition builder_i.hpp:74