162 lines
4.4 KiB
C++
162 lines
4.4 KiB
C++
#pragma once
|
|
|
|
#include "GrpColorInstance.h"
|
|
#include "GrpScreen.h"
|
|
#include "CullingManager.h"
|
|
#include "CollisionData.h"
|
|
#include "AttributeInstance.h"
|
|
|
|
enum
|
|
{
|
|
THING_OBJECT = 0xadf21f13,
|
|
TREE_OBJECT = 0x8ac9f7a6,
|
|
ACTOR_OBJECT = 0x29a76c24,
|
|
EFFECT_OBJECT = 0x1cfa97c6,
|
|
DUNGEON_OBJECT = 0x18326035,
|
|
};
|
|
|
|
enum
|
|
{
|
|
PORTAL_ID_MAX_NUM = 8,
|
|
};
|
|
|
|
class CGraphicObjectInstance : public CGraphicCollisionObject
|
|
{
|
|
public:
|
|
CGraphicObjectInstance();
|
|
virtual ~CGraphicObjectInstance();
|
|
virtual int GetType() const = 0;
|
|
|
|
public:
|
|
const D3DXVECTOR3 & GetPosition() const;
|
|
const D3DXVECTOR3 & GetScale() const;
|
|
float GetRotation();
|
|
float GetYaw();
|
|
float GetPitch();
|
|
float GetRoll();
|
|
|
|
void SetPosition(float x, float y, float z);
|
|
void SetPosition(const D3DXVECTOR3 & newposition);
|
|
void SetScale(float x, float y, float z);
|
|
void SetRotation(float fRotation);
|
|
void SetRotation(float fYaw, float fPitch, float fRoll);
|
|
void SetRotationQuaternion(const D3DXQUATERNION &q);
|
|
void SetRotationMatrix(const D3DXMATRIX & m);
|
|
|
|
void Clear();
|
|
void Update();
|
|
bool Render();
|
|
void BlendRender();
|
|
void RenderToShadowMap();
|
|
void RenderShadow();
|
|
void RenderPCBlocker();
|
|
void Deform();
|
|
void Transform();
|
|
|
|
void Show();
|
|
void Hide();
|
|
bool isShow();
|
|
|
|
// Camera Block
|
|
void BlockCamera(bool bBlock) {m_BlockCamera = bBlock;}
|
|
bool BlockCamera() { return m_BlockCamera; }
|
|
|
|
// Ray Test
|
|
bool isIntersect(const CRay & c_rRay, float * pu, float * pv, float * pt);
|
|
|
|
// Bounding Box
|
|
D3DXVECTOR4 & GetWTBBoxVertex(const unsigned char & c_rucNumTBBoxVertex);
|
|
D3DXVECTOR3 & GetTBBoxMin() { return m_v3TBBoxMin; }
|
|
D3DXVECTOR3 & GetTBBoxMax() { return m_v3TBBoxMax; }
|
|
D3DXVECTOR3 & GetBBoxMin() { return m_v3BBoxMin; }
|
|
D3DXVECTOR3 & GetBBoxMax() { return m_v3BBoxMax; }
|
|
|
|
// Matrix
|
|
D3DXMATRIX & GetTransform();
|
|
const D3DXMATRIX& GetWorldMatrix() { return m_worldMatrix; }
|
|
|
|
// Portal
|
|
void SetPortal(DWORD dwIndex, int iID);
|
|
int GetPortal(DWORD dwIndex);
|
|
|
|
// Initialize
|
|
void Initialize();
|
|
virtual void OnInitialize();
|
|
|
|
// Bounding Sphere
|
|
public:
|
|
void UpdateBoundingSphere();
|
|
void RegisterBoundingSphere();
|
|
virtual bool GetBoundingSphere(D3DXVECTOR3 & v3Center, float & fRadius) = 0;
|
|
|
|
virtual void OnRender() = 0;
|
|
virtual void OnBlendRender() = 0;
|
|
virtual void OnRenderToShadowMap() = 0;
|
|
virtual void OnRenderShadow() = 0;
|
|
virtual void OnRenderPCBlocker() = 0;
|
|
virtual void OnClear(){}
|
|
virtual void OnUpdate(){}
|
|
virtual void OnDeform(){}
|
|
|
|
protected:
|
|
D3DXVECTOR3 m_v3Position;
|
|
D3DXVECTOR3 m_v3Scale;
|
|
|
|
float m_fYaw;
|
|
float m_fPitch;
|
|
float m_fRoll;
|
|
|
|
D3DXMATRIX m_mRotation;
|
|
|
|
bool m_isVisible;
|
|
D3DXMATRIX m_worldMatrix;
|
|
|
|
// Camera Block
|
|
bool m_BlockCamera;
|
|
|
|
// Bounding Box
|
|
D3DXVECTOR4 m_v4TBBox[8];
|
|
D3DXVECTOR3 m_v3TBBoxMin, m_v3TBBoxMax;
|
|
D3DXVECTOR3 m_v3BBoxMin, m_v3BBoxMax;
|
|
|
|
// Portal
|
|
BYTE m_abyPortalID[PORTAL_ID_MAX_NUM];
|
|
|
|
// Culling
|
|
CCullingManager::CullingHandle m_CullingHandle;
|
|
|
|
// Static Collision Data
|
|
public:
|
|
void AddCollision(const CStaticCollisionData * pscd, const D3DXMATRIX * pMat);
|
|
void ClearCollision();
|
|
bool CollisionDynamicSphere(const CDynamicSphereInstance & s) const;
|
|
bool MovementCollisionDynamicSphere(const CDynamicSphereInstance & s) const;
|
|
D3DXVECTOR3 GetCollisionMovementAdjust(const CDynamicSphereInstance & s) const;
|
|
|
|
void UpdateCollisionData(const CStaticCollisionDataVector * pscdVector = 0);
|
|
|
|
protected:
|
|
CCollisionInstanceVector m_StaticCollisionInstanceVector;
|
|
virtual void OnUpdateCollisionData(const CStaticCollisionDataVector * pscdVector) = 0;
|
|
|
|
// using in WorldEditor
|
|
public:
|
|
DWORD GetCollisionInstanceCount();
|
|
CBaseCollisionInstance * GetCollisionInstanceData(DWORD dwIndex);
|
|
|
|
// Height Data
|
|
public:
|
|
void SetHeightInstance(CAttributeInstance * pAttributeInstance);
|
|
void ClearHeightInstance();
|
|
|
|
void UpdateHeightInstance(CAttributeInstance * pAttributeInstance = 0);
|
|
|
|
bool IsObjectHeight();
|
|
bool GetObjectHeight(float fX, float fY, float * pfHeight);
|
|
|
|
protected:
|
|
CAttributeInstance * m_pHeightAttributeInstance;
|
|
virtual void OnUpdateHeighInstance(CAttributeInstance * pAttributeInstance) = 0;
|
|
virtual bool OnGetObjectHeight(float fX, float fY, float * pfHeight) = 0;
|
|
};
|