From e16e4a04e4e56070bc30c6e701db879cd31f07e3 Mon Sep 17 00:00:00 2001 From: Ukendio Date: Mon, 15 Sep 2025 23:15:11 +0200 Subject: [PATCH] Enlist starting archetypes --- addons/ob.luau | 9 +++++++++ test/addons/ob.luau | 17 +++++++++++++++++ test/tests.luau | 1 - 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/addons/ob.luau b/addons/ob.luau index eb7f0e4..6b8ecfd 100755 --- a/addons/ob.luau +++ b/addons/ob.luau @@ -22,6 +22,7 @@ local function observers_new( ): Observer query:cached() + local world = (query :: Query & { world: World }).world callback = callback @@ -42,6 +43,10 @@ local function observers_new( local entity_index = world.entity_index :: any + for _, archetype in query:archetypes() do + archetypes[archetype.id] = true + end + local function emplaced( entity: jecs.Entity, id: jecs.Id, @@ -132,6 +137,10 @@ local function monitors_new(query: Query): Observer observer_on_delete.callback = function(archetype) archetypes[archetype.id] = nil end + + for _, archetype in query:archetypes() do + archetypes[archetype.id] = true + end local entity_index = world.entity_index :: any local callback_added: ((jecs.Entity) -> ())? diff --git a/test/addons/ob.luau b/test/addons/ob.luau index aab623a..dd38dd0 100755 --- a/test/addons/ob.luau +++ b/test/addons/ob.luau @@ -7,6 +7,23 @@ local ob = require("@addons/ob") TEST("addons/ob", function() local world = jecs.world() + do CASE "should match against archetypes that were already created" + local A = world:component() + + local e1 = world:entity() + world:add(e1, A) + + local monitor = ob.monitor(world:query(A)) + local c = 1 + monitor.added(function() + c += 1 + end) + + world:remove(e1, A) + world:add(e1, A) + CHECK(c==2) + end + do CASE "Should support query:without()" local A = world:component() local B = world:component() diff --git a/test/tests.luau b/test/tests.luau index b223754..528ee7f 100755 --- a/test/tests.luau +++ b/test/tests.luau @@ -1365,7 +1365,6 @@ TEST("world:added", function() end do CASE "" - local world = jecs.world() local IsNearby = world:component() world:set(IsNearby, jecs.Name, "IsNearby") local person1, person2 = world:entity(), world:entity()