diff --git a/lib/init.lua b/lib/init.lua index 6b0dd51..a3642de 100644 --- a/lib/init.lua +++ b/lib/init.lua @@ -70,11 +70,13 @@ local function transitionArchetype( column[#column] = nil end - destinationEntities[destinationRow] = sourceEntities[sourceRow] - local moveAway = #sourceEntities - sourceEntities[sourceRow] = sourceEntities[moveAway] - sourceEntities[moveAway] = nil - entityIndex[destinationEntities[destinationRow]].row = sourceRow + destinationEntities[destinationRow] = sourceEntities[sourceRow] + entityIndex[sourceEntities[sourceRow]].row = destinationRow + + local movedAway = #sourceEntities + sourceEntities[sourceRow] = sourceEntities[movedAway] + entityIndex[sourceEntities[movedAway]].row = sourceRow + sourceEntities[movedAway] = nil end local function archetypeAppend(entity: i53, archetype: Archetype): i24 diff --git a/lib/init.spec.lua b/lib/init.spec.lua index 36b9443..01e4323 100644 --- a/lib/init.spec.lua +++ b/lib/init.spec.lua @@ -84,12 +84,20 @@ return function() end) it("should remove component", function() - local id = world:entity() - world:set(id, A, true) - world:set(id, B, 1000) - world:remove(id, A, false) + local Tag = world:entity() + local entities = {} + for i = 1, 10 do + local entity = world:entity() + entities[i] = entity + world:set(entity, Tag) + end - expect(world:get(id, A)).to.equal(nil) + for i = 1, 10 do + local entity = entities[i] + expect(world:get(entity, Tag)).to.equal(nil) + world:remove(entity, Tag) + end + end) it("should override component data", function()