Flecs v4.0
A fast entity component system (ECS) for C & C++
|
The world. More...
#include <world.hpp>
Public Member Functions | |
world () | |
Create world. | |
world (int argc, char *argv[]) | |
Create world with command line arguments. | |
world (world_t *w) | |
Create world from C world. | |
world (const world &obj) | |
Not allowed to copy a world. | |
world & | operator= (const world &obj) noexcept |
world (world &&obj) noexcept | |
world & | operator= (world &&obj) noexcept |
void | release () |
operator world_t * () const | |
void | make_owner () |
Make current world object owner of the world. | |
void | reset () |
Deletes and recreates the world. | |
world_t * | c_ptr () const |
Obtain pointer to C world object. | |
void | quit () const |
Signal application should quit. | |
void | atfini (ecs_fini_action_t action, void *ctx=nullptr) const |
Register action to be executed when world is destroyed. | |
bool | should_quit () const |
Test if quit() has been called. | |
ecs_ftime_t | frame_begin (float delta_time=0) const |
Begin frame. | |
void | frame_end () const |
End frame. | |
bool | readonly_begin (bool multi_threaded=false) const |
Begin readonly mode. | |
void | readonly_end () const |
End readonly mode. | |
bool | defer_begin () const |
Defer operations until end of frame. | |
bool | defer_end () const |
End block of operations to defer. | |
bool | is_deferred () const |
Test whether deferring is enabled. | |
void | set_stage_count (int32_t stages) const |
Configure world to have N stages. | |
int32_t | get_stage_count () const |
Get number of configured stages. | |
int32_t | get_stage_id () const |
Get current stage id. | |
bool | is_stage () const |
Test if is a stage. | |
void | merge () const |
Merge world or stage. | |
flecs::world | get_stage (int32_t stage_id) const |
Get stage-specific world pointer. | |
flecs::world | async_stage () const |
Create asynchronous stage. | |
flecs::world | get_world () const |
Get actual world. | |
bool | is_readonly () const |
Test whether the current world object is readonly. | |
void | set_ctx (void *ctx, ecs_ctx_free_t ctx_free=nullptr) const |
Set world context. | |
void * | get_ctx () const |
Get world context. | |
void | set_binding_ctx (void *ctx, ecs_ctx_free_t ctx_free=nullptr) const |
Set world binding context. | |
void * | get_binding_ctx () const |
Get world binding context. | |
void | dim (int32_t entity_count) const |
Preallocate memory for number of entities. | |
void | set_entity_range (entity_t min, entity_t max) const |
Set entity range. | |
void | enable_range_check (bool enabled=true) const |
Enforce that operations cannot modify entities outside of range. | |
flecs::entity | set_scope (const flecs::entity_t scope) const |
Set current scope. | |
flecs::entity | get_scope () const |
Get current scope. | |
template<typename T > | |
flecs::entity | set_scope () const |
Same as set_scope but with type. | |
flecs::entity_t * | set_lookup_path (const flecs::entity_t *search_path) const |
Set search path. | |
flecs::entity | lookup (const char *name, const char *sep="::", const char *root_sep="::", bool recursive=true) const |
Lookup entity by name. | |
template<typename T , if_t< !is_callable< T >::value > = 0> | |
void | set (const T &value) const |
Set singleton component. | |
template<typename T , if_t< !is_callable< T >::value > = 0> | |
void | set (T &&value) const |
Set singleton component. | |
template<typename First , typename Second , typename P = flecs::pair<First, Second>, typename A = actual_type_t<P>, if_not_t< flecs::is_pair< First >::value > = 0> | |
void | set (const A &value) const |
Set singleton pair. | |
template<typename First , typename Second , typename P = flecs::pair<First, Second>, typename A = actual_type_t<P>, if_not_t< flecs::is_pair< First >::value > = 0> | |
void | set (A &&value) const |
Set singleton pair. | |
template<typename First , typename Second > | |
void | set (Second second, const First &value) const |
Set singleton pair. | |
template<typename First , typename Second > | |
void | set (Second second, First &&value) const |
Set singleton pair. | |
template<typename Func , if_t< is_callable< Func >::value > = 0> | |
void | set (const Func &func) const |
Set singleton component inside a callback. | |
template<typename T , typename ... Args> | |
void | emplace (Args &&... args) const |
template<typename T > | |
T & | ensure () const |
Ensure singleton component. | |
template<typename T > | |
void | modified () const |
Mark singleton component as modified. | |
template<typename T > | |
ref< T > | get_ref () const |
Get ref singleton component. | |
template<typename T > | |
const T * | get () const |
Get singleton component. | |
template<typename First , typename Second , typename P = flecs::pair<First, Second>, typename A = actual_type_t<P>> | |
const A * | get () const |
Get singleton pair. | |
template<typename First , typename Second > | |
const First * | get (Second second) const |
Get singleton pair. | |
template<typename Func , if_t< is_callable< Func >::value > = 0> | |
void | get (const Func &func) const |
Get singleton component inside a callback. | |
template<typename T > | |
T * | get_mut () const |
Get mutable singleton component. | |
template<typename First , typename Second , typename P = flecs::pair<First, Second>, typename A = actual_type_t<P>> | |
A * | get_mut () const |
Get mutable singleton pair. | |
template<typename First , typename Second > | |
First * | get_mut (Second second) const |
Get mutable singleton pair. | |
template<typename T > | |
bool | has () const |
Test if world has singleton component. | |
template<typename First , typename Second > | |
bool | has () const |
Test if world has the provided pair. | |
template<typename First > | |
bool | has (flecs::id_t second) const |
Test if world has the provided pair. | |
bool | has (flecs::id_t first, flecs::id_t second) const |
Test if world has the provided pair. | |
template<typename T > | |
void | add () const |
Add singleton component. | |
template<typename First , typename Second > | |
void | add () const |
Adds a pair to the singleton component. | |
template<typename First > | |
void | add (flecs::entity_t second) const |
Adds a pair to the singleton component. | |
void | add (flecs::entity_t first, flecs::entity_t second) const |
Adds a pair to the singleton entity. | |
template<typename T > | |
void | remove () const |
Remove singleton component. | |
template<typename First , typename Second > | |
void | remove () const |
Removes the pair singleton component. | |
template<typename First > | |
void | remove (flecs::entity_t second) const |
Removes the pair singleton component. | |
void | remove (flecs::entity_t first, flecs::entity_t second) const |
Removes the pair singleton component. | |
template<typename Func > | |
void | children (Func &&f) const |
Iterate entities in root of world Accepts a callback with the following signature: | |
template<typename T > | |
flecs::entity | singleton () const |
Get singleton entity for type. | |
template<typename First > | |
flecs::entity | target (int32_t index=0) const |
Get target for a given pair from a singleton entity. | |
template<typename T > | |
flecs::entity | target (flecs::entity_t first, int32_t index=0) const |
Get target for a given pair from a singleton entity. | |
flecs::entity | target (flecs::entity_t first, int32_t index=0) const |
Get target for a given pair from a singleton entity. | |
template<typename T > | |
flecs::entity | use (const char *alias=nullptr) const |
Create alias for component. | |
flecs::entity | use (const char *name, const char *alias=nullptr) const |
Create alias for entity. | |
void | use (flecs::entity entity, const char *alias=nullptr) const |
Create alias for entity. | |
int | count (flecs::id_t component_id) const |
Count entities matching a component. | |
int | count (flecs::entity_t first, flecs::entity_t second) const |
Count entities matching a pair. | |
template<typename T > | |
int | count () const |
Count entities matching a component. | |
template<typename First > | |
int | count (flecs::entity_t second) const |
Count entities matching a pair. | |
template<typename First , typename Second > | |
int | count () const |
Count entities matching a pair. | |
template<typename Func > | |
void | with (id_t with_id, const Func &func) const |
All entities created in function are created with id. | |
template<typename T , typename Func > | |
void | with (const Func &func) const |
All entities created in function are created with type. | |
template<typename First , typename Second , typename Func > | |
void | with (const Func &func) const |
All entities created in function are created with pair. | |
template<typename First , typename Func > | |
void | with (id_t second, const Func &func) const |
All entities created in function are created with pair. | |
template<typename Func > | |
void | with (id_t first, id_t second, const Func &func) const |
All entities created in function are created with pair. | |
template<typename Func > | |
void | scope (id_t parent, const Func &func) const |
All entities created in function are created in scope. | |
template<typename T , typename Func > | |
void | scope (const Func &func) const |
Same as scope(parent, func), but with T as parent. | |
flecs::scoped_world | scope (id_t parent) const |
Use provided scope for operations ran on returned world. | |
template<typename T > | |
flecs::scoped_world | scope () const |
flecs::scoped_world | scope (const char *name) const |
void | delete_with (id_t the_id) const |
Delete all entities with specified id. | |
void | delete_with (entity_t first, entity_t second) const |
Delete all entities with specified pair. | |
template<typename T > | |
void | delete_with () const |
Delete all entities with specified component. | |
template<typename First , typename Second > | |
void | delete_with () const |
Delete all entities with specified pair. | |
template<typename First > | |
void | delete_with (entity_t second) const |
Delete all entities with specified pair. | |
void | remove_all (id_t the_id) const |
Remove all instances of specified id. | |
void | remove_all (entity_t first, entity_t second) const |
Remove all instances of specified pair. | |
template<typename T > | |
void | remove_all () const |
Remove all instances of specified component. | |
template<typename First , typename Second > | |
void | remove_all () const |
Remove all instances of specified pair. | |
template<typename First > | |
void | remove_all (entity_t second) const |
Remove all instances of specified pair. | |
template<typename Func > | |
void | defer (const Func &func) const |
Defer all operations called in function. | |
void | defer_suspend () const |
Suspend deferring operations. | |
void | defer_resume () const |
Resume deferring operations. | |
bool | exists (flecs::entity_t e) const |
Check if entity id exists in the world. | |
bool | is_alive (flecs::entity_t e) const |
Check if entity id exists in the world. | |
bool | is_valid (flecs::entity_t e) const |
Check if entity id is valid. | |
flecs::entity | get_alive (flecs::entity_t e) const |
Get alive entity for id. | |
flecs::entity | make_alive (flecs::entity_t e) const |
void | set_version (flecs::entity_t e) const |
Set version of entity to provided. | |
void | run_post_frame (ecs_fini_action_t action, void *ctx) const |
const flecs::world_info_t * | get_info () const |
Get the world info. | |
ecs_ftime_t | delta_time () const |
Get delta_time. | |
void | init_builtin_components () |
template<typename... Comps, typename... Args> | |
flecs::alert_builder< Comps... > | alert (Args &&... args) const |
Create alert. | |
template<typename T , typename... Args> | |
flecs::component< T > | component (Args &&... args) const |
Find or register component. | |
template<typename... Args> | |
flecs::untyped_component | component (Args &&... args) const |
Find or register untyped component. | |
template<typename... Args> | |
flecs::entity | entity (Args &&... args) const |
Create an entity. | |
template<typename E , if_t< is_enum< E >::value > = 0> | |
flecs::id | id (E value) const |
Convert enum constant to entity. | |
template<typename E , if_t< is_enum< E >::value > = 0> | |
flecs::entity | entity (E value) const |
Convert enum constant to entity. | |
template<typename... Args> | |
flecs::entity | prefab (Args &&... args) const |
Create a prefab. | |
template<typename T > | |
flecs::entity | entity (const char *name=nullptr) const |
Create an entity that's associated with a type. | |
template<typename T > | |
flecs::entity | prefab (const char *name=nullptr) const |
Create a prefab that's associated with a type. | |
template<typename E , if_t< is_enum< E >::value > = 0> | |
flecs::entity | to_entity (E constant) const |
Convert enum constant to entity. | |
flecs::event_builder | event (flecs::entity_t evt) const |
Create a new event. | |
template<typename E > | |
flecs::event_builder_typed< E > | event () const |
Create a new event. | |
template<typename T > | |
flecs::id | id () const |
template<typename ... Args> | |
flecs::id | id (Args &&... args) const |
template<typename T > | |
flecs::id | id () const |
Get id from a type. | |
template<typename ... Args> | |
flecs::id | id (Args &&... args) const |
Id factory. | |
template<typename First , typename Second > | |
flecs::id | pair () const |
Get pair id from relationship, object. | |
template<typename First > | |
flecs::id | pair (entity_t o) const |
Get pair id from relationship, object. | |
flecs::id | pair (entity_t r, entity_t o) const |
Get pair id from relationship, object. | |
flecs::string | to_json (flecs::entity_t tid, const void *value) |
Serialize untyped value to JSON. | |
template<typename T > | |
flecs::string | to_json (const T *value) |
Serialize value to JSON. | |
flecs::string | to_json () |
Serialize world to JSON. | |
const char * | from_json (flecs::entity_t tid, void *value, const char *json, flecs::from_json_desc_t *desc=nullptr) |
Deserialize value from JSON. | |
template<typename T > | |
const char * | from_json (T *value, const char *json, flecs::from_json_desc_t *desc=nullptr) |
Deserialize value from JSON. | |
const char * | from_json (const char *json, flecs::from_json_desc_t *desc=nullptr) |
Deserialize JSON into world. | |
const char * | from_json_file (const char *json, flecs::from_json_desc_t *desc=nullptr) |
Deserialize JSON file into world. | |
template<typename... Args> | |
flecs::metric_builder | metric (Args &&... args) const |
Create metric. | |
template<typename T > | |
flecs::timer | timer () const |
Find or register a singleton timer. | |
flecs::app_builder | app () |
Return app builder. | |
Public Attributes | |
world_t * | world_ |
flecs::cursor | cursor (flecs::entity_t tid, void *ptr) |
Return meta cursor to value. | |
template<typename T > | |
flecs::cursor | cursor (void *ptr) |
Return meta cursor to value. | |
flecs::entity | primitive (flecs::meta::primitive_kind_t kind) |
Create primitive type. | |
flecs::entity | array (flecs::entity_t elem_id, int32_t array_count) |
Create array type. | |
template<typename T > | |
flecs::entity | array (int32_t array_count) |
Create array type. | |
flecs::entity | vector (flecs::entity_t elem_id) |
Create vector type. | |
template<typename T > | |
flecs::entity | vector () |
Create vector type. | |
template<typename Module > | |
flecs::entity | module (const char *name=nullptr) const |
Define a module. | |
template<typename Module > | |
flecs::entity | import () |
Import a module. | |
flecs::observer | observer (flecs::entity e) const |
Observer builder. | |
template<typename... Components, typename... Args> | |
flecs::observer_builder< Components... > | observer (Args &&... args) const |
Create a new observer. | |
flecs::pipeline_builder | pipeline () const |
Create a new pipeline. | |
template<typename Pipeline , if_not_t< is_enum< Pipeline >::value > = 0> | |
flecs::pipeline_builder | pipeline () const |
Create a new pipeline. | |
void | set_pipeline (const flecs::entity pip) const |
Set pipeline. | |
template<typename Pipeline > | |
void | set_pipeline () const |
Set pipeline. | |
flecs::entity | get_pipeline () const |
Get pipeline. | |
bool | progress (ecs_ftime_t delta_time=0.0) const |
Progress world one tick. | |
void | run_pipeline (const flecs::entity_t pip, ecs_ftime_t delta_time=0.0) const |
Run pipeline. | |
template<typename Pipeline , if_not_t< is_enum< Pipeline >::value > = 0> | |
void | run_pipeline (ecs_ftime_t delta_time=0.0) const |
Run pipeline. | |
void | set_time_scale (ecs_ftime_t mul) const |
Set timescale. | |
void | set_target_fps (ecs_ftime_t target_fps) const |
Set target FPS. | |
void | reset_clock () const |
Reset simulation clock. | |
void | set_threads (int32_t threads) const |
Set number of threads. | |
int32_t | get_threads () const |
Set number of threads. | |
void | set_task_threads (int32_t task_threads) const |
Set number of task threads. | |
bool | using_task_threads () const |
Returns true if task thread use has been requested. | |
template<typename... Comps, typename... Args> | |
flecs::query< Comps... > | query (Args &&... args) const |
Create a query. | |
flecs::query | query (flecs::entity query_entity) const |
Create a query from entity. | |
template<typename... Comps, typename... Args> | |
flecs::query_builder< Comps... > | query_builder (Args &&... args) const |
Create a query builder. | |
template<typename Func > | |
void | each (Func &&func) const |
Iterate over all entities with components in argument list of function. | |
template<typename T , typename Func > | |
void | each (Func &&func) const |
Iterate over all entities with provided component. | |
template<typename Func > | |
void | each (flecs::id_t term_id, Func &&func) const |
Iterate over all entities with provided (component) id. | |
flecs::system | system (flecs::entity e) const |
Upcast entity to a system. | |
template<typename... Components, typename... Args> | |
flecs::system_builder< Components... > | system (Args &&... args) const |
Create a new system. | |
template<typename... Args> | |
flecs::term | term (Args &&... args) const |
Create a term. | |
template<typename T > | |
flecs::term | term () const |
Create a term for a (component) type. | |
template<typename First , typename Second > | |
flecs::term | term () const |
Create a term for a pair. | |
The world.
The world is the container of all ECS data and systems. If the world is deleted, all data in the world will be deleted as well.
|
inlineexplicit |
|
inlineexplicit |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Create asynchronous stage.
An asynchronous stage can be used to asynchronously queue operations for later merging with the world. An asynchronous stage is similar to a regular stage, except that it does not allow reading from the world.
Asynchronous stages are never merged automatically, and must therefore be manually merged with the ecs_merge function. It is not necessary to call defer_begin or defer_end before and after enqueuing commands, as an asynchronous stage unconditionally defers operations.
The application must ensure that no commands are added to the stage while the stage is being merged.
|
inline |
|
inline |
|
inline |
Iterate entities in root of world Accepts a callback with the following signature:
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Defer all operations called in function.
|
inline |
Defer operations until end of frame.
When this operation is invoked while iterating, operations inbetween the defer_begin() and defer_end() operations are executed at the end of the frame.
This operation is thread safe.
|
inline |
End block of operations to defer.
See defer_begin().
This operation is thread safe.
|
inline |
Resume deferring operations.
|
inline |
Suspend deferring operations.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Enforce that operations cannot modify entities outside of range.
This function ensures that only entities within the specified range can be modified. Use this function if specific parts of the code only are allowed to modify a certain set of entities, as could be the case for networked applications.
enabled | True if range check should be enabled, false if not. |
|
inline |
|
inline |
Check if entity id exists in the world.
|
inline |
Begin frame.
When an application does not use progress() to control the main loop, it can still use Flecs features such as FPS limiting and time measurements. This operation needs to be invoked whenever a new frame is about to get processed.
Calls to frame_begin() must always be followed by frame_end().
The function accepts a delta_time parameter, which will get passed to systems. This value is also used to compute the amount of time the function needs to sleep to ensure it does not exceed the target_fps, when it is set. When 0 is provided for delta_time, the time will be measured.
This function should only be ran from the main thread.
delta_time | Time elapsed since the last frame. |
|
inline |
End frame.
This operation must be called at the end of the frame, and always after frame_begin().
This function should only be ran from the main thread.
|
inline |
const A * flecs::world::get | ( | ) | const |
|
inline |
const First * flecs::world::get | ( | Second | second | ) | const |
|
inline |
|
inline |
Get world binding context.
This operation retrieves a previously set world binding context.
|
inline |
Get world context.
This operation retrieves a previously set world context.
|
inline |
T * flecs::world::get_mut | ( | ) | const |
A * flecs::world::get_mut | ( | ) | const |
First * flecs::world::get_mut | ( | Second | second | ) | const |
|
inline |
|
inline |
Get current scope.
|
inline |
Get stage-specific world pointer.
Flecs threads can safely invoke the API as long as they have a private context to write to, also referred to as the stage. This function returns a pointer to a stage, disguised as a world pointer.
Note that this function does not(!) create a new world. It simply wraps the existing world in a thread-specific context, which the API knows how to unwrap. The reason the stage is returned as an ecs_world_t is so that it can be passed transparently to the existing API functions, vs. having to create a dediated API for threading.
stage_id | The index of the stage to retrieve. |
|
inline |
Get number of configured stages.
Return number of stages set by set_stage_count().
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Check if entity id exists in the world.
|
inline |
Test whether deferring is enabled.
|
inline |
Test whether the current world object is readonly.
This function allows the code to test whether the currently used world object is readonly or whether it allows for writing.
|
inline |
|
inline |
Check if entity id is valid.
Invalid entities cannot be used with API functions.
|
inline |
|
inline |
|
inline |
Make current world object owner of the world.
This may only be called on one flecs::world object, an may only be called once. Failing to do so will result in undefined behavior.
This operation allows a custom (C) world to be wrapped by a C++ object, and transfer ownership so that the world is automatically cleaned up.
|
inline |
Merge world or stage.
When automatic merging is disabled, an application can call this operation on either an individual stage, or on the world which will merge all stages. This operation may only be called when staging is not enabled (either after progress() or after readonly_end()).
This operation may be called on an already merged stage or world.
|
inline |
|
inline |
Signal application should quit.
After calling this operation, the next call to progress() returns false.
|
inline |
Begin readonly mode.
multi_threaded | Whether to enable readonly/multi threaded mode. |
|
inline |
End readonly mode.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Set world binding context.
Same as set_ctx() but for binding context. A binding context is intended specifically for language bindings to store binding specific data.
ctx | A pointer to a user defined structure. |
ctx_free | A function that is invoked with ctx when the world is freed. |
|
inline |
Set world context.
Set a context value that can be accessed by anyone that has a reference to the world.
ctx | A pointer to a user defined structure. |
ctx_free | A function that is invoked with ctx when the world is freed. |
|
inline |
Set entity range.
This function limits the range of issued entity ids between min and max.
min | Minimum entity id issued. |
max | Maximum entity id issued. |
|
inline |
Set search path.
|
inline |
Same as set_scope but with type.
|
inline |
Set current scope.
scope | The scope to set. |
|
inline |
Configure world to have N stages.
This initializes N stages, which allows applications to defer operations to multiple isolated defer queues. This is typically used for applications with multiple threads, where each thread gets its own queue, and commands are merged when threads are synchronized.
Note that set_threads() already creates the appropriate number of stages. The set_stage_count() operation is useful for applications that want to manage their own stages and/or threads.
stages | The number of stages. |
|
inline |
Set version of entity to provided.
|
inline |
|
inline |
|
inline |
Get target for a given pair from a singleton entity.
This operation returns the target for a given pair. The optional index can be used to iterate through targets, in case the entity has multiple instances for the same relationship.
first | The first element of the pair for which to retrieve the target. |
index | The index (0 for the first instance of the relationship). |
|
inline |
Get target for a given pair from a singleton entity.
This operation returns the target for a given pair. The optional index can be used to iterate through targets, in case the entity has multiple instances for the same relationship.
first | The first element of the pair for which to retrieve the target. |
index | The index (0 for the first instance of the relationship). |
|
inline |
Get target for a given pair from a singleton entity.
This operation returns the target for a given pair. The optional index can be used to iterate through targets, in case the entity has multiple instances for the same relationship.
First | The first element of the pair. |
index | The index (0 for the first instance of the relationship). |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |