= Input Management = [[TracNav(TracNav/TOC_Coding)]] 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. [[br]] In order to capture input in the first place, we decided not to reinvent the wheel and use a cross platform library instead: [wiki:OIS]. It provides all the features we need to steear a 3D game. == Wiki articles == || Name || Description || || || || || [wiki:InputHandler] || Actual input processor base classes || || [wiki:InputManager] || Input preprocessing and distribution to states || || [wiki:InputState] || Redistribution to InputHandlers || || [wiki:KeyBinder] || Maps keys to commands || || [wiki:OIS] || Object Oriented input library || || [wiki: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 [wiki:InputManager]. It initialises the OIS components and input devices and takes care of the so called [wiki:InputState InputStates]. These again, act like input managers themselves in a way, just a lot smaller in implementation.[[br]] 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.[[br]] These InputStates can then hold [wiki:InputHandler Handlers] that are thought to be fixed when everything is set up. These Handlers do the actual job. For instance the [wiki: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 [wiki:CommandExecutor].[[br]] So much about the overall concept. Read more in the corresponding sections, mostly classes though.[[br]][[br]] [[Image(Input:Distribution.png)]]