Files
CHOMPStation2/code/WorkInProgress/computer3/computers/atmos_alert.dm

111 lines
2.8 KiB
Plaintext

/obj/machinery/computer3/atmos_alert
default_prog = /datum/file/program/atmos_alert
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio)
icon_state = "frame-eng"
/datum/file/program/atmos_alert
name = "atmospheric alert monitor"
desc = "Recieves alerts over the radio."
active_state = "alert:2"
refresh = 1
var/list/priority_alarms = list()
var/list/minor_alarms = list()
execute(var/datum/file/program/source)
..(source)
if(!computer.radio)
computer.Crash(MISSING_PERIPHERAL)
computer.radio.set_frequency(1437,RADIO_ATMOSIA)
Reset()
..()
// Never save your work
priority_alarms.Cut()
minor_alarms.Cut()
// This will be called as long as the program is running on the parent computer
// and the computer has the radio peripheral
receive_signal(datum/signal/signal)
if(!signal || signal.encryption) return
var/zone = signal.data["zone"]
var/severity = signal.data["alert"]
if(!zone || !severity) return
minor_alarms -= zone
priority_alarms -= zone
if(severity=="severe")
priority_alarms += zone
else if (severity=="minor")
minor_alarms += zone
update_icon()
return
interact()
if(!interactable())
return
if(!computer.radio)
computer.Crash(MISSING_PERIPHERAL)
popup.set_content(return_text())
popup.open()
update_icon()
..()
if(priority_alarms.len > 0)
overlay.icon_state = "alert:2"
else if(minor_alarms.len > 0)
overlay.icon_state = "alert:1"
else
overlay.icon_state = "alert:0"
if(computer)
computer.update_icon()
proc/return_text()
var/priority_text = "<h2>Priority Alerts:</h2>"
var/minor_text = "<h2>Minor Alerts:</h2>"
if(priority_alarms.len)
for(var/zone in priority_alarms)
priority_text += "<FONT color='red'><B>[format_text(zone)]</B></FONT> [topic_link(src,"priority_clear=[ckey(zone)]","X")]<BR>"
else
priority_text += "No priority alerts detected.<BR>"
if(minor_alarms.len)
for(var/zone in minor_alarms)
minor_text += "<B>[format_text(zone)]</B> [topic_link(src,"minor_clear=[ckey(zone)]","X")]<BR>"
else
minor_text += "No minor alerts detected.<BR>"
return "[priority_text]<BR><HR>[minor_text]<BR>[topic_link(src,"close","Close")]"
Topic(var/href, var/list/href_list)
if(!interactable() || ..(href,href_list))
return
if("priority_clear" in href_list)
var/removing_zone = href_list["priority_clear"]
for(var/zone in priority_alarms)
if(ckey(zone) == removing_zone)
usr << "\green Priority Alert for area [zone] cleared."
priority_alarms -= zone
if("minor_clear" in href_list)
var/removing_zone = href_list["minor_clear"]
for(var/zone in minor_alarms)
if(ckey(zone) == removing_zone)
usr << "\green Minor Alert for area [zone] cleared."
minor_alarms -= zone
computer.updateUsrDialog()