From d2112b3a405590722cf267476f2801f1bb65548d Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 13 Nov 2024 20:30:20 +0700 Subject: [PATCH] empty query --- develop/example.lua | 6 +++++ evolved.lua | 62 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/develop/example.lua b/develop/example.lua index ab3c48f..8fdbefa 100644 --- a/develop/example.lua +++ b/develop/example.lua @@ -12,3 +12,9 @@ do entity:insert(fragments.position) entity:insert(fragments.velocity) end + +do + local query = registry:query( + fragments.position, + fragments.velocity) +end diff --git a/evolved.lua b/evolved.lua index 74712b3..7041580 100644 --- a/evolved.lua +++ b/evolved.lua @@ -18,6 +18,12 @@ local evolved = {} local 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 ---@field owner evolved.registry ---@field id integer @@ -29,6 +35,8 @@ evolved_entity_mt.__index = evolved_entity_mt ---@class evolved.registry ---@field nextid integer ---@field chunks evolved.chunk[] +---@field queries evolved.query[] +---@field entities evolved.entity[] local 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 parent? evolved.chunk ---@param fragment? evolved.entity @@ -65,6 +97,18 @@ local function create_chunk(owner, parent, fragment) return setmetatable(chunk, evolved_chunk_mt) 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 id integer ---@return evolved.entity @@ -86,9 +130,12 @@ local function create_registry() local registry = { nextid = 1, 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) end @@ -121,7 +168,7 @@ function evolved_chunk_mt:with(fragment) if not self.fragment or self.fragment.id < fragment.id then 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 new_chunk.without_cache[fragment] = self @@ -264,11 +311,22 @@ function evolved_registry_mt:root() return self.chunks[1] 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 function evolved_registry_mt:entity() local id = self.nextid self.nextid = self.nextid + 1 local entity = create_entity(self, id) + on_new_entity(self, entity) return entity end