empty query

This commit is contained in:
BlackMATov
2024-11-13 20:30:20 +07:00
parent f28f003393
commit d2112b3a40
2 changed files with 66 additions and 2 deletions

View File

@@ -12,3 +12,9 @@ do
entity:insert(fragments.position) entity:insert(fragments.position)
entity:insert(fragments.velocity) entity:insert(fragments.velocity)
end end
do
local query = registry:query(
fragments.position,
fragments.velocity)
end

View File

@@ -18,6 +18,12 @@ local evolved = {}
local evolved_chunk_mt = {} local evolved_chunk_mt = {}
evolved_chunk_mt.__index = evolved_chunk_mt evolved_chunk_mt.__index = evolved_chunk_mt
---@class evolved.query
---@field owner evolved.registry
---@field id integer
local evolved_query_mt = {}
evolved_query_mt.__index = evolved_query_mt
---@class evolved.entity ---@class evolved.entity
---@field owner evolved.registry ---@field owner evolved.registry
---@field id integer ---@field id integer
@@ -29,6 +35,8 @@ evolved_entity_mt.__index = evolved_entity_mt
---@class evolved.registry ---@class evolved.registry
---@field nextid integer ---@field nextid integer
---@field chunks evolved.chunk[] ---@field chunks evolved.chunk[]
---@field queries evolved.query[]
---@field entities evolved.entity[]
local evolved_registry_mt = {} local evolved_registry_mt = {}
evolved_registry_mt.__index = evolved_registry_mt evolved_registry_mt.__index = evolved_registry_mt
@@ -38,6 +46,30 @@ evolved_registry_mt.__index = evolved_registry_mt
--- ---
--- ---
---@param owner evolved.registry
---@param chunk evolved.chunk
local function on_new_chunk(owner, chunk)
owner.chunks[#owner.chunks + 1] = chunk
end
---@param owner evolved.registry
---@param query evolved.query
local function on_new_query(owner, query)
owner.queries[#owner.queries + 1] = query
end
---@param owner evolved.registry
---@param entity evolved.entity
local function on_new_entity(owner, entity)
owner.entities[#owner.entities + 1] = entity
end
---
---
---
---
---
---@param owner evolved.registry ---@param owner evolved.registry
---@param parent? evolved.chunk ---@param parent? evolved.chunk
---@param fragment? evolved.entity ---@param fragment? evolved.entity
@@ -65,6 +97,18 @@ local function create_chunk(owner, parent, fragment)
return setmetatable(chunk, evolved_chunk_mt) return setmetatable(chunk, evolved_chunk_mt)
end end
---@param owner evolved.registry
---@param id integer
---@return evolved.query
local function create_query(owner, id)
---@type evolved.query
local query = {
owner = owner,
id = id,
}
return setmetatable(query, evolved_query_mt)
end
---@param owner evolved.registry ---@param owner evolved.registry
---@param id integer ---@param id integer
---@return evolved.entity ---@return evolved.entity
@@ -86,9 +130,12 @@ local function create_registry()
local registry = { local registry = {
nextid = 1, nextid = 1,
chunks = {}, chunks = {},
queries = {},
entities = {},
} }
registry.chunks[1] = create_chunk(registry) local chunk = create_chunk(registry)
on_new_chunk(registry, chunk)
return setmetatable(registry, evolved_registry_mt) return setmetatable(registry, evolved_registry_mt)
end end
@@ -121,7 +168,7 @@ function evolved_chunk_mt:with(fragment)
if not self.fragment or self.fragment.id < fragment.id then if not self.fragment or self.fragment.id < fragment.id then
local new_chunk = create_chunk(self.owner, self, fragment) local new_chunk = create_chunk(self.owner, self, fragment)
self.owner.chunks[#self.owner.chunks + 1] = new_chunk on_new_chunk(self.owner, new_chunk)
self.with_cache[fragment] = new_chunk self.with_cache[fragment] = new_chunk
new_chunk.without_cache[fragment] = self new_chunk.without_cache[fragment] = self
@@ -264,11 +311,22 @@ function evolved_registry_mt:root()
return self.chunks[1] return self.chunks[1]
end end
---@param ... evolved.entity
---@return evolved.query
function evolved_registry_mt:query(...)
local id = self.nextid
self.nextid = self.nextid + 1
local query = create_query(self, id)
on_new_query(self, query)
return query
end
---@return evolved.entity ---@return evolved.entity
function evolved_registry_mt:entity() function evolved_registry_mt:entity()
local id = self.nextid local id = self.nextid
self.nextid = self.nextid + 1 self.nextid = self.nextid + 1
local entity = create_entity(self, id) local entity = create_entity(self, id)
on_new_entity(self, entity)
return entity return entity
end end