Add CAmbientAI, just needs Think implmented

This commit is contained in:
2022-10-20 08:43:17 -07:00
parent 724dc8226e
commit b8d23f2ff6
8 changed files with 228 additions and 21 deletions

View File

@@ -100,7 +100,7 @@ public:
// CalcPlaybackAlignmentParms__9CAnimDataFRC18CAnimPlaybackParmsRCQ24rstl25ncrc_ptr<13CAnimTreeNode>
// SetRandomPlaybackRate__9CAnimDataFR9CRandom16
void SetPlaybackRate(float set);
// MultiplyPlaybackRate__9CAnimDataFf
void MultiplyPlaybackRate(float scale);
// GetTimeOfUserEvent__9CAnimDataCF14EUserEventTypeRC13CCharAnimTime
// GetAdvancementDeltas__9CAnimDataCFRC13CCharAnimTimeRC13CCharAnimTime
// Touch__9CAnimDataCFRC13CSkinnedModeli

View File

@@ -95,6 +95,8 @@ public:
const CVector3f& GetScale() const { return x0_scale; }
void SetScale(const CVector3f& scale) { x0_scale = scale; }
bool GetIsLoop() const;
void EnableLooping(bool enable);
static CModelData CModelDataNull();
static EWhichModel GetRenderingModel(const CStateManager& mgr);

View File

@@ -23,8 +23,10 @@ struct SMoverData {
CAxisAngle x24_;
float x30_mass;
SMoverData(float mass, const CVector3f& velocity, const CAxisAngle& angularVelocity,
const CVector3f& momentum, const CAxisAngle& unk)
SMoverData(float mass, const CVector3f& velocity = CVector3f::Zero(),
const CAxisAngle& angularVelocity = CAxisAngle::Identity(),
const CVector3f& momentum = CVector3f::Zero(),
const CAxisAngle& unk = CAxisAngle::Identity())
: x0_velocity(velocity)
, xc_angularVelocity(angularVelocity)
, x18_momentum(momentum)

View File

@@ -0,0 +1,51 @@
#ifndef _CAMBIENTAI
#define _CAMBIENTAI
#include "MetroidPrime/CPhysicsActor.hpp"
#include "MetroidPrime/CHealthInfo.hpp"
#include "MetroidPrime/CDamageVulnerability.hpp"
class CAmbientAI : public CPhysicsActor {
public:
CAmbientAI(TUniqueId uid, const rstl::string& name, const CEntityInfo& info,
const CTransform4f& xf, const CModelData& mData, const CAABox& aabox,
const CMaterialList& materialList, float mass, const CHealthInfo& hInfo,
const CDamageVulnerability& dVuln, const CActorParameters& aParms, float alertRange,
float impactRange, int alertAnim, int impactAnim, bool Active);
/* CEntity */
void Accept(IVisitor& visitor);
void Think(float dt, CStateManager& mgr);
void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr);
/* CActor */
CHealthInfo* HealthInfo(CStateManager& mgr);
const CDamageVulnerability* GetDamageVulnerability() const;
/* CPhysicsActor */
void Touch(CActor& actor, CStateManager& mgr);
rstl::optional_object<CAABox> GetTouchBounds() const;
void RandomizePlaybackRate(CStateManager& mgr);
private:
enum EAnimationState {
kAS_Ready,
kAS_Alert,
kAS_Impact,
};
CHealthInfo x258_initialHealthInfo;
CHealthInfo x260_healthInfo;
CDamageVulnerability x268_dVuln;
EAnimationState x2d0_animState;
float x2d4_alertRange;
float x2d8_impactRange;
s32 x2dc_defaultAnim;
s32 x2e0_alertAnim;
s32 x2e4_impactAnim;
bool x2e8_24_dead : 1;
bool x2e8_25_animating : 1;
};
#endif // _CAMBIENTAI