diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/entityoutput.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/entityoutput.h')
| -rw-r--r-- | game/server/entityoutput.h | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/game/server/entityoutput.h b/game/server/entityoutput.h new file mode 100644 index 0000000..6aeb738 --- /dev/null +++ b/game/server/entityoutput.h @@ -0,0 +1,195 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Declares basic entity communications classes, for input/output of data +// between entities +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef ENTITYOUTPUT_H +#define ENTITYOUTPUT_H + +#ifdef _WIN32 +#pragma once +#endif + + +#include "baseentity.h" + + +#define EVENT_FIRE_ALWAYS -1 + + +//----------------------------------------------------------------------------- +// Purpose: A COutputEvent consists of an array of these CEventActions. +// Each CEventAction holds the information to fire a single input in +// a target entity, after a specific delay. +//----------------------------------------------------------------------------- +class CEventAction +{ +public: + CEventAction( const char *ActionData = NULL ); + + string_t m_iTarget; // name of the entity(s) to cause the action in + string_t m_iTargetInput; // the name of the action to fire + string_t m_iParameter; // parameter to send, 0 if none + float m_flDelay; // the number of seconds to wait before firing the action + int m_nTimesToFire; // The number of times to fire this event, or EVENT_FIRE_ALWAYS. + + int m_iIDStamp; // unique identifier stamp + + static int s_iNextIDStamp; + + CEventAction *m_pNext; + + // allocates memory from engine.MPool/g_EntityListPool + static void *operator new( size_t stAllocateBlock ); + static void *operator new( size_t stAllocateBlock, int nBlockUse, const char *pFileName, int nLine ); + static void operator delete( void *pMem ); + static void operator delete( void *pMem , int nBlockUse, const char *pFileName, int nLine ) { operator delete(pMem); } + + DECLARE_SIMPLE_DATADESC(); +}; + + +//----------------------------------------------------------------------------- +// Purpose: Stores a list of connections to other entities, for data/commands to be +// communicated along. +//----------------------------------------------------------------------------- +class CBaseEntityOutput +{ +public: + ~CBaseEntityOutput(); + + void ParseEventAction( const char *EventData ); + void AddEventAction( CEventAction *pEventAction ); + + int Save( ISave &save ); + int Restore( IRestore &restore, int elementCount ); + + int NumberOfElements( void ); + + float GetMaxDelay( void ); + + fieldtype_t ValueFieldType() { return m_Value.FieldType(); } + + void FireOutput( variant_t Value, CBaseEntity *pActivator, CBaseEntity *pCaller, float fDelay = 0 ); + + /// Delete every single action in the action list. + void DeleteAllElements( void ) ; + +protected: + variant_t m_Value; + CEventAction *m_ActionList; + DECLARE_SIMPLE_DATADESC(); + + CBaseEntityOutput() {} // this class cannot be created, only it's children + +private: + CBaseEntityOutput( CBaseEntityOutput& ); // protect from accidental copying +}; + + +//----------------------------------------------------------------------------- +// Purpose: wraps variant_t data handling in convenient, compiler type-checked template +//----------------------------------------------------------------------------- +template< class Type, fieldtype_t fieldType > +class CEntityOutputTemplate : public CBaseEntityOutput +{ +public: + // + // Sets an initial value without firing the output. + // + void Init( Type value ) + { + m_Value.Set( fieldType, &value ); + } + + // + // Sets a value and fires the output. + // + void Set( Type value, CBaseEntity *pActivator, CBaseEntity *pCaller ) + { + m_Value.Set( fieldType, &value ); + FireOutput( m_Value, pActivator, pCaller ); + } + + // + // Returns the current value. + // + Type Get( void ) + { + return *((Type*)&m_Value); + } +}; + + +// +// Template specializations for type Vector, so we can implement Get, Set, and Init differently. +// +template<> +class CEntityOutputTemplate<class Vector, FIELD_VECTOR> : public CBaseEntityOutput +{ +public: + void Init( const Vector &value ) + { + m_Value.SetVector3D( value ); + } + + void Set( const Vector &value, CBaseEntity *pActivator, CBaseEntity *pCaller ) + { + m_Value.SetVector3D( value ); + FireOutput( m_Value, pActivator, pCaller ); + } + + void Get( Vector &vec ) + { + m_Value.Vector3D(vec); + } +}; + + +template<> +class CEntityOutputTemplate<class Vector, FIELD_POSITION_VECTOR> : public CBaseEntityOutput +{ +public: + void Init( const Vector &value ) + { + m_Value.SetPositionVector3D( value ); + } + + void Set( const Vector &value, CBaseEntity *pActivator, CBaseEntity *pCaller ) + { + m_Value.SetPositionVector3D( value ); + FireOutput( m_Value, pActivator, pCaller ); + } + + void Get( Vector &vec ) + { + m_Value.Vector3D(vec); + } +}; + + +//----------------------------------------------------------------------------- +// Purpose: parameterless entity event +//----------------------------------------------------------------------------- +class COutputEvent : public CBaseEntityOutput +{ +public: + // void Firing, no parameter + void FireOutput( CBaseEntity *pActivator, CBaseEntity *pCaller, float fDelay = 0 ); +}; + + +// useful typedefs for allowed output data types +typedef CEntityOutputTemplate<variant_t,FIELD_INPUT> COutputVariant; +typedef CEntityOutputTemplate<int,FIELD_INTEGER> COutputInt; +typedef CEntityOutputTemplate<float,FIELD_FLOAT> COutputFloat; +typedef CEntityOutputTemplate<string_t,FIELD_STRING> COutputString; +typedef CEntityOutputTemplate<EHANDLE,FIELD_EHANDLE> COutputEHANDLE; +typedef CEntityOutputTemplate<Vector,FIELD_VECTOR> COutputVector; +typedef CEntityOutputTemplate<Vector,FIELD_POSITION_VECTOR> COutputPositionVector; +typedef CEntityOutputTemplate<color32,FIELD_COLOR32> COutputColor32; + +#endif // ENTITYOUTPUT_H |