2013-06-27 06:22:04 +08:00
|
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
|
|
//
|
|
|
|
// Purpose:
|
|
|
|
//
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
#ifndef ITOOLENTITY_H
|
|
|
|
#define ITOOLENTITY_H
|
|
|
|
#ifdef _WIN32
|
|
|
|
#pragma once
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "tier1/interface.h"
|
|
|
|
#include "tier1/utlvector.h"
|
|
|
|
#include "Color.h"
|
|
|
|
#include "basehandle.h"
|
|
|
|
#include "iclientrenderable.h"
|
|
|
|
#include "engine/ishadowmgr.h"
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Forward declarations
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class IServerEntity;
|
|
|
|
class IClientEntity;
|
|
|
|
class IToolSystem;
|
|
|
|
class IClientRenderable;
|
|
|
|
class Vector;
|
|
|
|
class QAngle;
|
|
|
|
class CBaseEntity;
|
|
|
|
class CBaseAnimating;
|
|
|
|
class CTakeDamageInfo;
|
|
|
|
class ITempEntsSystem;
|
|
|
|
class IEntityFactoryDictionary;
|
2014-10-31 00:30:57 +08:00
|
|
|
class CBaseTempEntity;
|
|
|
|
class CGlobalEntityList;
|
|
|
|
class IEntityFindFilter;
|
2013-06-27 06:22:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Safe accessor to an entity
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
typedef unsigned int HTOOLHANDLE;
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
HTOOLHANDLE_INVALID = 0
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// If you change this, change the flags in IClientShadowMgr.h also
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
enum ClientShadowFlags_t
|
|
|
|
{
|
|
|
|
SHADOW_FLAGS_USE_RENDER_TO_TEXTURE = (SHADOW_FLAGS_LAST_FLAG<<1),
|
|
|
|
SHADOW_FLAGS_ANIMATING_SOURCE = (SHADOW_FLAGS_LAST_FLAG<<2),
|
|
|
|
SHADOW_FLAGS_USE_DEPTH_TEXTURE = (SHADOW_FLAGS_LAST_FLAG<<3),
|
|
|
|
// Update this if you add flags
|
|
|
|
CLIENT_SHADOW_FLAGS_LAST_FLAG = SHADOW_FLAGS_USE_DEPTH_TEXTURE
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Opaque pointer returned from Find* methods, don't store this, you need to
|
|
|
|
// Attach it to a tool entity or discard after searching
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
typedef void *EntitySearchResult;
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Purpose: Client side tool interace (right now just handles IClientRenderables).
|
|
|
|
// In theory could support hooking into client side entities directly
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class IClientTools : public IBaseInterface
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
// Allocates or returns the handle to an entity previously found using the Find* APIs below
|
|
|
|
virtual HTOOLHANDLE AttachToEntity( EntitySearchResult entityToAttach ) = 0;
|
|
|
|
virtual void DetachFromEntity( EntitySearchResult entityToDetach ) = 0;
|
|
|
|
|
|
|
|
// Checks whether a handle is still valid.
|
|
|
|
virtual bool IsValidHandle( HTOOLHANDLE handle ) = 0;
|
|
|
|
|
|
|
|
// Iterates the list of entities which have been associated with tools
|
|
|
|
virtual int GetNumRecordables() = 0;
|
|
|
|
virtual HTOOLHANDLE GetRecordable( int index ) = 0;
|
|
|
|
|
|
|
|
// Iterates through ALL entities (separate list for client vs. server)
|
|
|
|
virtual EntitySearchResult NextEntity( EntitySearchResult currentEnt ) = 0;
|
|
|
|
EntitySearchResult FirstEntity() { return NextEntity( NULL ); }
|
|
|
|
|
|
|
|
// Use this to turn on/off the presence of an underlying game entity
|
|
|
|
virtual void SetEnabled( HTOOLHANDLE handle, bool enabled ) = 0;
|
|
|
|
// Use this to tell an entity to post "state" to all listening tools
|
|
|
|
virtual void SetRecording( HTOOLHANDLE handle, bool recording ) = 0;
|
|
|
|
// Some entities are marked with ShouldRecordInTools false, such as ui entities, etc.
|
|
|
|
virtual bool ShouldRecord( HTOOLHANDLE handle ) = 0;
|
|
|
|
|
|
|
|
virtual HTOOLHANDLE GetToolHandleForEntityByIndex( int entindex ) = 0;
|
|
|
|
|
|
|
|
virtual int GetModelIndex( HTOOLHANDLE handle ) = 0;
|
|
|
|
virtual const char* GetModelName ( HTOOLHANDLE handle ) = 0;
|
|
|
|
virtual const char* GetClassname ( HTOOLHANDLE handle ) = 0;
|
|
|
|
|
|
|
|
virtual void AddClientRenderable( IClientRenderable *pRenderable, int renderGroup ) = 0;
|
|
|
|
virtual void RemoveClientRenderable( IClientRenderable *pRenderable ) = 0;
|
|
|
|
virtual void SetRenderGroup( IClientRenderable *pRenderable, int renderGroup ) = 0;
|
|
|
|
virtual void MarkClientRenderableDirty( IClientRenderable *pRenderable ) = 0;
|
|
|
|
virtual void UpdateProjectedTexture( ClientShadowHandle_t h, bool bForce ) = 0;
|
|
|
|
|
|
|
|
virtual bool DrawSprite( IClientRenderable *pRenderable, float scale, float frame, int rendermode, int renderfx, const Color &color, float flProxyRadius, int *pVisHandle ) = 0;
|
|
|
|
|
|
|
|
virtual EntitySearchResult GetLocalPlayer() = 0;
|
|
|
|
virtual bool GetLocalPlayerEyePosition( Vector& org, QAngle& ang, float &fov ) = 0;
|
|
|
|
|
|
|
|
// See ClientShadowFlags_t above
|
|
|
|
virtual ClientShadowHandle_t CreateShadow( CBaseHandle handle, int nFlags ) = 0;
|
|
|
|
virtual void DestroyShadow( ClientShadowHandle_t h ) = 0;
|
|
|
|
|
|
|
|
virtual ClientShadowHandle_t CreateFlashlight( const FlashlightState_t &lightState ) = 0;
|
|
|
|
virtual void DestroyFlashlight( ClientShadowHandle_t h ) = 0;
|
|
|
|
virtual void UpdateFlashlightState( ClientShadowHandle_t h, const FlashlightState_t &lightState ) = 0;
|
|
|
|
|
|
|
|
virtual void AddToDirtyShadowList( ClientShadowHandle_t h, bool force = false ) = 0;
|
|
|
|
virtual void MarkRenderToTextureShadowDirty( ClientShadowHandle_t h ) = 0;
|
|
|
|
|
|
|
|
// Global toggle for recording
|
|
|
|
virtual void EnableRecordingMode( bool bEnable ) = 0;
|
|
|
|
virtual bool IsInRecordingMode() const = 0;
|
|
|
|
|
|
|
|
// Trigger a temp entity
|
|
|
|
virtual void TriggerTempEntity( KeyValues *pKeyValues ) = 0;
|
|
|
|
|
|
|
|
// get owning weapon (for viewmodels)
|
|
|
|
virtual int GetOwningWeaponEntIndex( int entindex ) = 0;
|
|
|
|
virtual int GetEntIndex( EntitySearchResult entityToAttach ) = 0;
|
|
|
|
|
|
|
|
virtual int FindGlobalFlexcontroller( char const *name ) = 0;
|
|
|
|
virtual char const *GetGlobalFlexControllerName( int idx ) = 0;
|
|
|
|
|
|
|
|
// helper for traversing ownership hierarchy
|
|
|
|
virtual EntitySearchResult GetOwnerEntity( EntitySearchResult currentEnt ) = 0;
|
|
|
|
|
|
|
|
// common and useful types to query for hierarchically
|
|
|
|
virtual bool IsPlayer ( EntitySearchResult currentEnt ) = 0;
|
|
|
|
virtual bool IsBaseCombatCharacter( EntitySearchResult currentEnt ) = 0;
|
|
|
|
virtual bool IsNPC ( EntitySearchResult currentEnt ) = 0;
|
|
|
|
|
|
|
|
virtual Vector GetAbsOrigin( HTOOLHANDLE handle ) = 0;
|
|
|
|
virtual QAngle GetAbsAngles( HTOOLHANDLE handle ) = 0;
|
|
|
|
|
|
|
|
// This reloads a portion or all of a particle definition file.
|
|
|
|
// It's up to the client to decide if it cares about this file
|
|
|
|
// Use a UtlBuffer to crack the data
|
|
|
|
virtual void ReloadParticleDefintions( const char *pFileName, const void *pBufData, int nLen ) = 0;
|
|
|
|
|
|
|
|
// Sends a mesage from the tool to the client
|
|
|
|
virtual void PostToolMessage( KeyValues *pKeyValues ) = 0;
|
|
|
|
|
|
|
|
// Indicates whether the client should render particle systems
|
|
|
|
virtual void EnableParticleSystems( bool bEnable ) = 0;
|
|
|
|
|
|
|
|
// Is the game rendering in 3rd person mode?
|
|
|
|
virtual bool IsRenderingThirdPerson() const = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define VCLIENTTOOLS_INTERFACE_VERSION "VCLIENTTOOLS001"
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Purpose: Interface from engine to tools for manipulating entities
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class IServerTools : public IBaseInterface
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual IServerEntity *GetIServerEntity( IClientEntity *pClientEntity ) = 0;
|
|
|
|
virtual bool SnapPlayerToPosition( const Vector &org, const QAngle &ang, IClientEntity *pClientPlayer = NULL ) = 0;
|
|
|
|
virtual bool GetPlayerPosition( Vector &org, QAngle &ang, IClientEntity *pClientPlayer = NULL ) = 0;
|
|
|
|
virtual bool SetPlayerFOV( int fov, IClientEntity *pClientPlayer = NULL ) = 0;
|
|
|
|
virtual int GetPlayerFOV( IClientEntity *pClientPlayer = NULL ) = 0;
|
|
|
|
virtual bool IsInNoClipMode( IClientEntity *pClientPlayer = NULL ) = 0;
|
|
|
|
|
|
|
|
// entity searching
|
|
|
|
virtual CBaseEntity *FirstEntity( void ) = 0;
|
|
|
|
virtual CBaseEntity *NextEntity( CBaseEntity *pEntity ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByHammerID( int iHammerID ) = 0;
|
|
|
|
|
|
|
|
// entity query
|
|
|
|
virtual bool GetKeyValue( CBaseEntity *pEntity, const char *szField, char *szValue, int iMaxLen ) = 0;
|
|
|
|
virtual bool SetKeyValue( CBaseEntity *pEntity, const char *szField, const char *szValue ) = 0;
|
|
|
|
virtual bool SetKeyValue( CBaseEntity *pEntity, const char *szField, float flValue ) = 0;
|
|
|
|
virtual bool SetKeyValue( CBaseEntity *pEntity, const char *szField, const Vector &vecValue ) = 0;
|
|
|
|
|
|
|
|
// entity spawning
|
|
|
|
virtual CBaseEntity *CreateEntityByName( const char *szClassName ) = 0;
|
|
|
|
virtual void DispatchSpawn( CBaseEntity *pEntity ) = 0;
|
|
|
|
|
|
|
|
// This reloads a portion or all of a particle definition file.
|
|
|
|
// It's up to the server to decide if it cares about this file
|
|
|
|
// Use a UtlBuffer to crack the data
|
|
|
|
virtual void ReloadParticleDefintions( const char *pFileName, const void *pBufData, int nLen ) = 0;
|
|
|
|
|
|
|
|
virtual void AddOriginToPVS( const Vector &org ) = 0;
|
|
|
|
virtual void MoveEngineViewTo( const Vector &vPos, const QAngle &vAngles ) = 0;
|
|
|
|
|
|
|
|
virtual bool DestroyEntityByHammerId( int iHammerID ) = 0;
|
|
|
|
virtual CBaseEntity *GetBaseEntityByEntIndex( int iEntIndex ) = 0;
|
|
|
|
virtual void RemoveEntity( CBaseEntity *pEntity ) = 0;
|
|
|
|
virtual void RemoveEntityImmediate( CBaseEntity *pEntity ) = 0;
|
|
|
|
virtual IEntityFactoryDictionary *GetEntityFactoryDictionary( void ) = 0;
|
|
|
|
|
|
|
|
virtual void SetMoveType( CBaseEntity *pEntity, int val ) = 0;
|
|
|
|
virtual void SetMoveType( CBaseEntity *pEntity, int val, int moveCollide ) = 0;
|
|
|
|
virtual void ResetSequence( CBaseAnimating *pEntity, int nSequence ) = 0;
|
|
|
|
virtual void ResetSequenceInfo( CBaseAnimating *pEntity ) = 0;
|
|
|
|
|
|
|
|
virtual void ClearMultiDamage( void ) = 0;
|
|
|
|
virtual void ApplyMultiDamage( void ) = 0;
|
|
|
|
virtual void AddMultiDamage( const CTakeDamageInfo &pTakeDamageInfo, CBaseEntity *pEntity ) = 0;
|
|
|
|
virtual void RadiusDamage( const CTakeDamageInfo &info, const Vector &vecSrc, float flRadius, int iClassIgnore, CBaseEntity *pEntityIgnore ) = 0;
|
|
|
|
|
|
|
|
virtual ITempEntsSystem *GetTempEntsSystem( void ) = 0;
|
2014-10-31 00:30:57 +08:00
|
|
|
virtual CBaseTempEntity *GetTempEntList( void ) = 0;
|
|
|
|
|
|
|
|
virtual CGlobalEntityList *GetEntityList( void ) = 0;
|
|
|
|
virtual bool IsEntityPtr( void *pTest ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByClassname( CBaseEntity *pStartEntity, const char *szName ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByName( CBaseEntity *pStartEntity, const char *szName, CBaseEntity *pSearchingEntity = NULL, CBaseEntity *pActivator = NULL, CBaseEntity *pCaller = NULL, IEntityFindFilter *pFilter = NULL ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityInSphere( CBaseEntity *pStartEntity, const Vector &vecCenter, float flRadius ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByTarget( CBaseEntity *pStartEntity, const char *szName ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByModel( CBaseEntity *pStartEntity, const char *szModelName ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByNameNearest( const char *szName, const Vector &vecSrc, float flRadius, CBaseEntity *pSearchingEntity = NULL, CBaseEntity *pActivator = NULL, CBaseEntity *pCaller = NULL ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByNameWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecSrc, float flRadius, CBaseEntity *pSearchingEntity = NULL, CBaseEntity *pActivator = NULL, CBaseEntity *pCaller = NULL ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByClassnameNearest( const char *szName, const Vector &vecSrc, float flRadius ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByClassnameWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecSrc, float flRadius ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityByClassnameWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecMins, const Vector &vecMaxs ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityGeneric( CBaseEntity *pStartEntity, const char *szName, CBaseEntity *pSearchingEntity = NULL, CBaseEntity *pActivator = NULL, CBaseEntity *pCaller = NULL ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityGenericWithin( CBaseEntity *pStartEntity, const char *szName, const Vector &vecSrc, float flRadius, CBaseEntity *pSearchingEntity = NULL, CBaseEntity *pActivator = NULL, CBaseEntity *pCaller = NULL ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityGenericNearest( const char *szName, const Vector &vecSrc, float flRadius, CBaseEntity *pSearchingEntity = NULL, CBaseEntity *pActivator = NULL, CBaseEntity *pCaller = NULL ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityNearestFacing( const Vector &origin, const Vector &facing, float threshold ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityClassNearestFacing( const Vector &origin, const Vector &facing, float threshold, char *classname ) = 0;
|
|
|
|
virtual CBaseEntity *FindEntityProcedural( const char *szName, CBaseEntity *pSearchingEntity = NULL, CBaseEntity *pActivator = NULL, CBaseEntity *pCaller = NULL ) = 0;
|
2013-06-27 06:22:04 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef IServerTools IServerTools001;
|
2014-10-31 00:30:57 +08:00
|
|
|
typedef IServerTools IServerTools002;
|
2013-06-27 06:22:04 +08:00
|
|
|
|
2014-11-01 22:05:56 +08:00
|
|
|
// AlliedModders - Shim until all supported mods are using the SDK Base that has this
|
|
|
|
#if 0
|
2013-06-27 06:22:04 +08:00
|
|
|
#define VSERVERTOOLS_INTERFACE_VERSION_1 "VSERVERTOOLS001"
|
2014-10-31 00:30:57 +08:00
|
|
|
#define VSERVERTOOLS_INTERFACE_VERSION_2 "VSERVERTOOLS002"
|
|
|
|
#define VSERVERTOOLS_INTERFACE_VERSION "VSERVERTOOLS003"
|
|
|
|
#define VSERVERTOOLS_INTERFACE_VERSION_INT 3
|
2014-11-01 22:05:56 +08:00
|
|
|
#else
|
|
|
|
#define VSERVERTOOLS_INTERFACE_VERSION "VSERVERTOOLS002"
|
|
|
|
#endif
|
2013-06-27 06:22:04 +08:00
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Purpose: Client side tool interace (right now just handles IClientRenderables).
|
|
|
|
// In theory could support hooking into client side entities directly
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class IServerChoreoTools : public IBaseInterface
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
// Iterates through ALL entities (separate list for client vs. server)
|
|
|
|
virtual EntitySearchResult NextChoreoEntity( EntitySearchResult currentEnt ) = 0;
|
|
|
|
EntitySearchResult FirstChoreoEntity() { return NextChoreoEntity( NULL ); }
|
|
|
|
virtual const char *GetSceneFile( EntitySearchResult sr ) = 0;
|
|
|
|
|
|
|
|
// For interactive editing
|
|
|
|
virtual int GetEntIndex( EntitySearchResult sr ) = 0;
|
|
|
|
virtual void ReloadSceneFromDisk( int entindex ) = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define VSERVERCHOREOTOOLS_INTERFACE_VERSION "VSERVERCHOREOTOOLS001"
|
|
|
|
|
|
|
|
#endif // ITOOLENTITY_H
|