aboutsummaryrefslogtreecommitdiff
path: root/sp/src/game/client/toolframework_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sp/src/game/client/toolframework_client.cpp')
-rw-r--r--sp/src/game/client/toolframework_client.cpp712
1 files changed, 356 insertions, 356 deletions
diff --git a/sp/src/game/client/toolframework_client.cpp b/sp/src/game/client/toolframework_client.cpp
index d07c38b2..5e7dfa22 100644
--- a/sp/src/game/client/toolframework_client.cpp
+++ b/sp/src/game/client/toolframework_client.cpp
@@ -1,356 +1,356 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-//===========================================================================//
-
-#include "cbase.h"
-#include "toolframework_client.h"
-#include "igamesystem.h"
-#include "tier1/KeyValues.h"
-#include "toolframework/iclientenginetools.h"
-#include "client_factorylist.h"
-#include "iviewrender.h"
-#include "materialsystem/imaterialvar.h"
-
-extern IViewRender *view;
-
-class CToolFrameworkClient : public CBaseGameSystemPerFrame
-{
-public:
- // Methods of IGameSystem
- virtual bool Init();
- virtual void LevelInitPreEntity();
- virtual void LevelInitPostEntity();
- virtual void LevelShutdownPreEntity();
- virtual void LevelShutdownPostEntity();
- virtual void PreRender();
- virtual void PostRender();
-
-public:
- // Other public methods
- void PostToolMessage( HTOOLHANDLE hEntity, KeyValues *msg );
- void AdjustEngineViewport( int& x, int& y, int& width, int& height );
- bool SetupEngineView( Vector &origin, QAngle &angles, float &fov );
- bool SetupAudioState( AudioState_t &audioState );
- bool IsThirdPersonCamera();
-
- IClientEngineTools *m_pTools;
-};
-
-
-//-----------------------------------------------------------------------------
-// Singleton
-//-----------------------------------------------------------------------------
-static CToolFrameworkClient g_ToolFrameworkClient;
-
-#ifndef NO_TOOLFRAMEWORK
-
-bool ToolsEnabled()
-{
- return g_ToolFrameworkClient.m_pTools && g_ToolFrameworkClient.m_pTools->InToolMode();
-}
-
-#endif
-
-IGameSystem *ToolFrameworkClientSystem()
-{
- return &g_ToolFrameworkClient;
-}
-
-
-bool CToolFrameworkClient::Init()
-{
- factorylist_t list;
- FactoryList_Retrieve( list );
-
- m_pTools = ( IClientEngineTools * )list.appSystemFactory( VCLIENTENGINETOOLS_INTERFACE_VERSION, NULL );
- return ( m_pTools != NULL );
-}
-
-void CToolFrameworkClient::LevelInitPreEntity()
-{
- if ( m_pTools )
- {
- m_pTools->LevelInitPreEntityAllTools();
- }
-}
-
-void CToolFrameworkClient::LevelInitPostEntity()
-{
- if ( m_pTools )
- {
- m_pTools->LevelInitPostEntityAllTools();
- }
-}
-
-void CToolFrameworkClient::LevelShutdownPreEntity()
-{
- if ( m_pTools )
- {
- m_pTools->LevelShutdownPreEntityAllTools();
- }
-}
-
-void CToolFrameworkClient::LevelShutdownPostEntity()
-{
- if ( m_pTools )
- {
- m_pTools->LevelShutdownPostEntityAllTools();
- }
-}
-
-void CToolFrameworkClient::PreRender()
-{
- if ( m_pTools )
- {
- m_pTools->PreRenderAllTools();
- }
-}
-
-void CToolFrameworkClient::PostRender()
-{
- if ( m_pTools )
- {
- m_pTools->PostRenderAllTools();
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// Should we render with a 3rd person camera?
-//-----------------------------------------------------------------------------
-bool CToolFrameworkClient::IsThirdPersonCamera()
-{
- if ( !m_pTools )
- return false;
- return m_pTools->IsThirdPersonCamera( );
-}
-
-bool ToolFramework_IsThirdPersonCamera( )
-{
- return g_ToolFrameworkClient.IsThirdPersonCamera( );
-}
-
-
-//-----------------------------------------------------------------------------
-// Posts a message to all tools
-//-----------------------------------------------------------------------------
-void CToolFrameworkClient::PostToolMessage( HTOOLHANDLE hEntity, KeyValues *msg )
-{
- if ( m_pTools )
- {
- m_pTools->PostToolMessage( hEntity, msg );
- }
-}
-
-void ToolFramework_PostToolMessage( HTOOLHANDLE hEntity, KeyValues *msg )
-{
- g_ToolFrameworkClient.PostToolMessage( hEntity, msg );
-}
-
-
-//-----------------------------------------------------------------------------
-// View manipulation
-//-----------------------------------------------------------------------------
-void CToolFrameworkClient::AdjustEngineViewport( int& x, int& y, int& width, int& height )
-{
- if ( m_pTools )
- {
- m_pTools->AdjustEngineViewport( x, y, width, height );
- }
-}
-
-void ToolFramework_AdjustEngineViewport( int& x, int& y, int& width, int& height )
-{
- g_ToolFrameworkClient.AdjustEngineViewport( x, y, width, height );
-}
-
-
-//-----------------------------------------------------------------------------
-// View manipulation
-//-----------------------------------------------------------------------------
-bool CToolFrameworkClient::SetupEngineView( Vector &origin, QAngle &angles, float &fov )
-{
- if ( !m_pTools )
- return false;
-
- return m_pTools->SetupEngineView( origin, angles, fov );
-}
-
-bool ToolFramework_SetupEngineView( Vector &origin, QAngle &angles, float &fov )
-{
- return g_ToolFrameworkClient.SetupEngineView( origin, angles, fov );
-}
-
-//-----------------------------------------------------------------------------
-// microphone manipulation
-//-----------------------------------------------------------------------------
-bool CToolFrameworkClient::SetupAudioState( AudioState_t &audioState )
-{
- if ( !m_pTools )
- return false;
-
- return m_pTools->SetupAudioState( audioState );
-}
-
-bool ToolFramework_SetupAudioState( AudioState_t &audioState )
-{
- return g_ToolFrameworkClient.SetupAudioState( audioState );
-}
-
-
-//-----------------------------------------------------------------------------
-// Helper class to indicate ownership of effects
-//-----------------------------------------------------------------------------
-CRecordEffectOwner::CRecordEffectOwner( C_BaseEntity *pEntity, bool bIsViewModel )
-{
- m_bToolsEnabled = ToolsEnabled() && clienttools->IsInRecordingMode();
- if ( m_bToolsEnabled )
- {
- KeyValues *msg = new KeyValues( "EffectsOwner" );
- msg->SetInt( "viewModel", bIsViewModel );
- ToolFramework_PostToolMessage( pEntity ? pEntity->GetToolHandle() : HTOOLHANDLE_INVALID, msg );
- msg->deleteThis();
- }
-}
-
-CRecordEffectOwner::~CRecordEffectOwner()
-{
- if ( m_bToolsEnabled )
- {
- KeyValues *msg = new KeyValues( "EffectsOwner" );
- ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg );
- msg->deleteThis();
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// material recording - primarily for proxy materials
-//-----------------------------------------------------------------------------
-
-void WriteFloat( char *&buf, float f)
-{
- *( float* )buf = f;
- buf += sizeof( float );
-}
-
-void WriteInt( char *&buf, int i )
-{
- *( int* )buf = i;
- buf += sizeof( int );
-}
-
-void WritePtr( char *&buf, void *p )
-{
- *( void** )buf = p;
- buf += sizeof( void* );
-}
-
-void ToolFramework_RecordMaterialParams( IMaterial *pMaterial )
-{
- Assert( pMaterial );
- if ( !pMaterial )
- return;
-
- if ( !clienttools->IsInRecordingMode() )
- return;
-
- C_BaseEntity *pEnt = view->GetCurrentlyDrawingEntity();
- if ( !pEnt || !pEnt->IsToolRecording() )
- return;
-
- KeyValues *msg = new KeyValues( "material_proxy_state" );
- msg->SetString( "mtlName", pMaterial->GetName() );
- msg->SetString( "groupName", pMaterial->GetTextureGroupName() );
-
- int nParams = pMaterial->ShaderParamCount();
- IMaterialVar **pParams = pMaterial->GetShaderParams();
-
- char str[ 256 ];
-
- for ( int i = 0; i < nParams; ++i )
- {
- IMaterialVar *pVar = pParams[ i ];
- const char *pVarName = pVar->GetName();
- MaterialVarType_t vartype = pVar->GetType();
- switch ( vartype )
- {
- case MATERIAL_VAR_TYPE_FLOAT:
- msg->SetFloat( pVarName, pVar->GetFloatValue() );
- break;
-
- case MATERIAL_VAR_TYPE_INT:
- msg->SetInt( pVarName, pVar->GetIntValue() );
- break;
-
- case MATERIAL_VAR_TYPE_STRING:
- msg->SetString( pVarName, pVar->GetStringValue() );
- break;
-
- case MATERIAL_VAR_TYPE_FOURCC:
- Assert( 0 ); // JDTODO
- break;
-
- case MATERIAL_VAR_TYPE_VECTOR:
- {
- const float *pVal = pVar->GetVecValue();
- int dim = pVar->VectorSize();
- switch ( dim )
- {
- case 2:
- V_snprintf( str, sizeof( str ), "vector2d: %f %f", pVal[ 0 ], pVal[ 1 ] );
- break;
- case 3:
- V_snprintf( str, sizeof( str ), "vector3d: %f %f %f", pVal[ 0 ], pVal[ 1 ], pVal[ 2 ] );
- break;
- case 4:
- V_snprintf( str, sizeof( str ), "vector4d: %f %f %f %f", pVal[ 0 ], pVal[ 1 ], pVal[ 2 ], pVal[ 3 ] );
- break;
- default:
- Assert( 0 );
- *str = 0;
- }
- msg->SetString( pVarName, str );
- }
- break;
-
- case MATERIAL_VAR_TYPE_MATRIX:
- {
- const VMatrix &matrix = pVar->GetMatrixValue();
- const float *pVal = matrix.Base();
- V_snprintf( str, sizeof( str ),
- "matrix: %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f",
- pVal[ 0 ], pVal[ 1 ], pVal[ 2 ], pVal[ 3 ],
- pVal[ 4 ], pVal[ 5 ], pVal[ 6 ], pVal[ 7 ],
- pVal[ 8 ], pVal[ 9 ], pVal[ 10 ], pVal[ 11 ],
- pVal[ 12 ], pVal[ 13 ], pVal[ 14 ], pVal[ 15 ] );
- msg->SetString( pVarName, str );
- }
- break;
-
- case MATERIAL_VAR_TYPE_TEXTURE:
- // V_snprintf( str, sizeof( str ), "texture: %x", pVar->GetTextureValue() );
- // msg->SetString( pVarName, str );
- break;
-
- case MATERIAL_VAR_TYPE_MATERIAL:
- // V_snprintf( str, sizeof( str ), "material: %x", pVar->GetMaterialValue() );
- // msg->SetString( pVarName, str );
- break;
-
- case MATERIAL_VAR_TYPE_UNDEFINED:
- // Assert( 0 ); // these appear to be (mostly? all?) textures, although I don't know why they're not caught by the texture case above...
- break; // JDTODO
-
- default:
- Assert( 0 );
- }
- }
-
- Assert( pEnt->GetToolHandle() );
- ToolFramework_PostToolMessage( pEnt->GetToolHandle(), msg );
-
- msg->deleteThis();
-}
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//===========================================================================//
+
+#include "cbase.h"
+#include "toolframework_client.h"
+#include "igamesystem.h"
+#include "tier1/KeyValues.h"
+#include "toolframework/iclientenginetools.h"
+#include "client_factorylist.h"
+#include "iviewrender.h"
+#include "materialsystem/imaterialvar.h"
+
+extern IViewRender *view;
+
+class CToolFrameworkClient : public CBaseGameSystemPerFrame
+{
+public:
+ // Methods of IGameSystem
+ virtual bool Init();
+ virtual void LevelInitPreEntity();
+ virtual void LevelInitPostEntity();
+ virtual void LevelShutdownPreEntity();
+ virtual void LevelShutdownPostEntity();
+ virtual void PreRender();
+ virtual void PostRender();
+
+public:
+ // Other public methods
+ void PostToolMessage( HTOOLHANDLE hEntity, KeyValues *msg );
+ void AdjustEngineViewport( int& x, int& y, int& width, int& height );
+ bool SetupEngineView( Vector &origin, QAngle &angles, float &fov );
+ bool SetupAudioState( AudioState_t &audioState );
+ bool IsThirdPersonCamera();
+
+ IClientEngineTools *m_pTools;
+};
+
+
+//-----------------------------------------------------------------------------
+// Singleton
+//-----------------------------------------------------------------------------
+static CToolFrameworkClient g_ToolFrameworkClient;
+
+#ifndef NO_TOOLFRAMEWORK
+
+bool ToolsEnabled()
+{
+ return g_ToolFrameworkClient.m_pTools && g_ToolFrameworkClient.m_pTools->InToolMode();
+}
+
+#endif
+
+IGameSystem *ToolFrameworkClientSystem()
+{
+ return &g_ToolFrameworkClient;
+}
+
+
+bool CToolFrameworkClient::Init()
+{
+ factorylist_t list;
+ FactoryList_Retrieve( list );
+
+ m_pTools = ( IClientEngineTools * )list.appSystemFactory( VCLIENTENGINETOOLS_INTERFACE_VERSION, NULL );
+ return ( m_pTools != NULL );
+}
+
+void CToolFrameworkClient::LevelInitPreEntity()
+{
+ if ( m_pTools )
+ {
+ m_pTools->LevelInitPreEntityAllTools();
+ }
+}
+
+void CToolFrameworkClient::LevelInitPostEntity()
+{
+ if ( m_pTools )
+ {
+ m_pTools->LevelInitPostEntityAllTools();
+ }
+}
+
+void CToolFrameworkClient::LevelShutdownPreEntity()
+{
+ if ( m_pTools )
+ {
+ m_pTools->LevelShutdownPreEntityAllTools();
+ }
+}
+
+void CToolFrameworkClient::LevelShutdownPostEntity()
+{
+ if ( m_pTools )
+ {
+ m_pTools->LevelShutdownPostEntityAllTools();
+ }
+}
+
+void CToolFrameworkClient::PreRender()
+{
+ if ( m_pTools )
+ {
+ m_pTools->PreRenderAllTools();
+ }
+}
+
+void CToolFrameworkClient::PostRender()
+{
+ if ( m_pTools )
+ {
+ m_pTools->PostRenderAllTools();
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Should we render with a 3rd person camera?
+//-----------------------------------------------------------------------------
+bool CToolFrameworkClient::IsThirdPersonCamera()
+{
+ if ( !m_pTools )
+ return false;
+ return m_pTools->IsThirdPersonCamera( );
+}
+
+bool ToolFramework_IsThirdPersonCamera( )
+{
+ return g_ToolFrameworkClient.IsThirdPersonCamera( );
+}
+
+
+//-----------------------------------------------------------------------------
+// Posts a message to all tools
+//-----------------------------------------------------------------------------
+void CToolFrameworkClient::PostToolMessage( HTOOLHANDLE hEntity, KeyValues *msg )
+{
+ if ( m_pTools )
+ {
+ m_pTools->PostToolMessage( hEntity, msg );
+ }
+}
+
+void ToolFramework_PostToolMessage( HTOOLHANDLE hEntity, KeyValues *msg )
+{
+ g_ToolFrameworkClient.PostToolMessage( hEntity, msg );
+}
+
+
+//-----------------------------------------------------------------------------
+// View manipulation
+//-----------------------------------------------------------------------------
+void CToolFrameworkClient::AdjustEngineViewport( int& x, int& y, int& width, int& height )
+{
+ if ( m_pTools )
+ {
+ m_pTools->AdjustEngineViewport( x, y, width, height );
+ }
+}
+
+void ToolFramework_AdjustEngineViewport( int& x, int& y, int& width, int& height )
+{
+ g_ToolFrameworkClient.AdjustEngineViewport( x, y, width, height );
+}
+
+
+//-----------------------------------------------------------------------------
+// View manipulation
+//-----------------------------------------------------------------------------
+bool CToolFrameworkClient::SetupEngineView( Vector &origin, QAngle &angles, float &fov )
+{
+ if ( !m_pTools )
+ return false;
+
+ return m_pTools->SetupEngineView( origin, angles, fov );
+}
+
+bool ToolFramework_SetupEngineView( Vector &origin, QAngle &angles, float &fov )
+{
+ return g_ToolFrameworkClient.SetupEngineView( origin, angles, fov );
+}
+
+//-----------------------------------------------------------------------------
+// microphone manipulation
+//-----------------------------------------------------------------------------
+bool CToolFrameworkClient::SetupAudioState( AudioState_t &audioState )
+{
+ if ( !m_pTools )
+ return false;
+
+ return m_pTools->SetupAudioState( audioState );
+}
+
+bool ToolFramework_SetupAudioState( AudioState_t &audioState )
+{
+ return g_ToolFrameworkClient.SetupAudioState( audioState );
+}
+
+
+//-----------------------------------------------------------------------------
+// Helper class to indicate ownership of effects
+//-----------------------------------------------------------------------------
+CRecordEffectOwner::CRecordEffectOwner( C_BaseEntity *pEntity, bool bIsViewModel )
+{
+ m_bToolsEnabled = ToolsEnabled() && clienttools->IsInRecordingMode();
+ if ( m_bToolsEnabled )
+ {
+ KeyValues *msg = new KeyValues( "EffectsOwner" );
+ msg->SetInt( "viewModel", bIsViewModel );
+ ToolFramework_PostToolMessage( pEntity ? pEntity->GetToolHandle() : HTOOLHANDLE_INVALID, msg );
+ msg->deleteThis();
+ }
+}
+
+CRecordEffectOwner::~CRecordEffectOwner()
+{
+ if ( m_bToolsEnabled )
+ {
+ KeyValues *msg = new KeyValues( "EffectsOwner" );
+ ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg );
+ msg->deleteThis();
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// material recording - primarily for proxy materials
+//-----------------------------------------------------------------------------
+
+void WriteFloat( char *&buf, float f)
+{
+ *( float* )buf = f;
+ buf += sizeof( float );
+}
+
+void WriteInt( char *&buf, int i )
+{
+ *( int* )buf = i;
+ buf += sizeof( int );
+}
+
+void WritePtr( char *&buf, void *p )
+{
+ *( void** )buf = p;
+ buf += sizeof( void* );
+}
+
+void ToolFramework_RecordMaterialParams( IMaterial *pMaterial )
+{
+ Assert( pMaterial );
+ if ( !pMaterial )
+ return;
+
+ if ( !clienttools->IsInRecordingMode() )
+ return;
+
+ C_BaseEntity *pEnt = view->GetCurrentlyDrawingEntity();
+ if ( !pEnt || !pEnt->IsToolRecording() )
+ return;
+
+ KeyValues *msg = new KeyValues( "material_proxy_state" );
+ msg->SetString( "mtlName", pMaterial->GetName() );
+ msg->SetString( "groupName", pMaterial->GetTextureGroupName() );
+
+ int nParams = pMaterial->ShaderParamCount();
+ IMaterialVar **pParams = pMaterial->GetShaderParams();
+
+ char str[ 256 ];
+
+ for ( int i = 0; i < nParams; ++i )
+ {
+ IMaterialVar *pVar = pParams[ i ];
+ const char *pVarName = pVar->GetName();
+ MaterialVarType_t vartype = pVar->GetType();
+ switch ( vartype )
+ {
+ case MATERIAL_VAR_TYPE_FLOAT:
+ msg->SetFloat( pVarName, pVar->GetFloatValue() );
+ break;
+
+ case MATERIAL_VAR_TYPE_INT:
+ msg->SetInt( pVarName, pVar->GetIntValue() );
+ break;
+
+ case MATERIAL_VAR_TYPE_STRING:
+ msg->SetString( pVarName, pVar->GetStringValue() );
+ break;
+
+ case MATERIAL_VAR_TYPE_FOURCC:
+ Assert( 0 ); // JDTODO
+ break;
+
+ case MATERIAL_VAR_TYPE_VECTOR:
+ {
+ const float *pVal = pVar->GetVecValue();
+ int dim = pVar->VectorSize();
+ switch ( dim )
+ {
+ case 2:
+ V_snprintf( str, sizeof( str ), "vector2d: %f %f", pVal[ 0 ], pVal[ 1 ] );
+ break;
+ case 3:
+ V_snprintf( str, sizeof( str ), "vector3d: %f %f %f", pVal[ 0 ], pVal[ 1 ], pVal[ 2 ] );
+ break;
+ case 4:
+ V_snprintf( str, sizeof( str ), "vector4d: %f %f %f %f", pVal[ 0 ], pVal[ 1 ], pVal[ 2 ], pVal[ 3 ] );
+ break;
+ default:
+ Assert( 0 );
+ *str = 0;
+ }
+ msg->SetString( pVarName, str );
+ }
+ break;
+
+ case MATERIAL_VAR_TYPE_MATRIX:
+ {
+ const VMatrix &matrix = pVar->GetMatrixValue();
+ const float *pVal = matrix.Base();
+ V_snprintf( str, sizeof( str ),
+ "matrix: %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f",
+ pVal[ 0 ], pVal[ 1 ], pVal[ 2 ], pVal[ 3 ],
+ pVal[ 4 ], pVal[ 5 ], pVal[ 6 ], pVal[ 7 ],
+ pVal[ 8 ], pVal[ 9 ], pVal[ 10 ], pVal[ 11 ],
+ pVal[ 12 ], pVal[ 13 ], pVal[ 14 ], pVal[ 15 ] );
+ msg->SetString( pVarName, str );
+ }
+ break;
+
+ case MATERIAL_VAR_TYPE_TEXTURE:
+ // V_snprintf( str, sizeof( str ), "texture: %x", pVar->GetTextureValue() );
+ // msg->SetString( pVarName, str );
+ break;
+
+ case MATERIAL_VAR_TYPE_MATERIAL:
+ // V_snprintf( str, sizeof( str ), "material: %x", pVar->GetMaterialValue() );
+ // msg->SetString( pVarName, str );
+ break;
+
+ case MATERIAL_VAR_TYPE_UNDEFINED:
+ // Assert( 0 ); // these appear to be (mostly? all?) textures, although I don't know why they're not caught by the texture case above...
+ break; // JDTODO
+
+ default:
+ Assert( 0 );
+ }
+ }
+
+ Assert( pEnt->GetToolHandle() );
+ ToolFramework_PostToolMessage( pEnt->GetToolHandle(), msg );
+
+ msg->deleteThis();
+}