mirror of
https://github.com/Ukendio/jecs.git
synced 2025-04-25 09:30:03 +00:00
Add archetypes to EmptyQuery
This commit is contained in:
parent
843f8c1914
commit
ec9d58fe5d
1 changed files with 20 additions and 14 deletions
|
@ -36,7 +36,7 @@ type EntityIndex = { dense: { [i24]: i53 }, sparse: { [i53]: Record } }
|
||||||
|
|
||||||
type ArchetypeRecord = {
|
type ArchetypeRecord = {
|
||||||
count: number,
|
count: number,
|
||||||
column: number
|
column: number,
|
||||||
}
|
}
|
||||||
|
|
||||||
type ArchetypeMap = {
|
type ArchetypeMap = {
|
||||||
|
@ -722,6 +722,7 @@ local Arm = function(self: Query, ...)
|
||||||
end
|
end
|
||||||
local world_query
|
local world_query
|
||||||
do
|
do
|
||||||
|
local empty_list = {}
|
||||||
local EmptyQuery: Query = {
|
local EmptyQuery: Query = {
|
||||||
__iter = function(): Item
|
__iter = function(): Item
|
||||||
return noop
|
return noop
|
||||||
|
@ -731,6 +732,9 @@ do
|
||||||
replace = noop :: (Query, ...any) -> (),
|
replace = noop :: (Query, ...any) -> (),
|
||||||
with = Arm,
|
with = Arm,
|
||||||
without = Arm,
|
without = Arm,
|
||||||
|
archetypes = function()
|
||||||
|
return empty_list
|
||||||
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
setmetatable(EmptyQuery, EmptyQuery)
|
setmetatable(EmptyQuery, EmptyQuery)
|
||||||
|
@ -994,7 +998,7 @@ do
|
||||||
|
|
||||||
local function query_init(query)
|
local function query_init(query)
|
||||||
if init and drain then
|
if init and drain then
|
||||||
return
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
init = true
|
init = true
|
||||||
|
@ -1061,14 +1065,15 @@ do
|
||||||
end
|
end
|
||||||
|
|
||||||
local function world_query_without(query, ...)
|
local function world_query_without(query, ...)
|
||||||
local withoutComponents = { ... }
|
local N = select("#", ...)
|
||||||
for i = #compatible_archetypes, 1, -1 do
|
for i = #compatible_archetypes, 1, -1 do
|
||||||
local archetype = compatible_archetypes[i]
|
local archetype = compatible_archetypes[i]
|
||||||
local records = archetype.records
|
local tr = archetype.records
|
||||||
local shouldRemove = false
|
local shouldRemove = false
|
||||||
|
|
||||||
for _, componentId in withoutComponents do
|
for j = 1, N do
|
||||||
if records[componentId] then
|
local id = select(i, ...)
|
||||||
|
if tr[id] then
|
||||||
shouldRemove = true
|
shouldRemove = true
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -1135,13 +1140,14 @@ do
|
||||||
end
|
end
|
||||||
|
|
||||||
local function world_query_with(query, ...)
|
local function world_query_with(query, ...)
|
||||||
local with = { ... }
|
local N = select("#", ...)
|
||||||
for i = #compatible_archetypes, 1, -1 do
|
for i = #compatible_archetypes, 1, -1 do
|
||||||
local archetype = compatible_archetypes[i]
|
local archetype = compatible_archetypes[i]
|
||||||
local tr = archetype.records
|
local tr = archetype.records
|
||||||
local shouldRemove = false
|
local shouldRemove = false
|
||||||
|
|
||||||
for _, id in with do
|
for j = 1, N do
|
||||||
|
local id = select(i, ...)
|
||||||
if not tr[id] then
|
if not tr[id] then
|
||||||
shouldRemove = true
|
shouldRemove = true
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in a new issue