Alarm centralization completion

Atmosphere alarms now handled centrally.
This commit is contained in:
PsiOmega
2015-02-23 15:11:13 +01:00
parent a2cd104cc9
commit f510c38d22
7 changed files with 41 additions and 44 deletions

View File

@@ -46,7 +46,7 @@ var/const/AALARM_WIRE_AALARM = 16
//world << "Syphon Wire Cut" //world << "Syphon Wire Cut"
if(AALARM_WIRE_AALARM) if(AALARM_WIRE_AALARM)
if (A.alarm_area.atmosalert(2)) if (A.alarm_area.atmosalert(2, A))
A.post_alert(2) A.post_alert(2)
A.update_icon() A.update_icon()
@@ -88,6 +88,6 @@ var/const/AALARM_WIRE_AALARM = 16
if(AALARM_WIRE_AALARM) if(AALARM_WIRE_AALARM)
// world << "Aalarm wire pulsed" // world << "Aalarm wire pulsed"
if (A.alarm_area.atmosalert(0)) if (A.alarm_area.atmosalert(0, A))
A.post_alert(0) A.post_alert(0)
A.update_icon() A.update_icon()

View File

@@ -110,6 +110,9 @@ var/list/ghostteleportlocs = list()
power_environ = 0 power_environ = 0
ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg') ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg')
area/space/atmosalert()
return
/area/space/fire_alert() /area/space/fire_alert()
return return

View File

@@ -37,10 +37,7 @@
cameras += C cameras += C
return cameras return cameras
/area/proc/atmosalert(danger_level, var/set_firelocks=1) /area/proc/atmosalert(danger_level, var/alarm_source)
// if(type==/area) //No atmos alarms in space
// return 0 //redudant
//Check all the alarms before lowering atmosalm. Raising is perfectly fine. //Check all the alarms before lowering atmosalm. Raising is perfectly fine.
for (var/area/RA in related) for (var/area/RA in related)
for (var/obj/machinery/alarm/AA in RA) for (var/obj/machinery/alarm/AA in RA)
@@ -48,37 +45,21 @@
danger_level = max(danger_level, AA.danger_level) danger_level = max(danger_level, AA.danger_level)
if(danger_level != atmosalm) if(danger_level != atmosalm)
if (set_firelocks && danger_level < 1 && atmosalm >= 1) if (danger_level < 1 && atmosalm >= 1)
//closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise //closing the doors on red and opening on green provides a bit of hysteresis that will hopefully prevent fire doors from opening and closing repeatedly due to noise
air_doors_open() air_doors_open()
/* else if (danger_level >= 2 && atmosalm < 2)
if (danger_level < 2 && atmosalm >= 2) air_doors_close()
for(var/area/RA in related)
for(var/obj/machinery/camera/C in RA)
C.network.Remove("Atmosphere Alarms")
for(var/mob/living/silicon/aiPlayer in player_list)
aiPlayer.cancelAlarm("Atmosphere", src, src)
for(var/obj/machinery/computer/station_alert/a in machines)
a.cancelAlarm("Atmosphere", src, src)
if (danger_level >= 2 && atmosalm < 2) if (danger_level == 0)
var/list/cameras = list() atmosphere_alarm.clearAlarm(master, alarm_source)
for(var/area/RA in related) else
//updateicon() atmosphere_alarm.triggerAlarm(master, alarm_source, severity = danger_level)
for(var/obj/machinery/camera/C in RA)
cameras += C
C.network.Add("Atmosphere Alarms")
for(var/mob/living/silicon/aiPlayer in player_list)
aiPlayer.triggerAlarm("Atmosphere", src, cameras, src)
for(var/obj/machinery/computer/station_alert/a in machines)
a.triggerAlarm("Atmosphere", src, cameras, src)
if (set_firelocks)
air_doors_close()
atmosalm = danger_level atmosalm = danger_level
for(var/area/RA in related) for(var/area/RA in related)
for (var/obj/machinery/alarm/AA in RA) for (var/obj/machinery/alarm/AA in RA)
AA.update_icon() */ AA.update_icon()
return 1 return 1
return 0 return 0

View File

@@ -117,14 +117,6 @@
first_run() first_run()
//needed to cancel the alarm after it is deleted
/obj/machinery/alarm/proc/delayed_reset()
var/area/A = alarm_area
src = null
spawn(600)
//It makes sense not to touch firelocks here. The alarm itself is gone, we have no idea what the atmos is like.
A.atmosalert(0, set_firelocks=0)
/obj/machinery/alarm/proc/first_run() /obj/machinery/alarm/proc/first_run()
alarm_area = get_area(src) alarm_area = get_area(src)
if (alarm_area.master) if (alarm_area.master)
@@ -436,7 +428,7 @@
send_signal(device_id, list("power"= 0) ) send_signal(device_id, list("power"= 0) )
/obj/machinery/alarm/proc/apply_danger_level(var/new_danger_level) /obj/machinery/alarm/proc/apply_danger_level(var/new_danger_level)
if (report_danger_level && alarm_area.atmosalert(new_danger_level)) if (report_danger_level && alarm_area.atmosalert(new_danger_level, src))
post_alert(new_danger_level) post_alert(new_danger_level)
update_icon() update_icon()
@@ -454,12 +446,10 @@
if(alert_level==2) if(alert_level==2)
alert_signal.data["alert"] = "severe" alert_signal.data["alert"] = "severe"
atmosphere_alarm.triggerAlarm(src.loc, src)
else if (alert_level==1) else if (alert_level==1)
alert_signal.data["alert"] = "minor" alert_signal.data["alert"] = "minor"
else if (alert_level==0) else if (alert_level==0)
alert_signal.data["alert"] = "clear" alert_signal.data["alert"] = "clear"
atmosphere_alarm.clearAlarm(src.loc, src)
frequency.post_signal(src, alert_signal) frequency.post_signal(src, alert_signal)
@@ -766,13 +756,13 @@
return 1 return 1
if(href_list["atmos_alarm"]) if(href_list["atmos_alarm"])
if (alarm_area.atmosalert(2)) if (alarm_area.atmosalert(2, src))
apply_danger_level(2) apply_danger_level(2)
update_icon() update_icon()
return 1 return 1
if(href_list["atmos_reset"]) if(href_list["atmos_reset"])
if (alarm_area.atmosalert(0)) if (alarm_area.atmosalert(0, src))
apply_danger_level(0) apply_danger_level(0)
update_icon() update_icon()
return 1 return 1

View File

@@ -47,6 +47,12 @@
existing.clear(source) existing.clear(source)
return check_alarm_cleared(existing) return check_alarm_cleared(existing)
/datum/alarm_handler/proc/major_alarms()
return alarms
/datum/alarm_handler/proc/minor_alarms()
return alarms
/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm) /datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm)
if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len) if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
alarms -= alarm alarms -= alarm

View File

@@ -1,2 +1,19 @@
/datum/alarm_handler/atmosphere /datum/alarm_handler/atmosphere
category = "Atmosphere Alarms" category = "Atmosphere Alarms"
/datum/alarm_handler/atmosphere/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1)
..()
/datum/alarm_handler/atmosphere/major_alarms()
var/list/major_alarms = new()
for(var/datum/alarm/A in alarms)
if(A.max_severity() > 1)
major_alarms.Add(A)
return major_alarms
/datum/alarm_handler/atmosphere/minor_alarms()
var/list/minor_alarms = new()
for(var/datum/alarm/A in alarms)
if(A.max_severity() == 1)
minor_alarms.Add(A)
return minor_alarms

View File

@@ -56,7 +56,7 @@
var/categories[0] var/categories[0]
for(var/datum/alarm_handler/AH in alarm_handlers) for(var/datum/alarm_handler/AH in alarm_handlers)
categories[++categories.len] = list("category" = AH.category, "alarms" = list()) categories[++categories.len] = list("category" = AH.category, "alarms" = list())
for(var/datum/alarm/A in AH.alarms) for(var/datum/alarm/A in AH.major_alarms())
var/cameras[0] var/cameras[0]
var/lost_sources[0] var/lost_sources[0]