Alarm centralization completion

Ensures the master area is always used, to avoid issues caused by dynamic lightning which splits areas into sub-areas.
Power alarms now handled centrally.
This commit is contained in:
PsiOmega
2015-02-23 11:23:23 +01:00
parent 1c763ff2c9
commit 93b049e7a6
8 changed files with 30 additions and 47 deletions
+1 -1
View File
@@ -95,7 +95,7 @@
/atom/proc/get_alarm_name()
var/area/A = get_area(src)
return A.name
return A.master.name
/area/get_alarm_name()
return name
+11 -2
View File
@@ -15,8 +15,9 @@
/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0)
var/new_alarm
//Proper origin and source mandatory
if(!origin || !source)
if(!(origin && source))
return
origin = origin.get_alarm_origin()
new_alarm = 0
//see if there is already an alarm of this origin
@@ -37,8 +38,9 @@
/datum/alarm_handler/proc/clearAlarm(var/atom/origin, var/source)
//Proper origin and source mandatory
if(!origin || !source)
if(!(origin && source))
return
origin = origin.get_alarm_origin()
var/datum/alarm/existing = alarms_assoc[origin]
if(existing)
@@ -53,6 +55,13 @@
return 1
return 0
/atom/proc/get_alarm_origin()
return src
/turf/get_alarm_origin()
var/area/area = get_area(src)
return area.master // Very important to get area.master, as dynamic lightning can and will split areas.
/datum/alarm_handler/proc/register(var/object, var/procName)
listeners[object] = procName
+8
View File
@@ -1,2 +1,10 @@
/datum/alarm_handler/power
category = "Power"
/datum/alarm_handler/power/notify_listeners(var/datum/alarm/alarm, var/was_raised)
..()
var/area/A = alarm.origin
if(istype(A))
A.power_alert(was_raised)
/area/proc/power_alert(var/alarming)