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

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)
}