Code archives/User Input/Control Configuration Functions
This code has been declared by its author to be Public Domain code.
Download source code
| In these pages, and also in a lot of the games that are made with Blitz, control options seem vastly limited when com[ared to what's offered in the more 'mainstream' development areas. As I wanted to incorporate the use of Joypads and Joysticks into a project and allow for reconfiguration of the controls, it made sense to follow through with a completely comprehensive set of generic functions. Hope you all liek them, and they come in useful. There are likely areas where iut can be optimised and it's unfortunately rather cumbersome as it checks scancodes against references then back again all over the place. If anyone feels the desire or can optimise it, please feel free, although it should be fast enough for most situations, it MAY be a little of an unnecessary overhead for more intensive applications. |
; HERE ARE THE COMMANDS THAT CAN BE DEFINED IN-GAME. ; NOTE, THE USE OF AN ARRAY WHICH ALLOWS FOR ANALOGUE VALUES OR AXES ; AS WELL AS INDIIDUAL BUTTON STROKES ;THE ARRAY KEY_COMMANDS CAN BE WRITTEN TO A FILE OR BANK ETC. TO STORE/SAVE REDEFINED KEY DEFINITIONS. Const KEY_COMMANDSET_MAX=9 ; VERY IMPORTANT. THIS SHOULD REFLECT THE TOTAL NUMBER OF COMMANDS USED IN THE GAME, INCLUDING BUTTONS FOR "PAUSE GAME" etc. Dim KEY_COMMANDS(KEY_COMMANDSET_MAX,3) ;9 here must match the number of commands set below. The 3 represents the following KEY_ACTION_* Values following the commands below. Dim KEY_S_DESCRIPTION$(KEY_COMMANDSET_MAX) ; USEFUL FOR RECONFIGURATION AND USER-INTERACTION ;THESE ARE FOR EXAMPLE ONLY. YOU WILL NEED VALUES FOR EACH CONTROL IN THE GAME. ;FOR THIS EXAMPLE I USE SOME RUDIMENTATRY TYPICAL 'FIRST-PERSON SHOOTER' TYPE CONTROLS. NOTE THERE SHOULD BE ONE OF THESE FOR EACH ; COMMAND UP TO KEY_COMMANDSET_MAX Const KEY_COMMAND_FORWARD = 1 Const KEY_COMMAND_BACK = 2 Const KEY_COMMAND_LEFT = 3 Const KEY_COMMAND_RIGHT = 4 Const KEY_COMMAND_FIRE = 5 Const KEY_COMMAND_CROUCH = 6 Const KEY_COMMAND_JUMP = 7 Const KEY_COMMAND_LOOKHORIZ = 8 Const KEY_COMMAND_LOOKVERT = 9 ; NON ESSENTIAL, BUT MAYBE USEFUL KEY_S_DESCRIPTION$(KEY_COMMAND_FORWARD)="MOVE FORWARD" KEY_S_DESCRIPTION$(KEY_COMMAND_BACK)="MOVE BACKWARDS" KEY_S_DESCRIPTION$(KEY_COMMAND_LEFT)="SIDESTEP LEFT" KEY_S_DESCRIPTION$(KEY_COMMAND_RIGHT)="SIDESTEP RIGHT" KEY_S_DESCRIPTION$(KEY_COMMAND_FIRE)="PRIMARY WEAPON" KEY_S_DESCRIPTION$(KEY_COMMAND_CROUCH)="SNEAK" KEY_S_DESCRIPTION$(KEY_COMMAND_JUMP)="JUMP" KEY_S_DESCRIPTION$(KEY_COMMAND_LOOKHORIZ)="TURN AROUND" KEY_S_DESCRIPTION$(KEY_COMMAND_LOOKVERT)="LOOK UP & DOWN" ;THESE CONSTANTS JUST MAKE IT EASIER TO WORK WITH DIFFERENT INPUT TYPES. THIS SHOULD COVER ALL POSSIBLE METHODS OF INPUT Const KEY_TYPE_KEYBOARD_CLICK = 0 ; Key Depression Const KEY_TYPE_MOUSE_CLICK = 1 ; Mouse Button Const KEY_TYPE_CONTROLLER_CLICK = 2 ; Controller Button Const KEY_TYPE_MOUSE_AXIS_HORIZ = 3 ; Mouse Horizontal Const KEY_TYPE_CONTROLLER_AXIS_HORIZ = 4 ; Controller Axis Horizontal Const KEY_TYPE_MOUSE_AXIS_VERT = 5 ; Mouse Vertical Const KEY_TYPE_CONTROLLER_AXIS_VERT = 6 ; Controller Axis Vertical Const KEY_TYPE_MOUSEWHEEL_AXIS = 7 ; Mousewheel Scroll Const KEY_TYPE_CONTROLLER_AXIS2_HORIZ = 8 ; Controller Secondary Axis Horizontal Const KEY_TYPE_CONTROLLER_AXIS2_VERT = 9 ; Controller Secondary Axis Vertical Const KEY_TYPE_CONTROLLER_AXIS_THROTTLE = 10 ; Controller Axis Throttle Const KEY_TYPE_CONTROLLER_HAT_HORIZ = 11 ; Controller Hat X Const KEY_TYPE_CONTROLLER_HAT_VERT = 12 ; Controller Hat Y Const KEY_TYPE_CONTROLLER_ANALOGUE_PITCH = 13 ; Controller Pitch Const KEY_TYPE_CONTROLLER_ANALOGUE_YAW = 14 ; Controller Yaw Const KEY_TYPE_CONTROLLER_ANALOGUE_ROLL = 15 ; Controller Roll Const KEY_ACTION_TYPE = 1 Const KEY_ACTION_ANALOGUEVECTOR = 2 Const KEY_ACTION_SCANCODE = 3 ; Note - References to these values may be * -1 if INVERT AXIS is required for camera control etc. Note the *_BOTH option. Const KEY_ANALOGUE_POSITIVE = 1 Const KEY_ANALOGUE_NEGATIVE = -1 Const KEY_ANALOGUE_NONE = 0 Const KEY_ANALOGUE_BOTH = 2 ;EACH CONTOL COMMAND HAS 3 VALUES. ; 1 (KEY_ACTION_TYPE) - Defines Whether Control is a button press, an Analogue axis movement or a Mousewheel scroll etc. ; 2 (KEY_ACTION_ANALOGUEVECTOR) - If KEY_ACTION_TYPE is Analogue, This value represents whether the Command corresponds to + or - ; 3 (KEY_ACTION_SCANCODE) - If KEY_ACTION_TYPE is a Keyboard Button press, this represents the Keyboard Scancode. Otherwise, it is an arbitratry Scancode Value assigneed to controller options of 238 - 280 (See Below) ; DEFAULT CONTROLS ;Here are some example control methods defined with the values KEY_COMMANDS(KEY_COMMAND_FORWARD,KEY_ACTION_TYPE)=KEY_TYPE_KEYBOARD_CLICK ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_FORWARD,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_POSITIVE ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_FORWARD,KEY_ACTION_SCANCODE)=KEY_UPARROW ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_BACK,KEY_ACTION_TYPE)=KEY_TYPE_KEYBOARD_CLICK ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_BACK,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_NEGATIVE ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_BACK,KEY_ACTION_SCANCODE)=KEY_DOWNARROW ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_LEFT,KEY_ACTION_TYPE)=KEY_TYPE_KEYBOARD_CLICK ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_LEFT,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_NEGATIVE ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_LEFT,KEY_ACTION_SCANCODE)=KEY_LEFTARROW ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_RIGHT,KEY_ACTION_TYPE)=KEY_TYPE_KEYBOARD_CLICK ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_RIGHT,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_POSITIVE ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_RIGHT,KEY_ACTION_SCANCODE)=KEY_RIGHTARROW ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_FIRE,KEY_ACTION_TYPE)=KEY_TYPE_MOUSE_CLICK ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_FIRE,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_POSITIVE ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_FIRE,KEY_ACTION_SCANCODE)=KEY_MOUSE_LEFT ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_CROUCH,KEY_ACTION_TYPE)=KEY_TYPE_KEYBOARD_CLICK ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_CROUCH,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_POSITIVE ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_CROUCH,KEY_ACTION_SCANCODE)=KEY_RCTRL ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_JUMP,KEY_ACTION_TYPE)=KEY_TYPE_KEYBOARD_CLICK ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_JUMP,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_POSITIVE ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_JUMP,KEY_ACTION_SCANCODE)=KEY_SPACEBAR ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_LOOKHORIZ,KEY_ACTION_TYPE)=KEY_TYPE_MOUSE_AXIS_HORIZ ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_LOOKHORIZ,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_BOTH ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_LOOKHORIZ,KEY_ACTION_SCANCODE)=KEY_MOUSEX ;INPUT SCANCODE KEY_COMMANDS(KEY_COMMAND_LOOKVERT,KEY_ACTION_TYPE)=KEY_TYPE_MOUSE_AXIS_HORIZ ;INPUT TYPE KEY_COMMANDS(KEY_COMMAND_LOOKVERT,KEY_ACTION_ANALOGUEVECTOR)=KEY_ANALOGUE_BOTH ;IF ANALOGUE SET POSITIVE OR NEGATIVE KEY_COMMANDS(KEY_COMMAND_LOOKVERT,KEY_ACTION_SCANCODE)=KEY_MOUSEY ;INPUT SCANCODE ; SOME VALUES HAVE BEEN SUBSTITUTED IN FOR JOYSTICKS, GAMEPAD CONTROLLERS AND MOUSE FUNCTIONS TO ; USE THE SCANCODE VALUES OF 238 - 280 Const KEY_NONE=0 Const KEY_ESCAPE=1 Const KEY_1=2 Const KEY_2=3 Const KEY_3=4 Const KEY_4=5 Const KEY_5=6 Const KEY_6=7 Const KEY_7=8 Const KEY_8=9 Const KEY_9=10 Const KEY_0=11 Const KEY_MINUS=12 Const KEY_PLUS=13 Const KEY_BACKSPACE=14 Const KEY_TAB=15 Const KEY_Q=16 Const KEY_W=17 Const KEY_E=18 Const KEY_R=19 Const KEY_T=20 Const KEY_Y=21 Const KEY_U=22 Const KEY_I=23 Const KEY_O=24 Const KEY_P=25 Const KEY_LEFTBRACKET=26 Const KEY_RIGHTBRACKET=27 Const KEY_RETURN=28 Const KEY_LCTRL=29 Const KEY_A=30 Const KEY_S=31 Const KEY_D=32 Const KEY_F=33 Const KEY_G=34 Const KEY_H=35 Const KEY_J=36 Const KEY_K=37 Const KEY_L=38 Const KEY_SEMICOLON=39 Const KEY_APOSTROPHE=40 Const KEY_TILDE=41 Const KEY_LSHIFT=42 Const KEY_HASH=43 Const KEY_Z=44 Const KEY_X=45 Const KEY_C=46 Const KEY_V=47 Const KEY_B=48 Const KEY_N=49 Const KEY_M=50 Const KEY_COMMA=51 Const KEY_FULLSTOP=52 Const KEY_SLASH=53 Const KEY_RSHIFT=54 Const KEY_NUM_ASTERISK=55 Const KEY_LALT=56 Const KEY_SPACEBAR=57 Const KEY_CAPSLOCK=58 Const KEY_FUNC_1=59 Const KEY_FUNC_2=60 Const KEY_FUNC_3=61 Const KEY_FUNC_4=62 Const KEY_FUNC_5=63 Const KEY_FUNC_6=64 Const KEY_FUNC_7=65 Const KEY_FUNC_8=66 Const KEY_FUNC_9=67 Const KEY_FUNC_10=68 Const KEY_PAUSE=69 Const KEY_SCROLL_LOCK=70 Const KEY_NUM_7=71 Const KEY_NUM_8=72 Const KEY_NUM_9=73 Const KEY_NUM_MINUS=74 Const KEY_NUM_4=75 Const KEY_NUM_5=76 Const KEY_NUM_6=77 Const KEY_NUM_PLUS=78 Const KEY_NUM_1=79 Const KEY_NUM_2=80 Const KEY_NUM_3=81 Const KEY_NUM_0=82 Const KEY_NUM_DEL=83 Const KEY_BAR=86 Const KEY_F11=87 Const KEY_F12=88 Const KEY_F13=100 Const KEY_F14=101 Const KEY_F15=102 Const KEY_KANA=112 Const KEY_ABNT_C1=115 Const KEY_CONVERT=121 Const KEY_NOCONVERT=123 Const KEY_YEN=125 Const KEY_EQUALS=141 Const KEY_MEDIA_PTRACK=144 Const KEY_AT=145 Const KEY_COLON=146 Const KEY_UNDERLINE=147 Const KEY_KANJI=148 Const KEY_MEDIA_STOP=149 Const KEY_AX=150 Const KEY_UNLABELED=151 Const KEY_MEDIA_NTRACK=153 Const KEY_NUM_ENTER=156 Const KEY_RCTRL=157 Const KEY_MEDIA_MUTE=160 Const KEY_MEDIA_CALC=161 Const KEY_MEDIA_PLAYPAUSE=162 Const KEY_MEDIA_QUIT=164 Const KEY_MEDIA_VOLDOWN=174 Const KEY_MEDIA_VOLUP=176 Const KEY_WEB_HOME=178 Const KEY_NUM_COMMA=179 Const KEY_NUM_SLASH=181 Const KEY_PRNTSCRN=183 Const KEY_RALT=184 Const KEY_NUMLOCK=197 Const KEY_HOME=199 Const KEY_UPARROW=200 Const KEY_PG_UP=201 Const KEY_LEFTARROW=203 Const KEY_RIGHTARROW=205 Const KEY_END=207 Const KEY_DOWNARROW=208 Const KEY_PG_DOWN=209 Const KEY_INSERT=210 Const KEY_DELETE=211 Const KEY_LMICROSOFTWIN=219 Const KEY_RMICROSOFTWIN=220 Const KEY_CONTEXT_MENU=221 Const KEY_POWER=222 Const KEY_SLEEP=223 Const KEY_WAKE=227 Const KEY_WEB_SRCH=229 Const KEY_WEB_FAVS=230 Const KEY_WEB_REFRESH=231 Const KEY_WEB_STOP=232 Const KEY_WEB_FWD=233 Const KEY_WEB_BCK=234 Const KEY_MYCOMP=235 Const KEY_MAIL=236 Const KEY_MEDIA=237 Const KEY_MOUSE_LEFT=238 Const KEY_MOUSE_RIGHT=239 Const KEY_MOUSE_MIDDLE=240 Const KEY_MOUSE_4=241 Const KEY_MOUSE_5=242 Const KEY_MOUSE_6=243 Const KEY_MOUSE_7=244 Const KEY_CONTROLLER_1=245 Const KEY_CONTROLLER_2=246 Const KEY_CONTROLLER_3=247 Const KEY_CONTROLLER_4=248 Const KEY_CONTROLLER_5=249 Const KEY_CONTROLLER_6=250 Const KEY_CONTROLLER_7=251 Const KEY_CONTROLLER_8=252 Const KEY_CONTROLLER_9=253 Const KEY_CONTROLLER_10=254 Const KEY_CONTROLLER_11=255 Const KEY_CONTROLLER_12=256 Const KEY_CONTROLLER_13=257 Const KEY_CONTROLLER_14=258 Const KEY_CONTROLLER_15=259 Const KEY_CONTROLLER_16=260 Const KEY_CONTROLLER_17=261 Const KEY_CONTROLLER_18=262 Const KEY_CONTROLLER_19=263 Const KEY_CONTROLLER_20=264 Const KEY_MOUSE_X=265 Const KEY_MOUSE_Y=266 Const KEY_MOUSEWHEEL=267 Const KEY_CONTROLLER_X=268 Const KEY_CONTROLLER_Y=269 Const KEY_CONTROLLER_THROTTLE=270 Const KEY_CONTROLLER_HAT=271 Const KEY_CONTROLLER_A=272 Const KEY_CONTROLLER_B=273 Const KEY_CONTROLLER_C=274 Const KEY_CONTROLLER_D=275 Const KEY_CONTROLLER_X2=276 Const KEY_CONTROLLER_Y2=277 Const KEY_CONTROLLER_PITCH=278 Const KEY_CONTROLLER_YAW=279 Const KEY_CONTROLLER_ROLL=280 ;For the MOUSESPEED functions Global KEY_MOUSEXSPEED_OLD=MouseXSpeed() Global KEY_MOUSEYSPEED_OLD=MouseYSpeed() Function KEY_S_FRIENDLY_NAME$(KEY_SCANCODE) If KEY_SCANCODE<238 Select KEY_SCANCODE Case 0 Return "" Case 1 Return"ESCAPE" Case 2 Return"1" Case 3 Return"2" Case 4 Return"3" Case 5 Return"4" Case 6 Return"5" Case 7 Return"6" Case 8 Return"7" Case 9 Return"8" Case 10 Return"9" Case 11 Return"0" Case 12 Return"MINUS" Case 13 Return"PLUS" Case 14 Return"BACKSPACE" Case 15 Return"TAB" Case 16 Return"Q" Case 17 Return"W" Case 18 Return"E" Case 19 Return"R" Case 20 Return"T" Case 21 Return"Y" Case 22 Return"U" Case 23 Return"I" Case 24 Return"O" Case 25 Return"P" Case 26 Return"LEFTBRACKET" Case 27 Return"RIGHTBRACKET" Case 28 Return"RETURN" Case 29 Return"LCTRL" Case 30 Return"A" Case 31 Return"S" Case 32 Return"D" Case 33 Return"F" Case 34 Return"G" Case 35 Return"H" Case 36 Return"J" Case 37 Return"K" Case 38 Return"L" Case 39 Return"SEMICOLON" Case 40 Return"APOSTROPHE" Case 41 Return"TILDE" Case 42 Return"LSHIFT" Case 43 Return"HASH" Case 44 Return"Z" Case 45 Return"X" Case 46 Return"C" Case 47 Return"V" Case 48 Return"B" Case 49 Return"N" Case 50 Return"M" Case 51 Return"COMMA" Case 52 Return"FULLSTOP" Case 53 Return"SLASH" Case 54 Return"RSHIFT" Case 55 Return"NUM ASTERISK" Case 56 Return"LALT" Case 57 Return"SPACEBAR" Case 58 Return"CAPSLOCK" Case 59 Return"FUNC 1" Case 60 Return"FUNC 2" Case 61 Return"FUNC 3" Case 62 Return"FUNC 4" Case 63 Return"FUNC 5" Case 64 Return"FUNC 6" Case 65 Return"FUNC 7" Case 66 Return"FUNC 8" Case 67 Return"FUNC 9" Case 68 Return"FUNC 10" Case 69 Return"PAUSE" Case 70 Return"SCROLL LOCK" Case 71 Return"NUM 7" Case 72 Return"NUM 8" Case 73 Return"NUM 9" Case 74 Return"NUM MINUS" Case 75 Return"NUM 4" Case 76 Return"NUM 5" Case 77 Return"NUM 6" Case 78 Return"NUM PLUS" Case 79 Return"NUM 1" Case 80 Return"NUM 2" Case 81 Return"NUM 3" Case 82 Return"NUM 0" Case 83 Return"NUM DEL" Case 86 Return"BAR" Case 87 Return"F11" Case 88 Return"F12" ;Case 100 Return"F13" ;Case 101 Return"F14" ;Case 102 Return"F15" ;Case 112 Return"KANA" ;Case 115 Return"ABNT C1" ;Case 121 Return"CONVERT" ;Case 123 Return"NOCONVERT" ;Case 125 Return"YEN" ;Case 126 Return"NUM DEL" Used if Separate Decimal /Delete on NumPad Case 128 Return"MISC MEDIA CONTROL" ;Case 141 Return"EQUALS" ;Case 144 Return"MEDIA PTRACK" ;Case 145 Return"AT" ;Case 146 Return"COLON" ;Case 147 Return"UNDERLINE" ;Case 148 Return"KANJI" ;Case 149 Return"MEDIA STOP" ;Case 150 Return"AX" ;Case 151 Return"UNLABELED" ;Case 153 Return"MEDIA NTRACK" Case 156 Return"NUM ENTER" Case 157 Return"RCTRL" ;Case 160 Return"MEDIA MUTE" ;Case 161 Return"MEDIA CALC" ;Case 162 Return"MEDIA PLAYPAUSE" ;Case 164 Return"MEDIA QUIT" ;Case 174 Return"MEDIA VOLDOWN" ;Case 176 Return"MEDIA VOLUP" ;Case 178 Return"WEB HOME" ;Case 179 Return"NUM COMMA" Case 181 Return"NUM SLASH" ;Case 183 Return"PRNTSCRN" Case 184 Return"RALT" ; 184 returns 29 also. Case 197 Return"NUMLOCK" Case 199 Return"HOME" Case 200 Return"UPARROW" Case 201 Return"PG UP" Case 203 Return"LEFTARROW" Case 205 Return"RIGHTARROW" Case 207 Return"END" Case 208 Return"DOWNARROW" Case 209 Return"PG DOWN" Case 210 Return"INSERT" Case 211 Return"DELETE" Case 219 Return"LMICROSOFTWIN" Case 220 Return"RMICROSOFTWIN" Case 221 Return"CONTEXT MENU" ;Case 222 Return"POWER" ;Case 223 Return"SLEEP" ;Case 227 Return"WAKE" ;Case 229 Return"WEB SRCH" ;Case 230 Return"WEB FAVS" ;Case 231 Return"WEB REFRESH" ;Case 232 Return"WEB STOP" ;Case 233 Return"WEB FWD" ;Case 234 Return"WEB BCK" ;Case 235 Return"MYCOMP" ;Case 236 Return"MAIL" ;Case 237 Return"MEDIA" End Select End If Select KEY_SCANCODE Case 238 Return "LEFT MOUSE" Case 239 Return "RIGHT MOUSE" Case 240 Return "MIDDLE MOUSE" Case 241 Return "MOUSE 4" Case 242 Return "MOUSE 5" Case 243 Return "MOUSE 6" Case 244 Return "MOUSE 7" Case 245 Return "CONTROLLER 1" Case 246 Return "CONTROLLER 2" Case 247 Return "CONTROLLER 3" Case 248 Return "CONTROLLER 4" Case 249 Return "CONTROLLER 5" Case 250 Return "CONTROLLER 6" Case 251 Return "CONTROLLER 7" Case 252 Return "CONTROLLER 8" Case 253 Return "CONTROLLER 9" Case 254 Return "CONTROLLER 10" Case 255 Return "CONTROLLER 11" Case 256 Return "CONTROLLER 12" Case 257 Return "CONTROLLER 13" Case 258 Return "CONTROLLER 14" Case 259 Return "CONTROLLER 15" Case 260 Return "CONTROLLER 16" Case 261 Return "CONTROLLER 17" Case 262 Return "CONTROLLER 18" Case 263 Return "CONTROLLER 19" Case 264 Return "CONTROLLER 20" Case 265 Return "MOUSE X" Case 266 Return "MOUSE Y" Case 267 Return "MOUSEWHEEL" Case 268 Return "CONTROLLER X" Case 269 Return "CONTROLLER Y" Case 270 Return "CONTROLLER Z" Case 271 Return "CONTROLLER ^" ;; Use this ^ for ANALOGUE Case 272 Return "CONTROLLER ^1" ;; THE FOUR FOR DIGITAL Case 273 Return "CONTROLLER ^2" ;; ----------------------- Case 274 Return "CONTROLLER ^3" ;;------------------------ Case 275 Return "CONTROLLER ^4" Case 276 Return "CONTROLLER X2" Case 277 Return "CONTROLLER Y2" Case 278 Return "CONTROLLER PITCH" Case 279 Return "CONTROLLER YAW" Case 280 Return "CONTROLLER ROLL" Default Return "INVALID KEY" End Select End Function ;****************************************************************************************************************** ;****************************************************************************************************************** Function KEY_GETCOMMAND_BY_SCANCODE(KEY_CHECK_SCANCODE) KEY_RETURN_COMMAND=0 For KEY_ITER_COMMANDS=1 To KEY_COMMANDSET_MAX If KEY_COMMANDS(KEY_ITER_COMMANDS,KEY_ACTION_SCANCODE)=KEY_CHECK_SCANCODE KEY_RETURN_COMMAND=KEY_ITER_COMMANDS Exit EndIf Next Return KEY_RETURN_COMMAND End Function Function KEY_GETSCANCODE_BY_COMMAND(KEY_CHECK_COMMMAND) KEY_RETURN_SCANCODE=KEY_COMMANDS(KEY_CHECK_COMMAND,KEY_ACTION_SCANCODE) Return KEY_RETURN_SCANCODE End Function Function KEY_GETTYPE_BY_COMMAND(KEY_CHECK_COMMAND) KEY_RETURN_TYPE=KEY_COMMANDS(KEY_CHECK_COMMAND,KEY_ACTION_TYPE) Return KEY_RETURN_TYPE End Function Function KEY_GETVECTOR_BY_COMMAND(KEY_CHECK_COMMAND) KEY_RETURN_VECTOR=KEY_COMMANDS(KEY_CHECK_COMMAND,KEY_ACTION_ANALOGUEVECTOR) Return KEY_RETURN_VECTOR End Function Function KEY_GET_SCANCODE_OF_INPUT() KEY_RETURN_SCANCODE=0 For KEY_ITER_KEYBOARD=1 To 237 If KEY_GET_SCANCODE_KEYBOARD_INPUT(KEY_ITER_KEYBOARD) KEY_RETURN_SCANCODE=KEY_ITER_KEYBOARD Exit End If Next If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE For KEY_ITER_MOUSE=238 To 244 If KEY_GET_SCANCODE_MOUSE_INPUT(KEY_ITER_MOUSE) KEY_RETURN_SCANCODE=KEY_ITER_MOUSE Exit End If Next If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE For KEY_ITER_CONTROLLER=245 To 264 If KEY_GET_SCANCODE_CONTROLLER_INPUT(KEY_ITER_CONTROLLER) KEY_RETURN_SCANCODE=KEY_ITER_CONTROLLER Exit End If Next If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If Abs(KEY_GET_MOUSEX_INPUT())>0 Then KEY_RETURN_SCANCODE=KEY_MOUSE_X If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If Abs(KEY_GET_MOUSEY_INPUT())>0 Then KEY_RETURN_SCANCODE=KEY_MOUSE_Y If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If KEY_GET_MOUSEWHEEL_INPUT()<>0 Then KEY_RETURN_SCANCODE=KEY_MOUSEWHEEL If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If Abs(KEY_GET_CONTROLLERX_INPUT())<>0 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_X If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If Abs(KEY_GET_CONTROLLERY_INPUT())<>0 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_Y If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If Abs(KEY_GET_CONTROLLER_THROTTLE_INPUT())<>0 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_THROTTLE If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If Abs(KEY_GET_CONTROLLERX2_INPUT())<>0 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_X2 If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If Abs(KEY_GET_CONTROLLERY2_INPUT())<>0 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_Y3 If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE ; DIGITAL HAT CONTROL FOR 4 DIRECTIONS - ANALOGUE 'SCANCODE' 271 NOT USED If KEY_GET_CONTROLLER_HATX_INPUT()=1 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_B If KEY_GET_CONTROLLER_HATX_INPUT()=-1 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_D If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE If KEY_GET_CONTROLLER_HATY_INPUT()=1 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_A If KEY_GET_CONTROLLER_HATY_INPUT()=-1 Then KEY_RETURN_SCANCODE=KEY_CONTROLLER_C If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE KEY_RETURN_SCANCODE=Abs(KEY_CONTROLLER_PITCH*KEY_GET_CONTROLLER_PITCH_INPUT()) If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE KEY_RETURN_SCANCODE=Abs(KEY_CONTROLLER_YAW*KEY_GET_CONTROLLER_YAW_INPUT()) If KEY_RETURN_SCANCODE<>0 Then Return KEY_RETURN_SCANCODE KEY_RETURN_SCANCODE=Abs(KEY_CONTROLLER_YAW*KEY_GET_CONTROLLER_ROLL_INPUT()) Return KEY_RETURN_SCANCODE End Function Function KEY_GETCOMMAND_INPUT(KEY_CHECK_COMMAND) If KEY_CHECK_COMMAND=0 Return False End If KEY_RETURN_VERIFY=False KEY_THIS_TYPE=KEY_GETTYPE_BY_COMMAND(KEY_CHECK_COMMAND) KEY_THIS_VECTOR=KEY_GETVECTOR_BY_COMMAND(KEY_CHECK_COMMAND) KEY_THIS_SCANCODE=KEY_GETSCANCODE_BY_COMMAND(KEY_CHECK_COMMAND) Select KEY_THIS_TYPE Case KEY_TYPE_KEYBOARD_CLICK KEY_RETURN_VERIFY=KEY_GET_SCANCODE_KEYBOARD_INPUT(KEY_THIS_SCANCODE) Case KEY_TYPE_MOUSE_CLICK KEY_RETURN_VERIFY=KEY_GET_SCANCODE_MOUSE_INPUT(KEY_THIS_SCANCODE) Case KEY_TYPE_CONTROLLER_CLICK KEY_RETURN_VERIFY=KEY_GET_SCANCODE_CONTROLLER_INPUT(KEY_THIS_SCANCODE) Case KEY_TYPE_MOUSE_AXIS_HORIZ KEY_MOUSEX_RETURN=KEY_GET_MOUSEX_INPUT() KEY_MOUSEXSPEED_OLD=MouseXSpeed() If KEY_MOUSEX_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_MOUSEX_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_AXIS_HORIZ KEY_CONTROLLERX_RETURN=KEY_GET_CONTROLLERX_INPUT() If KEY_CONTROLLERX_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLERX_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_MOUSE_AXIS_VERT KEY_MOUSEY_RETURN=KEY_GET_MOUSEY_INPUT() KEY_MOUSEYSPEED_OLD=MouseYSpeed() If KEY_MOUSEY_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_MOUSEY_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_AXIS_VERT KEY_CONTROLLERY_RETURN=KEY_GET_CONTROLLERY_INPUT() If KEY_CONTROLLERY_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLERY_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_MOUSEWHEEL_AXIS KEY_MOUSEWHEEL_RETURN=KEY_GET_MOUSEWHEEL_INPUT() If KEY_MOUSEWHEEL_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_MOUSEWHEEL_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_AXIS2_HORIZ KEY_CONTROLLERX2_RETURN=KEY_GET_CONTROLLERX2_INPUT() If KEY_CONTROLLERX2_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLERX2_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_AXIS2_VERT KEY_CONTROLLERY2_RETURN=KEY_GET_CONTROLLERY2_INPUT() If KEY_CONTROLLERY2_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLERY2_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_AXIS_THROTTLE KEY_CONTROLLER_THROTTLE_RETURN=KEY_GET_CONTROLLER_THROTTLE_INPUT() If KEY_CONTROLLER_THROTTLE_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLER_THROTTLE_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_HAT_HORIZ KEY_CONTROLLER_HATX_RETURN=KEY_GET_CONTROLLER_HATX_INPUT() If KEY_CONTROLLER_HATX_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 Or KEY_THIS_VECTOR=0 If KEY_CONTROLLER_HATX_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_HAT_VERT KEY_CONTROLLER_HATY_RETURN=KEY_GET_CONTROLLER_HATY_INPUT() If KEY_CONTROLLER_HATY_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 Or KEY_THIS_VECTOR=0 If KEY_CONTROLLER_HATY_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_ANALOGUE_PITCH KEY_CONTROLLER_PITCH_RETURN=KEY_GET_CONTROLLER_PITCH_INPUT() If KEY_CONTROLLER_PITCH_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLER_PITCH_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_ANALOGUE_YAW KEY_CONTROLLER_YAW_RETURN=KEY_GET_CONTROLLER_YAW_INPUT() If KEY_CONTROLLER_YAW_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLER_YAW_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Case KEY_TYPE_CONTROLLER_ANALOGUE_ROLL KEY_CONTROLLER_ROLL_RETURN=KEY_GET_CONTROLLER_ROLL_INPUT() If KEY_CONTROLLER_ROLL_RETURN=KEY_THIS_VECTOR Or KEY_THIS_VECTOR=2 If KEY_CONTROLLER_ROLL_RETURN<>0 KEY_RETURN_VERIFY=True EndIf End If Default ; NO CONTROL METHOD? End Select Return KEY_RETURN_VERIFY End Function Function KEY_GET_SCANCODE_KEYBOARD_INPUT(KEY_THIS_SCANCODE) KEY_RETURN_VERIFY=False If (KeyHit(KEY_THIS_SCANCODE)>0 Or KeyDown(KEY_THIS_SCANCODE)) KEY_RETURN_VERIFY=True End If Return KEY_RETURN_VERIFY End Function Function KEY_GET_SCANCODE_MOUSE_INPUT(KEY_THIS_SCANCODE) KEY_RETURN_VERIFY=False KEY_THIS_SCANCODE=KEY_THIS_SCANCODE-237 If (MouseHit(KEY_THIS_SCANCODE)>0 Or MouseDown(KEY_THIS_SCANCODE)) KEY_RETURN_VERIFY=True End If Return KEY_RETURN_VERIFY End Function Function KEY_GET_SCANCODE_CONTROLLER_INPUT(KEY_THIS_SCANCODE) KEY_RETURN_VERIFY=False KEY_THIS_SCANCODE=KEY_THIS_SCANCODE-244 If (JoyHit(KEY_THIS_SCANCODE)>0 Or JoyDown(KEY_THIS_SCANCODE)) KEY_RETURN_VERIFY=True End If Return KEY_RETURN_VERIFY End Function Function KEY_GET_MOUSEX_INPUT() KEY_RETURN_VECTOR=0 KEY_RETURN_VECTOR=Sgn(MouseXSpeed()-KEY_MOUSEXSPEED_OLD) KEY_MOUSEXSPEED_OLD=MouseXSpeed() Return KEY_RETURN_VECTOR End Function Function KEY_GET_MOUSEY_INPUT() KEY_RETURN_VECTOR=0 KEY_RETURN_VECTOR=Sgn(MouseYSpeed()-KEY_MOUSEYSPEED_OLD) KEY_MOUSEXYSPEED_OLD=MouseYSpeed() Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLERX_INPUT() KEY_RETURN_VECTOR=0 ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyX#())<0.1 Then Return 0 KEY_RETURN_VECTOR=Sgn(JoyX#()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLERY_INPUT() ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyY#())<0.1 Then Return 0 KEY_RETURN_VECTOR=0 KEY_RETURN_VECTOR=Sgn(JoyY#()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_MOUSEWHEEL_INPUT() KEY_RETURN_VECTOR=0 KEY_RETURN_VECTOR=Sgn(MouseZSpeed()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLERX2_INPUT() ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyU#())<0.1 Then Return 0 KEY_RETURN_VECTOR=0 KEY_RETURN_VECTOR=Sgn(JoyU#()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLERY2_INPUT() ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyV#())<0.1 Then Return 0 KEY_RETURN_VECTOR=0 KEY_RETURN_VECTOR=Sgn(JoyV#()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLER_THROTTLE_INPUT() ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyZ#())<0.1 Then Return 0 KEY_RETURN_VECTOR=0 KEY_RETURN_VECTOR=Sgn(JoyZ#()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLER_HATX_INPUT() KEY_RETURN_VECTOR=JoyHat() If KEY_RETURN_VECTOR>44 And KEY_RETURN_VECTOR<136 Return 1 Else If KEY_RETURN_VECTOR>224 And KEY_RETURN_VECTOR<316 Return -1 Else Return 0 End If End Function Function KEY_GET_CONTROLLER_HATY_INPUT() KEY_RETURN_VECTOR=JoyHat() If KEY_RETURN_VECTOR>314 Or KEY_RETURN_VECTOR<46 And KEY_RETURN_VECTOR<>-1 Return 1 Else If KEY_RETURN_VECTOR>134 And KEY_RETURN_VECTOR<226 Return -1 Else Return 0 End If End Function Function KEY_GET_CONTROLLER_PITCH_INPUT() ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyPitch#())<0.1 Then Return 0 KEY_RETURN_VECTOR=Sgn(JoyPitch#()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLER_YAW_INPUT() ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyYaw#())<0.1 Then Return 0 KEY_RETURN_VECTOR=Sgn(JoyYaw#()) Return KEY_RETURN_VECTOR End Function Function KEY_GET_CONTROLLER_ROLL_INPUT() ; DO SOME FIXING FOR POOR CALIBRATION If Abs(JoyRoll#())<0.1 Then Return 0 KEY_RETURN_VECTOR=Sgn(JoyRoll#()) Return KEY_RETURN_VECTOR End Function |