converted on_irradiate to lazy events (#27241)

This commit is contained in:
DamianX
2020-07-24 13:30:48 +02:00
committed by GitHub
parent 4f502ff3a4
commit 47d8ac8c6f
8 changed files with 24 additions and 37 deletions

View File

@@ -492,7 +492,7 @@ var/list/variables_not_to_be_copied = list(
"group","on_moved","on_destroyed","on_density_change",
"on_use","on_emote","on_life","on_resist",
"on_spellcast","on_uattack","on_ruattack","on_logout","on_damaged",
"on_irradiate","on_death","on_clickon","on_attackhand","on_attackby",
"on_death","on_clickon","on_attackhand","on_attackby",
"on_explode","on_projectile","in_chamber","power_supply","contents",
"x","y","z"
)

View File

@@ -63,6 +63,13 @@
/lazy_event
// TODO: Document here the arguments that need to be passed to the procs invoked by each event
// Called by human/proc/apply_radiation()
// Arguments:
// mob/carbon/living/human/user: The human.
// rads: The amount of radiation.
/lazy_event/on_irradiate
/lazy_event/on_z_transition
/lazy_event/on_post_z_transition

View File

@@ -10,23 +10,19 @@
var/on = 0
var/last_call = 0
var/last_sound = 0
var/event_key
/obj/item/device/geiger_counter/New()
..()
update_icon()
/obj/item/device/geiger_counter/pickup(mob/user)
event_key = user.on_irradiate.Add(src, "measure_rad")
user.lazy_register_event(/lazy_event/on_irradiate, src, .proc/measure_rad)
/obj/item/device/geiger_counter/dropped(mob/user)
user.on_irradiate.Remove(event_key)
event_key = null
user.lazy_unregister_event(/lazy_event/on_irradiate, src, .proc/measure_rad)
/obj/item/device/geiger_counter/proc/measure_rad(list/arguments)
var/mob/user = arguments["user"]
var/rads = arguments["rads"]
/obj/item/device/geiger_counter/proc/measure_rad(mob/living/carbon/human/user, rads)
if(on && world.time > last_call + COOLDOWN)
to_chat(user, "<span class = 'notice'>Radiation detected.</span>")
last_call = world.time
@@ -47,4 +43,4 @@
icon_state = initial(icon_state)+"[on]"
#undef COOLDOWN
#undef SOUND_COOLDOWN
#undef SOUND_COOLDOWN

View File

@@ -219,13 +219,13 @@
/obj/item/clothing/accessory/medal/gold/heroism
name = "medal of exceptional heroism"
desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
/obj/item/clothing/accessory/medal/byond
name = "\improper BYOND support pin"
icon_state = "byond"
_color = "byond"
desc = "A cheap, but surprisingly rare, plastic pin. Sent to supporters by the BYOND corporation."
/obj/item/clothing/accessory/medal/byond/on_attached(obj/item/clothing/C)
..()
if(ismob(C.loc))
@@ -352,31 +352,27 @@
w_class = W_CLASS_TINY
w_type = RECYK_WOOD
/obj/item/clothing/accessory/rad_patch/proc/check_rads(list/arguments)
/obj/item/clothing/accessory/rad_patch/proc/check_rads(mob/living/carbon/human/user, rads)
if(triggered)
return
var/mob/user = arguments["user"]
var/rads = arguments["rads"]
rad_absorbed += rads
if(rad_absorbed > rad_threshold)
triggered = TRUE
update_icon()
to_chat(user, "<span class = 'warning'>You hear \the [src] tick!</span>")
user.on_irradiate.Remove(event_key)
event_key = null
user.lazy_unregister_event(/lazy_event/on_irradiate, src, .proc/check_rads)
/obj/item/clothing/accessory/rad_patch/on_attached(obj/item/clothing/C)
..()
if(ismob(C.loc) && !triggered)
var/mob/user = C.loc
event_key = user.on_irradiate.Add(src, "check_rads")
user.lazy_register_event(/lazy_event/on_irradiate, src, .proc/check_rads)
/obj/item/clothing/accessory/rad_patch/on_removed(mob/user)
..()
if(event_key)
user.on_irradiate.Remove(event_key)
event_key = null
user.lazy_unregister_event(/lazy_event/on_irradiate, src, .proc/check_rads)
/obj/item/clothing/accessory/rad_patch/examine(mob/user)
..(user)

View File

@@ -232,7 +232,7 @@
rig.armor["rad"] = 100
say_to_wearer("[src] enabled.")
event_key = rig.wearer.on_irradiate.Add(src, "absorb_rads")
rig.wearer.lazy_register_event(/lazy_event/on_irradiate, src, .proc/absorb_rads)
..()
/obj/item/rig_module/rad_shield/deactivate()
@@ -244,18 +244,12 @@
rig?.armor["rad"] = initial_suit
say_to_wearer("[src] disabled.")
if(event_key)
rig.wearer?.on_irradiate.Remove(event_key)
event_key = null
rig.wearer?.lazy_unregister_event(/lazy_event/on_irradiate, src, .proc/absorb_rads)
..()
/obj/item/rig_module/rad_shield/proc/absorb_rads(list/arguments)
var/mob/user = arguments["user"]
var/rads = arguments["rads"]
/obj/item/rig_module/rad_shield/proc/absorb_rads(mob/living/carbon/human/user, rads)
if(rig?.wearer != user) //Well lad.
user.on_irradiate.Remove(event_key)
event_key = null
user.lazy_unregister_event(/lazy_event/on_irradiate, src, .proc/absorb_rads)
return
if(rig.H)

View File

@@ -493,7 +493,7 @@ This function restores all organs.
return
if(application == RAD_EXTERNAL)
INVOKE_EVENT(on_irradiate, list("user" = src,"rads" = rads))
lazy_invoke_event(/lazy_event/on_irradiate, list("user" = src, "rads" = rads))
if(reagents)
if(reagents.has_reagent(LITHOTORCRAZINE))

View File

@@ -37,8 +37,6 @@
on_ruattack.holder = null
if(on_damaged)
on_damaged.holder = null
if(on_irradiate)
on_irradiate.holder = null
if(on_death)
on_death.holder = null
if(on_bumping)
@@ -90,7 +88,6 @@
qdel(on_ruattack)
qdel(on_damaged)
qdel(on_clickon)
qdel(on_irradiate)
qdel(on_death)
qdel(on_bumping)
qdel(on_bumped)
@@ -101,7 +98,6 @@
on_ruattack = null
on_damaged = null
on_clickon = null
on_irradiate = null
on_death = null
on_bumping = null
on_bumped = null
@@ -303,7 +299,6 @@
on_logout = new(owner = src)
on_damaged = new(owner = src)
on_clickon = new(owner = src)
on_irradiate = new(owner = src)
on_death = new(owner = src)
on_bumping = new(owner = src)
on_bumped = new(owner = src)

View File

@@ -277,7 +277,6 @@
var/event/on_ruattack //on restrained unarmed attack
var/event/on_logout
var/event/on_damaged
var/event/on_irradiate
var/event/on_death
var/event/on_bumping //We bumped someone
var/event/on_bumped //We got bumped