mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-15 02:46:10 +00:00
CElitePirate: Nearly complete implementation
This commit is contained in:
@@ -22,8 +22,28 @@
|
||||
|
||||
namespace urde {
|
||||
namespace MP1 {
|
||||
struct SGrenadeLauncherData {
|
||||
CHealthInfo x0_healthInfo;
|
||||
struct SGrenadeTrajectoryInfo {
|
||||
float x0_;
|
||||
float x4_;
|
||||
float x8_angleMin;
|
||||
float xc_angleMax;
|
||||
|
||||
SGrenadeTrajectoryInfo(CInputStream& in)
|
||||
: x0_(in.readFloatBig())
|
||||
, x4_(in.readFloatBig())
|
||||
, x8_angleMin(zeus::degToRad(in.readFloatBig()))
|
||||
, xc_angleMax(zeus::degToRad(in.readFloatBig())) {}
|
||||
};
|
||||
|
||||
struct SGrenadeUnknownStruct {
|
||||
float x0_mass;
|
||||
float x4_;
|
||||
|
||||
SGrenadeUnknownStruct(CInputStream& in) : x0_mass(in.readFloatBig()), x4_(in.readFloatBig()) {}
|
||||
};
|
||||
|
||||
struct SBouncyGrenadeData {
|
||||
SGrenadeUnknownStruct x0_;
|
||||
CDamageInfo x8_damageInfo;
|
||||
CAssetId x24_;
|
||||
CAssetId x28_;
|
||||
@@ -33,30 +53,22 @@ struct SGrenadeLauncherData {
|
||||
u16 x38_;
|
||||
u16 x3a_;
|
||||
|
||||
SGrenadeLauncherData(const CHealthInfo& healthInfo, const CDamageInfo& damageInfo, CAssetId w1, CAssetId w2,
|
||||
CAssetId w3, CAssetId w4, CAssetId w5, u16 s1, u16 s2)
|
||||
: x0_healthInfo(healthInfo)
|
||||
, x8_damageInfo(damageInfo)
|
||||
, x24_(w1)
|
||||
, x28_(w2)
|
||||
, x2c_(w3)
|
||||
, x30_(w4)
|
||||
, x34_(w5)
|
||||
, x38_(s1)
|
||||
, x3a_(s2){};
|
||||
SBouncyGrenadeData(const SGrenadeUnknownStruct& unkStruct, const CDamageInfo& damageInfo, CAssetId w1, CAssetId w2,
|
||||
CAssetId w3, CAssetId w4, CAssetId w5, u16 s1, u16 s2)
|
||||
: x0_(unkStruct), x8_damageInfo(damageInfo), x24_(w1), x28_(w2), x2c_(w3), x30_(w4), x34_(w5), x38_(s1), x3a_(s2){};
|
||||
};
|
||||
|
||||
class CGrenadeLauncherData {
|
||||
public:
|
||||
SGrenadeLauncherData x0_;
|
||||
SBouncyGrenadeData x0_;
|
||||
CAssetId x3c_;
|
||||
CAssetId x40_;
|
||||
u16 x44_sfx;
|
||||
zeus::CQuaternion x48_quat;
|
||||
SGrenadeTrajectoryInfo x48_trajectoryInfo;
|
||||
|
||||
CGrenadeLauncherData(const SGrenadeLauncherData& data, CAssetId w1, CAssetId w2, u16 sfx,
|
||||
const zeus::CQuaternion& quat)
|
||||
: x0_(data), x3c_(w1), x40_(w2), x44_sfx(sfx), x48_quat(quat){};
|
||||
CGrenadeLauncherData(const SBouncyGrenadeData& data, CAssetId w1, CAssetId w2, u16 sfx,
|
||||
const SGrenadeTrajectoryInfo& trajectoryInfo)
|
||||
: x0_(data), x3c_(w1), x40_(w2), x44_sfx(sfx), x48_trajectoryInfo(trajectoryInfo){};
|
||||
};
|
||||
|
||||
class CGrenadeLauncher : public CPhysicsActor {
|
||||
@@ -92,16 +104,20 @@ public:
|
||||
const CGrenadeLauncherData& data, float f1);
|
||||
|
||||
void Accept(IVisitor& visitor) override { visitor.Visit(this); }
|
||||
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
|
||||
void AddToRenderer(const zeus::CFrustum& frustum, const CStateManager& mgr) const override;
|
||||
// void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) override;
|
||||
// void AddToRenderer(const zeus::CFrustum& frustum, const CStateManager& mgr) const override;
|
||||
const CCollisionPrimitive* GetCollisionPrimitive() const override { return &x328_cSphere; }
|
||||
const CDamageVulnerability* GetDamageVulnerability() const override { return &x264_vulnerability; }
|
||||
std::optional<zeus::CAABox> GetTouchBounds() const override;
|
||||
CHealthInfo* HealthInfo(CStateManager& mgr) override;
|
||||
void PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) override;
|
||||
void Render(const CStateManager& mgr) const override;
|
||||
void Think(float dt, CStateManager& mgr) override;
|
||||
void Touch(CActor& act, CStateManager& mgr) override;
|
||||
// std::optional<zeus::CAABox> GetTouchBounds() const override;
|
||||
// CHealthInfo* HealthInfo(CStateManager& mgr) override;
|
||||
// void PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) override;
|
||||
// void Render(const CStateManager& mgr) const override;
|
||||
// void Think(float dt, CStateManager& mgr) override;
|
||||
// void Touch(CActor& act, CStateManager& mgr) override;
|
||||
|
||||
static zeus::CVector3f GrenadeTarget(const CStateManager& mgr);
|
||||
static void CalculateGrenadeTrajectory(const zeus::CVector3f& target, const zeus::CVector3f& origin,
|
||||
const SGrenadeTrajectoryInfo& info, float& angleOut, float& velocityOut);
|
||||
|
||||
protected:
|
||||
void UpdateCollision();
|
||||
|
||||
Reference in New Issue
Block a user