mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Restores silicon alarm notices.
This commit is contained in:
@@ -97,56 +97,3 @@
|
||||
/datum/alarm_handler/proc/notify_listeners(var/alarm, var/was_raised)
|
||||
for(var/listener in listeners)
|
||||
call(listener, listeners[listener])(src, alarm, was_raised)
|
||||
|
||||
/********
|
||||
* DEBUG *
|
||||
********/
|
||||
/obj/item/device/alarm_debug
|
||||
name = "An alarm debug tool - Self"
|
||||
desc = "Alarm Up. Alarm Reset."
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
icon_state = "beacon"
|
||||
item_state = "signaler"
|
||||
var/obj/nano_module/alarm_monitor/ai/alarm_monitor
|
||||
|
||||
/obj/item/device/alarm_debug/New()
|
||||
..()
|
||||
alarm_monitor = new(src)
|
||||
|
||||
/obj/item/device/alarm_debug/loc
|
||||
name = "An alarm debug tool - Loc"
|
||||
|
||||
/obj/item/device/alarm_debug/verb/alarm()
|
||||
set name = "Alarm"
|
||||
set category = "Debug"
|
||||
usr << "Raising alarm"
|
||||
fire_alarm.triggerAlarm(src, src)
|
||||
|
||||
/obj/item/device/alarm_debug/verb/reset()
|
||||
set name = "Reset"
|
||||
set category = "Debug"
|
||||
usr << "Clearing alarm"
|
||||
fire_alarm.clearAlarm(src, src)
|
||||
|
||||
/obj/item/device/alarm_debug/loc/alarm()
|
||||
set name = "Alarm"
|
||||
set category = "Debug"
|
||||
usr << "Raising alarm"
|
||||
fire_alarm.triggerAlarm(src.loc, src)
|
||||
|
||||
/obj/item/device/alarm_debug/loc/reset()
|
||||
set name = "Reset"
|
||||
set category = "Debug"
|
||||
usr << "Clearing alarm"
|
||||
fire_alarm.clearAlarm(src.loc, src)
|
||||
|
||||
/obj/item/device/alarm_debug/verb/nano()
|
||||
set name = "Nano"
|
||||
set category = "Debug"
|
||||
alarm_monitor.ui_interact(usr)
|
||||
|
||||
/obj/item/device/alarm_debug/attack_self(var/mob/user)
|
||||
alarm_monitor.ui_interact(user)
|
||||
|
||||
#undef ALARM_RAISED
|
||||
#undef ALARM_CLEARED
|
||||
|
||||
@@ -171,6 +171,7 @@
|
||||
sleep(50)
|
||||
theAPC = null
|
||||
|
||||
process_queued_alarms()
|
||||
regular_hud_updates()
|
||||
switch(src.sensor_mode)
|
||||
if (SEC_HUD)
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
use_power()
|
||||
process_killswitch()
|
||||
process_locks()
|
||||
process_queued_alarms()
|
||||
update_canmove()
|
||||
|
||||
/mob/living/silicon/robot/proc/clamp_values()
|
||||
|
||||
@@ -27,6 +27,9 @@
|
||||
|
||||
var/sensor_mode = 0 //Determines the current HUD.
|
||||
|
||||
var/next_alarm_notice
|
||||
var/list/datum/alarm/queued_alarms = new()
|
||||
|
||||
#define SEC_HUD 1 //Security HUD mode
|
||||
#define MED_HUD 2 //Medical HUD mode
|
||||
|
||||
@@ -35,6 +38,11 @@
|
||||
add_language("Galactic Common")
|
||||
init_subsystems()
|
||||
|
||||
/mob/living/silicon/Del()
|
||||
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
|
||||
AH.unregister(src)
|
||||
..()
|
||||
|
||||
/mob/living/silicon/proc/SetName(pickedName as text)
|
||||
real_name = pickedName
|
||||
name = real_name
|
||||
@@ -291,3 +299,59 @@
|
||||
|
||||
/mob/living/silicon/proc/init_subsystems()
|
||||
alarm_monitor = new/obj/nano_module/alarm_monitor/borg(src)
|
||||
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
|
||||
AH.register(src, /mob/living/silicon/proc/receive_alarm)
|
||||
queued_alarms[AH] = list() // Makes sure alarms remain listed in consistent order
|
||||
|
||||
/mob/living/silicon/proc/receive_alarm(var/datum/alarm_handler/alarm_handler, var/datum/alarm/alarm, was_raised)
|
||||
if(!next_alarm_notice)
|
||||
next_alarm_notice = world.time + SecondsToTicks(10)
|
||||
|
||||
var/list/alarms = queued_alarms[alarm_handler]
|
||||
if(was_raised)
|
||||
// Raised alarms are always set
|
||||
alarms[alarm] = 1
|
||||
else
|
||||
// Alarms that were raised but then cleared before the next notice are instead removed
|
||||
if(alarm in alarms)
|
||||
alarms -= alarm
|
||||
// And alarms that have only been cleared thus far are set as such
|
||||
else
|
||||
alarms[alarm] = -1
|
||||
|
||||
/mob/living/silicon/proc/process_queued_alarms()
|
||||
if(next_alarm_notice && (world.time > next_alarm_notice))
|
||||
next_alarm_notice = 0
|
||||
|
||||
for(var/datum/alarm_handler/AH in queued_alarms)
|
||||
var/list/alarms = queued_alarms[AH]
|
||||
var/reported = 0
|
||||
for(var/datum/alarm/A in alarms)
|
||||
if(alarms[A] == 1)
|
||||
if(!reported)
|
||||
reported = 1
|
||||
src << "<span class='warning'>--- [AH.category] Detected ---</span>"
|
||||
raised_alarm(A)
|
||||
|
||||
for(var/datum/alarm_handler/AH in queued_alarms)
|
||||
var/list/alarms = queued_alarms[AH]
|
||||
var/reported = 0
|
||||
for(var/datum/alarm/A in alarms)
|
||||
if(alarms[A] == -1)
|
||||
if(!reported)
|
||||
reported = 1
|
||||
src << "<span class='notice'>--- [AH.category] Cleared ---</span>"
|
||||
src << "\The [A.alarm_name()]."
|
||||
|
||||
for(var/datum/alarm_handler/AH in queued_alarms)
|
||||
var/list/alarms = queued_alarms[AH]
|
||||
alarms.Cut()
|
||||
|
||||
/mob/living/silicon/proc/raised_alarm(var/datum/alarm/A)
|
||||
src << "[A.alarm_name()]!"
|
||||
|
||||
/mob/living/silicon/ai/raised_alarm(var/datum/alarm/A)
|
||||
var/cameratext = ""
|
||||
for(var/obj/machinery/camera/C in A.cameras())
|
||||
cameratext += "[(cameratext == "")? "" : "|"]<A HREF=?src=\ref[src];switchcamera=\ref[C]>[C.c_tag]</A>"
|
||||
src << "[A.alarm_name()]! ([(cameratext)? cameratext : "No Camera"])"
|
||||
|
||||
Reference in New Issue
Block a user