Files
Polaris/code/controllers/subsystems/alarm.dm
2022-04-24 07:40:38 +01:00

57 lines
1.4 KiB
Plaintext

SUBSYSTEM_DEF(alarm)
name = "Alarm"
wait = 2 SECONDS
priority = FIRE_PRIORITY_ALARM
init_order = INIT_ORDER_ALARM
/// The list of alarm handlers this subsystem processes
var/static/tmp/list/datum/alarm_handler/handlers
/// The list of alarm handlers currently being processed
var/static/tmp/list/current = list()
/// The list of active alarms
var/static/tmp/list/active = list()
/datum/controller/subsystem/alarm/Initialize(timeofday)
handlers = list(
GLOB.atmosphere_alarm,
GLOB.camera_alarm,
GLOB.fire_alarm,
GLOB.motion_alarm,
GLOB.power_alarm
)
/datum/controller/subsystem/alarm/stat_entry(msg)
..("[active.len] alarm\s")
/datum/controller/subsystem/alarm/fire(resumed, no_mc_tick)
if (!resumed)
current = handlers.Copy()
active.Cut()
var/datum/alarm_handler/A
for (var/i = current.len to 1 step -1)
A = current[i]
A.process()
active += A.alarms
if (no_mc_tick)
CHECK_TICK
else if (MC_TICK_CHECK)
current.Cut(i)
return
current.Cut()
GLOBAL_DATUM_INIT(atmosphere_alarm, /datum/alarm_handler/atmosphere, new)
GLOBAL_DATUM_INIT(camera_alarm, /datum/alarm_handler/camera, new)
GLOBAL_DATUM_INIT(fire_alarm, /datum/alarm_handler/fire, new)
GLOBAL_DATUM_INIT(motion_alarm, /datum/alarm_handler/motion, new)
GLOBAL_DATUM_INIT(power_alarm, /datum/alarm_handler/power, new)