mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Merge pull request #6902 from VOREStation/vplk-ssalarm
Convert alarm_manager into SSalarm subsystem.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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")
|
|
||||||
45
code/controllers/subsystems/alarm.dm
Normal file
45
code/controllers/subsystems/alarm.dm
Normal file
@@ -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")
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 ..()
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -222,7 +222,6 @@
|
|||||||
#include "code\controllers\subsystem.dm"
|
#include "code\controllers\subsystem.dm"
|
||||||
#include "code\controllers\verbs.dm"
|
#include "code\controllers\verbs.dm"
|
||||||
#include "code\controllers\observer_listener\atom\observer.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\emergencyShuttle.dm"
|
||||||
#include "code\controllers\Processes\game_master.dm"
|
#include "code\controllers\Processes\game_master.dm"
|
||||||
#include "code\controllers\Processes\ticker.dm"
|
#include "code\controllers\Processes\ticker.dm"
|
||||||
@@ -231,6 +230,7 @@
|
|||||||
#include "code\controllers\subsystems\ai.dm"
|
#include "code\controllers\subsystems\ai.dm"
|
||||||
#include "code\controllers\subsystems\air.dm"
|
#include "code\controllers\subsystems\air.dm"
|
||||||
#include "code\controllers\subsystems\airflow.dm"
|
#include "code\controllers\subsystems\airflow.dm"
|
||||||
|
#include "code\controllers\subsystems\alarm.dm"
|
||||||
#include "code\controllers\subsystems\assets.dm"
|
#include "code\controllers\subsystems\assets.dm"
|
||||||
#include "code\controllers\subsystems\atoms.dm"
|
#include "code\controllers\subsystems\atoms.dm"
|
||||||
#include "code\controllers\subsystems\bellies_vr.dm"
|
#include "code\controllers\subsystems\bellies_vr.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user