📄 cmoverole.cpp
字号:
//--------------------------------------------------------------------------------------------------------
// 游戏成批移动角色模块
//CMoveRole.cpp
//游戏引擎中的成批移动角色部分
//作者:吴振华(kylinx)(中国科大01级11系)
//E-mail:game-diy@163.com
//创建于:2003/7/2X by Kylinx
//--------------------------------------------------------------------------------------------------------
#include"CMoveRole.h"
#include"CGraph.h"
#include"CGame.h"
#include"CMacro.h"
#include"CRole.h"
#include"CMessage.h"
CMoveRole::CMoveRole()
{
m_pRoleList=KGDList<STMoveRole*>::ForeCreate();
}
CMoveRole::~CMoveRole()
{
if(m_pRoleList)
{
m_pRoleList->Clear();
delete m_pRoleList;
m_pRoleList=NULL;
}
}
BOOL CMoveRole::AddRole(STRenderRole*pRole,int nDestX,int nDestY)
{
LOA_ASSERT(pRole);
STMoveRole*pMoveRole=new STMoveRole;
pMoveRole->pRole=pRole;
pMoveRole->nDestX=nDestX;
pMoveRole->nDestY=nDestY;
return m_pRoleList->Insert(pMoveRole,pMoveRole->pRole->pRole->nID);
}
BOOL CMoveRole::BeginMove(CGame*pGame)
{
LOA_ASSERT(pGame);
MSG msg;
STMoveRole*pRole;
BOOL bLastMoveOK=false;
while(pGame->IsPlayGame() && !bLastMoveOK) //等待正在移动的角色移动完成
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL,0,0))
return msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(pGame->IsActive())
{
bLastMoveOK=true;
m_pRoleList->ResetToHead();
while(m_pRoleList->GetAndMovePointToNext(pRole))
{
if(pRole->pRole->pRole->bMoving)
{
pRole->pRole->pRole->nCurrentPathStep=pRole->pRole->pRole->Path.nLength;
// pRole->pRole->pRole->MoveTo(pGame->GetLog(),pGame,pRole->nDestX,pRole->nDestY);
bLastMoveOK=false;
}
}
pGame->GetMessageQueue()->ExecuteMessage();
pGame->SortAndShowRole();
pGame->ComputeMapStartPos();
pGame->UpdateScreen();
}
else
WaitMessage();
}
m_pRoleList->ResetToHead();
while(m_pRoleList->GetAndMovePointToNext(pRole))
{
pRole->pRole->pRole->MoveTo(pGame->GetLog(),pGame,pRole->nDestX,pRole->nDestY);
}
BOOL bAllMoveOk;
while(pGame->IsPlayGame())
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL,0,0))
return msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(pGame->IsActive())
{
bAllMoveOk=true;
m_pRoleList->ResetToHead();
while(m_pRoleList->GetAndMovePointToNext(pRole))
{
if(pRole->pRole->pRole->bMoving) //如果正在移动
{
bAllMoveOk=false;
pRole->pRole->pRole->MoveTo(pGame->GetLog(),pGame,pRole->nDestX,pRole->nDestY);
}
else
{
pRole->pRole->pRole->MoveAni();
}
}
if(bAllMoveOk)
break;
pGame->GetMessageQueue()->ExecuteMessage();
pGame->SortAndShowRole();
pGame->ComputeMapStartPos();
pGame->UpdateScreen();
}
else
WaitMessage();
}
m_pRoleList->ResetToHead();
while(m_pRoleList->GetAndMovePointToNext(pRole))
{
delete pRole;
}
m_pRoleList->Clear();
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -