diff options
| author | Ferenc Arn | 2017-03-31 10:25:09 -0500 |
|---|---|---|
| committer | Ferenc Arn | 2017-04-03 10:02:12 -0500 |
| commit | 1a620bd5faebd83015182ea032f40936a9916af6 (patch) | |
| tree | e1705e3805bae8cb898694136f65d7622dd2bc8c /core/math/vector3.h | |
| parent | 6731924dcfa7451d8b31461b438fd2a5aa8af1f6 (diff) | |
| download | godot-1a620bd5faebd83015182ea032f40936a9916af6.tar.gz godot-1a620bd5faebd83015182ea032f40936a9916af6.tar.zst godot-1a620bd5faebd83015182ea032f40936a9916af6.zip | |
Diffstat (limited to 'core/math/vector3.h')
| -rw-r--r-- | core/math/vector3.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/core/math/vector3.h b/core/math/vector3.h index 951380e89..8550ae700 100644 --- a/core/math/vector3.h +++ b/core/math/vector3.h @@ -107,6 +107,7 @@ struct Vector3 { _FORCE_INLINE_ real_t angle_to(const Vector3 &p_b) const; _FORCE_INLINE_ Vector3 slide(const Vector3 &p_vec) const; + _FORCE_INLINE_ Vector3 bounce(const Vector3 &p_vec) const; _FORCE_INLINE_ Vector3 reflect(const Vector3 &p_vec) const; /* Operators */ @@ -400,14 +401,23 @@ void Vector3::zero() { x = y = z = 0; } -Vector3 Vector3::slide(const Vector3 &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. +Vector3 Vector3::slide(const Vector3 &p_n) const { +#ifdef DEBUG_ENABLED + ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector3()); +#endif + return *this - p_n * this->dot(p_n); } -Vector3 Vector3::reflect(const Vector3 &p_vec) const { +Vector3 Vector3::bounce(const Vector3 &p_n) const { + return -reflect(p_n); +} - return p_vec - *this * this->dot(p_vec) * 2.0; +Vector3 Vector3::reflect(const Vector3 &p_n) const { +#ifdef DEBUG_ENABLED + ERR_FAIL_COND_V(p_n.is_normalized() == false, Vector3()); +#endif + return 2.0 * p_n * this->dot(p_n) - *this; } #endif |
