diff --git a/jecs.luau b/jecs.luau index 37c550a..9221e35 100755 --- a/jecs.luau +++ b/jecs.luau @@ -110,6 +110,8 @@ type world = { max_component_id: number, max_archetype_id: number, + start_component_id: number, + start_tag_id: number, observable: Map>, @@ -147,6 +149,8 @@ export type World = { max_component_id: number, max_archetype_id: number, + start_component_id: number, + start_tag_id: number, observable: Map>, @@ -744,6 +748,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] @@ -2241,6 +2251,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, @@ -3305,6 +3318,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,