diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/QCGenerator/main.cpp | |
| download | archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip | |
Diffstat (limited to 'utils/QCGenerator/main.cpp')
| -rw-r--r-- | utils/QCGenerator/main.cpp | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/utils/QCGenerator/main.cpp b/utils/QCGenerator/main.cpp new file mode 100644 index 0000000..67c30dd --- /dev/null +++ b/utils/QCGenerator/main.cpp @@ -0,0 +1,223 @@ +//========= 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; +} |