mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-01 21:13:47 +00:00
Generalizes embedded program
This commit is contained in:
@@ -13,6 +13,16 @@
|
||||
var/obj/machinery/embedded_controller/master
|
||||
|
||||
var/id_tag
|
||||
|
||||
/datum/computer/file/embedded_program/proc/receive_user_command(command)
|
||||
return
|
||||
|
||||
/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/airlock
|
||||
var/tag_exterior_door
|
||||
var/tag_interior_door
|
||||
var/tag_airpump
|
||||
@@ -23,8 +33,7 @@
|
||||
var/state = STATE_WAIT
|
||||
var/target_state = TARGET_NONE
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/New()
|
||||
/datum/computer/file/embedded_program/airlock/New()
|
||||
..()
|
||||
memory["chamber_sensor_pressure"] = ONE_ATMOSPHERE
|
||||
memory["external_sensor_pressure"] = 0 //assume vacuum for simple airlock controller
|
||||
@@ -36,10 +45,7 @@
|
||||
memory["purge"] = 0
|
||||
memory["secure"] = 0
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
/datum/computer/file/embedded_program/airlock/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
var/receive_tag = signal.data["tag"]
|
||||
if(!receive_tag) return
|
||||
|
||||
@@ -92,7 +98,7 @@
|
||||
receive_user_command("cycle_int")
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/proc/receive_user_command(command)
|
||||
/datum/computer/file/embedded_program/airlock/receive_user_command(command)
|
||||
var/shutdown_pump = 0
|
||||
switch(command)
|
||||
if("cycle_ext")
|
||||
@@ -142,7 +148,7 @@
|
||||
signalPump(tag_airpump, 0) //send a signal to stop pressurizing
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/proc/process()
|
||||
/datum/computer/file/embedded_program/airlock/proc/process()
|
||||
if(!state)
|
||||
if(target_state)
|
||||
switch(target_state)
|
||||
@@ -217,38 +223,38 @@
|
||||
|
||||
//these are here so that subtypes don't have to make so many assuptions about our implementation
|
||||
|
||||
/datum/computer/file/embedded_program/proc/begin_cycle_in()
|
||||
/datum/computer/file/embedded_program/airlock/proc/begin_cycle_in()
|
||||
state = STATE_WAIT
|
||||
target_state = TARGET_INOPEN
|
||||
|
||||
/datum/computer/file/embedded_program/proc/begin_cycle_out()
|
||||
/datum/computer/file/embedded_program/airlock/proc/begin_cycle_out()
|
||||
state = STATE_WAIT
|
||||
target_state = TARGET_OUTOPEN
|
||||
|
||||
/datum/computer/file/embedded_program/proc/stop_cycling()
|
||||
/datum/computer/file/embedded_program/airlock/proc/stop_cycling()
|
||||
state = STATE_WAIT
|
||||
target_state = TARGET_NONE
|
||||
|
||||
/datum/computer/file/embedded_program/proc/done_cycling()
|
||||
/datum/computer/file/embedded_program/airlock/proc/done_cycling()
|
||||
return (state == STATE_WAIT && target_state == TARGET_NONE)
|
||||
|
||||
/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
|
||||
/datum/computer/file/embedded_program/airlock/proc/post_signal(datum/signal/signal, comm_line)
|
||||
if(master)
|
||||
master.post_signal(signal, comm_line)
|
||||
else
|
||||
del(signal)
|
||||
|
||||
/datum/computer/file/embedded_program/proc/check_doors_closed()
|
||||
/datum/computer/file/embedded_program/airlock/proc/check_doors_closed()
|
||||
return (memory["interior_status"]["state"] == "closed" && memory["exterior_status"["state"] == "closed")
|
||||
|
||||
/datum/computer/file/embedded_program/proc/signalDoor(var/tag, var/command)
|
||||
/datum/computer/file/embedded_program/airlock/proc/signalDoor(var/tag, var/command)
|
||||
var/datum/signal/signal = new
|
||||
signal.data["tag"] = tag
|
||||
signal.data["command"] = command
|
||||
post_signal(signal)
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/proc/signalPump(var/tag, var/power, var/direction, var/pressure)
|
||||
/datum/computer/file/embedded_program/airlock/proc/signalPump(var/tag, var/power, var/direction, var/pressure)
|
||||
var/datum/signal/signal = new
|
||||
signal.data = list(
|
||||
"tag" = tag,
|
||||
@@ -260,7 +266,7 @@
|
||||
post_signal(signal)
|
||||
|
||||
//this is called to set the appropriate door state at the end of a cycling process, or for the exterior buttons
|
||||
/datum/computer/file/embedded_program/proc/cycleDoors(var/target)
|
||||
/datum/computer/file/embedded_program/airlock/proc/cycleDoors(var/target)
|
||||
switch(target)
|
||||
if(TARGET_OUTOPEN)
|
||||
toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "close")
|
||||
@@ -289,7 +295,7 @@ Only sends a command if it is needed, i.e. if the door is
|
||||
already open, passing an open command to this proc will not
|
||||
send an additional command to open the door again.
|
||||
----------------------------------------------------------*/
|
||||
/datum/computer/file/embedded_program/proc/toggleDoor(var/list/doorStatus, var/doorTag, var/secure, var/command)
|
||||
/datum/computer/file/embedded_program/airlock/proc/toggleDoor(var/list/doorStatus, var/doorTag, var/secure, var/command)
|
||||
var/doorCommand = null
|
||||
|
||||
if(command == "toggle")
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
#define STATE_DOCKED 3
|
||||
|
||||
|
||||
/datum/computer/file/embedded_program/docking_port
|
||||
/datum/computer/file/embedded_program/airlock/docking
|
||||
var/tag_target //the tag of the docking controller that we are trying to dock with
|
||||
var/airlock_override = 0 //allows use of the docking port as a normal airlock (normally this is only allowed in STATE_UNDOCKED)
|
||||
var/dock_state = STATE_UNDOCKED
|
||||
var/dock_master = 0 //are we the initiator of the dock?
|
||||
|
||||
/datum/computer/file/embedded_program/docking_port/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
/datum/computer/file/embedded_program/airlock/docking/receive_signal(datum/signal/signal, receive_method, receive_param)
|
||||
var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id
|
||||
var/command = signal.data["command"]
|
||||
var/recipient = signal.data["recipient"]
|
||||
@@ -53,11 +53,11 @@
|
||||
|
||||
..()
|
||||
|
||||
/datum/computer/file/embedded_program/docking_port/receive_user_command(command)
|
||||
/datum/computer/file/embedded_program/airlock/docking/receive_user_command(command)
|
||||
if (state == STATE_UNDOCKED || airlock_override)
|
||||
..(command)
|
||||
|
||||
/datum/computer/file/embedded_program/docking_port/process()
|
||||
/datum/computer/file/embedded_program/airlock/docking/process()
|
||||
..() //process regular airlock stuff first
|
||||
|
||||
switch(dock_state)
|
||||
@@ -81,17 +81,17 @@
|
||||
dock_master = 0
|
||||
tag_target = null
|
||||
|
||||
/datum/computer/file/embedded_program/docking_port/cycleDoors(var/target)
|
||||
/datum/computer/file/embedded_program/airlock/docking/cycleDoors(var/target)
|
||||
if (state == STATE_UNDOCKED || airlock_override)
|
||||
..(target)
|
||||
|
||||
//get the docking port into a good state for docking.
|
||||
/datum/computer/file/embedded_program/docking_port/proc/begin_dock()
|
||||
/datum/computer/file/embedded_program/airlock/docking/proc/begin_dock()
|
||||
dock_state = STATE_DOCKING
|
||||
begin_cycle_in()
|
||||
|
||||
//get the docking port into a good state for undocking.
|
||||
/datum/computer/file/embedded_program/docking_port/proc/begin_undock()
|
||||
/datum/computer/file/embedded_program/airlock/docking/proc/begin_undock()
|
||||
dock_state = STATE_UNDOCKING
|
||||
stop_cycling()
|
||||
|
||||
@@ -99,9 +99,14 @@
|
||||
toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "close")
|
||||
toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "close")
|
||||
|
||||
/datum/computer/file/embedded_program/docking_port/proc/send_docking_command(var/recipient, var/command)
|
||||
/datum/computer/file/embedded_program/airlock/docking/proc/send_docking_command(var/recipient, var/command)
|
||||
var/datum/signal/signal = new
|
||||
signal.data["tag"] = id_tag
|
||||
signal.data["command"] = command
|
||||
signal.data["recipient"] = recipient
|
||||
post_signal(signal)
|
||||
|
||||
#undef STATE_UNDOCKED
|
||||
#undef STATE_DOCKING
|
||||
#undef STATE_UNDOCKING
|
||||
#undef STATE_DOCKED
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
/obj/machinery/embedded_controller/radio/initialize()
|
||||
set_frequency(frequency)
|
||||
var/datum/computer/file/embedded_program/new_prog = new
|
||||
var/datum/computer/file/embedded_program/airlock/new_prog = new
|
||||
|
||||
new_prog.id_tag = id_tag
|
||||
new_prog.tag_exterior_door = tag_exterior_door
|
||||
|
||||
Reference in New Issue
Block a user