mirror of
https://github.com/Ukendio/jecs.git
synced 2025-04-24 17:10:03 +00:00
Fix World Each to iterate multiple archetypes (#174)
* Add tests for entity-child relationships and removal in world queries, fixed world_each * Correct test case --------- Co-authored-by: Marcus <ukendio@gmail.com>
This commit is contained in:
parent
bacf056851
commit
bce46bc93f
2 changed files with 26 additions and 6 deletions
|
@ -1995,6 +1995,7 @@ local function world_each(world: World, id): () -> ()
|
||||||
archetype = archetypes[archetype_id]
|
archetype = archetypes[archetype_id]
|
||||||
entities = archetype.entities
|
entities = archetype.entities
|
||||||
row = #entities
|
row = #entities
|
||||||
|
entity = entities[row]
|
||||||
end
|
end
|
||||||
row -= 1
|
row -= 1
|
||||||
return entity
|
return entity
|
||||||
|
|
|
@ -900,20 +900,39 @@ end)
|
||||||
|
|
||||||
TEST("world:children", function()
|
TEST("world:children", function()
|
||||||
local world = world_new()
|
local world = world_new()
|
||||||
local e1 = world:entity()
|
local C = world:component()
|
||||||
local e2 = world:entity()
|
local T = world:entity()
|
||||||
local e3 = world:entity()
|
|
||||||
|
|
||||||
|
local e1 = world:entity()
|
||||||
|
world:set(e1, C, true)
|
||||||
|
|
||||||
|
local e2 = world:entity()
|
||||||
|
|
||||||
|
world:add(e2, T)
|
||||||
world:add(e2, pair(ChildOf, e1))
|
world:add(e2, pair(ChildOf, e1))
|
||||||
|
|
||||||
|
local e3 = world:entity()
|
||||||
world:add(e3, pair(ChildOf, e1))
|
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
|
if entity == e2 or entity == e3 then
|
||||||
CHECK(true)
|
CHECK(true)
|
||||||
continue
|
continue
|
||||||
end
|
end
|
||||||
CHECK(false)
|
CHECK(false)
|
||||||
end
|
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)
|
end)
|
||||||
|
|
||||||
TEST("world:clear()", function()
|
TEST("world:clear()", function()
|
||||||
|
@ -1562,9 +1581,9 @@ TEST("repro", function()
|
||||||
local world = world_new()
|
local world = world_new()
|
||||||
local component1 = world:component()
|
local component1 = world:component()
|
||||||
local tag1 = world:entity()
|
local tag1 = world:entity()
|
||||||
|
|
||||||
local query = world:query(component1):with(tag1):cached()
|
local query = world:query(component1):with(tag1):cached()
|
||||||
|
|
||||||
local entity = world:entity()
|
local entity = world:entity()
|
||||||
world:set(entity, component1, "some data")
|
world:set(entity, component1, "some data")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue