diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 68dd2baaee75..3b454efd6474 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -493,3 +493,42 @@ randomdir = FALSE duration = 2 SECONDS icon_state = "summon" + +/obj/effect/constructing_effect + icon = 'icons/effects/effects_rcd.dmi' + icon_state = "" + layer = ABOVE_ALL_MOB_LAYER + var/status = 0 + var/delay = 0 + +/obj/effect/constructing_effect/Initialize(mapload, rcd_delay, rcd_status) + . = ..() + status = rcd_status + delay = rcd_delay + if (status == RCD_DECONSTRUCT) + addtimer(CALLBACK(src, .proc/update_icon), 11) + delay -= 11 + icon_state = "rcd_end_reverse" + else + update_icon() + +/obj/effect/constructing_effect/update_icon() + icon_state = "rcd" + if (delay < 10) + icon_state += "_shortest" + else if (delay < 20) + icon_state += "_shorter" + else if (delay < 37) + icon_state += "_short" + if (status == RCD_DECONSTRUCT) + icon_state += "_reverse" + +/obj/effect/constructing_effect/proc/end_animation() + if (status == RCD_DECONSTRUCT) + qdel(src) + else + icon_state = "rcd_end" + addtimer(CALLBACK(src, .proc/end), 15) + +/obj/effect/constructing_effect/proc/end() + qdel(src) diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index e39228329ccc..175e4ccf57d5 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -538,14 +538,17 @@ RLD if(!rcd_results) return FALSE var/delay = rcd_results["delay"] * delay_mod + var/obj/effect/constructing_effect/rcd_effect = new(get_turf(A), delay, src.mode) if(checkResource(rcd_results["cost"], user)) if(do_after(user, delay, target = A)) if(checkResource(rcd_results["cost"], user)) if(A.rcd_act(user, src, rcd_results["mode"])) + rcd_effect.end_animation() useResource(rcd_results["cost"], user) activate() playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) return TRUE + qdel(rcd_effect) /obj/item/construction/rcd/Initialize() . = ..() diff --git a/icons/effects/effects_rcd.dmi b/icons/effects/effects_rcd.dmi new file mode 100644 index 000000000000..efb13bfb11a1 Binary files /dev/null and b/icons/effects/effects_rcd.dmi differ