Files
UT99-Mod-SmartCTF-ChaCha/Classes/SmartCTFServerInfo.UC

376 lines
11 KiB
Plaintext

class SmartCTFServerInfo expands ServerInfoCTF;
var SmartCTFGameReplicationInfo SCTFGame;
var PlayerPawn PlayerOwner;
var string MapNameText;
var bool bFontUpdated;
var float LastUpdateTime;
var float HeaderHeight, CatHeight, TextHeight, SmallTextHeight, VSpacing, BorderSpacing, TotalHeight;
var float StartY, Y, SideSpacing;
var Color HeaderBlue, TextBlue, InfoWhite;
function PostBeginPlay()
{
if( SCTFGame == None )
{
ForEach AllActors( class'SmartCTFGameReplicationInfo', SCTFGame ) break;
}
super.PostBeginPlay();
}
function RenderInfo( Canvas C )
{
local float XL;
local GameReplicationInfo GRI;
if( Level.TimeSeconds - LastUpdateTime > 0.5 ) bFontUpdated = False;
if( !bFontUpdated )
{
C.Font = MyFonts.GetHugeFont( C.ClipX );
C.StrLen( "Test", XL, HeaderHeight );
C.Font = MyFonts.GetBigFont( C.ClipX );
C.StrLen( "Test", XL, CatHeight );
C.Font = MyFonts.GetSmallFont( C.ClipX );
C.StrLen( "Test", XL, TextHeight );
C.Font = MyFonts.GetSmallFont( C.ClipX );
C.StrLen( "Test", XL, SmallTextHeight );
CatHeight = CatHeight * 1.2;
TextHeight = TextHeight * 1.2;
SmallTextHeight = SmallTextHeight * 1.1;
VSpacing = HeaderHeight * 0.8;
BorderSpacing = VSpacing;
TotalHeight = 1.5 * HeaderHeight + 2 * BorderSpacing + CatHeight * 3 + TextHeight * 6 + SmallTextHeight * 7 + VSpacing * 3;
StartY = C.ClipY / 2 - TotalHeight / 2;
SideSpacing = C.ClipX / 10;
bFontUpdated = True;
LastUpdateTime = Level.TimeSeconds;
}
GRI = PlayerPawn(Owner).GameReplicationInfo;
DrawTitle( C );
DrawContactInfo( C, GRI );
DrawMOTD( C, GRI );
DrawGameStats( C, GRI );
DrawServerStats( C, GRI );
DrawLeaderBoard( C, GRI );
}
function DrawTitle( Canvas C )
{
Y = StartY;
C.Style = ERenderStyle.STY_Modulated;
C.SetPos( SideSpacing - BorderSpacing, Y );
C.DrawRect( texture'shade', C.ClipX - 2 * SideSpacing + 2 * BorderSpacing , TotalHeight );
C.Style = ERenderStyle.STY_Translucent;
C.DrawColor.R = 32;
C.DrawColor.G = 32;
C.DrawColor.B = 32;
C.SetPos( SideSpacing - BorderSpacing, Y );
C.DrawPattern( texture'newblue', C.ClipX - 2 * SideSpacing + 2 * BorderSpacing , 1.5 * HeaderHeight, 1.0 );
C.Style = ERenderStyle.STY_Normal;
C.Font = MyFonts.GetHugeFont( C.ClipX );
C.DrawColor = HeaderBlue;
C.bCenter = True;
C.SetPos( 0, Y + 0.25 * HeaderHeight );
C.DrawText( ServerInfoText, True );
C.bCenter = False;
Y += 1.5 * HeaderHeight + BorderSpacing;
}
function DrawContactInfo( Canvas C, GameReplicationInfo GRI )
{
local float XL, YL, XL2, YL2;
C.DrawColor = HeaderBlue;
C.Font = MyFonts.GetBigFont( C.ClipX );
C.StrLen( "TEMP", XL, YL );
C.SetPos( SideSpacing, Y );
C.DrawText( ContactInfoText, True);
C.DrawColor = TextBlue;
C.Font = MyFonts.GetSmallFont( C.ClipX );
C.StrLen( "TEMP", XL2, YL2 );
C.SetPos( SideSpacing, Y + CatHeight );
C.DrawText( NameText, True);
C.SetPos( SideSpacing, Y + CatHeight + TextHeight );
C.DrawText( AdminText, True);
C.SetPos( SideSpacing, Y + CatHeight + 2 * TextHeight);
C.DrawText( EMailText, True);
C.DrawColor = InfoWhite;
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight );
C.DrawText( GRI.ServerName, True);
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight + TextHeight );
if( GRI.AdminName != "" )
C.DrawText( GRI.AdminName, True );
else
C.DrawText( UnknownText, True );
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight + 2 * TextHeight );
if( GRI.AdminEmail != "" )
C.DrawText( GRI.AdminEmail, True );
else
C.DrawText( UnknownText, True );
}
function DrawMOTD( Canvas C, GameReplicationInfo GRI )
{
local float XL, YL, XL2, YL2;
C.DrawColor = HeaderBlue;
C.Font = MyFonts.GetBigFont( C.ClipX );
C.StrLen( "TEMP", XL, YL );
C.SetPos( SideSpacing * 6, Y );
C.DrawText( MOTD, True );
C.DrawColor = InfoWhite;
C.Font = MyFonts.GetSmallFont( C.ClipX );
C.StrLen( "TEMP", XL2, YL2 );
C.StrLen( GRI.MOTDLine1, XL2, YL2 );
C.SetPos( SideSpacing * 6, Y + CatHeight );
C.DrawText( GRI.MOTDLine1, True );
C.StrLen( GRI.MOTDLine2, XL2, YL2 );
C.SetPos( SideSpacing * 6, Y + CatHeight + TextHeight );
C.DrawText( GRI.MOTDLine2, True );
C.StrLen( GRI.MOTDLine3, XL2, YL2 );
C.SetPos( SideSpacing * 6, Y + CatHeight + 2 * TextHeight );
C.DrawText( GRI.MOTDLine3, True );
C.StrLen( GRI.MOTDLine4, XL2, YL2 );
C.SetPos( SideSpacing * 6, Y + CatHeight + 3 * TextHeight );
C.DrawText( GRI.MOTDLine4, True );
Y += CatHeight + 4 * TextHeight + VSpacing;
}
function DrawGameStats( Canvas C, GameReplicationInfo GRI )
{
local float XL, YL, XL2, YL2;
local int i, NumBots;
C.DrawColor = HeaderBlue;
C.Font = MyFonts.GetBigFont( C.ClipX );
C.StrLen( "TEMP", XL, YL );
C.SetPos( SideSpacing, Y );
C.DrawText( GameStatsText, True );
C.DrawColor = TextBlue;
C.Font = MyFonts.GetSmallFont( C.ClipX );
C.StrLen( "TEMP", XL2, YL2 );
C.SetPos( SideSpacing, Y + CatHeight );
C.DrawText( GameTypeText, True );
C.SetPos( SideSpacing, Y + CatHeight + TextHeight );
C.DrawText( PlayersText, True );
C.DrawColor = InfoWhite;
C.SetPos( SideSpacing * 2, Y + CatHeight );
C.DrawText( "Smart Capture The Flag", True); // GRI.GameName
for( i = 0; i < 32; i++ )
{
if( ( GRI.PRIArray[i] != None ) && ( GRI.PRIArray[i].bIsABot ) ) NumBots++;
}
C.SetPos( SideSpacing * 2, Y + CatHeight + TextHeight );
C.DrawText( GRI.NumPlayers $ " [" $ NumBots @ BotText $ "]", True );
}
function DrawServerStats( canvas C, GameReplicationInfo GRI )
{
local float XL, YL, XL2, YL2;
local TournamentGameReplicationInfo TGRI;
C.DrawColor = HeaderBlue;
C.Font = MyFonts.GetBigFont( C.ClipX );
C.StrLen( "TEMP", XL, YL );
C.SetPos( SideSpacing * 6, Y );
C.DrawText( ServerStatsText, True );
C.DrawColor = TextBlue;
C.Font = MyFonts.GetSmallFont( C.ClipX );
C.StrLen( "TEMP", XL2, YL2 );
C.SetPos( SideSpacing * 6, Y + CatHeight );
C.DrawText( GamesHostedText, True);
C.SetPos( SideSpacing * 6, Y + CatHeight + TextHeight );
C.DrawText( FlagsCapturedText, True);
C.DrawColor = InfoWhite;
TGRI = TournamentGameReplicationInfo( GRI );
C.SetPos( SideSpacing * 7.25, Y + CatHeight );
C.DrawText( TGRI.TotalGames, True );
C.SetPos( SideSpacing * 7.25, Y + CatHeight + TextHeight );
C.DrawText( TGRI.TotalFlags, True );
Y += CatHeight + 2 * TextHeight + VSpacing;
}
function DrawLeaderBoard( Canvas C, GameReplicationInfo GRI )
{
local float YL;
local int i;
local SmartCTFEndStats EndStats;
local string Title, What, Who, Where, When;
C.DrawColor = HeaderBlue;
YL = ( CatHeight + SmallTextHeight - 4 ) / 64;
C.Font = MyFonts.GetBigFont( C.ClipX );
C.SetPos( SideSpacing + 68 * YL, Y );
C.DrawText( TopPlayersText, True );
C.DrawColor = InfoWhite;
C.Style = ERenderStyle.STY_Translucent;
C.bNoSmooth = False;
C.SetPos( SideSpacing, Y );
C.DrawIcon( texture'UTMenu.TrophyCTF', YL );
C.SetPos( SideSpacing, Y );
C.bNoSmooth = True;
C.Style = ERenderStyle.STY_Normal;
C.Font = MyFonts.GetSmallestFont( C.ClipX );
C.DrawColor = TextBlue;
C.SetPos( SideSpacing * 2.5, Y + CatHeight );
C.DrawText( BestFPHText, True );
C.SetPos( SideSpacing * 3.75, Y + CatHeight );
C.DrawText( BestNameText, True );
C.SetPos( SideSpacing * 5.75, Y + CatHeight );
C.DrawText( MapNameText, True );
C.SetPos( SideSpacing * 7.5, Y + CatHeight );
C.DrawText( BestRecordSetText, True );
C.DrawColor = InfoWhite;
if( SCTFGame != None ) EndStats = SCTFGame.EndStats;
if( EndStats != None )
{
for( i = 0; i < 6; i++ )
{
switch( i )
{
case 0:
Title = "Greatest Point 'Ho";
What = EndStats.MostPoints.Count @ "points/h";
Who = EndStats.MostPoints.PlayerName;
Where = EndStats.MostPoints.MapName;
When = EndStats.MostPoints.RecordDate;
break;
case 1:
Title = "Biggest DM'er";
What = EndStats.MostFrags.Count @ "frags/h";
Who = EndStats.MostFrags.PlayerName;
Where = EndStats.MostFrags.MapName;
When = EndStats.MostFrags.RecordDate;
break;
case 2:
Title = "Best Flagcapper";
What = EndStats.MostCaps.Count @ "caps/h";
Who = EndStats.MostCaps.PlayerName;
Where = EndStats.MostCaps.MapName;
When = EndStats.MostCaps.RecordDate;
break;
case 3:
Title = "Best Flagkiller";
What = EndStats.MostFlagkills.Count @ "flagk./h";
Who = EndStats.MostFlagkills.PlayerName;
Where = EndStats.MostFlagkills.MapName;
When = EndStats.MostFlagkills.RecordDate;
break;
case 4:
Title = "Most Cover";
What = EndStats.MostCovers.Count @ "covers/h";
Who = EndStats.MostCovers.PlayerName;
Where = EndStats.MostCovers.MapName;
When = EndStats.MostCovers.RecordDate;
break;
case 5:
Title = "Hardcore Sniper";
What = EndStats.MostHeadShots.Count @ "HS/h";
Who = EndStats.MostHeadShots.PlayerName;
Where = EndStats.MostHeadShots.MapName;
When = EndStats.MostHeadShots.RecordDate;
break;
}
if( What == "" ) What = "--";
if( Who == "" ) Who = "--";
if( Where == "" ) Where = "--";
if( When == "" ) When = "--";
if( Len( Where ) > 20 ) Where = Left( Where, 20 ) $ "..";
if( Len( Who ) > 25 ) Who = Left( Who, 25 ) $ "..";
C.DrawColor = TextBlue;
C.SetPos( SideSpacing, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
C.DrawText( Title, True );
C.DrawColor = InfoWhite;
C.SetPos( SideSpacing * 2.5, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
C.DrawText( What, True );
C.SetPos( SideSpacing * 3.75, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
C.DrawText( Who, True );
C.SetPos( SideSpacing * 5.75, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
C.DrawText( Where, True );
C.SetPos( SideSpacing * 7.5, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
C.DrawText( When, True );
}
}
}
defaultproperties
{
SCTFGame=None
PlayerOwner=None
MapNameText="Where"
bFontUpdated=False
LastUpdateTime=0.000000
HeaderHeight=0.000000
CatHeight=0.000000
textHeight=0.000000
SmallTextHeight=0.000000
VSpacing=0.000000
BorderSpacing=0.000000
TotalHeight=0.000000
StartY=0.000000
Y=0.000000
SideSpacing=0.000000
HeaderBlue=(R=9,G=151,B=247,A=0)
TextBlue=(R=0,G=128,B=255,A=0)
InfoWhite=(R=255,G=255,B=255,A=0)
TopPlayersText="SmartCTF Record Holders [Numbers per Hour]"
BestNameText="Who"
BestFPHText="What"
BestRecordSetText="When"
}