123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /* Copyright (c) 2002-2012 Croteam Ltd.
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as published by
- the Free Software Foundation
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
- // GameGUI.cpp : Defines the entry point for the DLL application.
- //
- #include "stdafx.h"
- #ifdef _DEBUG
- #define GAMEGUI_DLL_NAME "GameGUIMPD.dll"
- #else
- #define GAMEGUI_DLL_NAME "GameGUIMP.dll"
- #endif
- extern CGame *_pGame = NULL;
- // global game object
- CGameGUI _GameGUI;
- static struct GameGUI_interface _Interface;
- // initialize game and load settings
- void Initialize(const CTFileName &fnGameSettings)
- {
- try {
- #ifndef NDEBUG
- #define GAMEDLL "Bin\\Debug\\GameMPD.dll"
- #else
- #define GAMEDLL "Bin\\GameMP.dll"
- #endif
- CTFileName fnmExpanded;
- ExpandFilePath(EFP_READ, CTString(GAMEDLL), fnmExpanded);
- HMODULE hGame = LoadLibraryA(fnmExpanded);
- if (hGame==NULL) {
- ThrowF_t("%s", GetWindowsError(GetLastError()));
- }
- CGame* (*GAME_Create)(void) = (CGame* (*)(void))GetProcAddress(hGame, "GAME_Create");
- if (GAME_Create==NULL) {
- ThrowF_t("%s", GetWindowsError(GetLastError()));
- }
- _pGame = GAME_Create();
- } catch (char *strError) {
- FatalError("%s", strError);
- }
- // init game - this will load persistent symbols
- _pGame->Initialize(fnGameSettings);
- }
- // save settings and cleanup
- void End(void)
- {
- _pGame->End();
- }
- // run a quicktest game from within editor
- void QuickTest(const CTFileName &fnMapName, CDrawPort *pdpDrawport, CViewPort *pvpViewport)
- {
- _pGame->QuickTest(fnMapName, pdpDrawport, pvpViewport);
- }
- // show console window
- void OnInvokeConsole(void)
- {
- _GameGUI.OnInvokeConsole();
- }
- // adjust players and controls
- void OnPlayerSettings(void)
- {
- _GameGUI.OnPlayerSettings();
- }
- // adjust audio settings
- void OnAudioQuality(void)
- {
- _GameGUI.OnAudioQuality();
- }
- // adjust video settings
- void OnVideoQuality(void)
- {
- _GameGUI.OnVideoQuality();
- }
- // select current active player and controls
- void OnSelectPlayerAndControls(void)
- {
- _GameGUI.OnSelectPlayerAndControls();
- }
- extern "C" _declspec(dllexport) struct GameGUI_interface *GAMEGUI_Create(void)
- {
- _Interface.Initialize = ::Initialize ;
- _Interface.End = ::End ;
- _Interface.QuickTest = ::QuickTest ;
- _Interface.OnInvokeConsole = ::OnInvokeConsole ;
- _Interface.OnPlayerSettings = ::OnPlayerSettings ;
- _Interface.OnAudioQuality = ::OnAudioQuality ;
- _Interface.OnVideoQuality = ::OnVideoQuality ;
- _Interface.OnSelectPlayerAndControls = ::OnSelectPlayerAndControls ;
- return &_Interface;
- }
- static int iDialogResult;
- #define CALL_DIALOG( class_name, dlg_name) \
- try { \
- _pGame->Load_t(); \
- } \
- catch( char *pError) { \
- (void) pError; \
- } \
- HANDLE hOldResource = AfxGetResourceHandle(); \
- class_name dlg_name; \
- AfxSetResourceHandle( GetModuleHandleA(GAMEGUI_DLL_NAME) ); \
- iDialogResult = dlg_name.DoModal(); \
- AfxSetResourceHandle( (HINSTANCE) hOldResource); \
- if( iDialogResult == IDOK) \
- try { \
- _pGame->Save_t(); \
- } \
- catch( char *pError) { \
- AfxMessageBox( CString(pError)); \
- iDialogResult = IDCANCEL; \
- }
- /*
- We cannot use dllmain if using MFC.
- See MSDN article "Regular DLLs Dynamically Linked to MFC" if initialization is needed.
- BOOL APIENTRY DllMain( HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
- }
- */
- /////////////////////////////////////////////////////////////////////////////
- // global routines called trough game's application menu
- void CGameGUI::OnInvokeConsole(void)
- {
- CALL_DIALOG( CDlgConsole, dlgConsole);
- }
- void CGameGUI::OnPlayerSettings(void)
- {
- //CALL_DIALOG( CDlgPlayerSettings, dlgPlayerSettings);
- }
- void CGameGUI::OnAudioQuality(void)
- {
- CALL_DIALOG( CDlgAudioQuality, dlgAudioQuality);
- }
- void CGameGUI::OnVideoQuality(void)
- {
- CALL_DIALOG( CDlgVideoQuality, dlgVideoQuality);
- }
- void CGameGUI::OnSelectPlayerAndControls(void)
- {
- //CALL_DIALOG( CDlgSelectPlayer, dlgSelectPlayerAndControls);
- }
|