Compare commits

..

No commits in common. "23540e591959ae76921481451a20f8cc7c6483a4" and "6053038cc10909d07b6eb1bfe26c3710a7ed8e68" have entirely different histories.

4 changed files with 21 additions and 51 deletions

View file

@ -4,15 +4,15 @@ export type PatchedWorld = jecs.World & {
added: <T>(PatchedWorld, jecs.Id<T>, (e: jecs.Entity, id: jecs.Id, value: T) -> ()) -> () -> (),
removed: <T>(PatchedWorld, jecs.Id<T>, (e: jecs.Entity, id: jecs.Id) -> ()) -> () -> (),
changed: <T>(PatchedWorld, jecs.Id<T>, (e: jecs.Entity, id: jecs.Id, value: T) -> ()) -> () -> (),
observer: <T...>(
observer: (
PatchedWorld,
jecs.Query<T...>,
(<a>(jecs.Entity, jecs.Id<a>, a) -> ())?
) -> () -> (jecs.Entity),
any,
(jecs.Entity) -> ()
) -> (),
monitor: (
PatchedWorld,
any,
(<a>(jecs.Entity, jecs.Id<a>) -> ())?
(jecs.Entity, jecs.Id) -> ()
) -> ()
}
@ -25,8 +25,6 @@ local function observers_new(world, query, callback)
end
local entity_index = world.entity_index :: any
local i = 0
local entities = {}
local function emplaced(entity, id, value)
local r = jecs.entity_index_try_get_fast(
entity_index, entity :: any)
@ -38,11 +36,7 @@ local function observers_new(world, query, callback)
local archetype = r.archetype
if jecs.query_match(query, archetype) then
i += 1
entities[i] = entity
if callback ~= nil then
callback(entity, id, value)
end
callback(entity)
end
end
@ -50,19 +44,6 @@ local function observers_new(world, query, callback)
world:added(term, emplaced)
world:changed(term, emplaced)
end
return function()
local row = i
return function()
if row == 0 then
i = 0
table.clear(entities)
end
local entity = entities[row]
row -= 1
return entity
end
end
end
local function join(world, component)
@ -118,9 +99,7 @@ local function monitors_new(world, query, callback)
end
local entity_index = world.entity_index :: any
local i = 0
local entities = {}
local function emplaced(entity, id, value)
local function emplaced(entity: jecs.Entity)
local r = jecs.entity_index_try_get_fast(
entity_index, entity :: any)
@ -131,17 +110,22 @@ local function monitors_new(world, query, callback)
local archetype = r.archetype
if jecs.query_match(query, archetype) then
i += 1
entities[i] = entity
if callback ~= nil then
callback(entity, id, value)
end
callback(entity, jecs.OnAdd)
end
end
local function removed(entity: jecs.Entity, component: jecs.Id)
local EcsOnRemove = jecs.OnRemove :: jecs.Id
if callback ~= nil then
local r = jecs.entity_index_try_get_fast(
entity_index, entity :: any)
if not r then
return
end
local archetype = r.archetype
if jecs.query_match(query, archetype) then
local EcsOnRemove = jecs.OnRemove :: jecs.Id
callback(entity, EcsOnRemove)
end
end
@ -150,19 +134,6 @@ local function monitors_new(world, query, callback)
world:added(term, emplaced)
world:removed(term, removed)
end
return function()
local row = i
return function()
if row == 0 then
i = 0
table.clear(entities)
end
local entity = entities[row]
row -= 1
return entity
end
end
end
local function observers_add(world: jecs.World): PatchedWorld

1
jecs.d.ts vendored
View file

@ -310,7 +310,6 @@ export declare const OnDeleteTarget: Tag;
export declare const Delete: Tag;
export declare const Remove: Tag;
export declare const Name: Entity<string>;
export declare const Exclusive: Tag;
export declare const Rest: Entity;
export type ComponentRecord = {

View file

@ -1,6 +1,6 @@
{
"name": "@rbxts/jecs",
"version": "0.8.1",
"version": "0.7.3",
"description": "Stupidly fast Entity Component System",
"main": "jecs.luau",
"repository": {

View file

@ -1,6 +1,6 @@
[package]
name = "ukendio/jecs"
version = "0.8.1"
version = "0.7.3"
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"
license = "MIT"