diff --git a/jecs/README.md b/jecs/README.md
index d44797c..723874c 100644
--- a/jecs/README.md
+++ b/jecs/README.md
@@ -2,7 +2,7 @@
-[](LICENSE) [](https://wally.run/package/ukendio/jecs)
+[](LICENSE) [](https://wally.run/package/ukendio/jecs) [](https://github.com/Ukendio/jecs/actions/workflows/unit-testing.yaml)
Just a stupidly fast Entity Component System
diff --git a/jecs/addons/observers.luau b/jecs/addons/observers.luau
index 0175060..b725e7c 100644
--- a/jecs/addons/observers.luau
+++ b/jecs/addons/observers.luau
@@ -2,15 +2,20 @@ local jecs = require("@jecs")
type Observer = {
callback: (jecs.Entity) -> (),
- query: jecs.Query<...jecs.Id>,
+ query: jecs.Query<...any>,
+}
+
+type Monitor = {
+ callback: (jecs.Entity, jecs.Entity) -> (),
+ queyr: jecs.Query
}
export type PatchedWorld = jecs.World & {
- added: (PatchedWorld, jecs.Id, (jecs.Entity, jecs.Id, T) -> ()) -> () -> (),
- removed: (PatchedWorld, jecs.Id, (jecs.Entity, jecs.Id) -> ()) -> () -> (),
- changed: (PatchedWorld, jecs.Id, (jecs.Entity, jecs.Id, T) -> ()) -> () -> (),
+ added: (PatchedWorld, jecs.Id, (e: jecs.Entity, id: jecs.Id, value: T) -> ()) -> () -> (),
+ removed: (PatchedWorld, jecs.Id, (e: jecs.Entity, id: jecs.Id) -> ()) -> () -> (),
+ changed: (PatchedWorld, jecs.Id, (e: jecs.Entity, id: jecs.Id, value: T) -> ()) -> () -> (),
observer: (PatchedWorld, Observer) -> (),
- monitor: (PatchedWorld, Observer) -> (),
+ monitor: (PatchedWorld, Monitor) -> (),
}
local function observers_new(world, description)
@@ -45,7 +50,6 @@ local function observers_new(world, description)
end
end
-
local function join(world, component)
local sparse_array = {}
local dense_array = {}
@@ -163,16 +167,16 @@ local function observers_add(world: jecs.World): PatchedWorld
listener(entity, id, value)
end
end
- local idr = world.component_index[component]
- if idr then
- local idr_hook_existing = idr.hooks.on_add
- if idr_hook_existing then
- table.insert(listeners, idr_hook_existing)
+ local existing_hook = world:get(component, jecs.OnAdd)
+ if existing_hook then
+ table.insert(listeners, existing_hook)
+ local idr = world.component_index[component]
+ if idr then
+ idr.hooks.on_add = on_add
end
- idr.hooks.on_add = on_add :: any
- else
- world:set(component, jecs.OnAdd, on_add)
end
+
+ world:set(component, jecs.OnAdd, on_add)
end
table.insert(listeners, fn)
return function()
@@ -197,16 +201,15 @@ local function observers_add(world: jecs.World): PatchedWorld
listener(entity, id, value)
end
end
- local idr = world.component_index[component]
- if idr then
- local idr_hook_existing = idr.hooks.on_change
- if idr_hook_existing then
- table.insert(listeners, idr_hook_existing)
+ local existing_hook = world:get(component, jecs.OnChange)
+ if existing_hook then
+ table.insert(listeners, existing_hook)
+ local idr = world.component_index[component]
+ if idr then
+ idr.hooks.on_change = on_change
end
- idr.hooks.on_change = on_change :: any
- else
- world:set(component, jecs.OnChange, on_change)
end
+ world:set(component, jecs.OnChange, on_change)
end
table.insert(listeners, fn)
return function()
@@ -231,16 +234,16 @@ local function observers_add(world: jecs.World): PatchedWorld
listener(entity, id, value)
end
end
- local idr = world.component_index[component]
- if idr then
- local idr_hook_existing = idr.hooks.on_remove
- if idr_hook_existing then
- table.insert(listeners, idr_hook_existing)
+ local existing_hook = world:get(component, jecs.OnRemove)
+ if existing_hook then
+ table.insert(listeners, existing_hook)
+ local idr = world.component_index[component]
+ if idr then
+ idr.hooks.on_remove = on_remove
end
- idr.hooks.on_remove = on_remove :: any
- else
- world:set(component, jecs.OnRemove, on_remove)
end
+
+ world:set(component, jecs.OnRemove, on_remove)
end
table.insert(listeners, fn)
return function()
diff --git a/jecs/build.txt b/jecs/build.txt
index df2f1ec..1ab250a 100644
--- a/jecs/build.txt
+++ b/jecs/build.txt
@@ -1,2 +1,2 @@
-modified = ["jecs.luau"]
-version = "0.6.0-nightly.20250517T001101Z"
+modified = ["addons/observers.luau"]
+version = "0.6.0-nightly.20250520T001101Z"
diff --git a/jecs/jecs.luau b/jecs/jecs.luau
index 7f47472..0270110 100644
--- a/jecs/jecs.luau
+++ b/jecs/jecs.luau
@@ -2570,7 +2570,7 @@ export type World = {
range: (self: World, range_begin: number, range_end: number?) -> (),
--- Creates a new entity
- entity: (self: World, id: Entity?) -> Entity,
+ entity: (self: World, id: Entity?) -> Entity,
--- Creates a new entity located in the first 256 ids.
--- These should be used for static components for fast access.
component: (self: World) -> Entity,
@@ -2650,7 +2650,7 @@ return {
tag = (ECS_TAG :: any) :: () -> Entity,
meta = (ECS_META :: any) :: (id: Entity, id: Id, value: T) -> Entity,
is_tag = (ecs_is_tag :: any) :: (World, Id) -> boolean,
-
+
OnAdd = EcsOnAdd :: Entity<(entity: Entity, id: Id, data: T) -> ()>,
OnRemove = EcsOnRemove :: Entity<(entity: Entity, id: Id) -> ()>,
OnChange = EcsOnChange :: Entity<(entity: Entity, id: Id, data: T) -> ()>,
diff --git a/jecs/pesde-rbx.toml b/jecs/pesde-rbx.toml
index 495083b..50592e6 100644
--- a/jecs/pesde-rbx.toml
+++ b/jecs/pesde-rbx.toml
@@ -3,7 +3,7 @@ includes = ["init.luau", "pesde.toml", "README.md", "CHANGELOG.md", "LICENSE", "
license = "MIT"
name = "marked/jecs_nightly"
repository = "https://git.devmarked.win/marked/jecs-nightly"
-version = "0.6.0-nightly.20250517T001101Z"
+version = "0.6.0-nightly.20250520T001101Z"
[indices]
default = "https://github.com/pesde-pkg/index"
diff --git a/jecs/pesde.toml b/jecs/pesde.toml
index ae74a14..fd6740f 100644
--- a/jecs/pesde.toml
+++ b/jecs/pesde.toml
@@ -3,7 +3,7 @@ includes = ["init.luau", "pesde.toml", "README.md", "CHANGELOG.md", "LICENSE", "
license = "MIT"
name = "marked/jecs_nightly"
repository = "https://git.devmarked.win/marked/jecs-nightly"
-version = "0.6.0-nightly.20250517T001101Z"
+version = "0.6.0-nightly.20250520T001101Z"
[indices]
default = "https://github.com/pesde-pkg/index"
diff --git a/jecs/test.txt b/jecs/test.txt
index a948a92..e9dd3d6 100644
--- a/jecs/test.txt
+++ b/jecs/test.txt
@@ -1,2 +1,2 @@
passed = true
-timestamp = "20250518T001104Z"
+timestamp = "20250520T001103Z"
diff --git a/jecs/test_fulllog.txt b/jecs/test_fulllog.txt
index cab8c16..4afdb00 100644
--- a/jecs/test_fulllog.txt
+++ b/jecs/test_fulllog.txt
@@ -1,6 +1,6 @@
-[38;1m7.3[0m [33;1mus[0m [38;1m 3[0m [33;1mkB[0m[38;1m│[0m [38;1mdelete children of entity[0m
-[38;1m9.3[0m [33;1mus[0m [38;1m 1[0m [33;1mkB[0m[38;1m│[0m [38;1mremove friends of entity[0m
-[38;1m348[0m [32;1mns[0m [38;1m 10[0m [32;1m B[0m[38;1m│[0m [38;1msimple deletion of entity[0m
+[38;1m7.5[0m [33;1mus[0m [38;1m 3[0m [33;1mkB[0m[38;1m│[0m [38;1mdelete children of entity[0m
+[38;1m9.2[0m [33;1mus[0m [38;1m 1[0m [33;1mkB[0m[38;1m│[0m [38;1mremove friends of entity[0m
+[38;1m347[0m [32;1mns[0m [38;1m 10[0m [32;1m B[0m[38;1m│[0m [38;1msimple deletion of entity[0m
[37;1mrepro[0m
[38;5;208mNONE[0m[38;1m│[0m [38;1m[0m
@@ -121,5 +121,5 @@
[32;1mPASS[0m[38;1m│[0m [38;1m#2[0m
[32;1mPASS[0m[38;1m│[0m [38;1m#3[0m
-[38;1m74/74 test cases passed in 32.645 ms.[0m
+[38;1m74/74 test cases passed in 30.716 ms.[0m
[32;1m0 fails[0m
diff --git a/jecs/wally.toml b/jecs/wally.toml
index 81b25d6..d7ffcb9 100644
--- a/jecs/wally.toml
+++ b/jecs/wally.toml
@@ -5,4 +5,4 @@ license = "MIT"
name = "mark-marks/jecs-nightly"
realm = "shared"
registry = "https://github.com/UpliftGames/wally-index"
-version = "0.6.0-nightly.20250517T001101Z"
+version = "0.6.0-nightly.20250520T001101Z"