summaryrefslogtreecommitdiff
path: root/game/server/tfc/tfc_team.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/tfc/tfc_team.cpp')
-rw-r--r--game/server/tfc/tfc_team.cpp279
1 files changed, 279 insertions, 0 deletions
diff --git a/game/server/tfc/tfc_team.cpp b/game/server/tfc/tfc_team.cpp
new file mode 100644
index 0000000..c4c7400
--- /dev/null
+++ b/game/server/tfc/tfc_team.cpp
@@ -0,0 +1,279 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Team management class. Contains all the details for a specific team
+//
+// $NoKeywords: $
+//=============================================================================//
+#include "cbase.h"
+#include "tfc_team.h"
+#include "entitylist.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+
+// Datatable
+IMPLEMENT_SERVERCLASS_ST(CTFCTeam, DT_TFCTeam)
+END_SEND_TABLE()
+
+LINK_ENTITY_TO_CLASS( tfc_team_manager, CTFCTeam );
+
+
+Vector rgbcolors[5];
+team_color_t teamcolors[5][PC_LASTCLASS]; // Colors for each of the 4 teams
+int number_of_teams = 0; // This is incremented for each map as info_player_teamspawn are created.
+const char *teamnames[5] =
+{
+ "spectator",
+ "blue",
+ "red",
+ "yellow",
+ "green"
+};
+
+//========================================================================
+// Set the color for the team corresponding to the no passed in, to team_no
+void TeamFortress_TeamSetColor()
+{
+ // Blue Team
+ teamcolors[1][PC_SCOUT].topColor = 153;
+ teamcolors[1][PC_SCOUT].bottomColor = 139;
+
+ teamcolors[1][PC_SNIPER].topColor = 153;
+ teamcolors[1][PC_SNIPER].bottomColor = 145;
+
+ teamcolors[1][PC_SOLDIER].topColor = 153;
+ teamcolors[1][PC_SOLDIER].bottomColor = 130;
+
+ teamcolors[1][PC_DEMOMAN].topColor = 153;
+ teamcolors[1][PC_DEMOMAN].bottomColor = 145;
+
+ teamcolors[1][PC_MEDIC].topColor = 153;
+ teamcolors[1][PC_MEDIC].bottomColor = 140;
+
+ teamcolors[1][PC_HWGUY].topColor = 148;
+ teamcolors[1][PC_HWGUY].bottomColor = 138;
+
+ teamcolors[1][PC_PYRO].topColor = 140;
+ teamcolors[1][PC_PYRO].bottomColor = 145;
+
+ teamcolors[1][PC_SPY].topColor = 150;
+ teamcolors[1][PC_SPY].bottomColor = 145;
+
+ teamcolors[1][PC_ENGINEER].topColor = 140;
+ teamcolors[1][PC_ENGINEER].bottomColor = 148;
+
+ teamcolors[1][PC_CIVILIAN].topColor = 150;
+ teamcolors[1][PC_CIVILIAN].bottomColor = 140;
+
+#ifdef TFCTODO // sentry colors
+ teamcolors[1][SENTRY_COLOR].topColor = 150;
+ teamcolors[1][SENTRY_COLOR].bottomColor = 0;
+
+ teamcolors[2][SENTRY_COLOR].topColor = 250;
+ teamcolors[2][SENTRY_COLOR].bottomColor = 0;
+
+ teamcolors[3][SENTRY_COLOR].topColor = 45;
+ teamcolors[3][SENTRY_COLOR].bottomColor = 0;
+
+ teamcolors[4][SENTRY_COLOR].topColor = 100;
+ teamcolors[4][SENTRY_COLOR].bottomColor = 0;
+#endif
+
+ // Red Team
+ teamcolors[2][PC_SCOUT].topColor = 255;
+ teamcolors[2][PC_SCOUT].bottomColor = 10;
+
+ teamcolors[2][PC_SNIPER].topColor = 255;
+ teamcolors[2][PC_SNIPER].bottomColor = 10;
+
+ teamcolors[2][PC_SOLDIER].topColor = 250;
+ teamcolors[2][PC_SOLDIER].bottomColor = 28;
+
+ teamcolors[2][PC_DEMOMAN].topColor = 255;
+ teamcolors[2][PC_DEMOMAN].bottomColor = 20;
+
+ teamcolors[2][PC_MEDIC].topColor = 255;
+ teamcolors[2][PC_MEDIC].bottomColor = 250;
+
+ teamcolors[2][PC_HWGUY].topColor = 255;
+ teamcolors[2][PC_HWGUY].bottomColor = 25;
+
+ teamcolors[2][PC_PYRO].topColor = 250;
+ teamcolors[2][PC_PYRO].bottomColor = 25;
+
+ teamcolors[2][PC_SPY].topColor = 250;
+ teamcolors[2][PC_SPY].bottomColor = 240;
+
+ teamcolors[2][PC_ENGINEER].topColor = 5;
+ teamcolors[2][PC_ENGINEER].bottomColor = 250;
+
+ teamcolors[2][PC_CIVILIAN].topColor = 250;
+ teamcolors[2][PC_CIVILIAN].bottomColor = 240;
+
+
+ // Yellow Team
+ teamcolors[3][PC_SCOUT].topColor = 45;
+ teamcolors[3][PC_SCOUT].bottomColor = 35;
+
+ teamcolors[3][PC_SNIPER].topColor = 45;
+ teamcolors[3][PC_SNIPER].bottomColor = 35;
+
+ teamcolors[3][PC_SOLDIER].topColor = 45;
+ teamcolors[3][PC_SOLDIER].bottomColor = 35;
+
+ teamcolors[3][PC_DEMOMAN].topColor = 45;
+ teamcolors[3][PC_DEMOMAN].bottomColor = 35;
+
+ teamcolors[3][PC_MEDIC].topColor = 45;
+ teamcolors[3][PC_MEDIC].bottomColor = 35;
+
+ teamcolors[3][PC_HWGUY].topColor = 45;
+ teamcolors[3][PC_HWGUY].bottomColor = 40;
+
+ teamcolors[3][PC_PYRO].topColor = 45;
+ teamcolors[3][PC_PYRO].bottomColor = 35;
+
+ teamcolors[3][PC_SPY].topColor = 45;
+ teamcolors[3][PC_SPY].bottomColor = 35;
+
+ teamcolors[3][PC_ENGINEER].topColor = 45;
+ teamcolors[3][PC_ENGINEER].bottomColor = 45;
+
+ teamcolors[3][PC_CIVILIAN].topColor = 45;
+ teamcolors[3][PC_CIVILIAN].bottomColor = 35;
+
+ // Green Team
+ teamcolors[4][PC_SCOUT].topColor = 100;
+ teamcolors[4][PC_SCOUT].bottomColor = 90;
+
+ teamcolors[4][PC_SNIPER].topColor = 80;
+ teamcolors[4][PC_SNIPER].bottomColor = 90;
+
+ teamcolors[4][PC_SOLDIER].topColor = 100;
+ teamcolors[4][PC_SOLDIER].bottomColor = 40;
+
+ teamcolors[4][PC_DEMOMAN].topColor = 100;
+ teamcolors[4][PC_DEMOMAN].bottomColor = 90;
+
+ teamcolors[4][PC_MEDIC].topColor = 100;
+ teamcolors[4][PC_MEDIC].bottomColor = 90;
+
+ teamcolors[4][PC_HWGUY].topColor = 100;
+ teamcolors[4][PC_HWGUY].bottomColor = 90;
+
+ teamcolors[4][PC_PYRO].topColor = 100;
+ teamcolors[4][PC_PYRO].bottomColor = 50;
+
+ teamcolors[4][PC_SPY].topColor = 100;
+ teamcolors[4][PC_SPY].bottomColor = 90;
+
+ teamcolors[4][PC_ENGINEER].topColor = 100;
+ teamcolors[4][PC_ENGINEER].bottomColor = 90;
+
+ teamcolors[4][PC_CIVILIAN].topColor = 100;
+ teamcolors[4][PC_CIVILIAN].bottomColor = 90;
+
+ rgbcolors[0] = Vector( 255, 255, 255 ); // White for non-owned
+ rgbcolors[1] = Vector( 0, 0, 255 );
+ rgbcolors[2] = Vector( 255, 0, 0 );
+ rgbcolors[3] = Vector( 255, 255, 30 );
+ rgbcolors[4] = Vector( 0, 255, 0 );
+}
+class CColorInitializer
+{
+public:
+ CColorInitializer()
+ {
+ TeamFortress_TeamSetColor();
+ }
+} g_ColorInitializer;
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Get a pointer to the specified TF team manager
+//-----------------------------------------------------------------------------
+CTFCTeam *GetGlobalTFCTeam( int iIndex )
+{
+ return (CTFCTeam*)GetGlobalTeam( iIndex );
+}
+
+
+// Display all the Team Scores
+void TeamFortress_TeamShowScores(BOOL bLong, CBasePlayer *pPlayer)
+{
+ for (int i = 1; i < g_Teams.Count(); i++)
+ {
+ if (!bLong)
+ {
+ // Dump short scores
+ UTIL_ClientPrintAll( HUD_PRINTNOTIFY, UTIL_VarArgs("%s: %d\n", g_szTeamColors[i], GetGlobalTeam(i)->GetScore()) );
+ }
+ else
+ {
+ // Dump long scores
+ if (pPlayer == NULL)
+ UTIL_ClientPrintAll( HUD_PRINTNOTIFY, UTIL_VarArgs("Team %d (%s): %d\n", i, g_szTeamColors[i], GetGlobalTeam(i)->GetScore()) );
+ else // Print to just one client
+ ClientPrint( pPlayer, HUD_PRINTNOTIFY, UTIL_VarArgs("Team %d (%s): %d\n", i, g_szTeamColors[i], GetGlobalTeam(i)->GetScore()) );
+ }
+ }
+}
+
+
+//=========================================================================
+// Return the score/frags of a team, depending on whether TeamFrags is on
+int TeamFortress_TeamGetScoreFrags(int tno)
+{
+ CTeam *pTeam = GetGlobalTeam( tno );
+ if ( pTeam )
+ {
+ return pTeam->GetScore();
+ }
+ else
+ {
+ Assert( false );
+ return -1;
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Needed because this is an entity, but should never be used
+//-----------------------------------------------------------------------------
+void CTFCTeam::Init( const char *pName, int iNumber )
+{
+ BaseClass::Init( pName, iNumber );
+
+ // Only detect changes every half-second.
+ NetworkProp()->SetUpdateInterval( 0.75f );
+}
+
+
+color32 CTFCTeam::GetTeamColor()
+{
+ int i = GetTeamNumber();
+ if ( i >= 0 && i < ARRAYSIZE( rgbcolors ) )
+ {
+ return Vector255ToRGBColor( rgbcolors[i] );
+ }
+ else
+ {
+ Assert( false );
+ color32 x;
+ memset( &x, 0, sizeof( x ) );
+ return x;
+ }
+}
+
+
+color32 Vector255ToRGBColor( const Vector &vColor )
+{
+ color32 ret;
+ ret.a = 0;
+ ret.r = (byte)vColor.x;
+ ret.g = (byte)vColor.y;
+ ret.b = (byte)vColor.z;
+ return ret;
+}