2020-01-10 13:14:11 +00:00
|
|
|
// Same as SwitchComponent, but with buttons.
|
|
|
|
Class KFGUI_SwitchMenuBar extends KFGUI_MultiComponent;
|
|
|
|
|
2021-06-12 20:11:37 +00:00
|
|
|
`include(Build.uci)
|
|
|
|
`include(Logger.uci)
|
|
|
|
|
2021-06-13 03:17:40 +00:00
|
|
|
var array<KFGUI_Base> SubPages;
|
2020-01-10 13:14:11 +00:00
|
|
|
var() byte ButtonPosition; // 0 = top, 1 = bottom, 2 = left, 3 = right
|
2021-06-13 02:54:35 +00:00
|
|
|
var() float BorderWidth, ButtonAxisSize; // Width for buttons.
|
2020-01-10 13:14:11 +00:00
|
|
|
var() float PagePadding; // Padding for pages
|
|
|
|
|
2021-06-13 02:54:35 +00:00
|
|
|
var int NumButtons, CurrentPageNum, PageComponentIndex;
|
2021-06-13 03:17:40 +00:00
|
|
|
var array<KFGUI_Button> PageButtons;
|
2020-01-10 13:14:11 +00:00
|
|
|
|
|
|
|
function ShowMenu()
|
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
GrabKeyFocus();
|
|
|
|
Super.ShowMenu();
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function CloseMenu()
|
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
ReleaseKeyFocus();
|
|
|
|
Super.CloseMenu();
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Remember to call InitMenu() on the newly created page after.
|
2021-06-13 07:29:12 +00:00
|
|
|
final function KFGUI_Base AddPage(class<KFGUI_Base> PageClass, string Caption, string Hint, optional out KFGUI_Button Button)
|
2020-01-10 13:14:11 +00:00
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
local KFGUI_Base P;
|
|
|
|
local KFGUI_Button B;
|
|
|
|
|
|
|
|
// Add page.
|
|
|
|
P = new (Self) PageClass;
|
|
|
|
P.Owner = Owner;
|
|
|
|
P.ParentComponent = Self;
|
|
|
|
SubPages.AddItem(P);
|
|
|
|
|
|
|
|
// Add page switch button.
|
|
|
|
B = new (Self) class'KFGUI_Button';
|
|
|
|
B.ButtonText = Caption;
|
|
|
|
B.ToolTip = Hint;
|
|
|
|
B.OnClickLeft = PageSwitched;
|
|
|
|
B.OnClickRight = PageSwitched;
|
|
|
|
B.IDValue = NumButtons;
|
|
|
|
|
2021-06-13 02:53:33 +00:00
|
|
|
if (ButtonPosition < 2)
|
2021-05-16 09:40:02 +00:00
|
|
|
{
|
|
|
|
B.XPosition = NumButtons*ButtonAxisSize;
|
|
|
|
B.XSize = ButtonAxisSize*0.99;
|
|
|
|
|
2021-06-13 02:53:33 +00:00
|
|
|
if (ButtonPosition == 0)
|
2021-05-16 09:40:02 +00:00
|
|
|
B.YPosition = 0.f;
|
|
|
|
else B.YPosition = YSize-BorderWidth*0.99;
|
|
|
|
B.YSize = BorderWidth*0.99;
|
|
|
|
|
2021-06-13 02:53:33 +00:00
|
|
|
if (NumButtons > 0)
|
2021-05-16 09:40:02 +00:00
|
|
|
PageButtons[PageButtons.Length-1].ExtravDir = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-06-13 02:53:33 +00:00
|
|
|
if (ButtonPosition == 2)
|
2021-05-16 09:40:02 +00:00
|
|
|
B.XPosition = 0.f;
|
|
|
|
else B.XPosition = XSize-BorderWidth*0.99;
|
|
|
|
B.XSize = BorderWidth*0.99;
|
|
|
|
|
|
|
|
B.YPosition = NumButtons*ButtonAxisSize;
|
|
|
|
B.YSize = ButtonAxisSize*0.99;
|
2021-06-13 02:53:33 +00:00
|
|
|
if (NumButtons > 0)
|
2021-05-16 09:40:02 +00:00
|
|
|
PageButtons[PageButtons.Length-1].ExtravDir = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
++NumButtons;
|
|
|
|
PageButtons.AddItem(B);
|
|
|
|
AddComponent(B);
|
|
|
|
Button = B;
|
|
|
|
return P;
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|
|
|
|
|
2021-06-13 03:00:19 +00:00
|
|
|
function PageSwitched(KFGUI_Button Sender)
|
2020-01-10 13:14:11 +00:00
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
SelectPage(Sender.IDValue);
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|
|
|
|
|
2021-06-13 03:00:19 +00:00
|
|
|
final function SelectPage(int Index)
|
2020-01-10 13:14:11 +00:00
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
PlayMenuSound(MN_LostFocus);
|
|
|
|
|
2021-06-13 02:53:33 +00:00
|
|
|
if (CurrentPageNum >= 0)
|
2021-05-16 09:40:02 +00:00
|
|
|
{
|
|
|
|
PageButtons[CurrentPageNum].bIsHighlighted = false;
|
|
|
|
SubPages[CurrentPageNum].CloseMenu();
|
2021-06-13 02:54:35 +00:00
|
|
|
Components.Remove(PageComponentIndex, 1);
|
2021-05-16 09:40:02 +00:00
|
|
|
PageComponentIndex = -1;
|
|
|
|
}
|
2021-06-13 02:53:33 +00:00
|
|
|
CurrentPageNum = (Index >= 0 && Index < SubPages.Length) ? Index : -1;
|
|
|
|
if (CurrentPageNum >= 0)
|
2021-05-16 09:40:02 +00:00
|
|
|
{
|
|
|
|
PageButtons[CurrentPageNum].bIsHighlighted = true;
|
|
|
|
SubPages[CurrentPageNum].ShowMenu();
|
|
|
|
PageComponentIndex = Components.Length;
|
|
|
|
Components.AddItem(SubPages[CurrentPageNum]);
|
|
|
|
}
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function PreDraw()
|
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
local int i;
|
|
|
|
local byte j;
|
|
|
|
|
2021-06-13 02:53:33 +00:00
|
|
|
if (!bVisible)
|
2021-05-16 09:40:02 +00:00
|
|
|
return;
|
|
|
|
|
2021-06-13 02:53:33 +00:00
|
|
|
if (CurrentPageNum == -1 && NumButtons > 0)
|
2021-05-16 09:40:02 +00:00
|
|
|
SelectPage(0);
|
|
|
|
ComputeCoords();
|
2021-06-13 02:54:35 +00:00
|
|
|
Canvas.SetOrigin(CompPos[0], CompPos[1]);
|
|
|
|
Canvas.SetClip(CompPos[0]+CompPos[2], CompPos[1]+CompPos[3]);
|
2021-05-16 09:40:02 +00:00
|
|
|
DrawMenu();
|
2021-06-13 02:53:33 +00:00
|
|
|
for (i=0; i < Components.Length; ++i)
|
2021-05-16 09:40:02 +00:00
|
|
|
{
|
|
|
|
Components[i].Canvas = Canvas;
|
2021-06-13 02:53:33 +00:00
|
|
|
for (j=0; j < 4; ++j)
|
2021-05-16 09:40:02 +00:00
|
|
|
Components[i].InputPos[j] = CompPos[j];
|
2021-06-13 02:53:33 +00:00
|
|
|
if (i == PageComponentIndex)
|
2021-05-16 09:40:02 +00:00
|
|
|
{
|
2021-06-13 03:00:19 +00:00
|
|
|
switch(ButtonPosition)
|
2021-05-16 09:40:02 +00:00
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
Components[i].InputPos[1] += (InputPos[3]*BorderWidth*PagePadding);
|
|
|
|
case 1:
|
|
|
|
Components[i].InputPos[3] -= (InputPos[3]*BorderWidth*PagePadding);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
Components[i].InputPos[0] += (InputPos[2]*BorderWidth*PagePadding);
|
|
|
|
default:
|
|
|
|
Components[i].InputPos[2] -= (InputPos[2]*BorderWidth*PagePadding);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Components[i].PreDraw();
|
|
|
|
}
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function bool ReceievedControllerInput(int ControllerId, name Key, EInputEvent Event)
|
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
switch(Key)
|
|
|
|
{
|
|
|
|
case 'XboxTypeS_LeftShoulder':
|
2021-06-13 02:53:33 +00:00
|
|
|
if (Event == IE_Pressed)
|
2021-05-16 09:40:02 +00:00
|
|
|
SelectPage(Clamp(CurrentPageNum - 1, 0, NumButtons));
|
|
|
|
return true;
|
|
|
|
case 'XboxTypeS_RightShoulder':
|
2021-06-13 02:53:33 +00:00
|
|
|
if (Event == IE_Pressed)
|
2021-05-16 09:40:02 +00:00
|
|
|
SelectPage(Clamp(CurrentPageNum + 1, 0, NumButtons));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
defaultproperties
|
|
|
|
{
|
2021-05-16 09:40:02 +00:00
|
|
|
PagePadding=1.0
|
|
|
|
BorderWidth=0.05
|
|
|
|
ButtonAxisSize=0.08
|
|
|
|
CurrentPageNum=-1
|
|
|
|
PageComponentIndex=-1
|
2020-01-10 13:14:11 +00:00
|
|
|
}
|