www.pudn.com > coolMEMORY.rar > Memory.cpp


//----------------------------------------------------------------------------- 
// File: Memory.cpp 
//----------------------------------------------------------------------------- 
 
#include "AS\AS_Engine.h" 
#include "ModuleHeaders.h" 
 
 
// Variables: ***************************************************************** 
AS_CAMERA *pCamera;			// The main game camera 
HWND hWndCredits;			// The dialog handle of the credits dialog 
BOOL bOnlyConfig;			// Should only the config dialog be shown? (no game run after this...) 
SETUP Setup;				// Some game setups 
BOOL bCheatsActivated;		// Are the cheats active? 
/////////////////////////////////////////////////////////////////////////////// 
 
// Functions: ***************************************************************** 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); 
void ChangeDisplayMode(void); 
void OpenCreditsDialog(HWND); 
LRESULT CALLBACK CreditsProc(HWND, UINT, WPARAM, LPARAM); 
void OpenHelp(void); 
/////////////////////////////////////////////////////////////////////////////// 
 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                   LPSTR lpCmdLine, int iCmdShow) 
{ // begin WinMain() 
	BOOL bOpenConfig, bLanguage; 
	char byTemp[MAX_PATH]; 
	LPSTR lpTemp; 
 
	// Startup the engine: 
	_AS = new AS_ENGINE(hInstance, lpCmdLine, iCmdShow, TRUE); 
	if(_AS->GetShutDown()) 
		return 1; 
	 
	// Setup the camera: 
	_ASCamera = pCamera = new AS_CAMERA; 
	memset(pCamera, 0, sizeof(AS_CAMERA)); 
	 
	// Check if the selected language is available: 
	bLanguage = FALSE; 
	for(int i = 0; i < iASLanguages; i++) 
		if(!strcmp(pbyASLanguage[i], _ASConfig->byLanguage)) 
		{ 
			bLanguage = TRUE; 
			break; 
		} 
	if(!bLanguage) 
	{ // No this language isn't available: 
		if(!iASLanguages) 
		{ // Oh, no! There is no other language!! 
			MessageBox(NULL, "There are no languages!!\nAs result there are no text's!", 
					   GAME_NAME, MB_OK | MB_ICONINFORMATION); 
		} 
		else 
		{ // Change to the first best language: 
			sprintf(byTemp, "The selected language (%s) isn't available!!\nPlease choose an other language.\n", 
					_ASConfig->byLanguage); 
			MessageBox(NULL, byTemp, GAME_NAME, MB_OK | MB_ICONINFORMATION); 
			strcpy(_ASConfig->byLanguage, pbyASLanguage[0]); 
			SetLanguage(_ASConfig->byLanguage); 
		} 
	} 
	else 
		SetLanguage(_ASConfig->byLanguage); 
	 
	// Is this the first program start?: 
	if(_ASConfig->bFirstRun) 
	{ // Yep! 
		_AS->WriteLogMessage("First program start detected"); 
		MessageBox(NULL, M_FirstProgramStart, GAME_NAME, MB_OK | MB_ICONINFORMATION); 
	} 
 
	// Check the given program parameters: 
	bOpenConfig = FALSE; 
	bOnlyConfig = FALSE; 
	bCheatsActivated = FALSE; 
	lpTemp = lpCmdLine; 
	for(;;) 
	{ 
		if(sscanf(lpTemp, "%s", byTemp) == EOF) 
			break; 
		// Check the program parameter: 
		if(!strcmp(byTemp, "-config")) 
			bOpenConfig = TRUE; 
		if(!strcmp(byTemp, "-onlyconfig")) 
			bOnlyConfig = TRUE; 
		// Check the cheats: 
		if(!strcmp(byTemp, "-clairvoyant")) 
		{ 
			_AS->WriteLogMessage("Cheats activated"); 
			bCheatsActivated = TRUE; 
		} 
		if(*(lpTemp+strlen(byTemp)) == 0) 
			break; 
		lpTemp += strlen(byTemp)+1; 
	} 
	 
	// Is an error detected? (from the last run) 
	if(_ASConfig->bError) 
		MessageBox(NULL, M_ProgramWasNotSutDownCorrectlyAtLastTime, GAME_NAME, MB_OK | MB_ICONINFORMATION); 
	 
	// Check if we want to show the config dialog: 
	if(bOpenConfig || bOnlyConfig || !bLanguage || _ASConfig->bFirstRun || _ASConfig->bError) 
	{ 
		bFirstRunConfigDialog = TRUE; 
		OpenConfigDialog(NULL); 
		bFirstRunConfigDialog = FALSE; 
	} 
	 
	if(!bOnlyConfig) 
	{ 
		// Set a pointer to the current card style: 
		pcCardStyle = &cGameConfig.cStyle; 
		cGameConfig.SetStandart(); 
		sprintf(byTemp, "%sGameConfig.ini", _AS->byProgramPath); 
		cGameConfig.LoadAdvancedSettings(byTemp); 
 
		// Set the current program module: 
		_AS->SetModule(MODULE_INTRO); 
//		_AS->SetModule(MODULE_MENU); 
//		_AS->SetModule(MODULE_GAME); 
 
		// Load stuff which is always used: 
		InitGameObjects(); 
		LoadGameTextures(); 
 
		// Create the game window and create the DirectInput stuff: 
		_AS->ASCreateWindow(WindowProc, GAME_WINDOW_NAME, GAME_WINDOW_NAME, _ASConfig->iWindowWidth, 
							_ASConfig->iWindowHeight, LoadMenu(_AS->GetInstance(), MAKEINTRESOURCE(IDR_GAME)), 
							_ASConfig->bFullScreen, GameDraw, GameCheck, NULL, TRUE); 
		GAME_WINDOW_ID = _AS->GetWindows()-1; 
		ASInitOpenGL(&_AS->pWindow[GAME_WINDOW_ID], 
					 NULL, 
					 _AS->pWindow[GAME_WINDOW_ID].GethDC(), 
					 _AS->pWindow[GAME_WINDOW_ID].GethRC(), _ASConfig->bFullScreen); 
		_AS->CreateDXInputDevices(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), FALSE, TRUE, TRUE, FALSE); 
		ShowWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), SW_SHOW);	 
		SetGameLanguage(); 
 
		// Setup textures and other stuff: 
		ASGenOpenGLTextures(GAME_TEXTURES, GameTexture); 
		ASGenOpenGLTextures(CAUST_1_STEPS, Caust1Texture); 
		CreateBlurTexture(); 
		CreateGameLists(); 
 
		// Load all sound samples: 
		LoadSamples(); 
		 
		EnumerateMusic(); 
		if(!strcmp(byCurrentMusic, "")) 
		{ // The standart music isn't available, start another: 
			if(pbyFoundMusic) 
				StartMusic(pbyFoundMusic[0]); 
		} 
 
		if(bCheatsActivated)	 
			ShowSmallMessage(T_CheatsActivated, 3000); 
 
		// Go into the main loop: 
		_ASConfig->bError = TRUE; 
		_AS->WriteLogMessage("Go into program loop"); 
		for(;;) 
		{ 
			if(_AS->GetShutDown()) 
				break; 
			_AS->SetModule(_AS->GetNextModule()); 
 
			// Go into the current program module: 
			switch(_AS->GetModule()) 
			{ 
				case MODULE_INTRO: Intro(); break; 
				case MODULE_MENU: GameMenu(); break; 
				case MODULE_GAME: Game(); break; 
			} 
		} 
 
		sprintf(byTemp, "%sGameConfig.ini", _AS->byProgramPath); 
		cGameConfig.SaveAdvancedSettings(byTemp); 
 
		pcCardStyle->Destroy(); 
 
		// Destroy all sound samples: 
		ASDestroyFmodSamples(GAME_SAMPLES, GameSample); 
		StopMusic(); 
		DestroyFoundMusic(); 
 
		// Save the configuration:	 
		sprintf(byTemp, "%s%s", _AS->byProgramPath, _AS->byConfigFilename); 
		_ASConfig->Save(byTemp); 
		 
		// Destroy the game objects and textures: 
		DestroyBlurTexture(); 
		ASDestroyOpenGLTextures(GAME_TEXTURES, GameTexture); 
		ASDestroyOpenGLTextures(CAUST_1_STEPS, Caust1Texture); 
		ASDestroyTextures(GAME_TEXTURES, GameTexture); 
		ASDestroyTextures(GAME_TEXTURES, Caust1Texture); 
		DestroyGameObjects(); 
		DestroyGameLists(); 
 
		// Destroy the game window and the corresponding DirectInput stuff: 
		_AS->FreeDXInputDevices(); 
		ASDestroyOpenGL(&_AS->pWindow[GAME_WINDOW_ID], 
						NULL, 
						*_AS->pWindow[GAME_WINDOW_ID].GethDC(), 
						*_AS->pWindow[GAME_WINDOW_ID].GethRC()); 
		_AS->ASDestroyWindow(_AS->pWindow[GAME_WINDOW_ID].GethWnd(), GAME_WINDOW_NAME); 
	} 
		 
	// Delete the rest: 
	delete pCamera; 
	delete _AS; 
	 
	// That's all! 
	return 0; 
} // end WinMain() 
 
