154 lines
3.7 KiB
C
154 lines
3.7 KiB
C
#include <api.h>
|
|
|
|
static ECS_DECLARE(MyTag);
|
|
static ECS_DECLARE(MyEntity);
|
|
static ECS_COMPONENT_DECLARE(Position);
|
|
static ECS_COMPONENT_DECLARE(Velocity);
|
|
|
|
static
|
|
ecs_entity_t create_entity(ecs_world_t *world) {
|
|
return ecs_new(world, Position);
|
|
}
|
|
|
|
static
|
|
ecs_entity_t create_entity_w_entity(ecs_world_t *world) {
|
|
return ecs_new_w_id(world, ecs_id(Position));
|
|
}
|
|
|
|
static
|
|
ecs_entity_t create_tag_entity(ecs_world_t *world) {
|
|
return ecs_new(world, MyTag);
|
|
}
|
|
|
|
static
|
|
ecs_entity_t create_tag_entity_w_entity(ecs_world_t *world) {
|
|
return ecs_new_w_id(world, MyTag);
|
|
}
|
|
|
|
static ecs_entity_t return_entity(void) {
|
|
return MyEntity;
|
|
}
|
|
|
|
void GlobalComponentIds_declare(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ECS_COMPONENT_DEFINE(world, Position);
|
|
|
|
ecs_entity_t e = create_entity(world);
|
|
test_assert(e != 0);
|
|
test_assert(ecs_has(world, e, Position));
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void GlobalComponentIds_declare_w_entity(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ECS_COMPONENT_DEFINE(world, Position);
|
|
|
|
ecs_entity_t e = create_entity_w_entity(world);
|
|
test_assert(e != 0);
|
|
test_assert(ecs_has(world, e, Position));
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void GlobalComponentIds_declare_2_world(void) {
|
|
ecs_world_t *world_1 = ecs_mini();
|
|
|
|
ECS_COMPONENT_DEFINE(world_1, Position);
|
|
ECS_COMPONENT_DEFINE(world_1, Velocity);
|
|
|
|
ecs_entity_t e_pos = ecs_id(Position);
|
|
ecs_entity_t e_vel = ecs_id(Velocity);
|
|
|
|
ecs_world_t *world_2 = ecs_mini();
|
|
|
|
/* Declare in reverse order, ensure that ids are still the same */
|
|
ECS_COMPONENT_DEFINE(world_2, Velocity);
|
|
ECS_COMPONENT_DEFINE(world_2, Position);
|
|
|
|
test_assert(e_pos == ecs_id(Position));
|
|
test_assert(e_vel == ecs_id(Velocity));
|
|
|
|
ecs_fini(world_1);
|
|
ecs_fini(world_2);
|
|
}
|
|
|
|
void GlobalComponentIds_declare_tag(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ECS_TAG_DEFINE(world, MyTag);
|
|
|
|
ecs_entity_t e = create_tag_entity(world);
|
|
test_assert(e != 0);
|
|
test_assert(ecs_has(world, e, MyTag));
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void GlobalComponentIds_declare_tag_w_entity(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ECS_TAG_DEFINE(world, MyTag);
|
|
|
|
ecs_entity_t e = create_tag_entity_w_entity(world);
|
|
test_assert(e != 0);
|
|
test_assert(ecs_has(world, e, MyTag));
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void GlobalComponentIds_declare_entity(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ECS_COMPONENT_DEFINE(world, Position);
|
|
ECS_ENTITY_DEFINE(world, MyEntity, Position);
|
|
|
|
ecs_entity_t e = return_entity();
|
|
test_assert(e != 0);
|
|
test_assert(e == MyEntity);
|
|
test_assert(ecs_has(world, e, Position));
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void GlobalComponentIds_reuse_300_component_ids(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ecs_entity_t *ids = ecs_os_malloc_n(ecs_entity_t, 300);
|
|
|
|
for (int i = 0; i < 300; i ++) {
|
|
ids[i] = ecs_component_init(world, &(ecs_component_desc_t){
|
|
.type.size = 1,
|
|
.type.alignment = 1
|
|
});
|
|
}
|
|
|
|
const ecs_world_info_t *info = ecs_get_world_info(world);
|
|
ecs_entity_t info_last_component_id = info->last_component_id;
|
|
ecs_entity_t info_last_id = ecs_get_max_id(world);
|
|
ecs_entity_t next_id = ecs_new_id(world);
|
|
|
|
ecs_fini(world);
|
|
|
|
world = ecs_mini();
|
|
|
|
for (int i = 0; i < 300; i ++) {
|
|
ids[i] = ecs_component_init(world, &(ecs_component_desc_t){
|
|
.entity = ids[i],
|
|
.type.size = 1,
|
|
.type.alignment = 1
|
|
});
|
|
}
|
|
|
|
info = ecs_get_world_info(world);
|
|
test_int(info->last_component_id, info_last_component_id);
|
|
test_int(ecs_get_max_id(world), info_last_id);
|
|
test_int(next_id, ecs_new_id(world));
|
|
|
|
ecs_os_free(ids);
|
|
|
|
ecs_fini(world);
|
|
}
|