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.
219 lines
7.5 KiB
219 lines
7.5 KiB
//========= 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
|
|
|