mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-13 11:38:15 +07:00
Merge branch 'dev'
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
|
||||
## Backlog
|
||||
|
||||
- optimize batch operations for cases with moving entities to empty chunks
|
||||
- try to keep entity_chunks/places tables as arrays
|
||||
|
||||
## After first release
|
||||
|
||||
@@ -3856,8 +3856,8 @@ do
|
||||
assert(chunk and entities)
|
||||
assert(#entities == 2)
|
||||
assert(entities[1] == e3, entities[2] == e4)
|
||||
assert(evo.select(chunk, f3)[1] == 33)
|
||||
assert(evo.select(chunk, f3)[2] == 43)
|
||||
assert(evo.select(chunk, f2)[1] == 32 and evo.select(chunk, f3)[1] == 33)
|
||||
assert(evo.select(chunk, f2)[2] == 42 and evo.select(chunk, f3)[2] == 43)
|
||||
end
|
||||
|
||||
do
|
||||
@@ -6399,3 +6399,112 @@ do
|
||||
assert(evo.get(e2, f1) == true)
|
||||
assert(evo.get(e2, f2) == 42)
|
||||
end
|
||||
|
||||
do
|
||||
local f1, f2 = evo.id(2)
|
||||
|
||||
local q1 = evo.query():include(f1):build()
|
||||
|
||||
local e1a = evo.entity():set(f1, 1):build()
|
||||
local e1b = evo.entity():set(f1, 11):build()
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 2)
|
||||
assert(c1_es[1] == e1a and c1_es[2] == e1b)
|
||||
assert(evo.select(c1, f1)[1] == 1 and evo.select(c1, f1)[2] == 11)
|
||||
end
|
||||
|
||||
assert(evo.batch_insert(q1, f2, 2) == 2)
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 0)
|
||||
|
||||
local c12, c12_es = evo.chunk(f1, f2)
|
||||
assert(c12 and c12_es and #c12_es == 2)
|
||||
assert(c12_es[1] == e1a and c12_es[2] == e1b)
|
||||
assert(evo.select(c12, f1)[1] == 1 and evo.select(c12, f1)[2] == 11)
|
||||
assert(evo.select(c12, f2)[1] == 2 and evo.select(c12, f2)[2] == 2)
|
||||
end
|
||||
|
||||
local e1c = evo.entity():set(f1, 111):build()
|
||||
local e1d = evo.entity():set(f1, 1111):build()
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 2)
|
||||
assert(c1_es[1] == e1c and c1_es[2] == e1d)
|
||||
assert(evo.select(c1, f1)[1] == 111 and evo.select(c1, f1)[2] == 1111)
|
||||
end
|
||||
|
||||
assert(evo.batch_insert(q1, f2, 22) == 2)
|
||||
|
||||
do
|
||||
local c1, c1_es = evo.chunk(f1)
|
||||
assert(c1 and c1_es and #c1_es == 0)
|
||||
|
||||
local c12, c12_es = evo.chunk(f1, f2)
|
||||
assert(c12 and c12_es and #c12_es == 4)
|
||||
assert(c12_es[1] == e1a and c12_es[2] == e1b)
|
||||
assert(c12_es[3] == e1c and c12_es[4] == e1d)
|
||||
assert(evo.select(c12, f1)[1] == 1 and evo.select(c12, f1)[2] == 11)
|
||||
assert(evo.select(c12, f1)[3] == 111 and evo.select(c12, f1)[4] == 1111)
|
||||
assert(evo.select(c12, f2)[1] == 2 and evo.select(c12, f2)[2] == 2)
|
||||
assert(evo.select(c12, f2)[3] == 22 and evo.select(c12, f2)[4] == 22)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local f1, f2, f3 = evo.id(3)
|
||||
|
||||
local q1 = evo.query():include(f1):build()
|
||||
|
||||
local e123a = evo.entity():set(f1, 1):set(f2, 2):set(f3, 3):build()
|
||||
local e123b = evo.entity():set(f1, 11):set(f2, 22):set(f3, 33):build()
|
||||
|
||||
do
|
||||
local c123, c123_es = evo.chunk(f1, f2, f3)
|
||||
assert(c123 and c123_es and #c123_es == 2)
|
||||
assert(c123_es[1] == e123a and c123_es[2] == e123b)
|
||||
assert(evo.select(c123, f1)[1] == 1 and evo.select(c123, f1)[2] == 11)
|
||||
assert(evo.select(c123, f2)[1] == 2 and evo.select(c123, f2)[2] == 22)
|
||||
assert(evo.select(c123, f3)[1] == 3 and evo.select(c123, f3)[2] == 33)
|
||||
end
|
||||
|
||||
assert(evo.batch_remove(q1, f2) == 2)
|
||||
|
||||
do
|
||||
local c13, c13_es = evo.chunk(f3, f1)
|
||||
assert(c13 and c13_es and #c13_es == 2)
|
||||
assert(c13_es[1] == e123a and c13_es[2] == e123b)
|
||||
assert(evo.select(c13, f1)[1] == 1 and evo.select(c13, f1)[2] == 11)
|
||||
assert(evo.select(c13, f2)[1] == nil and evo.select(c13, f2)[2] == nil)
|
||||
assert(evo.select(c13, f3)[1] == 3 and evo.select(c13, f3)[2] == 33)
|
||||
end
|
||||
|
||||
local e3a = evo.entity():set(f3, 3):build()
|
||||
local e3b = evo.entity():set(f3, 33):build()
|
||||
|
||||
do
|
||||
local c3, c3_es = evo.chunk(f3)
|
||||
assert(c3 and c3_es and #c3_es == 2)
|
||||
assert(c3_es[1] == e3a and c3_es[2] == e3b)
|
||||
assert(evo.select(c3, f3)[1] == 3 and evo.select(c3, f3)[2] == 33)
|
||||
end
|
||||
|
||||
assert(evo.batch_remove(q1, f1) == 2)
|
||||
|
||||
do
|
||||
local c3, c3_es = evo.chunk(f3)
|
||||
assert(c3 and c3_es and #c3_es == 4)
|
||||
assert(c3_es[1] == e3a and c3_es[2] == e3b)
|
||||
assert(c3_es[3] == e123a and c3_es[4] == e123b)
|
||||
assert(evo.select(c3, f1)[1] == nil and evo.select(c3, f1)[2] == nil)
|
||||
assert(evo.select(c3, f1)[3] == nil and evo.select(c3, f1)[4] == nil)
|
||||
assert(evo.select(c3, f2)[1] == nil and evo.select(c3, f2)[2] == nil)
|
||||
assert(evo.select(c3, f2)[3] == nil and evo.select(c3, f2)[4] == nil)
|
||||
assert(evo.select(c3, f3)[1] == 3 and evo.select(c3, f3)[2] == 33)
|
||||
assert(evo.select(c3, f3)[3] == 3 and evo.select(c3, f3)[4] == 33)
|
||||
end
|
||||
end
|
||||
|
||||
281
evolved.lua
281
evolved.lua
@@ -1044,8 +1044,8 @@ local function __detach_entity(chunk, place)
|
||||
if place == chunk_entity_count then
|
||||
chunk_entities[place] = nil
|
||||
|
||||
for i = 1, chunk_component_count do
|
||||
local component_storage = chunk_component_storages[i]
|
||||
for component_index = 1, chunk_component_count do
|
||||
local component_storage = chunk_component_storages[component_index]
|
||||
component_storage[place] = nil
|
||||
end
|
||||
else
|
||||
@@ -1056,8 +1056,8 @@ local function __detach_entity(chunk, place)
|
||||
chunk_entities[place] = last_entity
|
||||
chunk_entities[chunk_entity_count] = nil
|
||||
|
||||
for i = 1, chunk_component_count do
|
||||
local component_storage = chunk_component_storages[i]
|
||||
for component_index = 1, chunk_component_count do
|
||||
local component_storage = chunk_component_storages[component_index]
|
||||
local last_component = component_storage[chunk_entity_count]
|
||||
component_storage[place] = last_component
|
||||
component_storage[chunk_entity_count] = nil
|
||||
@@ -1079,8 +1079,8 @@ local function __detach_all_entities(chunk)
|
||||
|
||||
__table_clear(entities)
|
||||
|
||||
for i = 1, component_count do
|
||||
__table_clear(component_storages[i])
|
||||
for component_index = 1, component_count do
|
||||
__table_clear(component_storages[component_index])
|
||||
end
|
||||
|
||||
chunk.__entity_count = 0
|
||||
@@ -1112,9 +1112,9 @@ local function __spawn_entity_at(entity, chunk, fragments, components)
|
||||
chunk_entities[place] = entity
|
||||
|
||||
if chunk_has_defaults_or_constructs then
|
||||
for i = 1, chunk_component_count do
|
||||
local fragment = chunk_component_fragments[i]
|
||||
local component_storage = chunk_component_storages[i]
|
||||
for component_index = 1, chunk_component_count do
|
||||
local fragment = chunk_component_fragments[component_index]
|
||||
local component_storage = chunk_component_storages[component_index]
|
||||
|
||||
local new_component = evolved.get(fragment, evolved.DEFAULT)
|
||||
|
||||
@@ -1125,8 +1125,8 @@ local function __spawn_entity_at(entity, chunk, fragments, components)
|
||||
component_storage[place] = new_component
|
||||
end
|
||||
else
|
||||
for i = 1, chunk_component_count do
|
||||
local component_storage = chunk_component_storages[i]
|
||||
for component_index = 1, chunk_component_count do
|
||||
local component_storage = chunk_component_storages[component_index]
|
||||
|
||||
local new_component = true
|
||||
|
||||
@@ -1177,8 +1177,9 @@ local function __spawn_entity_at(entity, chunk, fragments, components)
|
||||
if chunk_has_set_or_insert_hooks then
|
||||
local chunk_fragment_list = chunk.__fragment_list
|
||||
local chunk_fragment_count = chunk.__fragment_count
|
||||
for i = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[i]
|
||||
|
||||
for fragment_index = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[fragment_index]
|
||||
local component_index = chunk_component_indices[fragment]
|
||||
|
||||
if component_index then
|
||||
@@ -1267,8 +1268,9 @@ local function __spawn_entity_with(entity, chunk, fragments, components)
|
||||
if chunk_has_set_or_insert_hooks then
|
||||
local chunk_fragment_list = chunk.__fragment_list
|
||||
local chunk_fragment_count = chunk.__fragment_count
|
||||
for i = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[i]
|
||||
|
||||
for fragment_index = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[fragment_index]
|
||||
local component_index = chunk_component_indices[fragment]
|
||||
|
||||
if component_index then
|
||||
@@ -1466,22 +1468,35 @@ local function __chunk_insert(old_chunk, fragment, ...)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
if new_entity_count == 0 then
|
||||
old_chunk.__entities, new_chunk.__entities =
|
||||
new_entities, old_entities
|
||||
|
||||
old_entities, new_entities =
|
||||
new_entities, old_entities
|
||||
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
old_component_storages[old_ci], new_component_storages[new_ci] =
|
||||
new_component_storages[new_ci], old_component_storages[old_ci]
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = old_entity_count
|
||||
else
|
||||
__table_move(
|
||||
old_entities, 1, old_entity_count,
|
||||
new_entity_count + 1, new_entities)
|
||||
|
||||
for i = 1, old_component_count do
|
||||
local old_f = old_component_fragments[i]
|
||||
local old_cs = old_component_storages[i]
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
if new_ci then
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
end
|
||||
|
||||
if fragment_on_set or fragment_on_insert then
|
||||
@@ -1658,20 +1673,35 @@ local function __chunk_remove(old_chunk, ...)
|
||||
local new_component_storages = new_chunk.__component_storages
|
||||
local new_component_fragments = new_chunk.__component_fragments
|
||||
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
if new_entity_count == 0 then
|
||||
old_chunk.__entities, new_chunk.__entities =
|
||||
new_entities, old_entities
|
||||
|
||||
__table_move(
|
||||
old_entities, 1, old_entity_count,
|
||||
new_entity_count + 1, new_entities)
|
||||
old_entities, new_entities =
|
||||
new_entities, old_entities
|
||||
|
||||
for i = 1, new_component_count do
|
||||
local new_f = new_component_fragments[i]
|
||||
local new_cs = new_component_storages[i]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
if old_ci then
|
||||
for new_ci = 1, new_component_count do
|
||||
local new_f = new_component_fragments[new_ci]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
old_component_storages[old_ci], new_component_storages[new_ci] =
|
||||
new_component_storages[new_ci], old_component_storages[old_ci]
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = old_entity_count
|
||||
else
|
||||
__table_move(
|
||||
old_entities, 1, old_entity_count,
|
||||
new_entity_count + 1, new_entities)
|
||||
|
||||
for new_ci = 1, new_component_count do
|
||||
local new_f = new_component_fragments[new_ci]
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
end
|
||||
|
||||
for new_place = new_entity_count + 1, new_entity_count + old_entity_count do
|
||||
@@ -1713,8 +1743,8 @@ local function __chunk_clear(chunk)
|
||||
local chunk_fragment_list = chunk.__fragment_list
|
||||
local chunk_fragment_count = chunk.__fragment_count
|
||||
|
||||
for i = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[i]
|
||||
for fragment_index = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[fragment_index]
|
||||
|
||||
---@type evolved.remove_hook?
|
||||
local fragment_on_remove = evolved.get(fragment, evolved.ON_REMOVE)
|
||||
@@ -1774,8 +1804,8 @@ local function __chunk_destroy(chunk)
|
||||
local chunk_fragment_list = chunk.__fragment_list
|
||||
local chunk_fragment_count = chunk.__fragment_count
|
||||
|
||||
for i = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[i]
|
||||
for fragment_index = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[fragment_index]
|
||||
|
||||
---@type evolved.remove_hook?
|
||||
local fragment_on_remove = evolved.get(fragment, evolved.ON_REMOVE)
|
||||
@@ -1937,22 +1967,35 @@ local function __chunk_multi_set(old_chunk, fragments, components)
|
||||
local new_chunk_has_set_or_assign_hooks = new_chunk.__has_set_or_assign_hooks
|
||||
local new_chunk_has_set_or_insert_hooks = new_chunk.__has_set_or_insert_hooks
|
||||
|
||||
do
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
if new_entity_count == 0 then
|
||||
old_chunk.__entities, new_chunk.__entities =
|
||||
new_entities, old_entities
|
||||
|
||||
old_entities, new_entities =
|
||||
new_entities, old_entities
|
||||
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
old_component_storages[old_ci], new_component_storages[new_ci] =
|
||||
new_component_storages[new_ci], old_component_storages[old_ci]
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = old_entity_count
|
||||
else
|
||||
__table_move(
|
||||
old_entities, 1, old_entity_count,
|
||||
new_entity_count + 1, new_entities)
|
||||
|
||||
for i = 1, old_component_count do
|
||||
local old_f = old_component_fragments[i]
|
||||
local old_cs = old_component_storages[i]
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
if new_ci then
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
end
|
||||
|
||||
local inserted_set = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_SET)
|
||||
@@ -2156,6 +2199,7 @@ local function __chunk_multi_assign(chunk, fragments, components)
|
||||
|
||||
for i = 1, fragment_count do
|
||||
local fragment = fragments[i]
|
||||
|
||||
if chunk_fragment_set[fragment] then
|
||||
---@type evolved.default?
|
||||
local fragment_default
|
||||
@@ -2271,28 +2315,42 @@ local function __chunk_multi_insert(old_chunk, fragments, components)
|
||||
local new_chunk_has_defaults_or_constructs = new_chunk.__has_defaults_or_constructs
|
||||
local new_chunk_has_set_or_insert_hooks = new_chunk.__has_set_or_insert_hooks
|
||||
|
||||
do
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
if new_entity_count == 0 then
|
||||
old_chunk.__entities, new_chunk.__entities =
|
||||
new_entities, old_entities
|
||||
|
||||
old_entities, new_entities =
|
||||
new_entities, old_entities
|
||||
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
old_component_storages[old_ci], new_component_storages[new_ci] =
|
||||
new_component_storages[new_ci], old_component_storages[old_ci]
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = old_entity_count
|
||||
else
|
||||
__table_move(
|
||||
old_entities, 1, old_entity_count,
|
||||
new_entity_count + 1, new_entities)
|
||||
|
||||
for i = 1, old_component_count do
|
||||
local old_f = old_component_fragments[i]
|
||||
local old_cs = old_component_storages[i]
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
if new_ci then
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
end
|
||||
|
||||
local inserted_set = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_SET)
|
||||
|
||||
for i = 1, fragment_count do
|
||||
local fragment = fragments[i]
|
||||
|
||||
if not inserted_set[fragment] and not old_fragment_set[fragment] then
|
||||
inserted_set[fragment] = true
|
||||
|
||||
@@ -2460,20 +2518,35 @@ local function __chunk_multi_remove(old_chunk, fragments)
|
||||
local new_component_storages = new_chunk.__component_storages
|
||||
local new_component_fragments = new_chunk.__component_fragments
|
||||
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
if new_entity_count == 0 then
|
||||
old_chunk.__entities, new_chunk.__entities =
|
||||
new_entities, old_entities
|
||||
|
||||
__table_move(
|
||||
old_entities, 1, old_entity_count,
|
||||
new_entity_count + 1, new_entities)
|
||||
old_entities, new_entities =
|
||||
new_entities, old_entities
|
||||
|
||||
for i = 1, new_component_count do
|
||||
local new_f = new_component_fragments[i]
|
||||
local new_cs = new_component_storages[i]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
if old_ci then
|
||||
for new_ci = 1, new_component_count do
|
||||
local new_f = new_component_fragments[new_ci]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
old_component_storages[old_ci], new_component_storages[new_ci] =
|
||||
new_component_storages[new_ci], old_component_storages[old_ci]
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = old_entity_count
|
||||
else
|
||||
__table_move(
|
||||
old_entities, 1, old_entity_count,
|
||||
new_entity_count + 1, new_entities)
|
||||
|
||||
for new_ci = 1, new_component_count do
|
||||
local new_f = new_component_fragments[new_ci]
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
__table_move(old_cs, 1, old_entity_count, new_entity_count + 1, new_cs)
|
||||
end
|
||||
|
||||
new_chunk.__entity_count = new_entity_count + old_entity_count
|
||||
end
|
||||
|
||||
for new_place = new_entity_count + 1, new_entity_count + old_entity_count do
|
||||
@@ -3983,14 +4056,12 @@ function evolved.set(entity, fragment, ...)
|
||||
local old_component_storages = old_chunk.__component_storages
|
||||
local old_component_fragments = old_chunk.__component_fragments
|
||||
|
||||
for i = 1, old_component_count do
|
||||
local old_f = old_component_fragments[i]
|
||||
local old_cs = old_component_storages[i]
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
if new_ci then
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
|
||||
__detach_entity(old_chunk, old_place)
|
||||
@@ -4162,14 +4233,12 @@ function evolved.insert(entity, fragment, ...)
|
||||
local old_component_storages = old_chunk.__component_storages
|
||||
local old_component_fragments = old_chunk.__component_fragments
|
||||
|
||||
for i = 1, old_component_count do
|
||||
local old_f = old_component_fragments[i]
|
||||
local old_cs = old_component_storages[i]
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
if new_ci then
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
|
||||
__detach_entity(old_chunk, old_place)
|
||||
@@ -4291,14 +4360,12 @@ function evolved.remove(entity, ...)
|
||||
|
||||
new_entities[new_place] = entity
|
||||
|
||||
for i = 1, new_component_count do
|
||||
local new_f = new_component_fragments[i]
|
||||
local new_cs = new_component_storages[i]
|
||||
for new_ci = 1, new_component_count do
|
||||
local new_f = new_component_fragments[new_ci]
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
if old_ci then
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
|
||||
__detach_entity(old_chunk, old_place)
|
||||
@@ -4353,8 +4420,8 @@ function evolved.clear(entity)
|
||||
local chunk_component_indices = chunk.__component_indices
|
||||
local chunk_component_storages = chunk.__component_storages
|
||||
|
||||
for i = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[i]
|
||||
for fragment_index = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[fragment_index]
|
||||
local component_index = chunk_component_indices[fragment]
|
||||
|
||||
if component_index then
|
||||
@@ -4414,8 +4481,8 @@ function evolved.destroy(entity)
|
||||
local chunk_component_indices = chunk.__component_indices
|
||||
local chunk_component_storages = chunk.__component_storages
|
||||
|
||||
for i = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[i]
|
||||
for fragment_index = 1, chunk_fragment_count do
|
||||
local fragment = chunk_fragment_list[fragment_index]
|
||||
local component_index = chunk_component_indices[fragment]
|
||||
|
||||
if component_index then
|
||||
@@ -4543,14 +4610,12 @@ function evolved.multi_set(entity, fragments, components)
|
||||
local old_component_storages = old_chunk.__component_storages
|
||||
local old_component_fragments = old_chunk.__component_fragments
|
||||
|
||||
for i = 1, old_component_count do
|
||||
local old_f = old_component_fragments[i]
|
||||
local old_cs = old_component_storages[i]
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
if new_ci then
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
|
||||
__detach_entity(old_chunk, old_place)
|
||||
@@ -4781,14 +4846,12 @@ function evolved.multi_insert(entity, fragments, components)
|
||||
local old_component_storages = old_chunk.__component_storages
|
||||
local old_component_fragments = old_chunk.__component_fragments
|
||||
|
||||
for i = 1, old_component_count do
|
||||
local old_f = old_component_fragments[i]
|
||||
local old_cs = old_component_storages[i]
|
||||
for old_ci = 1, old_component_count do
|
||||
local old_f = old_component_fragments[old_ci]
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
local new_ci = new_component_indices[old_f]
|
||||
if new_ci then
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
|
||||
__detach_entity(old_chunk, old_place)
|
||||
@@ -4920,14 +4983,12 @@ function evolved.multi_remove(entity, fragments)
|
||||
|
||||
new_entities[new_place] = entity
|
||||
|
||||
for i = 1, new_component_count do
|
||||
local new_f = new_component_fragments[i]
|
||||
local new_cs = new_component_storages[i]
|
||||
for new_ci = 1, new_component_count do
|
||||
local new_f = new_component_fragments[new_ci]
|
||||
local new_cs = new_component_storages[new_ci]
|
||||
local old_ci = old_component_indices[new_f]
|
||||
if old_ci then
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
local old_cs = old_component_storages[old_ci]
|
||||
new_cs[new_place] = old_cs[old_place]
|
||||
end
|
||||
|
||||
__detach_entity(old_chunk, old_place)
|
||||
|
||||
Reference in New Issue
Block a user