329 lines
16 KiB
C++
329 lines
16 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef ITOOLENTITY_H
|
|
#define ITOOLENTITY_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "../Color.h"
|
|
#include "../basehandle.h"
|
|
#include "../engine/ishadowmgr.h"
|
|
#include "../iclientrenderable.h"
|
|
#include "../tier1/interface.h"
|
|
#include "../tier1/utlvector.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;
|
|
class CBaseTempEntity;
|
|
class CGlobalEntityList;
|
|
class IEntityFindFilter;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// 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;
|
|
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;
|
|
};
|
|
|
|
typedef IServerTools IServerTools001;
|
|
typedef IServerTools IServerTools002;
|
|
|
|
#define VSERVERTOOLS_INTERFACE_VERSION_1 "VSERVERTOOLS001"
|
|
#define VSERVERTOOLS_INTERFACE_VERSION_2 "VSERVERTOOLS002"
|
|
#define VSERVERTOOLS_INTERFACE_VERSION "VSERVERTOOLS003"
|
|
#define VSERVERTOOLS_INTERFACE_VERSION_INT 3
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// 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
|