diff --git a/ROADMAP.md b/ROADMAP.md index 2347516..6b91c36 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -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 diff --git a/develop/testing/requires_fragment_tests.lua b/develop/testing/requires_fragment_tests.lua index befa3a4..f1fcb1d 100644 --- a/develop/testing/requires_fragment_tests.lua +++ b/develop/testing/requires_fragment_tests.lua @@ -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) diff --git a/evolved.lua b/evolved.lua index 881fa44..7aa511e 100644 --- a/evolved.lua +++ b/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]