48#define ECS_META_COMPONENT(world, name)\
49 ECS_COMPONENT_DEFINE(world, name);\
50 ecs_meta_from_desc(world, ecs_id(name),\
51 FLECS__##name##_kind, FLECS__##name##_desc)
54#define ECS_STRUCT(name, ...)\
55 ECS_META_IMPL_CALL(ECS_STRUCT_, ECS_META_IMPL, name, #__VA_ARGS__);\
56 ECS_STRUCT_TYPE(name, __VA_ARGS__)
59#define ECS_ENUM(name, ...)\
60 ECS_META_IMPL_CALL(ECS_ENUM_, ECS_META_IMPL, name, #__VA_ARGS__);\
61 ECS_ENUM_TYPE(name, __VA_ARGS__)
64#define ECS_BITMASK(name, ...)\
65 ECS_META_IMPL_CALL(ECS_BITMASK_, ECS_META_IMPL, name, #__VA_ARGS__);\
66 ECS_ENUM_TYPE(name, __VA_ARGS__)
83#define ECS_META_IMPL_CALL_INNER(base, impl, name, type_desc)\
84 base ## impl(name, type_desc)
86#define ECS_META_IMPL_CALL(base, impl, name, type_desc)\
87 ECS_META_IMPL_CALL_INNER(base, impl, name, type_desc)
90#define ECS_STRUCT_TYPE(name, ...)\
91 typedef struct __VA_ARGS__ name
93#define ECS_STRUCT_ECS_META_IMPL ECS_STRUCT_IMPL
95#define ECS_STRUCT_IMPL(name, type_desc)\
96 extern ECS_COMPONENT_DECLARE(name);\
97 static const char *FLECS__##name##_desc = type_desc;\
98 static ecs_type_kind_t FLECS__##name##_kind = EcsStructType;\
99 ECS_COMPONENT_DECLARE(name) = 0
101#define ECS_STRUCT_DECLARE(name, type_desc)\
102 extern ECS_COMPONENT_DECLARE(name);\
103 ECS_COMPONENT_DECLARE(name) = 0
105#define ECS_STRUCT_EXTERN(name, type_desc)\
106 extern ECS_COMPONENT_DECLARE(name)
110#define ECS_ENUM_TYPE(name, ...)\
111 typedef enum __VA_ARGS__ name
113#define ECS_ENUM_ECS_META_IMPL ECS_ENUM_IMPL
115#define ECS_ENUM_IMPL(name, type_desc)\
116 extern ECS_COMPONENT_DECLARE(name);\
117 static const char *FLECS__##name##_desc = type_desc;\
118 static ecs_type_kind_t FLECS__##name##_kind = EcsEnumType;\
119 ECS_COMPONENT_DECLARE(name) = 0
121#define ECS_ENUM_DECLARE(name, type_desc)\
122 extern ECS_COMPONENT_DECLARE(name);\
123 ECS_COMPONENT_DECLARE(name) = 0
125#define ECS_ENUM_EXTERN(name, type_desc)\
126 extern ECS_COMPONENT_DECLARE(name)
130#define ECS_BITMASK_TYPE(name, ...)\
131 typedef enum __VA_ARGS__ name
133#define ECS_BITMASK_ECS_META_IMPL ECS_BITMASK_IMPL
135#define ECS_BITMASK_IMPL(name, type_desc)\
136 extern ECS_COMPONENT_DECLARE(name);\
137 static const char *FLECS__##name##_desc = type_desc;\
138 static ecs_type_kind_t FLECS__##name##_kind = EcsBitmaskType;\
139 ECS_COMPONENT_DECLARE(name) = 0
141#define ECS_BITMASK_DECLARE(name, type_desc)\
142 extern ECS_COMPONENT_DECLARE(name);\
143 ECS_COMPONENT_DECLARE(name) = 0
145#define ECS_BITMASK_EXTERN(name, type_desc)\
146 extern ECS_COMPONENT_DECLARE(name)
ecs_id_t ecs_entity_t
An entity identifier.
struct ecs_world_t ecs_world_t
A world is the container for all ECS data and supporting features.