Properly link flecs library
This commit is contained in:
141
engine/libs/flecs/test/addons/src/System_w_FromEntity.c
Normal file
141
engine/libs/flecs/test/addons/src/System_w_FromEntity.c
Normal file
@@ -0,0 +1,141 @@
|
||||
#include <addons.h>
|
||||
|
||||
static
|
||||
void Iter(ecs_iter_t *it) {
|
||||
Mass *m_ptr = ecs_field(it, Mass, 1);
|
||||
|
||||
Position *p = NULL;
|
||||
Velocity *v = NULL;
|
||||
|
||||
if (it->field_count >= 2) {
|
||||
p = ecs_field(it, Position, 2);
|
||||
}
|
||||
|
||||
if (it->field_count >= 3) {
|
||||
v = ecs_field(it, Velocity, 3);
|
||||
}
|
||||
|
||||
test_assert(!m_ptr || !ecs_field_is_self(it, 1));
|
||||
|
||||
probe_iter(it);
|
||||
|
||||
Mass m = 1;
|
||||
if (m_ptr) {
|
||||
m = *m_ptr;
|
||||
}
|
||||
|
||||
int i;
|
||||
for (i = 0; i < it->count; i ++) {
|
||||
p[i].x = 10 * m;
|
||||
p[i].y = 20 * m;
|
||||
|
||||
if (v) {
|
||||
v[i].x = 30 * m;
|
||||
v[i].y = 40 * m;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void System_w_FromEntity_2_column_1_from_entity(void) {
|
||||
ecs_world_t *world = ecs_init();
|
||||
|
||||
ECS_COMPONENT(world, Position);
|
||||
ECS_COMPONENT(world, Mass);
|
||||
|
||||
ECS_ENTITY(world, e1, Mass);
|
||||
ECS_ENTITY(world, e2, Position);
|
||||
|
||||
ECS_SYSTEM(world, Iter, EcsOnUpdate, Mass(e1), Position);
|
||||
|
||||
ecs_set(world, e1, Mass, {5});
|
||||
|
||||
Probe ctx = {0};
|
||||
ecs_set_ctx(world, &ctx, NULL);
|
||||
|
||||
ecs_progress(world, 1);
|
||||
|
||||
test_int(ctx.count, 1);
|
||||
test_int(ctx.invoked, 1);
|
||||
test_int(ctx.system, Iter);
|
||||
test_int(ctx.term_count, 2);
|
||||
test_null(ctx.param);
|
||||
|
||||
test_int(ctx.e[0], e2);
|
||||
test_int(ctx.c[0][0], ecs_id(Mass));
|
||||
test_int(ctx.s[0][0], e1);
|
||||
test_int(ctx.c[0][1], ecs_id(Position));
|
||||
test_int(ctx.s[0][1], 0);
|
||||
|
||||
const Position *p = ecs_get(world, e2, Position);
|
||||
test_assert(p != NULL);
|
||||
test_int(p->x, 50);
|
||||
test_int(p->y, 100);
|
||||
|
||||
ecs_fini(world);
|
||||
}
|
||||
|
||||
static bool dummy_invoked = 0;
|
||||
static ecs_entity_t dummy_component = 0;
|
||||
static ecs_entity_t dummy_source = 0;
|
||||
|
||||
static
|
||||
void dummy_reset(void) {
|
||||
dummy_invoked = false;
|
||||
dummy_component = 0;
|
||||
dummy_source = 0;
|
||||
}
|
||||
|
||||
static
|
||||
void Dummy(ecs_iter_t *it) {
|
||||
dummy_invoked = 1;
|
||||
dummy_component = ecs_field_id(it, 1);
|
||||
dummy_source = ecs_field_src(it, 1);
|
||||
}
|
||||
|
||||
void System_w_FromEntity_task_from_entity(void) {
|
||||
ecs_world_t *world = ecs_init();
|
||||
|
||||
ECS_COMPONENT(world, Position);
|
||||
|
||||
ECS_ENTITY(world, e1, Position);
|
||||
|
||||
ECS_SYSTEM(world, Dummy, EcsOnUpdate, Position(e1));
|
||||
|
||||
ecs_progress(world, 1);
|
||||
|
||||
test_bool(dummy_invoked, true);
|
||||
test_assert(dummy_component == ecs_id(Position));
|
||||
test_assert(dummy_source == e1);
|
||||
|
||||
dummy_reset();
|
||||
ecs_remove(world, e1, Position);
|
||||
|
||||
ecs_progress(world, 1);
|
||||
test_bool(dummy_invoked, false);
|
||||
|
||||
ecs_fini(world);
|
||||
}
|
||||
|
||||
void System_w_FromEntity_task_not_from_entity(void) {
|
||||
ecs_world_t *world = ecs_init();
|
||||
|
||||
ECS_COMPONENT(world, Position);
|
||||
|
||||
ECS_ENTITY(world, e1, Position);
|
||||
|
||||
ECS_SYSTEM(world, Dummy, EcsOnUpdate, !Position(e1));
|
||||
|
||||
ecs_progress(world, 1);
|
||||
|
||||
test_bool(dummy_invoked, false);
|
||||
|
||||
ecs_remove(world, e1, Position);
|
||||
|
||||
ecs_progress(world, 1);
|
||||
|
||||
test_bool(dummy_invoked, true);
|
||||
test_assert(dummy_component == ecs_id(Position));
|
||||
test_assert(dummy_source == e1);
|
||||
|
||||
ecs_fini(world);
|
||||
}
|
||||
Reference in New Issue
Block a user