Advertisement
TizzyT

EZPAD -TizzyT

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