www.pudn.com > Game_11.rar > Unit.cpp


// Unit.cpp: implementation of the CUnit class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "Unit.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CUnit::CUnit(LPDIRECT3DDEVICE9 pDevice,char *strMeshFile,CTerrain*	pTerrain) 
{ 
 
		m_pMesh=new CSkinMesh(pDevice); 
		m_pMesh->LoadFromXFile(strMeshFile);  
		m_Angle=0; 
		m_vPos.x=0; 
		m_vPos.y=0; 
		m_vPos.z=0; 
		m_Speed=20;	 
		m_Angle=0; 
		m_Sclae=1.0f;  
		m_pTerrain=pTerrain ; 
		m_vDirection=D3DXVECTOR3(0,0,0); 
} 
 
CUnit::~CUnit() 
{ 
 
} 
 
	void CUnit::SetPosition(float x,float y,float z) 
	{ 
			m_vPos.x=x; 
			m_vPos.y=y; 
			m_vPos.z=z; 
			m_vToPos=m_vPos; 
	}; 
 
	LRESULT CUnit::Render(float fTime) 
	{ 
		Update(fTime); 
		m_pMesh->Render(fTime,m_vPos,m_Angle,m_Sclae);   
		return D3D_OK; 
	}; 
 
 
	BOOL CUnit::CollisionTest(CUnit* pOpponent) 
	{ 
	 
		float distance=D3DXVec3Length( 
			&(GetObjectCenter()-pOpponent->GetObjectCenter())) ; 
		return(distance< 
			m_pMesh->m_fObjectRadius 
			+pOpponent->GetObjectRadius()); 
	 
	} 
 
	void CUnit::Update(float fTime) 
	{ 
		//夹角小于90度表明方向和连线方向相同,即朝着vToPos运动 
		if(D3DXVec3Dot(&(m_vToPos-m_vPos),&m_vDirection)>0) 
			m_vPos+=m_vDirection*m_Speed*fTime;   
		  
		m_vPos.y=m_pTerrain->GetHeight(m_vPos.x,m_vPos.z);  
	}