From 7dab6e16a7c59632e7ef56fe7e82bc7413225c96 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sat, 1 Feb 2025 15:33:31 +0700 Subject: [PATCH] add fragment_builder:single method --- README.md | 1 + develop/untests.lua | 17 +++++++++++++++++ evolved.lua | 21 ++++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f2485f..8c91d19 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,7 @@ entity_builder:build :: entity, boolean ``` fragment :: fragment_builder fragment_builder:tag :: fragment_builder +fragment_builder:single :: component -> fragment_builder fragment_builder:default :: component -> fragment_builder fragment_builder:construct :: {any... -> component} -> fragment_builder fragment_builder:on_set :: {entity, fragment, component, component?} -> fragment_builder diff --git a/develop/untests.lua b/develop/untests.lua index be3cad6..7e19f70 100644 --- a/develop/untests.lua +++ b/develop/untests.lua @@ -6508,3 +6508,20 @@ do assert(evo.select(c3, f3)[3] == 3 and evo.select(c3, f3)[4] == 33) end end + +do + do + local f = evo.fragment():default():build() + assert(not evo.has(f, evo.DEFAULT)) + end + + do + local f = evo.fragment():single():build() + assert(not evo.has(f, f)) + end + + do + local f = evo.fragment():single(42):build() + assert(evo.has(f, f) and evo.get(f, f) == 42) + end +end diff --git a/evolved.lua b/evolved.lua index d771425..1d26250 100644 --- a/evolved.lua +++ b/evolved.lua @@ -5696,6 +5696,7 @@ end ---@class (evact) evolved.__fragment_builder ---@field package __tag boolean +---@field package __single? evolved.component ---@field package __default? evolved.component ---@field package __construct? fun(...): evolved.component ---@field package __on_set? evolved.set_hook @@ -5713,6 +5714,7 @@ function evolved.fragment() ---@type evolved.__fragment_builder local builder = { __tag = false, + __single = nil, __default = nil, __construct = nil, __on_set = nil, @@ -5730,6 +5732,13 @@ function evolved_fragment_builder:tag() return self end +---@param single evolved.component +---@return evolved.fragment_builder builder +function evolved_fragment_builder:single(single) + self.__single = single + return self +end + ---@param default evolved.component ---@return evolved.fragment_builder builder function evolved_fragment_builder:default(default) @@ -5776,6 +5785,7 @@ end ---@return boolean is_deferred function evolved_fragment_builder:build() local tag = self.__tag + local single = self.__single local default = self.__default local construct = self.__construct @@ -5785,6 +5795,7 @@ function evolved_fragment_builder:build() local on_remove = self.__on_remove self.__tag = false + self.__single = nil self.__default = nil self.__construct = nil @@ -5793,6 +5804,8 @@ function evolved_fragment_builder:build() self.__on_insert = nil self.__on_remove = nil + local fragment = 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 @@ -5803,6 +5816,12 @@ function evolved_fragment_builder:build() component_list[component_count] = true end + if single ~= nil then + component_count = component_count + 1 + fragment_list[component_count] = fragment + component_list[component_count] = single + end + if default ~= nil then component_count = component_count + 1 fragment_list[component_count] = evolved.DEFAULT @@ -5843,7 +5862,7 @@ function evolved_fragment_builder:build() return evolved.id(), false end - local fragment, is_deferred = evolved.spawn_with(fragment_list, component_list) + local _, is_deferred = evolved.multi_set(fragment, fragment_list, component_list) __release_table(__TABLE_POOL_TAG__FRAGMENT_LIST, fragment_list) __release_table(__TABLE_POOL_TAG__COMPONENT_LIST, component_list)