220 lines
6.6 KiB
C++
220 lines
6.6 KiB
C++
#pragma once
|
|
|
|
#include "KSeqForm.h"
|
|
#include "krenderobject.h"
|
|
|
|
#include "GameDefine.h"
|
|
|
|
// 2010.05.18 - prodongi
|
|
#include <set>
|
|
|
|
using namespace GAME_DEFINE;
|
|
|
|
// "ITEM_RENDER"
|
|
|
|
namespace
|
|
{
|
|
const int BONE_EFFECT_MAX = 15;
|
|
};
|
|
|
|
|
|
class KSeqAvatar : public KSeqForm
|
|
{
|
|
public:
|
|
KSeqAvatar( int nAniPartIndex = 0 );
|
|
virtual ~KSeqAvatar();
|
|
|
|
virtual void Clear();
|
|
|
|
virtual void ClipTest( const K3DVector* pFrustrum);
|
|
virtual bool GetIsClip();
|
|
|
|
bool AddBoneEffect( int nIndex, const char *bonename, const char *filename );
|
|
void AddBoneEffect( int nIndex, KSeqObject *obj );
|
|
|
|
bool AddEffectPos( int nAttachIndex, const char *filename );
|
|
void AddEffectPos( int nIndex, KSeqObject *obj );
|
|
|
|
/// 아바타 본 애니메이션들~
|
|
bool AddAnimation( const char *filename, BOOL bOld = FALSE, bool bNowLoading = false );
|
|
void DelAnimation( const char *pszAniKey );
|
|
|
|
/// 아바타 살들~
|
|
void AddMesh( int nIndex, KSeqObject *obj );
|
|
bool AddMesh( int nIndex, const char *filename );
|
|
KSeqObject *GetMesh( int nIndex );
|
|
void ClearMesh();
|
|
|
|
int IsExistMesh( int nIndex );
|
|
|
|
|
|
KSeqObject* GetDecoMesh( int nIndex );
|
|
int IsExistDecoMesh( int nIndex );
|
|
// 2010.06.10 - prodongi
|
|
bool isRenderDecoMesh(int index);
|
|
// 2010.06.14 - prodongi
|
|
bool isRenderMesh(int index);
|
|
bool isDecoMeshCheck() const { return (m_bDecoMeshCheck == TRUE) ? true : false; } /// 2011.01.19 정리 - prodongi
|
|
bool isMeshCheck() const { return (m_bMeshCheck == TRUE) ? true : false; }
|
|
|
|
/// 치장용 살들
|
|
void AddDecoMesh( int nIndex, KSeqObject *obj );
|
|
bool AddDecoMesh( int nIndex, const char *filename );
|
|
|
|
/// 아바타 무기 링크들~
|
|
void AddAttachItem( int nIndex, KSeqObject *obj );
|
|
void AddAttachItem( int nIndex, const char *filename );
|
|
|
|
void AddMorphMesh( class KMsgSET_MORPHMESH* pMsg );
|
|
void SetFixTexture( class KMsgSET_FIXTEXTURE* pMsg );
|
|
|
|
/// 특수 효과 끄기
|
|
void SetItemRenderFlag( BOOL bRenderFlag );
|
|
void SetItemRenderFlag( int nIndex, BOOL bRenderFlag );
|
|
|
|
bool PlayAnimation( DWORD dwCurTime, const char *name, int nAniType = SEQTYPE_NORMAL, float fPlayRate = 4.8f );
|
|
/// sfreer 임시코드임. 인벤토리 창에 나오는 아바타에서 방패 장착시 표시 안되는 버그을 위해 추가한 함수. 2009.03.09
|
|
bool PlayAnimation_temp( DWORD dwCurTime, const char *name, int nAniType = SEQTYPE_NORMAL, float fPlayRate = 4.8f );
|
|
virtual bool PlayOverride( DWORD dwCurTime, const char *name, float fPlayRate = 4.8f );
|
|
|
|
virtual void SetParentTransform( const K3DMatrix *pMatParent, const K3DMatrix *pMatAttach = NULL, BOOL bRotationLock = FALSE );
|
|
|
|
// virtual void SetAttachBone( const K3DMatrix *pMatParent, const K3DMatrix *pMatAttach );
|
|
|
|
void SetAttach(); ///< 현재 Animation에 Attach
|
|
void SetDeform(); ///< 현재 채널과 Deform
|
|
void SetAttachEffectPos(); ///< 현재 Animation에 Effect Pos Attach
|
|
void SetAttachEffectBone();///< 현재 Animation에 Bone Effect Attach
|
|
virtual void Weld(int nIndex); ///< 몬스터 같은 경우는 없다.
|
|
|
|
void GetFrameInfo( const char * strKey, int &nBoneCount, DWORD &dwMinTime, DWORD &dwMaxTime );
|
|
|
|
enum
|
|
{
|
|
SEQPOS_BEGIN,
|
|
SEQPOS_END,
|
|
};
|
|
void ChangeAnimationType(int nAniType);
|
|
void ClearAnimation();
|
|
|
|
const K3DVector &GetPosition()
|
|
{
|
|
return *((K3DVector*)&m_matTransform.m30);
|
|
}
|
|
|
|
void SetViewVector( const K3DVector &view );
|
|
|
|
void SetTransform( const K3DMatrix &mat )
|
|
{
|
|
m_matTransform = mat;
|
|
}
|
|
|
|
K3DMatrix &GetTransform()
|
|
{
|
|
return m_matTransform;
|
|
}
|
|
|
|
KSeqObject *GetCurrentAnimation()
|
|
{
|
|
return m_pCurSeq;
|
|
}
|
|
const char *GetCurrentAnimationName()
|
|
{
|
|
return m_strCurSeq.c_str();
|
|
}
|
|
bool IsPlaying()
|
|
{
|
|
return m_bIsPlaying;
|
|
}
|
|
|
|
void SetTimeRate( float fTimeRate )
|
|
{
|
|
m_fRate = fTimeRate;
|
|
}
|
|
|
|
enum
|
|
{
|
|
SEQINFO_NOP,
|
|
SEQINFO_PLAYING,
|
|
SEQINFO_STOPPED,
|
|
SEQINFO_LOOPWRAP,
|
|
};
|
|
|
|
virtual void *Perform( KID id, KArg& msg );
|
|
// 2010.05.18 - prodongi
|
|
void* PerformWithIgnoreMesh(KID id, KArg& msg, std::set<int>* ignoreMeshList);
|
|
void *MeshPerform( int nMeshIndex, KID id, KArg& msg );
|
|
void *DecoMeshPerform( int nMeshIndex, KID id, KArg& msg );
|
|
|
|
virtual KSeqObject* Clone();
|
|
virtual int Process( DWORD dwTime );
|
|
virtual void Render( KViewportObject *viewport, DWORD flag = RENDEREFX_NONE, const K3DMatrix * pAttachMat = NULL );
|
|
|
|
void SetViewVectorX( float x, float y, float z ); ///< 좌우
|
|
void SetViewVectorZ( float x, float y, float z ); ///< 상하
|
|
void SetBodyVector( float x, float y ) ; ///< 몸통
|
|
|
|
void SetViewVectorX( K3DVector &Vec, int nDelay );
|
|
|
|
float GetHeadZ();
|
|
void GetHandPos( K3DVector &posLeft, K3DVector &posRight );
|
|
|
|
DWORD GetLength() { return m_nLength; }
|
|
void SetMeshRenderFlag( int nIndex, BOOL bRenderFlag );
|
|
void SetDecoMeshRenderFlag( int nIndex, BOOL bRenderFlag );
|
|
virtual void SetAniTime( DWORD dwTime );
|
|
BOOL GetMeshCheck() { return m_bMeshCheck; };
|
|
|
|
static void SetToggleEffectPos() { m_bEffectPosRenderFlag = !m_bEffectPosRenderFlag; }
|
|
static void SetToggleMeshRender() { m_sMeshRenderFlag = !m_sMeshRenderFlag; }
|
|
|
|
|
|
/// 동작 interpolation용 : 직접 bone sequencer를 가져온다
|
|
class KBoneSeqObject* getBoneSequencer();
|
|
|
|
bool CheckPendingSeq();
|
|
|
|
const char* GetMeshSeqObjName( int nMeshIndex );
|
|
protected:
|
|
void SetRenderFlag( const char * pStr, BOOL bRenderFlag );
|
|
|
|
protected:
|
|
K3DVector m_ViewVectorX; ///< 좌우
|
|
K3DVector m_ViewVectorZ; ///< 상하
|
|
K3DVector m_BodyVector ; ///< 몸통
|
|
K3DVector m_CurViewVector; ///< 현재 뷰~
|
|
K3DVector m_nPrevViewVector; ///< 전 뷰~
|
|
K3DVector m_vViewTarget; ///< 보는 위치~
|
|
|
|
KSeqObject* m_pMeshPart[MPART_MAX];
|
|
BOOL m_bMeshRender[MPART_MAX];
|
|
BOOL m_bMeshCheck; ///< Mesh도 추가된 것들만 처리.
|
|
|
|
KSeqObject* m_pDecoMeshPart[MDECOPART_MAX];
|
|
BOOL m_bDecoMeshRender[MDECOPART_MAX];
|
|
BOOL m_bDecoMeshCheck;
|
|
|
|
KSeqForm* m_pItemPart[ATTACH_MAX];
|
|
BOOL m_bItemRender[ATTACH_MAX];
|
|
BOOL m_bItemCheck; ///< Item은 아바타만 처리.
|
|
|
|
BOOL m_bRenderRotCube;
|
|
|
|
KSeqObject* m_pEffectPos[EFFECT_POS_MAX]; ///< 타격 이펙트 위치
|
|
BOOL m_bEffectPos[EFFECT_POS_MAX];
|
|
BOOL m_bEffectPosCheck;
|
|
|
|
KSeqForm* m_pBoneEffect[BONE_EFFECT_MAX]; ///< 타격 이펙트 위치
|
|
BOOL m_bBoneEffect[BONE_EFFECT_MAX];
|
|
short m_nBoneEffectIndex[BONE_EFFECT_MAX];
|
|
BOOL m_bBoneEffectCheck;
|
|
|
|
static BOOL m_bEffectPosRenderFlag; //
|
|
static BOOL m_sMeshRenderFlag; //
|
|
|
|
K3DMatrix m_matShadow; ///< 쉐도우 용 Matrix
|
|
|
|
DWORD m_decoShoulderPrevTime;
|
|
};
|
|
|