1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class InputAction { public : bool IsDown( void ) const ; bool IsPressed( void ) const ; bool IsReleased( void ) const ; void ClearBindings( void ); void AddBinding( const tbApplication::Key& keyBinding); void RemoveBinding( const tbApplication::Key& keyBinding); private : KeyContainer mKeyBindings; }; |
Just before LudumDare 36 I added a new way to handle input to TurtleBrains framework, it is quite simple but so far I really enjoy the way it is used. It is just a powerful little object that can check the input manager for each of the bound keys allowing an action to bound to:
- Any key (supported by framework)
- Multiple keys at once!
- No keys at all!
The second one is quite interesting, consider implementing a splash or title screen with multiple ways to continue into game. Without the input action, it required multiple checks, and more lengthy code.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { //Old way of performing input check if ( true == Input::IsPressed(KeyEscape) || true == Input::IsPressed(KeySpace) || true == Input::IsPressed(KeyEnter)) { //Goto gameplay scene. } //New way with InputAction: if ( true == mSkipForward.IsPressed()) { //Goto gameplay scene. } } |
Of course to a slight degree this is just moving the code from the update area to initialization:
1 2 3 4 5 | { mSkipForward.AddBinding(KeyEscape); mSkipForward.AddBinding(KeySpace); mSkipForward.AddBinding(KeyEnter); } |
But considering it could allow use WASD and arrows keys for movement, or, with a binding screen the user could configure controls to their own liking. This is the first pass I make over such a system and so far I’ve enjoyed the usage better than the previous methods.