add fragment_builder:single method

This commit is contained in:
BlackMATov
2025-02-01 15:33:31 +07:00
parent 7ddd79f0c6
commit 7dab6e16a7
3 changed files with 38 additions and 1 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)