mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Alarm centralization completion
Atmosphere alarms now handled centrally.
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user