diff --git a/jecs.luau b/jecs.luau index ce5f5ba..62b911d 100755 --- a/jecs.luau +++ b/jecs.luau @@ -118,6 +118,8 @@ type world = { max_component_id: number, max_archetype_id: number, + start_component_id: number, + start_tag_id: number, observable: Map>, @@ -155,6 +157,8 @@ export type World = { max_component_id: number, max_archetype_id: number, + start_component_id: number, + start_tag_id: number, observable: Map>, @@ -752,6 +756,12 @@ local function ECS_ID_IS_WILDCARD(e: i53): boolean return first == EcsWildcard or second == EcsWildcard 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 component_index = world.component_index local idr: ComponentRecord = component_index[id] @@ -2249,6 +2259,9 @@ local function world_new() archetype_index = archetype_index, max_archetype_id = 0, max_component_id = ecs_max_component_id, + + start_component_id = ecs_max_component_id, + start_tag_id = ecs_max_tag_id, observable = observable, signals = signals, @@ -3313,6 +3326,7 @@ return { pair_first = ecs_pair_first :: (world: World, pair: Pair) -> Id

, pair_second = ecs_pair_second :: (world: World, pair: Pair) -> Id, entity_index_get_alive = entity_index_get_alive, + get_max_ids_difference = get_max_ids_difference, archetype_append_to_records = archetype_append_to_records, id_record_ensure = id_record_ensure :: (World, Id) -> ComponentRecord,