mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-14 12:10:23 +07:00
fix the cloning with requires behavior for removed required fragments
This commit is contained in:
@@ -7,6 +7,5 @@
|
||||
- cached queries
|
||||
- observers and events
|
||||
- add INDEX fragment trait
|
||||
- add REQUIRES fragment trait
|
||||
- use compact prefix-tree for chunks
|
||||
- optional ffi component storages
|
||||
|
||||
@@ -50,7 +50,8 @@ do
|
||||
assert(not evo.has(e, f2))
|
||||
|
||||
local e2 = evo.clone(e)
|
||||
assert(not evo.has(e2, f2))
|
||||
assert(evo.has(e2, f2))
|
||||
assert(evo.get(e2, f2) == true)
|
||||
|
||||
local e3 = evo.clone(e, { [f3] = true })
|
||||
assert(evo.has(e3, f2))
|
||||
@@ -101,7 +102,8 @@ do
|
||||
assert(not evo.has(e, f2))
|
||||
|
||||
local e2 = evo.clone(e)
|
||||
assert(not evo.has(e2, f2))
|
||||
assert(evo.has(e2, f2))
|
||||
assert(evo.get(e2, f2) == 42)
|
||||
|
||||
local e3 = evo.clone(e, { [f3] = true })
|
||||
assert(evo.has(e3, f2))
|
||||
@@ -161,8 +163,8 @@ do
|
||||
|
||||
local e2 = evo.clone(e, { [f1] = 21 })
|
||||
assert(evo.has(e2, f1) and evo.get(e2, f1) == 21)
|
||||
assert(not evo.has(e2, f2))
|
||||
assert(not evo.has(e2, f3))
|
||||
assert(evo.has(e2, f2) and evo.get(e2, f2) == true)
|
||||
assert(evo.has(e2, f3) and evo.get(e2, f3) == 42)
|
||||
|
||||
local e3 = evo.clone(e, { [f3] = 21 })
|
||||
assert(evo.has(e3, f1) and evo.get(e3, f1) == true)
|
||||
@@ -204,8 +206,8 @@ do
|
||||
|
||||
local e2 = evo.clone(e, { [f1] = 21 })
|
||||
assert(evo.has(e2, f1) and evo.get(e2, f1) == 21)
|
||||
assert(not evo.has(e2, f2))
|
||||
assert(not evo.has(e2, f3))
|
||||
assert(evo.has(e2, f2) and evo.get(e2, f2) == true)
|
||||
assert(evo.has(e2, f3) and evo.get(e2, f3) == true)
|
||||
|
||||
local e3 = evo.clone(e, { [f3] = 21 })
|
||||
assert(evo.has(e3, f1) and evo.get(e3, f1) == 42)
|
||||
|
||||
10
evolved.lua
10
evolved.lua
@@ -1635,7 +1635,7 @@ local function __chunk_required_fragments(chunk, req_fragment_set, req_fragment_
|
||||
|
||||
__lua_table_move(
|
||||
chunk_fragment_list, 1, chunk_fragment_count,
|
||||
1, fragment_stack)
|
||||
fragment_stack_size + 1, fragment_stack)
|
||||
|
||||
fragment_stack_size = fragment_stack_size + chunk_fragment_count
|
||||
end
|
||||
@@ -2018,12 +2018,8 @@ local function __clone_entity(entity, prefab, components)
|
||||
---@type evolved.fragment[]
|
||||
req_fragment_list = __acquire_table(__table_pool_tag.fragment_list)
|
||||
|
||||
for fragment in __lua_next, components do
|
||||
if not prefab_chunk or not prefab_chunk.__fragment_set[fragment] then
|
||||
req_fragment_count = __fragment_required_fragments(fragment,
|
||||
req_fragment_set, req_fragment_list, req_fragment_count)
|
||||
end
|
||||
end
|
||||
req_fragment_count = __chunk_required_fragments(ini_chunk,
|
||||
req_fragment_set, req_fragment_list, req_fragment_count)
|
||||
|
||||
for i = 1, req_fragment_count do
|
||||
local req_fragment = req_fragment_list[i]
|
||||
|
||||
Reference in New Issue
Block a user