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

293 lines
6.8 KiB
Ucode

//==============================================================================
// Created on: 08/18/2003
// Description
//
// Written by Ron Prestenback
// © 2003, Epic Games, Inc. All Rights Reserved
//==============================================================================
class UT2K4DisconnectOptionPage extends BlackoutWindow;
var Automated GUIButton b_MainMenu, b_ServerBrowser,
b_Reconnect, b_Quit;
var automated GUILabel l_Status;
var() bool bReconnectAllowed;
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
Super.InitComponent(MyController, MyOwner);
PlayerOwner().ClearProgressMessages();
SetSizingCaption();
}
function SetSizingCaption()
{
local string s;
local GUIButton b;
local int i;
for ( i = 0; i < Components.Length; i++ )
{
b = GUIButton(Components[i]);
if ( b == None )
continue;
if ( s == "" || Len(b.Caption) > len(s) )
s = b.Caption;
}
for ( i = 0; i< Components.Length; i++ )
{
b = GUIButton(Components[i]);
if ( b == None )
continue;
b.SizingCaption = s;
}
}
event HandleParameters(string Param1, string Param2)
{
// If we received any type of failure message, cancel any pending connections
// as these aren't always cancelled, even when there has been a failure
if ( Param1 != "" || Param2 != "" )
Controller.ViewportOwner.Console.DelayedConsoleCommand("CANCEL");
if ( InStr(Locs(Param1), "?failed") != -1 )
bReconnectAllowed = false;
if ( Param1 != "" )
l_Status.Caption = Param1;
if ( l_Status.Caption != "" )
l_Status.Caption $= "|";
if ( Param2 == "noreconnect" )
bReconnectAllowed = False;
else if ( !(Param1 ~= Param2) )
l_Status.Caption $= Param2;
UpdateButtons();
}
function UpdateButtons()
{
if ( bReconnectAllowed && !PlayerOwner().Level.IsPendingConnection() )
b_Reconnect.EnableMe();
else b_Reconnect.DisableMe();
}
event Opened(GUIComponent Sender)
{
// Make sure we remove any other menus like this from the stack
if ( Controller != None )
Controller.ConsolidateMenus();
Super.Opened(Sender);
}
function bool InternalOnClick(GUIComponent Sender)
{
local GUIController C;
if ( GUIButton(Sender) == None )
return false;
C = Controller;
switch (GUIButton(Sender).Caption)
{
case b_MainMenu.Caption:
UT2K4GUIController(C).ReturnToMainMenu();
return true;
case b_ServerBrowser.Caption:
// If we still have a pending connection, do not close this menu when opening the server browser
// or the player will be stuck in the menus if the connection succeeds, since the server browser
// isn't allowed as last (closing the server browser would then cause the main menu to appear)
if ( PlayerOwner().Level.IsPendingConnection() )
C.OpenMenu( C.GetServerBrowserPage() );
else
{
// Clear the controller's restore menu array or things will get very messy
C.CloseAll(true,true);
C.RestoreMenus.Length = 0;
C.OpenMenu( C.GetServerBrowserPage() );
// Controller.ReplaceMenu( Controller.GetServerBrowserPage() );
}
return true;
case b_Quit.Caption:
C.OpenMenu(C.GetQuitPage());
return true;
case b_Reconnect.Caption:
C.ViewportOwner.Console.DelayedConsoleCommand("Reconnect");
C.CloseMenu(false);
return True;
// Controller.CloseAll(false,true);
}
return false;
}
function UpdateStatus(string NewStatus)
{
l_Status.Caption = NewStatus;
}
function bool InternalOnPreDraw(Canvas C)
{
local int i;
local float X, width;
for ( i = 0; i < Components.Length; i++ )
if ( GUIButton(Components[i]) != None )
width += Components[i].ActualWidth();
width += 30;
X = ((ActualLeft() + ActualWidth()) / 2) - (width / 2);
for ( i = 0; i < Components.Length; i++ )
{
if ( GUIButton(Components[i]) != None )
{
Components[i].WinLeft = RelativeLeft(X);
X += Components[i].ActualWidth() + 10;
}
}
return false;
}
function bool InternalOnKeyEvent(out byte Key, out byte State, float delta)
{
if ( Key == 0x0D && State == 3 ) // Enter
return InternalOnClick( GUIButton(FocusedControl) );
return false;
}
event bool NotifyLevelChange()
{
return false;
}
function bool CanClose( bool bCancelled )
{
// Only allow this menu to be closed (using escape) if we are currently connected
// to a server, or we still have a pending connection, unless we were in some other menu
if ( bCancelled && Controller.KeyPressed(IK_Escape) && !PlayerOwner().Level.IsPendingConnection() && PlayerOwner().Level.IsEntry() )
return Controller.Count() > 1;
return true;
}
function bool AllowOpen(string MenuClass)
{
if (MenuClass~= "GUI2k4.UT2K4DisconnectOptionPage")
return false;
else
return true;
}
DefaultProperties
{
OnKeyEvent=InternalOnKeyEvent
OnPreDraw=InternalOnPreDraw
OnCanClose=CanClose
Begin Object Class=GUILabel Name=cNetStatLabel
Caption="Select an option"
TextALign=TXTA_Center
StyleName="TextLabel"
FontScale=FNS_Large
WinWidth=1.000000
WinHeight=0.099922
WinLeft=0.000000
WinTop=0.314687
bMultiLine=true
bBoundToParent=true
VertAlign=TXTA_Left
End Object
l_Status=cNetStatLabel
Begin Object Class=GUIButton Name=ReconnectButton
Caption="RECONNECT"
// if _RO_
// StyleName="SelectButton"
// else
// StyleName="SquareButton"
// end if _RO_
OnClick=InternalOnClick
TabOrder=0
WinWidth=0.132806
WinHeight=0.040000
WinLeft=0.345702
WinTop=0.548235
bAutoSize=True
End Object
b_Reconnect=ReconnectButton
Begin Object Class=GUIButton Name=MainMenuButton
Caption="MAIN MENU"
// if _RO_
// StyleName="SelectButton"
// else
// StyleName="SquareButton"
// end if _RO_
OnClick=InternalOnClick
TabOrder=1
WinWidth=0.132806
WinHeight=0.040000
WinLeft=0.157811
WinTop=0.548235
bAutoSize=True
End Object
b_MainMenu=MainMenuButton
Begin Object Class=GUIButton Name=ServerBrowserButton
Caption="SERVER BROWSER"
// if _RO_
// StyleName="SelectButton"
// else
// StyleName="SquareButton"
// end if _RO_
OnClick=InternalOnClick
TabOrder=2
WinWidth=0.223632
WinHeight=0.040000
WinLeft=0.398437
WinTop=0.548235
bAutoSize=True
End Object
b_ServerBrowser=ServerBrowserButton
Begin Object Class=GUIButton Name=QuitButton
// if _RO_
// Caption="EXIT RED ORCHESTRA"
// StyleName="SelectButton"
// else
// Caption="EXIT UT2004"
// StyleName="SquareButton"
// end if _RO_
Caption="EXIT KILLING FLOOR"
OnClick=InternalOnClick
TabOrder=3
WinWidth=0.223632
WinHeight=0.040000
WinLeft=0.627929
WinTop=0.548235
bAutoSize=True
End Object
b_Quit=QuitButton
OpenSound=sound'KF_MenuSnd.msfxEdit'
// bDisconnectOnOpen=true
bReconnectAllowed=True
bAllowedAsLast=true
}