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.
158 lines
4.8 KiB
158 lines
4.8 KiB
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =====//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//===========================================================================//
|
|
|
|
#ifndef TOOLFRAMEWORK_CLIENT_H
|
|
#define TOOLFRAMEWORK_CLIENT_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "toolframework/itoolentity.h"
|
|
#include "vstdlib/ikeyvaluessystem.h"
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
class KeyValues;
|
|
struct AudioState_t;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Posts a message to all tools
|
|
//-----------------------------------------------------------------------------
|
|
void ToolFramework_PostToolMessage( HTOOLHANDLE hEntity, KeyValues *msg );
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Should we render with a 3rd person camera?
|
|
//-----------------------------------------------------------------------------
|
|
bool ToolFramework_IsThirdPersonCamera( );
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Are tools enabled?
|
|
//-----------------------------------------------------------------------------
|
|
#ifndef NO_TOOLFRAMEWORK
|
|
bool ToolsEnabled();
|
|
#else
|
|
#define ToolsEnabled() 0
|
|
#endif
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Recorded temp entity structures
|
|
//-----------------------------------------------------------------------------
|
|
enum TERecordingType_t
|
|
{
|
|
TE_DYNAMIC_LIGHT = 0,
|
|
TE_WORLD_DECAL,
|
|
TE_DISPATCH_EFFECT,
|
|
TE_MUZZLE_FLASH,
|
|
TE_ARMOR_RICOCHET,
|
|
TE_METAL_SPARKS,
|
|
TE_SMOKE,
|
|
TE_SPARKS,
|
|
TE_BLOOD_SPRITE,
|
|
TE_BREAK_MODEL,
|
|
TE_GLOW_SPRITE,
|
|
TE_PHYSICS_PROP,
|
|
TE_SPRITE_SINGLE,
|
|
TE_SPRITE_SPRAY,
|
|
TE_CONCUSSIVE_EXPLOSION,
|
|
TE_BLOOD_STREAM,
|
|
TE_SHATTER_SURFACE,
|
|
TE_DECAL,
|
|
TE_PROJECT_DECAL,
|
|
TE_EXPLOSION,
|
|
|
|
TE_RECORDING_TYPE_COUNT,
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// View manipulation
|
|
//-----------------------------------------------------------------------------
|
|
void ToolFramework_AdjustEngineViewport( int& x, int& y, int& width, int& height );
|
|
bool ToolFramework_SetupEngineView( Vector &origin, QAngle &angles, float &fov );
|
|
bool ToolFramework_SetupAudioState( AudioState_t &audioState );
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Helper class to indicate ownership of effects
|
|
//-----------------------------------------------------------------------------
|
|
class CRecordEffectOwner
|
|
{
|
|
public:
|
|
CRecordEffectOwner( C_BaseEntity *pEntity, bool bIsViewModel = false );
|
|
~CRecordEffectOwner();
|
|
|
|
private:
|
|
bool m_bToolsEnabled;
|
|
};
|
|
|
|
|
|
|
|
//only ever create global/static instances of this to auto-register your entity keyvalues data handler
|
|
class CIFM_EntityKeyValuesHandler_AutoRegister
|
|
{
|
|
public:
|
|
explicit CIFM_EntityKeyValuesHandler_AutoRegister( const char *szHandlerID );
|
|
|
|
virtual void HandleData_PreUpdate( void ) {}; //called once before any received data is distributed to its handlers
|
|
virtual void HandleData( KeyValues *pKeyValues ) = 0;
|
|
virtual void HandleData_PostUpdate( void ) {}; //called once after all received data is distributed to its handlers
|
|
|
|
static void AllHandlers_PreUpdate( void );
|
|
static void FindAndCallHandler( const char *szHandlerID, KeyValues *pKeyValues );
|
|
static void AllHandlers_PostUpdate( void );
|
|
|
|
virtual void HandleData_RemoveAll( void ) {};
|
|
static void AllHandlers_RemoveAll( void );
|
|
|
|
static HKeySymbol GetGameKeyValuesKeySymbol( void );
|
|
static const char *GetGameKeyValuesKeyString( void );
|
|
static HKeySymbol GetHandlerIDKeySymbol( void );
|
|
static const char *GetHandlerIDKeyString( void );
|
|
static KeyValues *FindOrCreateNonConformantKeyValues( KeyValues *pParentKV );
|
|
|
|
private:
|
|
|
|
|
|
const char *m_szHandlerID;
|
|
CIFM_EntityKeyValuesHandler_AutoRegister *m_pNext;
|
|
static CIFM_EntityKeyValuesHandler_AutoRegister *s_pRegisteredHandlers;
|
|
};
|
|
|
|
|
|
//assuming you've stored "entIndex" into your recorded values, this will create/destroy a unique instance per unique index
|
|
class CIFM_EntityKeyValuesHandler_RecreateEntities : CIFM_EntityKeyValuesHandler_AutoRegister
|
|
{
|
|
public:
|
|
explicit CIFM_EntityKeyValuesHandler_RecreateEntities( const char *szHandlerID );
|
|
|
|
virtual void HandleData_PreUpdate( void );
|
|
virtual void HandleData( KeyValues *pKeyValues );
|
|
virtual void HandleData_PostUpdate( void );
|
|
virtual void HandleData_RemoveAll( void );
|
|
|
|
virtual void *CreateInstance( void ) = 0; //make a new instance of your entity
|
|
virtual void DestroyInstance( void *pEntity ) = 0;
|
|
|
|
virtual void HandleInstance( void *pEntity, KeyValues *pKeyValues ) = 0; //update your entity.
|
|
|
|
private:
|
|
struct RecordedEntity_t
|
|
{
|
|
void *pEntity;
|
|
int iEntIndex;
|
|
bool bTouched;
|
|
};
|
|
|
|
CUtlVector<RecordedEntity_t> m_PlaybackEntities;
|
|
};
|
|
|
|
#endif // TOOLFRAMEWORK_CLIENT_H
|