You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
279 lines
7.3 KiB
279 lines
7.3 KiB
//========= 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; |
|
}
|
|
|