mirror of
				https://github.com/PrimeDecomp/prime.git
				synced 2025-10-27 15:30:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			226 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef _CANIMDATA
 | |
| #define _CANIMDATA
 | |
| 
 | |
| #include "types.h"
 | |
| 
 | |
| #include "MetroidPrime/ActorCommon.hpp"
 | |
| #include "MetroidPrime/CAdditiveAnimPlayback.hpp"
 | |
| #include "MetroidPrime/CAnimPlaybackParms.hpp"
 | |
| #include "MetroidPrime/CCharAnimTime.hpp"
 | |
| #include "MetroidPrime/CCharacterInfo.hpp"
 | |
| #include "MetroidPrime/CHierarchyPoseBuilder.hpp"
 | |
| #include "MetroidPrime/CPOINode.hpp"
 | |
| #include "MetroidPrime/CParticleDatabase.hpp"
 | |
| #include "MetroidPrime/CPoseAsTransforms.hpp"
 | |
| 
 | |
| #include "Kyoto/Animation/CSkinnedModel.hpp"
 | |
| #include "Kyoto/TToken.hpp"
 | |
| 
 | |
| #include "rstl/reserved_vector.hpp"
 | |
| 
 | |
| class CAnimationManager;
 | |
| class CAnimSysContext;
 | |
| class CAnimTreeNode;
 | |
| class CCharacterFactory;
 | |
| class CCharLayoutInfo;
 | |
| class CSkinnedModel;
 | |
| class CSkinnedModelWithAvgNormals;
 | |
| class CTransitionManager;
 | |
| class CVertexMorphEffect;
 | |
| class CModelFlags;
 | |
| 
 | |
