diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 14b3fdcc979..2c0e51f0c22 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -72,10 +72,19 @@ /obj/machinery/door/window/proc/open_and_close() open() - if(check_access(null)) - sleep(50) - else //secure doors close faster - sleep(20) + addtimer(CALLBACK(src, .proc/check_close), check_access(null) ? 5 SECONDS : 2 SECONDS) + + +/// Check whether or not this door can close, based on whether or not someone's standing in front of it holding it open +/obj/machinery/door/window/proc/check_close() + var/mob/living/blocker = locate(/mob/living) in get_turf(get_step(src, dir)) // check the facing turf + if(!blocker || blocker.stat || !allowed(blocker)) + blocker = locate(/mob/living) in get_turf(src) + if(blocker && !blocker.stat && allowed(blocker)) + // kick the can down the road, someone's holding the door. + addtimer(CALLBACK(src, .proc/check_close), check_access(null) ? 5 SECONDS : 2 SECONDS) + return + close() /obj/machinery/door/window/Bumped(atom/movable/AM)