0.4.1 Beta (11/10/07) Got rid of a FIX ME comment; ControlBinder now properly distinguishes between the various fuzzy TYPE_* constants and can pick out separated positive and negative directions if requested The test application now has a '-bind' argument that runs the ControlBinder test instead of the InputDevice test 0.4.0 Beta (1/6/07) Fixed some comments here and there to be more descriptive Added a FIX ME comment about jinput's version Fixed a major bug related to auto-configuring duplicate devices in the InputDevice.countIdenticals(InputDevice[],int) method; sorry I didn't catch this sooner, but I don't have any duplicate controllers just lying about, but now I'm thinking about buying another Saitek rumble pad, for testing purposes and so I'll have one to abuse ;-) Added a rumble(float) method to InputDevice to rumble all rumblers simultaneously; this allows for very easy (but overly simplistic) rumble support in your games; you just rumble when appropriate regardless of support being detected; if it's not supported, nothing happens Added a rumble(float,float) method to InputDevice to produce a 2D rumble force; this falls back on the rumble(float) method on a failure; I suggest using this method for rumbling unless you actually need something more complex (3D rumbling?); like the above, this should can safely be used regardless of support for rumbling being detected 0.3.0 Beta (3/3/06) Finally added store(Hierarchy) and load(Hierarchy) methods to InputDevice Added static load(InputDevice[], Hierarchy) and store(InputDevice[], Hierarchy) methods to InputDevice to make the job of loading and saving InputDevice configurations easier; this will load and store configurations for identical devices based on their arrangement in the array of devices Added some new getDevices() methods to InputDevice that allow configuring the devices with a Hierarchy object as they are constructed 0.2.0 Beta (12/1/05) Minor changes to ControlBinder's main method InputDevice will now default to having dead zones of 0.2 for all fuzzy axes except mouse axes; the greater of 0.2 and the Axis's native dead zone will be used 0.1.0 Alpha (11/29/05) Initial release; I moved the input package to it's own source tree because it just didn't feel right tacking it onto the Action library Participant has been fleshed out alot New interface called Behavior that is used to control how a Participant acts New class called Action that is used by Behavior to communicate with Participant New class called Condition; it's basically a thin wrapper around a HashMap; it's for storing data on conditions in the Participant's environment and extra data for the Behavior itself New package called robot; the classes in it are for simulating vehicles and robots for the action library; look at the Control and Readout interfaces for more info; look at the Robot class, too New class called InputDevice, that'll be inportant for any game; it's used to wrap JInput's net.java.games.input.Controller, so it's actually easy to deal with and the Axes are categorized in a useful manner; it has a static method that will wrap and return all the available Controllers; InputDevice has many utility methods to make things easy; it handles reversing axes for you and makes dealing with dead zones completely transparent; dead zones will still have to be set, since JInput's platform plugins don't seem to bother with this; on top of everything else, InputDevice can also normalize axes for you, which is really useful for using a mouse like a regular game controller; you can get the number and direction of mouse wheel clicks with a handy utility method New class called Test that tests InputDevice and the Controllers it wraps; this is the main class for the input library's jar file New Behavior implementation called ActionMap that maps InputDevice Axes to Action objects and passes them on to the calling Participant New class called ControlBinder; it has a static method to help you get an activated control; this will be useful for the GUI input configuration panel I'm planning; the only catch is that the dead zones must be set to reasonable values before using the binder