mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-15 20:52:07 +00:00
57 lines
1.4 KiB
Plaintext
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)
|