From 214e99fb2455bf37786b1000c827c8f7d37f0fe7 Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Fri, 18 Feb 2022 00:49:06 -0800 Subject: [PATCH] Makes extinguisher sprays look nicer (#64949) Rather then sticking around till their 7 second delay, they dissipate once they finish their movement. This dissipation comes with a fading and such to make things look nicer. I've applied the fading behavior to sprays too, since they could also use the help. I really hate how things look currently, makes me break out in hives --- code/game/objects/effects/decals/misc.dm | 12 +++++++---- .../effects/effect_system/effects_water.dm | 21 +++++++++++++++++++ code/game/objects/items/extinguisher.dm | 2 +- .../mecha/equipment/tools/work_tools.dm | 2 +- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index f273bcddf3b..ab7f62748e9 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -37,17 +37,21 @@ /obj/effect/decal/chempuff/blob_act(obj/structure/blob/B) return -/obj/effect/decal/chempuff/proc/loop_ended(datum/source) +/obj/effect/decal/chempuff/proc/end_life(datum/move_loop/engine) + QDEL_IN(src, engine.delay) //Gotta let it stop drifting + animate(src, alpha = 0, time = engine.delay) + +/obj/effect/decal/chempuff/proc/loop_ended(datum/move_loop/source) SIGNAL_HANDLER if(QDELETED(src)) return - qdel(src) + end_life(source) /obj/effect/decal/chempuff/proc/check_move(datum/move_loop/source, succeeded) if(QDELETED(src)) //Reasons PLEASE WORK I SWEAR TO GOD return if(!succeeded) //If we hit something - qdel(src) + end_life(source) return var/puff_reagents_string = reagents.log_list() @@ -92,7 +96,7 @@ // Did we use up all the puff early? if(lifetime < 0) - qdel(src) + end_life(source) /obj/effect/decal/fakelattice name = "lattice" diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index 5b265c11b99..4141788552f 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -36,6 +36,27 @@ for(var/atom/thing as anything in get_turf(src)) reagents.expose(thing) +/// Starts the effect moving at a target with a delay in deciseconds, and a lifetime in moves +/// Returns the created loop +/obj/effect/particle_effect/water/extinguisher/proc/move_at(atom/target, delay, lifetime) + var/datum/move_loop/loop = SSmove_manager.move_towards_legacy(src, target, delay, timeout = delay * lifetime, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, .proc/post_forcemove) + RegisterSignal(loop, COMSIG_PARENT_QDELETING, .proc/movement_stopped) + return loop + +/obj/effect/particle_effect/water/extinguisher/proc/post_forcemove(datum/move_loop/source, success) + SIGNAL_HANDLER + if(!success) + end_life(source) + +/obj/effect/particle_effect/water/extinguisher/proc/movement_stopped(datum/move_loop/source) + SIGNAL_HANDLER + if(!QDELETED(src)) + end_life(source) + +/obj/effect/particle_effect/water/extinguisher/proc/end_life(datum/move_loop/engine) + QDEL_IN(src, engine.delay) //Gotta let it stop drifting + animate(src, alpha = 0, time = engine.delay) ///////////////////////////////////////////// // GENERIC STEAM SPREAD SYSTEM diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 38a983a03a4..bec6f9f12a3 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -218,7 +218,7 @@ var/delay = 2 // Second loop: Get all the water particles and make them move to their target for(var/obj/effect/particle_effect/water/extinguisher/water as anything in particles) - SSmove_manager.move_towards_legacy(water, particles[water], delay, timeout = delay * power, flags = MOVEMENT_LOOP_START_FAST, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + water.move_at(particles[water], delay, power) //Chair movement loop /obj/item/extinguisher/proc/move_chair(obj/buckled_object, movementdirection) diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index c02316d8a0b..673f8eafed4 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -202,7 +202,7 @@ reagents.trans_to(water, 1) var/delay = 2 - var/datum/move_loop/our_loop = SSmove_manager.move_towards_legacy(water, pick(targets), delay, timeout = delay * 4, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) + var/datum/move_loop/our_loop = water.move_at(pick(targets), delay, 4) RegisterSignal(our_loop, COMSIG_PARENT_QDELETING, .proc/water_finished_moving) /obj/item/mecha_parts/mecha_equipment/extinguisher/proc/water_finished_moving(datum/move_loop/has_target/source)