Magic_Game/core/Base/Game.cpp

161 lines
2.8 KiB
C++
Raw Normal View History

2018-01-30 16:45:38 +08:00
#include "..\ebase.h"
#include "..\emanagers.h"
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ֹ
static bool s_bEndGame = false;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ͣ
static bool s_bPaused = false;
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>ʼ<EFBFBD><CABC>
static bool s_bInitialized = false;
// AppName
static e2d::EString s_sAppName;
2018-02-01 09:38:25 +08:00
bool e2d::EGame::init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID, LPCTSTR sAppname)
2018-01-30 16:45:38 +08:00
{
if (s_bInitialized)
{
WARN_IF(true, "The game has been initialized!");
return false;
}
// <20><>ʼ<EFBFBD><CABC> COM <20><><EFBFBD><EFBFBD>
if (SUCCEEDED(CoInitialize(NULL)))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD><DEB9><EFBFBD>Դ
if (ERenderer::__createDeviceIndependentResources())
{
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-02-01 09:38:25 +08:00
if (EWindow::__init(sTitle, nWidth, nHeight, pIconID))
2018-01-30 16:45:38 +08:00
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
if (ERenderer::__createDeviceResources())
{
// <20><><EFBFBD><EFBFBD> Client <20><>С
EWindow::setSize(nWidth, nHeight);
2018-02-01 09:38:25 +08:00
// <20><><EFBFBD><EFBFBD> AppName
if (sAppname)
{
s_sAppName = sAppname;
}
else
{
2018-01-30 16:45:38 +08:00
s_sAppName = EWindow::getTitle();
2018-02-01 09:38:25 +08:00
}
2018-01-30 16:45:38 +08:00
// <20><>־<EFBFBD><D6BE>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
s_bInitialized = true;
}
}
}
}
return s_bInitialized;
}
int e2d::EGame::run()
{
if (!s_bInitialized)
{
ASSERT(false, "You must initialize EGame first!");
return -1;
}
// <20><>ʼ<EFBFBD><CABC> DirectInput
EInput::__init();
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
ETime::__init();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ESceneManager::__enterNextScene();
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
2018-02-01 09:38:25 +08:00
::ShowWindow(EWindow::getHWnd(), SW_SHOWNORMAL);
2018-01-30 16:45:38 +08:00
// ˢ<>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
::UpdateWindow(EWindow::getHWnd());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
EWindow::__poll();
// ˢ<><CBA2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
ETime::__updateNow();
ETime::__updateLast();
while (!s_bEndGame)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
EWindow::__poll();
// ˢ<><CBA2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
ETime::__updateNow();
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFB5BD>ˢ<EFBFBD><CBA2>״̬
if (ETime::getDeltaTime() >= 17)
{
2018-02-01 09:38:25 +08:00
ETime::__updateLast(); // ˢ<><CBA2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
EGame::__update(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
ERenderer::__render(); // <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
ETime::__sleep();
}
}
return 0;
}
void e2d::EGame::pause()
{
s_bPaused = true;
}
void e2d::EGame::resume()
{
if (isPaused())
{
s_bPaused = false;
// ˢ<>µ<EFBFBD>ǰʱ<C7B0><CAB1>
ETime::__updateLast();
// <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>
EActionManager::__resetAllActions();
ETimerManager::__resetAllTimers();
}
}
bool e2d::EGame::isPaused()
{
return s_bPaused;
}
void e2d::EGame::quit()
{
s_bEndGame = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
}
void e2d::EGame::uninit()
{
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EWindow::__uninit();
// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
EInput::__uninit();
// <20>ָ<EFBFBD><D6B8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
ETime::__uninit();
// ɾ<><C9BE><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
ERenderer::__discardResources();
CoUninitialize();
}
void e2d::EGame::__update()
{
2018-02-01 09:38:25 +08:00
if (s_bPaused)
return;
2018-01-30 16:45:38 +08:00
2018-02-01 09:38:25 +08:00
EInput::__updateDeviceState(); // <20><>ȡ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
ETimerManager::__update(); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>
EActionManager::__update(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>
ESceneManager::__update(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
}
e2d::EString e2d::EGame::getAppName()
{
return s_sAppName;
}