# Common Organization of Controls Kit

Note:
Current version: 1.3
The library does not currently have examples.

Common Organization of Controls Kit is a tool for handling control over your LÖVE games.

This is an input handling library. It enables you to easily define a (several of) set of control bindings to be used in your game, and provides a very user-friendly methods for handling it, e.g. you can access all gathered data as a table member, and it has a function to grab a user input to store it into control map, and to unset it, which is really handy in controls setup screen etc. Check out the demo! http://love2d.org/forums/download/file.php?id=8398

This library have much detail to it, please consutlt the manual.

NOTE: the library only support latest released version of LÖVE, and the author only support latest released version of the library. There may be no backwards compatibility.

## Features

- Multiple separate control objects
- Comprehensive controls setup
- Support for "defaults"
- All available input devices supported
- Capture and bind user input
- Joystick deadzones and hat remapping, hat modes, pick up previously used joysticks
- Delta modes and inversion modes
- Literal or numerical arguments to functions; number of helper functions

Scheduled:

- XBox360 controller support for all OSes (for now only works with Windows, partially)
- Functions to save/load configurations (for now simple serialization of the object will do)

## Links

- Project page: http://raidho36.net/stuff/cock
- Forum thread: http://love2d.org/forums/viewtopic.php?f=5&t=40089

## Changelog

- 1.3:
  - fixed:
    - code refactoring; improved consistency
    - fixed broken event handler locks
    - generating random IDs now work properly
    - fixed issue with spacebar key and :explodeCapturedData/:bind ( unexplodedData ) functions
    - fixed all :*Joystick* functions.
    - :addJoystick will now create a dummy joystick if it's impossible to actually create the joystick
  - added:
    - .defaultOption and defaultConfig fields
    - :convetJoystickHat, :convertJoystickHatMode, :convertKey
    - :find returns control object with given ID
    - :updateAll updates all registered objects
    - :addJoystick and :removeJoystick (handled automatically)
    - .controlcaptured, .controlpeaked, .controlzeroed, .controlpressed, .controlreleased, .controlchanged callbacks
    - :setCallbacks for enabling/disabling above callbacks
    - addded 4-way diagonal hat mode (4-way input, diagonal input generates both conjuncted directions input)
  - changed:
    - control objects now have unique identifiers
    - control binds data will no longer accept one-default arranged data
    - event callbacks are now supplied with ID of the sender object
    - all joystick-related functions now have "device id" field which specifies the joystick used in terms of control object
    - :setDefaultXBox360 now accepts device ID to use
    - :capturedDataExplode renamed to :explodeCapturedData (lol)
    - conversion functions now have argument "literal" to force either literal or numerical output
    - :getBinded and pals are now return raw unconverted data
    - :setCapture function will now by default invoke the callback
    - renamed joystick hat modes
    - lookup tables will now grow further to avoid extra garbage/increase function performance
    - :setDefaultXBox360 now returns joystick ID (could change)
  - removed:
    - :setControlMode and pals
    - :setDefaultXBox360 for Linux and OS X
- 1.2:
  - fixed:
    - a bunch of potential pitfalls
    - joystick axes and hats are now correctly captured
  - added:
    - no-cutoff for negative values for inversion
    - multiple binds per action via "options" tables
    - :setJoystickDeadzone and getJoystickDeadzone gets and sets joystick deadzone per axis
    - :getJoysticksList returns list of all found joysticks names and numbers
    - :remapJoystickHat maps four joystick buttons to act like joystick hat
    - :bind directly binds mappings
    - :getBinded returns list of binds for map
    - :getEmptyOption returns next (in arbitrary order) unused option for map
    - :getControlModesList returns list of all control modess
    - :getConvertedDevice, :getConvertedAxis, :getConvertedInverse, :getConvertedDelta
    - cutoff delta modes and inversion modes (only pass positive/negative part)
    - :setDefaultXBox360 function (currently used XBox360 controller API in Windows version sucks pretty hard)
    - :capturedDataExplode helper function (can't pass table to LÖVE's events)
  - changed:
    - :setCapture now accepts "callback" argument to be used instead of instant automatical binding
    - :grab now would either call callback function or instantly bind captured input
    - :unset renamed to :unbind
    - controls data table for assignment now have different format
    - :getJoystickHatMode and :getControlMode now only return literal value
    - joystick axis delta mode no longer requires stick to be on the corresponding side either (that was silly, too)
  - removed:
    - :getDeviceName (replaced with :getBinded)
- 1.1:
  - fixed:
    - capturing an input now sets both "previous" and "current" tables to captured input value
    - mouse axis delta mode no longer requires mouse pointer to be on the corresponding side of the offset
  - added:
    - getDeviceName function returns literal name of a device assiged to specified map
  - changed:
    - reloadJoystick now returns true on success

- 1.0:
  - first release version

## See also

- TLbind
- Common Organization of Controls Kit Manual

Category:

- Libraries