| class CAnimData {
 | |
| public:
 | |
|   ~CAnimData();
 | |
| 
 | |
|   enum EAnimDir {
 | |
|     kAD_Forward,
 | |
|     kAD_Backward,
 | |
|   };
 | |
| 
 | |
|   void PreRender();
 | |
|   void EnableLooping(bool v) {
 | |
|     x220_25_loop = v;
 | |
|     x220_24_animating = true;
 | |
|   }
 | |
| 
 | |
|   const TLockedToken< CSkinnedModel >& GetModelData() const { return xd8_modelData; }
 | |
| 
 | |
|   void SetIsAnimating(bool v) { x220_24_animating = v; }
 | |
|   void SetParticleEffectState(const rstl::string& name, bool active, CStateManager& mgr);
 | |
| 
 | |
|   int GetCharacterIndex() const { return x204_charIdx; }
 | |
|   float GetAverageVelocity(int idx) const;
 | |
| 
 | |
|   const CBoolPOINode* GetBoolPOIList(int& count) const {
 | |
|     count = x20c_passedBoolCount;
 | |
|     return mBoolPOINodes.data();
 | |
|   }
 | |
|   const CInt32POINode* GetInt32POIList(int& count) const {
 | |
|     count = x210_passedIntCount;
 | |
|     return mInt32POINodes.data();
 | |
|   }
 | |
|   const CParticlePOINode* GetParticlePOIList(int& count) const {
 | |
|     count = x214_passedParticleCount;
 | |
|     return mParticlePOINodes.data();
 | |
|   }
 | |
|   const CSoundPOINode* GetSoundPOIList(int& count) const {
 | |
|     count = x218_passedSoundCount;
 | |
|     return mSoundPOINodes.data();
 | |
|   }
 | |
|   CParticleDatabase& GetParticleDB() { return x120_particleDB; }
 | |
|   const CParticleDatabase& GetParticleDB() const { return x120_particleDB; }
 | |
|   // SetIsAnimating__9CAnimDataFb
 | |
|   // SetAnimDir__9CAnimDataFQ29CAnimData8EAnimDir
 | |
|   // GetBoundingBox__9CAnimDataCFv
 | |
|   // GetBoundingBox__9CAnimDataCFRC12CTransform4f
 | |
|   // GetLocatorSegId__9CAnimDataCFRCQ24rstl66basic_string
 | |
|   // ResetPOILists__9CAnimDataFv
 | |
|   // GetAverageVelocity__9CAnimDataCFi
 | |
|   // AdvanceParticles__9CAnimDataFRC12CTransform4ffRC9CVector3fR13CStateManager
 | |
|   // PoseSkinnedModel__9CAnimDataCFRC13CSkinnedModelRC17CPoseAsTransformsRCQ24rstl37optional_object<18CVertexMorphEffect>PCf
 | |
|   // DrawSkinnedModel__9CAnimDataCFRC13CSkinnedModelRC11CModelFlags
 | |
|   // InitializeCache__9CAnimDataFv
 | |
|   // FreeCache__9CAnimDataFv
 | |
|   // SetInfraModel__9CAnimDataFRC21TLockedToken<6CModel>RC26TLockedToken<10CSkinRules>
 | |
|   // SetXRayModel__9CAnimDataFRC21TLockedToken<6CModel>RC26TLockedToken<10CSkinRules>
 | |
|   // AdvanceAnim__9CAnimDataFR13CCharAnimTimeR9CVector3fR11CQuaternion
 | |
|   // AdvanceIgnoreParticles__9CAnimDataFfR9CRandom16b
 | |
|   // Advance__9CAnimDataFfRC9CVector3fR13CStateManagerb
 | |
|   // DoAdvance__9CAnimDataFfRbR9CRandom16b
 | |
|   void SetAnimation(const CAnimPlaybackParms& parms, bool noTrans);
 | |
|   // GetAnimationPrimitives__9CAnimDataCFRC18CAnimPlaybackParmsRQ24rstl72set<10CPrimitive,Q24rstl18less<10CPrimitive>,Q24rstl17rmemory_allocator>
 | |
|   // PrimitiveSetToTokenVector__9CAnimDataFRCQ24rstl72set<10CPrimitive,Q24rstl18less<10CPrimitive>,Q24rstl17rmemory_allocator>RQ24rstl42vector<6CToken,Q24rstl17rmemory_allocator>b
 | |
|   // BuildPose__9CAnimDataFv
 | |
|   // PreRender__9CAnimDataFv
 | |
|   // SetupRender__9CAnimDataCFRC13CSkinnedModelRCQ24rstl37optional_object<18CVertexMorphEffect>PCf
 | |
|   // Render__9CAnimDataCFRC13CSkinnedModelRC11CModelFlagsRCQ24rstl37optional_object<18CVertexMorphEffect>PCf
 | |
|   void Render(const CSkinnedModel&, const CModelFlags&, const rstl::optional_object<CVertexMorphEffect>&, const float*) const;
 | |
|   // RenderAuxiliary__9CAnimDataCFRC14CFrustumPlanes
 | |
|   // RecalcPoseBuilder__9CAnimDataCFPC13CCharAnimTime
 | |
|   float GetAnimationDuration(int animIn) const;
 | |
|   // GetAnimTimeRemaining__9CAnimDataCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>
 | |
|   // IsAnimTimeRemaining__9CAnimDataCFfRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>
 | |
|   bool IsAnimTimeRemaining(float, const rstl::string&) const;
 | |
|   // GetLocatorTransform__9CAnimDataCFRCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>PC13CCharAnimTime
 | |
|   // GetLocatorTransform__9CAnimDataCF6CSegIdPC13CCharAnimTime
 | |
|   // CalcPlaybackAlignmentParms__9CAnimDataFRC18CAnimPlaybackParmsRCQ24rstl25ncrc_ptr<13CAnimTreeNode>
 | |
|   // SetRandomPlaybackRate__9CAnimDataFR9CRandom16
 | |
|   void SetPlaybackRate(float set);
 | |
|   void MultiplyPlaybackRate(float scale);
 | |
|   CCharAnimTime GetTimeOfUserEvent(EUserEventType type, const CCharAnimTime& time) const;
 | |
|   // GetAdvancementDeltas__9CAnimDataCFRC13CCharAnimTimeRC13CCharAnimTime
 | |
|   // Touch__9CAnimDataCFRC13CSkinnedModeli
 | |
|   // InitializeEffects__9CAnimDataFR13CStateManagerRC9CVector3f
 | |
|   // SetPhase__9CAnimDataFf -> SetPhase__11IAnimReaderFf
 | |
|   void SetPhase(float ph);
 | |
|   void AddAdditiveAnimation(uint idx, float weight, bool active, bool fadeOut);
 | |
|   void DelAdditiveAnimation(uint idx);
 | |
|   bool IsAdditiveAnimation(uint idx) const;
 | |
|   const rstl::rc_ptr< CAnimTreeNode >& GetAdditiveAnimationTree(uint idx) const;
 | |
|   // GetAnimationTree__9CAnimDataCFv
 | |
|   // AnimationTree__9CAnimDataFv
 | |
|   // IsAdditiveAnimation__9CAnimDataCFUi
 | |
|   bool IsAdditiveAnimationAdded(uint idx) const;
 | |
|   // UpdateAdditiveAnims__9CAnimDataFf
 | |
|   // AdvanceAdditiveAnims__9CAnimDataFf
 | |
|   // AddAdditiveSegData__9CAnimDataCFRC10CSegIdListR16CSegStatementSet
 | |
|   // GetEventResourceIdForAnimResourceId__9CAnimDataCFi
 | |
|   // GetAnimationManager__9CAnimDataFv
 | |
|   // SetPoseValid__9CAnimDataFb
 | |
| 
 | |
|   float GetAdditiveAnimationWeight(uint idx);
 | |
| 
 | |
|   short GetDefaultAnimation() const { return x208_defaultAnim; }
 | |
|   const CCharacterInfo& GetCharacterInfo() const { return xc_charInfo; }
 | |
|   // GetCharLayoutInfo__9CAnimDataCFv
 | |
|   // GetDeltaRotation__9CAnimDataCFv
 | |
|   // GetDeltaOffset__9CAnimDataCFv
 | |
|   // IsDeltaOffsetInUse__9CAnimDataCFv
 | |
|   // GetAdvancementDeltas__19CAdvancementResultsCFv
 | |
|   // SetDeltaRotation__9CAnimDataFRC11CQuaternionb
 | |
|   // SetDeltaOffset__9CAnimDataFRC9CVector3fb
 | |
|   // SetDeltaOffsetInUse__9CAnimDataFv
 | |
|   // IsDeltaRotationInUse__9CAnimDataCFv
 | |
|   // IsDeltaOffsetPrimed__9CAnimDataCFv
 | |
|   // GetAnimDir__9CAnimDataCFv
 | |
|   // GetIsLoop__9CAnimDataCFv
 | |
|   // IsAnimating__9CAnimDataCFv
 | |
|   // SetPoseBuilderValid__9CAnimDataFb
 | |
|   // GetAnimationManager__9CAnimDataCFv
 | |
|   // GetPoseValid__9CAnimDataCFv
 | |
|   // GetPoseBuilderValid__9CAnimDataCFv
 | |
|   // GetAnimSysContext__9CAnimDataCFv
 | |
|   // CacheInt32PoiList__9CAnimDataFRC13CCharAnimTimeiRCQ24rstl25ncrc_ptr<13CAnimTreeNode>
 | |
| 
 | |
|   // GetIceModel__9CAnimDataCFv
 | |
|   // GetPASDatabase__9CAnimDataCFv
 | |
|   // EnableLooping__9CAnimDataFb
 | |
|   // GetCurrentAnimation__9CAnimDataCFv
 | |
|   // GetSkinnedModel__9CAnimDataCFv
 | |
|   // GetXRayModel__9CAnimDataCFv
 | |
|   // GetInfraModel__9CAnimDataCFv
 | |
|   // GetPose__9CAnimDataCFv
 | |
|   // PoseBuilder__9CAnimDataCFv
 | |
|   // GetPlaybackRate__9CAnimDataCFv
 | |
|   // Pose__9CAnimDataFv
 | |
|   // GetPoseBuilder__9CAnimDataCFv
 | |
| 
 | |
|   // CacheSoundPoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei
 | |
|   // CacheParticlePoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei
 | |
|   // CacheBoolPoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei
 | |
|   // CacheInt32PoiList__9CAnimDataFRCQ24rstl25ncrc_ptr<13CAnimTreeNode>RC13CCharAnimTimei
 | |
| 
 | |
|   static void InitializeCache();
 | |
|   static void FreeCache();
 | |
| 
 | |
| private:
 | |
|   TLockedToken< CCharacterFactory > x0_charFactory;
 | |
|   CCharacterInfo xc_charInfo;
 | |
|   TLockedToken< CCharLayoutInfo > xcc_layoutData;
 | |
|   TLockedToken< CSkinnedModel > xd8_modelData;
 | |
|   rstl::optional_object< TLockedToken< CSkinnedModelWithAvgNormals > > xe4_iceModelData;
 | |
|   rstl::rc_ptr< CSkinnedModel > xf4_xrayModel;
 | |
|   rstl::rc_ptr< CSkinnedModel > xf8_infraModel;
 | |
|   rstl::rc_ptr< CAnimSysContext > xfc_animCtx;
 | |
|   rstl::rc_ptr< CAnimationManager > x100_animMgr;
 | |
|   EAnimDir x104_animDir;
 | |
|   CAABox x108_aabb;
 | |
|   CParticleDatabase x120_particleDB;
 | |
|   CAssetId x1d8_selfId;
 | |
|   CVector3f x1dc_alignPos;
 | |
|   CQuaternion x1e8_alignRot;
 | |
|   rstl::rc_ptr< CAnimTreeNode > x1f8_animRoot;
 | |
|   rstl::rc_ptr< CTransitionManager > x1fc_transMgr;
 | |
|   float x200_speedScale;
 | |
|   int x204_charIdx;
 | |
|   short x208_defaultAnim;
 | |
|   short x20a_padding;
 | |
|   int x20c_passedBoolCount;
 | |
|   int x210_passedIntCount;
 | |
|   int x214_passedParticleCount;
 | |
|   int x218_passedSoundCount;
 | |
|   int x21c_particleLightIdx;
 | |
|   uchar x220_24_animating : 1;
 | |
|   uchar x220_25_loop : 1;
 | |
|   uchar x220_26_aligningPos : 1;
 | |
|   uchar x220_27_ : 1;
 | |
|   uchar x220_28_ : 1;
 | |
|   uchar x220_29_animationJustStarted : 1;
 | |
|   uchar x220_30_poseBuilt : 1;
 | |
|   uchar x220_31_poseCached : 1;
 | |
|   CPoseAsTransforms x224_pose;
 | |
|   CHierarchyPoseBuilder x2fc_poseBuilder;
 | |
|   CAnimPlaybackParms x40c_playbackParms;
 | |
|   rstl::reserved_vector< rstl::pair< int, CAdditiveAnimPlayback >, 8 > x434_additiveAnims;
 | |
| 
 | |
|   static rstl::reserved_vector< CBoolPOINode, 8 > mBoolPOINodes;
 | |
|   static rstl::reserved_vector< CInt32POINode, 16 > mInt32POINodes;
 | |
|   static rstl::reserved_vector< CParticlePOINode, 20 > mParticlePOINodes;
 | |
|   static rstl::reserved_vector< CSoundPOINode, 20 > mSoundPOINodes;
 | |
|   // in cpp -> rstl::reserved_vector< CInt32POINode, 16 > sInt32TransientCache;
 | |
| };
 | |
| CHECK_SIZEOF(CAnimData, 0x434 + 0x144)
 | |
| 
 | |
| #endif // _CANIMDATA
 |