Planet
navihomeaboutscreenshotsdownloaddevelopmentforum

Input

This page describes how various user input (keyboard, mouse or joy stick) is being processed. Our goal was to develop a generic implementation that allows to use the input in many different and independent ways. As an example it should not matter to a program whether a mouse button or a key has been pressed.
In order to capture input in the first place, we decided not to reinvent the wheel and use a cross platform library instead: OIS. It provides all the features we need to steer a 3D game.

Wiki articles

Name Description
InputHandler Actual input processor base classes
InputManager Input preprocessing and distribution to states
InputState Redistribution to InputHandlers
KeyBinder Maps keys to commands
OIS Object Oriented input library
InputBuffer Stores text input stream like

Capturing and distributing the input

We get input events from the OIS library in the form a function callback realised with inheritance. The class (and object at the same time) responsible for this task is the InputManager. It initialises the OIS components and input devices and takes care of the so called InputStates. These again, act like input managers themselves in a way, just a lot smaller in implementation.
The general idea behind this concept is the fact that input distribution is heavily dependent on what is currently running. Simple examples are the console (only captures text), a GUI menu or the orxonox level itself.
These InputStates can then hold Handlers that are thought to be fixed when everything is set up. These Handlers do the actual job. For instance the KeyBinder gets an input event and then maps it to an executable command in the form of a string. That command is then passed to the CommandExecutor.
So much about the overall concept. Read more in the corresponding sections, mostly classes though.

Attachments