diff options
Diffstat (limited to 'game/server/tf2/tf_team.h')
| -rw-r--r-- | game/server/tf2/tf_team.h | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/game/server/tf2/tf_team.h b/game/server/tf2/tf_team.h new file mode 100644 index 0000000..1f90b65 --- /dev/null +++ b/game/server/tf2/tf_team.h @@ -0,0 +1,219 @@ +//========= 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 |