diff options
Diffstat (limited to 'core/math')
| -rw-r--r-- | core/math/a_star_grid_2d.cpp | 18 | ||||
| -rw-r--r-- | core/math/quaternion.cpp | 4 |
2 files changed, 7 insertions, 15 deletions
diff --git a/core/math/a_star_grid_2d.cpp b/core/math/a_star_grid_2d.cpp index 215e69129c..30d50073d7 100644 --- a/core/math/a_star_grid_2d.cpp +++ b/core/math/a_star_grid_2d.cpp @@ -246,17 +246,11 @@ AStarGrid2D::Point *AStarGrid2D::_jump(Point *p_from, Point *p_to) { } } else { // DIAGONAL_MODE_NEVER if (dx != 0) { - if (!_is_walkable(to_x + dx, to_y)) { + if ((_is_walkable(to_x, to_y - 1) && !_is_walkable(to_x - dx, to_y - 1)) || (_is_walkable(to_x, to_y + 1) && !_is_walkable(to_x - dx, to_y + 1))) { return p_to; } - if (_jump(p_to, _get_point(to_x, to_y + 1)) != nullptr) { - return p_to; - } - if (_jump(p_to, _get_point(to_x, to_y - 1)) != nullptr) { - return p_to; - } - } else { - if (!_is_walkable(to_x, to_y + dy)) { + } else if (dy != 0) { + if ((_is_walkable(to_x - 1, to_y) && !_is_walkable(to_x - 1, to_y - dy)) || (_is_walkable(to_x + 1, to_y) && !_is_walkable(to_x + 1, to_y - dy))) { return p_to; } if (_jump(p_to, _get_point(to_x + 1, to_y)) != nullptr) { @@ -266,9 +260,7 @@ AStarGrid2D::Point *AStarGrid2D::_jump(Point *p_from, Point *p_to) { return p_to; } } - if (_is_walkable(to_x + dx, to_y + dy) && _is_walkable(to_x + dx, to_y) && _is_walkable(to_x, to_y + dy)) { - return _jump(p_to, _get_point(to_x + dx, to_y + dy)); - } + return _jump(p_to, _get_point(to_x + dx, to_y + dy)); } return nullptr; } @@ -536,7 +528,7 @@ TypedArray<Vector2i> AStarGrid2D::get_id_path(const Vector2i &p_from_id, const V if (a == b) { TypedArray<Vector2i> ret; - ret.push_back(a); + ret.push_back(a->id); return ret; } diff --git a/core/math/quaternion.cpp b/core/math/quaternion.cpp index cf415a9bf9..34e212a5b6 100644 --- a/core/math/quaternion.cpp +++ b/core/math/quaternion.cpp @@ -220,7 +220,7 @@ Quaternion Quaternion::spherical_cubic_interpolate(const Quaternion &p_b, const ln.z = Math::cubic_interpolate(ln_from.z, ln_to.z, ln_pre.z, ln_post.z, p_weight); Quaternion q2 = to_q * ln.exp(); - // To cancel error made by Expmap ambiguity, do blends. + // To cancel error made by Expmap ambiguity, do blending. return q1.slerp(q2, p_weight); } @@ -271,7 +271,7 @@ Quaternion Quaternion::spherical_cubic_interpolate_in_time(const Quaternion &p_b ln.z = Math::cubic_interpolate_in_time(ln_from.z, ln_to.z, ln_pre.z, ln_post.z, p_weight, p_b_t, p_pre_a_t, p_post_b_t); Quaternion q2 = to_q * ln.exp(); - // To cancel error made by Expmap ambiguity, do blends. + // To cancel error made by Expmap ambiguity, do blending. return q1.slerp(q2, p_weight); } |