fragment_builder:on_destroy method

This commit is contained in:
BlackMATov
2025-03-02 11:45:09 +07:00
parent 3ca16faae0
commit b2c03747de
3 changed files with 30 additions and 0 deletions

View File

@@ -124,6 +124,7 @@ fragment_builder:on_set :: {entity, fragment, component, component?} -> fragment
fragment_builder:on_assign :: {entity, fragment, component, component} -> fragment_builder
fragment_builder:on_insert :: {entity, fragment, component} -> fragment_builder
fragment_builder:on_remove :: {entity, fragment} -> fragment_builder
fragment_builder:on_destroy :: id -> fragment_builder
fragment_builder:build :: fragment, boolean
```

View File

@@ -7107,3 +7107,15 @@ do
assert(c2_es[1] == e2a and c2_es[2] == e2b and c2_es[3] == e12a and c2_es[4] == e12b)
end
end
do
local fb = evo.fragment()
local f1 = fb:build()
local f2 = fb:on_destroy(evo.DESTROY_ENTITY_POLICY):build()
local f3 = fb:on_destroy(evo.REMOVE_FRAGMENT_POLICY):build()
assert(evo.get(f1, evo.ON_DESTROY) == nil)
assert(evo.get(f2, evo.ON_DESTROY) == evo.DESTROY_ENTITY_POLICY)
assert(evo.get(f3, evo.ON_DESTROY) == evo.REMOVE_FRAGMENT_POLICY)
end

View File

@@ -6754,6 +6754,7 @@ end
---@field package __on_assign? evolved.set_hook
---@field package __on_insert? evolved.set_hook
---@field package __on_remove? evolved.remove_hook
---@field package __on_destroy? evolved.id
---@class evolved.fragment_builder : evolved.__fragment_builder
local evolved_fragment_builder = {}
@@ -6773,6 +6774,7 @@ __evolved_fragment = function()
__on_assign = nil,
__on_insert = nil,
__on_remove = nil,
__on_destroy = nil,
}
---@cast builder evolved.fragment_builder
return __lua_setmetatable(builder, evolved_fragment_builder)
@@ -6840,6 +6842,13 @@ function evolved_fragment_builder:on_remove(on_remove)
return self
end
---@param on_destroy evolved.id
---@return evolved.fragment_builder builder
function evolved_fragment_builder:on_destroy(on_destroy)
self.__on_destroy = on_destroy
return self
end
---@return evolved.fragment fragment
---@return boolean is_deferred
function evolved_fragment_builder:build()
@@ -6853,6 +6862,7 @@ function evolved_fragment_builder:build()
local on_assign = self.__on_assign
local on_insert = self.__on_insert
local on_remove = self.__on_remove
local on_destroy = self.__on_destroy
self.__tag = false
self.__name = nil
@@ -6864,6 +6874,7 @@ function evolved_fragment_builder:build()
self.__on_assign = nil
self.__on_insert = nil
self.__on_remove = nil
self.__on_destroy = nil
local fragment = __evolved_id()
@@ -6925,6 +6936,12 @@ function evolved_fragment_builder:build()
component_list[component_count] = on_remove
end
if on_destroy then
component_count = component_count + 1
fragment_list[component_count] = __ON_DESTROY
component_list[component_count] = on_destroy
end
local _, is_deferred = __evolved_multi_set(fragment, fragment_list, component_list)
__release_table(__table_pool_tag.fragment_list, fragment_list)