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
This commit is contained in:
@@ -849,11 +849,15 @@ static void walkEvent(WalkInfo *walk, const wmEvent *event)
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
WalkTeleport *teleport = &walk->teleport;
|
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->state = WALK_TELEPORT_STATE_ON;
|
||||||
teleport->initial_time = PIL_check_seconds_timer();
|
teleport->initial_time = PIL_check_seconds_timer();
|
||||||
teleport->duration = U.walk_navigation.teleport_time;
|
teleport->duration = U.walk_navigation.teleport_time;
|
||||||
|
|
||||||
teleport->navigation_mode = walk->navigation_mode;
|
|
||||||
walk_navigation_mode_set(walk, WALK_MODE_FREE);
|
walk_navigation_mode_set(walk, WALK_MODE_FREE);
|
||||||
|
|
||||||
copy_v3_v3(teleport->origin, walk->rv3d->viewinv[3]);
|
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);
|
sub_v3_v3v3(teleport->direction, loc, teleport->origin);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
walk->teleport.state = WALK_TELEPORT_STATE_OFF;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user