diff --git a/src/init.luau b/src/init.luau index 24ef69d..eac3ef6 100644 --- a/src/init.luau +++ b/src/init.luau @@ -16,7 +16,6 @@ type ArchetypeEdge = { remove: Archetype, } - type Archetype = { id: number, edges: { [i53]: ArchetypeEdge }, @@ -37,7 +36,7 @@ type EntityIndex = { dense: { [i24]: i53 }, sparse: { [i53]: Record } } type ArchetypeRecord = { count: number, - column: number + column: number, } type ArchetypeMap = { @@ -723,6 +722,7 @@ local Arm = function(self: Query, ...) end local world_query do + local empty_list = {} local EmptyQuery: Query = { __iter = function(): Item return noop @@ -733,7 +733,7 @@ do with = Arm, without = Arm, archetypes = function() - return {} + return empty_list end } @@ -998,7 +998,7 @@ do local function query_init(query) if init and drain then - return + return true end init = true @@ -1065,18 +1065,19 @@ do end local function world_query_without(query, ...) - local withoutComponents = { ... } + local N = select("#", ...) for i = #compatible_archetypes, 1, -1 do local archetype = compatible_archetypes[i] - local records = archetype.records + local tr = archetype.records local shouldRemove = false - for _, componentId in withoutComponents do - if records[componentId] then - shouldRemove = true - break - end - end + for j = 1, N do + local id = select(i, ...) + if tr[id] then + shouldRemove = true + break + end + end if shouldRemove then local last = #compatible_archetypes @@ -1139,18 +1140,19 @@ do end local function world_query_with(query, ...) - local with = { ... } + local N = select("#", ...) for i = #compatible_archetypes, 1, -1 do local archetype = compatible_archetypes[i] local tr = archetype.records local shouldRemove = false - for _, id in with do - if not tr[id] then + for j = 1, N do + local id = select(i, ...) + if not tr[id] then shouldRemove = true break end - end + end if shouldRemove then local last = #compatible_archetypes