Fix forward calculation in PathFollow3D for the position at the end of the curve #50986
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #50973
The issue was, when the
PathFollow3D
has itsunit_offset
set to1.0
(oroffset
to the length of the curve), that is the final position at the end of the curve, the rotation was being reset. This was happening because of these lines:godot/scene/3d/path_3d.cpp
Lines 115 to 122 in 60eb508
When we are the end of the curve, the
interpolate_baked
method returns the sameVector3
foroffset
that it does foro_next
so when theforward
vector is calculated in line 116 the result isVector3(0, 0, 0)
which is not valid so in line 119 it is set toVector3(0, 0, 1)
which is the global forward direction and this produces the effect of having the rotation reset.To prevent this, this PR also interpolates a previous vector
o_prev
so if we are at the end of the curve, we can calculate theforward
vector with the previous position, in pseudo-code: