From ef0f69ac6d3a28df38ae326373f182b219b3db99 Mon Sep 17 00:00:00 2001 From: Ukendio Date: Tue, 22 Apr 2025 04:49:52 +0200 Subject: [PATCH] Set signal with hook --- addons/observers.luau | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/addons/observers.luau b/addons/observers.luau index cffce81..be27d89 100644 --- a/addons/observers.luau +++ b/addons/observers.luau @@ -104,13 +104,12 @@ local function observers_add(world: jecs.World & { [string]: any }): PatchedWorl if not listeners then listeners = {} signals.added[component] = listeners - local idr = jecs.id_record_ensure(world, component) - idr.hooks.on_add = function(entity) - for _, listener in listeners do - listener(entity, component) + local function on_add(entity: number, id: number, value: any) + for _, listener in listeners :: any do + listener(entity, id, value) end end - end + world:set(component, jecs.OnAdd, on_add) end table.insert(listeners, fn) end @@ -119,12 +118,12 @@ local function observers_add(world: jecs.World & { [string]: any }): PatchedWorl if not listeners then listeners = {} signals.emplaced[component] = listeners - local idr = jecs.id_record_ensure(world, component) - idr.hooks.on_change = function(entity, value) - for _, listener in listeners do - listener(entity, component, value) + local function on_change(entity: number, id: number, value: any) + for _, listener in listeners :: any do + listener(entity, id, value) end end + world:set(component, jecs.OnChange, on_change) end table.insert(listeners, fn) end @@ -134,12 +133,12 @@ local function observers_add(world: jecs.World & { [string]: any }): PatchedWorl if not listeners then listeners = {} signals.removed[component] = listeners - local idr = jecs.id_record_ensure(world, component) - idr.hooks.on_remove = function(entity) - for _, listener in listeners do - listener(entity, component) + local function on_remove(entity: number, id: number, value: any) + for _, listener in listeners :: any do + listener(entity, id, value) end end + world:set(component, jecs.OnRemove, on_remove) end table.insert(listeners, fn) end @@ -150,7 +149,7 @@ local function observers_add(world: jecs.World & { [string]: any }): PatchedWorl world.monitor = monitors_new - return world + return world :: PatchedWorld end return observers_add