diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 477f72ee3b..982e40a79b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -102,6 +102,9 @@ rad_insulation = RAD_MEDIUM_INSULATION var/static/list/airlock_overlays = list() + + /// sigh + var/unelectrify_timerid /obj/machinery/door/airlock/Initialize() . = ..() @@ -791,21 +794,6 @@ return WIRE_INTERACTION_FAIL return ..() -/obj/machinery/door/airlock/proc/electrified_loop() - while (secondsElectrified > NOT_ELECTRIFIED) - sleep(10) - if(QDELETED(src)) - return - - secondsElectrified-- - updateDialog() - // This is to protect against changing to permanent, mid loop. - if(secondsElectrified == NOT_ELECTRIFIED) - set_electrified(NOT_ELECTRIFIED) - else - set_electrified(ELECTRIFIED_PERMANENT) - updateDialog() - /obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0) // If you add an if(..()) check you must first remove the var/nowindow parameter. // Otherwise it will runtime with this kind of error: null.Topic() @@ -1365,11 +1353,18 @@ wires.cut_all() update_icon() +/obj/machinery/door/airlock/proc/remove_electrify() + secondsElectrified = NOT_ELECTRIFIED + unelectrify_timerid = null + /obj/machinery/door/airlock/proc/set_electrified(seconds, mob/user) secondsElectrified = seconds + if(unelectrify_timerid) + deltimer(unelectrify_timerid) + unelectrify_timerid = null + if(secondsElectrified != ELECTRIFIED_PERMANENT) + unelectrify_timerid = addtimer(CALLBACK(src, .proc/remove_electrify), secondsElectrified SECONDS, TIMER_STOPPABLE) diag_hud_set_electrified() - if(secondsElectrified > NOT_ELECTRIFIED) - INVOKE_ASYNC(src, .proc/electrified_loop) if(user) var/message