[bb] Human Input Library by Dabbede [ 1+ years ago ]

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

Previous topic - Next topic

BlitzBot

Title : Human Input Library
Author : Dabbede
Posted : 1+ years ago

Description : It's simple and messy but take a look anyway because I think it could be useful! Please report me any grammar error... Thanks!

Code :
Code (blitzbasic) Select
;;===============================;;
;;===============================;;
;; ;;
;; Human Input Library ;;
;; ;;
;; by Dabbede ;;
;; ;;
;;         ;;
;; 10/07/2004 v. 1.0 ;;
;; ;;
;;===============================;;
;;===============================;;
;; ;;
;; The easiest way to handle ;;
;; player's inputs like ;;
;; keyboard, joypad or mouse ;;
;; ;;
;;===============================;;
;;===============================;;


Type HIL_Key ; Any input type
Field Typ ; 0=none 1=keyb 2=joy 3=mouse
Field Value ; Keyboard:
; Value = scancode
; Joystick:
; Value(>0)  = button#
; Value(-1)  = x-axis +
; Value(-2)  = x-axis -
; Value(-3)  = y-axis +
; Value(-4)  = y-axis -
; Value(-5)  = z-axis +
; Value(-6)  = z-axis -
; Value(-7)  = u-axis +
; Value(-8)  = u-axis -
; Value(-9)  = v-axis +
; Value(-10) = v-axis -
; Value(-11) = pitch  +
; Value(-12) = pitch  -
; Value(-13) = yaw    +
; Value(-14) = yaw    -
; Value(-15) = roll   +
; Value(-16) = roll   -
; Mouse:
; Value=button#
End Type

Dim HIL_scancodes$(238) ; Array with keyboard scancodes
Global HIL_SpecialJoystick = False ;True if you want to use JoyZUVPitchYawRoll
Const HIL_MaxJoyButtons = 30


; Initialization ==================
Restore HIL_Scancodes
For i=1 To 237
Read  HIL_scancodes$(i)
Next









; Little example ==================
Print "Choose the key to exit"
quit.HIL_Key=HIL_NewKey()
HIL_FlushAnyKeys()
Cls
Locate 0,0
Print "Press some keys..."
temp.HIL_Key=HIL_NewKey()
While (temp yp<>quit yp) Or (tempvalue<>quitvalue)
Print HIL_KeyLabel(temp)+" is the wrong key... retry!"
HIL_ModifyKey(temp)
Wend
Print "Ok!"
Cls
HIL_TestJoy()
End











Function HIL_AnyKeyHit()
quit=False

;Keyboard
For i=1 To 237
If KeyHit(i) Then quit=1
Next

;Joystick
For i=1 To HIL_MaxJoyButtons
If JoyHit(i) Then quit=2
Next
If (JoyXDir() Or JoyYDir()) Then quit=2
If HIL_SpecialJoystick And (JoyZDir() Or JoyUDir() Or JoyVDir() Or Int(JoyPitch()/180) Or Int(JoyYaw()/180) Or Int(JoyRoll()/180)) Then quit=2

;Mouse
For i=1 To 3
If MouseHit(i) Then quit=3
Next

Return quit
End Function

Function HIL_AnyKeyDown() ; Not very useful
quit=False

;Keyboard
For i=1 To 237
If KeyDown(i) Then quit=1
Next

;Joystick
For i=1 To HIL_MaxJoyButtons
If JoyDown(i) Then quit=2
Next
If (JoyXDir() Or JoyYDir()) Then quit=2
If HIL_SpecialJoystick And (JoyZDir() Or JoyUDir() Or JoyVDir() Or Int(JoyPitch()/180) Or Int(JoyYaw()/180) Or Int(JoyRoll()/180)) Then quit=2

;Mouse
For i=1 To 3
If MouseDown(i) Then quit=3
Next

Return quit
End Function

Function HIL_GetValue(typ)
Select typ
Case 1
For i=1 To 237
If KeyDown(i) Then Return i
Next
Case 2
For i=1 To HIL_MaxJoyButtons
If JoyDown(i) Then Return i
Next
If JoyXDir()=+1 Return -1
If JoyXDir()=-1 Return -2
If JoyYDir()=+1 Return -3
If JoyYDir()=-1 Return -4
If HIL_SpecialJoystick Then
If JoyZDir()=+1 Return -5
If JoyZDir()=-1 Return -6
If JoyUDir()=+1 Return -7
If JoyUDir()=-1 Return -8
If JoyVDir()=+1 Return -9
If JoyVDir()=-1 Return -10
If Int(JoyPitch()/180)=+1 Return -11
If Int(JoyPitch()/180)=-1 Return -12
If Int(JoyYaw()  /180)=+1 Return -13
If Int(JoyYaw()  /180)=-1 Return -14
If Int(JoyRoll() /180)=+1 Return -15
If Int(JoyRoll() /180)=-1 Return -16
EndIf
Case 3
For i=1 To 3
If MouseDown(i) Then Return i
Next
Default
Return 0
End Select
End Function

Function HIL_NewKey.HIL_Key()
key.HIL_Key = New HIL_Key

Repeat
t = HIL_AnyKeyHit()
Until t

keyTyp = t
keyvalue = HIL_GetValue(t)

Return key
End Function

Function HIL_ModifyKey.HIL_Key(key.HIL_Key)
If key=Null Then
key = New HIL_Key
EndIf

Repeat
t = HIL_AnyKeyHit()
Until t

keyTyp = t
keyvalue = HIL_GetValue(t)
End Function

Function HIL_KeyDown(key.HIL_Key)
If key=Null Return False

Select keyTyp
Case 1
If KeyDown(keyValue) Return True

Case 2
Select keyValue
Case 0
Return False
Case -1
If JoyXDir()=+1 Return True
Case -2
If JoyXDir()=-1 Return True
Case -3
If JoyYDir()=+1 Return True
Case -4
If JoyYDir()=-1 Return True
Case -5
If JoyZDir()=+1 Return True
Case -6
If JoyZDir()=-1 Return True
Case -7
If JoyUDir()=+1 Return True
Case -8
If JoyUDir()=-1 Return True
Case -9
If JoyVDir()=+1 Return True
Case -10
If JoyVDir()=-1 Return True
Case -11
If Int(JoyPitch()/180)=+1 Return True
Case -12
If Int(JoyPitch()/180)=-1 Return True
Case -13
If Int(JoyYaw()  /180)=+1 Return True
Case -14
If Int(JoyYaw()  /180)=-1 Return True
Case -15
If Int(JoyRoll() /180)=+1 Return True
Case -16
If Int(JoyRoll() /180)=-1 Return True
Default
If JoyDown(keyValue) Return True
End Select

Case 3
If MouseDown(keyValue) Return True
End Select

Return False
End Function

Function HIL_KeyHit(key.HIL_Key)
If key=Null Return False

Select keyTyp
Case 1
If KeyHit(keyValue) Return True

Case 2
Select keyValue
Case 0
Return False
Case -1
If JoyXDir()=+1 Return True
Case -2
If JoyXDir()=-1 Return True
Case -3
If JoyYDir()=+1 Return True
Case -4
If JoyYDir()=-1 Return True
Case -5
If JoyZDir()=+1 Return True
Case -6
If JoyZDir()=-1 Return True
Case -7
If JoyUDir()=+1 Return True
Case -8
If JoyUDir()=-1 Return True
Case -9
If JoyVDir()=+1 Return True
Case -10
If JoyVDir()=-1 Return True
Case -11
If Int(JoyPitch()/180)=+1 Return True
Case -12
If Int(JoyPitch()/180)=-1 Return True
Case -13
If Int(JoyYaw()  /180)=+1 Return True
Case -14
If Int(JoyYaw()  /180)=-1 Return True
Case -15
If Int(JoyRoll() /180)=+1 Return True
Case -16
If Int(JoyRoll() /180)=-1 Return True
Default
If JoyHit(keyValue) Return True
End Select

