mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
[MIRROR] Airlock Construction (#9580)
Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
5f03a3f37f
commit
67fe8c3c8e
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
44
code/game/machinery/embedded_controller/construction.dm
Normal file
44
code/game/machinery/embedded_controller/construction.dm
Normal 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
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user