2#include "gaia/config/config.h"
6#include "gaia/core/span.h"
7#include "gaia/ecs/command_buffer_fwd.h"
8#include "gaia/ecs/id_fwd.h"
9#include "gaia/ecs/query_fwd.h"
16 struct ComponentCacheItem;
17 struct EntityContainer;
22 const ComponentCache& comp_cache(
const World& world);
23 ComponentCache& comp_cache_mut(World& world);
29 const ComponentCacheItem& comp_cache_add(World& world);
33 const EntityContainer& fetch(
const World& world, Entity entity);
34 EntityContainer& fetch_mut(World& world, Entity entity);
41 EntityContainer* try_fetch_mut(World& world, Entity entity);
43 void del(World& world, Entity entity);
45#if GAIA_USE_SAFE_ENTITY
49 void safe_entity_acquire(World& world, Entity entity);
54 void safe_entity_release(World& world, Entity entity);
57 Entity entity_from_id(
const World& world, EntityId
id);
58 Entity id_entity(
const World& world, Entity
id);
59 Entity pair_rel(
const World& world, Entity pair);
60 Entity pair_tgt(
const World& world, Entity pair);
66 bool valid(
const World& world, Entity entity);
68 bool is(
const World& world, Entity entity, Entity baseEntity);
69 bool is_base(
const World& world, Entity entity);
71 Archetype* archetype_from_entity(
const World& world, Entity entity);
73 util::str_view entity_name(
const World& world, Entity entity);
74 util::str_view entity_name(
const World& world, EntityId entityId);
75 Entity target(
const World& world, Entity entity, Entity relation);
78 void world_each_target(
const World& world, Entity entity, Entity relation,
void* ctx,
void (*func)(
void*, Entity));
79 Entity world_pair_target_if_alive(
const World& world, Entity pair);
80 bool world_entity_enabled(
const World& world, Entity entity);
81 bool world_entity_enabled_hierarchy(
const World& world, Entity entity, Entity relation);
82 uint32_t world_enabled_hierarchy_version(
const World& world);
86 uint32_t world_archetype_delete_version(
const World& world);
90 uint32_t world_version(
const World& world);
95 uint32_t world_rel_version(
const World& world, Entity relation);
97 bool world_relation_is_non_fragmenting(
const World& world, Entity relation);
99 bool world_relation_is_hierarchy(
const World& world, Entity relation);
101 bool world_relation_is_fragmenting(
const World& world, Entity relation);
103 bool world_relation_is_fragmenting_hierarchy(
const World& world, Entity relation);
105 bool world_relation_supports_depth_order(
const World& world, Entity relation);
107 bool world_relation_depth_order_prunes_disabled_subtrees(
const World& world, Entity relation);
108 template <
typename T>
109 decltype(
auto) world_query_entity_arg_by_id(World& world, Entity entity, Entity
id);
113 template <
typename Func>
114 void as_relations_trav(
const World& world, Entity target, Func func);
115 template <
typename Func>
116 bool as_relations_trav_if(
const World& world, Entity target, Func func);
117 template <
typename Func>
118 void as_targets_trav(
const World& world, Entity relation, Func func);
119 template <
typename Func>
120 bool as_targets_trav_if(
const World& world, Entity relation, Func func);
121 template <
typename Func>
122 void targets_trav(
const World& world, Entity relation, Entity source, Func func);
123 template <
typename Func>
124 bool targets_trav_if(
const World& world, Entity relation, Entity source, Func func);
125 const cnt::darray<Entity>& targets_trav_cache(
const World& world, Entity relation, Entity source);
126 template <
typename Func>
127 void sources(
const World& world, Entity relation, Entity target, Func func);
128 template <
typename Func>
129 void sources_if(
const World& world, Entity relation, Entity target, Func func);
130 const cnt::darray<Entity>& sources_bfs_trav_cache(
const World& world, Entity relation, Entity rootTarget);
131 template <
typename Func>
132 void sources_bfs(
const World& world, Entity relation, Entity rootTarget, Func func);
133 template <
typename Func>
134 bool sources_bfs_if(
const World& world, Entity relation, Entity rootTarget, Func func);
137 QuerySerBuffer& query_buffer(World& world, QueryId& serId);
138 void query_buffer_reset(World& world, QueryId& serId);
140 Entity expr_to_entity(
const World& world, va_list& args, std::span<const char> exprRaw);
142 GroupId group_by_func_default(
const World& world,
const Archetype& archetype, Entity groupBy);
146 void lock(World& world);
147 void unlock(World& world);
148 bool locked(
const World& world);
150#if GAIA_OBSERVERS_ENABLED
157 void world_defer_on_set_begin(World& world, uint32_t slotCount);
158 void world_defer_on_set_end(World& world);
171 inline static constexpr uint32_t BadDeferSlot = (uint32_t)-1;
173 void world_defer_sort_inv_begin(World& world, uint32_t slotCount);
174 void world_defer_sort_inv_end(World& world);
178 void world_defer_parallel_begin(World& world, uint32_t itemCount);
179 void world_defer_parallel_end(World& world);
186 GAIA_NODISCARD
inline uint32_t& defer_slot_ref() {
187 static thread_local uint32_t s_slot = BadDeferSlot;
192 GAIA_NODISCARD
inline uint32_t defer_slot() {
193 return defer_slot_ref();
201 explicit DeferSlotScope(uint32_t slot): m_prev(defer_slot_ref()) {
202 defer_slot_ref() = slot;
205 defer_slot_ref() = m_prev;
218 void commit_cmd_buffer_st(
World& world);
219 void commit_cmd_buffer_mt(
World& world);
Binds the calling thread to a work-item deferral slot for the lifetime of the scope.
Definition api.h:197
Owns entities, components, archetypes, queries, observers, and systems.
Definition world.h:80
Buffer for deferred execution of some operations on entities.
Definition command_buffer.h:56