Flecs v3.2
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
impl.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include "builder.hpp"
9
10namespace flecs
11{
12
13struct observer final : entity
14{
15 using entity::entity;
16
17 explicit observer() : entity() { }
18
19 observer(flecs::world_t *world, ecs_observer_desc_t *desc, bool instanced)
20 {
21 if (!desc->filter.instanced) {
22 desc->filter.instanced = instanced;
23 }
24
25 m_world = world;
26 m_id = ecs_observer_init(world, desc);
27
28 if (desc->filter.terms_buffer) {
29 ecs_os_free(desc->filter.terms_buffer);
30 }
31 }
32
33 void ctx(void *ctx) {
34 ecs_observer_desc_t desc = {};
35 desc.entity = m_id;
36 desc.ctx = ctx;
37 ecs_observer_init(m_world, &desc);
38 }
39
40 void* ctx() const {
41 return ecs_observer_get_ctx(m_world, m_id);
42 }
43
44 flecs::filter<> query() const {
45 const flecs::Poly *poly = this->get<flecs::Poly>(flecs::Observer);
46 const ecs_observer_t *ob = static_cast<const flecs::observer_t*>(poly->poly);
47 return flecs::filter<>(m_world, &ob->filter);
48 }
49};
50
51// Mixin implementation
53 return flecs::observer(m_world, e);
54}
55
56template <typename... Comps, typename... Args>
57inline observer_builder<Comps...> world::observer(Args &&... args) const {
58 return flecs::observer_builder<Comps...>(m_world, FLECS_FWD(args)...);
59}
60
61} // namespace flecs
flecs::observer observer(flecs::entity e) const
Observer builder.
ecs_entity_t ecs_observer_init(ecs_world_t *world, const ecs_observer_desc_t *desc)
Create observer.
void * ecs_observer_get_ctx(const ecs_world_t *world, ecs_entity_t observer)
Get observer ctx.
Observer builder.
Component for storing a poly object.
Definition flecs.h:1322
ecs_poly_t * poly
Pointer to poly object.
Definition flecs.h:1323
ecs_term_t * terms_buffer
For filters with lots of terms an outside array can be provided.
Definition flecs.h:1006
bool instanced
When true, terms returned by an iterator may either contain 1 or N elements, where terms with N eleme...
Definition flecs.h:1019
Used with ecs_observer_init().
Definition flecs.h:1104
ecs_entity_t entity
Existing entity to associate with observer (optional)
Definition flecs.h:1108
ecs_filter_desc_t filter
Filter for observer.
Definition flecs.h:1111
void * ctx
User context to pass to callback.
Definition flecs.h:1133
ecs_filter_t filter
Query for observer.
Definition flecs.h:812
Entity.
Definition entity.hpp:30
Observer builder.
Definition builder.hpp:24
The world.
Definition world.hpp:132