mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-30 12:13:02 +00:00
This converts the machine and mob processes to the SMC. Additionally, it adds the Atom subsystem, which handles all Initialize() calls in place of the old gameticker. Due to incompatibility with our atmospherics (FUCK OUR ATMOSPHERICS FOR FUCKING EVER JESUS CHRIST WHO THE FUCK MADE THIS PIECE OF GODDAMN SHIT) atmospherics machines do not use Initialize() as they should, instead opting for a custom atmos_init proc that the air controller handles.
184 lines
5.3 KiB
Plaintext
184 lines
5.3 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_airlock_mech_sensor
|
|
var/tag_shuttle_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)
|
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
|
if(!ui)
|
|
ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290)
|
|
ui.open()
|
|
ui.set_auto_update(1)
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
|
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"]
|
|
)
|
|
|
|
return data
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/Topic(href, href_list)
|
|
if(..())
|
|
return 1
|
|
|
|
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)
|
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
|
if(!ui)
|
|
ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290)
|
|
ui.open()
|
|
ui.set_auto_update(1)
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
|
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"],
|
|
)
|
|
|
|
return data
|
|
|
|
/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)
|
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
|
if(!ui)
|
|
ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220)
|
|
ui.open()
|
|
ui.set_auto_update(1)
|
|
|
|
/obj/machinery/embedded_controller/radio/airlock/access_controller/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state)
|
|
var/data[0]
|
|
|
|
data = list(
|
|
"exterior_status" = program.memory["exterior_status"],
|
|
"interior_status" = program.memory["interior_status"],
|
|
"processing" = program.memory["processing"]
|
|
)
|
|
|
|
return data
|
|
|
|
/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
|