diff options
| author | Ignacio Etcheverry <neikeq@users.noreply.github.com> | 2019-02-13 02:20:55 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-13 02:20:55 +0100 |
| commit | 35963eb052f35e720fb60119561e21a4f56f185a (patch) | |
| tree | ffffe10eb6aa479e154506b481731623a0822bfc /core/math/transform_2d.cpp | |
| parent | 5aff9903548c0f62d3d6aa880693d9131d2c53ac (diff) | |
| parent | 06df7b0963ffeac31d2a0e4268889f0573edd7ea (diff) | |
| download | redot-engine-35963eb052f35e720fb60119561e21a4f56f185a.tar.gz | |
Merge pull request #25831 from aaronfranke/mono-trans-rot-scale
[Core] [Mono] Transform2D rotation and scale fixes
Diffstat (limited to 'core/math/transform_2d.cpp')
| -rw-r--r-- | core/math/transform_2d.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp index 295e60babb..7d00158f3d 100644 --- a/core/math/transform_2d.cpp +++ b/core/math/transform_2d.cpp @@ -80,13 +80,14 @@ real_t Transform2D::get_rotation() const { } void Transform2D::set_rotation(real_t p_rot) { - + Size2 scale = get_scale(); real_t cr = Math::cos(p_rot); real_t sr = Math::sin(p_rot); elements[0][0] = cr; elements[0][1] = sr; elements[1][0] = -sr; elements[1][1] = cr; + set_scale(scale); } Transform2D::Transform2D(real_t p_rot, const Vector2 &p_pos) { @@ -101,10 +102,17 @@ Transform2D::Transform2D(real_t p_rot, const Vector2 &p_pos) { } Size2 Transform2D::get_scale() const { - real_t det_sign = basis_determinant() > 0 ? 1 : -1; + real_t det_sign = SGN(basis_determinant()); return Size2(elements[0].length(), det_sign * elements[1].length()); } +void Transform2D::set_scale(Size2 &p_scale) { + elements[0].normalize(); + elements[1].normalize(); + elements[0] *= p_scale.x; + elements[1] *= p_scale.y; +} + void Transform2D::scale(const Size2 &p_scale) { scale_basis(p_scale); elements[2] *= p_scale; |
