/obj/machinery/computer/station_alert name = "station alert console" desc = "Used to access the station's automated alert system." icon_screen = "alert:0" icon_keyboard = "atmos_key" circuit = /obj/item/circuitboard/computer/stationalert var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list()) light_color = LIGHT_COLOR_CYAN /obj/machinery/computer/station_alert/Initialize() . = ..() GLOB.alert_consoles += src /obj/machinery/computer/station_alert/Destroy() GLOB.alert_consoles -= src return ..() /obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "station_alert", name, 325, 500, master_ui, state) ui.open() /obj/machinery/computer/station_alert/ui_data(mob/user) var/list/data = list() data["alarms"] = list() for(var/class in alarms) data["alarms"][class] = list() for(var/area in alarms[class]) data["alarms"][class] += area return data /obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/A, O, obj/source) if(source.z != z) return if(stat & (BROKEN)) return var/list/L = alarms[class] for(var/I in L) if (I == A.name) var/list/alarm = L[I] var/list/sources = alarm[3] if (!(source in sources)) sources += source return 1 var/obj/machinery/camera/C = null var/list/CL = null if(O && islist(O)) CL = O if (CL.len == 1) C = CL[1] else if(O && istype(O, /obj/machinery/camera)) C = O L[A.name] = list(A, (C ? C : O), list(source)) return 1 /obj/machinery/computer/station_alert/proc/cancelAlarm(class, area/A, obj/origin) if(stat & (BROKEN)) return var/list/L = alarms[class] var/cleared = 0 for (var/I in L) if (I == A.name) var/list/alarm = L[I] var/list/srcs = alarm[3] if (origin in srcs) srcs -= origin if (srcs.len == 0) cleared = 1 L -= I return !cleared /obj/machinery/computer/station_alert/update_icon() ..() cut_overlays() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) var/overlay_state = icon_screen if(stat & (NOPOWER|BROKEN)) add_overlay("[icon_keyboard]_off") return add_overlay(icon_keyboard) var/active_alarms = FALSE for(var/cat in alarms) var/list/L = alarms[cat] if(L.len) active_alarms = TRUE if(active_alarms) overlay_state = "alert:2" add_overlay("alert:2") else overlay_state = "alert:0" add_overlay("alert:0") SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir) SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128)