Skip to content

Commit

Permalink
Fix World Each to iterate multiple archetypes (#174)
Browse files Browse the repository at this point in the history
* Add tests for entity-child relationships and removal in world queries, fixed world_each

* Correct test case

---------

Co-authored-by: Marcus <[email protected]>
  • Loading branch information
CapedBojji and Ukendio authored Jan 15, 2025
1 parent bacf056 commit bce46bc
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
1 change: 1 addition & 0 deletions jecs.luau
Original file line number Diff line number Diff line change
Expand Up @@ -1995,6 +1995,7 @@ local function world_each(world: World, id): () -> ()
archetype = archetypes[archetype_id]
entities = archetype.entities
row = #entities
entity = entities[row]
end
row -= 1
return entity
Expand Down
27 changes: 23 additions & 4 deletions test/tests.luau
Original file line number Diff line number Diff line change
Expand Up @@ -900,20 +900,39 @@ end)

TEST("world:children", function()
local world = world_new()
local C = world:component()
local T = world:entity()

local e1 = world:entity()
world:set(e1, C, true)

local e2 = world:entity()
local e3 = world:entity()

world:add(e2, T)
world:add(e2, pair(ChildOf, e1))

local e3 = world:entity()
world:add(e3, pair(ChildOf, e1))

for entity in world:children(pair(ChildOf, e1)) do
local count = 0
for entity in world:children(e1) do
count += 1
if entity == e2 or entity == e3 then
CHECK(true)
continue
end
CHECK(false)
end
CHECK(count == 2)

world:remove(e2, pair(ChildOf, e1))

count = 0
for entity in world:children(e1) do
count += 1
end

CHECK(count == 1)
end)

TEST("world:clear()", function()
Expand Down Expand Up @@ -1562,9 +1581,9 @@ TEST("repro", function()
local world = world_new()
local component1 = world:component()
local tag1 = world:entity()

local query = world:query(component1):with(tag1):cached()

local entity = world:entity()
world:set(entity, component1, "some data")

Expand Down

0 comments on commit bce46bc

Please sign in to comment.