SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
PointGravity.cpp
1#include "Game/Gravity.hpp"
2#include "Game/Util.hpp"
3
4PointGravity::PointGravity() :
6 mOrigPosition(0, 0, 0),
7 mTranslation(0, 0, 0)
8{
9
10}
11
12bool PointGravity::calcOwnGravityVector(TVec3f *pDest, f32 *pScalar, const TVec3f &rPosition) const {
13 TVec3f direction;
14 direction.subInline(rPosition, mTranslation);
15 f32 scalar = VECMag((Vec*)&direction);
16
17 // Epsilon-equals zero? If so, direction is the zero vector.
18 if (MR::isNearZero(scalar, 0.01f)) {
19 direction.z = 0.0f;
20 direction.y = 0.0f;
21 direction.x = 0.0f;
22 }
23 // Otherwise, it's a proper direction and it should be normalized.
24 else {
25 direction.scaleInline(1.0f / scalar);
26 }
27
28 // Out of range? If so, don't update result vector & scalar
29 if (!isInRangeDistance(scalar)) {
30 return false;
31 }
32 // Update result vector & scalar if applicable
33 else {
34 if (pDest) {
35 pDest->setInlinePS(direction);
36 }
37 if (pScalar) {
38 *pScalar = scalar;
39 }
40
41 return true;
42 }
43}
44
45void PointGravity::updateMtx(const TPos3f &rMtx) {
46 // Converts relative zone-coordinates into worldspace
47 // mTranslation = rMtx * mOrigPosition
48 rMtx.mult(mOrigPosition, mTranslation);
49}