You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
6.1 KiB
223 lines
6.1 KiB
//========= 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; |
|
}
|
|
|