XBox 360 Library for Blitz3D
Submitted by Earok on Tue, 11/02/2010 - 00:00This is the Blitz3D Library I wrote (as part of my re-release project) for adding near complete XBox 360 controller support.
It's free for anyone to use with no limitations whatsoever. I may publish this to the Blitz research site later.
;XBox 360 controller library for Blitz3D by Earok (Earok.Net)
;I declare this code to be in the public domain
;This library provides complete XBox 360 controller support except for the following limitations:
;1. No force feedback support
;2. Left and Right triggers cancel each other out. Holding them both down is the same as holding neither down.
;3. No support for the center glowing button
;Constants defining every XBox 360 button, just pass these to the standard joyhit, joydown functions etc.
Const x360_button_a = 1
Const x360_button_b = 2
Const x360_button_x = 3
Const x360_button_y = 4
Const x360_button_lb = 5
Const x360_button_rb = 6
Const x360_button_back = 7
Const x360_button_start = 8
Const x360_button_lts = 9
Const x360_button_rts = 10
;Uncomment the next line to run an example controller application
;DemoProgram()
;This trims out small values from not quite centered analogue sticks and triggers. You don't need to call this from your game.
;Alter trim value to adjust the "dead zone" from the stick/trigger center.
Const x360_trim_value# = 0.20
Function x360_Trim#(value#)
If(Abs(value#) > x360_trim_value#) Return value#
End Function
;Returns the left trigger value
Function x360_LTrigger#(port=0)
If (JoyZ(port) > x360_trim_value#) Return x360_Trim#(JoyZ(port))
End Function
;Returns the right trigger value
Function x360_RTrigger#(port=0)
If JoyZ(port) < (0 - x360_trim_value) Return x360_Trim#(JoyZ(port)) * -1
End Function
;Returns the X value on the D-Pad
Function x360_DPadX(port=0)
If JoyHat(port) > -1 Then Return x360_Trim#(Sin(JoyHat(port)))
End Function
;Returns the Y value on the D-Pad
Function x360_DPadY(port=0)
If JoyHat(port) > -1 Then Return -x360_Trim#(Cos(JoyHat(port)))
End Function
;Returns the X value on the Left Thumbstick
Function x360_LeftStickX#(port=0)
Return x360_Trim#(JoyX(port))
End Function
;Returns the Y value on the Left Thumbstick
Function x360_LeftStickY#(port=0)
Return x360_Trim#(JoyY(port))
End Function
;Returns the X value on the Right Thumbstick
Function x360_RightStickX#(port=0)
Return x360_Trim#(Sin(JoyPitch(port) / 2))
End Function
;Returns the Y value on the Right Thumbstick
Function x360_RightStickY#(port=0)
Return x360_Trim#(Sin(JoyYaw(port) / 2))
End Function
;Demo application for Xbox 360 controller support
Function DemoProgram()
Local ButtonDefs$[11]
ButtonDefs[0] = "None"
ButtonDefs[1] = "A"
ButtonDefs[2] = "B"
ButtonDefs[3] = "X"
ButtonDefs[4] = "Y"
ButtonDefs[5] = "Left Shoulder"
ButtonDefs[6] = "Right Shoulder"
ButtonDefs[7] = "Back"
ButtonDefs[8] = "Start"
ButtonDefs[9] = "Left Thumbstick"
ButtonDefs[10] = "Right Thumbstick"
While Not KeyHit(1)
Cls()
Text 0,00,"Stick Left X: " + x360_LeftStickX()
Text 0,20,"Stick Left Y: " + x360_LeftStickY()
Text 0,40,"Stick Right X: " + x360_RightStickX()
Text 0,60,"Stick Right Y: " + x360_RightStickY()
Text 0,80,"Left Trigger: " + x360_LTrigger()
Text 0,100,"Right Trigger: " + x360_RTrigger()
Text 0,120,"DPad X: " + x360_DPadX()
Text 0,140,"DPad Y: " + x360_DPadY()
lastpressed = GetJoy()
If lastpressed > 0 Then press = lastpressed
Text 0,160,"Button Pressed: " + ButtonDefs[press]
Text 0,200,"Press Escape to quit"
Flip()
Wend
End Function
Enjoy.