You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Made slide and reflect active verbs acting on itself in Vector2 and Vector3.
This is in alignment with other functions in vector classes. Also added checks for normalization, fixed the sign of reflect (which now corresponds to reflection along a plane mathematically), added bounce method and updated docs. Fixes #8201.
This commit is contained in:
@@ -61,6 +61,10 @@ Vector2 Vector2::normalized() const {
|
||||
return v;
|
||||
}
|
||||
|
||||
bool Vector2::is_normalized() const {
|
||||
return Math::isequal_approx(length(), (real_t)1.0);
|
||||
}
|
||||
|
||||
real_t Vector2::distance_to(const Vector2 &p_vector2) const {
|
||||
|
||||
return Math::sqrt((x - p_vector2.x) * (x - p_vector2.x) + (y - p_vector2.y) * (y - p_vector2.y));
|
||||
@@ -274,13 +278,23 @@ Vector2 Vector2::cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, c
|
||||
*/
|
||||
}
|
||||
|
||||
Vector2 Vector2::slide(const Vector2 &p_vec) const {
|
||||
|
||||
return p_vec - *this * this->dot(p_vec);
|
||||
// slide returns the component of the vector along the given plane, specified by its normal vector.
|
||||
Vector2 Vector2::slide(const Vector2 &p_n) const {
|
||||
#ifdef DEBUG_ENABLED
|
||||
ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector2());
|
||||
#endif
|
||||
return *this - p_n * this->dot(p_n);
|
||||
}
|
||||
Vector2 Vector2::reflect(const Vector2 &p_vec) const {
|
||||
|
||||
return p_vec - *this * this->dot(p_vec) * 2.0;
|
||||
Vector2 Vector2::bounce(const Vector2 &p_n) const {
|
||||
return -reflect(p_n);
|
||||
}
|
||||
|
||||
Vector2 Vector2::reflect(const Vector2 &p_n) const {
|
||||
#ifdef DEBUG_ENABLED
|
||||
ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector2());
|
||||
#endif
|
||||
return 2.0 * p_n * this->dot(p_n) - *this;
|
||||
}
|
||||
|
||||
bool Rect2::intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_pos, Point2 *r_normal) const {
|
||||
|
||||
Reference in New Issue
Block a user