diff options
author | Sergeanur <s.anureev@yandex.ua> | 2020-11-14 21:13:32 +0100 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2020-11-15 23:36:54 +0100 |
commit | 9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c (patch) | |
tree | 3dcbab653ba34fa1fdc273887bd377603c4ff4f2 /src/collision/ColSphere.cpp | |
parent | car AI revision (diff) | |
download | re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.gz re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.bz2 re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.lz re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.xz re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.zst re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.zip |
Diffstat (limited to 'src/collision/ColSphere.cpp')
-rw-r--r-- | src/collision/ColSphere.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/collision/ColSphere.cpp b/src/collision/ColSphere.cpp new file mode 100644 index 00000000..65f02860 --- /dev/null +++ b/src/collision/ColSphere.cpp @@ -0,0 +1,27 @@ +#include "common.h" +#include "ColSphere.h" +#include "General.h" + +void +CColSphere::Set(float radius, const CVector ¢er, uint8 surf, uint8 piece) +{ + this->radius = radius; + this->center = center; + this->surface = surf; + this->piece = piece; +} + +bool +CColSphere::IntersectRay(CVector const& from, CVector const& dir, CVector &entry, CVector &exit) +{ + CVector distToCenter = from - center; + float distToTouchSqr = distToCenter.MagnitudeSqr() - sq(radius); + float root1, root2; + + if (!CGeneral::SolveQuadratic(1.0f, DotProduct(distToCenter, dir) * 2.f, distToTouchSqr, root1, root2)) + return false; + + entry = from + dir * root1; + exit = from + dir * root2; + return true; +}
\ No newline at end of file |