SuperTuxKart
Loading...
Searching...
No Matches
device_manager.hpp
1//
2// SuperTuxKart - a fun racing game with go-kart
3// Copyright (C) 2010-2015 SuperTuxKart-Team
4//
5// This program is free software; you can redistribute it and/or
6// modify it under the terms of the GNU General Public License
7// as published by the Free Software Foundation; either version 3
8// of the License, or (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program; if not, write to the Free Software
17// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19#ifndef DEVICE_MANAGER_HPP
20#define DEVICE_MANAGER_HPP
21
22#include "input/gamepad_config.hpp"
23#include "input/input_manager.hpp"
24#include "input/keyboard_config.hpp"
25#include "states_screens/state_manager.hpp"
26#include "utils/no_copy.hpp"
27#include "utils/ptr_vector.hpp"
28
29#include <irrArray.h>
30#include <IEventReceiver.h>
31using namespace irr;
32
33class DeviceConfig;
34class InputDevice;
35class GamePadDevice;
36class KeyboardDevice;
38
39
40enum PlayerAssignMode
41{
42 NO_ASSIGN,
43 DETECT_NEW,
44 ASSIGN
45};
46
62class DeviceManager: public NoCopy
63{
64private:
65
68 PtrVector<KeyboardConfig, HOLD> m_keyboard_configs;
69 PtrVector<GamepadConfig, HOLD> m_gamepad_configs;
70 MultitouchDevice* m_multitouch_device;
71
72 InputDevice* m_latest_used_device;
73 PlayerAssignMode m_assign_mode;
74
75
78
84
85
86 InputDevice *mapGamepadInput( Input::InputType type, int deviceID,
87 int btnID, int axisDir,
88 int* value /* inout */,
89 InputManager::InputDriverMode mode,
90 StateManager::ActivePlayer **player /* out */,
91 PlayerAction *action /* out */);
92 InputDevice *mapKeyboardInput(int button_id,
93 InputManager::InputDriverMode mode,
94 StateManager::ActivePlayer **player /* out */,
95 PlayerAction *action /* out */);
96
97 bool load();
98 void shutdown();
99
100public:
101
102
105
106 // ---- Assign mode ----
107 PlayerAssignMode getAssignMode() const { return m_assign_mode; }
108 void setAssignMode(const PlayerAssignMode assignMode);
109
110 // ---- Gamepads ----
111 void addGamepad(GamePadDevice* d);
112 int getGamePadAmount() const { return m_gamepads.size(); }
113 int getGamePadConfigAmount() const { return m_gamepad_configs.size(); }
114 GamePadDevice* getGamePad(const int i) { return m_gamepads.get(i); }
115 GamepadConfig* getGamepadConfig(const int i) { return m_gamepad_configs.get(i); }
116 GamePadDevice* getGamePadFromIrrID(const int i);
117 void clearGamepads();
119 bool getConfigForGamepad(const int sdl_id,
120 const std::string& name,
121 GamepadConfig **config);
122
123 // ---- Keyboard(s) ----
124 void addEmptyKeyboard();
125 void addKeyboard(KeyboardDevice* d);
126 void clearKeyboard();
127 int getKeyboardAmount() { return m_keyboards.size(); }
128 int getActiveKeyboardAmount()
129 {
130 int active = 0;
131 for (unsigned int i=0;i<m_keyboard_configs.size();i++)
132 {
133 if (m_keyboard_configs[i].isEnabled()) active++;
134 }
135 return active;
136 }
137 int getKeyboardConfigAmount() const { return m_keyboard_configs.size(); }
138 KeyboardDevice* getKeyboard(const int i) { return m_keyboards.get(i); }
139 KeyboardConfig* getKeyboardConfig(const int i) { return m_keyboard_configs.get(i); }
140 KeyboardDevice* getKeyboardFromBtnID(const int btnID);
141
142 // ---- Multitouch device ----
143 MultitouchDevice* getMultitouchDevice() { return m_multitouch_device; }
144 void clearMultitouchDevices();
145 void updateMultitouchDevice();
146
147
151 bool deleteConfig(DeviceConfig* config);
152
162 bool translateInput( Input::InputType type,
163 int deviceID,
164 int btnID,
165 int axisDir,
166 int *value /* inout */,
167 InputManager::InputDriverMode mode,
168 StateManager::ActivePlayer** player /* out */,
169 PlayerAction* action /* out */ );
170
171 void clearLatestUsedDevice();
172 InputDevice* getLatestUsedDevice();
173 bool initialize();
174 void save();
175
176 // ------------------------------------------------------------------------
180 // ------------------------------------------------------------------------
188 {
189 m_single_player = p;
190 } // setSinglePlayer
191 // ------------------------------------------------------------------------
195
196}; // DeviceManager
197
198
199#endif
contains the key bindings information related to one input device
Definition: device_config.hpp:42
This class holds the list of all known devices (ands their configurations), as well as the list of cu...
Definition: device_manager.hpp:63
InputDevice * mapGamepadInput(Input::InputType type, int deviceID, int btnID, int axisDir, int *value, InputManager::InputDriverMode mode, StateManager::ActivePlayer **player, PlayerAction *action)
Helper method, only used internally.
Definition: device_manager.cpp:313
void setSinglePlayer(StateManager::ActivePlayer *p)
Sets the ActivePlayer if there is only a single local player.
Definition: device_manager.hpp:187
StateManager::ActivePlayer * getSinglePlayer()
Returns the active player if there is only a single local player.
Definition: device_manager.hpp:179
StateManager::ActivePlayer * m_single_player
Will be non-null in single-player mode.
Definition: device_manager.hpp:77
bool translateInput(Input::InputType type, int deviceID, int btnID, int axisDir, int *value, InputManager::InputDriverMode mode, StateManager::ActivePlayer **player, PlayerAction *action)
Given some input, finds to which device it belongs and, using the corresponding device object,...
Definition: device_manager.cpp:383
bool m_map_fire_to_select
If this is flag is set the next fire event (if the fire key is not mapped to anything else) will be m...
Definition: device_manager.hpp:83
bool getConfigForGamepad(const int sdl_id, const std::string &name, GamepadConfig **config)
Returns the keyboard that has a binding for this button, or NULL if none.
Definition: device_manager.cpp:173
bool load()
Loads the configuration from the user's input.xml file.
Definition: device_manager.cpp:469
bool deleteConfig(DeviceConfig *config)
Delete the given config and removes DeviceManager references to it.
Definition: device_manager.cpp:227
void mapFireToSelect(bool v)
Sets or reset the 'map fire to select' option.
Definition: device_manager.hpp:194
InputDevice * mapKeyboardInput(int button_id, InputManager::InputDriverMode mode, StateManager::ActivePlayer **player, PlayerAction *action)
Helper method, only used internally.
Definition: device_manager.cpp:269
specialisation of Inputdevice for gamepad type devices
Definition: gamepad_device.hpp:33
specialisation of DeviceConfig for gamepad type devices
Definition: gamepad_config.hpp:43
base class for input devices
Definition: input_device.hpp:48
specialisation of DeviceConfig for keyboard type devices
Definition: keyboard_config.hpp:35
specialisation of InputDevice for keyboard type devices
Definition: keyboard_device.hpp:34
Definition: multitouch_device.hpp:76
Utility class, you can inherit from this class to disallow the assignment operator and copy construct...
Definition: no_copy.hpp:26
Definition: ptr_vector.hpp:44
Represents a player that is currently playing.
Definition: state_manager.hpp:76
PlayerAction
types of input events / what actions the players can do
Definition: input.hpp:117