Preserve approved pixel tower prototype as development baseline
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
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",
|
||||
]
|
||||
|
||||
## 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_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:
|
||||
for definition in load_available(true):
|
||||
if definition.id == facility_id:
|
||||
return definition
|
||||
return null
|
||||
Reference in New Issue
Block a user