mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-25 11:45:53 +01:00
175 lines
4.9 KiB
C++
175 lines
4.9 KiB
C++
|
/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
|
||
|
|
||
|
// 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);
|
||
|
}
|