Implemented basic support for SDL GameController
[supertux.git] / src / control / joystickkeyboardcontroller.hpp
1 //  SuperTux
2 //  Copyright (C) 2006 Matthias Braun <matze@braunis.de>
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 #ifndef HEADER_SUPERTUX_CONTROL_JOYSTICKKEYBOARDCONTROLLER_HPP
18 #define HEADER_SUPERTUX_CONTROL_JOYSTICKKEYBOARDCONTROLLER_HPP
19
20 #include "control/controller.hpp"
21
22 #include <SDL.h>
23 #include <map>
24 #include <string>
25 #include <vector>
26 #include <memory>
27
28 #include "util/reader_fwd.hpp"
29 #include "util/writer_fwd.hpp"
30
31 class Controller;
32 class GameControllerManager;
33 class JoystickManager;
34 class JoystickMenu;
35 class KeyboardMenu;
36 class Menu;
37
38 class JoystickKeyboardController
39 {
40 private:
41   friend class KeyboardMenu;
42   friend class JoystickMenu;
43
44   typedef Controller::Control Control;
45
46   typedef std::map<SDL_Keycode, Control> KeyMap;
47
48 public:
49   JoystickKeyboardController();
50   virtual ~JoystickKeyboardController();
51
52   /** Process an SDL Event and return true if the event has been used
53    */
54   void process_event(const SDL_Event& event);
55
56   void write(Writer& writer);
57   void read(const Reader& lisp);
58   void update();
59   void reset();
60
61   void updateAvailableJoysticks();
62
63   Controller *get_main_controller();
64
65 private:
66   void process_text_input_event(const SDL_TextInputEvent& event);
67   void process_key_event(const SDL_KeyboardEvent& event);
68   void process_console_key_event(const SDL_KeyboardEvent& event);
69   void process_menu_key_event(const SDL_KeyboardEvent& event);
70
71   SDL_Keycode reversemap_key(Control c);
72   void bind_key(SDL_Keycode key, Control c);
73
74 private:
75   std::unique_ptr<Controller> controller;
76 public:
77   bool m_use_game_controller;
78   std::unique_ptr<JoystickManager> joystick_manager;
79   std::unique_ptr<GameControllerManager> game_controller_manager;
80
81 private:
82   KeyMap keymap;
83
84   bool jump_with_up_kbd; // Keyboard up jumps
85
86   int wait_for_key;
87
88 private:
89   JoystickKeyboardController(const JoystickKeyboardController&);
90   JoystickKeyboardController& operator=(const JoystickKeyboardController&);
91 };
92
93 #endif
94
95 /* EOF */