summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_func_resource.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf2/tf_func_resource.h')
-rw-r--r--game/server/tf2/tf_func_resource.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/game/server/tf2/tf_func_resource.h b/game/server/tf2/tf_func_resource.h
new file mode 100644
index 0000000..c22410a
--- /dev/null
+++ b/game/server/tf2/tf_func_resource.h
@@ -0,0 +1,153 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Resource collection entity
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TF_FUNC_RESOURCE_H
+#define TF_FUNC_RESOURCE_H
+#pragma once
+
+#include "utlvector.h"
+#include "props.h"
+#include "techtree.h"
+#include "entityoutput.h"
+#include "ihasbuildpoints.h"
+
+class CBaseTFPlayer;
+class CTFTeam;
+class CResourceChunk;
+class CResourceSpawner;
+
+//-----------------------------------------------------------------------------
+// Purpose: Defines an area from which resources can be collected
+//-----------------------------------------------------------------------------
+class CResourceZone : public CBaseEntity, public IHasBuildPoints
+{
+ DECLARE_CLASS( CResourceZone, CBaseEntity );
+public:
+ CResourceZone();
+
+ DECLARE_DATADESC();
+ DECLARE_SERVERCLASS();
+
+ virtual void Spawn( void );
+ virtual void Precache( void );
+ virtual void Activate( void );
+
+ // Inputs
+ void InputSetAmount( inputdata_t &inputdata );
+ void InputResetAmount( inputdata_t &inputdata );
+ void InputSetActive( inputdata_t &inputdata );
+ void InputSetInactive( inputdata_t &inputdata );
+ void InputToggleActive( inputdata_t &inputdata );
+
+ void SetActive( bool bActive );
+ bool GetActive() const;
+
+ bool IsEmpty( void );
+ bool PointIsWithin( const Vector &vecPoint );
+
+ // need to transmit to players who are in commander mode
+ int ShouldTransmit( const CCheckTransmitInfo *pInfo );
+
+ // Team handling
+ void SetOwningTeam( int iTeamNumber );
+ CTFTeam *GetOwningTeam( void );
+
+ // Resource handling
+ bool RemoveResources( int nResourcesRemoved );
+ int GetResources( void ) const { return m_nResourcesLeft; }
+
+ // Resource Chunks
+ bool ShouldSpawnChunk( void );
+ void SpawnChunk( const Vector &vecOrigin );
+ void RemoveChunk( CResourceChunk *pChunk, bool bReturn );
+
+ // Resource Spawners
+ void AddSpawner( CResourceSpawner *pSpawner );
+
+ // Zone increasing....
+ void AddZoneIncreaser( float rate );
+ void RemoveZoneIncreaser( float rate );
+
+ CNetworkVar( float, m_flClientResources ); // Amount sent to clients (0->1 range)
+
+ float GetResourceRate() const { return m_flResourceRate; }
+
+// IHasBuildPoints
+public:
+ virtual int GetNumBuildPoints( void ) const;
+ virtual bool CanBuildObjectOnBuildPoint( int iPoint, int iObjectType );
+ virtual bool GetBuildPoint( int iPoint, Vector &vecOrigin, QAngle &vecAngles );
+ virtual int GetBuildPointAttachmentIndex( int iPoint ) const;
+ virtual void SetObjectOnBuildPoint( int iPoint, CBaseObject *pObject );
+ virtual float GetMaxSnapDistance( int iPoint ) { return 128; }
+ virtual int GetNumObjectsOnMe( void );
+ virtual CBaseEntity *GetFirstObjectOnMe( void );
+ virtual CBaseObject *GetObjectOfTypeOnMe( int iObjectType );
+ virtual void RemoveAllObjects( void );
+ virtual bool ShouldCheckForMovement( void ) { return false; }
+ virtual int FindObjectOnBuildPoint( CBaseObject *pObject );
+ virtual void GetExitPoint( CBaseEntity *pPlayer, int iPoint, Vector *pAbsOrigin, QAngle *pAbsAngles );
+
+private:
+ void RecomputeClientResources( );
+
+ // Team handling
+ float m_flTestTime; // Time to next check to see if we've been captured.
+
+ bool m_bActive;
+
+ // Resource handling
+ int m_iTeamGathering; // Team that's gathering from this resource
+ Vector m_vecGatherPoint; // Position for the resource collector to be to gather from this point
+ QAngle m_angGatherPoint; // Angles for the collector to be at on the point
+
+ // Resources
+ CNetworkVar( int, m_nResourcesLeft ); // Amount of the resource that's left
+ int m_nMaxResources; // Max resources at this zone
+ float m_flResourceRate; // Time between each suck from this zone by resource pumps
+ float m_flBaseResourceRate;
+
+ // Resource chunks in this zone
+ int m_iMaxChunks;
+ float m_flRespawnTimeModifier; // speed deltas imposed by zone increasers
+ float m_flChunkValueMin;
+ float m_flChunkValueMax;
+ CUtlVector< CResourceChunk* > m_aChunks;
+
+ COutputEvent m_OnEmpty;
+
+ EHANDLE m_hResourcePump;
+
+ // Resource spawners in this zone
+ CUtlVector< CResourceSpawner* > m_aSpawners;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: A resource chunk spawning point
+//-----------------------------------------------------------------------------
+class CResourceSpawner : public CBaseAnimating
+{
+ DECLARE_CLASS( CResourceSpawner, CBaseAnimating );
+public:
+ DECLARE_DATADESC();
+ DECLARE_SERVERCLASS();
+
+ void Spawn( void );
+ void Precache( void );
+ void Activate( void );
+ void SetActive( bool bActive );
+
+ void SpawnChunkThink( void );
+
+public:
+ CHandle<CResourceZone> m_hZone;
+ CNetworkVar( bool, m_bActive );
+};
+
+void ConvertResourceValueToChunks( int iResources, int *iNumProcessed, int *iNumNormal );
+
+#endif // TF_FUNC_RESOURCE_H