void ChangeDisplayMode(void) 
{ // begin ChangeDisplayMode() 
	switch(_AS->GetModule()) 
	{ 
		case MODULE_INTRO: case MODULE_MENU: case MODULE_GAME: 
			// Destroy the old window: 
			_AS->FreeDXInputDevices(); 
			DestroyBlurTexture(); 
			ASDestroyOpenGLTextures(GAME_TEXTURES, GameTexture); 
			ASDestroyOpenGLTextures(CAUST_1_STEPS, Caust1Texture); 
			pcCardStyle->DestroyOpenGLTextures(); 
			DestroyGameLists(); 
			ASDestroyOpenGL(&_AS->pWindow[GAME_WINDOW_ID],  
							NULL, 
							*_AS->pWindow[GAME_WINDOW_ID].GethDC(), 
							*_AS->pWindow[GAME_WINDOW_ID].GethRC()); 
			_AS->ASDestroyWindow(_AS->pWindow[GAME_WINDOW_ID].GethWnd(), GAME_WINDOW_NAME); 
			 
			// Create the new window: 
			_AS->ASCreateWindow(WindowProc, GAME_WINDOW_NAME, GAME_WINDOW_NAME, _ASConfig->iWindowWidth, 
								_ASConfig->iWindowHeight, LoadMenu(_AS->GetInstance(), MAKEINTRESOURCE(IDR_GAME)), 
								_ASConfig->bFullScreen, GameDraw, GameCheck, NULL, TRUE);			 
			GAME_WINDOW_ID = _AS->GetWindows()-1; 
			if(_AS->GetModule() == MODULE_MENU) 
			{ 
				_AS->pWindow[GAME_WINDOW_ID].SetDrawFunction(GameMenuDraw); 
				_AS->pWindow[GAME_WINDOW_ID].SetCheckFunction(GameMenuCheck); 
			} 
			if(_AS->GetModule() == MODULE_INTRO) 
			{ 
				_AS->pWindow[GAME_WINDOW_ID].SetDrawFunction(IntroDraw); 
				_AS->pWindow[GAME_WINDOW_ID].SetCheckFunction(IntroCheck); 
			} 
			_AS->CreateDXInputDevices(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), FALSE, TRUE, TRUE, FALSE); 
			ASInitOpenGL(&_AS->pWindow[GAME_WINDOW_ID],  
  						 NULL, 
						 _AS->pWindow[GAME_WINDOW_ID].GethDC(), 
						 _AS->pWindow[GAME_WINDOW_ID].GethRC(), _ASConfig->bFullScreen); 
			ASGenOpenGLTextures(GAME_TEXTURES, GameTexture); 
			ASGenOpenGLTextures(CAUST_1_STEPS, Caust1Texture); 
			CreateBlurTexture(); 
			pcCardStyle->GenOpenGLTextures(); 
			CreateGameLists(); 
			ShowWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), SW_SHOW); 
			ShowWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), SW_SHOWNORMAL); 
			UpdateWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd()); 
			SetForegroundWindow(*_AS->pWindow[GAME_WINDOW_ID].GethWnd()); 
			SetFocus(*_AS->pWindow[GAME_WINDOW_ID].GethWnd()); 
			SetGameLanguage(); 
		break; 
	} 
} // end ChangeDisplayMode() 
 
