Flecs v3.2
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 : filter_builder_i<Base, Components ...> {
18 using BaseClass = filter_builder_i<Base, Components ...>;
20 : BaseClass(nullptr)
21 , m_desc(nullptr)
22 , m_event_count(0) { }
23
25 : BaseClass(&desc->filter)
26 , m_desc(desc)
27 , m_event_count(0) { }
28
32 Base& event(entity_t evt) {
33 m_desc->events[m_event_count ++] = evt;
34 return *this;
35 }
36
40 template <typename E>
41 Base& event() {
42 m_desc->events[m_event_count ++] = _::cpp_type<E>().id(world_v());
43 return *this;
44 }
45
47 Base& yield_existing(bool value = true) {
48 m_desc->yield_existing = value;
49 return *this;
50 }
51
53 Base& ctx(void *ptr) {
54 m_desc->ctx = ptr;
55 return *this;
56 }
57
59 Base& run(ecs_iter_action_t action) {
60 m_desc->run = action;
61 return *this;
62 }
63
64protected:
65 virtual flecs::world_t* world_v() = 0;
66
67private:
68 operator Base&() {
69 return *static_cast<Base*>(this);
70 }
71
72 ecs_observer_desc_t *m_desc;
73 int32_t m_event_count;
74};
75
76}
Filter builder interface.
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition flecs.h:540
Used with ecs_observer_init().
Definition flecs.h:1104
ecs_filter_desc_t filter
Filter for observer.
Definition flecs.h:1111
ecs_entity_t events[(8)]
Events to observe (OnAdd, OnRemove, OnSet, UnSet)
Definition flecs.h:1114
void * ctx
User context to pass to callback.
Definition flecs.h:1133
bool yield_existing
When observer is created, generate events from existing data.
Definition flecs.h:1119
ecs_run_action_t run
Callback invoked on an event.
Definition flecs.h:1130
Filter builder interface.
Definition builder_i.hpp:18
Observer builder interface.
Definition builder_i.hpp:17
Base & event()
Specify the event(s) for when the observer should run.
Definition builder_i.hpp:41
Base & ctx(void *ptr)
Set observer context.
Definition builder_i.hpp:53
Base & yield_existing(bool value=true)
Invoke observer for anything that matches its filter on creation.
Definition builder_i.hpp:47
Base & run(ecs_iter_action_t action)
Set observer run callback.
Definition builder_i.hpp:59
Base & event(entity_t evt)
Specify the event(s) for when the observer should run.
Definition builder_i.hpp:32