mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-18 06:21:55 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user