mirror of
https://github.com/Ukendio/jecs.git
synced 2025-04-24 17:10:03 +00:00
Low foot print ids
This commit is contained in:
parent
63f40a22c0
commit
818dfdd216
2 changed files with 32 additions and 26 deletions
34
lib/init.lua
34
lib/init.lua
|
@ -100,49 +100,52 @@ local function ECS_COMBINE(source: number, target: number): i53
|
|||
end
|
||||
|
||||
local function ECS_IS_PAIR(e: number)
|
||||
if e > ECS_ENTITY_MASK then
|
||||
return (e % 2 ^ 4) // FLAGS_PAIR ~= 0
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- HIGH 24 bits LOW 24 bits
|
||||
local function ECS_GENERATION(e: i53)
|
||||
if e > ECS_ENTITY_MASK then
|
||||
e = e // 0x10
|
||||
return e % ECS_GENERATION_MASK
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
local function ECS_GENERATION_INC(e: i53)
|
||||
if e > ECS_ENTITY_MASK then
|
||||
local flags = e // 0x10
|
||||
local id = flags // ECS_ENTITY_MASK
|
||||
local generation = flags % ECS_GENERATION_MASK
|
||||
|
||||
return ECS_COMBINE(id, generation + 1) + flags
|
||||
end
|
||||
return ECS_COMBINE(e, 1)
|
||||
end
|
||||
|
||||
-- FIRST gets the high ID
|
||||
local function ECS_ENTITY_T_HI(e: i53): i24
|
||||
if e > ECS_ENTITY_MASK then
|
||||
e = e // 0x10
|
||||
return e % ECS_ENTITY_MASK
|
||||
end
|
||||
return e
|
||||
end
|
||||
|
||||
-- SECOND
|
||||
local function ECS_ENTITY_T_LO(e: i53)
|
||||
if e > ECS_ENTITY_MASK then
|
||||
e = e // 0x10
|
||||
return e // ECS_ENTITY_MASK
|
||||
end
|
||||
return e
|
||||
end
|
||||
|
||||
local function ECS_PAIR(pred: i53, obj: i53): i53
|
||||
local first
|
||||
local second: number = WILDCARD
|
||||
|
||||
if pred == WILDCARD then
|
||||
first = obj
|
||||
elseif obj == WILDCARD then
|
||||
first = pred
|
||||
else
|
||||
first = obj
|
||||
second = ECS_ENTITY_T_LO(pred)
|
||||
end
|
||||
|
||||
return ECS_COMBINE(ECS_ENTITY_T_LO(first), second) + addFlags(--[[isPair]] true)
|
||||
return ECS_COMBINE(ECS_ENTITY_T_LO(obj), ECS_ENTITY_T_LO(pred)) + addFlags(--[[isPair]] true)
|
||||
end
|
||||
|
||||
local function getAlive(entityIndex: EntityIndex, id: i24)
|
||||
|
@ -161,7 +164,8 @@ local function ECS_PAIR_OBJECT(entityIndex, e)
|
|||
end
|
||||
|
||||
local function nextEntityId(entityIndex, index: i24): i53
|
||||
local id = ECS_COMBINE(index, 0)
|
||||
--local id = ECS_COMBINE(index, 0)
|
||||
local id = index
|
||||
entityIndex.sparse[id] = {
|
||||
dense = index,
|
||||
} :: Record
|
||||
|
@ -372,6 +376,7 @@ function World.target(world: World, entity: i53, relation: i24): i24?
|
|||
if not archetype then
|
||||
return nil
|
||||
end
|
||||
|
||||
local componentRecord = world.componentIndex[ECS_PAIR(relation, WILDCARD)]
|
||||
if not componentRecord then
|
||||
return nil
|
||||
|
@ -822,6 +827,7 @@ function World.__iter(world: World): () -> (number?, unknown?)
|
|||
if not lastEntity then
|
||||
return
|
||||
end
|
||||
|
||||
last = lastEntity
|
||||
|
||||
local record = sparse[entityId]
|
||||
|
|
|
@ -208,6 +208,7 @@ TEST("world", function()
|
|||
|
||||
local pair = ECS_PAIR(e2, e3)
|
||||
CHECK(IS_PAIR(pair) == true)
|
||||
|
||||
CHECK(ECS_PAIR_RELATION(world.entityIndex, pair) == e2)
|
||||
CHECK(ECS_PAIR_OBJECT(world.entityIndex, pair) == e3)
|
||||
end
|
||||
|
@ -350,4 +351,3 @@ TEST("world", function()
|
|||
end)
|
||||
|
||||
FINISH()
|
||||
|
||||
|
|
Loading…
Reference in a new issue