Add CPowerBeam

Former-commit-id: 0d1b469f91
This commit is contained in:
Henrique Gemignani Passos Lima
2022-11-15 22:06:18 +02:00
parent 45ec66abc2
commit 68f99e4072
15 changed files with 235 additions and 28 deletions

View File

@@ -13,6 +13,7 @@
#include "rstl/auto_ptr.hpp"
#include "rstl/optional_object.hpp"
#include "rstl/pair.hpp"
#include "rstl/string.hpp"
class CAABox;
class CActorLights;
@@ -82,6 +83,8 @@ public:
CAABox GetBounds(const CTransform4f& xf) const;
CAABox GetBounds() const;
CTransform4f GetScaledLocatorTransform(const rstl::string& name) const;
bool HasAnimation() const { return !xc_animData.null(); }
bool IsNull() const { return xc_animData.null() && !x1c_normalModel; }

View File

@@ -3,10 +3,12 @@
#include "types.h"
#include "MetroidPrime/CModelData.hpp"
#include "MetroidPrime/Player/CPlayerState.hpp"
#include "MetroidPrime/Weapons/WeaponCommon.hpp"
#include "MetroidPrime/Weapons/WeaponTypes.hpp"
#include "Kyoto/Math/CAABox.hpp"
#include "Kyoto/Math/CVector3f.hpp"
#include "Kyoto/TToken.hpp"
@@ -16,13 +18,16 @@
#include "rstl/reserved_vector.hpp"
#include "rstl/single_ptr.hpp"
class CModelData;
class CGenDescription;
class CGunController;
class CAnimCharacterSet;
class CWeaponDescription;
class CElementGen;
class CRainSplashGenerator;
class CTransform4f;
class CModelFlags;
class CActorLights;
class SWeaponInfo;
class CVelocityInfo {
public:
@@ -42,10 +47,9 @@ private:
class CGunWeapon {
public:
// TODO ctor
CGunWeapon();
CGunWeapon(CAssetId ancsId, EWeaponType type, TUniqueId playerId, EMaterialTypes playerMaterial,
const CVector3f& scale);
virtual ~CGunWeapon();
// TODO other virtual methods
enum ESecondaryFxType {
kSFT_None,
@@ -87,7 +91,7 @@ public:
CAABox GetBounds(const CTransform4f& xf) const;
const SWeaponInfo& GetWeaponInfo() const;
private:
protected:
// x0 is vtable
CVector3f x4_scale;
rstl::optional_object< CModelData > x10_solidModelData;

View File

@@ -5,14 +5,37 @@
#include "MetroidPrime/Weapons/CGunWeapon.hpp"
#include "rstl/single_ptr.hpp"
class CPowerBeam : public CGunWeapon {
public:
CPowerBeam(CAssetId characterId, EWeaponType type, TUniqueId playerId,
EMaterialTypes playerMaterial, const CVector3f& scale);
~CPowerBeam();
void PreRenderGunFx(const CStateManager& mgr, const CTransform4f& xf) override;
void PostRenderGunFx(const CStateManager& mgr, const CTransform4f& xf) override;
void UpdateGunFx(bool shotSmoke, float dt, const CStateManager& mgr, const CTransform4f& xf) override;
void Fire(bool underwater, float dt, CPlayerState::EChargeStage chargeState, const CTransform4f& xf, CStateManager& mgr,
TUniqueId homingTarget, float chargeFactor1, float chargeFactor2) override;
void EnableSecondaryFx(ESecondaryFxType type) override;
void Update(float dt, CStateManager& mgr) override;
void Load(CStateManager& mgr, bool subtypeBasePose) override;
void Unload(CStateManager& mgr) override;
bool IsLoaded() const override;
private:
uchar x21c_pad[0x2C];
enum ESmokeState { kSS_Inactive, kSS_Active, kSS_Done };
TCachedToken<CGenDescription> x21c_shotSmoke;
TCachedToken<CGenDescription> x228_power2nd1;
rstl::single_ptr<CElementGen> x234_shotSmokeGen;
rstl::single_ptr<CElementGen> x238_power2ndGen;
float x23c_smokeTimer;
ESmokeState x240_smokeState;
bool x244_24 : 1;
bool x244_25_loaded : 1;
void ReInitVariables();
};
CHECK_SIZEOF(CPowerBeam, 0x248)

View File

@@ -5,6 +5,7 @@
class CToken;
class CSfxHandle;
class CAnimData;
namespace NWeaponTypes {