//============================================================================= // ScoreBoard //============================================================================= class ScoreBoard extends Info; var() GameReplicationInfo GRI; var() class HUDClass; var bool bDisplayMessages; simulated function PostBeginPlay() { Super.PostBeginPlay(); InitGRI(); Init(); } function Font GetSmallerFontFor(Canvas Canvas, int offset) { local int i; for ( i=0; i<8-offset; i++ ) { if ( HUDClass.default.FontScreenWidthMedium[i] <= Canvas.ClipX ) return HUDClass.static.LoadFontStatic(i+offset); } return HUDClass.static.LoadFontStatic(8); } function bool HaveHalfFont(Canvas Canvas, int Offset) { local int i; for ( i=0; i<9-offset; i++ ) if ( HUDClass.default.FontScreenWidthSmall[i] <= Canvas.ClipX ) return true; return false; } function Font GetSmallFontFor(int ScreenWidth, int offset) { local int i; for ( i=0; i<8-offset; i++ ) { if ( HUDClass.default.FontScreenWidthSmall[i] <= ScreenWidth ) return HUDClass.static.LoadFontStatic(i+offset); } return HUDClass.static.LoadFontStatic(8); } simulated function InitGRI() { GRI = PlayerController(Owner).GameReplicationInfo; } simulated function string InitTitle() { return Caps(GRI.GameName); } simulated function Init(); simulated event DrawScoreboard( Canvas C ) { UpdateGRI(); UpdateScoreBoard(C); } function bool UpdateGRI() { if (GRI == None) { InitGRI(); if ( GRI == None ) return false; } SortPRIArray(); return true; } simulated function String FormatTime( int Seconds ) { local int Minutes, Hours; local String Time; if( Seconds > 3600 ) { Hours = Seconds / 3600; Seconds -= Hours * 3600; Time = Hours$":"; } Minutes = Seconds / 60; Seconds -= Minutes * 60; if( Minutes >= 10 ) Time = Time $ Minutes $ ":"; else Time = Time $ "0" $ Minutes $ ":"; if( Seconds >= 10 ) Time = Time $ Seconds; else Time = Time $ "0" $ Seconds; return Time; } simulated function UpdateScoreBoard(Canvas Canvas); simulated function bool InOrder( PlayerReplicationInfo P1, PlayerReplicationInfo P2 ) { if( P1.bOnlySpectator ) { if( P2.bOnlySpectator ) return true; else return false; } else if ( P2.bOnlySpectator ) return true; if( P1.Score < P2.Score ) return false; if( P1.Score == P2.Score ) { if ( P1.Deaths > P2.Deaths ) return false; if ( (P1.Deaths == P2.Deaths) && (PlayerController(P2.Owner) != None) && (Viewport(PlayerController(P2.Owner).Player) != None) ) return false; } return true; } simulated function SortPRIArray() { local int i,j; local PlayerReplicationInfo tmp; for (i=0; i