diff options
Diffstat (limited to 'sp/src/game/client/toolframework_client.cpp')
| -rw-r--r-- | sp/src/game/client/toolframework_client.cpp | 712 |
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(); +} |