Adds hidden alarms, for air alarms, fire alarms, and APCs (#4816)

* Adds hidden alarms

* TRUE/FALSE defines

* Renames var to alarms_hidden
This commit is contained in:
Cyantime
2018-02-16 13:50:06 -05:00
committed by Anewbe
parent 2f4df23c0b
commit b0b821cb71
9 changed files with 50 additions and 27 deletions

View File

@@ -23,12 +23,13 @@
var/area/last_name //The last acquired name, used should origin be lost
var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated.
var/end_time //Used to set when this alarm should clear, in case the origin is lost.
var/hidden = FALSE //If this alarm can be seen from consoles or other things.
/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity)
/datum/alarm/New(var/atom/origin, var/atom/source, var/duration, var/severity, var/hidden)
src.origin = origin
cameras() // Sets up both cameras and last alarm area.
set_source_data(source, duration, severity)
set_source_data(source, duration, severity, hidden)
/datum/alarm/proc/process()
// Has origin gone missing?
@@ -43,17 +44,19 @@
AS.duration = 0
AS.end_time = world.time + ALARM_RESET_DELAY
/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity)
/datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity, var/hidden)
var/datum/alarm_source/AS = sources_assoc[source]
if(!AS)
AS = new/datum/alarm_source(source)
sources += AS
sources_assoc[source] = AS
src.hidden = hidden
// Currently only non-0 durations can be altered (normal alarms VS EMP blasts)
if(AS.duration)
duration = SecondsToTicks(duration)
AS.duration = duration
AS.severity = severity
src.hidden = min(src.hidden, hidden)
/datum/alarm/proc/clear(var/source)
var/datum/alarm_source/AS = sources_assoc[source]

View File

@@ -12,7 +12,7 @@
A.process()
check_alarm_cleared(A)
/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1)
/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0, var/severity = 1, var/hidden = 0)
var/new_alarm
//Proper origin and source mandatory
if(!(origin && source))
@@ -23,9 +23,9 @@
//see if there is already an alarm of this origin
var/datum/alarm/existing = alarms_assoc[origin]
if(existing)
existing.set_source_data(source, duration, severity)
existing.set_source_data(source, duration, severity, hidden)
else
existing = new/datum/alarm(origin, source, duration, severity)
existing = new/datum/alarm(origin, source, duration, severity, hidden)
new_alarm = 1
alarms |= existing
@@ -48,10 +48,10 @@
return check_alarm_cleared(existing)
/datum/alarm_handler/proc/major_alarms()
return alarms
return visible_alarms()
/datum/alarm_handler/proc/minor_alarms()
return alarms
return visible_alarms()
/datum/alarm_handler/proc/check_alarm_cleared(var/datum/alarm/alarm)
if ((alarm.end_time && world.time > alarm.end_time) || !alarm.sources.len)
@@ -63,7 +63,7 @@
/datum/alarm_handler/proc/on_alarm_change(var/datum/alarm/alarm, var/was_raised)
for(var/obj/machinery/camera/C in alarm.cameras())
if(was_raised)
if(was_raised && !alarm.hidden)
C.add_network(category)
else
C.remove_network(category)
@@ -95,3 +95,10 @@
/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised)
for(var/listener in listeners)
call(listener, listeners[listener])(src, alarm, was_raised)
/datum/alarm_handler/proc/visible_alarms()
var/list/visible_alarms = new()
for(var/datum/alarm/A in alarms)
if(!A.hidden)
visible_alarms.Add(A)
return visible_alarms

View File

@@ -1,19 +1,16 @@
/datum/alarm_handler/atmosphere
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)
for(var/datum/alarm/A in visible_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)
for(var/datum/alarm/A in visible_alarms())
if(A.max_severity() == 1)
minor_alarms.Add(A)
return minor_alarms