2022-10-09 01:13:17 -04:00
|
|
|
#ifndef _CGUNCONTROLLER
|
|
|
|
|
#define _CGUNCONTROLLER
|
2022-10-06 23:55:58 +03:00
|
|
|
|
|
|
|
|
#include "types.h"
|
|
|
|
|
|
2022-11-25 14:41:28 +02:00
|
|
|
#include "MetroidPrime/Weapons/GunController/CGSComboFire.hpp"
|
|
|
|
|
#include "MetroidPrime/Weapons/GunController/CGSFidget.hpp"
|
2026-02-04 15:15:59 -08:00
|
|
|
#include "MetroidPrime/Weapons/GunController/CGSFreeLook.hpp"
|
2022-10-07 02:28:42 +03:00
|
|
|
|
2022-10-06 23:55:58 +03:00
|
|
|
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;
|
2022-10-07 02:28:42 +03:00
|
|
|
CGSFreeLook x4_freeLook;
|
2022-11-25 14:41:28 +02:00
|
|
|
CGSComboFire x1c_comboFire;
|
|
|
|
|
CGSFidget x30_fidget;
|
2026-02-04 15:15:59 -08:00
|
|
|
char x4c_pad[0x4];
|
2022-10-06 23:55:58 +03:00
|
|
|
EGunState x50_gunState;
|
|
|
|
|
int x54_curAnimId;
|
|
|
|
|
bool x58_24_animDone : 1;
|
|
|
|
|
bool x58_25_enteredComboFire : 1;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
explicit CGunController(CModelData& modelData);
|
2026-02-04 15:15:59 -08:00
|
|
|
~CGunController();
|
2022-10-09 01:13:17 -04:00
|
|
|
|
2022-10-06 23:55:58 +03:00
|
|
|
void EnterFreeLook(CStateManager&, int, int);
|
|
|
|
|
void EnterComboFire(CStateManager&, int);
|
|
|
|
|
void EnterFidget(CStateManager&, int, int, int);
|
2022-10-10 22:15:26 +03:00
|
|
|
void EnterStruck(CStateManager&, float, bool, bool);
|
2022-10-06 23:55:58 +03:00
|
|
|
void LoadFidgetAnimAsync(CStateManager&, int, int, int);
|
2022-10-07 02:12:59 +03:00
|
|
|
int Update(float, CStateManager&);
|
2022-10-06 23:55:58 +03:00
|
|
|
void EnterIdle(CStateManager&);
|
2022-11-25 14:41:28 +02:00
|
|
|
void ReturnToDefault(CStateManager&, float, bool);
|
2022-10-06 23:55:58 +03:00
|
|
|
void Reset();
|
|
|
|
|
void ReturnToBasePosition(CStateManager&);
|
2022-11-25 14:41:28 +02:00
|
|
|
bool IsComboOver() const { return x1c_comboFire.IsComboOver(); }
|
|
|
|
|
void UnLoadFidget() { x30_fidget.UnLoadAnim(); }
|
|
|
|
|
bool IsFidgetLoaded() const { return x30_fidget.IsAnimLoaded(); }
|
2022-10-07 02:28:42 +03:00
|
|
|
|
|
|
|
|
int GetFreeLookSetId() const { return x4_freeLook.GetSetId(); }
|
2022-10-06 23:55:58 +03:00
|
|
|
};
|
2022-10-07 00:07:41 +03:00
|
|
|
CHECK_SIZEOF(CGunController, 0x5C)
|
2022-10-06 23:55:58 +03:00
|
|
|
|
2022-10-09 01:13:17 -04:00
|
|
|
#endif // _CGUNCONTROLLER
|