mirror of
https://github.com/Ukendio/jecs.git
synced 2025-07-08 23:59:17 +00:00
Always swap entity
This commit is contained in:
parent
6c1793f853
commit
362490d25e
2 changed files with 14 additions and 11 deletions
11
jecs.luau
11
jecs.luau
|
@ -2174,7 +2174,7 @@ local function world_new()
|
||||||
local function inner_entity_index_try_get_any(entity: number): Record?
|
local function inner_entity_index_try_get_any(entity: number): Record?
|
||||||
local r = eindex_sparse_array[ECS_ENTITY_T_LO(entity)]
|
local r = eindex_sparse_array[ECS_ENTITY_T_LO(entity)]
|
||||||
|
|
||||||
if not r then
|
if not r or r.dense == 0 then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2568,15 +2568,6 @@ local function world_new()
|
||||||
dense = index
|
dense = index
|
||||||
end
|
end
|
||||||
|
|
||||||
local any = eindex_dense_array[dense]
|
|
||||||
if dense <= alive_count then
|
|
||||||
if any ~= entity then
|
|
||||||
error("Entity ID is already in use with a different generation")
|
|
||||||
else
|
|
||||||
return entity
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local e_swap = eindex_dense_array[dense]
|
local e_swap = eindex_dense_array[dense]
|
||||||
local r_swap = inner_entity_index_try_get_any(e_swap :: number) :: Record
|
local r_swap = inner_entity_index_try_get_any(e_swap :: number) :: Record
|
||||||
alive_count += 1
|
alive_count += 1
|
||||||
|
|
|
@ -885,6 +885,7 @@ TEST("world:each()", function()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
FOCUS()
|
||||||
TEST("world:range()", function()
|
TEST("world:range()", function()
|
||||||
do CASE "delete outside partitioned range"
|
do CASE "delete outside partitioned range"
|
||||||
local server = jecs.world()
|
local server = jecs.world()
|
||||||
|
@ -895,9 +896,20 @@ TEST("world:range()", function()
|
||||||
|
|
||||||
local e1 = server:entity()
|
local e1 = server:entity()
|
||||||
CHECK((e1::number)< 1000)
|
CHECK((e1::number)< 1000)
|
||||||
|
server:delete(e1)
|
||||||
local e2 = client:entity(e1)
|
local e2 = client:entity(e1)
|
||||||
CHECK(e2 == e1)
|
CHECK(e2 == e1)
|
||||||
client:delete(e1)
|
local A = client:component()
|
||||||
|
client:set(e2, A, true)
|
||||||
|
CHECK(client:get(e2, A))
|
||||||
|
client:delete(e2)
|
||||||
|
local e3 = client:entity()
|
||||||
|
CHECK(ECS_ID(e3::number) == 1000)
|
||||||
|
|
||||||
|
local e1v1 = server:entity()
|
||||||
|
local e4 = client:entity(e1v1)
|
||||||
|
CHECK(ECS_ID(e4::number) == e1)
|
||||||
|
CHECK(ECS_GENERATION(e4::number) == 1)
|
||||||
end
|
end
|
||||||
do CASE "under range start"
|
do CASE "under range start"
|
||||||
local world = jecs.world()
|
local world = jecs.world()
|
||||||
|
|
Loading…
Reference in a new issue