summaryrefslogtreecommitdiff
path: root/game/server/tf/tf_team.h
blob: 20074733dac54f0578cdc8c5d634b797c9b1c50e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=============================================================================
#ifndef TF_TEAM_H
#define TF_TEAM_H
#ifdef _WIN32
#pragma once
#endif

#include "utlvector.h"
#include "team.h"
#include "tf_shareddefs.h"

class CBaseObject;

//=============================================================================
// TF Teams.
//
class CTFTeam : public CTeam
{
	DECLARE_CLASS( CTFTeam, CTeam );
	DECLARE_SERVERCLASS();

public:

	CTFTeam();

	// Classes.
//	int				GetNumOfClass( TFClass iClass );

	// CTeam
	virtual void	AddPlayer( CBasePlayer *pPlayer );
	virtual void	RemovePlayer( CBasePlayer *pPlayer );

	// TF Teams.
//	CTFTeam			*GetEnemyTeam();
	void			SetColor( color32 color );
	color32			GetColor( void );

	// Score.
	void			ShowScore( CBasePlayer *pPlayer );

	// Objects.
	void			AddObject( CBaseObject *pObject );
	void			RemoveObject( CBaseObject *pObject );
	bool			IsObjectOnTeam( CBaseObject *pObject ) const;
	int				GetNumObjects( int iObjectType = -1 );
	CBaseObject		*GetObject( int num );

	// Flag Captures
	int				GetFlagCaptures( void ) { return m_nFlagCaptures; }
	int				GetTotalFlagCaptures( void ) const { return m_nTotalFlagCaptures; }
	void			SetFlagCaptures( int nCaptures ) { m_nFlagCaptures = nCaptures; }
	void			IncrementFlagCaptures( void ) { m_nFlagCaptures++; m_nTotalFlagCaptures++; }

	// Roles
	void			SetRole( int iTeamRole ) { m_iRole = iTeamRole; }
	int				GetRole( void ) { return m_iRole; }

	// KOTH Timers
	void			AddKOTHTime( int nTime ) { m_flTotalSecondsKOTHPointOwned += nTime; }
	float			GetKOTHTime() const { return m_flTotalSecondsKOTHPointOwned; }

	// PLR Track
	void			AddPLRTrack( float flPercentTraveled ) { m_flTotalPLRTrackPercentTraveled += flPercentTraveled; }
	float			GetTotalPLRTrackPercentTraveled() const { return m_flTotalPLRTrackPercentTraveled; }

	bool			SetTeamLeader( CBasePlayer *pPlayer );
	CBasePlayer		*GetTeamLeader( void );

private:
	
	color32						m_TeamColor;
	CUtlVector< CHandle<CBaseObject> >	m_aObjects;			// List of team objects.

	CNetworkVar( int, m_nFlagCaptures );
	CNetworkVar( int, m_iRole );
	int m_nTotalFlagCaptures;
	float m_flTotalSecondsKOTHPointOwned;
	float m_flTotalPLRTrackPercentTraveled;

	CNetworkHandle( CBasePlayer, m_hLeader );
};

class CTFTeamManager
{
public:

	CTFTeamManager();

	// Creation/Destruction.
	bool	Init( void );
	void    Shutdown( void );

	bool	IsValidTeam( int iTeam );
	int		GetTeamCount( void );
	CTFTeam *GetTeam( int iTeam );
	CTFTeam *GetSpectatorTeam();

	color32 GetUndefinedTeamColor( void );

	void AddTeamScore( int iTeam, int iScoreToAdd );

	void IncrementFlagCaptures( int iTeam );
	int GetFlagCaptures( int iTeam );

	// Screen prints.
	void PlayerCenterPrint( CBasePlayer *pPlayer, const char *msg_name, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL );
	void TeamCenterPrint( int iTeam, const char *msg_name, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL );
	void PlayerTeamCenterPrint( CBasePlayer *pPlayer, const char *msg_name, const char *param1 = NULL, const char *param2 = NULL, const char *param3 = NULL, const char *param4 = NULL );

	// Vox

private:

	int		Create( const char *pName, color32 color );

private:

	color32	m_UndefinedTeamColor;
};

extern CTFTeamManager *TFTeamMgr();
extern CTFTeam *GetGlobalTFTeam( int iIndex );

#endif // TF_TEAM_H