From a5dad9aa4d2d012eb300b5cf3097235f6fcba8bc Mon Sep 17 00:00:00 2001 From: Ukendio Date: Sat, 1 Mar 2025 20:15:52 +0100 Subject: [PATCH] Fix entity deletion swap logic --- jecs.luau | 1 + test/tests.luau | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/jecs.luau b/jecs.luau index c272c98..e53d366 100644 --- a/jecs.luau +++ b/jecs.luau @@ -950,6 +950,7 @@ local function archetype_delete(world: World, archetype: Archetype, row: number, record_to_move.row = row end + delete = entities[row] entities[row] = move end diff --git a/test/tests.luau b/test/tests.luau index 045bccc..504027f 100644 --- a/test/tests.luau +++ b/test/tests.luau @@ -1045,6 +1045,22 @@ TEST("world:component()", function() end) TEST("world:delete", function() + do CASE "invoke OnRemove hooks" + local world = world_new() + + local e1 = world:entity() + local e2 = world:entity() + + local Stable = world:component() + world:set(Stable, jecs.OnRemove, function(e) + CHECK(e == e1) + end) + + world:set(e1, Stable, true) + world:set(e2, Stable, true) + + world:delete(e1) + end do CASE "delete recycled entity id used as component" local world = world_new() local id = world:entity()