This commit is contained in:
kalrnlo 2024-06-23 20:45:15 -04:00
parent bd6eab315f
commit faf9b365cf

View file

@ -114,9 +114,8 @@ local function ECS_GENERATION_INC(e: i53)
local generation = flags % ECS_GENERATION_MASK local generation = flags % ECS_GENERATION_MASK
return ECS_COMBINE(id, generation + 1) + flags return ECS_COMBINE(id, generation + 1) + flags
else
return ECS_COMBINE(e, 1)
end end
return ECS_COMBINE(e, 1)
end end
-- FIRST gets the high ID -- FIRST gets the high ID
@ -834,41 +833,39 @@ function World.__iter(world: World): WorldIterator
-- new solver doesnt like the world iterator type even tho its correct -- new solver doesnt like the world iterator type even tho its correct
-- so any cast here i come -- so any cast here i come
local iterator: WorldIterator = ( local function iterator()
function() local lastEntity: number?, entityId: number = next(dense, last)
local lastEntity: number?, entityId: number = next(dense, last) if not lastEntity then
if not lastEntity then -- ignore type error
-- ignore type error return
return
end
last = lastEntity
local record = sparse[entityId]
local archetype = record.archetype
if not archetype then
-- Returns only the entity id as an entity without data should not return
-- data and allow the user to get an error if they don't handle the case.
return entityId
end
local row = record.row
local types = archetype.types
local columns = archetype.columns
local entityData = {}
for i, column in columns do
-- We use types because the key should be the component ID not the column index
entityData[types[i]] = column[row]
end
return entityId, entityData
end end
) :: any
return iterator last = lastEntity
local record = sparse[entityId]
local archetype = record.archetype
if not archetype then
-- Returns only the entity id as an entity without data should not return
-- data and allow the user to get an error if they don't handle the case.
return entityId
end
local row = record.row
local types = archetype.types
local columns = archetype.columns
local entityData = {}
for i, column in columns do
-- We use types because the key should be the component ID not the column index
entityData[types[i]] = column[row]
end
return entityId, entityData
end
return iterator :: any
end end
-- freezing it incase somebody trys doing something stupid and modifying it -- freezing it incase somebody tries doing something stupid and modifying it
-- (unlikely but its easy to add extra safety so) -- (unlikely but its easy to add extra safety so)
table.freeze(World) table.freeze(World)