Convert alarm_manager into SSalarm subsystem.

- Switch to using MC_TICK_CHECK and replace all references.
- Optimize stat panel display by caching the active alarms.
This commit is contained in:
Leshana
2020-03-25 15:00:02 -04:00
parent 49a77165f3
commit 8da8e3e0b1
6 changed files with 34 additions and 30 deletions

View File

@@ -68,6 +68,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define INIT_ORDER_PLANETS -4 #define INIT_ORDER_PLANETS -4
#define INIT_ORDER_HOLOMAPS -5 #define INIT_ORDER_HOLOMAPS -5
#define INIT_ORDER_OVERLAY -6 #define INIT_ORDER_OVERLAY -6
#define INIT_ORDER_ALARM -7
#define INIT_ORDER_XENOARCH -20 #define INIT_ORDER_XENOARCH -20
#define INIT_ORDER_CIRCUIT -21 #define INIT_ORDER_CIRCUIT -21
#define INIT_ORDER_AI -22 #define INIT_ORDER_AI -22
@@ -83,6 +84,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define FIRE_PRIORITY_VOTE 9 #define FIRE_PRIORITY_VOTE 9
#define FIRE_PRIORITY_AI 10 #define FIRE_PRIORITY_AI 10
#define FIRE_PRIORITY_GARBAGE 15 #define FIRE_PRIORITY_GARBAGE 15
#define FIRE_PRIORITY_ALARM 20
#define FIRE_PRIORITY_CHARSETUP 25 #define FIRE_PRIORITY_CHARSETUP 25
#define FIRE_PRIORITY_AIRFLOW 30 #define FIRE_PRIORITY_AIRFLOW 30
#define FIRE_PRIORITY_AIR 35 #define FIRE_PRIORITY_AIR 35

View File

@@ -1,42 +1,45 @@
// We manually initialize the alarm handlers instead of looping over all existing types // We manually initialize the alarm handlers instead of looping over all existing types
// to make it possible to write: camera.triggerAlarm() rather than alarm_manager.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof. // to make it possible to write: camera_alarm.triggerAlarm() rather than SSalarm.managers[datum/alarm_handler/camera].triggerAlarm() or a variant thereof.
/var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new() /var/global/datum/alarm_handler/atmosphere/atmosphere_alarm = new()
/var/global/datum/alarm_handler/camera/camera_alarm = new() /var/global/datum/alarm_handler/camera/camera_alarm = new()
/var/global/datum/alarm_handler/fire/fire_alarm = new() /var/global/datum/alarm_handler/fire/fire_alarm = new()
/var/global/datum/alarm_handler/motion/motion_alarm = new() /var/global/datum/alarm_handler/motion/motion_alarm = new()
/var/global/datum/alarm_handler/power/power_alarm = new() /var/global/datum/alarm_handler/power/power_alarm = new()
// Alarm Manager, the manager for alarms. SUBSYSTEM_DEF(alarm)
var/datum/controller/process/alarm/alarm_manager name = "Alarm"
wait = 2 SECONDS
priority = FIRE_PRIORITY_ALARM
init_order = INIT_ORDER_ALARM
var/list/datum/alarm/all_handlers
var/tmp/list/currentrun = null
var/static/list/active_alarm_cache = list()
/datum/controller/process/alarm /datum/controller/subsystem/alarm/Initialize()
var/list/datum/alarm/all_handlers = list()
/datum/controller/process/alarm/setup()
name = "alarm"
schedule_interval = 20 // every 2 seconds
all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm)
alarm_manager = src . = ..()
/datum/controller/process/alarm/doWork() /datum/controller/subsystem/alarm/fire(resumed = FALSE)
for(last_object in all_handlers) if(!resumed)
var/datum/alarm_handler/AH = last_object src.currentrun = all_handlers.Copy()
active_alarm_cache.Cut()
var/list/currentrun = src.currentrun // Cache for sanic speed
while (currentrun.len)
var/datum/alarm_handler/AH = currentrun[currentrun.len]
currentrun.len--
AH.process() AH.process()
SCHECK active_alarm_cache += AH.alarms
/datum/controller/process/alarm/proc/active_alarms() if (MC_TICK_CHECK)
var/list/all_alarms = new return
for(var/datum/alarm_handler/AH in all_handlers)
var/list/alarms = AH.alarms
all_alarms += alarms
return all_alarms /datum/controller/subsystem/alarm/proc/active_alarms()
return active_alarm_cache.Copy()
/datum/controller/process/alarm/proc/number_of_active_alarms() /datum/controller/subsystem/alarm/proc/number_of_active_alarms()
var/list/alarms = active_alarms() return active_alarm_cache.len
return alarms.len
/datum/controller/process/alarm/statProcess() /datum/controller/subsystem/alarm/stat_entry()
..() ..("[number_of_active_alarms()] alarm\s")
stat(null, "[number_of_active_alarms()] alarm\s")

View File

@@ -100,7 +100,6 @@
options["LEGACY: transfer_controller"] = transfer_controller options["LEGACY: transfer_controller"] = transfer_controller
options["LEGACY: gas_data"] = gas_data options["LEGACY: gas_data"] = gas_data
options["LEGACY: plant_controller"] = plant_controller options["LEGACY: plant_controller"] = plant_controller
options["LEGACY: alarm_manager"] = alarm_manager
var/pick = input(mob, "Choose a controller to debug/view variables of.", "VV controller:") as null|anything in options var/pick = input(mob, "Choose a controller to debug/view variables of.", "VV controller:") as null|anything in options
if(!pick) if(!pick)

View File

@@ -37,7 +37,7 @@
/mob/living/silicon/Destroy() /mob/living/silicon/Destroy()
silicon_mob_list -= src silicon_mob_list -= src
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) for(var/datum/alarm_handler/AH in SSalarm.all_handlers)
AH.unregister_alarm(src) AH.unregister_alarm(src)
return ..() return ..()

View File

@@ -38,7 +38,7 @@
if(!register_alarms) if(!register_alarms)
return return
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) for(var/datum/alarm_handler/AH in SSalarm.all_handlers)
AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm) AH.register_alarm(src, /mob/living/silicon/proc/receive_alarm)
queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order

View File

@@ -42,7 +42,7 @@
/datum/nano_module/alarm_monitor/all/New() /datum/nano_module/alarm_monitor/all/New()
..() ..()
alarm_handlers = alarm_manager.all_handlers alarm_handlers = SSalarm.all_handlers
/datum/nano_module/alarm_monitor/engineering/New() /datum/nano_module/alarm_monitor/engineering/New()
..() ..()