244 lines
5.6 KiB
Ucode
244 lines
5.6 KiB
Ucode
// ====================================================================
|
|
// (C) 2002, Epic Games
|
|
// ====================================================================
|
|
|
|
class UT2K4VideoChangeOK extends UT2K4GenericMessageBox;
|
|
|
|
var() noexport enum EVideoChangeType { VCT_Resolution, VCT_FullScreen, VCT_Device } ChangeType;
|
|
var() noexport transient int Count;
|
|
var() noexport transient string RevertString;
|
|
var() localized string RestoreText, SecondText, SecondsText;
|
|
var() string OverrideResNotice;
|
|
|
|
var automated GUIButton b_Cancel;
|
|
|
|
function InitComponent(GUIController InController, GUIComponent InOwner)
|
|
{
|
|
Super.InitComponent(InController, InOwner);
|
|
|
|
OverrideResNotice =
|
|
Localize( "UT2DeferChangeRes", "DialogText.Caption", "XInterface" ) $ "|" $
|
|
Localize( "UT2DeferChangeRes", "DialogText2.Caption", "XInterface" );
|
|
}
|
|
|
|
function Execute(string DesiredRes)
|
|
{
|
|
if ( DesiredRes == "" )
|
|
{
|
|
KillTimer();
|
|
if ( Controller.ActivePage == Self )
|
|
Controller.CloseMenu();
|
|
|
|
return;
|
|
}
|
|
|
|
if ( InStr(DesiredRes, "x16") != -1 || InStr(DesiredRes, "x32") != -1 )
|
|
{
|
|
ChangeType = VCT_Resolution;
|
|
ChangeResolution(DesiredRes);
|
|
}
|
|
|
|
else if ( DesiredRes ~= "togglefullscreen" )
|
|
{
|
|
ChangeType = VCT_FullScreen;
|
|
ToggleFullScreen();
|
|
}
|
|
else
|
|
{
|
|
ChangeType = VCT_Device;
|
|
SetDevice(DesiredRes);
|
|
}
|
|
}
|
|
|
|
function ToggleFullScreen()
|
|
{
|
|
RevertString = "togglefullscreen";
|
|
PlayerOwner().ConsoleCommand(RevertString);
|
|
StartTimer();
|
|
}
|
|
|
|
function ChangeResolution( string DesiredRes )
|
|
{
|
|
local int i;
|
|
local string CurrentRes, NewX, NewY, NewDepth, NewScreen;
|
|
local bool lowres;
|
|
|
|
// Create the string we'll use to revert settings if change is undesireable
|
|
CurrentRes = Controller.GetCurrentRes();
|
|
lowres = bool(PlayerOwner().ConsoleCommand("get ini:Engine.Engine.RenderDevice Use16bit"));
|
|
|
|
RevertString = "setres" @ CurrentRes;
|
|
if (lowres)
|
|
RevertString $= "x16";
|
|
else
|
|
RevertString $= "x32";
|
|
|
|
if(bool(PlayerOwner().ConsoleCommand("ISFULLSCREEN")))
|
|
RevertString $= "f";
|
|
else
|
|
RevertString $= "w";
|
|
|
|
|
|
// Apply new resolution and wait for acceptance
|
|
PlayerOwner().ConsoleCommand("set ini:Engine.Engine.RenderDevice Use16bit"@(InStr(DesiredRes,"x16") != -1));
|
|
|
|
i = InStr(DesiredRes, "x");
|
|
|
|
NewX = Left(DesiredRes, i);
|
|
NewY = Mid( DesiredRes, i + 1 );
|
|
i = InStr( NewY, "x" );
|
|
if ( i != -1 )
|
|
{
|
|
NewDepth = Mid(NewY, i);
|
|
NewY = Left(NewY, i);
|
|
|
|
if ( Right(NewDepth,1) ~= "f" || Right(NewDepth,1) ~= "w" )
|
|
{
|
|
NewScreen = Right(NewDepth,1);
|
|
NewDepth = Left(NewDepth, Len(NewDepth)-1);
|
|
}
|
|
}
|
|
|
|
if( int(NewX) < 640 || int(NewY) < 480 )
|
|
{
|
|
KillTimer();
|
|
PlayerOwner().ConsoleCommand("TEMPSETRES 640x480" $ NewDepth $ NewScreen);
|
|
if ( Controller.OpenMenu("GUI2K4.UT2K4GenericMessageBox","",OverrideResNotice) )
|
|
Controller.ActivePage.OnClose = DeferChangeOnClose;
|
|
}
|
|
else
|
|
{
|
|
PlayerOwner().ConsoleCommand( "SETRES" @ DesiredRes );
|
|
StartTimer();
|
|
}
|
|
}
|
|
|
|
function SetDevice( string NewRenderDevice )
|
|
{
|
|
RevertString = PlayerOwner().ConsoleCommand("get ini:Engine.Engine.RenderDevice Class");
|
|
if ( RevertString ~= NewRenderDevice || !Controller.SetRenderDevice(NewRenderDevice) )
|
|
{
|
|
KillTimer();
|
|
if ( Controller.ActivePage == Self )
|
|
Controller.CloseMenu();
|
|
|
|
return;
|
|
}
|
|
|
|
StartTimer();
|
|
}
|
|
|
|
function DeferChangeOnClose(optional Bool bCancelled)
|
|
{
|
|
StartTimer();
|
|
}
|
|
|
|
function StartTimer()
|
|
{
|
|
Count=15;
|
|
SetTimer(1.0,true);
|
|
}
|
|
|
|
event Timer()
|
|
{
|
|
Count--;
|
|
l_Text2.Caption = Repl(RestoreText, "%count%", Count);
|
|
|
|
if ( Count == 1 )
|
|
l_Text2.Caption = Repl(l_Text2.Caption, "%seconds%", SecondText);
|
|
else l_Text2.Caption = Repl(l_Text2.Caption, "%seconds%", SecondsText);
|
|
|
|
if ( Count <= 0 )
|
|
InternalOnClick(b_Cancel);
|
|
}
|
|
|
|
function bool InternalOnClick(GUIComponent Sender)
|
|
{
|
|
KillTimer();
|
|
if (Sender==b_Cancel)
|
|
{
|
|
switch (ChangeType)
|
|
{
|
|
case VCT_Resolution:
|
|
PlayerOwner().ConsoleCommand("set ini:Engine.Engine.RenderDevice Use16bit"@(InStr(RevertString,"x16")!=-1));
|
|
PlayerOwner().ConsoleCommand(RevertString);
|
|
break;
|
|
|
|
case VCT_FullScreen:
|
|
PlayerOwner().ConsoleCommand(RevertString);
|
|
break;
|
|
|
|
case VCT_Device:
|
|
Controller.SetRenderDevice(RevertString);
|
|
break;
|
|
}
|
|
}
|
|
|
|
Controller.CloseMenu(Sender == b_Cancel);
|
|
return true;
|
|
}
|
|
|
|
|
|
defaultproperties
|
|
{
|
|
Begin Object Class=GUIButton Name=bOk
|
|
Caption="Keep Settings"
|
|
WinWidth=0.200000
|
|
WinHeight=0.040000
|
|
WinLeft=0.175000
|
|
WinTop=0.558334
|
|
bBoundToParent=true
|
|
OnClick=InternalOnClick
|
|
// if _RO_
|
|
//StyleName="SelectButton"
|
|
// end if _RO_
|
|
End Object
|
|
b_Ok=bOk
|
|
|
|
Begin Object Class=GUIButton Name=bCancel
|
|
Caption="Restore Settings"
|
|
WinWidth=0.2
|
|
WinHeight=0.04
|
|
WinLeft=0.65
|
|
WinTop=0.558334
|
|
bBoundToParent=true
|
|
OnClick=InternalOnClick
|
|
// if _RO_
|
|
//StyleName="SelectButton"
|
|
// end if _RO_
|
|
End Object
|
|
b_Cancel=bCancel
|
|
|
|
Begin Object class=GUILabel Name=lbText
|
|
Caption="Accept these settings?"
|
|
TextAlign=TXTA_Center
|
|
StyleName="TextLabel"
|
|
FontScale=FNS_Large
|
|
WinWidth=1.000000
|
|
WinHeight=0.068750
|
|
WinLeft=0.000000
|
|
WinTop=0.390000
|
|
End Object
|
|
l_Text=lbText
|
|
|
|
Begin Object class=GUILabel Name=lbText2
|
|
Caption="(Original settings will be restored in 15 seconds)"
|
|
TextAlign=TXTA_Center
|
|
// if _RO_
|
|
StyleName="TextLabel"
|
|
// else
|
|
// StyleName="TextButton"
|
|
// end if _RO_
|
|
WinWidth=1
|
|
WinLeft=0
|
|
WinTop=0.46
|
|
WinHeight=0.045
|
|
End Object
|
|
l_Text2=lbText2
|
|
|
|
RestoreText="(Original settings will be restored in %count% %seconds%)"
|
|
SecondText="second"
|
|
SecondsText="seconds"
|
|
InactiveFadeColor=(R=128,G=128,B=128,A=255)
|
|
}
|