Merge pull request #78378 from 0xafbf/curve-evaluate-correct-transform
Changed the way the rotation of a curve at a point is evaluated to match PathFollow2D
This commit is contained in:
commit
b88eddb682
4 changed files with 36 additions and 18 deletions
|
|
@ -155,17 +155,37 @@ TEST_CASE("[Curve2D] Sampling") {
|
|||
|
||||
SUBCASE("sample_baked_with_rotation") {
|
||||
const real_t pi = 3.14159;
|
||||
Transform2D t = curve->sample_baked_with_rotation(curve->get_closest_offset(Vector2(0, 0)));
|
||||
CHECK(t.get_origin() == Vector2(0, 0));
|
||||
CHECK(Math::is_equal_approx(t.get_rotation(), pi));
|
||||
const real_t half_pi = pi * 0.5;
|
||||
Ref<Curve2D> rot_curve = memnew(Curve2D);
|
||||
Transform2D t;
|
||||
|
||||
t = curve->sample_baked_with_rotation(curve->get_closest_offset(Vector2(0, 25)));
|
||||
rot_curve->clear_points();
|
||||
rot_curve->add_point(Vector2());
|
||||
rot_curve->add_point(Vector2(50, 0));
|
||||
t = rot_curve->sample_baked_with_rotation(25);
|
||||
CHECK(t.get_origin() == Vector2(25, 0));
|
||||
CHECK(Math::is_equal_approx(t.get_rotation(), 0));
|
||||
|
||||
rot_curve->clear_points();
|
||||
rot_curve->add_point(Vector2());
|
||||
rot_curve->add_point(Vector2(0, 50));
|
||||
t = rot_curve->sample_baked_with_rotation(25);
|
||||
CHECK(t.get_origin() == Vector2(0, 25));
|
||||
CHECK(Math::is_equal_approx(t.get_rotation(), half_pi));
|
||||
|
||||
rot_curve->clear_points();
|
||||
rot_curve->add_point(Vector2());
|
||||
rot_curve->add_point(Vector2(-50, 0));
|
||||
t = rot_curve->sample_baked_with_rotation(25);
|
||||
CHECK(t.get_origin() == Vector2(-25, 0));
|
||||
CHECK(Math::is_equal_approx(t.get_rotation(), pi));
|
||||
|
||||
t = curve->sample_baked_with_rotation(curve->get_closest_offset(Vector2(0, 50)));
|
||||
CHECK(t.get_origin() == Vector2(0, 50));
|
||||
CHECK(Math::is_equal_approx(t.get_rotation(), pi));
|
||||
rot_curve->clear_points();
|
||||
rot_curve->add_point(Vector2());
|
||||
rot_curve->add_point(Vector2(0, -50));
|
||||
t = rot_curve->sample_baked_with_rotation(25);
|
||||
CHECK(t.get_origin() == Vector2(0, -25));
|
||||
CHECK(Math::is_equal_approx(t.get_rotation(), -half_pi));
|
||||
}
|
||||
|
||||
SUBCASE("get_closest_point") {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue