Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Class XPadMonitor
- Private Declare Function XInputGetBatteryInformation Lib "xinput1_3.dll" _
- (ByVal uJoyID As Integer, ByRef GameState As XINPUT_BATTERY_INFORMATION) As Int16
- Private Declare Function XInputGetState Lib "xinput1_3.dll" _
- (ByVal uJoyID As Integer, ByRef GameState As XINPUT_STATE) As Boolean
- Private Declare Function XInputSetState Lib "xinput1_3.dll" _
- (ByVal uJoyID As Integer, ByRef GameState As XINPUT_VIBRATION) As Int16
- Private Shared ReadOnly StopVibrate As New XINPUT_VIBRATION(0, 0)
- Public Shared Property DeadZoneMode() As ZoneModes = ZoneModes.Accurate
- Public Enum ZoneModes
- Accurate
- Block
- End Enum
- Public Structure XINPUT_BATTERY_INFORMATION
- Public BatteryType, BatteryLevel As Byte
- End Structure
- Public Structure XINPUT_GAMEPAD
- Public wButtons As UShort
- Public bLeftTrigger, bRightTrigger As Byte
- Public sThumbLX, sThumbLY, sThumbRX, sThumbRY As Short
- End Structure
- Public Structure XINPUT_STATE
- Public dwPacketNumber As Integer
- Public Gamepad As XINPUT_GAMEPAD
- End Structure
- Public Structure XINPUT_VIBRATION
- Public wLeftMotorSpeed, wRightMotorSpeed As UShort
- Sub New(ByVal LMotor As UShort, ByVal RMotor As UShort)
- wLeftMotorSpeed = LMotor
- wRightMotorSpeed = RMotor
- End Sub
- End Structure
- Public Shared Property Pad0Enabled() As Boolean = False
- Private Shared Pad0LDeadRad As Short = 6554
- Private Shared Pad0RDeadRad As Short = 6554
- Private Shared Pad0LDeadZone As Integer = 42954916
- Private Shared Pad0RDeadZone As Integer = 42954916
- Public Shared Property Pad0LeftDeadZone() As Short
- Get
- Return Pad0LDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad0LDeadRad = value
- Pad0LDeadZone = value
- Pad0LDeadZone *= Pad0LDeadZone
- End Set
- End Property
- Public Shared Property Pad0RightDeadZone() As Short
- Get
- Return Pad0RDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad0RDeadRad = value
- Pad0RDeadZone = value
- Pad0RDeadZone *= Pad0RDeadZone
- End Set
- End Property
- Public Shared Property Pad1Enabled() As Boolean = False
- Private Shared Pad1LDeadRad As Short = 6554
- Private Shared Pad1RDeadRad As Short = 6554
- Private Shared Pad1LDeadZone As Integer = 42954916
- Private Shared Pad1RDeadZone As Integer = 42954916
- Public Shared Property Pad1LeftDeadZone() As Short
- Get
- Return Pad1LDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad1LDeadRad = value
- Pad1LDeadZone = value
- Pad1LDeadZone *= Pad1LDeadZone
- End Set
- End Property
- Public Shared Property Pad1RightDeadZone() As Short
- Get
- Return Pad1RDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad1RDeadRad = value
- Pad1RDeadZone = value
- Pad1RDeadZone *= Pad1RDeadZone
- End Set
- End Property
- Public Shared Property Pad2Enabled() As Boolean = False
- Private Shared Pad2LDeadRad As Short = 6554
- Private Shared Pad2RDeadRad As Short = 6554
- Private Shared Pad2LDeadZone As Integer = 42954916
- Private Shared Pad2RDeadZone As Integer = 42954916
- Public Shared Property Pad2LeftDeadZone() As Short
- Get
- Return Pad2LDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad2LDeadRad = value
- Pad2LDeadZone = value
- Pad2LDeadZone *= Pad2LDeadZone
- End Set
- End Property
- Public Shared Property Pad2RightDeadZone() As Short
- Get
- Return Pad2RDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad2RDeadRad = value
- Pad2RDeadZone = value
- Pad2RDeadZone *= Pad2RDeadZone
- End Set
- End Property
- Public Shared Property Pad3Enabled() As Boolean = False
- Private Shared Pad3LDeadRad As Short = 6554
- Private Shared Pad3RDeadRad As Short = 6554
- Private Shared Pad3LDeadZone As Integer = 42954916
- Private Shared Pad3RDeadZone As Integer = 42954916
- Public Shared Property Pad3LeftDeadZone() As Short
- Get
- Return Pad3LDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad3LDeadRad = value
- Pad3LDeadZone = value
- Pad3LDeadZone *= Pad3LDeadZone
- End Set
- End Property
- Public Shared Property Pad3RightDeadZone() As Short
- Get
- Return Pad3RDeadRad
- End Get
- Set(value As Short)
- If value < 0 Then
- value += 1
- value *= -1
- End If
- Pad3RDeadRad = value
- Pad3RDeadZone = value
- Pad3RDeadZone *= Pad3RDeadZone
- End Set
- End Property
- Public Shared Sub SetStates(Optional ByVal Pad0 As Boolean = False, _
- Optional ByVal Pad1 As Boolean = False, _
- Optional ByVal Pad2 As Boolean = False, _
- Optional ByVal Pad3 As Boolean = False)
- If Pad0 Then Pad0Enabled = True
- If Pad1 Then Pad1Enabled = True
- If Pad2 Then Pad2Enabled = True
- If Pad3 Then Pad3Enabled = True
- End Sub
- Public Shared Function GetStates() As Boolean()
- Return {Pad0Enabled, Pad1Enabled, Pad2Enabled, Pad3Enabled}
- End Function
- Public Shared Sub EnablePad(ByVal PadID As SByte)
- Select Case PadID
- Case 0 : Pad0Enabled = True
- Case 1 : Pad1Enabled = True
- Case 2 : Pad2Enabled = True
- Case 3 : Pad3Enabled = True
- End Select
- End Sub
- Public Shared Sub DisablePad(ByVal PadID As SByte)
- Select Case PadID
- Case 0 : Pad0Enabled = False
- Case 1 : Pad1Enabled = False
- Case 2 : Pad2Enabled = False
- Case 3 : Pad3Enabled = False
- End Select
- End Sub
- Public Shared Function GetBatteryInfos() As XINPUT_BATTERY_INFORMATION()
- Dim R(3) As XINPUT_BATTERY_INFORMATION
- If Pad0Enabled Then XInputGetBatteryInformation(0, R(0))
- If Pad1Enabled Then XInputGetBatteryInformation(1, R(1))
- If Pad2Enabled Then XInputGetBatteryInformation(2, R(2))
- If Pad3Enabled Then XInputGetBatteryInformation(3, R(3))
- Return R
- End Function
- Public Shared Function GetInputs() As XINPUT_STATE()
- Dim States(3) As XINPUT_STATE
- Dim X, Y As Integer
- If Pad0Enabled Then
- XInputGetState(0, States(0))
- X = States(0).Gamepad.sThumbLX
- Y = States(0).Gamepad.sThumbLY
- If DeadZoneMode = ZoneModes.Block Then
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad0LDeadRad AndAlso Y < Pad0LDeadRad Then
- States(0).Gamepad.sThumbLX = 0
- States(0).Gamepad.sThumbLY = 0
- End If
- X = States(0).Gamepad.sThumbRX
- Y = States(0).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad0RDeadRad AndAlso Y < Pad0RDeadRad Then
- States(0).Gamepad.sThumbRX = 0
- States(0).Gamepad.sThumbRY = 0
- End If
- Else
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad0LDeadZone Then
- States(0).Gamepad.sThumbLX = 0
- States(0).Gamepad.sThumbLY = 0
- End If
- X = States(0).Gamepad.sThumbRX
- Y = States(0).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad0RDeadZone Then
- States(0).Gamepad.sThumbRX = 0
- States(0).Gamepad.sThumbRY = 0
- End If
- End If
- End If
- If Pad1Enabled Then
- XInputGetState(1, States(1))
- X = States(1).Gamepad.sThumbLX
- Y = States(1).Gamepad.sThumbLY
- If DeadZoneMode = ZoneModes.Block Then
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad1LDeadRad AndAlso Y < Pad1LDeadRad Then
- States(1).Gamepad.sThumbLX = 0
- States(1).Gamepad.sThumbLY = 0
- End If
- X = States(1).Gamepad.sThumbRX
- Y = States(1).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad1RDeadRad AndAlso Y < Pad1RDeadRad Then
- States(1).Gamepad.sThumbRX = 0
- States(1).Gamepad.sThumbRY = 0
- End If
- Else
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad1LDeadZone Then
- States(1).Gamepad.sThumbLX = 0
- States(1).Gamepad.sThumbLY = 0
- End If
- X = States(1).Gamepad.sThumbRX
- Y = States(1).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad1RDeadZone Then
- States(1).Gamepad.sThumbRX = 0
- States(1).Gamepad.sThumbRY = 0
- End If
- End If
- End If
- If Pad2Enabled Then
- XInputGetState(2, States(2))
- X = States(2).Gamepad.sThumbLX
- Y = States(2).Gamepad.sThumbLY
- If DeadZoneMode = ZoneModes.Block Then
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad2LDeadRad AndAlso Y < Pad2LDeadRad Then
- States(2).Gamepad.sThumbLX = 0
- States(2).Gamepad.sThumbLY = 0
- End If
- X = States(2).Gamepad.sThumbRX
- Y = States(2).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad2RDeadRad AndAlso Y < Pad2RDeadRad Then
- States(2).Gamepad.sThumbRX = 0
- States(2).Gamepad.sThumbRY = 0
- End If
- Else
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad2LDeadZone Then
- States(2).Gamepad.sThumbLX = 0
- States(2).Gamepad.sThumbLY = 0
- End If
- X = States(2).Gamepad.sThumbRX
- Y = States(2).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad2RDeadZone Then
- States(2).Gamepad.sThumbRX = 0
- States(2).Gamepad.sThumbRY = 0
- End If
- End If
- End If
- If Pad3Enabled Then
- XInputGetState(3, States(3))
- X = States(3).Gamepad.sThumbLX
- Y = States(3).Gamepad.sThumbLY
- If DeadZoneMode = ZoneModes.Block Then
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad3LDeadRad AndAlso Y < Pad3LDeadRad Then
- States(3).Gamepad.sThumbLX = 0
- States(3).Gamepad.sThumbLY = 0
- End If
- X = States(3).Gamepad.sThumbRX
- Y = States(3).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- If X < Pad3RDeadRad AndAlso Y < Pad3RDeadRad Then
- States(3).Gamepad.sThumbRX = 0
- States(3).Gamepad.sThumbRY = 0
- End If
- Else
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad3LDeadZone Then
- States(3).Gamepad.sThumbLX = 0
- States(3).Gamepad.sThumbLY = 0
- End If
- X = States(3).Gamepad.sThumbRX
- Y = States(3).Gamepad.sThumbRY
- If X < 0 Then X *= -1
- If Y < 0 Then Y *= -1
- X *= X
- Y *= Y
- If X + Y < Pad3RDeadZone Then
- States(3).Gamepad.sThumbRX = 0
- States(3).Gamepad.sThumbRY = 0
- End If
- End If
- End If
- Return States
- End Function
- Public Shared Sub Vibrate(Optional ByVal Pad0() As UShort = Nothing, _
- Optional ByVal Pad1() As UShort = Nothing, _
- Optional ByVal Pad2() As UShort = Nothing, _
- Optional ByVal Pad3() As UShort = Nothing)
- If Pad0Enabled Then
- If Pad0 IsNot Nothing Then
- If Pad0.Length = 2 _
- Then XInputSetState(0, New XINPUT_VIBRATION(Pad0(0), Pad0(1))) _
- Else XInputSetState(0, StopVibrate)
- End If
- End If
- If Pad1Enabled Then
- If Pad1 IsNot Nothing Then
- If Pad1.Length = 2 _
- Then XInputSetState(1, New XINPUT_VIBRATION(Pad1(0), Pad1(1))) _
- Else XInputSetState(1, StopVibrate)
- End If
- End If
- If Pad2Enabled Then
- If Pad2 IsNot Nothing Then
- If Pad2.Length = 2 _
- Then XInputSetState(2, New XINPUT_VIBRATION(Pad2(0), Pad2(1))) _
- Else XInputSetState(2, StopVibrate)
- End If
- End If
- If Pad3Enabled Then
- If Pad3 IsNot Nothing Then
- If Pad3.Length = 2 _
- Then XInputSetState(3, New XINPUT_VIBRATION(Pad3(0), Pad3(1))) _
- Else XInputSetState(3, StopVibrate)
- End If
- End If
- End Sub
- Public Shared Sub VibratePad(ByVal PadID As Byte, ByVal LMotor As UShort, ByVal RMotor As UShort)
- Select Case PadID
- Case 0 : XInputSetState(0, New XINPUT_VIBRATION(LMotor, RMotor))
- Case 1 : XInputSetState(1, New XINPUT_VIBRATION(LMotor, RMotor))
- Case 2 : XInputSetState(2, New XINPUT_VIBRATION(LMotor, RMotor))
- Case 3 : XInputSetState(3, New XINPUT_VIBRATION(LMotor, RMotor))
- End Select
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement