From 923112633e4db7eb9cc13a8d101b9d8655da3087 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 16 Feb 2021 01:47:39 +0100 Subject: [PATCH] [MIRROR] Gets Rid of Both Sleeps In Transit Tubes, Replaces Them With Timers (#3412) * Gets Rid of Both Sleeps In Transit Tubes, Replaces Them With Timers (#56913) * Gets Rid of Both Sleeps In Transit Tubes, Replaces Them With Timers Co-authored-by: Kylerace --- .../transit_tubes/transit_tube_pod.dm | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index b026051d49a..d8da0c885d2 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -1,3 +1,6 @@ +#define MOVE_ANIMATION_STAGE_ONE 1 +#define MOVE_ANIMATION_STAGE_TWO 2 + /obj/structure/transit_tube_pod icon = 'icons/obj/atmospherics/pipes/transit_tube.dmi' icon_state = "pod" @@ -7,6 +10,12 @@ var/moving = FALSE var/datum/gas_mixture/air_contents = new() var/occupied_icon_state = "pod_occupied" + var/obj/structure/transit_tube/current_tube = null + var/next_dir + var/next_loc + var/enter_delay = 0 + var/exit_delay + var/moving_time = 0 /obj/structure/transit_tube_pod/Initialize() @@ -104,28 +113,22 @@ moving = TRUE - var/obj/structure/transit_tube/current_tube = null - var/next_dir - var/next_loc - var/last_delay = 0 - var/exit_delay - for(var/obj/structure/transit_tube/tube in loc) if(tube.has_exit(dir)) current_tube = tube break - while(current_tube) + move_animation(MOVE_ANIMATION_STAGE_ONE) + +///timer loop that handles the pod moving from tube to tube +/obj/structure/transit_tube_pod/proc/move_animation(stage = MOVE_ANIMATION_STAGE_ONE) + if(stage == MOVE_ANIMATION_STAGE_ONE) next_dir = current_tube.get_exit(dir) if(!next_dir) - break + return exit_delay = current_tube.exit_delay(src, dir) - last_delay += exit_delay - - sleep(exit_delay) - next_loc = get_step(loc, next_dir) current_tube = null @@ -137,19 +140,25 @@ if(current_tube == null) setDir(next_dir) Move(get_step(loc, dir), dir, DELAY_TO_GLIDE_SIZE(exit_delay)) // Allow collisions when leaving the tubes. - break + return - last_delay = current_tube.enter_delay(src, next_dir) - sleep(last_delay) + enter_delay = current_tube.enter_delay(src, next_dir) + if(enter_delay > 0) + addtimer(CALLBACK(src, .proc/move_animation, MOVE_ANIMATION_STAGE_TWO), enter_delay) + return + else + stage = MOVE_ANIMATION_STAGE_TWO + if(stage == MOVE_ANIMATION_STAGE_TWO) setDir(next_dir) - set_glide_size(DELAY_TO_GLIDE_SIZE(last_delay + exit_delay)) + set_glide_size(DELAY_TO_GLIDE_SIZE(enter_delay + exit_delay)) forceMove(next_loc) // When moving from one tube to another, skip collision and such. density = current_tube.density if(current_tube?.should_stop_pod(src, next_dir)) current_tube.pod_stopped(src, dir) - break - + else + addtimer(CALLBACK(src, .proc/move_animation, MOVE_ANIMATION_STAGE_ONE), exit_delay) + return density = TRUE moving = FALSE @@ -220,3 +229,6 @@ /obj/structure/transit_tube_pod/dispensed/outside_tube() qdel(src) + +#undef MOVE_ANIMATION_STAGE_ONE +#undef MOVE_ANIMATION_STAGE_TWO