#pragma once #include "EtObject.h" #include "EtAni.h" #include "EtBone.h" #include "EtSpring.h" class CEtAniObject; typedef CSmartPtr< CEtAniObject > EtAniObjectHandle; struct SAniInfo { SBoneAniInfo BoneAniInfo; int nBoneIndex; }; struct SBoneRotationInfo { int nBoneIndex; EtVector3 BoneRotation; }; struct SBoneScaleInfo { int nBoneIndex; float fScale; }; class CEtAniObject : public CEtObject { public: CEtAniObject(); virtual ~CEtAniObject(); protected: int m_nCalcPositionFlag; EtAniHandle m_hAni; // ¾Æ·¡ÀÇ ¾Ö´Ï ½Ã½ºÅÛ ¹«½ÃÇϰí Extra ¾Ö´Ï ½Ã½ºÅÛÀ¸·Î ·»´õ¸µ ÇÒ¶§ ¾µ º¯¼ö // Extra º¯¼ö ¼ÂÆÃ µÅ ÀÖÀ¸¸é m_nExtraAniIndex °¡ ¿ì¼±ÇÑ´Ù. int m_nExtraAniIndex; float m_fExtraAniFrame; std::vector< SAniInfo > m_vecAniInfo; std::vector< SAniInfo > m_vecBlendAniInfo; std::vector< std::vector< int > > m_vecDisableBone; std::vector< SBoneRotationInfo > m_vecBoneRotation; std::vector< SBoneScaleInfo > m_vecBoneScale; CEtSpring m_Spring; bool m_bSkipPhysics; bool m_bForceSkipSimulateAni; static CSyncLock s_CalcAniLock; public: int Initialize( EtSkinHandle hSkin, EtAniHandle hAni ); EtAniHandle &GetAniHandle() { return m_hAni; } int GetAniCount() { return m_hAni->GetAniCount(); } int GetAniLength( int nAni ) { return m_hAni->GetAniLength( nAni ); } float GetLastFrame( int nAni ) { return m_hAni->GetLastFrame( nAni ); } const char *GetAniName( int nAni ) { return m_hAni->GetAniName( nAni ); } void CalcAniDistance( int nAni, float fCurFrame, float fPrevFrame, EtVector3 &DistVec ) { m_hAni->CalcAniDistance( nAni, fCurFrame, fPrevFrame, DistVec ); } void SetCalcPositionFlag( int nFlag ) { m_nCalcPositionFlag = nFlag; } int GetCalcPositionFlag() { return m_nCalcPositionFlag; } virtual EtMatrix *GetBoneMat( int nBoneIndex ); virtual EtMatrix *GetBoneTransMat( int nBoneIndex ); virtual EtMatrix *GetDummyTransMat( int nDummyIndex ); virtual int GetAniFileIndex() { return m_hAni->GetMyIndex(); } void SetExtraAniFrame( int nAni, float fFrame ) { m_nExtraAniIndex = nAni; m_fExtraAniFrame = fFrame; } void SetAniFrame( int nAni, float fFrame, int nBoneIndex = 0 ); void BlendAniFrame( int nBlendAni, float fBlendFrame, float fBlendWeight, int nBlendBoneIndex = 0 ); void BlendAniFrame( int nBlendAni, float fBlendFrame, float fBlendWeight, int nBlendBoneIndex, std::vector< int > &vecDisableBone ); void BlendAniFrame( int nBlendAni, float fBlendFrame, float fBlendWeight, int nBlendBoneIndex, int nDisableBoneIndex ); void ResetAniFrame(); void SetBoneRotation( int nBoneIndex, EtVector3 &BoneRotation ); void SetBoneScale( int nBoneIndex, float fScale ); void ReBuildSkin( EtSkinHandle hSkin ); void CalcAni(); void InitRender( int nSaveMatIndex = -1 ); void CreateSimulation( const char *szFileName ); void SimulateAni(); void DisableSimulation() { m_Spring.Disable(); } void ForceSkipSimulateAni( bool bForceSkip, bool bApplyChild = true ); void SkipPhysics( bool bSkip ) {m_bSkipPhysics = bSkip;} virtual void OnLoadComplete( CBackgroundLoader *pLoader ); };