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

359 lines
9.4 KiB
Ucode

//=============================================================================
// Quick Perk Select Menu for the trader
//=============================================================================
// Killing Floor Source
// Copyright (C) 2009 Tripwire Interactive LLC
// Christian "schneidzekk" Schneider
//=============================================================================
class KFQuickPerkSelect extends GUIMultiComponent;
var texture CurPerkBack;
var automated GUIImage PerkBack0;
var automated GUIImage PerkBack1;
var automated GUIImage PerkBack2;
var automated GUIImage PerkBack3;
var automated GUIImage PerkBack4;
var automated GUIImage PerkBack5;
var automated KFIndexedGUIImage PerkSelectIcon0;
var automated KFIndexedGUIImage PerkSelectIcon1;
var automated KFIndexedGUIImage PerkSelectIcon2;
var automated KFIndexedGUIImage PerkSelectIcon3;
var automated KFIndexedGUIImage PerkSelectIcon4;
var automated KFIndexedGUIImage PerkSelectIcon5;
var KFIndexedGUIImage PerkSelectIcons[6];
var int MaxPerks;
var int CurPerk;
var bool bPerkChange;
var float CurX;
var float CurY;
var float BoxSizeX;
var float BoxSizeY;
var float SpacerX;
var float SpacerY;
var KFSteamStatsAndAchievements KFStatsAndAchievements;
var bool bResized;
event InitComponent(GUIController MyController, GUIComponent MyOwner)
{
Super.InitComponent(MyController, MyOwner);
if ( PlayerOwner() != none )
{
KFStatsAndAchievements = KFSteamStatsAndAchievements(PlayerOwner().SteamStatsAndAchievements);
if ( KFStatsAndAchievements != none )
{
CheckPerks(KFStatsAndAchievements);
}
}
}
event Closed(GUIComponent Sender, bool bCancelled)
{
KFStatsAndAchievements = none;
super.Closed(Sender, bCancelled);
}
event ResolutionChanged( int ResX, int ResY )
{
super.ResolutionChanged(ResX, ResY);
bResized = false;
}
function bool MyOnDraw(Canvas C)
{
local int i, j;
super.OnDraw(C);
C.SetDrawColor(255, 255, 255, 255);
// make em square
if ( !bResized )
{
ResizeIcons(C);
}
// Current perk background
C.SetPos(WinLeft * C.ClipX , WinTop * C.ClipY);
C.DrawTileScaled(CurPerkBack, (WinHeight * C.ClipY) / CurPerkBack.USize, (WinHeight * C.ClipY) / CurPerkBack.USize);
// check if the current perk has changed recently
CheckPerks(KFStatsAndAchievements);
j = 0;
// Draw the available perks
for ( i = 0; i < MaxPerks; i++ )
{
if ( i != CurPerk )
{
PerkSelectIcons[j].Image = class'KFGameType'.default.LoadedSkills[i].default.OnHUDIcon;
PerkSelectIcons[j].Index = i;
if ( KFPlayerController(PlayerOwner()).bChangedVeterancyThisWave )
{
PerkSelectIcons[j].ImageColor.A = 64;
}
else
{
PerkSelectIcons[j].ImageColor.A = 255;
}
j++;
}
}
// Draw current perk
DrawCurrentPerk(C, CurPerk);
return false;
}
function bool InternalOnClick(GUIComponent Sender)
{
local PlayerController PC;
// Grab the Player Controller for later use
PC = PlayerOwner();
if ( Sender.IsA('KFIndexedGUIImage') && !KFPlayerController(PC).bChangedVeterancyThisWave )
{
if ( KFPlayerController(PC) != none )
{
class'KFPlayerController'.default.SelectedVeterancy = class'KFGameType'.default.LoadedSkills[KFIndexedGUIImage(Sender).Index];
KFPlayerController(PC).SetSelectedVeterancy( class'KFGameType'.default.LoadedSkills[KFIndexedGUIImage(Sender).Index] );
KFPlayerController(PC).SendSelectedVeterancyToServer();
PC.SaveConfig();
}
else
{
class'KFPlayerController'.default.SelectedVeterancy = class'KFGameType'.default.LoadedSkills[KFIndexedGUIImage(Sender).Index];
class'KFPlayerController'.static.StaticSaveConfig();
}
bPerkChange = true;
}
return false;
}
function DrawCurrentPerk(Canvas C, Int PerkIndex)
{
C.SetPos(WinLeft * C.ClipX , WinTop * C.ClipY);
C.DrawTileScaled(class'KFGameType'.default.LoadedSkills[PerkIndex].default.OnHUDIcon, (WinHeight * C.ClipY) / class'KFGameType'.default.LoadedSkills[PerkIndex].default.OnHUDIcon.USize, (WinHeight * C.ClipY) / class'KFGameType'.default.LoadedSkills[PerkIndex].default.OnHUDIcon.USize);
}
function ResizeIcons(Canvas C)
{
PerkBack0.WinWidth = (C.ClipY / C.ClipX) * BoxSizeX;
PerkBack1.WinWidth = (C.ClipY / C.ClipX) * BoxSizeX;
PerkBack2.WinWidth = (C.ClipY / C.ClipX) * BoxSizeX;
PerkBack3.WinWidth = (C.ClipY / C.ClipX) * BoxSizeX;
PerkBack4.WinWidth = (C.ClipY / C.ClipX) * BoxSizeX;
PerkBack5.WinWidth = (C.ClipY / C.ClipX) * BoxSizeX;
PerkSelectIcon0.WinWidth = (C.ClipY / C.ClipX) * BoxSizeY;
PerkSelectIcons[0] = PerkSelectIcon0;
PerkSelectIcon1.WinWidth = (C.ClipY / C.ClipX) * BoxSizeY;
PerkSelectIcons[1] = PerkSelectIcon1;
PerkSelectIcon2.WinWidth = (C.ClipY / C.ClipX) * BoxSizeY;
PerkSelectIcons[2] = PerkSelectIcon2;
PerkSelectIcon3.WinWidth = (C.ClipY / C.ClipX) * BoxSizeY;
PerkSelectIcons[3] = PerkSelectIcon3;
PerkSelectIcon4.WinWidth = (C.ClipY / C.ClipX) * BoxSizeY;
PerkSelectIcons[4] = PerkSelectIcon4;
PerkSelectIcon5.WinWidth = (C.ClipY / C.ClipX) * BoxSizeY;
PerkSelectIcons[5] = PerkSelectIcon5;
bResized = true;
}
function CheckPerks(KFSteamStatsAndAchievements StatsAndAchievements)
{
local int i;
local KFPlayerController KFPC;
// Grab the Player Controller for later use
KFPC = KFPlayerController(PlayerOwner());
// Hold onto our reference
KFStatsAndAchievements = StatsAndAchievements;
// Update the ItemCount and select the first item
MaxPerks = class'KFGameType'.default.LoadedSkills.Length;
//SetIndex(0);
for ( i = 0; i < MaxPerks; i++ )
{
if ( (KFPC != none && class'KFGameType'.default.LoadedSkills[i] == KFPC.SelectedVeterancy) ||
(KFPC == none && class'KFGameType'.default.LoadedSkills[i] == class'KFPlayerController'.default.SelectedVeterancy) )
{
CurPerk = i;
}
}
bPerkChange = false;
}
defaultproperties
{
OnDraw=MyOnDraw
BoxSizeX=0.04
BoxSizeY=0.04
SpacerX=0.001
SpacerY=0.004
MaxPerks=6
CurPerkBack=Texture'KF_InterfaceArt_tex.Menu.Perk_box'
Begin Object class=GUIImage Name=PB0
WinWidth=0.04
WinHeight=0.04
WinLeft=0.09
WinTop=0.0294
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.5
End Object
PerkBack0=PB0
Begin Object class=GUIImage Name=PB1
WinWidth=0.04
WinHeight=0.04
WinLeft=0.125
WinTop=0.0294
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.5
End Object
PerkBack1=PB1
Begin Object class=GUIImage Name=PB2
WinWidth=0.04
WinHeight=0.04
WinLeft=0.160
WinTop=0.0294
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.5
End Object
PerkBack2=PB2
Begin Object class=GUIImage Name=PB3
WinWidth=0.04
WinHeight=0.04
WinLeft=0.195
WinTop=0.0294
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.5
End Object
PerkBack3=PB3
Begin Object class=GUIImage Name=PB4
WinWidth=0.04
WinHeight=0.04
WinLeft=0.23
WinTop=0.0294
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.5
End Object
PerkBack4=PB4
Begin Object class=GUIImage Name=PB5
WinWidth=0.04
WinHeight=0.04
WinLeft=0.265
WinTop=0.0294
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.5
End Object
PerkBack5=PB5
Begin Object class=KFIndexedGUIImage Name=PSI0
WinWidth=0.040
WinHeight=0.040
WinLeft=0.090
WinTop=0.0314
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.6
OnClick=InternalOnClick
End Object
PerkSelectIcon0=PSI0
Begin Object class=KFIndexedGUIImage Name=PSI1
WinWidth=0.040
WinHeight=0.040
WinLeft=0.125
WinTop=0.0314
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.6
OnClick=InternalOnClick
End Object
PerkSelectIcon1=PSI1
Begin Object class=KFIndexedGUIImage Name=PSI2
WinWidth=0.040
WinHeight=0.040
WinLeft=0.160
WinTop=0.0314
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.6
OnClick=InternalOnClick
End Object
PerkSelectIcon2=PSI2
Begin Object class=KFIndexedGUIImage Name=PSI3
WinWidth=0.040
WinHeight=0.040
WinLeft=0.195
WinTop=0.0314
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.6
OnClick=InternalOnClick
End Object
PerkSelectIcon3=PSI3
Begin Object class=KFIndexedGUIImage Name=PSI4
WinWidth=0.040
WinHeight=0.040
WinLeft=0.230
WinTop=0.0314
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.6
OnClick=InternalOnClick
End Object
PerkSelectIcon4=PSI4
Begin Object class=KFIndexedGUIImage Name=PSI5
WinWidth=0.040
WinHeight=0.040
WinLeft=0.265
WinTop=0.0314
Image=Texture'KF_InterfaceArt_tex.Menu.Perk_box_unselected'
ImageStyle=ISTY_Scaled
Renderweight=0.6
OnClick=InternalOnClick
End Object
PerkSelectIcon5=PSI5
}