Skip to content

Instantly share code, notes, and snippets.

@SanderMertens
Last active April 19, 2020 21:45
Show Gist options
  • Save SanderMertens/997c5b6832648ffa5f1c544a70fa608c to your computer and use it in GitHub Desktop.
Save SanderMertens/997c5b6832648ffa5f1c544a70fa608c to your computer and use it in GitHub Desktop.
/* -- Create single entity -- */
FLECS_EXPORT
ecs_entity_t ecs_new_w_entity(
ecs_world_t *world,
ecs_entity_t component);
FLECS_EXPORT
ecs_entity_t ecs_new_w_type(
ecs_world_t *world,
ecs_type_t type);
#define ecs_new(world, type)\
ecs_new_type(world, T##type)
/* -- Bulk create entities -- */
FLECS_EXPORT
ecs_entity_t ecs_bulk_new_w_entity(
ecs_world_t *world,
ecs_entity_t component,
int32_t count,
void** data);
FLECS_EXPORT
ecs_entity_t ecs_bulk_new_w_type(
ecs_world_t *world,
ecs_type_t type,
int32_t count,
void** data);
#define ecs_bulk_new(world, type, count)\
ecs_bulk_new_w_type(world, T##type, count)
/* -- Add components -- */
FLECS_EXPORT
void ecs_add_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component);
FLECS_EXPORT
void ecs_add_type(
ecs_world_t *world,
ecs_entity_t entity,
ecs_type_t type);
#define ecs_add(world, entity, type)\
ecs_add_type(world, entity, T##type)
/* -- Remove components -- */
FLECS_EXPORT
void ecs_remove_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component);
FLECS_EXPORT
void ecs_remove_type(
ecs_world_t *world,
ecs_entity_t entity,
ecs_type_t type);
#define ecs_remove(world, entity, type)\
ecs_remove_type(world, entity, T##type)
/* -- Bulk add -- */
FLECS_EXPORT
void ecs_bulk_add_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component,
ecs_filter_t *filter);
FLECS_EXPORT
void ecs_bulk_add_type(
ecs_world_t *world,
ecs_entity_t entity,
ecs_type_t type,
ecs_filter_t *filter);
#define ecs_bulk_add(world, entity, type, filter)\
ecs_bulk_add_type(world, entity, T##type, filter)
/* -- Bulk remove -- */
FLECS_EXPORT
void ecs_bulk_remove_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component,
ecs_filter_t *filter);
FLECS_EXPORT
void ecs_bulk_remove_type(
ecs_world_t *world,
ecs_entity_t entity,
ecs_type_t type,
ecs_filter_t *filter);
#define ecs_bulk_remove_world, entity, type, filter)\
ecs_bulk_remove_type(world, entity, T##type, filter)
/* -- Delete & bulk delete -- */
FLECS_EXPORT
void ecs_delete(
ecs_world_t *world,
ecs_entity_t entity);
FLECS_EXPORT
void ecs_bulk_delete(
ecs_world_t *world,
const ecs_filter_t *filter);
/* -- Copy -- */
FLECS_EXPORT
ecs_entity_t ecs_copy(
ecs_world_t *world,
ecs_entity_t dst,
ecs_entity_t src,
bool copy_value);
/* -- Get -- */
FLECS_EXPORT
const void* ecs_get_ptr_w_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component);
#define ecs_get_ptr(world, entity, component)\
(component*)ecs_get_ptr_w_entity(world, entity, E##component)
#define ecs_get(world, entity, component)\
(*(component*)ecs_get_ptr_w_entity(world, entity, E##component))
/* -- Get cached -- */
FLECS_EXPORT
void* ecs_get_cached_ptr_w_entity(
ecs_world_t *world,
ecs_cached_ptr_t *cached_ptr,
ecs_entity_t entity,
ecs_entity_t component);
#define ecs_get_cached_ptr(world, cached_ptr, entity, component)\
(component*)ecs_get_cached_ptr_w_entity(world, cached_ptr, entity, E##component)
/* -- Get mutable -- */
FLECS_EXPORT
void* ecs_get_mutable_w_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component,
size_t size,
bool *is_added);
#define ecs_get_mutable(world, entity, component, is_added)\
ecs_get_mutable_w_entity(world, entity, ecs_entity(component), sizeof(component), is_added)
/* -- Modified -- */
FLECS_EXPORT
void ecs_modified_w_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component);
#define ecs_modified(world, entity, component)\
ecs_modified_w_entity(world, entity, ecs_entity(component))
/* -- Set -- */
FLECS_EXPORT
ecs_entity_t ecs_set_ptr_w_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component,
size_t size,
const void *ptr);
#define ecs_set_ptr(world, entity, component, ptr)\
ecs_set_ptr_w_entity(world, entity, ecs_entity(component), sizeof(component), ptr)
/* Conditionally skip macro's as compound literals are not supported in C89 */
#ifndef __BAKE_LEGACY__
#define ecs_set(world, entity, component, ...)\
ecs_set_ptr_w_entity(world, entity, ecs_entity(component), sizeof(component), &(component)__VA_ARGS__)
#endif
/* -- Has -- */
FLECS_EXPORT
bool ecs_has_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component);
FLECS_EXPORT
bool ecs_has_type(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component);
#define ecs_has(world, entity, type)\
ecs_has_type(world, entity, T##type)
/* -- Has owned -- */
FLECS_EXPORT
bool ecs_has_owned_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component,
bool owned);
FLECS_EXPORT
bool ecs_has_owned_type(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component,
bool owned);
#define ecs_has_owned(world, entity, type, owned)\
ecs_has_type(world, entity, T##type, owned)
/* -- Entity info -- */
FLECS_EXPORT
ecs_type_t ecs_get_type(
ecs_world_t *world,
ecs_entity_t entity);
FLECS_EXPORT
const char* ecs_get_name(
ecs_world_t *world,
ecs_entity_t entity);
FLECS_EXPORT
bool ecs_get_watched(
ecs_world_t *world,
ecs_entity_t entity);
/* -- Count entities -- */
FLECS_EXPORT
int32_t _ecs_count(
ecs_world_t *world,
ecs_type_t type);
#define ecs_count(world, type) _ecs_count(world, ecs_type(type))
FLECS_EXPORT
int32_t ecs_count_w_filter(
ecs_world_t *world,
const ecs_filter_t *filter);
/* -- Lookup entities by name -- */
FLECS_EXPORT
ecs_entity_t ecs_lookup(
ecs_world_t *world,
const char *id);
FLECS_EXPORT
ecs_entity_t ecs_lookup_child(
ecs_world_t *world,
const char *id);
/* -- Get parent -- */
FLECS_EXPORT
ecs_entity_t _ecs_get_parent_w_entity(
ecs_world_t *world,
ecs_entity_t entity,
ecs_entity_t component);
#define ecs_get_parent(world, entity, component)\
_ecs_get_parent_w_entity(world, entity, ecs_entity(component))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment