Timer subsystem (#30906)

* timers

* amend comment
This commit is contained in:
DamianX
2021-10-02 00:37:00 +02:00
committed by GitHub
parent 6137d76dc5
commit 1b30afe9a1
10 changed files with 193 additions and 86 deletions

View File

@@ -34,6 +34,8 @@
return FALSE
else
new_alert = new alert_type()
new_alert.category = category
new_alert.owner = src
new_alert.override_alerts = override
if(override)
new_alert.timeout = null
@@ -56,19 +58,8 @@
hud_used.reorganize_alerts()
new_alert.transform = matrix(32, 6, MATRIX_TRANSLATE)
animate(new_alert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
if(new_alert.timeout)
alert_timeout(new_alert, category)
new_alert.timeout = world.time + new_alert.timeout - world.tick_lag
return new_alert
/mob/proc/alert_timeout(var/obj/abstract/screen/alert/alert, category)
if(!istype(alert) || !category)
return
spawn(alert.timeout)
if(alert.timeout && alerts[category] == alert && world.time >= alert.timeout)
clear_alert(category)
// Proc to clear an existing alert.
/mob/proc/clear_alert(category, clear_override = FALSE)
var/obj/abstract/screen/alert/alert = alerts[category]
@@ -76,10 +67,6 @@
return FALSE
if(alert.override_alerts && !clear_override)
return FALSE
alerts -= category
if(client && hud_used)
hud_used.reorganize_alerts()
client.screen -= alert
qdel(alert)
/mob/proc/clear_all_alerts()
@@ -158,17 +145,33 @@ var/global/list/screen_alarms_locs = list(
icon = 'icons/mob/screen_alarms.dmi'
icon_state = "default"
mouse_opacity = TRUE
var/severity
var/mob/owner
var/category
var/timeout = null //If set to a number, this alert will clear itself after that many deciseconds
var/severity = null
var/override_alerts = FALSE //If it is overriding other alerts of the same type
var/alerttooltipstyle = null
var/emph = FALSE //Whether to have a flashy outline
/obj/abstract/screen/alert/New()
..()
if(timeout)
add_timer(new /callback(src, .proc/qdel_self), timeout)
if(emph)
overlays.Add(image('icons/mob/screen_alarms.dmi', icon_state = "emph_outline"))
/obj/abstract/screen/alert/proc/qdel_self()
qdel(src)
/obj/abstract/screen/alert/Destroy()
if(owner)
owner.alerts -= category
if(owner.client && owner.hud_used)
owner.hud_used.reorganize_alerts()
owner.client.screen -= src
owner = null
..()
/obj/abstract/screen/alert/Click(location, control, params)
if(!usr || !usr.client)
return