Case 3
If MouseHit(keyValue) Return True
End Select

Return False
End Function

Function HIL_WaitAnyKey()
While Not HIL_AnyKeyHit()
Wend
End Function

Function HIL_FlushAnyKeys()
FlushKeys
FlushMouse
FlushJoy
End Function

Function HIL_KeyLabel$(key.HIL_Key)
If key=Null Return ""

Select key yp
Case 1
Return HIL_scancodes$(keyvalue)
Case 2
Select keyvalue
Case 0
Return "Joystick button"
Case -1
Return "Joystick x-axis (+)"
Case -2
Return "Joystick x-axis (-)"
Case -3
Return "Joystick y-axis (+)"
Case -4
Return "Joystick y-axis (-)"
Case -5
Return "Joystick z-axis (+)"
Case -6
Return "Joystick z-axis (-)"
Case -7
Return "Joystick u-axis (+)"
Case -8
Return "Joystick u-axis (-)"
Case -9
Return "Joystick v-axis (+)"
Case -10
Return "Joystick v-axis (-)"
Case -11
Return "Joystick pitch (+)"
Case -12
Return "Joystick pitch (-)"
Case -13
Return "Joystick yaw (+)"
Case -14
Return "Joystick yaw (-)"
Case -15
Return "Joystick roll (+)"
Case -16
Return "Joystick roll (-)"
Default
Return "Joystick button "+keyvalue
End Select
Case 3
Select keyvalue
Case 1
Return "Left Mouse button"
Case 2
Return "Right Mouse button"
Case 3
Return "Middle Mouse button"
Default
Return "Mouse button"
End Select
Default
Return ""
End Select
End Function

Function HIL_TestJoy()
While Not KeyDown(1)
; Output joystick values
Text 0,0,"Move joystick to output values onto screen"
Text 0,20, "JoyXDir(): "+JoyXDir()
Text 0,40, "JoyYDir(): "+JoyYDir()
Text 0,60, "JoyZDir(): "+JoyZDir()
Text 0,80, "JoyUDir(): "+JoyUDir()
Text 0,100,"JoyVDir(): "+JoyVDir()
Text 0,120,"JoyPitchDir(): "+Int(JoyPitch()/180)
Text 0,140,"JoyYawDir(): "+Int(JoyYaw()/180)
Text 0,160,"JoyRollDir(): "+Int(JoyRoll()/180)

Flip
Cls
Wend
End Function













