mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-17 20:47:29 +00:00
## About The Pull Request Removes all of the duplicate global lists for specific machine types where the only thing they do is store all machines of that type. Adds machine tracking to SSmachines in the form of a list for all machines, and then an associative list for machines by their type. Previously we have machines in multiple global lists, such as airlocks being in GLOB.doors, GLOB.airlocks, GLOB.machines. This makes that not a thing, and also means that iterating through GLOB.machines looking for a specific type is no longer as expensive.
49 lines
1.9 KiB
Plaintext
49 lines
1.9 KiB
Plaintext
/datum/computer_file/program/alarm_monitor
|
|
filename = "alarmmonitor"
|
|
filedesc = "Canary"
|
|
category = PROGRAM_CATEGORY_ENGI
|
|
ui_header = "alarm_green.gif"
|
|
program_icon_state = "alert-green"
|
|
extended_desc = "This program provides visual interface for a station's alarm system."
|
|
requires_ntnet = 1
|
|
size = 4
|
|
tgui_id = "NtosStationAlertConsole"
|
|
program_icon = "bell"
|
|
/// If there is any station alert
|
|
var/has_alert = FALSE
|
|
/// Station alert datum for showing alerts UI
|
|
var/datum/station_alert/alert_control
|
|
|
|
/datum/computer_file/program/alarm_monitor/on_install()
|
|
. = ..()
|
|
//We want to send an alarm if we're in one of the mining home areas
|
|
//Or if we're on station. Otherwise, die.
|
|
var/list/allowed_areas = GLOB.the_station_areas + typesof(/area/mine)
|
|
alert_control = new(computer, list(ALARM_ATMOS, ALARM_FIRE, ALARM_POWER), listener_areas = allowed_areas)
|
|
RegisterSignals(alert_control.listener, list(COMSIG_ALARM_LISTENER_TRIGGERED, COMSIG_ALARM_LISTENER_CLEARED), PROC_REF(update_alarm_display))
|
|
|
|
/datum/computer_file/program/alarm_monitor/Destroy()
|
|
QDEL_NULL(alert_control)
|
|
return ..()
|
|
|
|
/datum/computer_file/program/alarm_monitor/ui_data(mob/user)
|
|
var/list/data = list()
|
|
data += alert_control.ui_data(user)
|
|
return data
|
|
|
|
/datum/computer_file/program/alarm_monitor/proc/update_alarm_display()
|
|
SIGNAL_HANDLER
|
|
// has_alert is true if there are any active alarms in our listener.
|
|
has_alert = (length(alert_control.listener.alarms) > 0)
|
|
|
|
if(!has_alert)
|
|
program_icon_state = "alert-green"
|
|
ui_header = "alarm_green.gif"
|
|
else
|
|
// If we don't know the status, assume the worst.
|
|
// Technically we should never have anything other than a truthy or falsy value
|
|
// but this will allow for unknown values to fall through to be an actual alert.
|
|
program_icon_state = "alert-red"
|
|
ui_header = "alarm_red.gif"
|
|
update_computer_icon() // Always update the icon after we check our conditional because we might've changed it
|