mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-16 13:12:22 +00:00
113 lines
3.2 KiB
Plaintext
113 lines
3.2 KiB
Plaintext
#define ALARM_ORIGIN_LOST "Origin Lost"
|
|
|
|
/datum/alarm_handler
|
|
var/category = ""
|
|
var/list/datum/alarm/alarms = new // All alarms, to handle cases when origin has been deleted with one or more active alarms
|
|
var/list/datum/alarm/alarms_assoc = new // Associative list of alarms, to efficiently acquire them based on origin.
|
|
|
|
/datum/alarm_handler/proc/process()
|
|
/*
|
|
for(var/datum/alarm/A in alarms)
|
|
var/datum/alarm_source/AS = A.source
|
|
// Alarm owner has been deleted. Clean up in at most 15 seconds
|
|
if(!AS.owner && !AS.end_time)
|
|
AS.end_time = world.time + SecondsToTicks(15)
|
|
if(AS.duration || AS.end_time)
|
|
if(world.time > (AS.start_time + AS.duration) || world.time > AS.end_time)
|
|
//Somethingthing..
|
|
*/
|
|
|
|
/datum/alarm_handler/proc/triggerAlarm(var/atom/origin, var/atom/source, var/duration = 0)
|
|
//Proper origin and source mandatory
|
|
if(!origin || !source)
|
|
return
|
|
|
|
//see if there is already an alarm of this origin
|
|
var/alarm_key = origin.get_alarm_key()
|
|
var/datum/alarm/existing = alarms_assoc[alarm_key]
|
|
if(existing)
|
|
existing.set_duration(source, duration)
|
|
else
|
|
existing = new/datum/alarm(origin, source, duration)
|
|
|
|
alarms |= existing
|
|
alarms_assoc[alarm_key] = existing
|
|
|
|
/datum/alarm_handler/proc/cancelAlarm(var/atom/origin, var/source)
|
|
//Proper origin and source mandatory
|
|
if(!origin || !source)
|
|
return
|
|
|
|
var/alarm_key = origin.get_alarm_key()
|
|
|
|
var/datum/alarm/existing = alarms_assoc[alarm_key]
|
|
if(existing)
|
|
existing.clear(source)
|
|
if (!existing.sources.len)
|
|
alarms -= existing
|
|
alarms_assoc -= alarm_key
|
|
|
|
/atom/proc/get_alarm_key()
|
|
return src
|
|
|
|
/turf/get_alarm_key()
|
|
return get_area(src)
|
|
|
|
/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"
|
|
|
|
/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"
|
|
camera_alarm.triggerAlarm(src, src)
|
|
|
|
/obj/item/device/alarm_debug/verb/reset()
|
|
set name = "Reset"
|
|
set category = "Debug"
|
|
usr << "Raising alarm"
|
|
camera_alarm.triggerAlarm(src, src)
|
|
|
|
/obj/item/device/alarm_debug/verb/tell_me()
|
|
set name = "Tell"
|
|
set category = "Debug"
|
|
usr << "Telling about alarms"
|
|
|
|
var/list/datum/alarm/alarms = camera_alarm.alarms
|
|
var/list/datum/alarm/alarms_assoc = camera_alarm.alarms_assoc
|
|
|
|
world << "List"
|
|
for(var/datum/alarm/A in alarms)
|
|
world << "Origin: [A.origin ? A.origin : ALARM_ORIGIN_LOST]"
|
|
world << "Alarm area: [A.alarm_area()]"
|
|
for(var/source in A.sources)
|
|
world << "Source: [source]"
|
|
|
|
world << "Assoc"
|
|
|
|
for(var/atom/origin in alarms_assoc)
|
|
world << "Origin: [origin ? origin : ALARM_ORIGIN_LOST]"
|
|
var/datum/alarm/A = alarms_assoc[origin]
|
|
world << "Alarm area: [A.alarm_area()]"
|
|
for(var/source in A.sources)
|
|
world << "Source: [source]"
|
|
|
|
/obj/item/device/alarm_debug/loc/alarm()
|
|
set name = "Alarm"
|
|
set category = "Debug"
|
|
usr << "Raising alarm"
|
|
camera_alarm.triggerAlarm(src.loc, src)
|
|
|
|
/obj/item/device/alarm_debug/loc/reset()
|
|
set name = "Reset"
|
|
set category = "Debug"
|
|
usr << "Clearing alarm"
|
|
camera_alarm.cancelAlarm(src.loc, src)
|