void OpenCreditsDialog(HWND hWnd) 
{ // begin OpenCreditsDialog() 
	DialogBox(_AS->GetInstance(), MAKEINTRESOURCE(IDD_CREDITS), hWnd, (DLGPROC) CreditsProc); 
} // end OpenCreditsDialog() 
 
LRESULT CALLBACK CreditsProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) 
{ // begin CreditsProc() 
	switch(iMessage) 
    { 
        case WM_INITDIALOG: 
				_AS->WriteLogMessage("Open credits dialog"); 
			    hWndCredits = hWnd; 
				ShowWindow(hWnd, _AS->GetCmdShow()); 
				UpdateWindow(hWnd); 
            	SetDlgItemText(hWnd, IDC_CREDITS_VERSION, _ASProgramInfo.byVersion); 
            	SetDlgItemText(hWnd, IDC_CREDITS_BUILD_DATE, _ASProgramInfo.byDate); 
            	SetDlgItemText(hWnd, IDC_CREDITS_BUILD_TIME, _ASProgramInfo.byTime); 
				// Texts: 
				SetWindowText(hWnd, T_Credits); 
				SetDlgItemText(hWnd, IDC_CREDITS_VERSION_TEXT, T_Version_); 
  				SetDlgItemText(hWnd, IDC_CREDITS_PROGRAMMING_AND_DESIGN, T_ProgrammingAndDesign_); 
  				SetDlgItemText(hWnd, IDC_CREDITS_MUSIC, T_Music_); 
  				SetDlgItemText(hWnd, IDC_CREDITS_GRAPHIC_AND_DESIGN, T_GraphicAndDesign_); 
  				SetDlgItemText(hWnd, IDC_CREDITS_PROGRAM_INFO, T_ProgramInfo_); 
  				SetDlgItemText(hWnd, IDC_CREDITS_BUILD, T_Build_); 
  				SetDlgItemText(hWnd, IDC_CREDITS_OK, T_Ok); 
  				SetDlgItemText(hWnd, IDC_CREDITS_MORE, T_MoreCredits); 
		return TRUE; 
 
        case WM_COMMAND: 
            switch(LOWORD(wParam)) 
            { 
                case IDC_CREDITS_OK: 
					EndDialog(hWnd, FALSE); 
					hWndCredits = NULL; 
					_AS->WriteLogMessage("Close credits dialog(OK)"); 
                return TRUE; 
 
				case IDC_CREDITS_MORE: OpenHelp(); break; 
            } 
        break; 
 
		case WM_CLOSE: SendMessage(hWnd, WM_COMMAND, IDC_CREDITS_OK, 0); break; 
    } 
 
    return FALSE; 
} // end CreditsProc() 
 
void OpenHelp(void) 
{ // begin OpenHelp() 
	char byTemp[256]; 
 
	_AS->WriteLogMessage("Open help file"); 
	SendMessage(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), WM_SYSCOMMAND, SC_MINIMIZE, 0); 
	sprintf(byTemp, "%s%s", _AS->byProgramPath, T_HelpFile); 
	ShellExecute(0, "open", byTemp, 0, 0, SW_SHOW); 
} // end OpenHelp() 
 
 
/////////////////////////////////////////////////////////////////////////////// 
// SETUP functions: 
 
SETUP::SETUP(void) 
{ // begin SETUP::SETUP() 
	bShowHud = TRUE; 
} // end SETUP::SETUP() 
 
///////////////////////////////////////////////////////////////////////////////