From 8986eb7720864d05cc7c2843a9de9eaf69ab1ea3 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Mon, 30 Mar 2020 17:40:24 -0700 Subject: [PATCH] Merge pull request #6902 from VOREStation/vplk-ssalarm Convert alarm_manager into SSalarm subsystem. --- code/__defines/subsystems.dm | 2 + code/controllers/Processes/alarm.dm | 42 ----------------- code/controllers/subsystems/alarm.dm | 45 +++++++++++++++++++ code/controllers/verbs.dm | 1 - code/modules/mob/living/silicon/silicon.dm | 2 +- code/modules/mob/living/silicon/subystems.dm | 2 +- .../programs/engineering/alarm_monitor.dm | 2 +- vorestation.dme | 2 +- 8 files changed, 51 insertions(+), 47 deletions(-) delete mode 100644 code/controllers/Processes/alarm.dm create mode 100644 code/controllers/subsystems/alarm.dm diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index a3320983ca..1790890dfb 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -68,6 +68,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_PLANETS -4 #define INIT_ORDER_HOLOMAPS -5 #define INIT_ORDER_OVERLAY -6 +#define INIT_ORDER_ALARM -7 #define INIT_ORDER_XENOARCH -20 #define INIT_ORDER_CIRCUIT -21 #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_AI 10 #define FIRE_PRIORITY_GARBAGE 15 +#define FIRE_PRIORITY_ALARM 20 #define FIRE_PRIORITY_CHARSETUP 25 #define FIRE_PRIORITY_AIRFLOW 30 #define FIRE_PRIORITY_AIR 35 diff --git a/code/controllers/Processes/alarm.dm b/code/controllers/Processes/alarm.dm deleted file mode 100644 index 3590149811..0000000000 --- a/code/controllers/Processes/alarm.dm +++ /dev/null @@ -1,42 +0,0 @@ - -// 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. -/var/global/datum/alarm_handler/atmosphere/atmosphere_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/motion/motion_alarm = new() -/var/global/datum/alarm_handler/power/power_alarm = new() - -// Alarm Manager, the manager for alarms. -var/datum/controller/process/alarm/alarm_manager - -/datum/controller/process/alarm - 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) - alarm_manager = src - -/datum/controller/process/alarm/doWork() - for(last_object in all_handlers) - var/datum/alarm_handler/AH = last_object - AH.process() - SCHECK - -/datum/controller/process/alarm/proc/active_alarms() - var/list/all_alarms = new - for(var/datum/alarm_handler/AH in all_handlers) - var/list/alarms = AH.alarms - all_alarms += alarms - - return all_alarms - -/datum/controller/process/alarm/proc/number_of_active_alarms() - var/list/alarms = active_alarms() - return alarms.len - -/datum/controller/process/alarm/statProcess() - ..() - stat(null, "[number_of_active_alarms()] alarm\s") diff --git a/code/controllers/subsystems/alarm.dm b/code/controllers/subsystems/alarm.dm new file mode 100644 index 0000000000..4b6140e507 --- /dev/null +++ b/code/controllers/subsystems/alarm.dm @@ -0,0 +1,45 @@ + +// We manually initialize the alarm handlers instead of looping over all existing types +// 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/camera/camera_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/power/power_alarm = new() + +SUBSYSTEM_DEF(alarm) + 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/subsystem/alarm/Initialize() + all_handlers = list(atmosphere_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm) + . = ..() + +/datum/controller/subsystem/alarm/fire(resumed = FALSE) + if(!resumed) + 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() + active_alarm_cache += AH.alarms + + if (MC_TICK_CHECK) + return + +/datum/controller/subsystem/alarm/proc/active_alarms() + return active_alarm_cache.Copy() + +/datum/controller/subsystem/alarm/proc/number_of_active_alarms() + return active_alarm_cache.len + +/datum/controller/subsystem/alarm/stat_entry() + ..("[number_of_active_alarms()] alarm\s") diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 5d70a7ac72..5ef802f674 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -100,7 +100,6 @@ options["LEGACY: transfer_controller"] = transfer_controller options["LEGACY: gas_data"] = gas_data 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 if(!pick) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b2959539b2..6c7456f80e 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -37,7 +37,7 @@ /mob/living/silicon/Destroy() 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) return ..() diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm index 1dae0026aa..ac10167c2d 100644 --- a/code/modules/mob/living/silicon/subystems.dm +++ b/code/modules/mob/living/silicon/subystems.dm @@ -38,7 +38,7 @@ if(!register_alarms) 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) queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order diff --git a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm index 20c4dde1ca..c887034754 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm @@ -42,7 +42,7 @@ /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() ..() diff --git a/vorestation.dme b/vorestation.dme index 776441e69c..bde8758c4f 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -222,7 +222,6 @@ #include "code\controllers\subsystem.dm" #include "code\controllers\verbs.dm" #include "code\controllers\observer_listener\atom\observer.dm" -#include "code\controllers\Processes\alarm.dm" #include "code\controllers\Processes\emergencyShuttle.dm" #include "code\controllers\Processes\game_master.dm" #include "code\controllers\Processes\ticker.dm" @@ -231,6 +230,7 @@ #include "code\controllers\subsystems\ai.dm" #include "code\controllers\subsystems\air.dm" #include "code\controllers\subsystems\airflow.dm" +#include "code\controllers\subsystems\alarm.dm" #include "code\controllers\subsystems\assets.dm" #include "code\controllers\subsystems\atoms.dm" #include "code\controllers\subsystems\bellies_vr.dm"