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

786 lines
23 KiB
Ucode

// base class, not vanilla
class HideMainMenu extends UT2K4GUIPage;
#exec OBJ LOAD FILE=InterfaceContent.utx
#exec OBJ LOAD FIlE=2K4Menus.utx
// #exec OBJ LOAD FIlE=2K4MenuSounds.uax
#exec OBJ LOAD FIlE=2K4Menus.utx
#exec OBJ LOAD FIlE=PatchTex.utx
#exec OBJ LOAD FIlE=KF_DLC.utx
#exec OBJ LOAD FIlE=KillingFloorHUD_SUMMER.utx
#exec OBJ LOAD FIlE=KillingFloorHUD_HALLOWEEN.utx
#exec OBJ LOAD FIlE=KillingFloorHUD_XMAS.utx
//=============================================================================
// VARIABLES
//=============================================================================
//var KFDataObject SPAmmo;
var bool bOpenAlready;
var bool bMovingOnTraining, bMovingOnResume, bMovingOnSP;
var automated FloatingImage KFBackground;
var automated FloatingImage KFBackgroundOverlay;
var automated GUIImage KFLogoBit;
var automated GUILabel KFVersionNum; // Keep track of updates from now on ! :D
var automated GUILabel KFWorkshopDownload;
// Variable Name Legend
// l_ GUILabel lb_ GUIListBox
// i_ GUIImage li_ GUIList
// b_ GUIButton tp_ GUITabPanel
// t_ GUITitleBar sp_ GUISplitter
// c_ GUITabControl
// p_ GUIPanel
// ch_ moCheckBox
// co_ moComboBox
// nu_ moNumericEdit
// ed_ moEditBox
// fl_ moFloatEdit
// sl_ moSlider
var automated BackgroundImage i_BkChar,
i_Background;
var automated GUIImage i_UT2Logo,
i_PanHuge,
i_PanBig,
i_PanSmall,
i_UT2Shader,
i_TV;
var automated GUIButton b_SinglePlayer,
b_MultiPlayer, b_Host,
b_InstantAction,
b_ModsAndDemo,
b_Profile,
b_JoinLH,
b_Workshop,
b_Settings,
b_Quit;
var bool bAllowClose;
var array<material> CharShots;
var float CharFade, DesiredCharFade, CharFadeTime;
var GUIButton Selected;
var() bool bNoInitDelay;
var() config string MenuSong;
var bool bNewNews;
var float FadeTime;
var bool FadeOut;
var localized string NewNewsMsg,
FireWallTitle,
FireWallMsg,
SteamMustBeRunningText,
UnknownSteamErrorText,
DownloadingText,
DownloadedText;
//=============================================================================
// LOGIC
//=============================================================================
// DISABLED
function OnClose(optional Bool bCancelled){}
// remove NEWS tab and all logs spam / lags caused by it
event Opened(GUIComponent Sender)
{
super(GUIMultiComponent).Opened(Sender);
class'KFServerBrowser'.default.PanelClass[0] = "none";
}
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
local byte SpecialEventType;
super.InitComponent(MyController, MyOwner);
Background = none;
i_BkChar.Image = CharShots[rand(CharShots.Length)];
SpecialEventType = class'KFGameType'.static.GetSpecialEventType();
if (SpecialEventType == 1)
{
KFBackground.Image = MaterialSequence'KillingFloorHUD_SUMMER.MainMenu.kf_menu_seq';
KFLogoBit.Image = FinalBlend'KillingFloorHUD_SUMMER.KFLogoFB';
}
else if (SpecialEventType == 2)
{
KFBackground.Image = MaterialSequence'KillingFloorHUD_HALLOWEEN.MainMenu.kf_menu_seq_HALLOWEEN';
KFLogoBit.Image = FinalBlend'KillingFloorHUD_HALLOWEEN.KFLogoFB_halloween';
}
else if (SpecialEventType == 3)
{
KFBackground.Image = MaterialSequence'KillingFloorHUD_XMAS.MainMenu.kf_menu_seq_XMAS';
KFLogoBit.Image = FinalBlend'KillingFloorHUD_XMAS.KFLogoFB_XMAS';
}
}
function InternalOnOpen()
{
if (bNoInitDelay)
Timer();
else
SetTimer(4.5, false);
Controller.PerformRestore();
// if ( !PlayerOwner().level.game.IsA('KFCinematicGame') )
// {
// bOpenAlready = True;
// PlayerOwner().ConsoleCommand("OPEN Entry?Game=KFMod.KFCinematicGame");
// PlayerOwner().ClientSetInitialMusic(MenuSong,MTRAN_Segue);
// }
PlayerOwner().ClientSetInitialMusic(MenuSong,MTRAN_Segue);
// Begin Syncing Subscribed Steam Workshop Files(if necessary)
PlayerOwner().SyncSteamWorkshop();
}
function bool MyOnDraw(Canvas Canvas)
{
local GUIButton FButton;
local int i,x2;
local float XL,YL;
local float DeltaTime;
local int percentage;
if (PlayerOwner().SubscribedFileDownloadTitle != "")
{
if (PlayerOwner().SubscribedFileDownloadIndex != -1)
{
percentage = int(PlayerOwner().DownloadFileProgress * 100);
KFWorkshopDownload.Caption = DownloadingText @ "|" @ PlayerOwner().SubscribedFileDownloadTitle @ "|" @percentage $ "%";
}
else
{
KFWorkshopDownload.Caption = PlayerOwner().SubscribedFileDownloadTitle @ "|" @ DownloadedText;
}
}
if ( bAnimating || !Controller.bCurMenuInitialized )
{
return false;
}
DeltaTime = Controller.RenderDelta;
for ( i = 0; i < Controls.Length; i++ )
{
if ( GUIButton(Controls[i]) != none )
{
FButton = GUIButton(Controls[i]);
if ( FButton.Tag > 0 && FButton.MenuState != MSAT_Focused )
{
FButton.Tag -= 784 * DeltaTime;
if ( FButton.Tag < 0 )
{
FButton.Tag = 0;
}
}
else if ( FButton.MenuState == MSAT_Focused )
{
FButton.Tag = 200;
}
if ( FButton.Tag > 0 )
{
fButton.Style.TextSize(Canvas, MSAT_Focused, FButton.Caption, XL, YL, FButton.FontScale);
x2 = FButton.ActualLeft() + XL + 16;
Canvas.Style = 5;
Canvas.SetDrawColor(150, 25, 25, FButton.Tag);
Canvas.SetPos(0, fButton.ActualTop());
Canvas.DrawTilePartialStretched(material'Highlight', x2, FButton.ActualHeight());
}
}
}
return false;
}
event Timer()
{
if (!bMovingOnTraining && !bMovingOnResume && !bMovingOnSP)
{
bNoInitDelay = true;
if (!Controller.bQuietMenu)
{
PlayerOwner().PlaySound(SlideInSound,SLOT_None);
}
i_TV.Animate(-0.000977, 0.332292, 0.35);
i_UT2Logo.Animate(0.007226,0.016926,0.35);
i_UT2Shader.Animate(0.249023,0.180988,0.35);
i_TV.OnEndAnimation = MenuIn_OnArrival;
i_UT2Logo.OnEndAnimation = MenuIn_OnArrival;
i_UT2Shader.OnEndAnimation = MenuIn_OnArrival;
}
else
{
if (bMovingOnResume)
{
bMovingOnResume = false;
Controller.ConsoleCommand("OPEN KFS-RESUMEGAME?Game=KFmod.KFSPGameType");
}
if (bMovingOnTraining)
{
bMovingOnTraining = false;
Controller.ConsoleCommand("OPEN KF-MANOR?Game=KFmod.KFGameType");
}
if (bMovingOnSP)
{
bMovingOnSP = false;
Controller.ConsoleCommand("OPEN KF-G-BIOTICSLAB?Game=KFmod.KFGameType");
}
}
}
function MoveOn()
{
local int i;
local bool bShowPerkInfo;
switch (Selected)
{
case b_SinglePlayer:
return;
case b_MultiPlayer:
if (!Controller.CheckSteam())
{
Controller.OpenMenu(Controller.QuestionMenuClass);
GUIQuestionPage(Controller.TopPage()).SetupQuestion(SteamMustBeRunningText, QBTN_Ok, QBTN_Ok);
return;
}
Profile("ServerBrowser");
Controller.OpenMenu("KFGUI.KFServerBrowser");
Profile("ServerBrowser");
return;
case b_Host:
if (!Controller.CheckSteam())
{
Controller.OpenMenu(Controller.QuestionMenuClass);
GUIQuestionPage(Controller.TopPage()).SetupQuestion(SteamMustBeRunningText, QBTN_Ok, QBTN_Ok);
return;
}
Profile("MPHost");
if (PlayerOwner() != none)
{
PlayerOwner().OpenUPNPPorts();
}
Controller.OpenMenu("KFGUI.KFGamePageMP");
Profile("MPHost");
return;
case b_InstantAction:
Profile("InstantAction");
Controller.OpenMenu("KFGUI.KFGamePageSP");
Profile("InstantAction");
return;
case b_Profile:
if (!Controller.CheckSteam())
{
Controller.OpenMenu(Controller.QuestionMenuClass);
GUIQuestionPage(Controller.TopPage()).SetupQuestion(SteamMustBeRunningText, QBTN_Ok, QBTN_Ok);
return;
}
if (PlayerOwner() != none)
{
if (PlayerOwner().SteamStatsAndAchievements == none)
{
PlayerOwner().SteamStatsAndAchievements = PlayerOwner().Spawn(PlayerOwner().default.SteamStatsAndAchievementsClass, PlayerOwner());
if (!PlayerOwner().SteamStatsAndAchievements.Initialize(PlayerOwner()))
{
Controller.OpenMenu(Controller.QuestionMenuClass);
GUIQuestionPage(Controller.TopPage()).SetupQuestion(UnknownSteamErrorText, QBTN_Ok, QBTN_Ok);
PlayerOwner().SteamStatsAndAchievements.Destroy();
PlayerOwner().SteamStatsAndAchievements = none;
}
else
{
PlayerOwner().SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady;
}
return;
}
else if (!PlayerOwner().SteamStatsAndAchievements.bInitialized)
{
PlayerOwner().SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady;
PlayerOwner().SteamStatsAndAchievements.GetStatsAndAchievements();
return;
}
for (i = 0; i < class'KFGameType'.default.LoadedSkills.Length; i++)
{
if (KFSteamStatsAndAchievements(PlayerOwner().SteamStatsAndAchievements).GetPerkProgress(i) < 0.0)
{
Controller.OpenMenu(Controller.QuestionMenuClass);
GUIQuestionPage(Controller.TopPage()).SetupQuestion(class'HideMainMenu'.default.UnknownSteamErrorText, QBTN_Ok, QBTN_Ok);
PlayerOwner().SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady;
PlayerOwner().SteamStatsAndAchievements.GetStatsAndAchievements();
return;
}
}
if (class'KFPlayerController'.default.SelectedVeterancy == none)
{
bShowPerkInfo = true;
}
Profile("Profile");
Controller.OpenMenu("KFGUI.KFProfileAndAchievements");
Profile("Profile");
if (bShowPerkInfo)
{
Controller.OpenMenu(Controller.QuestionMenuClass);
GUIQuestionPage(Controller.TopPage()).SetupQuestion(class'LobbyMenu'.default.SelectPerkInformationString, QBTN_Ok, QBTN_Ok);
}
}
return;
case b_JoinLH:
Controller.ViewportOwner.Console.ConsoleCommand("open 127.0.0.1");
return;
case b_Workshop:
PlayerOwner().SteamStatsAndAchievements.ShowWorkshopContent();
return;
case b_ModsAndDemo:
Profile("ModsandDemos");
Controller.ViewportOwner.Console.ConsoleCommand("OPEN KF-Intro?Game=unrealgame.cinematicgame");
Controller.CloseAll(True);
SetTimer(0.5,false);
Profile("ModsandDemos");
return;
case b_Settings:
Profile("Settings");
Controller.OpenMenu("KFGUI.KFSettingsPage");
Profile("Settings");
return;
case b_Quit:
Profile("Quit");
Controller.OpenMenu(Controller.GetQuitPage());
Profile("Quit");
return;
default:
StopWatch(True);
break;
}
}
function MenuIn_OnArrival(GUIComponent Sender, EAnimationType Type)
{
Sender.OnArrival = none;
if (bAnimating)
return;
i_UT2Shader.OnDraw = MyOnDraw;
DesiredCharFade=255;
CharFadeTime = 0.75;
if (!Controller.bQuietMenu)
PlayerOwner().PlaySound(FadeInSound);
}
function MainReopened()
{
if (!PlayerOwner().Level.IsPendingConnection())
{
i_BkChar.Image = CharShots[rand(CharShots.Length)];
Opened(none);
Timer();
}
}
function bool MyKeyEvent(out byte Key,out byte State,float delta)
{
// Escape pressed
if (Key == 0x1B && state == 1)
bAllowClose = true;
return false;
}
function bool CanClose(optional bool bCancelled)
{
if (bAllowClose)
ButtonClick(b_Quit);
bAllowClose = false;
return PlayerOwner().Level.IsPendingConnection();
}
function PlayPopSound(GUIComponent Sender, EAnimationType Type)
{
if (!Controller.bQuietMenu)
PlayerOwner().PlaySound(PopInSound);
}
function MenuIn_Done(GUIComponent Sender, EAnimationType Type)
{
Sender.OnArrival = none;
PlayPopSound(Sender,Type);
}
function bool ButtonClick(GUIComponent Sender)
{
Selected = GUIButton(Sender);
if (Selected == none)
return false;
DesiredCharFade=0;
CharFadeTime = 0.35;
MoveOn();
return true;
}
function MenuOut_Done(GUIComponent Sender, EAnimationType Type)
{
Sender.OnArrival = none;
if (bAnimating)
return;
MoveOn();
}
event bool NotifyLevelChange()
{
if (bDebugging)
log(Name@"NotifyLevelChange PendingConnection:"$PlayerOwner().Level.IsPendingConnection());
return PlayerOwner().Level.IsPendingConnection();
}
function bool CommunityDraw(canvas c)
{
local float x,y,xl,yl,a;
if (bNewNews)
{
a = 255.0 * (FadeTime/1.0);
if (FadeOut)
a = 255 - a;
FadeTime += Controller.RenderDelta;
if (FadeTime>=1.0)
{
FadeTime = 0;
FadeOut = !FadeOut;
}
a = fclamp(a,1.0,254.0);
x = b_ModsAndDemo.ActualLeft();
y = b_Settings.ActualTop();
C.Font = Controller.GetMenuFont("UT2MenuFont").GetFont(C.ClipX);
C.Strlen("Qz,q",xl,yl);
y -= yl - 5;
C.Style=5;
C.SetPos(x+1,y+1);
C.SetDrawColor(0,0,0,A);
C.DrawText(NewNewsMsg);
C.SetPos(x,y);
C.SetDrawColor(207,185,103,A);
C.DrawText(NewNewsMsg);
}
return false;
}
function OnSteamStatsAndAchievementsReady()
{
Profile("Profile");
Controller.OpenMenu("KFGUI.KFProfileAndAchievements");
Profile("Profile");
}
//=============================================================================
// DEFAULTPROPERTIES
//=============================================================================
defaultproperties
{
Begin Object Class=FloatingImage Name=FloatingBackground
Image=MaterialSequence'KillingFloorHUD.MainMenu.kf_menu_seq'
DropShadow=None
ImageStyle=ISTY_Scaled
WinTop=0.136089
WinLeft=0.273078
WinWidth=0.802660
WinHeight=1.080918
RenderWeight=0.000003
End Object
KFBackground=FloatingImage'HideMut.HideMainMenu.FloatingBackground'
Begin Object Class=FloatingImage Name=FloatingBackgroundOverlay
Image=FinalBlend'InterfaceArt2_tex.filmgrain.FilmgrainOverlayFB'
DropShadow=None
ImageStyle=ISTY_Scaled
WinTop=0.000000
WinLeft=0.000000
WinWidth=1.000000
WinHeight=1.000000
RenderWeight=0.900000
End Object
KFBackgroundOverlay=FloatingImage'HideMut.HideMainMenu.FloatingBackgroundOverlay'
Begin Object Class=GUIImage Name=KFMenuLogo
Image=FinalBlend'KillingFloorHUD.KFLogoFB'
ImageStyle=ISTY_Scaled
WinTop=0.012000
WinLeft=0.008000
WinWidth=0.620000
WinHeight=0.300000
RenderWeight=0.050000
End Object
KFLogoBit=GUIImage'HideMut.HideMainMenu.KFMenuLogo'
Begin Object Class=GUILabel Name=WorkshopDownloadLabel
TextAlign=TXTA_Right
TextColor=(B=200,G=200,R=200)
bMultiLine=True
FontScale=FNS_Small
WinTop=0.050000
WinLeft=0.600000
WinWidth=0.390000
WinHeight=0.150000
RenderWeight=0.950000
End Object
KFWorkshopDownload=GUILabel'HideMut.HideMainMenu.WorkshopDownloadLabel'
Begin Object Class=BackgroundImage Name=ImgBkChar
ImageColor=(A=160)
ImageRenderStyle=MSTY_Alpha
X1=0
Y1=0
X2=1024
Y2=768
RenderWeight=0.040000
Tag=0
End Object
i_bkChar=BackgroundImage'HideMut.HideMainMenu.ImgBkChar'
Begin Object Class=BackgroundImage Name=PageBackground
ImageStyle=ISTY_Scaled
ImageRenderStyle=MSTY_Alpha
X1=0
Y1=0
X2=1024
Y2=768
End Object
i_Background=BackgroundImage'HideMut.HideMainMenu.PageBackground'
Begin Object Class=GUIImage Name=ImgUT2Logo
End Object
i_UT2Logo=GUIImage'HideMut.HideMainMenu.ImgUT2Logo'
Begin Object Class=GUIImage Name=iPanHuge
End Object
i_PanHuge=GUIImage'HideMut.HideMainMenu.iPanHuge'
Begin Object Class=GUIImage Name=iPanBig
End Object
i_PanBig=GUIImage'HideMut.HideMainMenu.iPanBig'
Begin Object Class=GUIImage Name=iPanSmall
End Object
i_PanSmall=GUIImage'HideMut.HideMainMenu.iPanSmall'
Begin Object Class=GUIImage Name=ImgUT2Shader
End Object
i_UT2Shader=GUIImage'HideMut.HideMainMenu.ImgUT2Shader'
Begin Object Class=GUIImage Name=ImgTV
End Object
i_TV=GUIImage'HideMut.HideMainMenu.ImgTV'
Begin Object Class=GUIButton Name=MultiplayerButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Multiplayer"
StyleName="ListSelection"
Hint="All hell breaks loose..."
WinTop=0.290000
WinLeft=0.050000
WinWidth=0.200000
WinHeight=0.035000
TabOrder=1
bFocusOnWatch=True
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=MultiplayerButton.InternalOnKeyEvent
End Object
b_MultiPlayer=GUIButton'HideMut.HideMainMenu.MultiplayerButton'
Begin Object Class=GUIButton Name=HostButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Host Game"
StyleName="ListSelection"
Hint="Start a server and invite others to join your game"
WinTop=0.325000
WinLeft=0.050000
WinWidth=0.200000
WinHeight=0.035000
TabOrder=2
bFocusOnWatch=True
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=HostButton.InternalOnKeyEvent
End Object
b_Host=GUIButton'HideMut.HideMainMenu.HostButton'
Begin Object Class=GUIButton Name=InstantActionButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Solo"
StyleName="ListSelection"
Hint="Play Killing Floor Solo Mode"
WinTop=0.360000
WinLeft=0.050000
WinWidth=0.200000
TabOrder=3
bFocusOnWatch=True
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=InstantActionButton.InternalOnKeyEvent
End Object
b_InstantAction=GUIButton'HideMut.HideMainMenu.InstantActionButton'
Begin Object Class=GUIButton Name=ProfileButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Profile and Achievements"
StyleName="ListSelection"
Hint="Your profile and achievements"
WinTop=0.420000
WinLeft=0.050000
WinWidth=0.220000
TabOrder=4
bFocusOnWatch=True
OnDraw=HideMainMenu.CommunityDraw
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=ModsAndDemosButton.InternalOnKeyEvent
End Object
b_Profile=GUIButton'HideMut.HideMainMenu.ProfileButton'
Begin Object Class=GUIButton Name=JoinLHButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Join Local Host"
StyleName="ListSelection"
Hint="Joins local host server."
WinTop=0.455000
WinLeft=0.050000
WinWidth=0.220000
TabOrder=4
bFocusOnWatch=True
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=ModsAndDemosButton.InternalOnKeyEvent
End Object
b_JoinLH=GUIButton'HideMut.HideMainMenu.JoinLHButton'
Begin Object Class=GUIButton Name=WorkshopButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Steam Workshop Content"
StyleName="ListSelection"
Hint="Custom Content in the Steam Workshop"
WinTop=0.490000
WinLeft=0.050000
WinWidth=0.220000
TabOrder=4
bFocusOnWatch=True
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=ModsAndDemosButton.InternalOnKeyEvent
End Object
b_Workshop=GUIButton'HideMut.HideMainMenu.WorkshopButton'
Begin Object Class=GUIButton Name=SettingsButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Settings"
StyleName="ListSelection"
Hint="Change your controls and settings"
WinTop=0.550000
WinLeft=0.050000
WinWidth=0.200000
WinHeight=0.035000
TabOrder=6
bFocusOnWatch=True
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=SettingsButton.InternalOnKeyEvent
End Object
b_Settings=GUIButton'HideMut.HideMainMenu.SettingsButton'
Begin Object Class=GUIButton Name=QuitButton
CaptionAlign=TXTA_Left
CaptionEffectStyleName="TextButtonEffect"
Caption="Exit"
StyleName="ListSelection"
Hint="Leave this loose game"
WinTop=0.585000
WinLeft=0.050000
WinWidth=0.200000
WinHeight=0.035000
TabOrder=7
bFocusOnWatch=True
OnClick=HideMainMenu.ButtonClick
OnKeyEvent=QuitButton.InternalOnKeyEvent
End Object
b_Quit=GUIButton'HideMut.HideMainMenu.QuitButton'
MenuSong="KFMenu"
SteamMustBeRunningText="Steam must be running and you must have an active internet connection to access this"
UnknownSteamErrorText="Unknown Steam error prevented access to this"
PopInSound=Sound'PatchSounds.slide1-1'
SlideInSound=Sound'PatchSounds.slide1-1'
BeepSound=Sound'KFWeaponSound.bullethitmetal3'
bRenderWorld=True
bPersistent=True
OnOpen=HideMainMenu.InternalOnOpen
OnReOpen=HideMainMenu.MainReopened
OnCanClose=HideMainMenu.CanClose
WinTop=0.000000
WinHeight=1.000000
OnKeyEvent=HideMainMenu.MyKeyEvent
}