#ifndef __KRENDEROBJECT__ #define __KRENDEROBJECT__ #include "KObject.h" #include "KPrimitiveMesh.h" #include "KPrimitiveFXParticle.h" #include "K3DBound.h" class KViewportObject; class K3DRenderDeviceDX; //class K3DFrustum; // "SETFORCERENDER_FLAG" /// TODO : Utill 로 통합 void AxisCalculation( const K3DMatrix & mat, K3DVector & v1, K3DVector & v2, K3DVector & v3, float fLen = 0.5f ); class KMsgGET_PERFORMANCEINFO : public KArg { public: KMsgGET_PERFORMANCEINFO():nSeqCount(0), nMeshCount(0) { } int nSeqCount; int nMeshCount; std::vector< std::string > vVertexList; std::vector< std::string > vTexList; }; class KRenderObject : public KObject { public: KRenderObject(void); virtual ~KRenderObject(void); void SetRenderState( DWORD dwRS ) { m_dwRS = dwRS; } DWORD GetRenderState() { return m_dwRS; } bool IsTransparent() { return m_bIsTransparent; } float GetZOrder() { return m_vPosition.z; } void SetPosition( const K3DVector &pos ) { m_vPosition = pos; } void SetPosition( float x, float y, float z = 0.f ) { m_vPosition.x = x; m_vPosition.y = y; m_vPosition.z = z; } const K3DVector &GetPosition() { return m_vPosition; } virtual void SetVisibility( float fVisibility ) { m_fMasterVisibility = fVisibility; } float GetVisibility() { return m_fMasterVisibility; } virtual void SetSkinDiffuse( KColor & diffuse ) { m_SkinDiffuse = diffuse; } virtual void ClipTest( const K3DVector* pFrustrum) { m_bIsClip = true; } virtual bool GetIsClip() { return m_bIsClip; } virtual const char* GetName() { return NULL; } enum { RENDEREFX_NONE = 0, RENDEREFX_NOLIGHT = 1, RENDEREFX_NOFOG = 2, RENDEREFX_SKY = 3, RENDEREFX_LENSFLARE = 4, RENDEREFX_CLOUD = 5, RENDEREFX_WEATHER = 6, // [sonador] RENDEREFX_LIGHTNING = 7, // [sonador][2007.04.12] RENDEREFX_TERRAIN = 8, RENDEREFX_PROP = 9, RENDEREFX_BUILDING = 10, RENDEREFX_PROP_NOMIP = 11, RENDEREFX_SPEEDTREE_BRANCH = 12, RENDEREFX_SPEEDTREE_FROND = 13, RENDEREFX_SPEEDTREE_LEAF = 14, RENDEREFX_WATER = 15, RENDEREFX_SHADOW = 16, RENDEREFX_LIGHTMAP = 17, RENDEREFX_UVWRAP = 18, RENDEREFX_SHADOW_TERRAIN = 19, RENDEREFX_PROP_HAS_STOOL = 20, RENDEREFX_BUILDING_HAS_STOOL = 21, RENDEREFX_PROP_NOCA_NORE = 22, RENDEREFX_PROP_NOCA_RE = 23, RENDEREFX_PROP_DYCA_NORC = 24, RENDEREFX_PROP_DYCA_RE = 25, RENDEREFX_PROP_STCA_NORC = 26, RENDEREFX_PROP_STCA_RE = 27, RENDEREFX_BUILDING_NOCA_NORE = 28, RENDEREFX_BUILDING_NOCA_RE = 29, RENDEREFX_BUILDING_DYCA_NORC = 30, RENDEREFX_BUILDING_DYCA_RE = 31, RENDEREFX_BUILDING_STCA_NORC = 32, RENDEREFX_BUILDING_STCA_RE = 33, RENDEREFX_SPEEDTREE_BILLBOARD = 34, ///< 위로 올리는 게 보기 좋겠지.. RENDEREFX_LOADINGSCREEN = 35, //RENDEREFX_PATHEFFECT = 34, RENDEREFX_QUAD = 36, RENDEREFX_LINE = 37, RENDEREFX_POLYLINE = 38, RENDEREFX_SPEEDGRASS = 39, RENDEREFX_AFTER_SPRITE = 40, ///< Sprite 다음 RENDEREFX_AURORA = 41, RENDEREFX_SELECT = 42, RENDEREFX_MAX }; virtual void Render( KViewportObject *viewport, DWORD flag = RENDEREFX_NONE, const K3DMatrix * pAttachMat = NULL ) = 0; protected: bool m_bIsTransparent; bool m_bIsClip; K3DVector m_vPosition; DWORD m_dwRS; float m_fMasterVisibility; KColor m_SkinDiffuse; ///< 피부 디퓨즈 }; class KSeqObject : public KRenderObject { public: KSeqObject(); virtual ~KSeqObject(); virtual void Reset() { } virtual void SetTime( DWORD time ) { m_dwTime = time; } DWORD GetCurTime() { return m_dwTime; } const KInterval &GetInterval() { return m_interval; } // 임시 코드 by blackfish -> KInterval& GetIntervalRef() { return m_interval; } // <- 임시 코드 by blackfish virtual void SetColor( DWORD c1, DWORD c2 = 0, DWORD c3 = 0, DWORD c4 = 0, short nMode = 0 ) {} virtual void SetDeform( KSeqObject * pMeshSeq ) { } virtual void SetAttach( int nAttachIndex, KSeqObject * pMeshSeq ) { } virtual void SetAttachEffectPos( int nEffectPosIndex, KSeqObject * pMeshSeq ) { } virtual void SetAttachEffectBone( int nBoneIndex, KSeqObject * pMeshSeq ) { } virtual void SetParentTransform( const K3DMatrix *pMatParent, const K3DMatrix *pMatAttach = NULL, BOOL bRotationLock = FALSE ) { // _oprint( "SetParentTransform 여기에\n" ); m_pMatParent = pMatParent; m_pMatAttach = pMatAttach; m_bRotationLock = bRotationLock; } const K3DMatrix *GetParentTransform() { return m_pMatParent; } const K3DMatrix *GetAttachTransform() { return m_pMatAttach; } virtual void SetAlterMaterial( K3DMaterial *mat ) { } virtual KSeqObject* Clone() = 0; virtual void realizeTime() = 0; protected: protected: DWORD m_dwTime; DWORD m_dwRealizedTime; KInterval m_interval; const K3DMatrix* m_pMatParent; ///< 부모의 위치 const K3DMatrix* m_pMatAttach; ///< 부모의 특정 뼈위치 BOOL m_bRenderFlag; BOOL m_bRotationLock; }; struct KSeqPropAttrib { std::string strName; std::string strValue; }; struct KSeqProp { std::string strName; std::vector< KSeqPropAttrib > vAttribs; }; class KSequencer : public KSeqObject { public: KSequencer( bool bCreateByManager = false ); virtual ~KSequencer(); virtual void Reset(); void AddSeqObject( KSeqObject *obj ); int GetSeqObjectCount(); KSeqObject *GetSeqObject( int index ); void SetName( const char *resname ); const char* GetName(); virtual void SetParentTransform( const K3DMatrix *pMatParent, const K3DMatrix *pMatAttach = NULL, BOOL bRotationLock = FALSE ); virtual void SetAlterMaterial( K3DMaterial *mat ); virtual void SetColor( DWORD c1, DWORD c2 = 0, DWORD c3 = 0, DWORD c4 = 0, short nMode = 0 ); virtual void *Perform( KID id, KArg& msg ); virtual void Process( DWORD time ); virtual void ClipTest( const K3DVector* pFrustrum); virtual bool GetIsClip(); virtual void Render( KViewportObject *viewport, DWORD flag = RENDEREFX_NONE, const K3DMatrix * pAttachMat = NULL ); virtual void SetDeform( KSeqObject * pMeshSeq ); virtual void SetAttach( int nAttachIndex, KSeqObject * pMeshSeq ); virtual void SetAttachEffectPos( int nEffectPosIndex, KSeqObject * pMeshSeq ); virtual void SetAttachEffectBone( int nBoneIndex, KSeqObject * pMeshSeq ); virtual KSequencer* CloneSequence(); virtual KSeqObject* Clone(); virtual void realizeTime(); void LoadProp( const char* szPropStr ); const char* GetAttribValue( const char* szPropName, const char* szAttribName); protected: bool CreateNewProp( const char*& pPropStr ); bool LoadPropAttrib( KSeqProp& rProp, const char*& pPropStr ); bool m_bCreateByMgr; std::string m_strResName; std::vector< KSeqProp > m_vProps; std::vector m_vecSeqObjects; }; #endif