RuneI
Class RuneScoreBoardTeam

source: c:\runehov\RuneI\Classes\RuneScoreboardTeam.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Info
         |
         +--Engine.ScoreBoard
            |
            +--RuneI.RuneScoreBoard
               |
               +--RuneI.RuneScoreBoardTeam
Direct Known Subclasses:SarkBallScoreBoard

class RuneScoreBoardTeam
extends RuneI.RuneScoreBoard

//============================================================================= // RuneScoreBoardTeam //=============================================================================
Variables
 TeamInfo OrderedTeams[4]


Function Summary
 void DrawBackground(Canvas Canvas, int X, int Y, int W, int H)
 void DrawPlayerInfo(Canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset)
 void DrawTableHeadings(Canvas Canvas)
 void DrawTeamInfo(Canvas Canvas, TeamInfo TI, float XOffset, float YOffset)
 color GetTeamColor(int team)
 void ShowScores(Canvas Canvas)
 void SortScores(int N)
 void SortTeams(int N)



Source Code


00001	//=============================================================================
00002	// RuneScoreBoardTeam
00003	//=============================================================================
00004	class RuneScoreBoardTeam extends RuneScoreBoard;
00005	
00006	var TeamInfo OrderedTeams[4];
00007	
00008	
00009	function color GetTeamColor(int team)
00010	{
00011		switch(team)
00012		{
00013			case 0:
00014				return RedColor;
00015			case 1:
00016				return BlueColor;
00017			case 2:
00018				return GreenColor;
00019			case 3:
00020				return GoldColor;
00021		}
00022		return WhiteColor;
00023	}
00024	
00025	function DrawBackground( canvas Canvas, int X, int Y, int W, int H)
00026	{
00027		local PlayerReplicationInfo PRI;
00028		PRI = PlayerPawn(Owner).PlayerReplicationInfo;
00029		BackgroundColor=GetTeamColor(PRI.Team);
00030		Super.DrawBackground( Canvas, X, Y, W, H);
00031	}
00032	
00033	function SortTeams(int N)
00034	{
00035		local int i,j,Max;
00036		local TeamInfo TempTI;
00037	
00038		// Determine team standings
00039		for (i=0; i<N-1; i++)
00040		{
00041			Max = i;
00042			for (j=i+1; j<N; j++)
00043			{
00044				if (OrderedTeams[j].Score > OrderedTeams[Max].Score)
00045					Max=j;
00046				else if (OrderedTeams[j].Score == OrderedTeams[Max].Score &&
00047					OrderedTeams[j].Size < OrderedTeams[Max].Size)
00048					Max=j;
00049				//TODO: Add deaths to teaminfo
00050				else if (OrderedTeams[j].Score == OrderedTeams[Max].Score &&
00051					OrderedTeams[j].Size == OrderedTeams[Max].Size &&
00052					OrderedTeams[j].TeamIndex < OrderedTeams[Max].TeamIndex)
00053					Max=j;
00054			}
00055	
00056			TempTI = OrderedTeams[Max];
00057			OrderedTeams[Max] = OrderedTeams[i];
00058			OrderedTeams[i] = TempTI;
00059		}
00060	}
00061	
00062	function SortScores(int N)
00063	{
00064		local int i,j,Max;
00065		local PlayerReplicationInfo TempPRI;
00066	
00067		// Determine team standings
00068		for (i=0; i<N-1; i++)
00069		{
00070			Max = i;
00071			for (j=i+1; j<N; j++)
00072			{
00073				if (Ordered[j].Score > Ordered[Max].Score)
00074					Max=j;
00075				else if ((Ordered[j].Score == Ordered[Max].Score) && (Ordered[j].Deaths < Ordered[Max].Deaths))
00076					Max=j;
00077				else if ((Ordered[j].Score == Ordered[Max].Score) && (Ordered[j].Deaths == Ordered[Max].Deaths) &&
00078					(Ordered[j].PlayerID < Ordered[Max].Score))
00079					Max=j;
00080			}
00081	
00082			TempPRI = Ordered[Max];
00083			Ordered[Max] = Ordered[i];
00084			Ordered[i] = TempPRI;
00085		}
00086	}
00087	
00088	function DrawTableHeadings( canvas Canvas)
00089	{
00090		local float XL, YL;
00091		local float YOffset;
00092	
00093		Canvas.DrawColor = GoldColor;
00094		Canvas.StrLen("00", XL, YL);
00095		YOffset = Canvas.CurY;
00096	
00097		// Name
00098		Canvas.SetPos(Canvas.ClipX*0.13, YOffset);
00099		Canvas.DrawText(NameText, false);
00100	
00101		// Score
00102		Canvas.SetPos(Canvas.ClipX*0.5, YOffset);
00103		Canvas.DrawText(FragsText, false);
00104	
00105		// Draw Deaths
00106		Canvas.SetPos(Canvas.ClipX*0.6, YOffset);
00107		Canvas.DrawText(DeathsText, false);
00108	
00109		// Draw Awards
00110		Canvas.SetPos(Canvas.ClipX*0.8, YOffset);
00111		Canvas.DrawText(AwardsText, false);
00112	
00113		if (Canvas.ClipX > 512)
00114		{
00115			// Ping
00116			Canvas.SetPos(Canvas.ClipX*0.7, YOffset);
00117			Canvas.DrawText(PingText, false);
00118		}
00119	
00120		// Draw seperator
00121		YOffset += YL*1.25;
00122		Canvas.DrawColor = WhiteColor;
00123		Canvas.SetPos(Canvas.ClipX*0.1, YOffset);
00124		Canvas.DrawTile(Seperator, Canvas.ClipX*0.8, YL*0.5, 0, 0, Seperator.USize, Seperator.VSize);
00125		YOffset += YL*0.75;
00126		Canvas.SetPos(Canvas.ClipX*0.1, YOffset);
00127	}
00128	
00129	function DrawTeamInfo( canvas Canvas, TeamInfo TI, float XOffset, float YOffset)
00130	{
00131		local float XL1, YL1, XL2, YL2;
00132	
00133		Canvas.DrawColor = GetTeamColor(TI.TeamIndex);
00134		Canvas.StrLen("00", XL1, YL1);
00135			//FONT ALTER
00136		//Canvas.Font = Canvas.BigFont;
00137		if(MyFonts != None)
00138			Canvas.Font = MyFonts.GetStaticBigFont();
00139		else
00140			Canvas.Font = Canvas.BigFont;
00141	
00142		Canvas.StrLen("00", XL2, YL2);
00143		Canvas.SetPos(Canvas.ClipX*0.1, YOffset-((YL2-YL1)*0.5));
00144		Canvas.DrawText(int(TI.Score), false);
00145		Canvas.DrawColor = WhiteColor;
00146			//FONT ALTER
00147		//Canvas.Font = RegFont;
00148		if(MyFonts != None)
00149			Canvas.Font = MyFonts.GetStaticMedFont();
00150		else
00151			Canvas.Font = RegFont;
00152	}
00153	
00154	function DrawPlayerInfo( canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset)
00155	{
00156		local bool bLocalPlayer;
00157		local PlayerPawn PlayerOwner;
00158		local float XL,YL;
00159		local int AwardPos;
00160		local float TeamScore;
00161	
00162		PlayerOwner = PlayerPawn(Owner);
00163		bLocalPlayer = (PRI.PlayerName == PlayerOwner.PlayerReplicationInfo.PlayerName);
00164			//FONT ALTER
00165	//	Canvas.Font = RegFont;
00166		if(MyFonts != None)
00167			Canvas.Font = MyFonts.GetStaticMedFont();
00168		else
00169			Canvas.Font = RegFont;
00170	
00171		if (PRI.Team < 4)
00172			TeamScore = RuneGameReplicationInfo(PlayerOwner.GameReplicationInfo).Teams[PRI.Team].Score;
00173		else
00174			TeamScore = 0;
00175	
00176		// Draw Ready
00177		if (PRI.bReadyToPlay)
00178		{
00179			Canvas.StrLen("R ", XL, YL);
00180			Canvas.SetPos(Canvas.ClipX*0.1-XL, YOffset);
00181			Canvas.DrawText(ReadyText, false);
00182		}
00183	
00184		Canvas.DrawColor = GetTeamColor(PRI.Team);
00185		if (!bLocalPlayer)
00186		{
00187			Canvas.DrawColor.R = byte(float(Canvas.DrawColor.R) * 0.9);
00188			Canvas.DrawColor.G = byte(float(Canvas.DrawColor.G) * 0.9);
00189			Canvas.DrawColor.B = byte(float(Canvas.DrawColor.B) * 0.9);
00190		}
00191	
00192		// Draw Name
00193		if (PRI.bAdmin)	
00194		{	//FONT ALTER
00195			//Canvas.Font = Font'SmallFont';
00196			if(MyFonts != None)
00197				Canvas.Font = MyFonts.GetStaticSmallFont();
00198			else
00199				Canvas.Font = Font'SmallFont';
00200		}
00201		else
00202		{	//FONT ALTER
00203			//Canvas.Font = RegFont;
00204			if(MyFonts != None)
00205				Canvas.Font = MyFonts.GetStaticMedFont();
00206			else
00207				Canvas.Font = RegFont;
00208		}
00209	
00210		Canvas.SetPos(Canvas.ClipX*0.13, YOffset);
00211		Canvas.DrawText(PRI.PlayerName, false);
00212				//FONT ALTER
00213		//Canvas.Font = RegFont;
00214		if(MyFonts != None)
00215			Canvas.Font = MyFonts.GetStaticMedFont();
00216		else
00217			Canvas.Font = RegFont;
00218	
00219		// Draw Score
00220		Canvas.SetPos(Canvas.ClipX*0.5, YOffset);
00221		Canvas.DrawText(int(PRI.Score), false);
00222	
00223		// Draw Deaths
00224		Canvas.SetPos(Canvas.ClipX*0.6, YOffset);
00225		Canvas.DrawText(int(PRI.Deaths), false);
00226	
00227		if (Canvas.ClipX > 512 && Level.Netmode != NM_Standalone)
00228		{
00229			// Draw Ping
00230			Canvas.SetPos(Canvas.ClipX*0.7, YOffset);
00231			Canvas.DrawText(PRI.Ping, false);
00232	
00233			// Packetloss
00234	
00235			//FONT ALTER
00236		//	Canvas.Font = RegFont;
00237			if(MyFonts != None)
00238				Canvas.Font = MyFonts.GetStaticMedFont();
00239			else
00240				Canvas.Font = RegFont;
00241	
00242			Canvas.DrawColor = WhiteColor;
00243		}
00244	
00245		// Draw Awards
00246		AwardPos = Canvas.ClipX*0.8;
00247		Canvas.DrawColor = WhiteColor;
00248			//FONT ALTER
00249	//	Canvas.Font = Font'SmallFont';
00250		if(MyFonts != None)
00251			Canvas.Font = MyFonts.GetStaticSmallFont();
00252		else
00253			Canvas.Font = Font'SmallFont';
00254	
00255		Canvas.StrLen("00", XL, YL);
00256		if (PRI.bFirstBlood)
00257		{	// First blood
00258			Canvas.SetPos(AwardPos-YL+XL*0.25, YOffset-YL*0.5);
00259			Canvas.DrawTile(FirstBloodIcon, YL*2, YL*2, 0, 0, FirstBloodIcon.USize, FirstBloodIcon.VSize);
00260			AwardPos += XL*2;
00261		}
00262		if (PRI.MaxSpree > 2)
00263		{	// Killing sprees
00264			Canvas.SetPos(AwardPos-YL+XL*0.25, YOffset-YL*0.5);
00265			Canvas.DrawTile(SpreeIcon, YL*2, YL*2, 0, 0, SpreeIcon.USize, SpreeIcon.VSize);
00266			Canvas.SetPos(AwardPos, YOffset);
00267			Canvas.DrawColor = WhiteColor;
00268			Canvas.DrawText(PRI.MaxSpree, false);
00269			Canvas.DrawColor = WhiteColor;
00270			AwardPos += XL*2;
00271		}
00272		if (PRI.HeadKills > 0)
00273		{	// Head kills
00274			Canvas.SetPos(AwardPos-YL+XL*0.25, YOffset-YL*0.5);
00275			Canvas.DrawTile(HeadIcon, YL*2, YL*2, 0, 0, HeadIcon.USize, HeadIcon.VSize);
00276			Canvas.SetPos(AwardPos, YOffset);
00277			Canvas.DrawColor = WhiteColor;
00278			Canvas.DrawText(PRI.HeadKills, false);
00279			Canvas.DrawColor = WhiteColor;
00280			AwardPos += XL*2;
00281		}
00282			//FONT ALTER
00283		//Canvas.Font = RegFont;
00284		if(MyFonts != None)
00285			Canvas.Font = MyFonts.GetStaticMedFont();
00286		else
00287			Canvas.Font = RegFont;
00288	}
00289	
00290	
00291	function ShowScores( canvas Canvas )
00292	{
00293		local PlayerReplicationInfo PRI;
00294		local int PlayerCount,TeamPlayerCount,i,t;
00295		local float XL, YL;
00296		local float YOffset, YStart;
00297		local int TeamCount;
00298		local bool bTeamCounted;
00299	
00300		// Setup canvas
00301			//FONT ALTER
00302	//	Canvas.Font = RegFont;
00303		if(MyFonts != None)
00304			Canvas.Font = MyFonts.GetStaticMedFont();
00305		else
00306			Canvas.Font = RegFont;
00307	
00308		Canvas.DrawColor = WhiteColor;
00309		Canvas.StrLen("TEST", XL, YL);
00310	
00311		// Header
00312		DrawHeader(Canvas);
00313		DrawTableHeadings(Canvas);
00314	
00315	/*
00316	RuneGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo).Teams[0].Score = 10;
00317	RuneGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo).Teams[1].Score = 10;
00318	RuneGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo).Teams[2].Score = 20;
00319	RuneGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo).Teams[3].Score = 20;
00320	for (i=0; i<32; i++)
00321	{
00322		PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00323	
00324		// Count the players
00325		if (PRI!=None && (!PRI.bIsSpectator || PRI.bWaitingPlayer) )
00326			PlayerCount++;
00327	}
00328	for(i=0; i<Playercount; i++)
00329	{
00330		PlayerPawn(Owner).GameReplicationInfo.PRIArray[i].Score = i;
00331		PlayerPawn(Owner).GameReplicationInfo.PRIArray[i].Team = i%4;
00332	}
00333	PlayerCount=0;
00334	*/
00335	
00336		// Sort the teams
00337		TeamCount=0;
00338		for (t=0; t<4; t++)
00339			OrderedTeams[t] = None;
00340		for (i=0; i<32; i++)
00341		{
00342			PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00343	
00344			// Count the players
00345			if (PRI!=None && (!PRI.bIsSpectator || PRI.bWaitingPlayer) )
00346			{
00347				PlayerCount++;
00348	
00349				if (PRI.Team>=4)
00350					continue;
00351	
00352				// Check if this team has already been added
00353				bTeamCounted = false;
00354				for (t=0; t<4; t++)
00355					if (OrderedTeams[t]!=None && OrderedTeams[t].TeamIndex == PRI.Team)
00356						bTeamCounted = true;
00357	
00358				if (!bTeamCounted)
00359				{
00360					OrderedTeams[TeamCount] = RuneGameReplicationInfo(PlayerPawn(Owner).GameReplicationInfo).Teams[PRI.Team];
00361					TeamCount++;
00362					if (TeamCount == ArrayCount(OrderedTeams))
00363						break;
00364				}
00365			}
00366		}
00367		SortTeams(TeamCount);
00368	
00369		// Calculate vertical spacing
00370		YStart = Canvas.CurY;
00371		if (PlayerCount < 15)
00372			YL *= 2;
00373		else if (PlayerCount < 20)
00374			YL *= 1.5;
00375		if (PlayerCount > 15)
00376			PlayerCount = FMin(PlayerCount, (Canvas.ClipY - YStart)/YL - 1);
00377	
00378		DrawBackground(Canvas, 0.1*Canvas.ClipX, YStart-YL*0.25+1, 0.8*Canvas.ClipX, PlayerCount*YL);
00379		YOffset = YStart;
00380	
00381		// Sort and draw each team seperately
00382		for (t=0; t<TeamCount; t++)
00383		{
00384			// Sort the PRIs
00385			TeamPlayerCount=0;
00386			for (i=0; i<ArrayCount(Ordered); i++)
00387				Ordered[i] = None;
00388			for (i=0; i<32; i++)
00389			{
00390				PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00391	
00392				if (PRI!=None && (!PRI.bIsSpectator || PRI.bWaitingPlayer))
00393				{
00394					if ( PRI.Team==OrderedTeams[t].TeamIndex )
00395					{
00396						Ordered[TeamPlayerCount] = PRI;
00397						TeamPlayerCount++;
00398						if (TeamPlayerCount == ArrayCount(Ordered))
00399							break;
00400					}
00401				}
00402			}
00403	
00404			SortScores(TeamPlayerCount);
00405	
00406			if (TeamPlayerCount > 0)
00407			{
00408				DrawTeamInfo(Canvas, OrderedTeams[t], 0, YStart);
00409	
00410				//	draw the PRIs
00411				for (i=0; i<TeamPlayerCount; i++ )
00412				{
00413					YOffset = YStart + i*YL;
00414					DrawPlayerInfo(Canvas, Ordered[i], 0, YOffset);
00415				}
00416	
00417				YStart = YOffset + YL;
00418			}
00419		}
00420	
00421		// Now draw any players not assigned to a team
00422		TeamPlayerCount=0;
00423		for (i=0; i<ArrayCount(Ordered); i++)
00424			Ordered[i] = None;
00425		for (i=0; i<32; i++)
00426		{
00427			if (PlayerPawn(Owner).GameReplicationInfo.PRIArray[i] != None)
00428			{
00429				PRI = PlayerPawn(Owner).GameReplicationInfo.PRIArray[i];
00430				if ( PRI.Team>=4 && (!PRI.bIsSpectator || PRI.bWaitingPlayer))
00431				{
00432					Ordered[TeamPlayerCount] = PRI;
00433					TeamPlayerCount++;
00434					if (TeamPlayerCount == ArrayCount(Ordered))
00435						break;
00436				}
00437			}
00438		}
00439		SortScores(TeamPlayerCount);
00440		if (TeamPlayerCount > 0)
00441		{
00442			//	draw the PRIs
00443			for (i=0; i<TeamPlayerCount; i++ )
00444			{
00445				YOffset = YStart + i*YL;
00446				DrawPlayerInfo(Canvas, Ordered[i], 0, YOffset);
00447			}
00448	
00449			YStart = YOffset + YL;
00450		}
00451	
00452		// Draw bottom seperator
00453		Canvas.StrLen("TEST", XL, YL);
00454		YOffset += YL;
00455		Canvas.SetPos(0, YOffset);
00456	
00457		// Trailer
00458		DrawTrailer(Canvas);
00459	
00460		Canvas.DrawColor = WhiteColor;
00461	}
00462	
00463	defaultproperties
00464	{
00465	     BackgroundAlpha=0.200000
00466	}

End Source Code