1// SuperTux
2// Copyright (C) 2014 Ingo Ruhnke <grumbel@gmail.com>
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_GAME_CONTROLLER_MANAGER_HPP
18#define HEADER_SUPERTUX_CONTROL_GAME_CONTROLLER_MANAGER_HPP
19
20#include <vector>
21#include <array>
22
23#include "control/controller.hpp"
24
25class InputManager;
26struct SDL_ControllerAxisEvent;
27struct SDL_ControllerButtonEvent;
28struct _SDL_GameController;
29typedef struct _SDL_GameController SDL_GameController;
30
31class GameControllerManager final
32{
33public:
34 GameControllerManager(InputManager* parent);
35 ~GameControllerManager();
36
37 void process_button_event(const SDL_ControllerButtonEvent& ev);
38 void process_axis_event(const SDL_ControllerAxisEvent& ev);
39
40 void on_controller_added(int joystick_index);
41 void on_controller_removed(int instance_id);
42
43private:
44 InputManager* m_parent;
45 int m_deadzone;
46 std::vector<SDL_GameController*> m_game_controllers;
47 std::array<bool, static_cast<int>(Control::CONTROLCOUNT)> m_stick_state;
48 std::array<bool, static_cast<int>(Control::CONTROLCOUNT)> m_button_state;
49
50private:
51 GameControllerManager(const GameControllerManager&) = delete;
52 GameControllerManager& operator=(const GameControllerManager&) = delete;
53};
54
55#endif
56
57/* EOF */
58