Gah - a solution with more questions. – EntropicLqd

Legacy:RegularEngine/RegularVKBTrader

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

The VKBTrader allows players to define their own versatile key binds. I put VKBs into Unreal XL because I wanted people to be able to have layer of commands that wouldn't conflict with other mods and mutators.

Basically, it goes through the VKB interaction to determine the current bind, displays them and then has the ability to input a new one.

UT2004 :: UT2K4GUIPage >> RegularVKBTrader
class RegularVKBTrader extends UT2K4GUIPage
      config(RegularEngineData);
 
var Array<string> Keys;
var Array<string> Binds;
var Array<string> Descriptions;
 
var Automated GUIListBox 		vkbAvailable;
var Automated GUIScrollTextBox	txtAvailable;
 
var Automated GUIButton btnAvailChange,btnAvailAccept,btnAvailCancel;
 
 
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
	Super.InitComponent(MyController, MyOwner);
	FillBindList();
	txtAvailable.SetContent(vkbAvailable.List.GetExtra());
}
 
 
function FillBindList() {
    local int x,i;
 
    vkbAvailable.List.Clear();
 
    for (i = 0; i < PlayerOwner().Player.LocalInteractions.Length; i++)
    {
    	if (  RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]) != None )
    	{
    		for ( x = 0; x<RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Keys.Length; x++ ) {
    		Keys[x]=RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Keys[x];
    		Binds[x]=RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Binds[x];
    		Descriptions[x]=RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Descriptions[x];
 
            }
    	}
    }
 
    for (i = 0; i < Keys.Length; i++)
    {
     vkbAvailable.List.Add(Binds[i]$"["$Keys[i]$"]",,Descriptions[i]);
    }
 
 
}
 
function PreviewBinds() {
 local int i;
 
 vkbAvailable.List.Clear();
 for (i = 0; i < Keys.Length; i++)
 {
 vkbAvailable.List.Add(Binds[i]$"["$Keys[i]$"]",,Descriptions[i]);
 }
 
}
 
 
function AcceptBinds() {
   local int x,i;
 
 
    for (i = 0; i < PlayerOwner().Player.LocalInteractions.Length; i++)
    {
    	if (  RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]) != None )
    	{
    		for ( x = 0; x<RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Keys.Length; x++ ) {
    		RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Keys[x]=Keys[x];
    		RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Binds[x]=Binds[x];
    		RegularVersatileKeyBind(PlayerOwner().Player.LocalInteractions[i]).Descriptions[x]=Descriptions[x];
    		PlayerOwner().Player.LocalInteractions[i].SaveConfig();
            }
    	}
    }
}
 
function bool InternalOnClick(GUIComponent Sender)
{
 if(Sender==btnAvailAccept) // continue
	{
		AcceptBinds();
  Controller.CloseMenu(); // Close _all_ menus
	}
 
 if(Sender==btnAvailCancel) // continue
	{
		Controller.CloseMenu(); // Close _all_ menus
	}
 
	return true;
}
 
function InternalOnChange(GUIComponent sender) {
		 txtAvailable.SetContent(vkbAvailable.List.GetExtra());
 
}
 
function bool KeyClick(GUIComponent Sender)
{
   if(Sender==btnAvailChange) // continue
	{
	    btnAvailChange.Caption="PRESS NEW KEY";
        Controller.OnNeedRawKeyPress = RawKeyPress;
	    Controller.Master.bRequireRawJoystick = True;
	    PlayerOwner().ConsoleCommand("toggleime 0");
 
	    return true;
	}
 
	return false;
}
 
function bool RawKeyPress(byte NewKey)
{
	local string NewKeyName, LocalizedKeyName;
 
    btnAvailChange.Caption="Change";
    Controller.OnNeedRawKeyPress = None;
    Controller.Master.bRequireRawJoystick = False;
    PlayerOwner().ConsoleCommand("toggleime 1");
 
	if ( NewKey == 0x1B )
	{
		return true;
	}
 
	Controller.KeyNameFromIndex( NewKey, NewKeyName, LocalizedKeyName );
    Keys[vkbAvailable.List.Index]=NewKeyName;
	PlayerOwner().ClientPlaySound(Controller.ClickSound);
    PreviewBinds();
    return true;
}
 
 
defaultproperties {
 
 
Begin Object Class=GUIListBox Name=AvailLST
    bVisibleWhenEmpty=True
    WinTop=0.1000000
    WinLeft=0.200000
    WinWidth=0.250000
    WinHeight=0.45000
    StyleName="IRCText"
    RenderWeight=1.5
    OnChange=InternalOnChange
End Object
vkbAvailable=RegularEngine.RegularVKBTrader.AvailLST
 
 
 Begin Object Class=GUIScrollTextBox Name=AvailTXT
//    bNoTeletype=True
    bVisibleWhenEmpty=True
    CharDelay=0.001500
    EOLDelay=0.250000
    InitialDelay=0.001500
    bRepeat=false
    WinTop=0.1000000
    WinLeft=0.450000
    WinWidth=0.400000
    WinHeight=0.45000
    StyleName="IRCText"
    RenderWeight=1.5
End Object
txtAvailable=RegularEngine.RegularVKBTrader.AvailTXT
 
Begin Object Class=GUIButton Name=AvailChangeBTN
  Caption="CHANGE"
  WinTop=0.5500000
  WinLeft=0.200000
  WinWidth=0.650000
  RenderWeight=1.5
  OnClick=RegularVKBTrader.KeyClick
End Object
btnAvailChange=RegularEngine.RegularVKBTrader.AvailChangeBTN
 
Begin Object Class=GUIButton Name=AvailAcceptBTN
  Caption="ACCEPT"
  WinTop=0.6000000
  WinLeft=0.200000
  WinWidth=0.550000
  RenderWeight=1.5
  OnClick=RegularVKBTrader.InternalOnClick
End Object
btnAvailAccept=RegularEngine.RegularVKBTrader.AvailAcceptBTN
 
Begin Object Class=GUIButton Name=AvailCancelBTN
  Caption="CANCEL"
  WinTop=0.6000000
  WinLeft=0.750000
  WinWidth=0.10000
  OnClick=RegularVKBTrader.InternalOnClick
  RenderWeight=1.5
End Object
btnAvailCancel=RegularEngine.RegularVKBTrader.AvailCancelBTN
 
 
bAllowedAsLast=True
bRenderWorld=True
}