Class SRInvasionLoginMenu extends UT2K4PlayerLoginMenu; var() noexport bool bNetGame; var bool bOldSpectator; var automated GUIButton b_Settings, b_Browser, b_Quit, b_Favs, b_Leave, b_MapVote, b_KickVote, b_MatchSetup, b_Spec, b_Profile; var GUIStyles PlayerStyle; var array AddOnList; var int CurTabOrder; simulated final function GUIButton AddControlButton( string Cap, optional string Hint ) { local GUIButton G; G = GUIButton(AddComponent(string(Class'GUIButton'))); G.Caption = Cap; G.Hint = Hint; G.StyleName = "SquareButton"; G.OnKeyEvent = G.InternalOnKeyEvent; G.WinLeft = 0.725; G.WinTop = 0.89; G.WinWidth = 0.2; G.WinHeight = 0.05; G.bAutoSize = True; G.TabOrder = CurTabOrder++; return G; } function InitComponent(GUIController MyController, GUIComponent MyOwner) { local int i; local string s; local eFontScale FS; local SRMenuAddition M; // Setup panel classes. Panels[0].ClassName = string(Class'SRTab_ServerNews'); Panels[1].ClassName = string(Class'SRTab_MidGamePerks'); Panels[2].ClassName = string(Class'SRTab_MidGameVoiceChat'); Panels[3].ClassName = string(Class'SRTab_MidGameHelp'); Panels[4].ClassName = string(Class'SRTab_MidGameStats'); // Setup localization. Panels[1].Caption = Class'KFInvasionLoginMenu'.Default.Panels[1].Caption; Panels[2].Caption = Class'KFInvasionLoginMenu'.Default.Panels[2].Caption; Panels[3].Caption = Class'KFInvasionLoginMenu'.Default.Panels[3].Caption; Panels[1].Hint = Class'KFInvasionLoginMenu'.Default.Panels[1].Hint; Panels[2].Hint = Class'KFInvasionLoginMenu'.Default.Panels[2].Hint; Panels[3].Hint = Class'KFInvasionLoginMenu'.Default.Panels[3].Hint; b_Spec.Caption=class'KFTab_MidGamePerks'.default.b_Spec.Caption; b_MatchSetup.Caption=class'KFTab_MidGamePerks'.default.b_MatchSetup.Caption; b_KickVote.Caption=class'KFTab_MidGamePerks'.default.b_KickVote.Caption; b_MapVote.Caption=class'KFTab_MidGamePerks'.default.b_MapVote.Caption; b_Quit.Caption=class'KFTab_MidGamePerks'.default.b_Quit.Caption; b_Favs.Caption=class'KFTab_MidGamePerks'.default.b_Favs.Caption; b_Favs.Hint=class'KFTab_MidGamePerks'.default.b_Favs.Hint; b_Settings.Caption=class'KFTab_MidGamePerks'.default.b_Settings.Caption; b_Browser.Caption=class'KFTab_MidGamePerks'.default.b_Browser.Caption; Super.InitComponent(MyController, MyOwner); // Mod menus foreach MyController.ViewportOwner.Actor.DynamicActors(class'SRMenuAddition',M) if( M.bHasInit ) { AddOnList[AddOnList.Length] = M; M.NotifyMenuOpen(Self,MyController); } s = GetSizingCaption(); for ( i = 0; i < Controls.Length; i++ ) { if ( GUIButton(Controls[i]) != None ) { GUIButton(Controls[i]).bAutoSize = true; GUIButton(Controls[i]).SizingCaption = s; GUIButton(Controls[i]).AutoSizePadding.HorzPerc = 0.04; GUIButton(Controls[i]).AutoSizePadding.VertPerc = 0.5; } } s = class'KFTab_MidGamePerks'.default.PlayerStyleName; PlayerStyle = MyController.GetStyle(s, fs); InitGRI(); } function Opened(GUIComponent Sender) { local int i; Super.Opened(Sender); for( i=0; i Len(s) ) { s = GUIButton(Controls[i]).Caption; } } } return s; } function GameReplicationInfo GetGRI() { return PlayerOwner().GameReplicationInfo; } function InitGRI() { local PlayerController PC; local GameReplicationInfo GRI; GRI = GetGRI(); PC = PlayerOwner(); if ( PC == none || PC.PlayerReplicationInfo == none || GRI == none ) return; bInit = False; bNetGame = PC.Level.NetMode != NM_StandAlone; if ( bNetGame ) b_Leave.Caption = class'KFTab_MidGamePerks'.default.LeaveMPButtonText; else b_Leave.Caption = class'KFTab_MidGamePerks'.default.LeaveSPButtonText; bOldSpectator = PC.PlayerReplicationInfo.bOnlySpectator; if ( bOldSpectator ) b_Spec.Caption = class'KFTab_MidGamePerks'.default.JoinGameButtonText; else b_Spec.Caption = class'KFTab_MidGamePerks'.default.SpectateButtonText; SetupGroups(); //InitLists(); } function float ItemHeight(Canvas C) { local float XL, YL, H; local eFontScale f; f=FNS_Medium; PlayerStyle.TextSize(C, MSAT_Blurry, "Wqz, ", XL, H, F); if ( C.ClipX > 640 && bNetGame ) PlayerStyle.TextSize(C, MSAT_Blurry, "Wqz, ", XL, YL, FNS_Small); H += YL; H += (H * 0.2); return h; } function SetupGroups() { local PlayerController PC; PC = PlayerOwner(); if ( PC.Level.NetMode != NM_Client ) { RemoveComponent(b_Favs); RemoveComponent(b_Browser); } else if ( CurrentServerIsInFavorites() ) { DisableComponent(b_Favs); } if ( PC.Level.NetMode == NM_StandAlone ) { RemoveComponent(b_MapVote, True); RemoveComponent(b_MatchSetup, True); RemoveComponent(b_KickVote, True); } else if ( PC.VoteReplicationInfo != None ) { if ( !PC.VoteReplicationInfo.MapVoteEnabled() ) { RemoveComponent(b_MapVote,True); } if ( !PC.VoteReplicationInfo.KickVoteEnabled() ) { RemoveComponent(b_KickVote); } if ( !PC.VoteReplicationInfo.MatchSetupEnabled() ) { RemoveComponent(b_MatchSetup); } } else { RemoveComponent(b_MapVote); RemoveComponent(b_KickVote); RemoveComponent(b_MatchSetup); } RemapComponents(); } function SetButtonPositions(Canvas C) { local int i, j, ButtonsPerRow, ButtonsLeftInRow, NumButtons; local float Width, Height, Center, X, Y, YL, ButtonSpacing; Width = b_Settings.ActualWidth(); Height = b_Settings.ActualHeight(); Center = ActualLeft() + (ActualWidth() / 2.0); ButtonSpacing = Width * 0.05; YL = Height * 1.2; Y = b_Settings.ActualTop(); ButtonsPerRow = ActualWidth() / (Width + ButtonSpacing); ButtonsLeftInRow = ButtonsPerRow; for ( i = 0; i < Components.Length; i++) { if ( Components[i].bVisible && GUIButton(Components[i]) != none ) { NumButtons++; } } if ( NumButtons < ButtonsPerRow ) { X = Center - (((Width * float(NumButtons)) + (ButtonSpacing * float(NumButtons - 1))) * 0.5); } else if ( ButtonsPerRow > 1 ) { X = Center - (((Width * float(ButtonsPerRow)) + (ButtonSpacing * float(ButtonsPerRow - 1))) * 0.5); } else { X = Center - Width / 2.0; } for ( i = 0; i < Components.Length; i++) { if ( !Components[i].bVisible || GUIButton(Components[i]) == none ) { continue; } Components[i].SetPosition( X, Y, Width, Height, true ); if ( --ButtonsLeftInRow > 0 ) { X += Width + ButtonSpacing; } else { Y += YL; for ( j = i + 1; j < Components.Length && ButtonsLeftInRow < ButtonsPerRow; j++) { if ( Components[i].bVisible && GUIButton(Components[i]) != none ) { ButtonsLeftInRow++; } } if ( ButtonsLeftInRow > 1 ) { X = Center - (((Width * float(ButtonsLeftInRow)) + (ButtonSpacing * float(ButtonsLeftInRow - 1))) * 0.5); } else { X = Center - Width / 2.0; } } } } // See if we already have this server in our favorites function bool CurrentServerIsInFavorites() { local ExtendedConsole.ServerFavorite Fav; local string address,portString; // Get current network address if ( PlayerOwner() == None ) return true; address = PlayerOwner().GetServerNetworkAddress(); if( address == "" ) return true; // slightly hacky - dont want to add "none"! // Parse text to find IP and possibly port number if ( Divide(address, ":", Fav.IP, portstring) ) Fav.Port = int(portString); else Fav.IP = address; return class'KFConsole'.static.InFavorites(Fav); } function bool ButtonClicked(GUIComponent Sender) { local PlayerController PC; PC = PlayerOwner(); if ( Sender == b_Settings ) { // Settings Controller.OpenMenu(Controller.GetSettingsPage()); } else if ( Sender == b_Browser ) { // Server browser Controller.OpenMenu("KFGUI.KFServerBrowser"); } else if ( Sender == b_Leave ) { // Forfeit/Disconnect PC.ConsoleCommand("DISCONNECT"); KFGUIController(Controller).ReturnToMainMenu(); } else if ( Sender == b_Favs ) { // Add this server to favorites PC.ConsoleCommand( "ADDCURRENTTOFAVORITES" ); b_Favs.MenuStateChange(MSAT_Disabled); } else if ( Sender == b_Quit ) { // Quit game Controller.OpenMenu(Controller.GetQuitPage()); } else if ( Sender == b_MapVote ) { // Map voting Controller.OpenMenu(Controller.MapVotingMenu); } else if ( Sender == b_KickVote ) { // Kick voting Controller.OpenMenu(Controller.KickVotingMenu); } else if ( Sender == b_MatchSetup ) { // Match setup Controller.OpenMenu(Controller.MatchSetupMenu); } else if ( Sender == b_Spec ) { Controller.CloseMenu(); // Spectate/rejoin if ( PC.PlayerReplicationInfo.bOnlySpectator ) PC.BecomeActivePlayer(); else PC.BecomeSpectator(); } else if( Sender==b_Profile ) { // Profile Controller.OpenMenu(string(Class'SRProfilePage')); } return true; } function bool InternalOnPreDraw(Canvas C) { local GameReplicationInfo GRI; local PlayerController PC; GRI = GetGRI(); if ( GRI != none ) { if ( bInit ) InitGRI(); SetButtonPositions(C); PC = PlayerOwner(); if ( (PC.myHUD == None || !PC.myHUD.IsInCinematic()) && GRI != none && GRI.bMatchHasBegun && !PC.IsInState('GameEnded') ) EnableComponent(b_Spec); else DisableComponent(b_Spec); if( PC.PlayerReplicationInfo!=None && bOldSpectator!=PC.PlayerReplicationInfo.bOnlySpectator ) { bOldSpectator = !bOldSpectator; if ( bOldSpectator ) b_Spec.Caption = class'KFTab_MidGamePerks'.default.JoinGameButtonText; else b_Spec.Caption = class'KFTab_MidGamePerks'.default.SpectateButtonText; } } return false; } function RemoveMultiplayerTabs(GameInfo Game); defaultproperties { Begin Object Class=GUIButton Name=SettingsButton WinTop=0.900000 WinLeft=0.194420 WinWidth=0.147268 WinHeight=0.035000 TabOrder=0 bBoundToParent=True bScaleToParent=True OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=SettingsButton.InternalOnKeyEvent End Object b_Settings=GUIButton'ServerPerks.SRInvasionLoginMenu.SettingsButton' Begin Object Class=GUIButton Name=BrowserButton bAutoSize=True WinTop=0.850000 WinLeft=0.375000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=1 bBoundToParent=True bScaleToParent=True OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=BrowserButton.InternalOnKeyEvent End Object b_Browser=GUIButton'ServerPerks.SRInvasionLoginMenu.BrowserButton' Begin Object Class=GUIButton Name=QuitGameButton bAutoSize=True WinTop=0.870000 WinLeft=0.725000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=50 OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=QuitGameButton.InternalOnKeyEvent End Object b_Quit=GUIButton'ServerPerks.SRInvasionLoginMenu.QuitGameButton' Begin Object Class=GUIButton Name=FavoritesButton bAutoSize=True WinTop=0.870000 WinLeft=0.025000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=2 bBoundToParent=True bScaleToParent=True OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=FavoritesButton.InternalOnKeyEvent End Object b_Favs=GUIButton'ServerPerks.SRInvasionLoginMenu.FavoritesButton' Begin Object Class=GUIButton Name=LeaveMatchButton bAutoSize=True WinTop=0.870000 WinLeft=0.725000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=49 bBoundToParent=True bScaleToParent=True OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=LeaveMatchButton.InternalOnKeyEvent End Object b_Leave=GUIButton'ServerPerks.SRInvasionLoginMenu.LeaveMatchButton' Begin Object Class=GUIButton Name=MapVotingButton bAutoSize=True WinTop=0.890000 WinLeft=0.025000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=3 OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=MapVotingButton.InternalOnKeyEvent End Object b_MapVote=GUIButton'ServerPerks.SRInvasionLoginMenu.MapVotingButton' Begin Object Class=GUIButton Name=KickVotingButton bAutoSize=True WinTop=0.890000 WinLeft=0.375000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=4 OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=KickVotingButton.InternalOnKeyEvent End Object b_KickVote=GUIButton'ServerPerks.SRInvasionLoginMenu.KickVotingButton' Begin Object Class=GUIButton Name=MatchSetupButton bAutoSize=True WinTop=0.890000 WinLeft=0.725000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=5 OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=MatchSetupButton.InternalOnKeyEvent End Object b_MatchSetup=GUIButton'ServerPerks.SRInvasionLoginMenu.MatchSetupButton' Begin Object Class=GUIButton Name=SpectateButton bAutoSize=True WinTop=0.890000 WinLeft=0.725000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=6 OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=SpectateButton.InternalOnKeyEvent End Object b_Spec=GUIButton'ServerPerks.SRInvasionLoginMenu.SpectateButton' Begin Object Class=GUIButton Name=ProfileButton Caption="Profile" bAutoSize=True WinTop=0.890000 WinLeft=0.725000 WinWidth=0.200000 WinHeight=0.050000 TabOrder=7 OnClick=SRInvasionLoginMenu.ButtonClicked OnKeyEvent=ProfileButton.InternalOnKeyEvent End Object b_Profile=GUIButton'ServerPerks.SRInvasionLoginMenu.ProfileButton' CurTabOrder=8 Panels(0)=(Caption="News",Hint="View server news") Panels(4)=(Caption="Stats",Hint="View your current stats of this server") OnPreDraw=SRInvasionLoginMenu.InternalOnPreDraw }