pikmin2/include/efx/TNaviEffect.h
EpochFlame 393dcd1dba consistent member variable naming
requested by @intns
2023-01-25 18:02:08 -05:00

119 lines
2.5 KiB
C++

#ifndef _EFX_TNAVIEFFECT_H
#define _EFX_TNAVIEFFECT_H
#include "efx/TFueact.h"
#include "efx/TCursor.h"
#include "efx/TOrima.h"
#include "efx/Toe.h"
#include "efx/TPk.h"
#include "BitFlag.h"
namespace efx {
enum NaviEffectFlags {
NAVIFX_InWater = 0x1,
NAVIFX_LightOn = 0x2,
NAVIFX_Unk3 = 0x4,
NAVIFX_Unk4 = 0x8,
NAVIFX_Unk5 = 0x10,
NAVIFX_Unk6 = 0x20,
NAVIFX_IsSaved = 0x80000000,
};
struct TNaviEffect {
TNaviEffect()
: mPos(nullptr)
, mNaviPos(nullptr)
, mBeaconMtx(nullptr)
, mHeadMtx(nullptr)
, mHeight(0)
, mCursor(PID_Cursor_Default)
{
}
enum enumNaviType { NAVITYPE_Olimar, NAVITYPE_Louie, NAVITYPE_President };
void init(Vector3f*, Mtx, Vector3f*, enumNaviType);
void updateHamon_();
void killHamonA_();
void killHamonB_();
void killLight_();
void killLightAct_();
void killCursor_();
void killFueact_();
void update();
void createCursor_(Vector3f, f32);
void updateCursor_(Vector3f, f32);
void createFueact_(Mtx, Vector3f*);
void createOrimadamage_(Mtx);
void killOrimadamage_();
void createLight_(Mtx);
void createLightAct_(Mtx);
void createHamonA_(Vector3f*);
void createHamonB_(Vector3f*);
void setNaviType(enumNaviType);
inline void setFlag(u32 flag) { mFlags.typeView |= flag; }
inline void resetFlag(u32 flag) { mFlags.typeView &= ~flag; }
inline bool isFlag(u32 flag) { return mFlags.typeView & flag; }
inline void createLight()
{
setFlag(NAVIFX_LightOn);
createLight_(mBeaconMtx->mMatrix.mtxView);
}
inline void killLight()
{
resetFlag(NAVIFX_LightOn);
killLight_();
}
inline void saveFlags()
{
mSavedFlags.typeView = mFlags.typeView;
mFlags.clear();
setFlag(NAVIFX_IsSaved);
}
inline void restoreFlags()
{
mFlags.typeView = mSavedFlags.typeView;
resetFlag(NAVIFX_IsSaved);
}
inline void enterWater(bool isInWater)
{
setFlag(efx::NAVIFX_InWater);
updateHamon_();
if (!isInWater) {
createSimpleDive(mHamonPosition);
}
}
BitFlag<u32> mFlags; // _00
BitFlag<u32> mSavedFlags; // _04
Vector3f* mPos; // _08
Vector3f* mNaviPos; // _0C
Matrixf* mBeaconMtx; // _10
Matrixf* mHeadMtx; // _14
f32* mHeight; // _18
Vector3f mHamonPosition; // _1C
ToeHamonA mHamonA; // _28
ToeHamonB mHamonB; // _44
TFueact mFueact; // _60
TCursor mCursor; // _AC
TOrimaLight mLight; // _33C
TOrimaLightAct mLightAct; // _36C
TOrimadamage mDamage; // _39C
};
} // namespace efx
#endif