Skip to content

Commit

Permalink
Add archetypes to EmptyQuery
Browse files Browse the repository at this point in the history
  • Loading branch information
Ukendio committed Aug 4, 2024
1 parent 843f8c1 commit ec9d58f
Showing 1 changed file with 20 additions and 14 deletions.
34 changes: 20 additions & 14 deletions src/init.luau
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ type EntityIndex = { dense: { [i24]: i53 }, sparse: { [i53]: Record } }

type ArchetypeRecord = {
count: number,
column: number
column: number,
}

type ArchetypeMap = {
Expand Down Expand Up @@ -722,6 +722,7 @@ local Arm = function(self: Query, ...)
end
local world_query
do
local empty_list = {}
local EmptyQuery: Query = {
__iter = function(): Item
return noop
Expand All @@ -731,6 +732,9 @@ do
replace = noop :: (Query, ...any) -> (),
with = Arm,
without = Arm,
archetypes = function()
return empty_list
end
}

setmetatable(EmptyQuery, EmptyQuery)
Expand Down Expand Up @@ -994,7 +998,7 @@ do

local function query_init(query)
if init and drain then
return
return true
end

init = true
Expand Down Expand Up @@ -1061,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
Expand Down Expand Up @@ -1135,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
Expand Down

0 comments on commit ec9d58f

Please sign in to comment.