Operator hub - Introduce Escape Gallery branding and Glitch: the Dark Machine room views - Add cabinet illustrations, Pac-Man marquee/gameplay artwork, and waiting states - Add device feedback panels with RFID readings, input/output states, and stale status - Add logged operator hardware interventions with request deduplication Room and cabinet authoring - Add a visual custom-PCB connection editor with per-cabinet device inventory - Support device IDs, bindings, wiring notes, input polarity, and validation - Add physical-room label/dimension toggles and editable doorway annotations - Preserve doorway changes through undo, save, and revert - Expand cabinet profiles, room layout, and Glitch scenario resources Scenarios and gameplay - Add per-assignment game configuration and runtime feature validation - Add timed test wins and Frogger individual-home objectives - Add the three-cabinet timed/score/Frogger test scenario - Add Cabinet 1 Pac-Man RFID credits, credit sound, and CREDIT 0/1 display - Require physical Start after an accepted scan and prevent duplicate credits Pi hardware and deployment - Add GPIO feedback sampling and a separate multiplexed RFID helper - Validate reader pin ownership and input/output conflicts - Add SSH cabinet startup and Pi desktop-session service support - Add master packaging, site setup, SSH enrollment, and staged cabinet releases - Verify deployment manifests and support explicit activation/status/log commands Documentation and verification - Consolidate the root README around the current architecture and setup workflow - Add the complete master/Pi/RFID export and deployment walkthrough - Document network isolation, credentials, card identification, and rollback - Add PCB, room-editor, feedback, credit, deployment, and controller tests - Isolate protocol tests from designer-edited cabinet configurations Known limitations - RFID helper compilation and physical Pi commissioning remain unverified - Fleet provisioning does not yet configure RFID-only installations completely - Broader Pac-Man tests retain a ghost-capture assertion failure - Staged exports must be rebuilt and checked before deploying runtime 2.3
90 lines
1.5 KiB
GDScript
90 lines
1.5 KiB
GDScript
@tool
|
|
class_name CabinetProfile
|
|
extends Resource
|
|
|
|
|
|
@export var cabinet_id: StringName = &""
|
|
@export var display_name: String = ""
|
|
|
|
@export var capabilities: Array[StringName] = []
|
|
|
|
@export var hardware_config: HardwareConfig
|
|
|
|
@export_group("PCB Connections")
|
|
@export var pcb_config: CabinetPCBConfig
|
|
@export_group("")
|
|
|
|
const FEET_TO_METERS: float = 0.3048
|
|
const METERS_TO_FEET: float = 1.0 / FEET_TO_METERS
|
|
|
|
|
|
#
|
|
# Stored internally in meters for compatibility with the
|
|
# existing room/layout system.
|
|
#
|
|
@export_storage
|
|
var footprint_width_m: float = 0.80
|
|
|
|
@export_storage
|
|
var footprint_depth_m: float = 0.75
|
|
|
|
@export_storage
|
|
var height_m: float = 1.80
|
|
|
|
|
|
#
|
|
# Designer-facing dimensions.
|
|
#
|
|
@export_group("Physical Dimensions")
|
|
|
|
@export_range(0.25, 12.0, 0.01, "suffix: ft")
|
|
var footprint_width_ft: float:
|
|
get:
|
|
return (
|
|
footprint_width_m
|
|
* METERS_TO_FEET
|
|
)
|
|
set(value):
|
|
footprint_width_m = (
|
|
value
|
|
* FEET_TO_METERS
|
|
)
|
|
|
|
|
|
@export_range(0.25, 12.0, 0.01, "suffix: ft")
|
|
var footprint_depth_ft: float:
|
|
get:
|
|
return (
|
|
footprint_depth_m
|
|
* METERS_TO_FEET
|
|
)
|
|
set(value):
|
|
footprint_depth_m = (
|
|
value
|
|
* FEET_TO_METERS
|
|
)
|
|
|
|
|
|
@export_range(0.25, 20.0, 0.01, "suffix: ft")
|
|
var height_ft: float:
|
|
get:
|
|
return (
|
|
height_m
|
|
* METERS_TO_FEET
|
|
)
|
|
set(value):
|
|
height_m = (
|
|
value
|
|
* FEET_TO_METERS
|
|
)
|
|
|
|
@export_group("Physical Appearance")
|
|
|
|
@export var editor_texture: Texture2D = null
|
|
|
|
@export_range(0.1, 4.0, 0.05)
|
|
var editor_texture_scale: float = 1.0
|
|
|
|
func has_capability(capability: StringName) -> bool:
|
|
return capabilities.has(capability)
|