mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Docking ports still don't use filters though, as it would mess with the docking ports that are also airlocks. Docking is infrequent though so it should be fine.
188 lines
4.9 KiB
Plaintext
188 lines
4.9 KiB
Plaintext
//base type for controllers of two-door systems
|
|
/obj/machinery/embedded_controller/radio/airlock
|
|
// Setup parameters only
|
|
radio_filter = RADIO_AIRLOCK
|
|
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_mech_sensor
|
|
var/tag_secure = 0
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/initialize()
|
|
..()
|
|
program = new/datum/computer/file/embedded_program/airlock(src)
|
|
|
|
//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/force_open = 1)
|
|
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, force_open)
|
|
|
|
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)
|
|
if(..())
|
|
return
|
|
|
|
usr.set_machine(src)
|
|
src.add_fingerprint(usr)
|
|
|
|
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/force_open = 1)
|
|
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, force_open)
|
|
|
|
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)
|
|
if(..())
|
|
return
|
|
|
|
usr.set_machine(src)
|
|
src.add_fingerprint(usr)
|
|
|
|
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/force_open = 1)
|
|
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, force_open)
|
|
|
|
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)
|
|
if(..())
|
|
return
|
|
|
|
usr.set_machine(src)
|
|
src.add_fingerprint(usr)
|
|
|
|
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 |