rott/kf_sources/ServerPerks/Classes/SRInvasionLoginMenu.uc
2026-07-14 20:27:09 +07:00

549 lines
16 KiB
Ucode

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<SRMenuAddition> 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<AddOnList.Length; ++i )
AddOnList[i].NotifyMenuShown();
}
event Closed(GUIComponent Sender, bool bCancelled)
{
local int i;
Super.Closed(Sender,bCancelled);
for( i=0; i<AddOnList.Length; ++i )
AddOnList[i].NotifyMenuClosed();
}
function string GetSizingCaption()
{
local int i;
local string s;
for ( i = 0; i < Controls.Length; i++ )
{
if ( GUIButton(Controls[i]) != none )
{
if ( s == "" || Len(GUIButton(Controls[i]).Caption) > 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
}