This commit is contained in:
AffectedArc07
2019-04-23 12:45:35 +01:00
parent d9d975a91f
commit acee1dcb42
14 changed files with 60 additions and 66 deletions
+1
View File
@@ -61,6 +61,7 @@
#define INIT_ORDER_LANGUAGE 6
#define INIT_ORDER_MACHINES 5
#define INIT_ORDER_CIRCUIT 4
#define INIT_ORDER_ALARMS 2
#define INIT_ORDER_TIMER 1
#define INIT_ORDER_DEFAULT 0
#define INIT_ORDER_AIR -1
-37
View File
@@ -1,37 +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/burglar/burglar_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
/datum/controller/process/alarm/setup()
name = "alarm"
schedule_interval = 20 // every 2 seconds
all_handlers = list(atmosphere_alarm, burglar_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm)
/datum/controller/process/alarm/doWork()
for(var/datum/alarm_handler/AH in all_handlers)
AH.process()
DECLARE_GLOBAL_CONTROLLER(alarm, alarm_manager)
/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
+30
View File
@@ -0,0 +1,30 @@
SUBSYSTEM_DEF(alarms)
name = "Alarms"
init_order = INIT_ORDER_ALARMS // 2
var/datum/alarm_handler/atmosphere/atmosphere_alarm = new()
var/datum/alarm_handler/burglar/burglar_alarm = new()
var/datum/alarm_handler/camera/camera_alarm = new()
var/datum/alarm_handler/fire/fire_alarm = new()
var/datum/alarm_handler/motion/motion_alarm = new()
var/datum/alarm_handler/power/power_alarm = new()
var/list/datum/alarm/all_handlers
/datum/controller/subsystem/alarms/Initialize(start_timeofday)
all_handlers = list(SSalarms.atmosphere_alarm, SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.fire_alarm, SSalarms.motion_alarm, SSalarms.power_alarm)
..()
/datum/controller/subsystem/alarms/fire()
for(var/datum/alarm_handler/AH in all_handlers)
AH.process()
/datum/controller/subsystem/alarms/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/subsystem/alarms/proc/number_of_active_alarms()
var/list/alarms = active_alarms()
return alarms.len
+1 -1
View File
@@ -63,7 +63,7 @@
debug_variables(event_manager)
feedback_add_details("admin_verb","DEvent")
if("Alarm")
debug_variables(alarm_manager)
debug_variables(SSalarms)
feedback_add_details("admin_verb", "DAlarm")
if("Garbage")
debug_variables(SSgarbage)
+4 -4
View File
@@ -78,9 +78,9 @@
/area/proc/atmosalert(danger_level, var/alarm_source, var/force = FALSE)
if(danger_level == ATMOS_ALARM_NONE)
atmosphere_alarm.clearAlarm(src, alarm_source)
SSalarms.atmosphere_alarm.clearAlarm(src, alarm_source)
else
atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level)
SSalarms.atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level)
//Check all the alarms before lowering atmosalm. Raising is perfectly fine. If force = 1 we don't care.
for(var/obj/machinery/alarm/AA in src)
@@ -158,9 +158,9 @@
if(A.density)
A.lock()
burglar_alarm.triggerAlarm(src, trigger)
SSalarms.burglar_alarm.triggerAlarm(src, trigger)
spawn(600)
burglar_alarm.clearAlarm(src, trigger)
SSalarms.burglar_alarm.clearAlarm(src, trigger)
/area/proc/set_fire_alarm_effect()
fire = 1
+2 -2
View File
@@ -295,10 +295,10 @@
to_chat(O, "The screen bursts into static.")
/obj/machinery/camera/proc/triggerCameraAlarm()
camera_alarm.triggerAlarm(loc, src)
SSalarms.camera_alarm.triggerAlarm(loc, src)
/obj/machinery/camera/proc/cancelCameraAlarm()
camera_alarm.clearAlarm(loc, src)
SSalarms.camera_alarm.clearAlarm(loc, src)
/obj/machinery/camera/proc/can_use()
if(!status)
+2 -2
View File
@@ -45,7 +45,7 @@
if(!status || (stat & NOPOWER))
return 0
if(detectTime == -1)
motion_alarm.clearAlarm(loc, src)
SSalarms.motion_alarm.clearAlarm(loc, src)
detectTime = 0
return 1
@@ -53,7 +53,7 @@
if(!status || (stat & NOPOWER))
return 0
if(!detectTime) return 0
motion_alarm.triggerAlarm(loc, src)
SSalarms.motion_alarm.triggerAlarm(loc, src)
detectTime = -1
return 1
+7 -7
View File
@@ -12,10 +12,10 @@ var/global/list/minor_air_alarms = list()
/obj/machinery/computer/atmos_alert/New()
..()
atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon)
SSalarms.atmosphere_alarm.register(src, /obj/machinery/computer/station_alert/update_icon)
/obj/machinery/computer/atmos_alert/Destroy()
atmosphere_alarm.unregister(src)
SSalarms.atmosphere_alarm.unregister(src)
return ..()
/obj/machinery/computer/atmos_alert/attack_hand(mob/user)
@@ -33,10 +33,10 @@ var/global/list/minor_air_alarms = list()
var/major_alarms[0]
var/minor_alarms[0]
for(var/datum/alarm/alarm in atmosphere_alarm.major_alarms())
for(var/datum/alarm/alarm in SSalarms.atmosphere_alarm.major_alarms())
major_alarms[++major_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]")
for(var/datum/alarm/alarm in atmosphere_alarm.minor_alarms())
for(var/datum/alarm/alarm in SSalarms.atmosphere_alarm.minor_alarms())
minor_alarms[++minor_alarms.len] = list("name" = sanitize(alarm.alarm_name()), "ref" = "\ref[alarm]")
data["priority_alarms"] = major_alarms
@@ -45,11 +45,11 @@ var/global/list/minor_air_alarms = list()
return data
/obj/machinery/computer/atmos_alert/update_icon()
var/list/alarms = atmosphere_alarm.major_alarms()
var/list/alarms = SSalarms.atmosphere_alarm.major_alarms()
if(alarms.len)
icon_screen = "alert:2"
else
alarms = atmosphere_alarm.minor_alarms()
alarms = SSalarms.atmosphere_alarm.minor_alarms()
if(alarms.len)
icon_screen = "alert:1"
else
@@ -61,7 +61,7 @@ var/global/list/minor_air_alarms = list()
return 1
if(href_list["clear_alarm"])
var/datum/alarm/alarm = locate(href_list["clear_alarm"]) in atmosphere_alarm.alarms
var/datum/alarm/alarm = locate(href_list["clear_alarm"]) in SSalarms.atmosphere_alarm.alarms
if(alarm)
for(var/datum/alarm_source/alarm_source in alarm.sources)
var/obj/machinery/alarm/air_alarm = alarm_source.source
+2 -2
View File
@@ -220,7 +220,7 @@ FIRE ALARM
var/area/A = get_area(src)
A.fire_reset()
for(var/obj/machinery/firealarm/FA in A)
fire_alarm.clearAlarm(loc, FA)
SSalarms.fire_alarm.clearAlarm(loc, FA)
return
/obj/machinery/firealarm/proc/alarm(var/duration = 0)
@@ -228,7 +228,7 @@ FIRE ALARM
return
var/area/A = get_area(src)
for(var/obj/machinery/firealarm/FA in A)
fire_alarm.triggerAlarm(loc, FA, duration)
SSalarms.fire_alarm.triggerAlarm(loc, FA, duration)
update_icon()
//playsound(loc, 'sound/ambience/signal.ogg', 75, 0)
return
@@ -41,7 +41,7 @@
if(!register_alarms)
return
var/list/register_to = list(atmosphere_alarm, burglar_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm)
var/list/register_to = list(SSalarms.atmosphere_alarm, SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.fire_alarm, SSalarms.motion_alarm, SSalarms.power_alarm)
for(var/datum/alarm_handler/AH in register_to)
AH.register(src, /mob/living/silicon/proc/receive_alarm)
queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order
@@ -11,7 +11,7 @@
/datum/computer_file/program/alarm_monitor/New()
..()
alarm_handlers = list(atmosphere_alarm, fire_alarm, power_alarm)
alarm_handlers = list(SSalarms.atmosphere_alarm, SSalarms.fire_alarm, SSalarms.power_alarm)
for(var/datum/alarm_handler/AH in alarm_handlers)
AH.register(src, /datum/computer_file/program/alarm_monitor/proc/update_icon)
+3 -3
View File
@@ -5,15 +5,15 @@
/datum/nano_module/alarm_monitor/all/New()
..()
alarm_handlers = list(atmosphere_alarm, burglar_alarm, camera_alarm, fire_alarm, motion_alarm, power_alarm)
alarm_handlers = list(SSalarms.atmosphere_alarm, SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.fire_alarm, SSalarms.motion_alarm, SSalarms.power_alarm)
/datum/nano_module/alarm_monitor/engineering/New()
..()
alarm_handlers = list(atmosphere_alarm, fire_alarm, power_alarm)
alarm_handlers = list(SSalarms.atmosphere_alarm, SSalarms.fire_alarm, SSalarms.power_alarm)
/datum/nano_module/alarm_monitor/security/New()
..()
alarm_handlers = list(burglar_alarm, camera_alarm, motion_alarm)
alarm_handlers = list(SSalarms.burglar_alarm, SSalarms.camera_alarm, SSalarms.motion_alarm)
/datum/nano_module/alarm_monitor/proc/register(var/object, var/procName)
for(var/datum/alarm_handler/AH in alarm_handlers)
+5 -5
View File
@@ -1173,14 +1173,14 @@
environ = autoset(environ, 1)
autoflag = 3
if(report_power_alarm)
power_alarm.clearAlarm(loc, src)
SSalarms.power_alarm.clearAlarm(loc, src)
else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment
if(autoflag != 2)
equipment = autoset(equipment, 2)
lighting = autoset(lighting, 1)
environ = autoset(environ, 1)
if(report_power_alarm)
power_alarm.triggerAlarm(loc, src)
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 2
else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment
if((autoflag > 1 && longtermpower < 0) || (autoflag > 1 && longtermpower >= 0))
@@ -1188,7 +1188,7 @@
lighting = autoset(lighting, 2)
environ = autoset(environ, 1)
if(report_power_alarm)
power_alarm.triggerAlarm(loc, src)
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 1
else if(cell.charge <= 0) // zero charge, turn all off
if(autoflag != 0)
@@ -1196,7 +1196,7 @@
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
if(report_power_alarm)
power_alarm.triggerAlarm(loc, src)
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
// now trickle-charge the cell
@@ -1254,7 +1254,7 @@
lighting = autoset(lighting, 0)
environ = autoset(environ, 0)
if(report_power_alarm)
power_alarm.triggerAlarm(loc, src)
SSalarms.power_alarm.triggerAlarm(loc, src)
autoflag = 0
// update icon & area power if anything changed
+1 -1
View File
@@ -197,7 +197,6 @@
#include "code\controllers\master.dm"
#include "code\controllers\subsystem.dm"
#include "code\controllers\verbs.dm"
#include "code\controllers\Processes\alarm.dm"
#include "code\controllers\Processes\event.dm"
#include "code\controllers\Processes\fast_process.dm"
#include "code\controllers\Processes\lighting.dm"
@@ -207,6 +206,7 @@
#include "code\controllers\ProcessScheduler\core\process.dm"
#include "code\controllers\ProcessScheduler\core\processScheduler.dm"
#include "code\controllers\subsystem\air.dm"
#include "code\controllers\subsystem\alarm.dm"
#include "code\controllers\subsystem\assets.dm"
#include "code\controllers\subsystem\atoms.dm"
#include "code\controllers\subsystem\fires.dm"