13 totalGravity.z = 0.0f;
14 totalGravity.y = 0.0f;
15 totalGravity.x = 0.0f;
18 bool hasCalculated =
false;
24 f32 largestScalar = -1.0f;
25 s32 largestPriority = -1;
27 while (pGravities != &mGravities[mNumGravities]) {
29 bool validGravity =
false;
31 if ((*pGravities)->mActivated && (*pGravities)->mValidFollower && (*pGravities)->mAppeared) {
36 if (validGravity && ((gravityType & (*pGravities)->mGravityType) != 0) && (host != (u32)(*pGravities)->mHost)) {
38 s32 priority = (*pGravities)->mPriority;
40 if (priority < largestPriority) {
47 if ((*pGravities)->calcGravity(&gravityVec, rPosition)) {
48 bool storeInfo =
false;
49 f32 scalar = VECMag(
reinterpret_cast<const Vec*
>(&gravityVec));
52 if (priority == largestPriority) {
53 totalGravity.addInline(gravityVec);
56 if (largestScalar < scalar) {
61 else if (priority > largestPriority) {
62 largestPriority = priority;
65 totalGravity = gravityVec;
69 if (pInfo && storeInfo) {
70 largestScalar = scalar;
71 pInfo->mGravityVector = gravityVec;
72 pInfo->mLargestPriority = largestPriority;
73 pInfo->mGravityInstance = *pGravities;
83 MR::normalizeOrZero(&totalGravity);
84 *pGravity = totalGravity;
bool calcTotalGravityVector(TVec3f *pGravity, GravityInfo *pInfo, const TVec3f &rPosition, u32 gravityType, u32 requester) const
Calculates the total gravity vector at the specified position in space. If the object that requests g...