Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

153 lines
4.7 KiB

//========= 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