Computer Science Canada Turing Joystick Module PoC |
Author: | ericfourfour [ Sat Nov 18, 2006 12:19 am ] | ||
Post subject: | Turing Joystick Module PoC | ||
This is simply a proof of concept showing that the Turing Joystick module actually has a lot of capabilities. I think it covers every button on my controller. The only problem is the Joystick module is very undocumented. All of the stuff used in the following program has no help or tutorials on it what-so-ever. I learned by analyzing the module and by using trial and error. In the following program you control the two dots with the two analog stick. The left one controls the black dot and the right one controls the red dot. Buttons 1, 2, 3, 4 (that is what they are called on my controller) will make boxes appear at the side of the screen. The code is really messy and has no comments so don't expect to understand it.
I'm thinking of making a joystick event handler to simplify use with the Joystick. I think it would really make games more interesting if they used controllers. I've tested this using a logitech rumblepad2. If you could test it with other devices (like maybe a steering wheel or an actual joystick!) that would be cool. Any feedback would be appreciated. |
Author: | Wolf_Destiny [ Sat Nov 18, 2006 9:55 pm ] | ||
Post subject: | |||
Actually I've been looking at the joystick module, (and I should probably make a tutorial for it or something) and it has a procedure which works much like Mouse.Where Joystick Module wrote: procedure GetInfo(jNum: int, var xpos: int, var ypos: int,
var btn1pressed: boolean, var btn2pressed: boolean) "Yeah because that makes sense right?" Yeah! Yeah it does! Lemme explain... mousewhere uses x,y,button right? Joystick.GetInfo uses id,x,y,btn1,btn2. Piece by piece: jNum :int --> The Joystick number or ID. Basically it'll either be 0 or 1 most of the time. Using "joyStick1" (or 2) works in it's place. Quote: Joystick.GetInfo (joyStick1
var xpos:int --> X position of the joystick. Actual values depend on your joystick, however it'll be +ve or -ve or 0 depending on position. Quote: var x : int := 0
Joystick.GetInfo (joyStick1,x var ypos:int --> Y position of the joystick. Actual values depend on your joystick, however it'll be +ve or -ve or 0 depending on position. Quote: var x,y : int := 0
Joystick.GetInfo (joyStick1,x,y var btn1pressed : boolean --> has button number 1 been pressed? True or false. Quote: var x,y : int := 0
var btn1 : boolean Joystick.GetInfo (joyStick1,x,y,btn1 var btn2pressed : boolean --> has button number 2 been pressed? True or false. Quote: var x,y : int := 0
var btn1,btn2 : boolean Joystick.GetInfo (joyStick1,x,y,btn1,btn2) "Okay cool, that's great... really! But....what?" If you were using mousewhere you would make a program to act based on the x and y position of the cursor right? Same thing with the joystick. "But what about the buttons?" if btn1 then put "OMG you just pressed button 1 on the joystick" end if So how the heck do you actually use the joystick? Well that's for you to decide! *cough*flight sim in turing*cough* jk ... Anyways...so say you want to position a dot at the x and y value of the joystick...
Also here is the documentation that even Turing keeps saying doesn't exist: Turing's Documentation wrote: Joystick.GetInfo Part of Joystick module
Syntax Joystick.GetInfo (joystick : int, var xPos, yPos : int, btn1Pressed, btn2Pressed : boolean) Description Reads the position and button status of the joystick specified by the joystack parameter. The x and y parameter are returned in the xPos and yPos parameters. If button 1 or button 2 on the joystick are currently pressed, btn1Pressed and btn2Pressed will be set to true. The joystick parameter can be either joystick1 or joystick2. The x and y positions vary from joyMin to joyMax. To use them with respect to a screen, the coordinates returned from Joystick.GetInfo must be translated into screen coordinates. The following formula can be used: screenX = round (maxx * (xPos joyMin) / (joyMax joyMin)) screenY = round (maxy * (yPos joyMin) / (joyMax joyMin)) Details The Joystick module contains undocumented subprograms for those who need to access more than two buttons or axes on a joystick. Contact Holt Software if you need more information. Example The following program outputs the current location of joystick #1 and draws a cursor on the screen to point out where it is showing. var jx, jy, x, y, ox, oy : int := 1 var b1, b2, oB1, oB2 : boolean := false loop Joystick.GetInfo (joystick1, jx, jy, b1, b2) % Convert joystick coordinates into screen coordinates. x = round (maxx * (jx joyMin) / (joyMax joyMin)) y = round (maxy * (jy joyMin) / (joyMax joyMin)) if x not= ox or y not= oy or b1 not= oB1 or b2 not= oB2 then Text.Locate (1, 1) put "x = ", x, " y = ", y, " b1 = ", b1, " b2 = ", b2 View.Set ("xor") Draw.Line (ox 10, oy, ox + 10, oy, brightred) Draw.Line (ox , oy 10, ox , oy + 10, brightred) Draw.Line (x 10, y, x + 10, y, brightred) Draw.Line (x, y 10, x, y + 10, brightred) ox := x oy := y oB1 := b1 oB2 := b2 end if end loop Status Exported qualified. This means that you can only call the function by calling Joystick.GetInfo, not by calling GetInfo ~Wolf_Destiny Making joystick modules available to the typeless typers (aka people who don't know what a type is or how it can enrich their lives) Edit: I'll test yours with an actual joystick tommorrow when I've got access to my computer again and I'll post the results. Edit: Also the Joystick module is VERY customizable. I suggest everyone look into it. |
Author: | ericfourfour [ Sun Nov 19, 2006 1:13 am ] |
Post subject: | |
Actually, the one you just wrote about was the only part documented. There is way more abilities undocumented. You can get the status of up 32 different buttons. It supports 3 analog sticks and the D-Pad (POV). It is however, difficult to work with the 32 buttons. The way it works is it adds the buttons value together. Each button value is a different power of 2. That means there is no combinations of buttons that can have the same sum as a different combination. It also can tell you how many buttons are pressed to simplify things. |
Author: | ericfourfour [ Sun Nov 19, 2006 2:10 am ] | ||
Post subject: | |||
I have made a new joystick program. This one tells you which button is being pressed. The ButtonEvent class uses 2 recursions to sort out which button is being pressed so don't expect to understand it easily.
|