1#include "Game/Gravity.hpp"
2#include "Game/Util/GravityUtil.hpp"
3#include "Game/Util/JMapInfo.hpp"
4#include "Game/Scene/SceneObjHolder.hpp"
5#include "Game/LiveActor/LiveActor.hpp"
9 void getJMapInfoArgPlus(
const JMapInfoIter &rIter,
const char *pFieldName, f32 *pDest) {
13 void getJMapInfoArgPlus(
const JMapInfoIter &rIter,
const char *pFieldName, s32 *pDest) {
17 s32 column = pInfo->searchItemInfo(pFieldName);
21 bool read = column < 0 ? false : pInfo->getValueFast(row, column, &result);
24 if (read && result >= 0.0f) {
29 bool calcGravityVectorOrZero(
const NameObj *pActor,
const TVec3f &rPosition, u32 gravityType, TVec3f * pDest,
GravityInfo *pInfo, u32 host) {
35 =
static_cast<PlanetGravityManager*
>(MR::getSceneObjHolder()->getObj(SceneObj_PlanetGravityManager));
43 =
static_cast<PlanetGravityManager*
>(MR::getSceneObjHolder()->getObj(SceneObj_PlanetGravityManager));
48 u32 typeFlags = GRAVITY_TYPE_NORMAL;
49 return ::calcGravityVectorOrZero(pActor, pActor->
mPosition, typeFlags, pDest, pInfo, host);
52 bool calcGravityVector(
const NameObj *pActor,
const TVec3f &rPosition, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
53 u32 typeFlags = GRAVITY_TYPE_NORMAL;
54 return ::calcGravityVectorOrZero(pActor, rPosition, typeFlags, pDest, pInfo, host);
57 bool calcDropShadowVector(
const LiveActor *pActor, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
58 u32 typeFlags = GRAVITY_TYPE_SHADOW;
59 return ::calcGravityVectorOrZero(pActor, pActor->
mPosition, typeFlags, pDest, pInfo, host);
62 bool calcDropShadowVector(
const NameObj *pActor,
const TVec3f &rPosition, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
63 u32 typeFlags = GRAVITY_TYPE_SHADOW;
64 return ::calcGravityVectorOrZero(pActor, rPosition, typeFlags, pDest, pInfo, host);
67 bool calcGravityAndDropShadowVector(
const LiveActor *pActor, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
68 u32 typeFlags = GRAVITY_TYPE_NORMAL | GRAVITY_TYPE_SHADOW;
69 return ::calcGravityVectorOrZero(pActor, pActor->
mPosition, typeFlags, pDest, pInfo, host);
72 bool calcGravityAndMagnetVector(
const NameObj *pActor,
const TVec3f &rPosition, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
73 u32 typeFlags = GRAVITY_TYPE_NORMAL | GRAVITY_TYPE_MAGNET;
74 return ::calcGravityVectorOrZero(pActor, rPosition, typeFlags, pDest, pInfo, host);
77 bool calcGravityVectorOrZero(
const LiveActor *pActor, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
78 u32 typeFlags = GRAVITY_TYPE_NORMAL;
79 return ::calcGravityVectorOrZero(pActor, pActor->
mPosition, typeFlags, pDest, pInfo, host);
82 bool calcGravityVectorOrZero(
const NameObj *pActor,
const TVec3f &rPosition, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
83 u32 typeFlags = GRAVITY_TYPE_NORMAL;
84 return ::calcGravityVectorOrZero(pActor, rPosition, typeFlags, pDest, pInfo, host);
87 bool calcDropShadowVectorOrZero(
const NameObj *pActor,
const TVec3f &rPosition, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
88 u32 typeFlags = GRAVITY_TYPE_SHADOW;
89 return ::calcGravityVectorOrZero(pActor, rPosition, typeFlags, pDest, pInfo, host);
92 bool calcGravityAndDropShadowVectorOrZero(
const LiveActor *pActor, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
93 u32 typeFlags = GRAVITY_TYPE_NORMAL | GRAVITY_TYPE_SHADOW;
94 return ::calcGravityVectorOrZero(pActor, pActor->
mPosition, typeFlags, pDest, pInfo, host);
97 bool calcAttractMarioLauncherOrZero(
const LiveActor *pActor, TVec3f *pDest,
GravityInfo *pInfo, u32 host) {
98 u32 typeFlags = GRAVITY_TYPE_MARIO_LAUNCHER;
99 return ::calcGravityVectorOrZero(pActor, pActor->
mPosition, typeFlags, pDest, pInfo, host);
102 bool isZeroGravity(
const LiveActor *pActor) {
104 return ::calcGravityVectorOrZero(pActor, pActor->
mPosition, GRAVITY_TYPE_NORMAL, &dummyGravity,
nullptr, 0) ==
false;
109 return !pGravity ? false : pGravity->mGravityPower == GRAVITY_POWER_LIGHT;
114 f32 argRange = pGravity->mRange;
115 ::getJMapInfoArgPlus(rIter,
"Range", &argRange);
116 f32 distant = pGravity->mDistant;
117 pGravity->mRange = argRange;
118 f32 argDistant = distant;
119 ::getJMapInfoArgPlus(rIter,
"Distant", &argDistant);
120 s32 priority = pGravity->mPriority;
121 pGravity->mDistant = argDistant;
122 s32 argPriority = priority;
123 ::getJMapInfoArgPlus(rIter,
"Priority", &argPriority);
124 pGravity->setPriority(argPriority);
127 s32 gravityId = pGravity->mGravityId;
128 ::getJMapInfoArgPlus(rIter,
"Gravity_id", &gravityId);
129 pGravity->mGravityId = gravityId;
132 getJMapInfoGravityType(rIter, pGravity);
133 getJMapInfoGravityPower(rIter, pGravity);
136 s32 inverse = pGravity->mIsInverse !=
false;
137 ::getJMapInfoArgPlus(rIter,
"Inverse", &inverse);
138 pGravity->mIsInverse = inverse;
142 const char *pType =
nullptr;
144 if (rIter.getValue(
"Gravity_type", &pType)) {
145 if (!strcmp(pType,
"Normal")) {
146 pGravity->mGravityType = GRAVITY_TYPE_NORMAL;
148 else if (!strcmp(pType,
"Shadow")) {
149 pGravity->mGravityType = GRAVITY_TYPE_SHADOW;
151 else if (!strcmp(pType,
"Magnet")) {
152 pGravity->mGravityType = GRAVITY_TYPE_MAGNET;
158 const char *pPower =
nullptr;
160 if (rIter.getValue(
"Power", &pPower)) {
161 if (!strcmp(pPower,
"Light")) {
162 pGravity->mGravityPower = GRAVITY_POWER_LIGHT;
164 else if (!strcmp(pPower,
"Normal")) {
165 pGravity->mGravityPower = GRAVITY_POWER_NORMAL;
167 else if (!strcmp(pPower,
"Heavy")) {
168 pGravity->mGravityPower = GRAVITY_POWER_HEAVY;
The basis of a drawable actor that can contain states (see: Nerve)
TVec3f mPosition
3D vector of the actor's position.
The most basic form of an object.
Registers and holds individual PlanetGravity instances. Also provides the main function for calculati...
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...
void registerGravity(PlanetGravity *pGravity)
Registers a PlanetGravity instance to the array of gravities. The higher the gravity's priority is,...