www.pudn.com > notWow.rar > HeroCtrl.cpp


#include "HeroCtrl.h" 
#include "ModelMgr.h" 
#include "SceneMgr.h" 
#include "Camera.h" 
 
extern Mouse			g_Mouse; 
extern Keyboard			g_Keyboard; 
extern ModelsManager	g_MdlMgr; 
extern TexturesManager	g_TexMgr; 
extern ScenesManager	g_SceneMgr; 
extern Camera			g_Camera; 
 
int Hero::s_TimeFixed  = 1000; 
int Hero::s_ShuffleDgreeFixed = 260; 
 
void Hero::Render(D3DXMATRIX* pViewProj) 
{ 
	M2Model *pModel =  (M2Model*)g_MdlMgr.GetModel(m_ModelID); 
	pModel->Move(m_fPosX,m_fPosY,m_fPosZ,m_Dir); 
	pModel->SetTexture(m_TexturesID); 
	pModel->SetDetails(m_Geosets); 
	pModel->SetAnimation(m_Anim,m_Time); 
	pModel->Update(pViewProj); 
	pModel->Render(); 
} 
 
D3DXMATRIX Hero::GetMatrix() 
{ 
	D3DXMATRIX m; 
	return m; 
} 
 
void Hero::MoveForward(float fTime,ACTION Act) 
{ 
	float Speed = (m_bRun ? m_fRunSpeed : m_fWalkSpeed); 
	ACTION Cur = (m_bRun ? ACT_RUN : ACT_WALK); 
	m_fPosX += Math::Cos(m_Dir) * Speed * fTime; 
	m_fPosZ -= Math::Sin(m_Dir) * Speed * fTime; 
	if(m_Act == Cur) 
	{ 
		m_Time += s_TimeFixed * fTime; 
	} 
	else 
	{ 
		m_Act = Cur; 
		m_Time = 0; 
	} 
} 
 
void Hero::MoveBackward(float fTime,ACTION Act) 
{ 
	m_fPosX -= Math::Cos(m_Dir) * m_fWalkSpeed * fTime; 
	m_fPosZ += Math::Sin(m_Dir) * m_fWalkSpeed * fTime; 
	if(m_Act == Act) 
	{ 
		m_Time += s_TimeFixed * fTime; 
	} 
	else 
	{ 
		m_Act = Act; 
		m_Time = 0; 
	} 
} 
 
void Hero::ShuffleLeft(float fTime) 
{ 
	m_Dir -= s_ShuffleDgreeFixed * fTime; 
	m_Dir %= 360; 
	if(m_Act == ACT_SHUFFLELEFT) 
	{ 
		m_Time += s_TimeFixed * fTime; 
	} 
	else 
	{ 
		m_Act = ACT_SHUFFLELEFT; 
		m_Time = 0; 
	} 
	 
} 
 
void Hero::ShuffleRight(float fTime) 
{ 
	m_Dir += (s_ShuffleDgreeFixed)* fTime + 360; 
	m_Dir %= 360; 
	if(m_Act == ACT_SHUFFLERIGHT) 
	{ 
		m_Time += s_TimeFixed * fTime; 
	} 
	else 
	{ 
		m_Act = ACT_SHUFFLERIGHT; 
		m_Time = 0; 
	} 
} 
 
void Hero::Stand(float fTime) 
{ 
	if(m_Act == ACT_STAND) 
	{ 
		m_Time += s_TimeFixed * fTime; 
	} 
	else 
	{ 
		m_Act = ACT_STAND; 
		m_Time = 0; 
	} 
} 
 
void Hero::TurnLeft(float fTime) 
{ 
	m_Dir -= s_ShuffleDgreeFixed* fTime; 
	m_Dir %= 360; 
 
} 
void Hero::TurnRight(float fTime) 
{ 
	m_Dir += s_ShuffleDgreeFixed* fTime; 
	m_Dir %= 360; 
} 
 
