Compare commits

...

4 commits

Author SHA1 Message Date
PepeElToro41
6a52ad6cec
Merge f912866fcb into 0b6bfea5c8 2025-08-02 16:10:49 -07:00
Ukendio
0b6bfea5c8 Return nil if nth is over count
Some checks failed
analysis / Run Luau Analyze (push) Has been cancelled
deploy-docs / build (push) Has been cancelled
publish-npm / publish (push) Has been cancelled
unit-testing / Run Luau Tests (push) Has been cancelled
deploy-docs / Deploy (push) Has been cancelled
2025-08-02 23:57:50 +02:00
Ukendio
3cfce10a4a Increment component records after registering
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
2025-08-02 18:58:19 +02:00
PepeElToro41
f912866fcb add way to check preregistered id creations after world creation 2025-07-29 14:18:15 -06:00

View file

@ -118,6 +118,8 @@ type world = {
max_component_id: number, max_component_id: number,
max_archetype_id: number, max_archetype_id: number,
start_component_id: number,
start_tag_id: number,
observable: Map<i53, Map<i53, { Observer }>>, observable: Map<i53, Map<i53, { Observer }>>,
@ -155,6 +157,8 @@ export type World = {
max_component_id: number, max_component_id: number,
max_archetype_id: number, max_archetype_id: number,
start_component_id: number,
start_tag_id: number,
observable: Map<Id, Map<Id, { Observer }>>, observable: Map<Id, Map<Id, { Observer }>>,
@ -733,7 +737,7 @@ local function world_target(world: world, entity: i53, relation: i53, index: num
local nth = index or 0 local nth = index or 0
if nth >= count then if nth >= count then
nth = nth + count + 1 return nil
end end
nth = archetype.types[nth + idr.records[archetype_id]] nth = archetype.types[nth + idr.records[archetype_id]]
@ -752,6 +756,12 @@ local function ECS_ID_IS_WILDCARD(e: i53): boolean
return first == EcsWildcard or second == EcsWildcard return first == EcsWildcard or second == EcsWildcard
end end
local function get_max_ids_difference(world: World): (number, number)
local diff_components = world.start_component_id - ecs_max_component_id
local diff_tags = world.start_tag_id - ecs_max_tag_id
return diff_components, diff_tags
end
local function id_record_get(world: World, id: Entity): ComponentRecord? local function id_record_get(world: World, id: Entity): ComponentRecord?
local component_index = world.component_index local component_index = world.component_index
local idr: ComponentRecord = component_index[id] local idr: ComponentRecord = component_index[id]
@ -879,6 +889,7 @@ local function archetype_create(world: world, id_types: { i53 }, ty, prev: i53?)
for i, component_id in archetype.types do for i, component_id in archetype.types do
local idr = id_record_ensure(world, component_id) local idr = id_record_ensure(world, component_id)
idr.size += 1
local is_tag = bit32.btest(idr.flags, ECS_ID_IS_TAG) local is_tag = bit32.btest(idr.flags, ECS_ID_IS_TAG)
local column = if is_tag then NULL_ARRAY else {} local column = if is_tag then NULL_ARRAY else {}
columns[i] = column columns[i] = column
@ -890,11 +901,13 @@ local function archetype_create(world: world, id_types: { i53 }, ty, prev: i53?)
local object = ECS_PAIR_SECOND(component_id) local object = ECS_PAIR_SECOND(component_id)
local r = ECS_PAIR(relation, EcsWildcard) local r = ECS_PAIR(relation, EcsWildcard)
local idr_r = id_record_ensure(world, r) local idr_r = id_record_ensure(world, r)
idr_r.size += 1
archetype_append_to_records(idr_r, archetype_id, columns_map, r, i, column) archetype_append_to_records(idr_r, archetype_id, columns_map, r, i, column)
local t = ECS_PAIR(EcsWildcard, object) local t = ECS_PAIR(EcsWildcard, object)
local idr_t = id_record_ensure(world, t) local idr_t = id_record_ensure(world, t)
idr_t.size += 1
archetype_append_to_records(idr_t, archetype_id, columns_map, t, i, column) archetype_append_to_records(idr_t, archetype_id, columns_map, t, i, column)
end end
@ -2249,6 +2262,9 @@ local function world_new()
archetype_index = archetype_index, archetype_index = archetype_index,
max_archetype_id = 0, max_archetype_id = 0,
max_component_id = ecs_max_component_id, max_component_id = ecs_max_component_id,
start_component_id = ecs_max_component_id,
start_tag_id = ecs_max_tag_id,
observable = observable, observable = observable,
signals = signals, signals = signals,
@ -2756,7 +2772,7 @@ local function world_new()
local nth = index or 0 local nth = index or 0
if nth >= count then if nth >= count then
nth = nth + count + 1 return nil
end end
nth = archetype.types[nth + idr.records[archetype_id]] nth = archetype.types[nth + idr.records[archetype_id]]
@ -3313,6 +3329,7 @@ return {
pair_first = ecs_pair_first :: <P, O>(world: World, pair: Pair<P, O>) -> Id<P>, pair_first = ecs_pair_first :: <P, O>(world: World, pair: Pair<P, O>) -> Id<P>,
pair_second = ecs_pair_second :: <P, O>(world: World, pair: Pair<P, O>) -> Id<O>, pair_second = ecs_pair_second :: <P, O>(world: World, pair: Pair<P, O>) -> Id<O>,
entity_index_get_alive = entity_index_get_alive, entity_index_get_alive = entity_index_get_alive,
get_max_ids_difference = get_max_ids_difference,
archetype_append_to_records = archetype_append_to_records, archetype_append_to_records = archetype_append_to_records,
id_record_ensure = id_record_ensure :: (World, Id) -> ComponentRecord, id_record_ensure = id_record_ensure :: (World, Id) -> ComponentRecord,