mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-15 04:15:28 +07:00
fragment_builder:on_destroy method
This commit is contained in:
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
17
evolved.lua
17
evolved.lua
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user