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.

220 lines
7.5 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Team management class. Contains all the details for a specific team
//
// $NoKeywords: $
//=============================================================================//
#ifndef TF_TEAM_H
#define TF_TEAM_H
#ifdef _WIN32
#pragma once
#endif
#include "utlvector.h"
#include "tf_shareddefs.h"
#include "techtree.h"
#include "team.h"
#include "order_events.h"
class CBaseTFPlayer;
class CResourceZone;
class CTeamSpawnPoint;
class CBaseTFPlayer;
class CResourceDrop;
class CTechnologyTree;
class CBaseTechnology;
class CObjectResupply;
class CBaseObject;
class COrder;
class CTeamMessage;
class CObjectPowerPack;
class CObjectBuffStation;
enum
{
COUNTORDERS_TYPE = (1<<0),
COUNTORDERS_TARGET = (1<<1),
COUNTORDERS_OWNER = (1<<2)
};
// Maximum total number of objects a team can have.
#define MAX_TEAM_OBJECTS 1024
//-----------------------------------------------------------------------------
// Purpose: Team Manager
//-----------------------------------------------------------------------------
class CTFTeam : public CTeam
{
DECLARE_CLASS( CTFTeam, CTeam );
public:
virtual ~CTFTeam( void );
DECLARE_SERVERCLASS();
// Initialization
virtual void Init( const char *pName, int iNumber );
virtual void Precache( void );
virtual void PrecacheTechnology( CBaseTechnology *pTech );
virtual void Think( void );
//-----------------------------------------------------------------------------
// Data Handling
//-----------------------------------------------------------------------------
virtual void UpdateClientData( CBasePlayer *pPlayer );
virtual void UpdateClientTechnology( int iTechID, CBaseTFPlayer *pPlayer );
virtual void UpdateTechnologyData( void );
virtual bool ShouldTransmitToPlayer( CBasePlayer *pRecipient, CBaseEntity* pEntity );
virtual bool IsEntityVisibleToTactical( CBaseEntity *pEntity );
//-----------------------------------------------------------------------------
// Resources
//-----------------------------------------------------------------------------
virtual void UpdatePotentialResources( void );
virtual void AddResourceZone( CResourceZone *pResource );
virtual void RemoveResourceZone( CResourceZone *pResource );
// Handling for players joining the team during the game
float GetJoiningPlayerResources( void );
void SetRecentBankSet( float flResources );
//-----------------------------------------------------------------------------
// Technology Tree
//-----------------------------------------------------------------------------
virtual void InitializeTechTree( void );
virtual CTechnologyTree *GetTechnologyTree( void );
virtual void EnableTechnology( CBaseTechnology *technology, bool bStolen = false ); // Give this team a technology
virtual void EnableAllTechnologies( void );
virtual void RecomputeTeamResources( void );
virtual void RecomputePreferences( void );
virtual void RecomputePurchases( void );
virtual bool HasNamedTechnology( const char *name );
virtual void GainedNewTechnology( CBaseTechnology *pTechnology );
virtual void UpdateTechnologies( void );
//-----------------------------------------------------------------------------
// Players
//-----------------------------------------------------------------------------
virtual void AddPlayer( CBasePlayer *pPlayer );
virtual void RemovePlayer( CBasePlayer *pPlayer );
int GetNumOfClass( TFClass iClass );
//-----------------------------------------------------------------------------
// Resource Bank
//-----------------------------------------------------------------------------
void InitializeTeamResources( void );
float GetTeamResources( void );
int AddTeamResources( float fAmount, int nStat = -1 );
void ResourceLoadDeposited( void );
void DonateResources( CBaseTFPlayer *pPlayer );
//-----------------------------------------------------------------------------
// Objects
//-----------------------------------------------------------------------------
void AddObject( CBaseObject *pObject );
void RemoveObject( CBaseObject *pObject );
bool IsObjectOnTeam( CBaseObject *pObject ) const;
void AddResupply( CObjectResupply *pResupply );
void RemoveResupply( CObjectResupply *pResupply );
int GetNumObjects( int iObjectType = -1 );
CBaseObject *GetObject( int num );
int GetNumResupplies( void );
CObjectResupply *GetResupply( int num );
// Returns true if the position is covered by a sentry gun.
bool IsCoveredBySentryGun( const Vector &vPos );
int GetNumShieldWallsCoveringPosition( const Vector &vPos );
int GetNumResuppliesCoveringPosition( const Vector &vPos );
int GetNumRespawnStationsCoveringPosition( const Vector &vPos );
//-----------------------------------------------------------------------------
// Orders
//-----------------------------------------------------------------------------
void InitializeOrders( void );
COrder* AddOrder(
int iOrderType,
CBaseEntity *pTarget,
CBaseTFPlayer *pPlayer = NULL,
float flDistanceToRemove = 1e24,
float flLifetime = 60,
COrder *pDefaultOrder = NULL // If this is specified, then it is used instead of
// asking COrder to allocate an order.
);
void RemoveOrder( COrder *pOrder );
void RecalcOrders( void );
void UpdateOrders( void );
void UpdateOrdersOnEvent( COrderEvent_Base *pEvent );
// Flags is a combination of COUNTORDERS_ flags telling which fields to check.
int CountOrders( int flags, int iOrderType, CBaseEntity *pTarget=0, CBaseTFPlayer *pOwner=0 );
int CountOrdersOwnedByPlayer( CBaseTFPlayer *pPlayer );
void CreatePersonalOrders( void );
void CreatePersonalOrder( CBaseTFPlayer *pPlayer );
void RemoveOrdersToPlayer( CBaseTFPlayer *pPlayer );
//-----------------------------------------------------------------------------
// Messages
//-----------------------------------------------------------------------------
void ClearMessages( void );
void PostMessage( int iMessageID, CBaseEntity *pEntity = NULL, char *sData = NULL );
void UpdateMessages( void );
void UpdatePowerpacks( CObjectPowerPack *pPackToIgnore, CBaseObject *pObjectToTarget );
void UpdateBuffStations( CObjectBuffStation *pBuffStationToIgnore, CBaseObject *pObjectToTarget, bool bPlacing );
//-----------------------------------------------------------------------------
// Utility funcs
//-----------------------------------------------------------------------------
CTFTeam* GetEnemyTeam();
// Technology Tree
CTechnologyTree *m_pTechnologyTree;
// TEST CODE
// Remove after Resource Experiment!
float m_flTotalResourcesSoFar;
private:
typedef CHandle<COrder> OrderHandle;
// Resource UI data
CNetworkVar( bool, m_bHaveZone );
// Resources
CNetworkVar( float, m_fResources ); // Current amounts of resource
CNetworkVar( float, m_fPotentialResources ); // Amounts of resource when all collectors have returned
float m_flLastBankSetAmount; // Most recent amount of resources our players had their banks set to
float m_flLastBankSetTime; // Time at which our players last had their banks set
// Orders
float m_flPersonalOrderUpdateTime;
// Used to distribute resources to a team
float m_flNextResourceTime;
int m_iLastUpdateSentAt;
CUtlVector< CResourceZone * > m_aResourcesBeingCollected;
CUtlVector< CObjectResupply * > m_aResupplyBeacons;
CUtlVector< OrderHandle > m_aOrders; // Stored in order of priority
CUtlVector< CTeamMessage* > m_aMessages;
CUtlVector< CBaseObject* > m_aObjects;
};
extern CTFTeam *GetGlobalTFTeam( int iIndex );
#endif // TF_TEAM_H