void Hero::Update(float fUpdateTime) 
{ 
	float X,Y,Z; 
	X = m_fPosX; 
	Z = m_fPosZ; 
 
	if(g_Keyboard.GetKeyState(DIK_R)) 
	{ 
		g_Keyboard.SetLock(DIK_R); 
		m_bRun = !m_bRun; 
	}	 
 
 
	if(g_Keyboard.GetKeyState(DIK_W)) 
	{ 
		if(g_Keyboard.GetKeyState(DIK_A)) 
		{ 
			TurnLeft(fUpdateTime); 
		} 
		else if(g_Keyboard.GetKeyState(DIK_D)) 
		{ 
			TurnRight(fUpdateTime); 
		} 
		MoveForward(fUpdateTime); 
	} 
	else if(g_Keyboard.GetKeyState(DIK_S)) 
	{ 
		if(g_Keyboard.GetKeyState(DIK_A)) 
		{ 
			TurnLeft(fUpdateTime); 
		} 
		else if(g_Keyboard.GetKeyState(DIK_D)) 
		{ 
			TurnRight(fUpdateTime); 
		} 
		MoveBackward(fUpdateTime); 
	} 
	else if(g_Keyboard.GetKeyState(DIK_A)) 
	{ 
		ShuffleLeft(fUpdateTime); 
	} 
	else if(g_Keyboard.GetKeyState(DIK_D)) 
	{ 
		ShuffleRight(fUpdateTime); 
	} 
	else  
	{ 
		Stand(fUpdateTime); 
	} 
	 
	if(g_SceneMgr.GetCurScene()->GetMap()->GetTerrian(m_fPosX,m_fPosZ) == TRR_FORBID) 
	{ 
		m_fPosX = X; 
		m_fPosZ = Z; 
		m_Act = ACT_STAND; 
	}	 
	m_fPosY = g_SceneMgr.GetCurScene()->GetMap()->GetY(m_fPosX,m_fPosZ); 
	M2Model *p = (M2Model*)g_MdlMgr.GetModel(m_ModelID); 
	m_Anim = (p->GetAnimation(m_Act))[0]; 
} 
 
void HeroController::Init(char *pFile,int Size) 
{ 
	m_Hero.m_fPosX = 102.0f; 
	m_Hero.m_fPosY = 0.0f; 
	m_Hero.m_fPosZ = 157.0f; 
	m_Hero.m_Dir = 90; 
	m_Hero.m_fWalkSpeed = 3.0; 
	m_Hero.m_fRunSpeed = 6.0; 
	m_Hero.m_Geosets[0] = 10; 
	m_Hero.m_Geosets[1] = 1; 
	m_Hero.m_Geosets[2] = 1; 
	m_Hero.m_Geosets[3] = 1; 
	m_Hero.m_Geosets[4] = 1; 
	m_Hero.m_Geosets[5] = 2; 
	m_Hero.m_Geosets[6] = 1; 
	m_Hero.m_Geosets[7] = 1; 
	m_Hero.m_Geosets[8] = 1; 
	m_Hero.m_Geosets[9] = 1; 
	m_Hero.m_Geosets[10] = 1; 
	m_Hero.m_Geosets[11] = 1; 
	m_Hero.m_Geosets[12] = 1; 
	m_Hero.m_Geosets[13] = 1; 
	m_Hero.m_Geosets[14] = 1; 
	m_Hero.m_Geosets[15] = 1; 
	m_Hero.m_Act = ACT_STAND; 
	m_Hero.m_Time = 0; 
	m_Hero.m_ModelID = g_MdlMgr.AddModel("HumanMale.m2",MODEL_CHARACTER); 
	m_Hero.m_TexturesID[0] = g_TexMgr.AddTexture("Herry.dds"); 
	m_Hero.m_TexturesID[1] = g_TexMgr.AddTexture("Herry0.dds"); 
} 
 
void HeroController::Update(float fUpdateTime) 
{ 
	m_Hero.Update(fUpdateTime); 
} 
 
void HeroController::Render() 
{ 
	m_Hero.Render(g_Camera.GetViewProj()); 
} 
 
void HeroController::Free() 
{ 
	g_MdlMgr.Delete(m_Hero.m_ModelID); 
	g_TexMgr.Delete(m_Hero.m_TexturesID[0]); 
}