Core.Object | +--Engine.Actor | +--Engine.Menu | +--UnrealShare.UnrealMenu | +--UnrealShare.UnrealLongMenu | +--UnrealShare.UnrealKeyboardMenu
string
AliasNames[24]
MenuValues1[24]
MenuValues2[24]
OrString
int
Pending
PendingCommands[30]
bool
bSetUp
void
AddPending(string newCommand)
DrawMenu(Canvas Canvas)
DrawValues(Canvas Canvas, Font RegFont, int Spacing, int StartX, int StartY)
ProcessMenuEscape()
ProcessMenuKey(int KeyNo, string KeyName)
ProcessMenuUpdate(string InputString)
ProcessPending()
ProcessSelection()
SaveConfigs()
SetUpMenu()
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 }