Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Class EZPAD
- Public Declare Function XInputGetBatteryInformation Lib "xinput1_3.dll" _
- (ByVal dwUserIndex As PLAYER, ByVal devType As BATTERY_DEVICE_TYPE, _
- ByRef pBatteryInformation As BATTERY_INFORMATION) As [ERROR]
- Public Declare Function XInputGetState Lib "xinput1_3.dll" _
- (ByVal dwUserIndex As PLAYER, ByRef pState As STATE) As UInteger
- Public Declare Function XInputSetState Lib "xinput1_3.dll" _
- (ByVal dwUserIndex As PLAYER, ByRef pVibration As VIBRATION) As UInteger
- Public Enum [ERROR] As UInteger
- ERROR_SUCCESS = &H0
- ERROR_DEVICE_NOT_CONNECTED = &H48F
- End Enum
- Public Enum BATTERY_DEVICE_TYPE As Byte
- BATTERY_DEVTYPE_GAMEPAD = &H0
- BATTERY_DEVTYPE_HEADSET = &H1
- End Enum
- Public Enum PLAYER As UInteger
- ONE = &H0
- TWO = &H1
- THREE = &H2
- FOUR = &H3
- End Enum
- Public Structure BATTERY_INFORMATION
- Public TYPE As BATTERY_TYPE
- Public LEVEL As BATTERY_LEVEL
- End Structure
- Public Enum BATTERY_TYPE As Byte
- DISCONNECTED = &H0
- WIRED = &H1
- ALKALINE = &H2
- NIMH = &H3
- UNKNOWN = &HFF
- End Enum
- Public Enum BATTERY_LEVEL As Byte
- EMPTY = &H0
- LOW = &H1
- MEDIUM = &H2
- FULL = &H3
- End Enum
- Public Structure GAMEPAD
- Public BUTTONS As UShort
- Public LTRIGGER As Byte
- Public RTRIGGER As Byte
- Public LTHUMBX As Short
- Public LTHUMBY As Short
- Public RTHUMBX As Short
- Public RTHUMBY As Short
- End Structure
- Public Structure STATE
- Public PACKET As Integer
- Public PAD As GAMEPAD
- End Structure
- Public Structure VIBRATION
- Public wLeftMotorSpeed, wRightMotorSpeed As UShort
- Sub New(ByVal LMotor As UShort, ByVal RMotor As UShort)
- wLeftMotorSpeed = LMotor
- wRightMotorSpeed = RMotor
- End Sub
- End Structure
- Private PadIndex As PLAYER
- Private PREV_PACKET_NUMBER As Integer = -1
- Private _PACKET_NUMBER As Integer
- Private _LEFT_TRIGGER As Byte
- Private _RIGHT_TRIGGER As Byte
- Private _LEFT_THUMB_X As Short
- Private _LEFT_THUMB_Y As Short
- Private _RIGHT_THUMB_X As Short
- Private _RIGHT_THUMB_Y As Short
- Private _DPAD_UP As Boolean
- Private _DPAD_DOWN As Boolean
- Private _DPAD_LEFT As Boolean
- Private _DPAD_RIGHT As Boolean
- Private _SELECT As Boolean
- Private _START As Boolean
- Private _LEFT_SHOULDER As Boolean
- Private _RIGHT_SHOULDER As Boolean
- Private _BUTTON_X As Boolean
- Private _BUTTON_Y As Boolean
- Private _BUTTON_B As Boolean
- Private _BUTTON_A As Boolean
- Private _LEFT_THUMB As Boolean
- Private _RIGHT_THUMB As Boolean
- Public ReadOnly Property PACKET_NUMBER As Integer
- Get
- Return _PACKET_NUMBER
- End Get
- End Property
- Public ReadOnly Property LEFT_TRIGGER As Byte
- Get
- Return _LEFT_TRIGGER
- End Get
- End Property
- Public ReadOnly Property RIGHT_TRIGGER As Byte
- Get
- Return _RIGHT_TRIGGER
- End Get
- End Property
- Public ReadOnly Property LEFT_THUMB_X As Short
- Get
- Return _LEFT_THUMB_X
- End Get
- End Property
- Public ReadOnly Property LEFT_THUMB_Y As Short
- Get
- Return _LEFT_THUMB_Y
- End Get
- End Property
- Public ReadOnly Property RIGHT_THUMB_X As Short
- Get
- Return _RIGHT_THUMB_X
- End Get
- End Property
- Public ReadOnly Property RIGHT_THUMB_Y As Short
- Get
- Return _RIGHT_THUMB_Y
- End Get
- End Property
- Public ReadOnly Property DPAD_UP As Boolean
- Get
- Return _DPAD_UP
- End Get
- End Property
- Public ReadOnly Property DPAD_DOWN As Boolean
- Get
- Return _DPAD_DOWN
- End Get
- End Property
- Public ReadOnly Property DPAD_LEFT As Boolean
- Get
- Return _DPAD_LEFT
- End Get
- End Property
- Public ReadOnly Property DPAD_RIGHT As Boolean
- Get
- Return _DPAD_RIGHT
- End Get
- End Property
- Public ReadOnly Property [SELECT] As Boolean
- Get
- Return _SELECT
- End Get
- End Property
- Public ReadOnly Property START As Boolean
- Get
- Return _START
- End Get
- End Property
- Public ReadOnly Property LEFT_SHOULDER As Boolean
- Get
- Return _LEFT_SHOULDER
- End Get
- End Property
- Public ReadOnly Property RIGHT_SHOULDER As Boolean
- Get
- Return _RIGHT_SHOULDER
- End Get
- End Property
- Public ReadOnly Property BUTTON_X As Boolean
- Get
- Return _BUTTON_X
- End Get
- End Property
- Public ReadOnly Property BUTTON_Y As Boolean
- Get
- Return _BUTTON_Y
- End Get
- End Property
- Public ReadOnly Property BUTTON_B As Boolean
- Get
- Return _BUTTON_B
- End Get
- End Property
- Public ReadOnly Property BUTTON_A As Boolean
- Get
- Return _BUTTON_A
- End Get
- End Property
- Public ReadOnly Property LEFT_THUMB As Boolean
- Get
- Return _LEFT_THUMB
- End Get
- End Property
- Public ReadOnly Property RIGHT_THUMB As Boolean
- Get
- Return _RIGHT_THUMB
- End Get
- End Property
- Private LeftRadiusPos As Integer = 6554
- Private LeftRadiusNeg As Integer = -6554
- Private LeftSquare As Integer = 42954916
- Private LeftScaledNeg As Single = -32768 / (-32768 + LeftRadiusPos)
- Private LeftScaledPos As Single = 32767 / (32767 - LeftRadiusPos)
- Public Property LEFT_DEAD_ZONE() As Short
- Get
- Return LeftRadiusPos
- End Get
- Set(value As Short)
- If value = 0 Then
- LeftRadiusPos = 0
- LeftRadiusNeg = 0
- ElseIf value > 0 Then
- LeftRadiusPos = value
- LeftRadiusNeg = value * -1
- ElseIf value < 0 Then
- If value = -32768 Then value = 32767
- LeftRadiusNeg = value
- LeftRadiusPos = value * -1
- End If
- LeftSquare = LeftRadiusPos * LeftRadiusPos
- LeftScaledPos = 32767 / (32767 - LeftRadiusPos)
- LeftScaledNeg = -32768 / (-32768 + LeftRadiusPos)
- End Set
- End Property
- Private RightRadiusPos As Integer = 6554
- Private RightRadiusNeg As Integer = -6554
- Private RightSquare As Integer = 42954916
- Private RightScaledNeg As Single = -32768 / (-32768 + RightRadiusPos)
- Private RightScaledPos As Single = 32767 / (32767 - RightRadiusPos)
- Public Property RIGHT_DEAD_ZONE() As Short
- Get
- Return RightRadiusPos
- End Get
- Set(value As Short)
- If value = 0 Then
- RightRadiusPos = 0
- RightRadiusNeg = 0
- ElseIf value > 0 Then
- RightRadiusPos = value
- RightRadiusNeg = value * -1
- ElseIf value < 0 Then
- If value = -32768 Then value = 32767
- RightRadiusNeg = value
- RightRadiusPos = value * -1
- End If
- RightSquare = RightRadiusPos * RightRadiusPos
- RightScaledPos = 32767 / (32767 - RightRadiusPos)
- RightScaledNeg = -32768 / (-32768 + RightRadiusPos)
- End Set
- End Property
- Public Sub New(ByVal Player As PLAYER)
- PadIndex = Player
- End Sub
- Public Sub CHANGE_PLAYER(ByVal Player As PLAYER)
- PadIndex = Player
- End Sub
- Public Function GET_BATTERY_INFORMATION() As BATTERY_INFORMATION
- Dim BatteryInfo As BATTERY_INFORMATION
- XInputGetBatteryInformation(PadIndex, BATTERY_DEVICE_TYPE.BATTERY_DEVTYPE_GAMEPAD, BatteryInfo)
- Return BatteryInfo
- End Function
- Public Function VIBRATE(ByVal LeftMotor As UShort, ByVal RightMotor As UShort) As UInteger
- Return XInputSetState(PadIndex, New VIBRATION(LeftMotor, RightMotor))
- End Function
- Public Sub UPDATE_STATE()
- Dim RTN_INPUTS As STATE
- XInputGetState(PadIndex, RTN_INPUTS)
- If RTN_INPUTS.PACKET = PREV_PACKET_NUMBER Then
- Exit Sub
- Else
- _PACKET_NUMBER = RTN_INPUTS.PACKET
- Dim X As Integer = RTN_INPUTS.PAD.LTHUMBX
- Dim Y As Integer = RTN_INPUTS.PAD.LTHUMBY
- If X < 0 Then
- X *= -1
- X -= 1
- End If
- X *= X
- If Y < 0 Then
- Y *= -1
- Y -= 1
- End If
- Y *= Y
- If X + Y < LeftSquare Then
- _LEFT_THUMB_X = 0
- _LEFT_THUMB_Y = 0
- Else
- If LeftRadiusPos > 0 Then
- If RTN_INPUTS.PAD.LTHUMBX < LeftRadiusNeg _
- Then _LEFT_THUMB_X = LeftScaledNeg * (RTN_INPUTS.PAD.LTHUMBX + LeftRadiusPos)
- If RTN_INPUTS.PAD.LTHUMBX > LeftRadiusPos _
- Then _LEFT_THUMB_X = LeftScaledPos * (RTN_INPUTS.PAD.LTHUMBX - LeftRadiusPos)
- If RTN_INPUTS.PAD.LTHUMBY < LeftRadiusNeg _
- Then _LEFT_THUMB_Y = LeftScaledNeg * (RTN_INPUTS.PAD.LTHUMBY + LeftRadiusPos)
- If RTN_INPUTS.PAD.LTHUMBY > LeftRadiusPos _
- Then _LEFT_THUMB_Y = LeftScaledPos * (RTN_INPUTS.PAD.LTHUMBY - LeftRadiusPos)
- End If
- End If
- X = RTN_INPUTS.PAD.RTHUMBX
- Y = RTN_INPUTS.PAD.RTHUMBY
- X *= X
- Y *= Y
- If X + Y < RightSquare Then
- _RIGHT_THUMB_X = 0
- _RIGHT_THUMB_Y = 0
- Else
- If RightRadiusPos > 0 Then
- If RTN_INPUTS.PAD.RTHUMBX < RightRadiusNeg _
- Then _RIGHT_THUMB_X = RightScaledNeg * (RTN_INPUTS.PAD.RTHUMBX + RightRadiusPos)
- If RTN_INPUTS.PAD.RTHUMBX > RightRadiusPos _
- Then _RIGHT_THUMB_X = RightScaledPos * (RTN_INPUTS.PAD.RTHUMBX - RightRadiusPos)
- If RTN_INPUTS.PAD.RTHUMBY < RightRadiusNeg _
- Then _RIGHT_THUMB_Y = RightScaledNeg * (RTN_INPUTS.PAD.RTHUMBY + RightRadiusPos)
- If RTN_INPUTS.PAD.RTHUMBY > RightRadiusPos _
- Then _RIGHT_THUMB_Y = RightScaledPos * (RTN_INPUTS.PAD.RTHUMBY - RightRadiusPos)
- End If
- End If
- Dim bits As New BitArray(New Integer() {RTN_INPUTS.PAD.BUTTONS})
- _LEFT_TRIGGER = RTN_INPUTS.PAD.LTRIGGER
- _RIGHT_TRIGGER = RTN_INPUTS.PAD.RTRIGGER
- _DPAD_UP = bits(0)
- _DPAD_DOWN = bits(1)
- _DPAD_LEFT = bits(2)
- _DPAD_RIGHT = bits(3)
- _START = bits(4)
- _SELECT = bits(5)
- _LEFT_THUMB = bits(6)
- _RIGHT_THUMB = bits(7)
- _LEFT_SHOULDER = bits(8)
- _RIGHT_SHOULDER = bits(9)
- _BUTTON_A = bits(12)
- _BUTTON_B = bits(13)
- _BUTTON_X = bits(14)
- _BUTTON_Y = bits(15)
- End If
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement