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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-01 22:07:44 +08:00
|
|
|
|
do
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// <20><>ʼ<EFBFBD><CABC> COM <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (FAILED(CoInitializeEx(NULL, COINIT_MULTITHREADED)))
|
|
|
|
|
|
{
|
|
|
|
|
|
WARN_IF(true, "CoInitializeEx Failed!");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><DEB9><EFBFBD>Դ
|
2018-02-01 22:07:44 +08:00
|
|
|
|
if (!ERenderer::__createDeviceIndependentResources())
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-01 22:07:44 +08:00
|
|
|
|
WARN_IF(true, "ERenderer::__createDeviceIndependentResources Failed!");
|
|
|
|
|
|
break;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
2018-02-01 22:07:44 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (!EWindow::__init(sTitle, nWidth, nHeight, pIconID))
|
|
|
|
|
|
{
|
|
|
|
|
|
WARN_IF(true, "EWindow::__init Failed!");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|
|
|
|
|
if (!ERenderer::__createDeviceResources())
|
|
|
|
|
|
{
|
|
|
|
|
|
WARN_IF(true, "ERenderer::__createDeviceResources Failed!");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ
|
|
|
|
|
|
if (!ETime::__init())
|
|
|
|
|
|
{
|
|
|
|
|
|
WARN_IF(true, "ETime::__init Failed!");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC> DirectInput
|
|
|
|
|
|
if (!EInput::__init())
|
|
|
|
|
|
{
|
|
|
|
|
|
WARN_IF(true, "EInput::__init Failed!");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (!EMusicManager::__init())
|
|
|
|
|
|
{
|
|
|
|
|
|
WARN_IF(true, "EMusicManager::__init Failed!");
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> Client <20><>С
|
|
|
|
|
|
EWindow::setSize(nWidth, nHeight);
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> AppName
|
|
|
|
|
|
s_sAppName = (sAppname != nullptr) ? sAppname : EWindow::getTitle();
|
|
|
|
|
|
// <20><>־<EFBFBD><D6BE>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
s_bInitialized = true;
|
|
|
|
|
|
|
|
|
|
|
|
} while (0);
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
return s_bInitialized;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int e2d::EGame::run()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!s_bInitialized)
|
|
|
|
|
|
{
|
|
|
|
|
|
ASSERT(false, "You must initialize EGame first!");
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
ESceneManager::__init();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <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
|
|
|
|
|
|
{
|
2018-02-01 22:07:44 +08:00
|
|
|
|
EObjectManager::__flush(); // ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
|
|
|
|
|
ETime::__sleep(); // <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
{
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
|
|
|
|
|
ESceneManager::__uninit();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
EWindow::__uninit();
|
|
|
|
|
|
// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
EInput::__uninit();
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// <20>رղ<D8B1><D5B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
EMusicManager::__uninit();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20>ָ<EFBFBD><D6B8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|
|
|
|
|
ETime::__uninit();
|
|
|
|
|
|
// ɾ<><C9BE><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|
|
|
|
|
ERenderer::__discardResources();
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
|
|
|
|
|
EObjectManager::__flush();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
CoUninitialize();
|
2018-02-01 22:07:44 +08:00
|
|
|
|
|
|
|
|
|
|
s_bInitialized = false;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|