From ead3fc4a075d24e3481dfebdc63d54e7143a027c Mon Sep 17 00:00:00 2001 From: Pratik Borhade Date: Wed, 19 Oct 2022 18:20:47 +0530 Subject: Fix T99997: Calling teleport without waiting for the previous event disables gravity During teleport event, gravity is disabled and WalkMethod is stored in `teleport.navigation_mode` which is used later to reset the status after execution. Calling teleport events consecutively will change the initial WalkMethod value. So update it only on the first call. Also remove `else condition` as it stops the previously running teleport when the new teleport call fails to find a hit point. Reviewed by: dfelinto, mano-wii Differential Revision: https://developer.blender.org/D15574 --- source/blender/editors/space_view3d/view3d_navigate_walk.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/space_view3d/view3d_navigate_walk.c b/source/blender/editors/space_view3d/view3d_navigate_walk.c index 3e0ce892b5a..aea322d73d9 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_walk.c +++ b/source/blender/editors/space_view3d/view3d_navigate_walk.c @@ -849,11 +849,15 @@ static void walkEvent(WalkInfo *walk, const wmEvent *event) if (ret) { WalkTeleport *teleport = &walk->teleport; + + /* Store the current navigation mode if we are not already teleporting. */ + if (teleport->state == WALK_TELEPORT_STATE_OFF) { + teleport->navigation_mode = walk->navigation_mode; + } teleport->state = WALK_TELEPORT_STATE_ON; teleport->initial_time = PIL_check_seconds_timer(); teleport->duration = U.walk_navigation.teleport_time; - teleport->navigation_mode = walk->navigation_mode; walk_navigation_mode_set(walk, WALK_MODE_FREE); copy_v3_v3(teleport->origin, walk->rv3d->viewinv[3]); @@ -864,9 +868,7 @@ static void walkEvent(WalkInfo *walk, const wmEvent *event) sub_v3_v3v3(teleport->direction, loc, teleport->origin); } - else { - walk->teleport.state = WALK_TELEPORT_STATE_OFF; - } + break; } -- cgit v1.2.3