UnrealShare
Class UnrealKeyboardMenu

source: e:\games\UnrealTournament\UnrealShare\Classes\UnrealKeyboardMenu.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Menu
         |
         +--UnrealShare.UnrealMenu
            |
            +--UnrealShare.UnrealLongMenu
               |
               +--UnrealShare.UnrealKeyboardMenu
Direct Known Subclasses:None

class UnrealKeyboardMenu
extends UnrealShare.UnrealLongMenu

//============================================================================= // UnrealKeyboardMenu //=============================================================================
Variables
 string AliasNames[24]
 string MenuValues1[24]
 string MenuValues2[24]
 string OrString
 int Pending
 string PendingCommands[30]
 bool bSetUp


Function Summary
 void AddPending(string newCommand)
 void DrawMenu(Canvas Canvas)
 void DrawValues(Canvas Canvas, Font RegFont, int Spacing, int StartX, int StartY)
 void ProcessMenuEscape()
 void ProcessMenuKey(int KeyNo, string KeyName)
 void ProcessMenuUpdate(string InputString)
 void ProcessPending()
 bool ProcessSelection()
 void SaveConfigs()
 void SetUpMenu()



Source Code


00001	//=============================================================================
00002	// UnrealKeyboardMenu
00003	//=============================================================================
00004	class UnrealKeyboardMenu extends UnrealLongMenu;
00005	
00006	var string MenuValues1[24];
00007	var string MenuValues2[24];
00008	var string AliasNames[24];
00009	var string PendingCommands[30];
00010	var int Pending;
00011	var localized string OrString;
00012	var bool bSetUp;
00013	
00014	function SaveConfigs()
00015	{
00016		ProcessPending();
00017	}
00018	
00019	function ProcessPending()
00020	{
00021		local int i;
00022	
00023		for ( i=0; i<Pending; i++ )
00024			PlayerOwner.ConsoleCommand(PendingCommands[i]);
00025			
00026		Pending = 0;
00027	}
00028	
00029	function AddPending( string newCommand )
00030	{
00031		PendingCommands[Pending] = newCommand;
00032		Pending++;
00033		if ( Pending == 30 )
00034			ProcessPending();
00035	}
00036		
00037	function SetUpMenu()
00038	{
00039		local int i, j, pos;
00040		local string KeyName;
00041		local string Alias;
00042	
00043		bSetup = true;
00044	
00045		for ( i=0; i<255; i++ )
00046		{
00047			KeyName = PlayerOwner.ConsoleCommand( "KEYNAME "$i );
00048			if ( KeyName != "" )
00049			{	
00050				Alias = PlayerOwner.ConsoleCommand( "KEYBINDING "$KeyName );
00051				if ( Alias != "" )
00052				{
00053					pos = InStr(Alias, " " );
00054					if ( pos != -1 )
00055						Alias = Left(Alias, pos);
00056					for ( j=1; j<20; j++ )
00057					{
00058						if ( AliasNames[j] == Alias )
00059						{
00060							if ( MenuValues1[j] == "" )
00061								MenuValues1[j] = KeyName;
00062							else if ( MenuValues2[j] == "" )
00063								MenuValues2[j] = KeyName;
00064						}
00065					}
00066				}
00067			}
00068		}
00069	}
00070	
00071	function ProcessMenuKey( int KeyNo, string KeyName )
00072	{
00073		local int i;
00074	
00075		if ( (KeyName == "") || (KeyName == "Escape")  
00076			|| ((KeyNo >= 0x70 ) && (KeyNo <= 0x79)) ) //function keys
00077			return;
00078	
00079		// make sure no overlapping
00080		for ( i=1; i<20; i++ )
00081		{
00082			if ( MenuValues2[i] == KeyName )
00083				MenuValues2[i] = "";
00084			if ( MenuValues1[i] == KeyName )
00085			{
00086				MenuValues1[i] = MenuValues2[i];
00087				MenuValues2[i] = "";
00088			}
00089		}
00090		if ( MenuValues1[Selection] != "_" )
00091			MenuValues2[Selection] = MenuValues1[Selection];
00092		else if ( MenuValues2[Selection] == "_" )
00093			MenuValues2[Selection] = "";
00094	
00095		MenuValues1[Selection] = KeyName;
00096		AddPending("SET Input"@KeyName@AliasNames[Selection]);
00097	}
00098	
00099	function ProcessMenuEscape();
00100	function ProcessMenuUpdate( coerce string InputString );
00101	
00102	function bool ProcessSelection()
00103	{
00104		local int i;
00105	
00106		if ( Selection == MenuLength )
00107		{
00108			Pending = 0;
00109			PlayerOwner.ResetKeyboard();
00110			for ( i=0; i<24; i++ )
00111			{
00112				MenuValues1[i] = "";
00113				MenuValues2[i] = "";
00114			}
00115			SetupMenu();
00116			return true;
00117		}
00118		if ( MenuValues2[Selection] != "" )
00119		{
00120			AddPending( "SET Input"@MenuValues2[Selection]$" ");
00121			AddPending( "SET Input"@MenuValues1[Selection]$" ");
00122			MenuValues1[Selection] = "_";
00123			MenuValues2[Selection] = "";
00124		}
00125		else
00126			MenuValues2[Selection] = "_";
00127			
00128		PlayerOwner.Player.Console.GotoState('KeyMenuing');
00129		return true;
00130	}
00131	
00132	function DrawValues(canvas Canvas, Font RegFont, int Spacing, int StartX, int StartY)
00133	{
00134		local int i;
00135	
00136		Canvas.Font = RegFont;
00137	
00138		for (i=0; i< MenuLength; i++ )
00139			if ( MenuValues1[i+1] != "" )
00140			{
00141				SetFontBrightness( Canvas, (i == Selection - 1) );
00142				Canvas.SetPos(StartX, StartY + Spacing * i);
00143				if ( MenuValues2[i+1] == "" )
00144					Canvas.DrawText(MenuValues1[i + 1], false);
00145				else
00146					Canvas.DrawText(MenuValues1[i + 1]$OrString$MenuValues2[i+1], false);
00147			}
00148			Canvas.DrawColor = Canvas.Default.DrawColor;
00149	}
00150	
00151	function DrawMenu(canvas Canvas)
00152	{
00153		local int StartX, StartY, Spacing;
00154		
00155		DrawBackGround(Canvas, (Canvas.ClipY < 250));
00156	
00157		Spacing = Clamp(0.04 * Canvas.ClipY, 9, 32);
00158		StartX = Max(8, 0.5 * Canvas.ClipX - 120);
00159	
00160		if ( Canvas.ClipY > 280 )
00161		{	
00162			DrawTitle(Canvas);
00163			StartY = Max(36, 0.5 * (Canvas.ClipY - MenuLength * Spacing - 128));
00164		}
00165		else
00166			StartY = Max(4, 0.5 * (Canvas.ClipY - MenuLength * Spacing - 128));
00167	
00168		if ( !bSetup )
00169			SetupMenu();
00170	
00171		DrawList(Canvas, false, Spacing, StartX, StartY); 
00172		DrawValues(Canvas, Canvas.MedFont, Spacing, StartX+112, StartY);
00173	
00174	}
00175	
00176	defaultproperties
00177	{
00178	     AliasNames(1)="Fire"
00179	     AliasNames(2)="AltFire"
00180	     AliasNames(3)="MoveForward"
00181	     AliasNames(4)="MoveBackward"
00182	     AliasNames(5)="TurnLeft"
00183	     AliasNames(6)="TurnRight"
00184	     AliasNames(7)="StrafeLeft"
00185	     AliasNames(8)="StrafeRight"
00186	     AliasNames(9)="Jump"
00187	     AliasNames(10)="Duck"
00188	     AliasNames(11)="Look"
00189	     AliasNames(12)="InventoryActivate"
00190	     AliasNames(13)="InventoryNext"
00191	     AliasNames(14)="InventoryPrevious"
00192	     AliasNames(15)="LookUp"
00193	     AliasNames(16)="LookDown"
00194	     AliasNames(17)="CenterView"
00195	     AliasNames(18)="Walking"
00196	     AliasNames(19)="Strafe"
00197	     AliasNames(20)="NextWeapon"
00198	     OrString=" or "
00199	     MenuLength=21
00200	     HelpMessage(1)=""
00201	     MenuList(1)="Fire"
00202	     MenuList(2)="Alternate Fire"
00203	     MenuList(3)="Move Forward"
00204	     MenuList(4)="Move Backward"
00205	     MenuList(5)="Turn Left"
00206	     MenuList(6)="Turn Right"
00207	     MenuList(7)="Strafe Left"
00208	     MenuList(8)="Strafe Right"
00209	     MenuList(9)="Jump/Up"
00210	     MenuList(10)="Crouch/Down"
00211	     MenuList(11)="Mouse Look"
00212	     MenuList(12)="Activate Item"
00213	     MenuList(13)="Next Item"
00214	     MenuList(14)="Previous Item"
00215	     MenuList(15)="Look Up"
00216	     MenuList(16)="Look Down"
00217	     MenuList(17)="Center View"
00218	     MenuList(18)="Walk"
00219	     MenuList(19)="Strafe"
00220	     MenuList(20)="Next Weapon"
00221	     MenuList(21)="RESET TO DEFAULTS"
00222	     MenuTitle="CONTROLS"
00223	}

End Source Code