From 875b9a65e5c688bb5648aacd6b39a871382ebfdd Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 24 Feb 2025 05:03:13 +0700 Subject: [PATCH 1/2] embedded NAME fragment for feature debug purposes --- README.md | 7 ++ develop/untests.lua | 84 +++++++++++++++++++++++ evolved.lua | 161 +++++++++++++++++++++++++++++++++++++++----- 3 files changed, 235 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 58349ba..7e87848 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ entity_builder:build :: entity, boolean ``` fragment :: fragment_builder fragment_builder:tag :: fragment_builder +fragment_builder:name :: string -> fragment_builder fragment_builder:single :: component -> fragment_builder fragment_builder:default :: component -> fragment_builder fragment_builder:construct :: {any... -> component} -> fragment_builder @@ -122,6 +123,8 @@ fragment_builder:build :: fragment, boolean ``` query :: query_builder +query_builder:name :: string -> query_builder +query_builder:single :: component -> query_builder query_builder:include :: fragment... -> query_builder query_builder:exclude :: fragment... -> query_builder query_builder:build :: query, boolean @@ -129,11 +132,15 @@ query_builder:build :: query, boolean ``` phase :: phase_builder +phase_builder:name :: string -> phase_builder +phase_builder:single :: component -> phase_builder phase_builder:build :: phase, boolean ``` ``` system :: system_builder +system_builder:name :: string -> system_builder +system_builder:single :: component -> system_builder system_builder:phase :: phase -> system_builder system_builder:after :: system... -> system_builder system_builder:query :: query -> system_builder diff --git a/develop/untests.lua b/develop/untests.lua index 0f2cf81..1997500 100644 --- a/develop/untests.lua +++ b/develop/untests.lua @@ -6567,3 +6567,87 @@ do assert(c12_ec == 1 and #c12_es == 1 and c12_es[1] == e12) end end + +do + local f = evo.fragment():build() + assert(evo.get(f, evo.NAME) == nil) + + local q = evo.query():build() + assert(evo.get(q, evo.NAME) == nil) + + local p = evo.phase():build() + assert(evo.get(p, evo.NAME) == nil) + + local s = evo.system():build() + assert(evo.get(s, evo.NAME) == nil) +end + +do + local fb = evo.fragment() + local qb = evo.query() + local pb = evo.phase() + local sb = evo.system() + + do + local f = fb:name('fragment'):build() + assert(evo.get(f, evo.NAME) == 'fragment') + + local q = qb:name('query'):build() + assert(evo.get(q, evo.NAME) == 'query') + + local p = pb:name('phase'):build() + assert(evo.get(p, evo.NAME) == 'phase') + + local s = sb:name('system'):build() + assert(evo.get(s, evo.NAME) == 'system') + end + + do + local f = fb:build() + assert(evo.get(f, evo.NAME) == nil) + + local q = qb:build() + assert(evo.get(q, evo.NAME) == nil) + + local p = pb:build() + assert(evo.get(p, evo.NAME) == nil) + + local s = sb:build() + assert(evo.get(s, evo.NAME) == nil) + end +end + +do + local fb = evo.fragment() + local qb = evo.query() + local pb = evo.phase() + local sb = evo.system() + + do + local f = fb:single(false):build() + assert(evo.get(f, f) == false) + + local q = qb:single(false):build() + assert(evo.get(q, q) == false) + + local p = pb:single(false):build() + assert(evo.get(p, p) == false) + + local s = sb:single(false):build() + assert(evo.get(s, s) == false) + end + + do + local f = fb:build() + assert(evo.get(f, f) == nil) + + local q = qb:build() + assert(evo.get(q, q) == nil) + + local p = pb:build() + assert(evo.get(p, p) == nil) + + local s = sb:build() + assert(evo.get(s, s) == nil) + end +end diff --git a/evolved.lua b/evolved.lua index 31c0757..351f9af 100644 --- a/evolved.lua +++ b/evolved.lua @@ -533,6 +533,7 @@ end local __TAG = __acquire_id() +local __NAME = __acquire_id() local __DEFAULT = __acquire_id() local __CONSTRUCT = __acquire_id() @@ -6319,8 +6320,9 @@ end --- --- ----@class (evact) evolved.__fragment_builder +---@class (exact) evolved.__fragment_builder ---@field package __tag boolean +---@field package __name? string ---@field package __single? evolved.component ---@field package __default? evolved.component ---@field package __construct? fun(...): evolved.component @@ -6339,6 +6341,7 @@ __evolved_fragment = function() ---@type evolved.__fragment_builder local builder = { __tag = false, + __name = nil, __single = nil, __default = nil, __construct = nil, @@ -6357,6 +6360,13 @@ function evolved_fragment_builder:tag() return self end +---@param name string +---@return evolved.fragment_builder builder +function evolved_fragment_builder:name(name) + self.__name = name + return self +end + ---@param single evolved.component ---@return evolved.fragment_builder builder function evolved_fragment_builder:single(single) @@ -6410,6 +6420,7 @@ end ---@return boolean is_deferred function evolved_fragment_builder:build() local tag = self.__tag + local name = self.__name local single = self.__single local default = self.__default local construct = self.__construct @@ -6420,6 +6431,7 @@ function evolved_fragment_builder:build() local on_remove = self.__on_remove self.__tag = false + self.__name = nil self.__single = nil self.__default = nil self.__construct = nil @@ -6441,6 +6453,12 @@ function evolved_fragment_builder:build() component_list[component_count] = true end + if name then + component_count = component_count + 1 + fragment_list[component_count] = __NAME + component_list[component_count] = name + end + if single ~= nil then component_count = component_count + 1 fragment_list[component_count] = fragment @@ -6483,10 +6501,6 @@ function evolved_fragment_builder:build() component_list[component_count] = on_remove end - if component_count == 0 then - return __evolved_id(), false - end - local _, is_deferred = __evolved_multi_set(fragment, fragment_list, component_list) __release_table(__table_pool_tag.fragment_list, fragment_list) @@ -6502,6 +6516,8 @@ end --- ---@class (exact) evolved.__query_builder +---@field package __name? string +---@field package __single? evolved.component ---@field package __include_list? evolved.fragment[] ---@field package __exclude_list? evolved.fragment[] @@ -6514,6 +6530,8 @@ evolved_query_builder.__index = evolved_query_builder __evolved_query = function() ---@type evolved.__query_builder local builder = { + __name = nil, + __single = nil, __include_list = nil, __exclude_list = nil, } @@ -6521,6 +6539,20 @@ __evolved_query = function() return __lua_setmetatable(builder, evolved_query_builder) end +---@param name string +---@return evolved.query_builder builder +function evolved_query_builder:name(name) + self.__name = name + return self +end + +---@param single evolved.component +---@return evolved.query_builder builder +function evolved_query_builder:single(single) + self.__single = single + return self +end + ---@param ... evolved.fragment fragments ---@return evolved.query_builder builder function evolved_query_builder:include(...) @@ -6576,16 +6608,34 @@ end ---@return evolved.query query ---@return boolean is_deferred function evolved_query_builder:build() + local name = self.__name + local single = self.__single local include_list = self.__include_list local exclude_list = self.__exclude_list + self.__name = nil + self.__single = nil self.__include_list = nil self.__exclude_list = nil + local query = __evolved_id() + local fragment_list = __acquire_table(__table_pool_tag.fragment_list) local component_list = __acquire_table(__table_pool_tag.component_list) local component_count = 0 + if name then + component_count = component_count + 1 + fragment_list[component_count] = __NAME + component_list[component_count] = name + end + + if single ~= nil then + component_count = component_count + 1 + fragment_list[component_count] = query + component_list[component_count] = single + end + if include_list then component_count = component_count + 1 fragment_list[component_count] = __INCLUDES @@ -6598,11 +6648,7 @@ function evolved_query_builder:build() component_list[component_count] = exclude_list end - if component_count == 0 then - return __evolved_id(), false - end - - local query, is_deferred = __evolved_spawn_with(fragment_list, component_list) + local _, is_deferred = __evolved_multi_set(query, fragment_list, component_list) __release_table(__table_pool_tag.fragment_list, fragment_list) __release_table(__table_pool_tag.component_list, component_list) @@ -6617,6 +6663,8 @@ end --- ---@class (exact) evolved.__phase_builder +---@field package __name? string +---@field package __single? evolved.component ---@class evolved.phase_builder : evolved.__phase_builder local evolved_phase_builder = {} @@ -6626,15 +6674,61 @@ evolved_phase_builder.__index = evolved_phase_builder ---@nodiscard __evolved_phase = function() ---@type evolved.__phase_builder - local builder = {} + local builder = { + __name = nil, + __single = nil, + } ---@cast builder evolved.phase_builder return __lua_setmetatable(builder, evolved_phase_builder) end +---@param name string +---@return evolved.phase_builder builder +function evolved_phase_builder:name(name) + self.__name = name + return self +end + +---@param single evolved.component +---@return evolved.phase_builder builder +function evolved_phase_builder:single(single) + self.__single = single + return self +end + ---@return evolved.phase phase ---@return boolean is_deferred function evolved_phase_builder:build() - return __evolved_id(), false + local name = self.__name + local single = self.__single + + self.__name = nil + self.__single = nil + + local phase = __evolved_id() + + local fragment_list = __acquire_table(__table_pool_tag.fragment_list) + local component_list = __acquire_table(__table_pool_tag.component_list) + local component_count = 0 + + if name then + component_count = component_count + 1 + fragment_list[component_count] = __NAME + component_list[component_count] = name + end + + if single ~= nil then + component_count = component_count + 1 + fragment_list[component_count] = phase + component_list[component_count] = single + end + + local _, is_deferred = __evolved_multi_set(phase, fragment_list, component_list) + + __release_table(__table_pool_tag.fragment_list, fragment_list) + __release_table(__table_pool_tag.component_list, component_list) + + return phase, is_deferred end --- @@ -6644,6 +6738,8 @@ end --- ---@class (exact) evolved.__system_builder +---@field package __name? string +---@field package __single? evolved.component ---@field package __phase? evolved.phase ---@field package __after? evolved.system[] ---@field package __query? evolved.query @@ -6660,6 +6756,8 @@ evolved_system_builder.__index = evolved_system_builder __evolved_system = function() ---@type evolved.__system_builder local builder = { + __name = nil, + __single = nil, __phase = nil, __after = nil, __query = nil, @@ -6671,6 +6769,20 @@ __evolved_system = function() return __lua_setmetatable(builder, evolved_system_builder) end +---@param name string +---@return evolved.system_builder builder +function evolved_system_builder:name(name) + self.__name = name + return self +end + +---@param single evolved.component +---@return evolved.system_builder builder +function evolved_system_builder:single(single) + self.__single = single + return self +end + ---@param phase evolved.phase function evolved_system_builder:phase(phase) self.__phase = phase @@ -6730,6 +6842,8 @@ end ---@return evolved.system system ---@return boolean is_deferred function evolved_system_builder:build() + local name = self.__name + local single = self.__single local phase = self.__phase local after = self.__after local query = self.__query @@ -6737,6 +6851,8 @@ function evolved_system_builder:build() local prologue = self.__prologue local epilogue = self.__epilogue + self.__name = nil + self.__single = nil self.__phase = nil self.__after = nil self.__query = nil @@ -6744,10 +6860,24 @@ function evolved_system_builder:build() self.__prologue = nil self.__epilogue = nil + local system = __evolved_id() + local fragment_list = __acquire_table(__table_pool_tag.fragment_list) local component_list = __acquire_table(__table_pool_tag.component_list) local component_count = 0 + if name then + component_count = component_count + 1 + fragment_list[component_count] = __NAME + component_list[component_count] = name + end + + if single ~= nil then + component_count = component_count + 1 + fragment_list[component_count] = system + component_list[component_count] = single + end + if phase then component_count = component_count + 1 fragment_list[component_count] = __PHASE @@ -6784,11 +6914,7 @@ function evolved_system_builder:build() component_list[component_count] = epilogue end - if component_count == 0 then - return __evolved_id(), false - end - - local system, is_deferred = __evolved_spawn_with(fragment_list, component_list) + local _, is_deferred = __evolved_multi_set(system, fragment_list, component_list) __release_table(__table_pool_tag.fragment_list, fragment_list) __release_table(__table_pool_tag.component_list, component_list) @@ -7088,6 +7214,7 @@ end)) evolved.TAG = __TAG +evolved.NAME = __NAME evolved.DEFAULT = __DEFAULT evolved.CONSTRUCT = __CONSTRUCT From bac57f3cdcf9e13b47456770eec4683b18b73812 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 24 Feb 2025 05:46:55 +0700 Subject: [PATCH 2/2] name embedded fragments --- README.md | 1 + ROADMAP.md | 1 + evolved.lua | 29 +++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/README.md b/README.md index 7e87848..74897c5 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ ``` TAG :: fragment +NAME :: fragment DEFAULT :: fragment CONSTRUCT :: fragment diff --git a/ROADMAP.md b/ROADMAP.md index 5884f54..c0181bd 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -3,6 +3,7 @@ ## Backlog - add destroing policies (fragments, phases, systems) +- add debug view for chunks with help of NAME fragment traits ## Known issues diff --git a/evolved.lua b/evolved.lua index 351f9af..fa79891 100644 --- a/evolved.lua +++ b/evolved.lua @@ -7056,6 +7056,35 @@ __lua_assert(__evolved_insert(__CONSTRUCT, __ON_REMOVE, __update_fragment_constr --- --- +__lua_assert(__evolved_insert(__TAG, __NAME, 'TAG')) + +__lua_assert(__evolved_insert(__NAME, __NAME, 'NAME')) +__lua_assert(__evolved_insert(__DEFAULT, __NAME, 'DEFAULT')) +__lua_assert(__evolved_insert(__CONSTRUCT, __NAME, 'CONSTRUCT')) + +__lua_assert(__evolved_insert(__INCLUDES, __NAME, 'INCLUDES')) +__lua_assert(__evolved_insert(__EXCLUDES, __NAME, 'EXCLUDES')) + +__lua_assert(__evolved_insert(__ON_SET, __NAME, 'ON_SET')) +__lua_assert(__evolved_insert(__ON_ASSIGN, __NAME, 'ON_ASSIGN')) +__lua_assert(__evolved_insert(__ON_INSERT, __NAME, 'ON_INSERT')) +__lua_assert(__evolved_insert(__ON_REMOVE, __NAME, 'ON_REMOVE')) + +__lua_assert(__evolved_insert(__PHASE, __NAME, 'PHASE')) +__lua_assert(__evolved_insert(__AFTER, __NAME, 'AFTER')) + +__lua_assert(__evolved_insert(__QUERY, __NAME, 'QUERY')) +__lua_assert(__evolved_insert(__EXECUTE, __NAME, 'EXECUTE')) + +__lua_assert(__evolved_insert(__PROLOGUE, __NAME, 'PROLOGUE')) +__lua_assert(__evolved_insert(__EPILOGUE, __NAME, 'EPILOGUE')) + +--- +--- +--- +--- +--- + __lua_assert(__evolved_insert(__TAG, __TAG)) __lua_assert(__evolved_insert(__INCLUDES, __CONSTRUCT, __component_list))