Skip to content

Commit

Permalink
Fix forward calculation in PathFollow3D for the position at the end o…
Browse files Browse the repository at this point in the history
…f the curve
  • Loading branch information
raulsntos committed Jul 28, 2021
1 parent 60eb508 commit e23f6a5
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions scene/3d/path_3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,18 @@ void PathFollow3D::_update_transform(bool p_update_xyz_rot) {
}
float bi = c->get_bake_interval();
float o_next = offset + bi;
float o_prev = offset - bi;

if (loop) {
o_next = Math::fposmod(o_next, bl);
} else if (rotation_mode == ROTATION_ORIENTED && o_next >= bl) {
o_next = bl;
o_prev = Math::fposmod(o_prev, bl);
} else if (rotation_mode == ROTATION_ORIENTED) {
if (o_next >= bl) {
o_next = bl;
}
if (o_prev <= 0) {
o_prev = 0;
}
}

Vector3 pos = c->interpolate_baked(offset, cubic);
Expand All @@ -113,7 +120,12 @@ void PathFollow3D::_update_transform(bool p_update_xyz_rot) {
// will be replaced by "Vector3(h_offset, v_offset, 0)" where it was formerly used

if (rotation_mode == ROTATION_ORIENTED) {
Vector3 forward = c->interpolate_baked(o_next, cubic) - pos;
Vector3 forward = c->interpolate_baked(o_next, cubic);

// Try with the previous position
if (forward.length_squared() < CMP_EPSILON2) {
forward = pos - c->interpolate_baked(o_prev, cubic);
}

if (forward.length_squared() < CMP_EPSILON2) {
forward = Vector3(0, 0, 1);
Expand Down

0 comments on commit e23f6a5

Please sign in to comment.