summaryrefslogtreecommitdiff
path: root/game/server/tf2/tf_team.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tf2/tf_team.h')
-rw-r--r--game/server/tf2/tf_team.h219
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