Files
Leviathan/Client/Game/engine/Renderer/KRenderObject.h
T
2026-06-01 12:46:52 +02:00

290 lines
6.8 KiB
C++

#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<KSeqObject*> m_vecSeqObjects;
};
#endif