November 25, 2020, 06:02:52 AM

Author Topic: [bb] Human Input Library by Dabbede [ 1+ years ago ]  (Read 536 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Human Input Library by Dabbede [ 1+ years ago ]
« on: June 29, 2017, 12:28:41 AM »
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
  1. ;;===============================;;
  2. ;;===============================;;
  3. ;;                               ;;
  4. ;; Human Input Library           ;;
  5. ;;                               ;;
  6. ;;      by Dabbede               ;;
  7. ;;                               ;;
  8. ;;                               ;;
  9. ;;      10/07/2004      v. 1.0   ;;
  10. ;;                               ;;
  11. ;;===============================;;
  12. ;;===============================;;
  13. ;;                               ;;
  14. ;; The easiest way to handle     ;;
  15. ;; player's inputs like          ;;
  16. ;; keyboard, joypad or mouse     ;;
  17. ;;                               ;;
  18. ;;===============================;;
  19. ;;===============================;;
  20.  
  21.  
  22. Type HIL_Key                            ; Any input type
  23.         Field Typ                               ; 0=none        1=keyb  2=joy   3=mouse
  24.         Field Value                             ; Keyboard:
  25.                                                         ;       Value = scancode
  26.                                                         ; Joystick:
  27.                                                         ;       Value(>0)  = button#
  28.                                                         ;       Value(-1)  = x-axis +
  29.                                                         ;       Value(-2)  = x-axis -
  30.                                                         ;       Value(-3)  = y-axis +
  31.                                                         ;       Value(-4)  = y-axis -
  32.                                                         ;       Value(-5)  = z-axis +
  33.                                                         ;       Value(-6)  = z-axis -
  34.                                                         ;       Value(-7)  = u-axis +
  35.                                                         ;       Value(-8)  = u-axis -
  36.                                                         ;       Value(-9)  = v-axis +
  37.                                                         ;       Value(-10) = v-axis -
  38.                                                         ;       Value(-11) = pitch  +
  39.                                                         ;       Value(-12) = pitch  -
  40.                                                         ;       Value(-13) = yaw    +
  41.                                                         ;       Value(-14) = yaw    -
  42.                                                         ;       Value(-15) = roll   +
  43.                                                         ;       Value(-16) = roll   -
  44.                                                         ; Mouse:
  45.                                                         ;       Value=button#
  46. End Type
  47.  
  48. Dim HIL_scancodes$(238)         ; Array with keyboard scancodes
  49. Global HIL_SpecialJoystick = False      ;True if you want to use JoyZUVPitchYawRoll
  50. Const HIL_MaxJoyButtons = 30
  51.  
  52.  
  53. ; Initialization ==================
  54. Restore HIL_Scancodes
  55. For i=1 To 237
  56.         Read  HIL_scancodes$(i)
  57. Next
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. ; Little example ==================
  68. Print "Choose the key to exit"
  69. quit.HIL_Key=HIL_NewKey()
  70. HIL_FlushAnyKeys()
  71. Cls
  72. Locate 0,0
  73. Print "Press some keys..."
  74. temp.HIL_Key=HIL_NewKey()
  75. While (temp     yp<>quit        yp) Or (tempvalue<>quitvalue)
  76.         Print HIL_KeyLabel(temp)+" is the wrong key... retry!"
  77.         HIL_ModifyKey(temp)
  78. Wend
  79. Print "Ok!"
  80. Cls
  81. HIL_TestJoy()
  82. End
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94. Function HIL_AnyKeyHit()
  95.         quit=False
  96.        
  97.         ;Keyboard
  98.         For i=1 To 237
  99.                 If KeyHit(i) Then quit=1
  100.         Next
  101.        
  102.         ;Joystick
  103.         For i=1 To HIL_MaxJoyButtons
  104.                 If JoyHit(i) Then quit=2
  105.         Next   
  106.         If (JoyXDir() Or JoyYDir()) Then quit=2
  107.         If HIL_SpecialJoystick And (JoyZDir() Or JoyUDir() Or JoyVDir() Or Int(JoyPitch()/180) Or Int(JoyYaw()/180) Or Int(JoyRoll()/180)) Then quit=2
  108.        
  109.         ;Mouse
  110.         For i=1 To 3   
  111.                 If MouseHit(i) Then quit=3
  112.         Next
  113.        
  114.         Return quit
  115. End Function
  116.  
  117. Function HIL_AnyKeyDown()       ; Not very useful
  118.         quit=False
  119.        
  120.         ;Keyboard
  121.         For i=1 To 237
  122.                 If KeyDown(i) Then quit=1
  123.         Next
  124.        
  125.         ;Joystick
  126.         For i=1 To HIL_MaxJoyButtons
  127.                 If JoyDown(i) Then quit=2
  128.         Next   
  129.         If (JoyXDir() Or JoyYDir()) Then quit=2
  130.         If HIL_SpecialJoystick And (JoyZDir() Or JoyUDir() Or JoyVDir() Or Int(JoyPitch()/180) Or Int(JoyYaw()/180) Or Int(JoyRoll()/180)) Then quit=2
  131.        
  132.         ;Mouse
  133.         For i=1 To 3   
  134.                 If MouseDown(i) Then quit=3
  135.         Next
  136.        
  137.         Return quit
  138. End Function
  139.  
  140. Function HIL_GetValue(typ)
  141.         Select typ
  142.                 Case 1
  143.                         For i=1 To 237
  144.                                 If KeyDown(i) Then Return i
  145.                         Next
  146.                 Case 2
  147.                         For i=1 To HIL_MaxJoyButtons
  148.                                 If JoyDown(i) Then Return i
  149.                         Next
  150.                         If JoyXDir()=+1 Return -1
  151.                         If JoyXDir()=-1 Return -2
  152.                         If JoyYDir()=+1 Return -3
  153.                         If JoyYDir()=-1 Return -4
  154.                         If HIL_SpecialJoystick Then
  155.                                 If JoyZDir()=+1 Return -5
  156.                                 If JoyZDir()=-1 Return -6
  157.                                 If JoyUDir()=+1 Return -7
  158.                                 If JoyUDir()=-1 Return -8
  159.                                 If JoyVDir()=+1 Return -9
  160.                                 If JoyVDir()=-1 Return -10
  161.                                 If Int(JoyPitch()/180)=+1 Return -11
  162.                                 If Int(JoyPitch()/180)=-1 Return -12
  163.                                 If Int(JoyYaw()  /180)=+1 Return -13
  164.                                 If Int(JoyYaw()  /180)=-1 Return -14
  165.                                 If Int(JoyRoll() /180)=+1 Return -15
  166.                                 If Int(JoyRoll() /180)=-1 Return -16
  167.                         EndIf
  168.                 Case 3
  169.                         For i=1 To 3   
  170.                                 If MouseDown(i) Then Return i
  171.                         Next
  172.                 Default
  173.                         Return 0
  174.         End Select
  175. End Function
  176.  
  177. Function HIL_NewKey.HIL_Key()
  178.         key.HIL_Key = New HIL_Key
  179.        
  180.         Repeat
  181.                 t = HIL_AnyKeyHit()
  182.         Until t
  183.        
  184.         keyTyp = t
  185.         keyvalue = HIL_GetValue(t)
  186.        
  187.         Return key
  188. End Function
  189.  
  190. Function HIL_ModifyKey.HIL_Key(key.HIL_Key)
  191.         If key=Null Then
  192.                 key = New HIL_Key
  193.         EndIf
  194.        
  195.         Repeat
  196.                 t = HIL_AnyKeyHit()
  197.         Until t
  198.        
  199.         keyTyp = t
  200.         keyvalue = HIL_GetValue(t)
  201. End Function
  202.  
  203. Function HIL_KeyDown(key.HIL_Key)
  204.         If key=Null Return False
  205.        
  206.         Select keyTyp
  207.                 Case 1
  208.                         If KeyDown(keyValue) Return True
  209.                
  210.                 Case 2
  211.                         Select keyValue
  212.                                 Case 0
  213.                                         Return False
  214.                                 Case -1
  215.                                         If JoyXDir()=+1 Return True
  216.                                 Case -2
  217.                                         If JoyXDir()=-1 Return True
  218.                                 Case -3
  219.                                         If JoyYDir()=+1 Return True
  220.                                 Case -4
  221.                                         If JoyYDir()=-1 Return True
  222.                                 Case -5
  223.                                         If JoyZDir()=+1 Return True
  224.                                 Case -6
  225.                                         If JoyZDir()=-1 Return True
  226.                                 Case -7
  227.                                         If JoyUDir()=+1 Return True
  228.                                 Case -8
  229.                                         If JoyUDir()=-1 Return True
  230.                                 Case -9
  231.                                         If JoyVDir()=+1 Return True
  232.                                 Case -10
  233.                                         If JoyVDir()=-1 Return True
  234.                                 Case -11
  235.                                         If Int(JoyPitch()/180)=+1 Return True
  236.                                 Case -12
  237.                                         If Int(JoyPitch()/180)=-1 Return True
  238.                                 Case -13
  239.                                         If Int(JoyYaw()  /180)=+1 Return True
  240.                                 Case -14
  241.                                         If Int(JoyYaw()  /180)=-1 Return True
  242.                                 Case -15
  243.                                         If Int(JoyRoll() /180)=+1 Return True
  244.                                 Case -16
  245.                                         If Int(JoyRoll() /180)=-1 Return True
  246.                                 Default
  247.                                         If JoyDown(keyValue) Return True
  248.                         End Select
  249.                
  250.                 Case 3
  251.                         If MouseDown(keyValue) Return True
  252.         End Select
  253.        
  254.         Return False
  255. End Function
  256.  
  257. Function HIL_KeyHit(key.HIL_Key)
  258.         If key=Null Return False
  259.        
  260.         Select keyTyp
  261.                 Case 1
  262.                         If KeyHit(keyValue) Return True
  263.                
  264.                 Case 2
  265.                         Select keyValue
  266.                                 Case 0
  267.                                         Return False
  268.                                 Case -1
  269.                                         If JoyXDir()=+1 Return True
  270.                                 Case -2
  271.                                         If JoyXDir()=-1 Return True
  272.                                 Case -3
  273.                                         If JoyYDir()=+1 Return True
  274.                                 Case -4
  275.                                         If JoyYDir()=-1 Return True
  276.                                 Case -5
  277.                                         If JoyZDir()=+1 Return True
  278.                                 Case -6
  279.                                         If JoyZDir()=-1 Return True
  280.                                 Case -7
  281.                                         If JoyUDir()=+1 Return True
  282.                                 Case -8
  283.                                         If JoyUDir()=-1 Return True
  284.                                 Case -9
  285.                                         If JoyVDir()=+1 Return True
  286.                                 Case -10
  287.                                         If JoyVDir()=-1 Return True
  288.                                 Case -11
  289.                                         If Int(JoyPitch()/180)=+1 Return True
  290.                                 Case -12
  291.                                         If Int(JoyPitch()/180)=-1 Return True
  292.                                 Case -13
  293.                                         If Int(JoyYaw()  /180)=+1 Return True
  294.                                 Case -14
  295.                                         If Int(JoyYaw()  /180)=-1 Return True
  296.                                 Case -15
  297.                                         If Int(JoyRoll() /180)=+1 Return True
  298.                                 Case -16
  299.                                         If Int(JoyRoll() /180)=-1 Return True
  300.                                 Default
  301.                                         If JoyHit(keyValue) Return True
  302.                         End Select
  303.                
  304.                 Case 3
  305.                         If MouseHit(keyValue) Return True
  306.         End Select
  307.        
  308.         Return False
  309. End Function
  310.  
  311. Function HIL_WaitAnyKey()
  312.         While Not HIL_AnyKeyHit()
  313.         Wend
  314. End Function
  315.  
  316. Function HIL_FlushAnyKeys()
  317.         FlushKeys
  318.         FlushMouse
  319.         FlushJoy
  320. End Function
  321.  
  322. Function HIL_KeyLabel$(key.HIL_Key)
  323.         If key=Null     Return ""
  324.        
  325.         Select key      yp
  326.                 Case 1
  327.                         Return HIL_scancodes$(keyvalue)
  328.                 Case 2
  329.                         Select keyvalue
  330.                                 Case 0
  331.                                         Return "Joystick button"
  332.                                 Case -1
  333.                                         Return "Joystick x-axis (+)"
  334.                                 Case -2
  335.                                         Return "Joystick x-axis (-)"
  336.                                 Case -3
  337.                                         Return "Joystick y-axis (+)"
  338.                                 Case -4
  339.                                         Return "Joystick y-axis (-)"
  340.                                 Case -5
  341.                                         Return "Joystick z-axis (+)"
  342.                                 Case -6
  343.                                         Return "Joystick z-axis (-)"
  344.                                 Case -7
  345.                                         Return "Joystick u-axis (+)"
  346.                                 Case -8
  347.                                         Return "Joystick u-axis (-)"
  348.                                 Case -9
  349.                                         Return "Joystick v-axis (+)"
  350.                                 Case -10
  351.                                         Return "Joystick v-axis (-)"
  352.                                 Case -11
  353.                                         Return "Joystick pitch (+)"
  354.                                 Case -12
  355.                                         Return "Joystick pitch (-)"
  356.                                 Case -13
  357.                                         Return "Joystick yaw (+)"
  358.                                 Case -14
  359.                                         Return "Joystick yaw (-)"
  360.                                 Case -15
  361.                                         Return "Joystick roll (+)"
  362.                                 Case -16
  363.                                         Return "Joystick roll (-)"
  364.                                 Default
  365.                                         Return "Joystick button "+keyvalue
  366.                         End Select
  367.                 Case 3
  368.                         Select keyvalue
  369.                                 Case 1
  370.                                         Return "Left Mouse button"
  371.                                 Case 2
  372.                                         Return "Right Mouse button"
  373.                                 Case 3
  374.                                         Return "Middle Mouse button"
  375.                                 Default
  376.                                         Return "Mouse button"
  377.                         End Select
  378.                 Default
  379.                         Return ""
  380.         End Select
  381. End Function
  382.  
  383. Function HIL_TestJoy()
  384.         While Not KeyDown(1)
  385.                 ; Output joystick values
  386.                 Text 0,0,"Move joystick to output values onto screen"
  387.                 Text 0,20, "JoyXDir(): "+JoyXDir()
  388.                 Text 0,40, "JoyYDir(): "+JoyYDir()
  389.                 Text 0,60, "JoyZDir(): "+JoyZDir()
  390.                 Text 0,80, "JoyUDir(): "+JoyUDir()
  391.                 Text 0,100,"JoyVDir(): "+JoyVDir()
  392.                 Text 0,120,"JoyPitchDir(): "+Int(JoyPitch()/180)
  393.                 Text 0,140,"JoyYawDir(): "+Int(JoyYaw()/180)
  394.                 Text 0,160,"JoyRollDir(): "+Int(JoyRoll()/180)
  395.        
  396.                 Flip
  397.                 Cls
  398.         Wend
  399. End Function
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413. .HIL_Scancodes
  414. Data "ESCAPE"
  415. Data "1"  
  416. Data "2"
  417. Data "3"
  418. Data "4"
  419. Data "5"
  420. Data "6"
  421. Data "7"
  422. Data "8"
  423. Data "9"
  424. Data "0"
  425. Data "Minus (-)"                        ;On Main Keyboard
  426. Data "Equals (=)"
  427. Data "Backspace"                        ;Backspace key
  428. Data "Tab"
  429. Data "Q"
  430. Data "W"
  431. Data "E"
  432. Data "R"
  433. Data "T"
  434. Data "Y"
  435. Data "U"
  436. Data "I"
  437. Data "O"
  438. Data "P"
  439. Data "Left Bracket ([)"
  440. Data "Right Bracket (])"
  441. Data "Return/Enter"                     ;Return/Enter on Main Keyboard
  442. Data "Left Control"
  443. Data "A"
  444. Data "S"
  445. Data "D"
  446. Data "F"
  447. Data "G"
  448. Data "H"
  449. Data "J"
  450. Data "K"
  451. Data "L"
  452. Data "Semi-Colon (;)"
  453. Data "Apostrophe (')"
  454. Data "Grave"                            ;Accent Grave
  455. Data "Left Shift"
  456. Data "Backslash ()"
  457. Data "Z"
  458. Data "X"
  459. Data "C"
  460. Data "V"
  461. Data "B"
  462. Data "N"
  463. Data "M"
  464. Data "Comma (,)"
  465. Data "Period (.)"                       ;On Main keyboard
  466. Data "Slash (/)"                        ;On Main Keyboard
  467. Data "Right Shift"
  468. Data "Multiply (*)"                     ;On Numeric Keypad
  469. Data "Left Alt/Menu"
  470. Data "Space"
  471. Data "Capital"
  472. Data "F1"
  473. Data "F2"
  474. Data "F3"
  475. Data "F4"
  476. Data "F5"
  477. Data "F6"
  478. Data "F7"
  479. Data "F8"
  480. Data "F9"
  481. Data "F10"
  482. Data "NumLock"
  483. Data "Scroll Lock"
  484. Data "NumPad 7"
  485. Data "NumPad 8"
  486. Data "NumPad 9"
  487. Data "Subtract (-)"                     ;On Numeric Keypad
  488. Data "NumPad 4"
  489. Data "NumPad 5"
  490. Data "NumPad 6"
  491. Data "Add (+)"                          ;On Numeric Keypad
  492. Data "NumPad 1"
  493. Data "NumPad 2"
  494. Data "NumPad 3"
  495. Data "NumPad 0"
  496. Data "Decimal (.)"                      ;On Numeric Keypad
  497. Data "Unknown"
  498. Data "Unknown"
  499. Data "OEM_102"                          ;On UK/Germany Keyboards
  500. Data "F11"
  501. Data "F12"
  502. Data "Unknown"
  503. Data "Unknown"
  504. Data "Unknown"
  505. Data "Unknown"
  506. Data "Unknown"
  507. Data "Unknown"
  508. Data "Unknown"
  509. Data "Unknown"
  510. Data "Unknown"
  511. Data "Unknown"
  512. Data "Unknown"
  513. Data "F13"                                      ;(NEC PC98)
  514. Data "F14"                                      ;(NEC PC98)
  515. Data "F15"                                      ;(NEC PC98)
  516. Data "Unknown"
  517. Data "Unknown"
  518. Data "Unknown"
  519. Data "Unknown"
  520. Data "Unknown"
  521. Data "Unknown"
  522. Data "Unknown"
  523. Data "Unknown"
  524. Data "Unknown"
  525. Data "Kana"                                     ;Japanese Keyboard
  526. Data "Unknown"
  527. Data "Unknown"
  528. Data "ABNT_C1"                          ;/? on Portugese (Brazilian) keyboards
  529. Data "Unknown"
  530. Data "Unknown"
  531. Data "Unknown"
  532. Data "Unknown"
  533. Data "Unknown"
  534. Data "Convert"                          ;Japanese Keyboard
  535. Data "Unknown"
  536. Data "NoConvert"                        ;Japanese Keyboard
  537. Data "Unknown"
  538. Data "Yen"                                      ;Japanese Keyboard
  539. Data "ABNT_C2"                          ;Numpad . on Portugese (Brazilian) keyboards
  540. Data "Unknown"
  541. Data "Unknown"
  542. Data "Unknown"
  543. Data "Unknown"
  544. Data "Unknown"
  545. Data "Unknown"
  546. Data "Unknown"
  547. Data "Unknown"
  548. Data "Unknown"
  549. Data "Unknown"
  550. Data "Unknown"
  551. Data "Unknown"
  552. Data "Unknown"
  553. Data "Unknown"
  554. Data "Equals"                           ;= on numeric keypad (NEC PC98)
  555. Data "Unknown"
  556. Data "Unknown"
  557. Data "PrevTrack"                        ;Previous Track (DIK_CIRCUMFLEX on Japanese keyboard)
  558. Data "AT"                                       ;(NEC PC98)
  559. Data "Colon (:)"                        ;(NEC PC98)
  560. Data "Underline"                        ;(NEC PC98)
  561. Data "Kanji"                            ;Japanese Keyboard
  562. Data "Stop"                                     ;(NEC PC98)
  563. Data "AX"                                       ;Japan AX
  564. Data "Unlabeled"                        ;(J3100)
  565. Data "Unknown"
  566. Data "Next Track"                       ;Next Track
  567. Data "Unknown"
  568. Data "Unknown"
  569. Data "Enter"                            ;ENTER on Numeric Keypad
  570. Data "Right Control"
  571. Data "Unknown"
  572. Data "Unknown"
  573. Data "Mute"                                     ;Mute
  574. Data "Calculator"                       ;Calculator
  575. Data "Play/Pause"                       ;Play/Pause
  576. Data "Unknown"
  577. Data "Media Stop"                       ;Media Stop
  578. Data "Unknown"
  579. Data "Unknown"
  580. Data "Unknown"
  581. Data "Unknown"
  582. Data "Unknown"
  583. Data "Unknown"
  584. Data "Unknown"
  585. Data "Unknown"
  586. Data "Unknown"
  587. Data "Volume Down"                      ;Volume -
  588. Data "Unknown"
  589. Data "Volume Up"                        ;Volume +
  590. Data "Unknown"
  591. Data "Web Home"                         ;Web Home
  592. Data "Comma (,)"                        ;On Numeric Keypad (NEX PC98)
  593. Data "Unknown"
  594. Data "Divide (/)"                       ;On Numeric Keypad
  595. Data "Unknown"
  596. Data "SysReq"
  597. Data "Right Alt/Menu"           ;Right Alt
  598. Data "Unknown"
  599. Data "Unknown"
  600. Data "Unknown"
  601. Data "Unknown"
  602. Data "Unknown"
  603. Data "Unknown"
  604. Data "Unknown"
  605. Data "Unknown"
  606. Data "Unknown"
  607. Data "Unknown"
  608. Data "Unknown"
  609. Data "Unknown"
  610. Data "Pause"                            ;Pause
  611. Data "Unknown"
  612. Data "Home"                                     ;Home on Arrow Pad
  613. Data "Up"                                       ;Up Arrow on Arrow Keypad
  614. Data "Page Up/Prior"            ;Page Up on Arrow Keypad
  615. Data "Unknown"
  616. Data "Left"                                     ;Left Arrow on Arrow Keypad
  617. Data "Unknown"
  618. Data "Right"                            ;Right Arrow on Arrow Keypad
  619. Data "Unknown"
  620. Data "End"                                      ;End Key on Arrow Keypad
  621. Data "Down"                                     ;Down Key on Arrow Keypad
  622. Data "Next"                                     ;Next Key on Arrow Keypad
  623. Data "Insert"                           ;Insert Key on Arrow Keypad
  624. Data "Delete"                           ;Delete Key on Arrow Keypad
  625. Data "Unknown"
  626. Data "Unknown"
  627. Data "Unknown"
  628. Data "Unknown"
  629. Data "Unknown"
  630. Data "Unknown"
  631. Data "Unknown"
  632. Data "Left Windows"                     ;Left Windows Key
  633. Data "Right Windows"            ;Right Windows Key
  634. Data "Apps"                                     ;Apps Menu Key
  635. Data "Power"                            ;System Power
  636. Data "Sleep"                            ;System Sleep
  637. Data "Unknown"
  638. Data "Unknown"
  639. Data "Unknown"
  640. Data "Wake"                                     ;System Wake
  641. Data "Unknown"
  642. Data "Web Search"
  643. Data "Web Favorites"
  644. Data "Web Refresh"
  645. Data "Web Stop"
  646. Data "Web Forward"
  647. Data "Web Back"
  648. Data "My Computer"
  649. Data "Mail"
  650. 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.


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal