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);
}