Handle only make_alive behaviour in overload
Some checks are pending
analysis / Run Luau Analyze (push) Waiting to run
deploy-docs / build (push) Waiting to run
deploy-docs / Deploy (push) Blocked by required conditions
publish-npm / publish (push) Waiting to run
unit-testing / Run Luau Tests (push) Waiting to run

This commit is contained in:
Ukendio 2025-04-27 05:03:49 +02:00
parent 6922019ed9
commit 01821f0a7b
2 changed files with 13 additions and 51 deletions

View file

@ -773,26 +773,23 @@ local function world_entity(world: ecs_world_t, entity: i53?): i53
if r then
local dense = r.dense
if dense and r.dense ~= 0 then
local any = dense_array[dense]
if any ~= entity then
if dense > alive_count then
alive_count += 1
entity_index.alive_count = alive_count
local e_swap = dense_array[alive_count]
local r_swap = sparse_array[alive_count]
r_swap.dense = dense
r.dense = alive_count
dense_array[alive_count] = any
dense_array[dense] = e_swap
end
return any
if dense < alive_count then
return entity
end
return entity
else
r.dense = index
dense_array[index] = entity
return entity
dense = index
end
local e_swap = dense_array[dense]
local r_swap = entity_index_try_get_any(entity_index, e_swap) :: ecs_record_t
alive_count += 1
entity_index.alive_count = alive_count
r_swap.dense = dense
r.dense = alive_count
dense_array[dense] = e_swap
dense_array[alive_count] = entity
return entity
else
for i = max_id + 1, index do
sparse_array[i] = { dense = i } :: ecs_record_t

View file

@ -666,41 +666,6 @@ TEST("world:entity()", function()
CHECK(world:contains(e))
local e2 = world:entity()
CHECK(world:contains(e2))
-- world:print_entity_index()
print("-----")
local e3 = world:entity(375)
world:entity(376)
print("-----")
print(e3)
CHECK(e3 == 375)
CHECK(world:contains(e3))
world:delete(e3)
print("-------call 1-------")
local e3v1 = world:entity(375)
CHECK(not world:contains(375))
CHECK(jecs.ECS_GENERATION(e3v1) == 1)
CHECK(jecs.ECS_ID(e3v1) == 375)
CHECK(world:contains(e3v1))
print("-------call 2-------")
world:entity(382)
world:delete(382)
world:entity(376)
world:delete(e3v1)
print("--------------------")
print("-------call 3-------")
local e3v2 = world:entity(375)
CHECK(jecs.ECS_GENERATION(e3v2) == 2)
CHECK(jecs.ECS_ID(e3v2) == 375)
CHECK(not world:contains(e3v1))
CHECK(world:contains(e3v2))
print("----------------------")
print("-----call 4-------")
CHECK(world:entity(375) == e3v2)
print("------call 5")
end
local N = 2^8