Fixed cached wildcard queries

This commit is contained in:
Intrinsic 2025-01-15 23:09:05 -08:00
parent 52e03683db
commit 02a5bb4aa0
No known key found for this signature in database
2 changed files with 68 additions and 3 deletions

View file

@ -619,7 +619,7 @@ local function archetype_create(world: World, id_types: { i24 }, ty, prev: i53?)
end
end
for _, id in id_types do
for id in records do
local observer_list = find_observers(world, EcsOnArchetypeCreate, id)
if not observer_list then
continue

View file

@ -1433,13 +1433,13 @@ TEST("change tracking", function()
local i = 0
for entity, number in q1 do
i += 1
world:add(testEntity, tag)
world:add(testEntity, tag)
end
CHECK(i == 1)
for e, n in q1 do
world:set(e, pair(previous, component), n)
world:set(e, pair(previous, component), n)
end
end
@ -1594,4 +1594,69 @@ TEST("repro", function()
CHECK(counter == 0)
end
end)
TEST("wildcard query", function()
do CASE "#1"
local world = world_new()
local pair = jecs.pair
local Relation = world:entity()
local Wildcard = jecs.Wildcard
local A = world:entity()
local relationship = pair(Relation, Wildcard)
local query = world:query(relationship):cached()
local entity = world:entity()
world:add(entity, pair(Relation, A))
local counter = 0
for e in query:iter() do
counter += 1
end
CHECK(counter == 1)
end
do CASE "#2"
local world = world_new()
local pair = jecs.pair
local Relation = world:entity()
local Wildcard = jecs.Wildcard
local A = world:entity()
local relationship = pair(Relation, Wildcard)
local entity = world:entity()
world:add(entity, pair(Relation, A))
local counter = 0
for e in world:query(relationship):iter() do
counter += 1
end
CHECK(counter == 1)
end
do CASE "#3"
local world = world_new()
local pair = jecs.pair
local Relation = world:entity()
local Wildcard = jecs.Wildcard
local A = world:entity()
local entity = world:entity()
world:add(entity, pair(Relation, A))
local relationship = pair(Relation, Wildcard)
local query = world:query(relationship):cached()
local counter = 0
for e in query:iter() do
counter += 1
end
CHECK(counter == 1)
end
end)
FINISH()