Flecs
v4.1
A fast entity component system (ECS) for C & C++
Toggle main menu visibility
Loading...
Searching...
No Matches
impl.hpp
Go to the documentation of this file.
1
5
6
#pragma once
7
8
#include "
builder.hpp
"
9
10
namespace
flecs
11
{
12
13
// Mixin implementation
14
15
inline
flecs::event_builder
world::event
(
flecs::entity_t
evt)
const
{
16
return
flecs::event_builder
(
world_
, evt);
17
}
18
19
template
<
typename
E>
20
inline
flecs::event_builder_typed<E>
world::event
()
const
{
21
return
flecs::event_builder_typed<E>
(
world_
,
_::type<E>
().
id
(
world_
));
22
}
23
24
namespace
_
{
25
inline
void
entity_observer_create(
26
flecs::world_t
*
world
,
27
flecs::entity_t
event
,
28
flecs::entity_t
entity
,
29
ecs_iter_action_t
callback,
30
void
*callback_ctx,
31
ecs_ctx_free_t
callback_ctx_free)
32
{
33
ecs_observer_desc_t
desc = {};
34
desc.
events
[0] = event;
35
desc.
query
.
terms
[0].
id
=
EcsAny
;
36
desc.
query
.
terms
[0].
src
.
id
= entity;
37
desc.
callback
= callback;
38
desc.
callback_ctx
= callback_ctx;
39
desc.
callback_ctx_free
= callback_ctx_free;
40
41
flecs::entity_t
o =
ecs_observer_init
(world, &desc);
42
ecs_add_pair
(world, o,
EcsChildOf
, entity);
43
}
44
45
template
<
typename
Func>
46
struct
entity_observer_factory
{
47
template <typename Evt, if_t<is_empty<Evt>::value> = 0>
48
static
void
create(
49
flecs::world_t
*
world
,
50
flecs::entity_t
entity
,
51
Func&& f)
52
{
53
using
Delegate =
_::entity_observer_delegate<Func>
;
54
auto
ctx = FLECS_NEW(Delegate)(FLECS_FWD(f));
55
entity_observer_create(
world
,
_::type<Evt>::id
(
world
),
entity
, Delegate::run, ctx, _::free_obj<Delegate>);
56
}
57
58
template <typename Evt, if_not_t<is_empty<Evt>::value> = 0>
59
static
void
create(
60
flecs::world_t
*
world
,
61
flecs::entity_t
entity
,
62
Func&& f)
63
{
64
using
Delegate =
_::entity_payload_observer_delegate<Func, Evt>
;
65
auto
ctx = FLECS_NEW(Delegate)(FLECS_FWD(f));
66
entity_observer_create(
world
,
_::type<Evt>::id
(
world
),
entity
, Delegate::run, ctx, _::free_obj<Delegate>);
67
}
68
};
69
}
70
71
template
<
typename
Self>
72
template
<
typename
Func>
73
inline
const
Self&
entity_builder<Self>::observe
(
flecs::entity_t
evt, Func&& f)
const
{
74
using
Delegate =
_::entity_observer_delegate<Func>
;
75
auto
ctx = FLECS_NEW(Delegate)(FLECS_FWD(f));
76
77
_::entity_observer_create(
world_
, evt,
id_
, Delegate::run, ctx, _::free_obj<Delegate>);
78
79
return
to_base();
80
}
81
82
template
<
typename
Self>
83
template
<
typename
Evt,
typename
Func>
84
inline
const
Self&
entity_builder<Self>::observe
(Func&& f)
const
{
85
_::entity_observer_factory<Func>::template
create<Evt>(
86
world_
,
id_
, FLECS_FWD(f));
87
return
to_base();
88
}
89
90
template
<
typename
Self>
91
template
<
typename
Func>
92
inline
const
Self&
entity_builder<Self>::observe
(Func&& f)
const
{
93
return
this->
observe<_::event_from_func_t<Func>
>(FLECS_FWD(f));
94
}
95
96
inline
void
entity_view::emit
(
flecs::entity
evt)
const
{
97
this->
emit
(evt.
id
());
98
}
99
100
inline
void
entity_view::enqueue
(
flecs::entity
evt)
const
{
101
this->
enqueue
(evt.
id
());
102
}
103
104
}
// namespace flecs
EcsChildOf
const ecs_entity_t EcsChildOf
Used to express parent-child relationships.
EcsAny
const ecs_entity_t EcsAny
Any entity ("_").
flecs::world::event
flecs::event_builder_typed< E > event() const
Create a new event.
Definition
impl.hpp:20
flecs::entity_t
ecs_entity_t entity_t
Entity type.
Definition
c_types.hpp:21
flecs::world_t
ecs_world_t world_t
World type.
Definition
c_types.hpp:18
ecs_add_pair
#define ecs_add_pair(world, subject, first, second)
Add a pair to an entity.
Definition
flecs_c.h:322
ecs_iter_action_t
void(* ecs_iter_action_t)(ecs_iter_t *it)
Function prototype for iterables.
Definition
flecs.h:581
ecs_ctx_free_t
void(* ecs_ctx_free_t)(void *ctx)
Function to clean up context data.
Definition
flecs.h:650
ecs_observer_init
ecs_entity_t ecs_observer_init(ecs_world_t *world, const ecs_observer_desc_t *desc)
Create an observer.
builder.hpp
Event builder.
flecs::_
Int to enum.
Definition
component.hpp:18
ecs_observer_desc_t
Used with ecs_observer_init().
Definition
flecs.h:1375
ecs_observer_desc_t::callback_ctx
void * callback_ctx
Context associated with callback (for language bindings).
Definition
flecs.h:1415
ecs_observer_desc_t::query
ecs_query_desc_t query
Query for observer.
Definition
flecs.h:1383
ecs_observer_desc_t::callback_ctx_free
ecs_ctx_free_t callback_ctx_free
Callback to free callback ctx.
Definition
flecs.h:1418
ecs_observer_desc_t::callback
ecs_iter_action_t callback
Callback to invoke on an event, invoked when the observer matches.
Definition
flecs.h:1398
ecs_observer_desc_t::events
ecs_entity_t events[8]
Events to observe (OnAdd, OnRemove, OnSet).
Definition
flecs.h:1386
ecs_query_desc_t::terms
ecs_term_t terms[32]
Query terms.
Definition
flecs.h:1306
ecs_term_ref_t::id
ecs_entity_t id
Entity ID.
Definition
flecs.h:800
ecs_term_t::src
ecs_term_ref_t src
Source of term.
Definition
flecs.h:820
ecs_term_t::id
ecs_id_t id
Component ID to be matched by term.
Definition
flecs.h:815
flecs::_::entity_observer_delegate
Definition
delegate.hpp:577
flecs::_::entity_observer_factory
Definition
impl.hpp:46
flecs::_::entity_payload_observer_delegate
Definition
delegate.hpp:607
flecs::_::type
Definition
flecs.hpp:39
flecs::entity_builder::observe
const Self & observe(flecs::entity_t evt, Func &&callback) const
Observe an event on an entity.
Definition
impl.hpp:73
flecs::entity_view::enqueue
void enqueue() const
Enqueue an event for an entity.
Definition
entity_view.hpp:83
flecs::entity_view::emit
void emit() const
Emit an event for an entity.
Definition
entity_view.hpp:35
flecs::entity_view::id
entity_t id() const
Get entity ID.
Definition
entity_view.hpp:53
flecs::entity
Entity.
Definition
entity.hpp:30
flecs::event_builder_typed
Typed event builder.
Definition
builder.hpp:150
flecs::event_builder
Untyped event builder.
Definition
builder.hpp:144
flecs::id::id_
flecs::id_t id_
The raw ID value.
Definition
decl.hpp:149
flecs::id::world_
flecs::world_t * world_
World is optional, but guarantees that entity identifiers extracted from the ID are valid.
Definition
decl.hpp:147
flecs::world
The world.
Definition
world.hpp:246
flecs::world::world_
world_t * world_
Pointer to the underlying C world.
Definition
world.hpp:1540
flecs::world::event
flecs::event_builder event(flecs::entity_t evt) const
Create a new event.