mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Squashed 10 commits: Adds simple docking controllers Adds docking_controllers.dm Moves docking handshake code into its own type Keeps docking code separate from the code for messing with airlocks and doors. Improves handling of invalid states Adds docking controller to research shuttle dock Also adds the start of a nano-ui template. Resetting the dock controller resets the override Adds debug verbs Adds support for overriding docking checks Less confusing name for the docking program
184 lines
5.1 KiB
Plaintext
184 lines
5.1 KiB
Plaintext
//base type for controllers of two-door systems
|
|
/obj/machinery/embedded_controller/radio/airlock
|
|
// Setup parameters only
|
|
var/tag_exterior_door
|
|
var/tag_interior_door
|
|
var/tag_airpump
|
|
var/tag_chamber_sensor
|
|
var/tag_exterior_sensor
|
|
var/tag_interior_sensor
|
|
var/tag_secure = 0
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/initialize()
|
|
..()
|
|
|
|
var/datum/computer/file/embedded_program/airlock/new_program = new/datum/computer/file/embedded_program/airlock(src)
|
|
|
|
new_program.tag_exterior_door = tag_exterior_door
|
|
new_program.tag_interior_door = tag_interior_door
|
|
new_program.tag_airpump = tag_airpump
|
|
new_program.tag_chamber_sensor = tag_chamber_sensor
|
|
new_program.tag_exterior_sensor = tag_exterior_sensor
|
|
new_program.tag_interior_sensor = tag_interior_sensor
|
|
new_program.memory["secure"] = tag_secure
|
|
|
|
program = new_program
|
|
|
|
spawn(10)
|
|
new_program.signalDoor(tag_exterior_door, "update") //signals connected doors to update their status
|
|
new_program.signalDoor(tag_interior_door, "update")
|
|
|
|
|
|
//Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks
|
|
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller
|
|
name = "Advanced Airlock Controller"
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
|
|
var/data[0]
|
|
|
|
data = list(
|
|
"chamber_pressure" = round(program.memory["chamber_sensor_pressure"]),
|
|
"external_pressure" = round(program.memory["external_sensor_pressure"]),
|
|
"internal_pressure" = round(program.memory["internal_sensor_pressure"]),
|
|
"processing" = program.memory["processing"],
|
|
"purge" = program.memory["purge"],
|
|
"secure" = program.memory["secure"]
|
|
)
|
|
|
|
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
|
|
|
|
if (!ui)
|
|
ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290)
|
|
|
|
ui.set_initial_data(data)
|
|
|
|
ui.open()
|
|
|
|
ui.set_auto_update(1)
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/Topic(href, href_list)
|
|
var/clean = 0
|
|
switch(href_list["command"]) //anti-HTML-hacking checks
|
|
if("cycle_ext")
|
|
clean = 1
|
|
if("cycle_int")
|
|
clean = 1
|
|
if("force_ext")
|
|
clean = 1
|
|
if("force_int")
|
|
clean = 1
|
|
if("abort")
|
|
clean = 1
|
|
if("purge")
|
|
clean = 1
|
|
if("secure")
|
|
clean = 1
|
|
|
|
if(clean)
|
|
program.receive_user_command(href_list["command"])
|
|
|
|
return 1
|
|
|
|
|
|
//Airlock controller for airlock control - most airlocks on the station use this
|
|
/obj/machinery/embedded_controller/radio/airlock/airlock_controller
|
|
name = "Airlock Controller"
|
|
tag_secure = 1
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
|
|
var/data[0]
|
|
|
|
data = list(
|
|
"chamber_pressure" = round(program.memory["chamber_sensor_pressure"]),
|
|
"exterior_status" = program.memory["exterior_status"],
|
|
"interior_status" = program.memory["interior_status"],
|
|
"processing" = program.memory["processing"],
|
|
)
|
|
|
|
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
|
|
|
|
if (!ui)
|
|
ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290)
|
|
|
|
ui.set_initial_data(data)
|
|
|
|
ui.open()
|
|
|
|
ui.set_auto_update(1)
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/airlock_controller/Topic(href, href_list)
|
|
var/clean = 0
|
|
switch(href_list["command"]) //anti-HTML-hacking checks
|
|
if("cycle_ext")
|
|
clean = 1
|
|
if("cycle_int")
|
|
clean = 1
|
|
if("force_ext")
|
|
clean = 1
|
|
if("force_int")
|
|
clean = 1
|
|
if("abort")
|
|
clean = 1
|
|
|
|
if(clean)
|
|
program.receive_user_command(href_list["command"])
|
|
|
|
return 1
|
|
|
|
|
|
//Access controller for door control - used in virology and the like
|
|
/obj/machinery/embedded_controller/radio/airlock/access_controller
|
|
icon = 'icons/obj/airlock_machines.dmi'
|
|
icon_state = "access_control_standby"
|
|
|
|
name = "Access Controller"
|
|
tag_secure = 1
|
|
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon()
|
|
if(on && program)
|
|
if(program.memory["processing"])
|
|
icon_state = "access_control_process"
|
|
else
|
|
icon_state = "access_control_standby"
|
|
else
|
|
icon_state = "access_control_off"
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
|
|
var/data[0]
|
|
|
|
data = list(
|
|
"exterior_status" = program.memory["exterior_status"],
|
|
"interior_status" = program.memory["interior_status"],
|
|
"processing" = program.memory["processing"]
|
|
)
|
|
|
|
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
|
|
|
|
if (!ui)
|
|
ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220)
|
|
|
|
ui.set_initial_data(data)
|
|
|
|
ui.open()
|
|
|
|
ui.set_auto_update(1)
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/access_controller/Topic(href, href_list)
|
|
var/clean = 0
|
|
switch(href_list["command"]) //anti-HTML-hacking checks
|
|
if("cycle_ext_door")
|
|
clean = 1
|
|
if("cycle_int_door")
|
|
clean = 1
|
|
if("force_ext")
|
|
if(program.memory["interior_status"]["state"] == "closed")
|
|
clean = 1
|
|
if("force_int")
|
|
if(program.memory["exterior_status"]["state"] == "closed")
|
|
clean = 1
|
|
|
|
if(clean)
|
|
program.receive_user_command(href_list["command"])
|
|
|
|
return 1 |