40#define ECS_META_COMPONENT(world, name)\
41 ECS_COMPONENT_DEFINE(world, name);\
42 ecs_meta_from_desc(world, ecs_id(name),\
43 FLECS__##name##_kind, FLECS__##name##_desc)
46#define ECS_STRUCT(name, ...)\
47 ECS_META_IMPL_CALL(ECS_STRUCT_, ECS_META_IMPL, name, #__VA_ARGS__);\
48 ECS_STRUCT_TYPE(name, __VA_ARGS__)
51#define ECS_ENUM(name, ...)\
52 ECS_META_IMPL_CALL(ECS_ENUM_, ECS_META_IMPL, name, #__VA_ARGS__);\
53 ECS_ENUM_TYPE(name, __VA_ARGS__)
56#define ECS_BITMASK(name, ...)\
57 ECS_META_IMPL_CALL(ECS_BITMASK_, ECS_META_IMPL, name, #__VA_ARGS__);\
58 ECS_ENUM_TYPE(name, __VA_ARGS__)
64#define ecs_vec(T) ecs_vec_t
67#define ecs_map(K, V) ecs_map_t
82#define ECS_META_IMPL_CALL_INNER(base, impl, name, type_desc)\
83 base ## impl(name, type_desc)
85#define ECS_META_IMPL_CALL(base, impl, name, type_desc)\
86 ECS_META_IMPL_CALL_INNER(base, impl, name, type_desc)
89#define ECS_STRUCT_TYPE(name, ...)\
90 typedef struct name __VA_ARGS__ name
92#define ECS_STRUCT_ECS_META_IMPL ECS_STRUCT_IMPL
94#define ECS_STRUCT_IMPL(name, type_desc)\
95 extern ECS_COMPONENT_DECLARE(name);\
96 static const char *FLECS__##name##_desc = type_desc;\
97 static ecs_type_kind_t FLECS__##name##_kind = EcsStructType;\
98 ECS_COMPONENT_DECLARE(name) = 0
100#define ECS_STRUCT_DECLARE(name, type_desc)\
101 extern ECS_COMPONENT_DECLARE(name);\
102 ECS_COMPONENT_DECLARE(name) = 0
104#define ECS_STRUCT_EXTERN(name, type_desc)\
105 extern ECS_COMPONENT_DECLARE(name)
109#define ECS_ENUM_TYPE(name, ...)\
110 typedef enum name __VA_ARGS__ name
112#define ECS_ENUM_ECS_META_IMPL ECS_ENUM_IMPL
114#define ECS_ENUM_IMPL(name, type_desc)\
115 extern ECS_COMPONENT_DECLARE(name);\
116 static const char *FLECS__##name##_desc = type_desc;\
117 static ecs_type_kind_t FLECS__##name##_kind = EcsEnumType;\
118 ECS_COMPONENT_DECLARE(name) = 0
120#define ECS_ENUM_DECLARE(name, type_desc)\
121 extern ECS_COMPONENT_DECLARE(name);\
122 ECS_COMPONENT_DECLARE(name) = 0
124#define ECS_ENUM_EXTERN(name, type_desc)\
125 extern ECS_COMPONENT_DECLARE(name)
129#define ECS_BITMASK_TYPE(name, ...)\
130 typedef enum name __VA_ARGS__ name
132#define ECS_BITMASK_ECS_META_IMPL ECS_BITMASK_IMPL
134#define ECS_BITMASK_IMPL(name, type_desc)\
135 extern ECS_COMPONENT_DECLARE(name);\
136 static const char *FLECS__##name##_desc = type_desc;\
137 static ecs_type_kind_t FLECS__##name##_kind = EcsBitmaskType;\
138 ECS_COMPONENT_DECLARE(name) = 0
140#define ECS_BITMASK_DECLARE(name, type_desc)\
141 extern ECS_COMPONENT_DECLARE(name);\
142 ECS_COMPONENT_DECLARE(name) = 0
144#define ECS_BITMASK_EXTERN(name, type_desc)\
145 extern ECS_COMPONENT_DECLARE(name)
156#define ECS_STRUCT(name, ...)\
157 struct name __VA_ARGS__;\
158 inline const char* flecs_meta_cpp_desc(name*) { return #__VA_ARGS__; }\
159 inline ecs_type_kind_t flecs_meta_cpp_kind(name*) { return EcsStructType; }\
160 static_assert(true, "")
163#define ECS_ENUM(name, ...)\
164 enum name __VA_ARGS__;\
165 inline const char* flecs_meta_cpp_desc(name*) { return #__VA_ARGS__; }\
166 inline ecs_type_kind_t flecs_meta_cpp_kind(name*) { return EcsEnumType; }\
167 static_assert(true, "")
170#define ECS_BITMASK(name, ...)\
171 enum name __VA_ARGS__;\
172 inline const char* flecs_meta_cpp_desc(name*) { return #__VA_ARGS__; }\
173 inline ecs_type_kind_t flecs_meta_cpp_kind(name*) { return EcsBitmaskType; }\
174 static_assert(true, "")
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.