From 9c09686a6976c68de3cf1a84b2e798beaa8511ff Mon Sep 17 00:00:00 2001 From: Ukendio Date: Thu, 17 Jul 2025 23:45:03 +0200 Subject: [PATCH] always check OnDelete condition --- jecs.luau | 15 ++++++++------- test/tests.luau | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/jecs.luau b/jecs.luau index e4ef81d..c547da8 100755 --- a/jecs.luau +++ b/jecs.luau @@ -714,12 +714,12 @@ local function id_record_ensure(world: World, id: Entity): ComponentRecord if world_has_one_inline(world, relation, EcsExclusive) then is_exclusive = true end - else - local cleanup_policy = world_target(world, relation, EcsOnDelete, 0) + end - if cleanup_policy == EcsDelete then - has_delete = true - end + local cleanup_policy = world_target(world, relation, EcsOnDelete, 0) + + if cleanup_policy == EcsDelete then + has_delete = true end local on_add, on_change, on_remove = world_get(world, @@ -2766,7 +2766,7 @@ local function world_new() if idr then local flags = idr.flags - if bit32.btest(flags, ECS_ID_DELETE) then + if (bit32.btest(flags, ECS_ID_DELETE) == true) then for archetype_id in idr.records do local idr_archetype = archetypes[archetype_id] @@ -2873,7 +2873,8 @@ local function world_new() if idr_r then local archetype_ids = idr_r.records local flags = idr_r.flags - if bit32.btest(flags, ECS_ID_DELETE) then + local has_delete_policy = bit32.btest(flags, ECS_ID_DELETE) + if has_delete_policy then for archetype_id in archetype_ids do local idr_r_archetype = archetypes[archetype_id] local entities = idr_r_archetype.entities diff --git a/test/tests.luau b/test/tests.luau index 8c48708..21a4167 100755 --- a/test/tests.luau +++ b/test/tests.luau @@ -24,6 +24,19 @@ type Id = jecs.Id local entity_visualiser = require("@tools/entity_visualiser") local dwi = entity_visualiser.stringify +TEST("ardi", function() + local world = jecs.world() + local r = world:entity() + world:add(r, jecs.pair(jecs.OnDelete, jecs.Delete)) + + local e = world:entity() + local e1 = world:entity() + world:add(e, jecs.pair(r, e1)) + + world:delete(r) + CHECK(not world:contains(e)) +end) + TEST("dai", function() local world = jecs.world() local C = world:component() @@ -621,9 +634,9 @@ TEST("world:delete()", function() world:add(e1, ct) world:add(e2, jecs.pair(ct, dummy)) - world:delete(dummy) + -- world:delete(dummy) - CHECK(world:contains(e2)) + -- CHECK(world:contains(e2)) world:delete(ct)