| 
									
										
										
										
											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(); | 
					
						
							| 
									
										
										
										
											2018-02-03 22:04:43 +08:00
										 |  |  |  | 	// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	EImage::clearCache(); | 
					
						
							| 
									
										
										
										
											2018-01-30 16:45:38 +08:00
										 |  |  |  | 	// ɾ<><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; | 
					
						
							|  |  |  |  | } |