167 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			167 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #include "..\ebase.h"
 | |||
|  | #include "..\emanagers.h"
 | |||
|  | #include "..\enodes.h"
 | |||
|  | #include "..\etransitions.h"
 | |||
|  | #include "..\etools.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; | |||
|  | 
 | |||
|  | 
 | |||
|  | bool e2d::EGame::init(LPCTSTR sTitle, UINT32 nWidth, UINT32 nHeight, LPCTSTR pIconID, bool bNoClose, bool bNoMiniSize, bool bTopMost) | |||
|  | { | |||
|  | 	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>
 | |||
|  | 			if (EWindow::__init(sTitle, nWidth, nHeight, pIconID, bNoClose, bNoMiniSize, bTopMost)) | |||
|  | 			{ | |||
|  | 				// <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
 | |||
|  | 				if (ERenderer::__createDeviceResources()) | |||
|  | 				{ | |||
|  | 					// <20><><EFBFBD><EFBFBD> Client <20><>С
 | |||
|  | 					EWindow::setSize(nWidth, nHeight); | |||
|  | 					// <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC> AppName
 | |||
|  | 					if (s_sAppName.isEmpty()) | |||
|  | 						s_sAppName = EWindow::getTitle(); | |||
|  | 					// <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>
 | |||
|  | 	EWindow::showWindow(); | |||
|  | 	// ˢ<>´<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(); | |||
|  | 
 | |||
|  | 	// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
 | |||
|  | 	int nWaitMS = 0; | |||
|  | 
 | |||
|  | 	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) | |||
|  | 		{ | |||
|  | 			ETime::__updateLast(); | |||
|  | 			EGame::__update(); | |||
|  | 		} | |||
|  | 		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() | |||
|  | { | |||
|  | 	EInput::__updateDeviceState();		// <20><>ȡ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 
 | |||
|  | 	if (!s_bPaused) | |||
|  | 	{ | |||
|  | 		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>
 | |||
|  | 		ERenderer::__render();			// <20><>Ⱦ<EFBFBD><C8BE>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
 | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void e2d::EGame::setAppName(const EString &appname) | |||
|  | { | |||
|  | 	s_sAppName = appname; | |||
|  | } | |||
|  | 
 | |||
|  | e2d::EString e2d::EGame::getAppName() | |||
|  | { | |||
|  | 	return s_sAppName; | |||
|  | } |