[MIRROR] Airlock Construction (#9580)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2024-12-05 08:04:35 -07:00
committed by GitHub
parent 5f03a3f37f
commit 67fe8c3c8e
23 changed files with 662 additions and 164 deletions

View File

@@ -17,6 +17,8 @@
valid_actions = list("cycle_ext", "cycle_int", "force_ext", "force_int", "abort", "purge", "secure")
layer = ABOVE_WINDOW_LAYER
var/deconstructable = FALSE
/obj/machinery/embedded_controller/radio/airlock/Destroy()
// TODO - Leshana - Implement dummy terminals
//for(var/thing in dummy_terminals)
@@ -30,12 +32,75 @@
if(!allowed(user))
return min(STATUS_UPDATE, .)
/obj/machinery/embedded_controller/radio/airlock/attackby(obj/item/I, mob/user)
if(deconstructable)
if(default_deconstruction_screwdriver(user, I))
return
if(default_deconstruction_crowbar(user, I))
return
. = ..()
/obj/machinery/embedded_controller/radio/airlock/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
data["panel_open"] = panel_open
data["tags"] = null
data["frequency"] = null
data["min_freq"] = null
data["max_freq"] = null
if(panel_open)
var/datum/embedded_program/airlock/airlock_program = program
data["tags"] = airlock_program.get_all_tags()
data["frequency"] = frequency
data["min_freq"] = RADIO_LOW_FREQ
data["max_freq"] = RADIO_HIGH_FREQ
return data
/obj/machinery/embedded_controller/radio/airlock/tgui_act(action, params)
. = ..()
if(.)
return
if(!panel_open)
return
switch(action)
if("edit_tag")
var/datum/embedded_program/airlock/airlock_program = program
var/tag = params["tag"]
var/current = airlock_program.get_tag(tag)
var/new_tag = tgui_input_text(usr, "What would you like to set [tag] to?", "New [tag]?", current, 30, FALSE, TRUE)
if(new_tag)
airlock_program.set_tag(tag, new_tag)
return TRUE
if("set_frequency")
set_frequency(sanitize_frequency(text2num(params["freq"]), RADIO_LOW_FREQ, RADIO_HIGH_FREQ))
return TRUE
/obj/machinery/embedded_controller/radio/airlock/update_icon()
cut_overlays()
if(panel_open)
add_overlay("airlock_control_open")
//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"
deconstructable = TRUE
circuit = /obj/item/circuitboard/airlock_cycling
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/tgui_data(mob/user)
. = list(
var/list/data = ..()
// Deliberately not using UNTYPED_LIST_ADD, we want this to be appended
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"]),
@@ -45,15 +110,22 @@
"internalTemplateName" = "AirlockConsoleAdvanced",
)
return data
//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
valid_actions = list("cycle_ext", "cycle_int", "force_ext", "force_int", "abort")
deconstructable = TRUE
circuit = /obj/item/circuitboard/airlock_cycling
/obj/machinery/embedded_controller/radio/airlock/airlock_controller/tgui_data(mob/user)
. = list(
var/list/data = ..()
// Deliberately not using UNTYPED_LIST_ADD, we want this to be appended
data += list(
"chamber_pressure" = round(program.memory["chamber_sensor_pressure"]),
"exterior_status" = program.memory["exterior_status"],
"interior_status" = program.memory["interior_status"],
@@ -61,6 +133,8 @@
"internalTemplateName" = "AirlockConsoleSimple",
)
return data
//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'
@@ -69,7 +143,8 @@
name = "Access Controller"
tag_secure = 1
valid_actions = list("cycle_ext_door", "cycle_int_door", "force_ext", "force_int")
deconstructable = TRUE
circuit = /obj/item/circuitboard/airlock_cycling
/obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon()
if(on && program)
@@ -81,9 +156,14 @@
icon_state = "access_control_off"
/obj/machinery/embedded_controller/radio/airlock/access_controller/tgui_data(mob/user)
. = list(
var/list/data = ..()
// Deliberately not using UNTYPED_LIST_ADD, we want this to be appended
data += list(
"exterior_status" = program.memory["exterior_status"],
"interior_status" = program.memory["interior_status"],
"processing" = program.memory["processing"],
"internalTemplateName" = "DoorAccessConsole",
)
return data

View File

@@ -414,6 +414,55 @@ send an additional command to open the door again.
if(doorCommand)
signalDoor(doorTag, doorCommand)
/datum/embedded_program/airlock/proc/get_all_tags()
return list(
"id_tag" = id_tag,
"tag_exterior_door" = tag_exterior_door,
"tag_interior_door" = tag_interior_door,
"tag_airpump" = tag_airpump,
"tag_chamber_sensor" = tag_chamber_sensor,
"tag_exterior_sensor" = tag_exterior_sensor,
"tag_interior_sensor" = tag_interior_sensor,
"tag_airlock_mech_sensor" = tag_airlock_mech_sensor,
"tag_shuttle_mech_sensor" = tag_shuttle_mech_sensor
)
/datum/embedded_program/airlock/proc/get_tag(tag_name)
switch(tag_name)
if("id_tag") . = id_tag
if("tag_exterior_door") . = tag_exterior_door
if("tag_interior_door") . = tag_interior_door
if("tag_airpump") . = tag_airpump
if("tag_chamber_sensor") . = tag_chamber_sensor
if("tag_exterior_sensor") . = tag_exterior_sensor
if("tag_interior_sensor") . = tag_interior_sensor
if("tag_airlock_mech_sensor") . = tag_airlock_mech_sensor
if("tag_shuttle_mech_sensor") . = tag_shuttle_mech_sensor
/datum/embedded_program/airlock/proc/set_tag(tag_name, new_tag)
switch(tag_name)
if("id_tag")
id_tag = new_tag
if("tag_exterior_door")
tag_exterior_door = new_tag
signalDoor(tag_exterior_door, "update")
if("tag_interior_door")
tag_interior_door = new_tag
signalDoor(tag_interior_door, "update")
if("tag_airpump")
tag_airpump = new_tag
if("tag_chamber_sensor")
tag_chamber_sensor = new_tag
if("tag_exterior_sensor")
tag_exterior_sensor = new_tag
if("tag_interior_sensor")
tag_interior_sensor = new_tag
if("tag_airlock_mech_sensor")
tag_airlock_mech_sensor = new_tag
if("tag_shuttle_mech_sensor")
tag_shuttle_mech_sensor = new_tag
#undef SKIPCYCLE_MARGIN
#undef MIN_TARGET_PRESSURE
@@ -424,4 +473,4 @@ send an additional command to open the door again.
#undef TARGET_NONE
#undef TARGET_INOPEN
#undef TARGET_OUTOPEN
#undef TARGET_OUTOPEN

View File

@@ -0,0 +1,44 @@
/obj/item/circuitboard/airlock_cycling
name = T_BOARD("cycling airlock button")
build_path = /obj/machinery/access_button
board_type = new /datum/frame/frame_types/button
matter = list(MAT_STEEL = 50, MAT_GLASS = 50)
/datum/design/circuit/airlock_cycling
name = "Machine Design (Cycling Airlock Board)"
desc = "The circuit board for cycling airlock parts."
id = "airlock_cycling"
build_path = /obj/item/circuitboard/airlock_cycling
req_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
sort_string = "MAAAD"
/obj/item/circuitboard/airlock_cycling/attackby(obj/item/I as obj, mob/user as mob)
if(I.has_tool_quality(TOOL_MULTITOOL))
var/result = tgui_input_list(
user,
"What do you want to reconfigure the board to?",
"Multitool-Circuitboard interface",
list(
"Button",
"Sensor",
"Controller - Standard",
"Controller - Advanced",
"Controller - Access",
))
switch(result)
if("Button")
name = T_BOARD("cycling airlock button")
build_path = /obj/machinery/access_button
if("Sensor")
name = T_BOARD("cycling airlock sensor")
build_path = /obj/machinery/airlock_sensor
if("Controller - Standard")
name = T_BOARD("cycling airlock controller (simple)")
build_path = /obj/machinery/embedded_controller/radio/airlock/airlock_controller
if("Controller - Advanced")
name = T_BOARD("cycling airlock controller (advanced)")
build_path = /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller
if("Controller - Access")
name = T_BOARD("cycling airlock controller (access)")
build_path = /obj/machinery/embedded_controller/radio/airlock/access_controller
return

View File

@@ -17,6 +17,11 @@
qdel(program) // the program will clear the ref in its Destroy
return ..()
/obj/machinery/embedded_controller/examine(mob/user, infix, suffix)
. = ..()
if(in_range(src, user))
. += "It has an ID tag of \"[program?.id_tag]\""
/obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line)
return 0
@@ -36,6 +41,7 @@
if(LAZYLEN(valid_actions))
if(action in valid_actions)
program.receive_user_command(action)
return TRUE
if(ui.user)
add_fingerprint(ui.user)