Arena
Class ArenaScoreboard

source: c:\runehov\Arena\Classes\ArenaScoreboard.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Info
         |
         +--Engine.ScoreBoard
            |
            +--RuneI.RuneScoreBoard
               |
               +--Arena.ArenaScoreboard
Direct Known Subclasses:None

class ArenaScoreboard
extends RuneI.RuneScoreBoard

//============================================================================= // ArenaScoreboard //=============================================================================
Variables
 string ChallengersText
 string ChampionString
 string ChampionsText
 string CurrentMatch
 string InMatchMsg
 string MatchText
 string QueueText
 string ServerText
 string VsString
 string XOnXText


Function Summary
 void DrawArenaChampion(Canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YStart)
 void DrawHeader(Canvas Canvas)
 void DrawMatchInfo(Canvas Canvas, PlayerReplicationInfo PRI_1, PlayerReplicationInfo PRI_2, float XOffset, float YStart)
 void DrawPlayerInfo(Canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset)
 void DrawTableHeadings(Canvas Canvas)
 void DrawTeamMatchInfo(Canvas Canvas, float XOffset, float YStart)
 void DrawTrailer(Canvas Canvas)
 color GetTeamColor(int team)
 void ShowScores(Canvas Canvas)



Source Code


00001	//=============================================================================
00002	// ArenaScoreboard
00003	//=============================================================================
00004	class ArenaScoreboard extends RuneScoreboard;
00005	
00006	var localized string ChampionString;
00007	var localized string CurrentMatch;
00008	var localized string QueueText;
00009	var localized string VsString;
00010	var localized string InMatchMsg;
00011	var localized string ServerText;
00012	var localized string XOnXText;
00013	var localized string ChampionsText;
00014	var localized string ChallengersText;
00015	var localized string MatchText;
00016	
00017	function DrawTableHeadings(canvas Canvas)
00018	{
00019		local float XL, YL;
00020		local float YOffset;
00021		local float recordString;
00022		local string CurMatchString;
00023	
00024		YOffset = Canvas.CurY;
00025	
00026		Canvas.DrawColor = GoldColor;
00027		Canvas.StrLen("00", XL, YL);
00028		YOffset = Canvas.CurY + YL;
00029	
00030		// Name
00031		Canvas.SetPos(Canvas.ClipX*0.1, YOffset);
00032		Canvas.DrawText(NameText, false);
00033	
00034		// Score
00035		Canvas.SetPos(Canvas.ClipX*0.4, YOffset);
00036		Canvas.DrawText(FragsText, false);
00037	
00038		// Draw Deaths
00039		Canvas.SetPos(Canvas.ClipX*0.6, YOffset);
00040		Canvas.DrawText(DeathsText, false);
00041	
00042		//Draw Queue Number - replaced Awards
00043		Canvas.SetPos(Canvas.ClipX * 0.8, YOffset);
00044		Canvas.DrawText(QueueText, false);
00045	
00046		if (Canvas.ClipX > 512)
00047		{
00048			// Ping
00049			Canvas.SetPos(Canvas.ClipX*0.7, YOffset);
00050			Canvas.DrawText(PingText, false);
00051		}
00052	
00053		// Draw seperator
00054		YOffset += YL*2.25;
00055		Canvas.DrawColor = WhiteColor;
00056		Canvas.SetPos(Canvas.ClipX*0.1, YOffset);
00057		Canvas.DrawTile(Seperator, Canvas.ClipX*0.8, YL*0.5, 0, 0, Seperator.USize, Seperator.VSize);
00058		YOffset += YL*0.75;
00059		Canvas.SetPos(Canvas.ClipX*0.1, YOffset);
00060	
00061	}
00062	
00063	function color GetTeamColor(int team)
00064	{
00065		switch(team)
00066		{
00067			case 0:
00068				return RedColor;
00069			case 1:
00070				return BlueColor;
00071	
00072		}
00073		return WhiteColor;
00074	}
00075	
00076	function DrawPlayerInfo( canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset)
00077	{
00078		
00079		local bool bLocalPlayer;
00080		local PlayerPawn PlayerOwner;
00081		local float XL,YL;
00082		local ArenaGameReplicationInfo GRI;
00083		local int i;
00084	
00085		PlayerOwner = PlayerPawn(Owner);
00086		bLocalPlayer = (PRI.PlayerName == PlayerOwner.PlayerReplicationInfo.PlayerName);
00087		GRI = ArenaGameReplicationInfo(PlayerOwner.GameReplicationInfo);
00088		
00089		if(MyFonts != None)
00090			Canvas.Font = MyFonts.GetStaticMedFont();
00091		else
00092			Canvas.Font = RegFont;
00093	
00094		// Draw Ready
00095		if (PRI.bReadyToPlay)
00096		{
00097			Canvas.StrLen("R ", XL, YL);
00098			Canvas.SetPos(Canvas.ClipX*0.1-XL, YOffset);
00099			Canvas.DrawText(ReadyText, false);
00100		}
00101	
00102		if (bLocalPlayer)
00103			Canvas.DrawColor = VioletColor;
00104		else
00105		{
00106			if(PRI.Team != 255 && GRI.matchSize != 1)
00107				Canvas.DrawColor = GetTeamColor(GRI.TeamColor[PRI.Team]);
00108			else
00109				Canvas.DrawColor = WhiteColor;
00110		}
00111			
00112		// Draw Name
00113		if (PRI.bAdmin)	
00114		{
00115			if(MyFonts != None)
00116				Canvas.Font = MyFonts.GetStaticSmallFont();
00117			else
00118				Canvas.Font = Font'SmallFont';
00119		}
00120		else
00121		{	
00122			if(MyFonts != None)
00123				Canvas.Font = MyFonts.GetStaticMedFont();
00124			else
00125				Canvas.Font = RegFont;
00126		}
00127	
00128		Canvas.SetPos(Canvas.ClipX*0.1, YOffset);
00129		Canvas.DrawText(PRI.PlayerName, false);
00130		
00131		if(MyFonts != None)
00132			Canvas.Font = MyFonts.GetStaticMedFont();
00133		else
00134			Canvas.Font = RegFont;
00135	
00136		// Draw Score
00137		Canvas.SetPos(Canvas.ClipX*0.4, YOffset);
00138		Canvas.DrawText(int(PRI.Score), false);
00139	
00140		// Draw Deaths
00141		Canvas.SetPos(Canvas.ClipX*0.6, YOffset);
00142		Canvas.DrawText(int(PRI.Deaths), false);
00143	
00144		if (Canvas.ClipX > 512 && Level.Netmode != NM_Standalone)
00145		{
00146			// Draw Ping
00147			Canvas.SetPos(Canvas.ClipX*0.7, YOffset);
00148			Canvas.DrawText(PRI.Ping, false);
00149		}
00150	
00151		if(PRI.TeamID <= 16)
00152		{
00153			Canvas.SetPos(Canvas.ClipX * 0.8, YOffset);
00154			Canvas.DrawText(TwoDigitString(PRI.TeamID), false);
00155		}
00156	}
00157	
00158	function DrawHeader( canvas Canvas )
00159	{
00160		local GameReplicationInfo GRI;
00161		local ArenaGameReplicationInfo ArenaGRI;
00162		local float XL, YL, YL2;
00163		local float YOffset;
00164		local PlayerPawn PlayerOwner;
00165		local string matchType;
00166	
00167	
00168		PlayerOwner = PlayerPawn(Owner);
00169	
00170		Canvas.StrLen("TEST", XL, YL);
00171		YOffset = 5*YL;
00172	
00173		if (Canvas.ClipX > 500)
00174		{
00175			GRI = PlayerOwner.GameReplicationInfo;
00176	
00177			if (Level.Netmode != NM_StandAlone)
00178			{
00179				Canvas.DrawColor = WhiteColor;
00180				Canvas.StrLen(GRI.ServerName, XL, YL2);
00181				Canvas.SetPos((Canvas.ClipX * 0.5) - (XL * 0.5), YOffset);
00182				Canvas.DrawText(GRI.ServerName, false);
00183	
00184			}
00185	
00186			YOffset += YL;
00187	
00188			ArenaGRI = ArenaGameReplicationInfo(GRI);
00189			
00190			matchType = ArenaGRI.matchSize $ XOnXText $ArenaGRI.matchSize $ ServerText;
00191			Canvas.StrLen(matchType, XL, YL2);
00192			Canvas.SetPos((Canvas.ClipX * 0.5) - (XL * 0.5), YOffset);
00193			Canvas.DrawText(matchType, false);
00194	
00195			YOffset = 7*YL;
00196	
00197			Canvas.DrawColor = GreenColor;
00198			// Left Column
00199			Canvas.SetPos(0.1*Canvas.ClipX, YOffset);
00200			Canvas.DrawText(MapTitleMsg$Level.Title, true);
00201			YOffset += YL;
00202	
00203			Canvas.SetPos(0.1*Canvas.ClipX, YOffset);
00204			Canvas.DrawText("Author: "$Level.Author, true);
00205			YOffset += YL;
00206	
00207			// Right Column
00208			YOffset = 7*YL;
00209	
00210			Canvas.DrawTextRightJustify(GameTypeMsg$GRI.GameName, 0.9*Canvas.ClipX, YOffset);
00211			YOffset += YL;
00212	
00213			Canvas.DrawTextRightJustify(GRI.NumPlayers$NumPlayersMsg, 0.9*Canvas.ClipX, YOffset);
00214			YOffset += 2*YL;
00215	
00216			Canvas.SetPos(0.0, YOffset);
00217		}
00218	}
00219	
00220	function DrawMatchInfo(canvas Canvas, PlayerReplicationInfo PRI_1, PlayerReplicationInfo PRI_2, float XOffset, float YStart)
00221	{
00222		local float XL, YL;
00223		local float curY;
00224		local string MatchString;
00225	
00226		curY = YStart;
00227	
00228		Canvas.StrLen(CurrentMatch, XL, YL);
00229		curY += YL;
00230	
00231		Canvas.DrawColor = LightCyanColor;
00232		Canvas.SetPos((Canvas.ClipX * 0.5) - (XL * 0.5), curY);
00233		Canvas.DrawText(CurrentMatch);
00234		curY += YL;
00235	
00236		if(PRI_1 != None && PRI_2 != None)
00237		{
00238			Canvas.DrawColor = LightGreenColor;
00239			MatchString = PRI_1.PlayerName $ VsString $ PRI_2.PlayerName;
00240			Canvas.StrLen(MatchString, XL, YL);
00241			Canvas.SetPos((Canvas.ClipX * 0.5) - (XL * 0.5), curY);
00242			Canvas.DrawText(MatchString, false);
00243		}
00244	
00245		Canvas.SetPos(0.0, curY += YL);
00246	}
00247	
00248	function DrawTeamMatchInfo(canvas Canvas, float XOffset, float YStart)
00249	{
00250		local float XL, YL;
00251		local float curY, curX, startingX;
00252		local ArenaGameReplicationInfo GRI;
00253	
00254		GRI = ArenaGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo);
00255	
00256		curY = YStart;
00257	
00258		curY += YL;
00259		Canvas.StrLen(CurrentMatch, XL, YL);
00260		Canvas.DrawColor = LightCyanColor;
00261		Canvas.SetPos((Canvas.ClipX * 0.5) - (XL * 0.5), curY);
00262		Canvas.DrawText(CurrentMatch);
00263		curY += YL;
00264	
00265		//Canvas.StrLen(GetTeamString(GRI.TeamColor[0]) $ VsString $ GetTeamString(GRI.TeamColor[1]), XL, YL);
00266		Canvas.StrLen(ChampionsText $ VsString $ ChallengersText, XL, YL);
00267		startingX = (Canvas.ClipX * 0.5) - (XL * 0.5);
00268		curX = startingX;
00269	
00270		Canvas.DrawColor = GetTeamColor(GRI.TeamColor[0]);
00271		Canvas.SetPos(curX, curY);
00272		Canvas.DrawText(ChampionsText, false);//GetTeamString(GRI.TeamColor[0]), false);
00273		Canvas.StrLen(ChampionsText, XL, YL);//GetTeamString(GRI.TeamColor[0]), XL, YL);
00274		curX += XL;
00275	
00276		Canvas.DrawColor = LightGreenColor;
00277		Canvas.SetPos(curX, curY);
00278		Canvas.DrawText(VsString, false);
00279		Canvas.StrLen(VsString, XL, YL);
00280		curX += XL;
00281		
00282		Canvas.DrawColor = GetTeamColor(GRI.TeamColor[1]);
00283		Canvas.SetPos(curX, curY);
00284		Canvas.DrawText(ChallengersText, false);//GetTeamString(GRI.TeamColor[1]), false);
00285	
00286		Canvas.SetPos(0.0, curY += YL);
00287	}
00288	
00289	function DrawArenaChampion(canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YStart)
00290	{
00291		local float XL, YL;
00292		local float curY;
00293	
00294		curY = YStart;
00295	
00296		Canvas.StrLen(ChampionString, XL, YL);
00297		curY += YL;
00298	
00299		Canvas.DrawColor = LightCyanColor;
00300		Canvas.SetPos((Canvas.ClipX * 0.5) - (XL * 0.5), curY);
00301		Canvas.DrawText(ChampionString);
00302	
00303		if(PRI != None)
00304		{
00305			Canvas.DrawColor = LightGreenColor;
00306			Canvas.StrLen(PRI.PlayerName, XL, YL);
00307			curY += YL;
00308			Canvas.SetPos((Canvas.ClipX * 0.5) - (XL * 0.5), curY);
00309			Canvas.DrawText(PRI.PlayerName, false);
00310		}
00311	
00312		Canvas.SetPos(0.0, curY += YL);
00313	}
00314	
00315	function ShowScores( canvas Canvas )
00316	{
00317		local PlayerReplicationInfo PRI;
00318		local PlayerReplicationInfo ChampionPRI, ChallengerPRI;
00319		local ArenaGameReplicationInfo ArenaGRI;
00320		local int PlayerCount, I;
00321		local float XL, YL;
00322		local float YOffset, YStart;
00323	
00324		// Sort the PRIs
00325		for (i=0; i<ArrayCount(Ordered); i++)
00326			Ordered[i] = None;
00327		for (i=0; i<32; i++)
00328		{
00329			if (PlayerPawn(Owner).GameReplicationInfo.PRIArray[i] != None)
00330			{
00331				PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00332				if ( !PRI.bIsSpectator || PRI.bWaitingPlayer )
00333				{
00334					Ordered[PlayerCount] = PRI;
00335					PlayerCount++;
00336					if (PlayerCount == ArrayCount(Ordered))
00337						break;
00338				}
00339			}
00340		}
00341		SortScores(PlayerCount);
00342	
00343		if(MyFonts != None)
00344			Canvas.Font = MyFonts.GetStaticMedFont();
00345		else
00346			Canvas.Font = RegFont;
00347	
00348		Canvas.DrawColor = WhiteColor;
00349	
00350		// Calculate vertical spacing
00351		Canvas.StrLen("TEST", XL, YL);
00352	
00353		// Header
00354	
00355		ArenaGRI = ArenaGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo);
00356		DrawHeader(Canvas);
00357		DrawArenaChampion(Canvas, Ordered[0], 0, Canvas.CurY + YL);
00358	
00359		if(ArenaGRI != None && ArenaGRI.matchSize > 1)
00360			DrawTeamMatchInfo(Canvas, 0, Canvas.CurY);
00361		else
00362		{
00363			for(i = 0; i < 32; i++)
00364			{
00365				if(PlayerPawn(Owner).GameReplicationInfo.PRIArray[i] != None)
00366				{
00367					if(PlayerPawn(Owner).GameReplicationInfo.PRIArray[i].Team == 0)
00368						ChampionPRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00369					else if(PlayerPawn(Owner).GameReplicationInfo.PRIArray[i].Team == 1)
00370						ChallengerPRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00371				}
00372	
00373				if(ChallengerPRI != None && ChampionPRI != None)
00374				{
00375					DrawMatchInfo(Canvas, ChampionPRI, ChallengerPRI, 0, Canvas.CurY);
00376					break;
00377				}
00378	
00379			}
00380		}
00381			
00382		DrawTableHeadings(Canvas);
00383	
00384		Canvas.StrLen("TEST", XL, YL);
00385		YStart = Canvas.CurY + YL;
00386	
00387		//TODO: Calculate continuous spacing based on screensize available
00388	
00389		if (PlayerCount < 15)
00390			YL *= 2;
00391		else if (PlayerCount < 20)
00392			YL *= 1.5;
00393		if (PlayerCount > 15)
00394			PlayerCount = FMin(PlayerCount, (Canvas.ClipY - YStart)/YL - 1);
00395	
00396		DrawBackground(Canvas, 0.1*Canvas.ClipX, YStart-YL*0.25+2, 0.8*Canvas.ClipX, PlayerCount*YL);
00397	
00398		//YStart += YL;
00399		YOffset = YStart;
00400	
00401		for ( I=0; I<PlayerCount; I++ )
00402		{
00403			YOffset = YStart + I*YL;
00404			DrawPlayerInfo(Canvas, Ordered[I], 0, YOffset);
00405		}
00406	
00407		// Draw bottom seperator
00408		Canvas.StrLen("TEST", XL, YL);
00409		YOffset += YL;
00410		Canvas.SetPos(0, YOffset);
00411	
00412		// Trailer
00413		DrawTrailer(Canvas);
00414	
00415		Canvas.DrawColor = WhiteColor;
00416		Canvas.SetPos(0, YOffset);
00417	}
00418	
00419	function DrawTrailer( canvas Canvas )
00420	{
00421		local int Hours, Minutes, Seconds;
00422		local string HourString, MinuteString, SecondString;
00423		local float XL, YL;
00424		local int curMatch, maxMatch;
00425		local PlayerPawn PlayerOwner;
00426		local int YOffset;
00427		local ArenaGameReplicationInfo ArenaGRI;
00428		local string text;
00429	
00430		PlayerOwner = PlayerPawn(Owner);
00431		Canvas.bCenter = true;
00432		Canvas.DrawColor = WhiteColor;
00433		Canvas.StrLen("Test", XL, YL);
00434	
00435		// Bottom seperator
00436		YOffset = Canvas.CurY;
00437		YOffset += YL*0.25;
00438		Canvas.SetPos(Canvas.ClipX*0.1, YOffset);
00439		Canvas.DrawTile(Seperator, Canvas.ClipX*0.8, YL*0.5, 0, 0, Seperator.USize, Seperator.VSize);
00440	
00441		if (Canvas.ClipX > 500)
00442		{
00443			// Now start from bottom
00444			Canvas.SetPos(0, Canvas.ClipY - YL);
00445	
00446			if ( bTimeDown || (PlayerOwner.GameReplicationInfo.RemainingTime > 0) )
00447			{
00448				bTimeDown = true;
00449				if ( PlayerOwner.GameReplicationInfo.RemainingTime <= 0 )
00450					Canvas.DrawText(RemainingTimeMsg@"00:00", true);
00451				else
00452				{
00453					Minutes = PlayerOwner.GameReplicationInfo.RemainingTime/60;
00454					Seconds = PlayerOwner.GameReplicationInfo.RemainingTime % 60;
00455					Canvas.DrawText(RemainingTimeMsg@TwoDigitString(Minutes)$":"$TwoDigitString(Seconds), true);
00456				}
00457			}
00458			else
00459			{
00460				Seconds = int(Level.TimeSeconds);
00461				Minutes = Seconds / 60;
00462				Hours   = Minutes / 60;
00463				Seconds = Seconds - (Minutes * 60);
00464				Minutes = Minutes - (Hours * 60);
00465	
00466				if (Seconds < 10)
00467					SecondString = "0"$Seconds;
00468				else
00469					SecondString = string(Seconds);
00470	
00471				if (Minutes < 10)
00472					MinuteString = "0"$Minutes;
00473				else
00474					MinuteString = string(Minutes);
00475	
00476				if (Hours < 10)
00477					HourString = "0"$Hours;
00478				else
00479					HourString = string(Hours);
00480	
00481				Canvas.DrawText(ElapsedTimeMsg$HourString$":"$MinuteString$":"$SecondString, true);
00482			}
00483		}
00484	
00485		// Hit fire to continue message
00486		Canvas.bCenter = true;
00487		Canvas.StrLen("Test", XL, YL);
00488		Canvas.SetPos(0, Canvas.ClipY - YL*4);
00489		Canvas.DrawColor = RedColor;
00490		if ( PlayerOwner.GameReplicationInfo.GameEndedComments != "" )
00491			Canvas.DrawText(ContinueMsg@PlayerOwner.GameReplicationInfo.GameEndedComments@ContinueTrailer, true);
00492		else if ((PlayerOwner != None) && (PlayerOwner.Health <= 0) )
00493		{
00494			ArenaGRI = ArenaGameReplicationInfo(PlayerOwner.GameReplicationInfo);
00495			if(ArenaGRI != None && ArenaGRI.bInMatch)
00496			{
00497				if(PlayerOwner.PlayerReplicationInfo.Team == 0 ||  PlayerOwner.PlayerReplicationInfo.Team == 1)
00498				{
00499					Canvas.DrawText(InMatchMsg, true);
00500					Canvas.bCenter = false;
00501					return;
00502				}
00503			}
00504	
00505			Canvas.DrawText(RestartMsg, true);
00506		}
00507		else
00508		{
00509			curMatch = ArenaGameReplicationInfo(PlayerOwner.GameReplicationInfo).CurMatch;
00510			MaxMatch = ArenaGameReplicationInfo(PlayerOwner.GameReplicationInfo).FragLimit;
00511	
00512			if(MaxMatch > 0)
00513			{
00514				text = MatchText $ string(curMatch) $ "/" $ MaxMatch;
00515				Canvas.DrawText(text, true);
00516			}		
00517		}
00518	
00519		Canvas.bCenter = false;	
00520	}
00521	
00522	defaultproperties
00523	{
00524	    ChampionString="Arena Champion"
00525	    CurrentMatch="Current Match"
00526	    QueueText="Position"
00527	    VsString=" vs. "
00528	    InMatchMsg="PLEASE WAIT UNTIL MATCH IS FINISHED"
00529	    ServerText=" Server"
00530	    XOnXText=" on "
00531	    ChampionsText="Champions"
00532	    ChallengersText="Challengers"
00533	    MatchText="Match "
00534	    FragsText="Victories"
00535	    DeathsText="Losses"
00536	}

End Source Code