2022-10-09 05:13:17 +00:00
|
|
|
#ifndef _CGRAPPLEARM
|
|
|
|
#define _CGRAPPLEARM
|
2022-10-06 10:38:13 +00:00
|
|
|
|
|
|
|
#include "types.h"
|
2024-09-26 05:54:05 +00:00
|
|
|
|
2022-10-10 19:15:26 +00:00
|
|
|
#include "Kyoto/Audio/CSfxHandle.hpp"
|
2024-09-26 05:54:05 +00:00
|
|
|
#include "Kyoto/Math/CTransform4f.hpp"
|
|
|
|
|
|
|
|
#include "rstl/single_ptr.hpp"
|
2022-10-06 10:38:13 +00:00
|
|
|
|
|
|
|
class CVector3f;
|
2022-10-10 19:15:26 +00:00
|
|
|
class CStateManager;
|
|
|
|
class CFrustumPlanes;
|
|
|
|
class CGunController;
|
2022-10-06 10:38:13 +00:00
|
|
|
|
|
|
|
class CGrappleArm {
|
|
|
|
public:
|
2022-10-10 19:15:26 +00:00
|
|
|
enum EArmState {
|
|
|
|
kAS_IntoGrapple,
|
|
|
|
kAS_IntoGrappleIdle,
|
|
|
|
kAS_FireGrapple,
|
|
|
|
kAS_Three,
|
|
|
|
kAS_ConnectGrapple,
|
|
|
|
kAS_Five,
|
|
|
|
kAS_Connected,
|
|
|
|
kAS_Seven,
|
|
|
|
kAS_OutOfGrapple,
|
|
|
|
kAS_GunControllerAnimation,
|
|
|
|
kAS_Done
|
|
|
|
};
|
|
|
|
|
2022-10-06 10:38:13 +00:00
|
|
|
CGrappleArm(const CVector3f& scale);
|
2022-10-06 11:06:55 +00:00
|
|
|
~CGrappleArm();
|
2022-10-06 10:38:13 +00:00
|
|
|
|
2022-10-06 11:37:57 +00:00
|
|
|
void PreRender(CStateManager& mgr, const CFrustumPlanes& frustum, const CVector3f& camPos);
|
2022-10-06 20:34:27 +00:00
|
|
|
void ReturnToDefault(CStateManager& mgr, float dt, bool setState);
|
2022-10-10 19:15:26 +00:00
|
|
|
void EnterStruck(CStateManager&, float, bool, bool);
|
|
|
|
void DisconnectGrappleBeam();
|
2022-10-09 05:13:17 +00:00
|
|
|
|
2024-09-26 05:54:05 +00:00
|
|
|
void SetTransform(const CTransform4f& xf) { *(CTransform4f*)(&x0_pad[0x220]) = xf; }
|
|
|
|
|
2022-10-06 20:34:27 +00:00
|
|
|
// EArmState GetAnimState() const { return x334_animState; }
|
2022-10-06 11:37:57 +00:00
|
|
|
bool GetActive() const { return x3b2_24_active; }
|
2022-10-06 20:34:27 +00:00
|
|
|
bool BeamActive() const { return x3b2_25_beamActive; }
|
|
|
|
bool IsArmMoving() const { return x3b2_27_armMoving; }
|
|
|
|
bool IsGrappling() const { return x3b2_28_isGrappling; }
|
|
|
|
bool IsSuitLoading() const { return x3b2_29_suitLoading; }
|
2022-10-06 11:37:57 +00:00
|
|
|
|
2022-10-06 10:38:13 +00:00
|
|
|
private:
|
2024-09-26 05:54:05 +00:00
|
|
|
uchar x0_pad[0x328]; // TODO
|
|
|
|
rstl::single_ptr< CGunController > x328_gunController;
|
2022-10-10 19:15:26 +00:00
|
|
|
CSfxHandle x32c_grappleLoopSfx;
|
|
|
|
CSfxHandle x330_swooshSfx;
|
|
|
|
EArmState x334_animState;
|
|
|
|
uchar x338_pad[0x78];
|
2022-10-09 05:37:23 +00:00
|
|
|
short x3b0_rumbleHandle;
|
2022-10-09 05:13:17 +00:00
|
|
|
bool x3b2_24_active : 1;
|
2022-10-06 11:37:57 +00:00
|
|
|
bool x3b2_25_beamActive : 1;
|
|
|
|
bool x3b2_26_grappleHit : 1;
|
|
|
|
bool x3b2_27_armMoving : 1;
|
|
|
|
bool x3b2_28_isGrappling : 1;
|
|
|
|
bool x3b2_29_suitLoading : 1;
|
2022-10-06 10:38:13 +00:00
|
|
|
};
|
|
|
|
CHECK_SIZEOF(CGrappleArm, 0x3b4)
|
|
|
|
|
2022-10-09 05:13:17 +00:00
|
|
|
#endif // _CGRAPPLEARM
|