class_name FacilityCatalog extends RefCounted ## Canonical MVP order from GAME_SPECIFICATION section 7.6. ## ## DefinitionRegistry deliberately sorts its query results by stable ID. This ## list instead preserves the design-table order for tools that present the ## baseline catalog to designers or players. const BASELINE_FACILITY_IDS: Array[StringName] = [ &"reception", &"standard_room", &"cafeteria", &"kitchen", &"public_bath", &"warehouse", &"staff_waiting_room", &"security_station", &"tavern", &"massage_room", &"guest_elevator", &"service_elevator", &"staff_door", &"guest_corridor", &"service_corridor", &"adult_private_room", ] const FACILITY_PATHS: Array[String] = [ "res://data/facilities/reception.tres", "res://data/facilities/standard_room.tres", "res://data/facilities/cafeteria.tres", "res://data/facilities/kitchen.tres", "res://data/facilities/public_bath.tres", "res://data/facilities/warehouse.tres", "res://data/facilities/staff_waiting_room.tres", "res://data/facilities/security_station.tres", "res://data/facilities/tavern.tres", "res://data/facilities/massage_room.tres", "res://data/facilities/guest_elevator.tres", "res://data/facilities/service_elevator.tres", "res://data/facilities/staff_door.tres", "res://data/facilities/guest_corridor.tres", "res://data/facilities/service_corridor.tres", "res://data/facilities/adult_private_room.tres", ] ## Required movement infrastructure added after the original sixteen-facility ## catalog. Separate paths preserve the baseline design table and legacy scans. ## Original-spec facilities integrated into normal construction beyond baseline. const ORIGINAL_FACILITY_PATHS: Array[String] = [ "res://data/facilities/expansion/cleaning_room.tres", "res://data/facilities/expansion/chapel.tres", "res://data/facilities/expansion/premium_room.tres", "res://data/facilities/expansion/staff_dormitory.tres", ] const RESCUE_FACILITY_PATHS: Array[String] = ["res://data/facilities/rescue/infirmary.tres"] const INFRASTRUCTURE_FACILITY_IDS: Array[StringName] = [ &"guest_stairs", &"service_stairs", ] const INFRASTRUCTURE_FACILITY_PATHS: Array[String] = [ "res://data/facilities/infrastructure/guest_stairs.tres", "res://data/facilities/infrastructure/service_stairs.tres", ] ## Optional post-MVP expansion definitions. They live below a subdirectory so ## DefinitionRegistry's baseline directory scan remains exactly compatible with ## existing saves and the sixteen-facility acceptance fixture. const EXPANSION_FACILITY_IDS: Array[StringName] = [ &"premium_room", &"tea_lounge", &"general_store", &"clinic", &"guild_counter", &"underground_guest_room", &"private_bath", &"secret_tavern", &"black_market", &"vip_private_salon", &"laundry", &"cold_storage", &"mana_control_room", &"maintenance_workshop", &"staff_dormitory", &"waste_processing", ] const EXPANSION_FACILITY_PATHS: Array[String] = [ "res://data/facilities/expansion/premium_room.tres", "res://data/facilities/expansion/tea_lounge.tres", "res://data/facilities/expansion/general_store.tres", "res://data/facilities/expansion/clinic.tres", "res://data/facilities/expansion/guild_counter.tres", "res://data/facilities/expansion/underground_guest_room.tres", "res://data/facilities/expansion/private_bath.tres", "res://data/facilities/expansion/secret_tavern.tres", "res://data/facilities/expansion/black_market.tres", "res://data/facilities/expansion/vip_private_salon.tres", "res://data/facilities/expansion/laundry.tres", "res://data/facilities/expansion/cold_storage.tres", "res://data/facilities/expansion/mana_control_room.tres", "res://data/facilities/expansion/maintenance_workshop.tres", "res://data/facilities/expansion/staff_dormitory.tres", "res://data/facilities/expansion/waste_processing.tres", ] static func load_all() -> Array[FacilityDefinition]: var result: Array[FacilityDefinition] = [] for path in FACILITY_PATHS: var definition := load(path) as FacilityDefinition if definition != null: result.append(definition) return result static func load_expansion() -> Array[FacilityDefinition]: var result: Array[FacilityDefinition] = [] for path in EXPANSION_FACILITY_PATHS: var definition := load(path) as FacilityDefinition if definition != null: result.append(definition) return result static func load_infrastructure() -> Array[FacilityDefinition]: var result: Array[FacilityDefinition] = [] for path in INFRASTRUCTURE_FACILITY_PATHS: var definition := load(path) as FacilityDefinition if definition != null: result.append(definition) return result static func load_available(include_expansion := false) -> Array[FacilityDefinition]: var result := load_all() if include_expansion: result.append_array(load_expansion()) return result static func by_id(facility_id: StringName) -> FacilityDefinition: var definitions := load_available(true) definitions.append_array(load_infrastructure()) for path: String in RESCUE_FACILITY_PATHS + ORIGINAL_FACILITY_PATHS: definitions.append(load(path) as FacilityDefinition) for definition in definitions: if definition.id == facility_id: return definition return null