diff --git a/addons/ob.luau b/addons/ob.luau index 151738b..ddacdb1 100755 --- a/addons/ob.luau +++ b/addons/ob.luau @@ -69,6 +69,9 @@ local function observers_new( end for _, term in terms do + if jecs.IS_PAIR(term) then + term = jecs.ECS_PAIR_FIRST(term) + end world:added(term, emplaced) world:changed(term, emplaced) end @@ -151,7 +154,7 @@ local function monitors_new( i += 1 entities[i] = entity if callback ~= nil then - callback(entity, id, value) + callback(entity, jecs.OnAdd) end end end @@ -164,6 +167,9 @@ local function monitors_new( end for _, term in terms do + if jecs.IS_PAIR(term) then + term = jecs.ECS_PAIR_FIRST(term) + end world:added(term, emplaced) world:removed(term, removed) end diff --git a/demo/src/ReplicatedStorage/main.client.luau b/demo/src/ReplicatedStorage/main.client.luau index e600f67..281e2ee 100755 --- a/demo/src/ReplicatedStorage/main.client.luau +++ b/demo/src/ReplicatedStorage/main.client.luau @@ -1,12 +1,11 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage") local jecs = require(ReplicatedStorage.ecs) local schedule = require(ReplicatedStorage.schedule) -local observers_add = require(ReplicatedStorage.observers_add) local SYSTEM = schedule.SYSTEM local RUN = schedule.RUN require(ReplicatedStorage.components) -local world = observers_add(jecs.world()) +local world = jecs.world() local systems = ReplicatedStorage.systems SYSTEM(world, systems.receive_replication) diff --git a/demo/src/ReplicatedStorage/types.luau b/demo/src/ReplicatedStorage/types.luau index 6971254..538534c 100755 --- a/demo/src/ReplicatedStorage/types.luau +++ b/demo/src/ReplicatedStorage/types.luau @@ -1,7 +1,6 @@ local jecs = require(game:GetService("ReplicatedStorage").ecs) -local observers_add = require("../ReplicatedStorage/observers_add") -export type World = typeof(observers_add(jecs.world())) +export type World = typeof(jecs.world()) export type Entity = jecs.Entity export type Id = jecs.Id export type Snapshot = { diff --git a/test/addons/observers.luau b/test/addons/observers.luau index 13a59aa..ae307e4 100755 --- a/test/addons/observers.luau +++ b/test/addons/observers.luau @@ -2,11 +2,28 @@ local jecs = require("@jecs") local testkit = require("@testkit") local test = testkit.test() local CASE, TEST, FINISH, CHECK = test.CASE, test.TEST, test.FINISH, test.CHECK +local FOCUS = test.FOCUS local ob = require("@addons/ob") TEST("addons/observers", function() - local world = jecs.world() + local world = jecs.world() + do CASE "monitors should accept pairs" + local A = world:component() + local B = world:component() + + local c = 1 + ob.monitor(world:query(jecs.pair(A, B)), function (_, event) + c += 1 + end) + + local child = world:entity() + world:add(child, jecs.pair(A, B)) + CHECK(c == 2) + + world:remove(child, jecs.pair(A, B)) + CHECK(c == 3) + end do CASE "Ensure ordering between signals and observers" local A = world:component() local B = world:component()