Botpack
Class TeamScoreBoard

source: e:\games\UnrealTournament\Botpack\Classes\TeamScoreBoard.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Info
         |
         +--Engine.ScoreBoard
            |
            +--Botpack.TournamentScoreBoard
               |
               +--Botpack.TeamScoreBoard
Direct Known Subclasses:AssaultScoreBoard, DominationScoreBoard, UnrealCTFScoreBoard

class TeamScoreBoard
extends Botpack.TournamentScoreBoard

//============================================================================= // TeamScoreBoard //=============================================================================
Variables
 color AltTeamColor[4]
 OrdersString, InString
 TournamentGameReplicationInfo OwnerGame
 PlayerReplicationInfo OwnerInfo
 string PlayersNotShown
 color TeamColor[4]
 string TeamName[4]


Function Summary
 void DrawNameAndPing(Canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset, bool bCompressed)
 void DrawScore(Canvas Canvas, float Score, float XOffset, float YOffset)
 void DrawVictoryConditions(Canvas Canvas)
 void ShowScores(Canvas Canvas)



Source Code


00001	//=============================================================================
00002	// TeamScoreBoard
00003	//=============================================================================
00004	class TeamScoreBoard extends TournamentScoreBoard;
00005	
00006	var localized string TeamName[4];
00007	var localized string OrdersString, InString;
00008	var localized string PlayersNotShown;
00009	var() color TeamColor[4];
00010	var() color AltTeamColor[4];
00011	var PlayerReplicationInfo OwnerInfo;
00012	var TournamentGameReplicationInfo OwnerGame;
00013	
00014	function ShowScores( canvas Canvas )
00015	{
00016		local PlayerReplicationInfo PRI;
00017		local int PlayerCount, i;
00018		local float LoopCountTeam[4];
00019		local float XL, YL, XOffset, YOffset, XStart;
00020		local int PlayerCounts[4];
00021		local int LongLists[4];
00022		local int BottomSlot[4];
00023		local font CanvasFont;
00024		local bool bCompressed;
00025		local float r;
00026	
00027		OwnerInfo = Pawn(Owner).PlayerReplicationInfo;
00028		OwnerGame = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo);	
00029		Canvas.Style = ERenderStyle.STY_Normal;
00030		CanvasFont = Canvas.Font;
00031	
00032		// Header
00033		DrawHeader(Canvas);
00034	
00035		for ( i=0; i<32; i++ )
00036			Ordered[i] = None;
00037	
00038		for ( i=0; i<32; i++ )
00039		{
00040			if (PlayerPawn(Owner).GameReplicationInfo.PRIArray[i] != None)
00041			{
00042				PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00043				if ( !PRI.bIsSpectator || PRI.bWaitingPlayer )
00044				{
00045					Ordered[PlayerCount] = PRI;
00046					PlayerCount++;
00047					PlayerCounts[PRI.Team]++;
00048				}
00049			}
00050		}
00051	
00052		SortScores(PlayerCount);
00053		Canvas.Font = MyFonts.GetMediumFont( Canvas.ClipX );
00054		Canvas.StrLen("TEXT", XL, YL);
00055		ScoreStart = Canvas.CurY + YL*2;
00056		if ( ScoreStart + PlayerCount * YL + 2 > Canvas.ClipY )
00057		{
00058			bCompressed = true;
00059			CanvasFont = Canvas.Font;
00060			Canvas.Font = font'SmallFont';
00061			r = YL;
00062			Canvas.StrLen("TEXT", XL, YL);
00063			r = YL/r;
00064			Canvas.Font = CanvasFont;
00065		}
00066		for ( I=0; I<PlayerCount; I++ )
00067		{
00068			if ( Ordered[I].Team < 4 )
00069			{
00070				if ( Ordered[I].Team % 2 == 0 )
00071					XOffset = (Canvas.ClipX / 4) - (Canvas.ClipX / 8);
00072				else
00073					XOffset = ((Canvas.ClipX / 4) * 3) - (Canvas.ClipX / 8);
00074	
00075				Canvas.StrLen("TEXT", XL, YL);
00076				Canvas.DrawColor = AltTeamColor[Ordered[I].Team];
00077				YOffset = ScoreStart + (LoopCountTeam[Ordered[I].Team] * YL) + 2;
00078				if (( Ordered[I].Team > 1 ) && ( PlayerCounts[Ordered[I].Team-2] > 0 ))
00079				{
00080					BottomSlot[Ordered[I].Team] = 1;
00081					YOffset = ScoreStart + YL*11 + LoopCountTeam[Ordered[I].Team]*YL;
00082				}
00083	
00084				// Draw Name and Ping
00085				if ( (Ordered[I].Team < 2) && (BottomSlot[Ordered[I].Team] == 0) && (PlayerCounts[Ordered[I].Team+2] == 0))
00086				{
00087					LongLists[Ordered[I].Team] = 1;
00088					DrawNameAndPing( Canvas, Ordered[I], XOffset, YOffset, bCompressed);
00089				} 
00090				else if (LoopCountTeam[Ordered[I].Team] < 8)
00091					DrawNameAndPing( Canvas, Ordered[I], XOffset, YOffset, bCompressed);
00092				if ( bCompressed )
00093					LoopCountTeam[Ordered[I].Team] += 1;
00094				else
00095					LoopCountTeam[Ordered[I].Team] += 2;
00096			}
00097		}
00098	
00099		for ( i=0; i<4; i++ )
00100		{
00101			Canvas.Font = MyFonts.GetMediumFont( Canvas.ClipX );
00102			if ( PlayerCounts[i] > 0 )
00103			{
00104				if ( i % 2 == 0 )
00105					XOffset = (Canvas.ClipX / 4) - (Canvas.ClipX / 8);
00106				else
00107					XOffset = ((Canvas.ClipX / 4) * 3) - (Canvas.ClipX / 8);
00108				YOffset = ScoreStart - YL + 2;
00109	
00110				if ( i > 1 )
00111					if (PlayerCounts[i-2] > 0)
00112						YOffset = ScoreStart + YL*10;
00113	
00114				Canvas.DrawColor = TeamColor[i];
00115				Canvas.SetPos(XOffset, YOffset);
00116				Canvas.StrLen(TeamName[i], XL, YL);
00117				Canvas.DrawText(TeamName[i], false);
00118				Canvas.StrLen(int(OwnerGame.Teams[i].Score), XL, YL);
00119				Canvas.SetPos(XOffset + (Canvas.ClipX/4) - XL, YOffset);
00120				Canvas.DrawText(int(OwnerGame.Teams[i].Score), false);
00121					
00122				if ( PlayerCounts[i] > 4 )
00123				{
00124					if ( i < 2 )
00125						YOffset = ScoreStart + YL*8;
00126					else
00127						YOffset = ScoreStart + YL*19;
00128					Canvas.Font = MyFonts.GetSmallFont( Canvas.ClipX );
00129					Canvas.SetPos(XOffset, YOffset);
00130					if (LongLists[i] == 0)
00131						Canvas.DrawText(PlayerCounts[i] - 4 @ PlayersNotShown, false);
00132				}
00133			}
00134		}
00135	
00136		// Trailer
00137		if ( !Level.bLowRes )
00138		{
00139			Canvas.Font = MyFonts.GetSmallFont( Canvas.ClipX );
00140			DrawTrailer(Canvas);
00141		}
00142		Canvas.Font = CanvasFont;
00143		Canvas.DrawColor = WhiteColor;
00144	}
00145	
00146	function DrawScore(Canvas Canvas, float Score, float XOffset, float YOffset)
00147	{
00148		local float XL, YL;
00149	
00150		Canvas.StrLen(string(int(Score)), XL, YL);
00151		Canvas.SetPos(XOffset + (Canvas.ClipX/4) - XL, YOffset);
00152		Canvas.DrawText(int(Score), False);
00153	}
00154	
00155	function DrawNameAndPing(Canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset, bool bCompressed)
00156	{
00157		local float XL, YL, XL2, YL2, YB;
00158		local BotReplicationInfo BRI;
00159		local String S, O, L;
00160		local Font CanvasFont;
00161		local bool bAdminPlayer;
00162		local PlayerPawn PlayerOwner;
00163		local int Time;
00164	
00165		PlayerOwner = PlayerPawn(Owner);
00166	
00167		bAdminPlayer = PRI.bAdmin;
00168	
00169		// Draw Name
00170		if (PRI.PlayerName == PlayerOwner.PlayerReplicationInfo.PlayerName)
00171			Canvas.DrawColor = GoldColor;
00172	
00173		if ( bAdminPlayer )
00174			Canvas.DrawColor = WhiteColor;
00175	
00176		Canvas.SetPos(XOffset, YOffset);
00177		Canvas.DrawText(PRI.PlayerName, False);
00178		Canvas.StrLen(PRI.PlayerName, XL, YB);
00179	
00180		if ( Canvas.ClipX > 512 )
00181		{
00182			CanvasFont = Canvas.Font;
00183			Canvas.Font = Font'SmallFont';
00184			Canvas.DrawColor = WhiteColor;
00185	
00186			if (Level.NetMode != NM_Standalone)
00187			{
00188				if ( !bCompressed || (Canvas.ClipX > 640) )
00189				{
00190					// Draw Time
00191					Time = Max(1, (Level.TimeSeconds + PlayerOwner.PlayerReplicationInfo.StartTime - PRI.StartTime)/60);
00192					Canvas.StrLen(TimeString$":     ", XL, YL);
00193					Canvas.SetPos(XOffset - XL - 6, YOffset);
00194					Canvas.DrawText(TimeString$":"@Time, false);
00195				}
00196	
00197				// Draw Ping
00198				Canvas.StrLen(PingString$":     ", XL2, YL2);
00199				Canvas.SetPos(XOffset - XL2 - 6, YOffset + (YL+1));
00200				Canvas.DrawText(PingString$":"@PRI.Ping, false);
00201			}
00202			Canvas.Font = CanvasFont;
00203		}
00204	
00205		// Draw Score
00206		if (PRI.PlayerName == PlayerOwner.PlayerReplicationInfo.PlayerName)
00207			Canvas.DrawColor = GoldColor;
00208		else
00209			Canvas.DrawColor = TeamColor[PRI.Team];
00210		DrawScore(Canvas, PRI.Score, XOffset, YOffset);
00211	
00212		if (Canvas.ClipX < 512)
00213			return;
00214	
00215		// Draw location, Order
00216		if ( !bCompressed && (PRI.Team == OwnerInfo.Team) )
00217		{
00218			CanvasFont = Canvas.Font;
00219			Canvas.Font = Font'SmallFont';
00220	
00221			if ( PRI.PlayerLocation != None )
00222				L = PRI.PlayerLocation.LocationName;
00223			else if ( PRI.PlayerZone != None )
00224				L = PRI.PlayerZone.ZoneName;
00225			else 
00226				L = "";
00227			if ( L != "" )
00228			{
00229				L = InString@L;
00230				Canvas.SetPos(XOffset, YOffset + YB);
00231				Canvas.DrawText(L, False);
00232			}
00233			O = OwnerGame.GetOrderString(PRI);
00234			if (O != "")
00235			{
00236				O = OrdersString@O;
00237				Canvas.StrLen(O, XL2, YL2);
00238				Canvas.SetPos(XOffset, YOffset + YB + YL2);
00239				Canvas.DrawText(O, False);
00240			}
00241			Canvas.Font = CanvasFont;
00242		}
00243	}
00244	
00245	function DrawVictoryConditions(Canvas Canvas)
00246	{
00247		local TournamentGameReplicationInfo TGRI;
00248		local float XL, YL;
00249	
00250		TGRI = TournamentGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo);
00251		if ( TGRI == None )
00252			return;
00253	
00254		Canvas.DrawText(TGRI.GameName);
00255		Canvas.StrLen("Test", XL, YL);
00256		Canvas.SetPos(0, Canvas.CurY - YL);
00257	
00258		if ( TGRI.GoalTeamScore > 0 )
00259		{
00260			Canvas.DrawText(FragGoal@TGRI.GoalTeamScore);
00261			Canvas.StrLen("Test", XL, YL);
00262			Canvas.SetPos(0, Canvas.CurY - YL);
00263		}
00264	
00265		if ( TGRI.TimeLimit > 0 )
00266			Canvas.DrawText(TimeLimit@TGRI.TimeLimit$":00");
00267	}
00268	
00269	defaultproperties
00270	{
00271	     TeamName(0)="Red Team"
00272	     TeamName(1)="Blue Team"
00273	     TeamName(2)="Green Team"
00274	     TeamName(3)="Gold Team"
00275	     OrdersString="Orders:"
00276	     InString="Location:"
00277	     PlayersNotShown="Player[s] not shown."
00278	     TeamColor(0)=(R=255)
00279	     TeamColor(1)=(G=128,B=255)
00280	     TeamColor(2)=(G=255)
00281	     TeamColor(3)=(R=255,G=255)
00282	     AltTeamColor(0)=(R=200)
00283	     AltTeamColor(1)=(G=94,B=187)
00284	     AltTeamColor(2)=(G=128)
00285	     AltTeamColor(3)=(R=255,G=255,B=128)
00286	}

End Source Code