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
|
2018-02-07 16:37:12 +08:00
|
|
|
|
static e2d::String s_sAppName;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
2018-02-28 19:17:15 +08:00
|
|
|
|
bool e2d::Game::init(const String & sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID, const String & 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>
|
2018-02-06 21:11:54 +08:00
|
|
|
|
CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
2018-02-01 22:07:44 +08:00
|
|
|
|
|
2018-03-01 00:19:09 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD> AppName
|
|
|
|
|
|
s_sAppName = sAppname;
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><DEB9><EFBFBD>Դ
|
2018-02-07 16:37:12 +08:00
|
|
|
|
if (!Renderer::__createDeviceIndependentResources())
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
WARN_IF(true, "Renderer::__createDeviceIndependentResources Failed!");
|
2018-02-01 22:07:44 +08:00
|
|
|
|
break;
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
2018-02-01 22:07:44 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
if (!Window::__init(sTitle, nWidth, nHeight, pIconID))
|
2018-02-01 22:07:44 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
WARN_IF(true, "Window::__init Failed!");
|
2018-02-01 22:07:44 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
2018-02-07 16:37:12 +08:00
|
|
|
|
if (!Renderer::__createDeviceResources())
|
2018-02-01 22:07:44 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
WARN_IF(true, "Renderer::__createDeviceResources Failed!");
|
2018-02-01 22:07:44 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC> DirectInput
|
2018-02-07 16:37:12 +08:00
|
|
|
|
if (!Input::__init())
|
2018-02-01 22:07:44 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
WARN_IF(true, "Input::__init Failed!");
|
2018-02-01 22:07:44 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
if (!MusicManager::__init())
|
2018-02-01 22:07:44 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
WARN_IF(true, "MusicManager::__init Failed!");
|
2018-02-01 22:07:44 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD> Client <20><>С
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Window::setSize(nWidth, nHeight);
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// <20><>־<EFBFBD><D6BE>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
s_bInitialized = true;
|
|
|
|
|
|
|
|
|
|
|
|
} while (0);
|
|
|
|
|
|
|
2018-01-30 16:45:38 +08:00
|
|
|
|
return s_bInitialized;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
int e2d::Game::run()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (!s_bInitialized)
|
|
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
ASSERT(false, "You must initialize Game first!");
|
2018-01-30 16:45:38 +08:00
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
SceneManager::__init();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
::ShowWindow(Window::getHWnd(), SW_SHOWNORMAL);
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// ˢ<>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
::UpdateWindow(Window::getHWnd());
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Window::__poll();
|
2018-02-04 21:24:27 +08:00
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Time::__init();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
while (!s_bEndGame)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Window::__poll();
|
2018-02-04 21:24:27 +08:00
|
|
|
|
// ˢ<><CBA2>ʱ<EFBFBD><CAB1>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Time::__updateNow();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ﵽ<EFBFBD><EFB5BD>ˢ<EFBFBD><CBA2>״̬
|
2018-02-07 16:37:12 +08:00
|
|
|
|
if (Time::__isReady())
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-03-11 23:56:40 +08:00
|
|
|
|
TimerManager::__update(); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
|
|
|
|
|
ActionManager::__update(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
while (Time::__isReady())
|
2018-02-04 21:24:27 +08:00
|
|
|
|
{
|
2018-03-11 23:56:40 +08:00
|
|
|
|
Input::__update(); // <20><>ȡ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
SceneManager::__update(); // <20><><EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
Time::__updateLast(); // ˢ<><CBA2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
|
2018-02-04 21:24:27 +08:00
|
|
|
|
}
|
2018-03-11 23:56:40 +08:00
|
|
|
|
Renderer::__render(); // <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2018-03-11 23:56:40 +08:00
|
|
|
|
ObjectManager::__update(); // ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
|
|
|
|
|
Time::__sleep(); // <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Game::pause()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
s_bPaused = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Game::resume()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (isPaused())
|
|
|
|
|
|
{
|
|
|
|
|
|
s_bPaused = false;
|
|
|
|
|
|
// ˢ<>µ<EFBFBD>ǰʱ<C7B0><CAB1>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Time::__updateLast();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
ActionManager::__resetAllActions();
|
|
|
|
|
|
TimerManager::__resetAllTimers();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
bool e2d::Game::isPaused()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_bPaused;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Game::quit()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
s_bEndGame = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Game::uninit()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
SceneManager::__uninit();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Input::__uninit();
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// <20>رղ<D8B1><D5B2><EFBFBD><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
MusicManager::__uninit();
|
2018-03-03 17:02:08 +08:00
|
|
|
|
// <20><><EFBFBD>ն<EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
TimerManager::__uninit();
|
2018-01-30 16:45:38 +08:00
|
|
|
|
// <20>ָ<EFBFBD><D6B8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Time::__uninit();
|
2018-02-03 22:04:43 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Image::clearCache();
|
2018-02-01 22:07:44 +08:00
|
|
|
|
// ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
|
2018-03-06 09:56:17 +08:00
|
|
|
|
ObjectManager::__uninit();
|
2018-02-04 21:24:27 +08:00
|
|
|
|
// ɾ<><C9BE><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Renderer::__discardResources();
|
2018-02-04 21:24:27 +08:00
|
|
|
|
// <20><><EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
Window::__uninit();
|
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
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::String e2d::Game::getAppName()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
return s_sAppName;
|
|
|
|
|
|
}
|