224 lines
6.1 KiB
C++
224 lines
6.1 KiB
C++
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: Configuration utility
|
||
|
//
|
||
|
//===========================================================================//
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <io.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
#include <vgui/ILocalize.h>
|
||
|
#include <vgui/ISurface.h>
|
||
|
#include <vgui/IVGui.h>
|
||
|
#include <vgui_controls/Panel.h>
|
||
|
|
||
|
#include "appframework/tier3app.h"
|
||
|
#include "tier0/icommandline.h"
|
||
|
#include "inputsystem/iinputsystem.h"
|
||
|
#include "matsys_controls/QCGenerator.h"
|
||
|
#include "filesystem_init.h"
|
||
|
#include "CQCGenMain.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include <tier0/memdbgon.h>
|
||
|
|
||
|
#define QCGENERATOR_MAIN_PATH_ID "MAIN"
|
||
|
#define QCGENERATOR_WRITE_PATH "DEFAULT_WRITE_PATH"
|
||
|
|
||
|
CQCGenMain *g_pMainFrame = 0;
|
||
|
|
||
|
// Dummy window
|
||
|
static WNDCLASS staticWndclass = { NULL };
|
||
|
static ATOM staticWndclassAtom = 0;
|
||
|
static HWND staticHwnd = 0;
|
||
|
|
||
|
// List of our game configs, as read from the gameconfig.txt file
|
||
|
//HANDLE g_dwChangeHandle = NULL;
|
||
|
|
||
|
char pszPath[MAX_PATH];
|
||
|
char pszScene[MAX_PATH];
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Copy a string into a CUtlVector of characters
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void UtlStrcpy( CUtlVector<char> &dest, const char *pSrc )
|
||
|
{
|
||
|
dest.EnsureCount( (int) (strlen( pSrc ) + 1) );
|
||
|
Q_strncpy( dest.Base(), pSrc, dest.Count() );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : const char
|
||
|
//-----------------------------------------------------------------------------
|
||
|
const char *GetBaseDirectory( void )
|
||
|
{
|
||
|
static char path[MAX_PATH] = {0};
|
||
|
if ( path[0] == 0 )
|
||
|
{
|
||
|
GetModuleFileName( (HMODULE)GetAppInstance(), path, sizeof( path ) );
|
||
|
Q_StripLastDir( path, sizeof( path ) ); // Get rid of the filename.
|
||
|
Q_StripTrailingSlash( path );
|
||
|
}
|
||
|
return path;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Setup all our VGUI info
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void InitializeVGUI( void )
|
||
|
{
|
||
|
vgui::ivgui()->SetSleep(false);
|
||
|
|
||
|
// Init the surface
|
||
|
vgui::Panel *pPanel = new vgui::Panel( NULL, "TopPanel" );
|
||
|
pPanel->SetVisible(true);
|
||
|
|
||
|
vgui::surface()->SetEmbeddedPanel(pPanel->GetVPanel());
|
||
|
|
||
|
// load the scheme
|
||
|
vgui::scheme()->LoadSchemeFromFile( "resource/sourcescheme.res", NULL );
|
||
|
|
||
|
// localization
|
||
|
g_pVGuiLocalize->AddFile( "resource/platform_%language%.txt");
|
||
|
g_pVGuiLocalize->AddFile( "resource/vgui_%language%.txt");
|
||
|
g_pVGuiLocalize->AddFile( "QCGenerator_english.txt");
|
||
|
|
||
|
// Start vgui
|
||
|
vgui::ivgui()->Start();
|
||
|
|
||
|
// add our main window
|
||
|
g_pMainFrame = new CQCGenMain( pPanel, pszPath, pszScene, "CQCGenMain" );
|
||
|
|
||
|
// show main window
|
||
|
g_pMainFrame->MoveToCenterOfScreen();
|
||
|
g_pMainFrame->Activate();
|
||
|
g_pMainFrame->SetSizeable( true );
|
||
|
g_pMainFrame->SetMenuButtonVisible( true );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Stop VGUI
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void ShutdownVGUI( void )
|
||
|
{
|
||
|
delete g_pMainFrame;
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// The application object
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CQCGeneratorApp : public CVguiSteamApp
|
||
|
{
|
||
|
typedef CVguiSteamApp BaseClass;
|
||
|
|
||
|
public:
|
||
|
// Methods of IApplication
|
||
|
virtual bool Create();
|
||
|
virtual bool PreInit();
|
||
|
virtual int Main();
|
||
|
virtual void PostShutdown();
|
||
|
virtual void Destroy() {}
|
||
|
};
|
||
|
|
||
|
DEFINE_WINDOWED_STEAM_APPLICATION_OBJECT( CQCGeneratorApp );
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// The application object
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CQCGeneratorApp::Create()
|
||
|
{
|
||
|
AppSystemInfo_t appSystems[] =
|
||
|
{
|
||
|
{ "inputsystem.dll", INPUTSYSTEM_INTERFACE_VERSION },
|
||
|
{ "vgui2.dll", VGUI_IVGUI_INTERFACE_VERSION },
|
||
|
{ "", "" } // Required to terminate the list
|
||
|
};
|
||
|
|
||
|
return AddSystems( appSystems );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Entry point
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CQCGeneratorApp::PreInit()
|
||
|
{
|
||
|
if ( !BaseClass::PreInit() )
|
||
|
return false;
|
||
|
|
||
|
FileSystem_SetErrorMode( FS_ERRORMODE_AUTO );
|
||
|
|
||
|
// We only want to use the gameinfo.txt that is in the bin\vconfig directory.
|
||
|
char dirName[MAX_PATH];
|
||
|
Q_strncpy( dirName, GetBaseDirectory(), sizeof( dirName ) );
|
||
|
Q_AppendSlash( dirName, sizeof( dirName ) );
|
||
|
Q_strncat( dirName, "QCGenerator", sizeof( dirName ), COPY_ALL_CHARACTERS );
|
||
|
|
||
|
if ( !BaseClass::SetupSearchPaths( dirName, true, true ) )
|
||
|
{
|
||
|
::MessageBox( NULL, "Error", "Unable to initialize file system\n", MB_OK );
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// the "base dir" so we can scan mod name
|
||
|
g_pFullFileSystem->AddSearchPath( GetBaseDirectory(), QCGENERATOR_MAIN_PATH_ID );
|
||
|
|
||
|
// the main platform dir
|
||
|
g_pFullFileSystem->AddSearchPath( "platform", "PLATFORM", PATH_ADD_TO_HEAD );
|
||
|
g_pFullFileSystem->AddSearchPath( ".\\QCGenerator\\", QCGENERATOR_WRITE_PATH, PATH_ADD_TO_HEAD );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CQCGeneratorApp::PostShutdown()
|
||
|
{
|
||
|
BaseClass::PostShutdown();
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Entry point
|
||
|
//-----------------------------------------------------------------------------
|
||
|
int CQCGeneratorApp::Main()
|
||
|
{
|
||
|
if ( CommandLine()->ParmValue( "-path" ) )
|
||
|
{
|
||
|
Q_strcpy( pszPath, CommandLine()->ParmValue( "-path" ) );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
::MessageBox( NULL, "Usage: QCGenerator.exe -path [path to smd files] -scene [name of scene]\n", "Error", MB_OK );
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if ( CommandLine()->ParmValue( "-scene" ) )
|
||
|
{
|
||
|
Q_strcpy( pszScene, CommandLine()->ParmValue( "-scene" ) );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
::MessageBox( NULL, "Usage: QCGenerator.exe -path [path to smd files] -scene [name of scene]\n", "Error", MB_OK );
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// Run app frame loop
|
||
|
InitializeVGUI();
|
||
|
|
||
|
// Run the app
|
||
|
while (vgui::ivgui()->IsRunning())
|
||
|
{
|
||
|
Sleep( 10 );
|
||
|
vgui::ivgui()->RunFrame();
|
||
|
}
|
||
|
|
||
|
ShutdownVGUI();
|
||
|
|
||
|
return 1;
|
||
|
}
|