mirror of https://github.com/PrimeDecomp/prime.git
59 lines
1.5 KiB
C++
59 lines
1.5 KiB
C++
#ifndef _CGUNCONTROLLER
|
|
#define _CGUNCONTROLLER
|
|
|
|
#include "types.h"
|
|
|
|
#include "MetroidPrime/Weapons/GunController/CGSFreeLook.hpp"
|
|
#include "MetroidPrime/Weapons/GunController/CGSComboFire.hpp"
|
|
#include "MetroidPrime/Weapons/GunController/CGSFidget.hpp"
|
|
|
|
class CModelData;
|
|
|
|
enum EGunState {
|
|
kGS_Inactive,
|
|
kGS_Default,
|
|
kGS_FreeLook,
|
|
kGS_ComboFire,
|
|
kGS_Idle,
|
|
kGS_Fidget,
|
|
kGS_Strike,
|
|
kGS_BigStrike
|
|
};
|
|
|
|
class CStateManager;
|
|
|
|
class CGunController {
|
|
CModelData& x0_modelData;
|
|
CGSFreeLook x4_freeLook;
|
|
CGSComboFire x1c_comboFire;
|
|
CGSFidget x30_fidget;
|
|
char x48_pad[0x4];
|
|
EGunState x50_gunState;
|
|
int x54_curAnimId;
|
|
bool x58_24_animDone : 1;
|
|
bool x58_25_enteredComboFire : 1;
|
|
|
|
public:
|
|
explicit CGunController(CModelData& modelData);
|
|
~CGunController();
|
|
|
|
void EnterFreeLook(CStateManager&, int, int);
|
|
void EnterComboFire(CStateManager&, int);
|
|
void EnterFidget(CStateManager&, int, int, int);
|
|
void EnterStruck(CStateManager&, float, bool, bool);
|
|
void LoadFidgetAnimAsync(CStateManager&, int, int, int);
|
|
int Update(float, CStateManager&);
|
|
void EnterIdle(CStateManager&);
|
|
void ReturnToDefault(CStateManager&, float, bool);
|
|
void Reset();
|
|
void ReturnToBasePosition(CStateManager&);
|
|
bool IsComboOver() const { return x1c_comboFire.IsComboOver(); }
|
|
void UnLoadFidget() { x30_fidget.UnLoadAnim(); }
|
|
bool IsFidgetLoaded() const { return x30_fidget.IsAnimLoaded(); }
|
|
|
|
int GetFreeLookSetId() const { return x4_freeLook.GetSetId(); }
|
|
};
|
|
CHECK_SIZEOF(CGunController, 0x5C)
|
|
|
|
#endif // _CGUNCONTROLLER
|