.HIL_Scancodes
Data "ESCAPE"
Data "1"  
Data "2"
Data "3"
Data "4"
Data "5"
Data "6"
Data "7"
Data "8"
Data "9"
Data "0"
Data "Minus (-)" ;On Main Keyboard
Data "Equals (=)"
Data "Backspace" ;Backspace key
Data "Tab"
Data "Q"
Data "W"
Data "E"
Data "R"
Data "T"
Data "Y"
Data "U"
Data "I"
Data "O"
Data "P"
Data "Left Bracket ([)"
Data "Right Bracket (])"
Data "Return/Enter" ;Return/Enter on Main Keyboard
Data "Left Control"
Data "A"
Data "S"
Data "D"
Data "F"
Data "G"
Data "H"
Data "J"
Data "K"
Data "L"
Data "Semi-Colon (;)"
Data "Apostrophe (')"
Data "Grave" ;Accent Grave
Data "Left Shift"
Data "Backslash ()"
Data "Z"
Data "X"
Data "C"
Data "V"
Data "B"
Data "N"
Data "M"
Data "Comma (,)"
Data "Period (.)" ;On Main keyboard
Data "Slash (/)" ;On Main Keyboard
Data "Right Shift"
Data "Multiply (*)" ;On Numeric Keypad
Data "Left Alt/Menu"
Data "Space"
Data "Capital"
Data "F1"
Data "F2"
Data "F3"
Data "F4"
Data "F5"
Data "F6"
Data "F7"
Data "F8"
Data "F9"
Data "F10"
Data "NumLock"
Data "Scroll Lock"
Data "NumPad 7"
Data "NumPad 8"
Data "NumPad 9"
Data "Subtract (-)" ;On Numeric Keypad
Data "NumPad 4"
Data "NumPad 5"
Data "NumPad 6"
Data "Add (+)" ;On Numeric Keypad
Data "NumPad 1"
Data "NumPad 2"
Data "NumPad 3"
Data "NumPad 0"
Data "Decimal (.)" ;On Numeric Keypad
Data "Unknown"
Data "Unknown"
Data "OEM_102" ;On UK/Germany Keyboards
Data "F11"
Data "F12"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "F13" ;(NEC PC98)
Data "F14" ;(NEC PC98)
Data "F15" ;(NEC PC98)
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Kana" ;Japanese Keyboard
Data "Unknown"
Data "Unknown"
Data "ABNT_C1" ;/? on Portugese (Brazilian) keyboards
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Convert" ;Japanese Keyboard
Data "Unknown"
Data "NoConvert" ;Japanese Keyboard
Data "Unknown"
Data "Yen" ;Japanese Keyboard
Data "ABNT_C2" ;Numpad . on Portugese (Brazilian) keyboards
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Equals" ;= on numeric keypad (NEC PC98)
Data "Unknown"
Data "Unknown"
Data "PrevTrack" ;Previous Track (DIK_CIRCUMFLEX on Japanese keyboard)
Data "AT" ;(NEC PC98)
Data "Colon (:)" ;(NEC PC98)
Data "Underline" ;(NEC PC98)
Data "Kanji" ;Japanese Keyboard
Data "Stop" ;(NEC PC98)
Data "AX" ;Japan AX
Data "Unlabeled" ;(J3100)
Data "Unknown"
Data "Next Track" ;Next Track
Data "Unknown"
Data "Unknown"
Data "Enter" ;ENTER on Numeric Keypad
Data "Right Control"
Data "Unknown"
Data "Unknown"
Data "Mute" ;Mute
Data "Calculator" ;Calculator
Data "Play/Pause" ;Play/Pause
Data "Unknown"
Data "Media Stop" ;Media Stop
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Volume Down" ;Volume -
Data "Unknown"
Data "Volume Up" ;Volume +
Data "Unknown"
Data "Web Home" ;Web Home
Data "Comma (,)" ;On Numeric Keypad (NEX PC98)
Data "Unknown"
Data "Divide (/)" ;On Numeric Keypad
Data "Unknown"
Data "SysReq"
Data "Right Alt/Menu" ;Right Alt
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Pause" ;Pause
Data "Unknown"
Data "Home" ;Home on Arrow Pad
Data "Up" ;Up Arrow on Arrow Keypad
Data "Page Up/Prior" ;Page Up on Arrow Keypad
Data "Unknown"
Data "Left" ;Left Arrow on Arrow Keypad
Data "Unknown"
Data "Right" ;Right Arrow on Arrow Keypad
Data "Unknown"
Data "End" ;End Key on Arrow Keypad
Data "Down" ;Down Key on Arrow Keypad
Data "Next" ;Next Key on Arrow Keypad
Data "Insert" ;Insert Key on Arrow Keypad
Data "Delete" ;Delete Key on Arrow Keypad
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Left Windows" ;Left Windows Key
Data "Right Windows" ;Right Windows Key
Data "Apps" ;Apps Menu Key
Data "Power" ;System Power
Data "Sleep" ;System Sleep
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Wake" ;System Wake
Data "Unknown"
Data "Web Search"
Data "Web Favorites"
Data "Web Refresh"
Data "Web Stop"
Data "Web Forward"
Data "Web Back"
Data "My Computer"
Data "Mail"
Data "Media Select"


Comments :


_PJ_(Posted 1+ years ago)

 The NumLock and Pause/Break keys were reversed when I tried this.I use a Logitech keyboard with UK settings if that helps.All other keys were represented accurately.