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