[aquaria] joystick support
Mathias Panzenböck
grosser.meister.morti at gmx.net
Sat Apr 23 15:14:51 EDT 2011
Here are some minor improvements and fixes for joystick support and rumble support under Linux:
https://bitbucket.org/panzi/aquaria/changeset/db37df141fdd
Pull URL:
https://bitbucket.org/panzi/aquaria
Changes:
* properly initialize all joystick effect fields
* properly close joystick on shutdown!
* Linux: detect if rumble is supported and don't send rumble events if it isn't
* Linux: translate leftMotor & rightMotor into direction & magnitude
* Linux: wrote about rumble support in README.txt
I recommend to pull this, because at least in theory quitting the game without properly shutting
down the joysticks could cause them to continue rumble without the game running. (If the effect
replay length is long enough. I think it can't be infinite.)
However, I'm not sure if direction is supported in combination with FF_RUMBLE. I can't feel any
difference anyway. I use a XBox 360 Gamepad, which should have two rumble motors. But how these two
motors are meant to be used I'm not sure.
XInput and BBGE denote the motors as "left" and "right", so I figured it might be used to simulate
movement/position (hence the translation to direction). But here the left and right motors are
assigned to low- and high-frequency rumbling:
http://msdn.microsoft.com/en-us/library/dd939192.aspx
But then Linux defines ff_rumble_effect with a strong_magnitude and weak_magnitude field:
https://github.com/mirrors/linux-2.6/blob/master/include/linux/input.h#L1034
Which denote two motors, but yet with another meaning. So now we have 3 possible meanings for the
motors: position, frequency and magnitude.
Maybe I should just use 0 for the direction and assign leftMotor to weak_magnitude and rightMotor to
strong_magnitude? Or the other way around? What do you think?
Also I noticed that joystick support is a bit hacky. Parts of the engine code should be able to cope
with multiple joysticks but then there is always only one joystick object in the game. This is ok
for Aquaria, because it is single player only, but the BBGE should be able to do more.
Also maybe more importantly it means that the user has no choice which joystick device he/she can
use. The user can only use the first joystick (index 0) and has to unplug all joysticks he/she don't
want to use in case they have a smaller index than the one he/she wants to use. Without an UI with
which you would be able to choose the joystick you want to use there isn't another way anyway.
-panzi
More information about the aquaria
mailing list