Files
TheTree_mock/scripts/data/facility_catalog.gd
T

137 lines
4.5 KiB
GDScript

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.
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 definition in definitions:
if definition.id == facility_id:
return definition
return null