class ScoreBoardTeamDeathMatch extends ScoreBoardDeathMatch; // if _RO_ #exec OBJ LOAD FILE=InterfaceArt_Tex.utx // else //#exec OBJ LOAD FILE=MenuEffects.utx // end if _RO_ var Material TeamBoxMaterial[2]; var Material ScoreBack; var Material FlagIcon, ScoreboardU; var Color TeamColors[2]; simulated function UpdatePrecacheMaterials() { // if _RO_ //Level.AddPrecacheMaterial(Material'MenuEffects.ScoreboardU'); Level.AddPrecacheMaterial(TeamBoxMaterial[0]); Level.AddPrecacheMaterial(TeamBoxMaterial[1]); //Level.AddPrecacheMaterial(Material'MenuEffects.ScoreIcon'); //Level.AddPrecacheMaterial(Material'InterfaceContent.SymbolShader'); super.UpdatePrecacheMaterials(); } simulated event UpdateScoreBoard(Canvas Canvas) { local PlayerReplicationInfo PRI, OwnerPRI; local int i, FontReduction,HeaderOffsetY,HeadFoot,PlayerBoxSizeY, BoxSpaceY; local float XL,YL, IconSize, MaxScaling, MessageFoot; local int BluePlayerCount, RedPlayerCount, RedOwnerOffset, BlueOwnerOffset, MaxPlayerCount; local PlayerReplicationInfo RedPRI[MAXPLAYERS], BluePRI[MaxPlayers]; local font MainFont; OwnerPRI = PlayerController(Owner).PlayerReplicationInfo; RedOwnerOffset = -1; BlueOwnerOffset = -1; for (i=0; i (Canvas.ClipY - 1.5 * HeadFoot)/(PlayerBoxSizeY + BoxSpaceY) ) { BoxSpaceY = 0.125 * YL; if ( MaxPlayerCount > (Canvas.ClipY - 1.5 * HeadFoot)/(PlayerBoxSizeY + BoxSpaceY) ) { if ( MaxPlayerCount > (Canvas.ClipY - 1.5 * HeadFoot)/(PlayerBoxSizeY + BoxSpaceY) ) { FontReduction++; Canvas.Font = GetSmallerFontFor(Canvas,FontReduction); Canvas.StrLen("Test", XL, YL); BoxSpaceY = 0.125 * YL; if ( HaveHalfFont(Canvas, FontReduction) ) PlayerBoxSizeY = 2.125 * YL; else PlayerBoxSizeY = 1.75 * YL; HeadFoot = 4*YL + IconSize; if ( MaxPlayerCount > (Canvas.ClipY - 1.5 * HeadFoot)/(PlayerBoxSizeY + BoxSpaceY) ) { FontReduction++; Canvas.Font = GetSmallerFontFor(Canvas,FontReduction); Canvas.StrLen("Test", XL, YL); BoxSpaceY = 0.125 * YL; if ( HaveHalfFont(Canvas, FontReduction) ) PlayerBoxSizeY = 2.125 * YL; else PlayerBoxSizeY = 1.75 * YL; HeadFoot = 4*YL + IconSize; if ( (Canvas.ClipY >= 600) && (MaxPlayerCount > (Canvas.ClipY - HeadFoot)/(PlayerBoxSizeY + BoxSpaceY)) ) { FontReduction++; Canvas.Font = GetSmallerFontFor(Canvas,FontReduction); Canvas.StrLen("Test", XL, YL); BoxSpaceY = 0.125 * YL; if ( HaveHalfFont(Canvas, FontReduction) ) PlayerBoxSizeY = 2.125 * YL; else PlayerBoxSizeY = 1.75 * YL; HeadFoot = 4*YL + IconSize; if ( MaxPlayerCount > (Canvas.ClipY - HeadFoot)/(PlayerBoxSizeY + BoxSpaceY) ) { FontReduction++; Canvas.Font = GetSmallerFontFor(Canvas,FontReduction); Canvas.StrLen("Test", XL, YL); BoxSpaceY = 0.125 * YL; if ( HaveHalfFont(Canvas, FontReduction) ) PlayerBoxSizeY = 2.125 * YL; else PlayerBoxSizeY = 1.75 * YL; HeadFoot = 4*YL + IconSize; } } } } } } MaxPlayerCount = Min(MaxPlayerCount, 1+(Canvas.ClipY - HeadFoot)/(PlayerBoxSizeY + BoxSpaceY) ); if ( FontReduction > 2 ) MaxScaling = 3; else MaxScaling = 2.125; PlayerBoxSizeY = FClamp((1+(Canvas.ClipY - 0.67 * MessageFoot))/MaxPlayerCount - BoxSpaceY, PlayerBoxSizeY, MaxScaling * YL); bDisplayMessages = (MaxPlayerCount < (Canvas.ClipY - MessageFoot)/(PlayerBoxSizeY + BoxSpaceY)); RedPlayerCount = Min(RedPlayerCount,MaxPlayerCount); BluePlayerCount = Min(BluePlayerCount,MaxPlayerCount); if ( RedOwnerOffset >= RedPlayerCount ) RedPlayerCount -= 1; if ( BlueOwnerOffset >= BluePlayerCount ) BluePlayerCount -= 1; HeaderOffsetY = 1.5*YL + IconSize; // draw title Canvas.Style = ERenderStyle.STY_Normal; DrawTitle(Canvas, HeaderOffsetY, (MaxPlayerCount+1)*(PlayerBoxSizeY + BoxSpaceY), PlayerBoxSizeY); if ( GRI != None ) { // draw red team MainFont = Canvas.Font; for (i=0; i<32; i++ ) PRIArray[i] = RedPRI[i]; DrawTeam(0,RedPlayerCount,RedOwnerOffset,Canvas, FontReduction,BoxSpaceY,PlayerBoxSizeY,HeaderOffsetY); // draw blue team Canvas.Font = MainFont; for (i=0; i<32; i++ ) PRIArray[i] = BluePRI[i]; DrawTeam(1,BluePlayerCount,BlueOwnerOffset,Canvas, FontReduction,BoxSpaceY,PlayerBoxSizeY,HeaderOffsetY); } if ( Level.NetMode != NM_Standalone ) DrawMatchID(Canvas,FontReduction); } function DrawTeam(int TeamNum, int PlayerCount, int OwnerOffset, Canvas Canvas, int FontReduction, int BoxSpaceY, int PlayerBoxSizeY, int HeaderOffsetY) { local int i, OwnerPos, NetXPos, NameXPos, BoxTextOffsetY, ScoreXPos, ScoreYPos, BoxXPos, BoxWidth, LineCount,NameY; local float XL,YL,IconScale,ScoreBackScale,ScoreYL,MaxNamePos,LongestNameLength, oXL, oYL; local string PlayerName[MAXPLAYERS], OrdersText, LongestName; local font MainFont, ReducedFont; local bool bHaveHalfFont, bNameFontReduction; local int SymbolUSize, SymbolVSize, OtherTeam, LastLine; BoxWidth = 0.47 * Canvas.ClipX; BoxXPos = 0.5 * (0.5 * Canvas.ClipX - BoxWidth); BoxWidth = 0.5 * Canvas.ClipX - 2*BoxXPos; BoxXPos = BoxXPos + TeamNum * 0.5 * Canvas.ClipX; NameXPos = BoxXPos + 0.05 * BoxWidth; ScoreXPos = BoxXPos + 0.55 * BoxWidth; NetXPos = BoxXPos + 0.76 * BoxWidth; bHaveHalfFont = HaveHalfFont(Canvas, FontReduction); // draw background box Canvas.Style = ERenderStyle.STY_Alpha; Canvas.DrawColor = HUDClass.default.WhiteColor; Canvas.SetPos(BoxXPos, HeaderOffsetY); Canvas.DrawTileStretched( TeamBoxMaterial[TeamNum], BoxWidth, PlayerCount * (PlayerBoxSizeY + BoxSpaceY)); // draw team header IconScale = Canvas.ClipX/4096; ScoreBackScale = Canvas.ClipX/1024; if ( GRI.TeamSymbols[TeamNum] != None ) { SymbolUSize = GRI.TeamSymbols[TeamNum].USize; SymbolVSize = GRI.TeamSymbols[TeamNum].VSize; } else { SymbolUSize = 256; SymbolVSize = 256; } ScoreYPos = HeaderOffsetY - SymbolVSize * IconScale - BoxSpaceY; Canvas.DrawColor = 0.75 * HUDClass.default.WhiteColor; Canvas.SetPos(BoxXPos, ScoreYPos - BoxSpaceY); // if _RO_ Canvas.DrawTileStretched( Texture'InterfaceArt_tex.Menu.RODisplay', BoxWidth, HeaderOffsetY + BoxSpaceY - ScoreYPos); // else // Canvas.DrawTileStretched( Material'InterfaceContent.ScoreBoxA', BoxWidth, HeaderOffsetY + BoxSpaceY - ScoreYPos); // end if _RO_ Canvas.Style = ERenderStyle.STY_Normal; Canvas.DrawColor = TeamColors[TeamNum]; Canvas.SetPos((0.25 + 0.5*TeamNum) * Canvas.ClipX - (SymbolUSize + 32) * IconScale, ScoreYPos); if ( GRI.TeamSymbols[TeamNum] != None ) Canvas.DrawIcon(GRI.TeamSymbols[TeamNum],IconScale); MainFont = Canvas.Font; Canvas.Font = HUDClass.static.LargerFontThan(MainFont); Canvas.StrLen("TEST",XL,ScoreYL); if ( ScoreYPos == 0 ) ScoreYPos = HeaderOffsetY - ScoreYL; else ScoreYPos = ScoreYPos + 0.5 * SymbolVSize * IconScale - 0.5 * ScoreYL; Canvas.SetPos((0.25 + 0.5*TeamNum) * Canvas.ClipX + 32*IconScale,ScoreYPos); Canvas.DrawText(int(GRI.Teams[TeamNum].Score)); Canvas.Font = MainFont; Canvas.DrawColor = HUDClass.default.WhiteColor; IconScale = Canvas.ClipX/1024; if ( PlayerCount <= 0 ) return; // draw lines between sections if ( TeamNum == 0 ) Canvas.DrawColor = HUDClass.default.RedColor; else Canvas.DrawColor = HUDClass.default.BlueColor; if ( OwnerOffset >= PlayerCount ) LastLine = PlayerCount+1; else LastLine = PlayerCount; for ( i=1; i FMax(LongestNameLength,MaxNamePos) ) { LongestName = PlayerName[i]; LongestNameLength = XL; } } if ( OwnerOffset >= PlayerCount ) { playername[OwnerOffset] = GRI.PRIArray[OwnerOffset].PlayerName; Canvas.StrLen(playername[OwnerOffset], XL, YL); if ( XL > FMax(LongestNameLength,MaxNamePos) ) { LongestName = PlayerName[i]; LongestNameLength = XL; } } if ( LongestNameLength > 0 ) { bNameFontReduction = true; Canvas.Font = GetSmallerFontFor(Canvas,FontReduction+1); Canvas.StrLen(LongestName, XL, YL); if ( XL > MaxNamePos ) { Canvas.Font = GetSmallerFontFor(Canvas,FontReduction+2); Canvas.StrLen(LongestName, XL, YL); if ( XL > MaxNamePos ) Canvas.Font = GetSmallerFontFor(Canvas,FontReduction+3); } ReducedFont = Canvas.Font; } for ( i=0; i MaxNamePos ) playername[i] = left(playername[i], MaxNamePos/XL * len(PlayerName[i])); } if ( OwnerOffset >= PlayerCount ) { playername[OwnerOffset] = PRIArray[OwnerOffset].PlayerName; Canvas.StrLen(playername[OwnerOffset], XL, YL); if ( XL > MaxNamePos ) playername[OwnerOffset] = left(playername[OwnerOffset], MaxNamePos/XL * len(PlayerName[OwnerOffset])); } if ( Canvas.ClipX < 512 ) NameY = 0.5 * YL; else if ( !bHaveHalfFont ) NameY = 0.125 * YL; Canvas.Style = ERenderStyle.STY_Normal; Canvas.DrawColor = HUDClass.default.WhiteColor; Canvas.SetPos(0.5 * Canvas.ClipX, HeaderOffsetY + 4); BoxTextOffsetY = HeaderOffsetY + 0.5 * PlayerBoxSizeY - 0.5 * YL; Canvas.DrawColor = HUDClass.default.WhiteColor; if ( OwnerOffset == -1 ) { for ( i=0; i= 0 ) { if ( OwnerOffset >= PlayerCount ) { OwnerPos = (PlayerBoxSizeY + BoxSpaceY)*PlayerCount + BoxTextOffsetY; // draw extra box Canvas.Style = ERenderStyle.STY_Alpha; Canvas.SetPos(BoxXPos, HeaderOffsetY + (PlayerBoxSizeY + BoxSpaceY)*PlayerCount); Canvas.DrawTileStretched( TeamBoxMaterial[TeamNum], BoxWidth, PlayerBoxSizeY); Canvas.Style = ERenderStyle.STY_Normal; if ( PRIArray[OwnerOffset].HasFlag != None ) { Canvas.DrawColor = HUDClass.default.WhiteColor; Canvas.SetPos(NameXPos - 48*IconScale, OwnerPos - 16*IconScale); Canvas.DrawTile( FlagIcon, 64*IconScale, 32*IconScale, 0, 0, 256, 128); } } else OwnerPos = (PlayerBoxSizeY + BoxSpaceY)*OwnerOffset + BoxTextOffsetY; Canvas.DrawColor = HUDClass.default.GoldColor; Canvas.SetPos(NameXPos, OwnerPos-0.5*YL+NameY); if ( bNameFontReduction ) Canvas.Font = ReducedFont; Canvas.DrawText(playername[OwnerOffset],true); if ( bNameFontReduction ) Canvas.Font = GetSmallerFontFor(Canvas,FontReduction); Canvas.SetPos(ScoreXPos, OwnerPos); if ( PRIArray[OwnerOffset].bOutOfLives ) Canvas.DrawText(OutText,true); else Canvas.DrawText(int(PRIArray[OwnerOffset].Score),true); } // draw flag icons Canvas.DrawColor = HUDClass.default.WhiteColor; if ( TeamNum == 0 ) OtherTeam = 1; if ( (GRI.FlagState[OtherTeam] != EFlagState.FLAG_Home) && (GRI.FlagState[OtherTeam] != EFlagState.FLAG_Down) ) { for ( i=0; i= 0) && (Canvas.ClipX >= 512) ) { BoxTextOffsetY = HeaderOffsetY + 0.5*PlayerBoxSizeY + NameY; Canvas.DrawColor = HUDClass.default.CyanColor; if ( FontReduction > 3 ) bHaveHalfFont = false; if ( Canvas.ClipX >= 1280 ) Canvas.Font = GetSmallFontFor(Canvas.ClipX, FontReduction+2); else Canvas.Font = GetSmallFontFor(Canvas.ClipX, FontReduction+1); Canvas.StrLen("Test", XL, YL); for ( i=0; i= ScoreXPos - NameXPos ) OrdersText = "("$PRIArray[i].GetCallSign()$") "$TeamPlayerReplicationInfo(PRIArray[i]).Squad.GetShortOrderStringFor(TeamPlayerReplicationInfo(PRIArray[i])); } Canvas.DrawText(OrdersText,true); } if ( bHaveHalfFont || !PRIArray[i].bBot ) { Canvas.SetPos(NameXPos, (PlayerBoxSizeY + BoxSpaceY)*i + BoxTextOffsetY + LineCount*YL); Canvas.DrawText(PRIArray[i].GetLocationName(),true); } } if ( OwnerOffset >= PlayerCount ) { Canvas.SetPos(NameXPos, (PlayerBoxSizeY + BoxSpaceY)*i + BoxTextOffsetY); Canvas.DrawText(PRIArray[OwnerOffset].GetLocationName(),true); } } if ( Level.NetMode == NM_Standalone ) return; Canvas.Font = MainFont; Canvas.StrLen("Test",XL,YL); BoxTextOffsetY = HeaderOffsetY + 0.5 * PlayerBoxSizeY - 0.5 * YL; DrawNetInfo(Canvas,FontReduction,HeaderOffsetY,PlayerBoxSizeY,BoxSpaceY,BoxTextOffsetY,OwnerOffset,PlayerCount,NetXPos); } defaultproperties { // IF _RO_ ScoreBoardU=none//Material'MenuEffects.ScoreboardU_FB' FlagIcon=none//Material'MenuEffects.ScoreboardU_FB' ScoreBack=none//Material'MenuEffects.ScoreIcon_FB' // if _RO_ TeamBoxMaterial(0)=Texture'InterfaceArt_tex.Menu.RODisplay' TeamBoxMaterial(1)=Texture'InterfaceArt_tex.Menu.RODisplay' // else // TeamBoxMaterial(0)=Material'InterfaceContent.ScoreBoxC' // TeamBoxMaterial(1)=Material'InterfaceContent.ScoreBoxB' // end if _RO_ TeamColors(0)=(R=255,G=0,B=0,A=255) TeamColors(1)=(R=0,G=0,B=255,A=255) FragLimit="SCORE LIMIT:" }