fix the cloning with requires behavior for removed required fragments

This commit is contained in:
BlackMATov
2025-06-06 21:18:09 +07:00
parent fbd9f9f970
commit c222a49257
3 changed files with 11 additions and 14 deletions

View File

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

View File

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

View File

@@ -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_count = __chunk_required_fragments(ini_chunk,
req_fragment_set, req_fragment_list, req_fragment_count)
end
end
for i = 1, req_fragment_count do
local req_fragment = req_fragment_list[i]