TizzyT

GamePads -TizzyT

Feb 22nd, 2016
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 13.51 KB | None | 0 0
  1. 'UPDATE TO EZPAD
  2. Public Class GamePads
  3.     Private Declare Function XInputGetBatteryInformation Lib "xinput1_3.dll" _
  4.         (ByVal dwUserIndex As PLAYER, ByVal devType As BATTERY_DEVICE_TYPE, _
  5.          ByRef pBatteryInformation As BATTERY_INFORMATION) As [ERROR]
  6.  
  7.     Private Declare Function XInputGetState Lib "xinput1_3.dll" _
  8.         (ByVal dwUserIndex As PLAYER, ByRef pState As STATE) As UInteger
  9.  
  10.     Private Declare Function XInputSetState Lib "xinput1_3.dll" _
  11.         (ByVal dwUserIndex As PLAYER, ByRef pVibration As VIBRATION) As UInteger
  12.  
  13.     Private Shared ReadOnly PLAYER1 As New PlayerPad(PLAYER.ONE)
  14.     Private Shared ReadOnly PLAYER2 As New PlayerPad(PLAYER.TWO)
  15.     Private Shared ReadOnly PLAYER3 As New PlayerPad(PLAYER.THREE)
  16.     Private Shared ReadOnly PLAYER4 As New PlayerPad(PLAYER.FOUR)
  17.  
  18.     Public Shared ReadOnly Property PAD(ByVal Player As PLAYER) As PlayerPad
  19.         Get
  20.             Select Case Player
  21.                 Case GamePads.PLAYER.ONE : Return PLAYER1
  22.                 Case GamePads.PLAYER.TWO : Return PLAYER2
  23.                 Case GamePads.PLAYER.THREE : Return PLAYER3
  24.                 Case GamePads.PLAYER.FOUR : Return PLAYER4
  25.             End Select
  26.         End Get
  27.     End Property
  28.  
  29.     Public Shared Sub UPDATE_ALL()
  30.         With PLAYER1
  31.             If .ENABLED Then .UPDATE_STATE()
  32.         End With
  33.         With PLAYER2
  34.             If .ENABLED Then .UPDATE_STATE()
  35.         End With
  36.         With PLAYER3
  37.             If .ENABLED Then .UPDATE_STATE()
  38.         End With
  39.         With PLAYER4
  40.             If .ENABLED Then .UPDATE_STATE()
  41.         End With
  42.     End Sub
  43.  
  44.     Public Enum [ERROR] As UInteger
  45.         ERROR_SUCCESS = &H0
  46.         ERROR_DEVICE_NOT_CONNECTED = &H48F
  47.     End Enum
  48.  
  49.     Public Enum BATTERY_DEVICE_TYPE As Byte
  50.         BATTERY_DEVTYPE_GAMEPAD = &H0
  51.         BATTERY_DEVTYPE_HEADSET = &H1
  52.     End Enum
  53.  
  54.     Public Enum PLAYER As UInteger
  55.         ONE = &H0
  56.         TWO = &H1
  57.         THREE = &H2
  58.         FOUR = &H3
  59.     End Enum
  60.  
  61.     Public Structure BATTERY_INFORMATION
  62.         Public TYPE As BATTERY_TYPE
  63.         Public LEVEL As BATTERY_LEVEL
  64.     End Structure
  65.  
  66.     Public Enum BATTERY_TYPE As Byte
  67.         DISCONNECTED = &H0
  68.         WIRED = &H1
  69.         ALKALINE = &H2
  70.         NIMH = &H3
  71.         UNKNOWN = &HFF
  72.     End Enum
  73.  
  74.     Public Enum BATTERY_LEVEL As Byte
  75.         EMPTY = &H0
  76.         LOW = &H1
  77.         MEDIUM = &H2
  78.         FULL = &H3
  79.     End Enum
  80.  
  81.     Public Structure GAMEPAD
  82.         Public BUTTONS As UShort
  83.         Public LTRIGGER As Byte
  84.         Public RTRIGGER As Byte
  85.         Public LTHUMBX As Short
  86.         Public LTHUMBY As Short
  87.         Public RTHUMBX As Short
  88.         Public RTHUMBY As Short
  89.     End Structure
  90.  
  91.     Public Structure STATE
  92.         Public PACKET As Integer
  93.         Public PAD As GAMEPAD
  94.     End Structure
  95.  
  96.     Public Structure VIBRATION
  97.         Public wLeftMotorSpeed, wRightMotorSpeed As UShort
  98.         Sub New(ByVal LMotor As UShort, ByVal RMotor As UShort)
  99.             wLeftMotorSpeed = LMotor
  100.             wRightMotorSpeed = RMotor
  101.         End Sub
  102.     End Structure
  103.  
  104.     Public Class PlayerPad
  105.         Private PadIndex As PLAYER
  106.         Private PREV_PACKET_NUMBER As Integer = -1
  107.         Private _PACKET_NUMBER As Integer
  108.         Private _LEFT_TRIGGER As Byte
  109.         Private _RIGHT_TRIGGER As Byte
  110.         Private _LEFT_THUMB_X As Short
  111.         Private _LEFT_THUMB_Y As Short
  112.         Private _RIGHT_THUMB_X As Short
  113.         Private _RIGHT_THUMB_Y As Short
  114.         Private _DPAD_UP As Boolean
  115.         Private _DPAD_DOWN As Boolean
  116.         Private _DPAD_LEFT As Boolean
  117.         Private _DPAD_RIGHT As Boolean
  118.         Private _SELECT As Boolean
  119.         Private _START As Boolean
  120.         Private _LEFT_SHOULDER As Boolean
  121.         Private _RIGHT_SHOULDER As Boolean
  122.         Private _BUTTON_X As Boolean
  123.         Private _BUTTON_Y As Boolean
  124.         Private _BUTTON_B As Boolean
  125.         Private _BUTTON_A As Boolean
  126.         Private _LEFT_THUMB As Boolean
  127.         Private _RIGHT_THUMB As Boolean
  128.  
  129.         Public Property ENABLED As Boolean = False
  130.  
  131.         Public ReadOnly Property PACKET_NUMBER As Integer
  132.             Get
  133.                 Return _PACKET_NUMBER
  134.             End Get
  135.         End Property
  136.  
  137.         Public ReadOnly Property LEFT_TRIGGER As Byte
  138.             Get
  139.                 Return _LEFT_TRIGGER
  140.             End Get
  141.         End Property
  142.  
  143.         Public ReadOnly Property RIGHT_TRIGGER As Byte
  144.             Get
  145.                 Return _RIGHT_TRIGGER
  146.             End Get
  147.         End Property
  148.  
  149.         Public ReadOnly Property LEFT_THUMB_X As Short
  150.             Get
  151.                 Return _LEFT_THUMB_X
  152.             End Get
  153.         End Property
  154.  
  155.         Public ReadOnly Property LEFT_THUMB_Y As Short
  156.             Get
  157.                 Return _LEFT_THUMB_Y
  158.             End Get
  159.         End Property
  160.  
  161.         Public ReadOnly Property RIGHT_THUMB_X As Short
  162.             Get
  163.                 Return _RIGHT_THUMB_X
  164.             End Get
  165.         End Property
  166.  
  167.         Public ReadOnly Property RIGHT_THUMB_Y As Short
  168.             Get
  169.                 Return _RIGHT_THUMB_Y
  170.             End Get
  171.         End Property
  172.  
  173.         Public ReadOnly Property DPAD_UP As Boolean
  174.             Get
  175.                 Return _DPAD_UP
  176.             End Get
  177.         End Property
  178.  
  179.         Public ReadOnly Property DPAD_DOWN As Boolean
  180.             Get
  181.                 Return _DPAD_DOWN
  182.             End Get
  183.         End Property
  184.  
  185.         Public ReadOnly Property DPAD_LEFT As Boolean
  186.             Get
  187.                 Return _DPAD_LEFT
  188.             End Get
  189.         End Property
  190.  
  191.         Public ReadOnly Property DPAD_RIGHT As Boolean
  192.             Get
  193.                 Return _DPAD_RIGHT
  194.             End Get
  195.         End Property
  196.  
  197.         Public ReadOnly Property [SELECT] As Boolean
  198.             Get
  199.                 Return _SELECT
  200.             End Get
  201.         End Property
  202.  
  203.         Public ReadOnly Property START As Boolean
  204.             Get
  205.                 Return _START
  206.             End Get
  207.         End Property
  208.  
  209.         Public ReadOnly Property LEFT_SHOULDER As Boolean
  210.             Get
  211.                 Return _LEFT_SHOULDER
  212.             End Get
  213.         End Property
  214.  
  215.         Public ReadOnly Property RIGHT_SHOULDER As Boolean
  216.             Get
  217.                 Return _RIGHT_SHOULDER
  218.             End Get
  219.         End Property
  220.  
  221.         Public ReadOnly Property BUTTON_X As Boolean
  222.             Get
  223.                 Return _BUTTON_X
  224.             End Get
  225.         End Property
  226.  
  227.         Public ReadOnly Property BUTTON_Y As Boolean
  228.             Get
  229.                 Return _BUTTON_Y
  230.             End Get
  231.         End Property
  232.  
  233.         Public ReadOnly Property BUTTON_B As Boolean
  234.             Get
  235.                 Return _BUTTON_B
  236.             End Get
  237.         End Property
  238.  
  239.         Public ReadOnly Property BUTTON_A As Boolean
  240.             Get
  241.                 Return _BUTTON_A
  242.             End Get
  243.         End Property
  244.  
  245.         Public ReadOnly Property LEFT_THUMB As Boolean
  246.             Get
  247.                 Return _LEFT_THUMB
  248.             End Get
  249.         End Property
  250.  
  251.         Public ReadOnly Property RIGHT_THUMB As Boolean
  252.             Get
  253.                 Return _RIGHT_THUMB
  254.             End Get
  255.         End Property
  256.  
  257.         Private LeftRadiusPos As Integer = 6554
  258.         Private LeftRadiusNeg As Integer = -6554
  259.         Private LeftSquare As Integer = 42954916
  260.         Private LeftScaledNeg As Single = -32768 / (-32768 + LeftRadiusPos)
  261.         Private LeftScaledPos As Single = 32767 / (32767 - LeftRadiusPos)
  262.  
  263.         Public Property LEFT_DEAD_ZONE() As Short
  264.             Get
  265.                 Return LeftRadiusPos
  266.             End Get
  267.             Set(value As Short)
  268.                 If value = 0 Then
  269.                     LeftRadiusPos = 0
  270.                     LeftRadiusNeg = 0
  271.                 ElseIf value > 0 Then
  272.                     LeftRadiusPos = value
  273.                     LeftRadiusNeg = value * -1
  274.                 ElseIf value < 0 Then
  275.                     If value = -32768 Then value = 32767
  276.                     LeftRadiusNeg = value
  277.                     LeftRadiusPos = value * -1
  278.                 End If
  279.                 LeftSquare = LeftRadiusPos * LeftRadiusPos
  280.                 LeftScaledPos = 32767 / (32767 - LeftRadiusPos)
  281.                 LeftScaledNeg = -32768 / (-32768 + LeftRadiusPos)
  282.             End Set
  283.         End Property
  284.  
  285.         Private RightRadiusPos As Integer = 6554
  286.         Private RightRadiusNeg As Integer = -6554
  287.         Private RightSquare As Integer = 42954916
  288.         Private RightScaledNeg As Single = -32768 / (-32768 + RightRadiusPos)
  289.         Private RightScaledPos As Single = 32767 / (32767 - RightRadiusPos)
  290.  
  291.         Public Property RIGHT_DEAD_ZONE() As Short
  292.             Get
  293.                 Return RightRadiusPos
  294.             End Get
  295.             Set(value As Short)
  296.                 If value = 0 Then
  297.                     RightRadiusPos = 0
  298.                     RightRadiusNeg = 0
  299.                 ElseIf value > 0 Then
  300.                     RightRadiusPos = value
  301.                     RightRadiusNeg = value * -1
  302.                 ElseIf value < 0 Then
  303.                     If value = -32768 Then value = 32767
  304.                     RightRadiusNeg = value
  305.                     RightRadiusPos = value * -1
  306.                 End If
  307.                 RightSquare = RightRadiusPos * RightRadiusPos
  308.                 RightScaledPos = 32767 / (32767 - RightRadiusPos)
  309.                 RightScaledNeg = -32768 / (-32768 + RightRadiusPos)
  310.             End Set
  311.         End Property
  312.  
  313.         Public Sub New(ByVal Player As PLAYER)
  314.             PadIndex = Player
  315.         End Sub
  316.  
  317.         Public Function GET_BATTERY_INFORMATION() As BATTERY_INFORMATION
  318.             Dim BatteryInfo As BATTERY_INFORMATION
  319.             XInputGetBatteryInformation(PadIndex, BATTERY_DEVICE_TYPE.BATTERY_DEVTYPE_GAMEPAD, BatteryInfo)
  320.             Return BatteryInfo
  321.         End Function
  322.  
  323.         Public Function VIBRATE(ByVal LeftMotor As UShort, ByVal RightMotor As UShort) As UInteger
  324.             Return XInputSetState(PadIndex, New VIBRATION(LeftMotor, RightMotor))
  325.         End Function
  326.  
  327.         Public Sub UPDATE_STATE()
  328.             Dim RTN_INPUTS As STATE
  329.             XInputGetState(PadIndex, RTN_INPUTS)
  330.             If RTN_INPUTS.PACKET = PREV_PACKET_NUMBER Then
  331.                 Exit Sub
  332.             Else
  333.                 _PACKET_NUMBER = RTN_INPUTS.PACKET
  334.                 Dim X As Integer = RTN_INPUTS.PAD.LTHUMBX
  335.                 Dim Y As Integer = RTN_INPUTS.PAD.LTHUMBY
  336.                 If X < 0 Then
  337.                     X *= -1
  338.                     X -= 1
  339.                 End If
  340.                 X *= X
  341.                 If Y < 0 Then
  342.                     Y *= -1
  343.                     Y -= 1
  344.                 End If
  345.                 Y *= Y
  346.                 If X + Y < LeftSquare Then
  347.                     _LEFT_THUMB_X = 0
  348.                     _LEFT_THUMB_Y = 0
  349.                 Else
  350.                     If LeftRadiusPos > 0 Then
  351.                         If RTN_INPUTS.PAD.LTHUMBX < LeftRadiusNeg _
  352.                             Then _LEFT_THUMB_X = LeftScaledNeg * (RTN_INPUTS.PAD.LTHUMBX + LeftRadiusPos)
  353.                         If RTN_INPUTS.PAD.LTHUMBX > LeftRadiusPos _
  354.                             Then _LEFT_THUMB_X = LeftScaledPos * (RTN_INPUTS.PAD.LTHUMBX - LeftRadiusPos)
  355.                         If RTN_INPUTS.PAD.LTHUMBY < LeftRadiusNeg _
  356.                             Then _LEFT_THUMB_Y = LeftScaledNeg * (RTN_INPUTS.PAD.LTHUMBY + LeftRadiusPos)
  357.                         If RTN_INPUTS.PAD.LTHUMBY > LeftRadiusPos _
  358.                             Then _LEFT_THUMB_Y = LeftScaledPos * (RTN_INPUTS.PAD.LTHUMBY - LeftRadiusPos)
  359.                     End If
  360.                 End If
  361.                 X = RTN_INPUTS.PAD.RTHUMBX
  362.                 Y = RTN_INPUTS.PAD.RTHUMBY
  363.                 X *= X
  364.                 Y *= Y
  365.                 If X + Y < RightSquare Then
  366.                     _RIGHT_THUMB_X = 0
  367.                     _RIGHT_THUMB_Y = 0
  368.                 Else
  369.                     If RightRadiusPos > 0 Then
  370.                         If RTN_INPUTS.PAD.RTHUMBX < RightRadiusNeg _
  371.                             Then _RIGHT_THUMB_X = RightScaledNeg * (RTN_INPUTS.PAD.RTHUMBX + RightRadiusPos)
  372.                         If RTN_INPUTS.PAD.RTHUMBX > RightRadiusPos _
  373.                             Then _RIGHT_THUMB_X = RightScaledPos * (RTN_INPUTS.PAD.RTHUMBX - RightRadiusPos)
  374.                         If RTN_INPUTS.PAD.RTHUMBY < RightRadiusNeg _
  375.                             Then _RIGHT_THUMB_Y = RightScaledNeg * (RTN_INPUTS.PAD.RTHUMBY + RightRadiusPos)
  376.                         If RTN_INPUTS.PAD.RTHUMBY > RightRadiusPos _
  377.                             Then _RIGHT_THUMB_Y = RightScaledPos * (RTN_INPUTS.PAD.RTHUMBY - RightRadiusPos)
  378.                     End If
  379.                 End If
  380.                 Dim bits As New BitArray(New Integer() {RTN_INPUTS.PAD.BUTTONS})
  381.                 _LEFT_TRIGGER = RTN_INPUTS.PAD.LTRIGGER
  382.                 _RIGHT_TRIGGER = RTN_INPUTS.PAD.RTRIGGER
  383.                 _DPAD_UP = bits(0)
  384.                 _DPAD_DOWN = bits(1)
  385.                 _DPAD_LEFT = bits(2)
  386.                 _DPAD_RIGHT = bits(3)
  387.                 _START = bits(4)
  388.                 _SELECT = bits(5)
  389.                 _LEFT_THUMB = bits(6)
  390.                 _RIGHT_THUMB = bits(7)
  391.                 _LEFT_SHOULDER = bits(8)
  392.                 _RIGHT_SHOULDER = bits(9)
  393.                 _BUTTON_A = bits(12)
  394.                 _BUTTON_B = bits(13)
  395.                 _BUTTON_X = bits(14)
  396.                 _BUTTON_Y = bits(15)
  397.             End If
  398.         End Sub
  399.     End Class
  400. End Class
Advertisement
Add Comment
Please, Sign In to add comment