#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