listener update

This commit is contained in:
SandPoot
2024-05-22 00:06:08 -03:00
parent 2e5e548369
commit 7f953a03af
23 changed files with 518 additions and 651 deletions
+16 -70
View File
@@ -4,16 +4,17 @@
icon_screen = "alert:0"
icon_keyboard = "atmos_key"
circuit = /obj/item/circuitboard/computer/stationalert
var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list())
///Listens for alarms, provides the alarms list for our ui
var/datum/alarm_listener/listener
light_color = LIGHT_COLOR_CYAN
/obj/machinery/computer/station_alert/Initialize(mapload)
. = ..()
GLOB.alert_consoles += src
listener = new(list(ALARM_ATMOS, ALARM_FIRE, ALARM_POWER), list(z))
return ..()
/obj/machinery/computer/station_alert/Destroy()
GLOB.alert_consoles -= src
QDEL_NULL(listener)
return ..()
/obj/machinery/computer/station_alert/ui_interact(mob/user, datum/tgui/ui)
@@ -26,69 +27,19 @@
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
var/list/alarms = listener.alarms
for(var/alarm_type in alarms)
data["alarms"][alarm_type] = list()
for(var/area_name in alarms[alarm_type])
data["alarms"][alarm_type] += area_name
return data
/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/home, cameras, obj/source)
if(source.z != z)
return
if(stat & (BROKEN))
return
var/list/our_sort = alarms[class]
for(var/areaname in our_sort)
if (areaname == home.name)
var/list/alarm = our_sort[areaname]
var/list/sources = alarm[3]
if (!(source in sources))
sources += source
return TRUE
var/obj/machinery/camera/cam = null
var/list/our_cams = null
if(cameras && islist(cameras))
our_cams = cameras
if (our_cams.len == 1)
cam = our_cams[1]
else if(cameras && istype(cameras, /obj/machinery/camera))
cam = cameras
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
return TRUE
/obj/machinery/computer/station_alert/proc/freeCamera(area/home, obj/machinery/camera/cam)
for(var/class in alarms)
var/our_area = alarms[class][home.name]
if(!our_area)
continue
var/cams = our_area[2] //Get the cameras
if(!cams)
continue
if(islist(cams))
cams -= cam
if(length(cams) == 1)
our_area[2] = cams[1]
else
our_area[2] = null
/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/on_machine_stat_update(stat)
if(stat & BROKEN)
listener.prevent_alarm_changes()
else
listener.allow_alarm_changes()
/obj/machinery/computer/station_alert/update_overlays()
. = ..()
@@ -98,12 +49,7 @@
. |= "[icon_keyboard]_off"
return
. |= icon_keyboard
var/active_alarms = FALSE
for(var/cat in alarms)
if(length(alarms[cat]))
active_alarms = TRUE
break
if(active_alarms)
if(length(listener.alarms))
overlay_state = "alert:2"
else
overlay_state = "alert:0"