collision.h

来自「国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国」· C头文件 代码 · 共 115 行

H
115
字号
//-----------------------------------------------------------------------------------------------------------
//	File : Collision.h
//-----------------------------------------------------------------------------------------------------------

#ifndef _COLLISION_
#define _COLLISION_

typedef struct SPHEREINFO
{
	D3DXVECTOR3 vCenter;
	float R;
	SPHEREINFO::SPHEREINFO():vCenter(0,0,0),R(0){}
}SPHEREINFO;

typedef struct PICKING
{
	D3DXVECTOR3 vRayOrig;
	D3DXVECTOR3 vRayDir;
	float Dist;
	D3DXVECTOR3 vTri[3];
	D3DXVECTOR3 vIntersectPt;

	CMCObjMesh * pObjectMesh;
	D3DXMATRIX matWorld;
	
	PICKING::PICKING():Dist(0),vIntersectPt(0,0,0)
	{ pObjectMesh = NULL; }
}PICKING;

typedef struct INTERSECT
{
	D3DXVECTOR3 vTri[3];
	D3DXVECTOR3 vInterPt;
	D3DXVECTOR3 vN;
	float		Dist;
}INTERSECT;

class CCollision
{
public:
	CCollision();
	CCollision(CMCParts *pPart)			{this->CreateOBB(pPart);}
	//CCollision(CBaseBuildObject *pOb)	{this->CreateOBB(pOb);}		寝哎妨辑 瘤框
	~CCollision();
	
	void Init();

	// vMins, vMaxs : 惑措谅钎
	// pMat : 弥辆 岿靛谅钎肺 函券且 荐 乐绰 Matrix狼 器牢磐
	CCollision* CreateOBB(D3DXVECTOR3 vMins, D3DXVECTOR3 vMaxs, D3DXMATRIX *pMat);
	CCollision* CreateOBB(CMCParts *pPart);
	CCollision* CreateOBB(CBaseBuildObject *pOb);

	CCollision *CreateTri(CBaseBuildObject *pObj);
	CCollision *CreateTri(CPlayer *pPlayer);
	CCollision *CreateTri(CTerrain *pTerrain);
	
	void	Refresh();
	static void	SetBox(D3DXVECTOR3 *pvStartPt, D3DXVECTOR3& vMins, D3DXVECTOR3& vMaxs);

	BOOL	SphereToSphere(CCollision *pObject);
	BOOL	OBBToOBB(CCollision *pObject);
	BOOL	OBBToOBBEx(CCollision *pObject,D3DXVECTOR3 vDir, float Speed);	// 加档档 捧康矫挪促.
	BOOL	OBBToSphere(CCollision *pObject);
	BOOL	OBBToBox(MD3BOUNDBOX *pBox);
	BOOL	OBBToPlane(D3DXPLANE *pPlane, D3DXVECTOR3 vN);
	BOOL	OBBToLine(CCollision *pObject);

	const D3DXVECTOR3*	GetSize()	{ return &m_vSize; }

	D3DXVECTOR3 GetCollisionOffset(D3DXVECTOR3 &vNormal, float radius, float distance);

	///////////////////////////////////////////////////
	DWORD		TriangleToSphere(D3DXVECTOR3 vCenter, float radius, INTERSECT **ppOut);
	BOOL		OBBToTriangle();
	BOOL		Unprojection(POINT *ptCursor, D3DXVECTOR3 *pvRayOrig=NULL, D3DXVECTOR3 *pvRayDir=NULL);
	BOOL		TriangleIntersect(PICKING *ptagInfo, DWORD dwPickCnt);

	BOOL		TriangleIntersect(LPD3DXMESH pMesh,D3DXMATRIXA16 *pMatWorld, PICKING *ptagInfo);

	BOOL		Targetting( CCollision *pPick );

private:	// 窃荐
	void	CreateOBBAxis(CCollision *pObject, D3DXVECTOR3 *vAxis);
	
public:
	// 傍烹
	MODEL_TYPE m_Type;					// 蜡历牢瘤, 坷宏璃飘牢瘤 鸥涝
	D3DXMATRIX*	m_pMatWorld;

	// OBB Box
	D3DXVECTOR3 m_vAxis[3];				// x,y,z 绵
	D3DXVECTOR3 m_vSize;
	D3DXVECTOR3 m_vVertex[8];

	D3DXVECTOR3 m_vCenter;
	float		m_fR;

	// Mesh
	DWORD		m_dwMeshCnt;
	// Object Mesh
	CMCObjMesh *m_pObjectMesh;
	// Part
	//CMCMesh *m_pMCMesh;

	// Targetting~
	PICKING m_tagUnproRay;	// 攫橇肺璃记 棺 弥辆 乔欧 单捞磐

	CPlayer *m_pPlayer;
	CBaseBuildObject *m_pObject;

	CMCParts *m_pPart;
	CMCMesh *m_pPickMesh;
};
#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?