Core.Object | +--Engine.Actor | +--Engine.Info | +--Engine.ScoreBoard | +--Botpack.TournamentScoreBoard | +--Botpack.TeamScoreBoard
color
AltTeamColor[4]
OrdersString,
InString
TournamentGameReplicationInfo
OwnerGame
PlayerReplicationInfo
OwnerInfo
string
PlayersNotShown
TeamColor[4]
TeamName[4]
void
DrawNameAndPing(Canvas Canvas, PlayerReplicationInfo PRI, float XOffset, float YOffset, bool bCompressed)
DrawScore(Canvas Canvas, float Score, float XOffset, float YOffset)
DrawVictoryConditions(Canvas Canvas)
ShowScores(Canvas Canvas)
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 }