[bb] Control Configuration Functions by _PJ_ [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:41

Previous topic - Next topic

BlitzBot

Title : Control Configuration Functions
Author : _PJ_
Posted : 1+ years ago

Description : 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.


Code :
Code (blitzbasic) Select
; 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


Comments :


Stevie G(Posted 1+ years ago)

 You sure that's written in Blitz - looks more like COBOL ;) I'm sure this would be handy for alot of people so how about some example code?Just an observation but you're missing alot of analogue commands such as pitch / roll / hat etc.. and what about joyhit, mousehit and keyhit?


plash(Posted 1+ years ago)

 Aye.. you've gone a bit rogue with this - hardly looks like *basic* and the function names are ridiculously long.


_PJ_(Posted 1+ years ago)

 .


plash(Posted 1+ years ago)

 The comments, and everything else, in CAPS LOCK doesn't help much either..


_PJ_(Posted 1+ years ago)

 Are HAT switches used a lot?I have no experience of them so they are not considered for now.JoyHit() etc. exists as JoyDown() There are flush commands in there which would negate the use of JoyHit/MouseHit etc.I will try and see how I can slot them in somewhere if necessary though.


_PJ_(Posted 1+ years ago)

 <div class="quote"> (Posted 3 minutes ago)  The comments, and everything else, in CAPS LOCK doesn't help much either  </div>Sorry, this is a habit from other prgramming techniques where function names and constants are clearer marked as capitals.If it's easier, why not just copy & paste into a WP and format to 'proper'  case :)


plash(Posted 1+ years ago)

 I only use Max now, so this code is of no use to me; I just thought I would give some friendly advice :)


Stevie G(Posted 1+ years ago)

 You need joyhat to make use of the right stick on an xbox360  controller if I remember.


_PJ_(Posted 1+ years ago)

 alrighty, bear with me Im re-working a lot of it and will incorporate the missing controls.


_PJ_(Posted 1+ years ago)

 Example code:
Graphics 1024,768,2

;This is the line to include the Controller functions library.
Include "g_inc_input.bb"

While Not KeyDown(1)
SCANCODE=KEY_GET_SCANCODE_OF_INPUT()

If SCANCODE<>0

COMMAND=KEY_GETCOMMAND_BY_SCANCODE(SCANCODE)

DISPLAY$="NOT A COMMAND"

If (COMMAND>0 And COMMAND<KEY_COMMANDSET_MAX)
DISPLAY$=KEY_S_DESCRIPTION$(COMMAND)
End If

Print "CONTROL: "+KEY_S_FRIENDLY_NAME$(SCANCODE)+" ("+DISPLAY$+")"

End If

FlushMouse
FlushKeys
FlushJoy

Wend



hockings(Posted 1+ years ago)

 Any update with the missing controls?


_PJ_(Posted 1+ years ago)

 Ive run into a few issues at the mo. Hopefully though, I'll get something posted within the next two weeks or so. (Sorry for the delay, I dont have so much time for Blitz these days)


Nexinarus(Posted 1+ years ago)

 in my opinion, its not bad, but wouldnt it be easier to load a CFG file or something to go with it?


Rick Nasher(Posted 1+ years ago)

 Missing the mousewheel.. ;-) [/i]