stk-code_catmod/src/config/device_config.hpp
red-skull c4a24ad6b6 mark conflicts between configuration in blue for #39 (commit with Auria's blessing)
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@9656 178a84e3-b1eb-0310-8ba1-8eac791a3b58
2011-08-29 02:21:50 +00:00

183 lines
6.3 KiB
C++

// $Id$
//
// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2010 SuperTuxKart-Team
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef DEVICE_CONFIG_HPP
#define DEVICE_CONFIG_HPP
#include "input/binding.hpp"
#include "input/input.hpp"
#include "utils/no_copy.hpp"
#include <iosfwd>
#include <irrString.h>
#include <string>
/**
* \ingroup config
*/
enum DeviceConfigType
{
DEVICE_CONFIG_TYPE_GAMEPAD,
DEVICE_CONFIG_TYPE_KEYBOARD
};
//==== D E V I C E C O N F I G =================================================
/**
* \brief contains the key bindings information related to one input device
* \ingroup config
*/
class DeviceConfig : public NoCopy
{
private:
Binding m_bindings[PA_COUNT];
bool m_plugged; //!< Is there a device connected to the system which uses this config?
protected:
bool m_enabled; //!< If set to false, this device will be ignored. Currently for gamepads only
std::string m_name;
DeviceConfigType m_type;
DeviceConfig(DeviceConfigType type)
{
m_type = type;
m_enabled = true;
}
/**
* \brief internal helper method for DeviceConfig::getGameAction and DeviceConfig::getMenuAction
*/
bool doGetAction(Input::InputType type,
const int id,
const int value,
const PlayerAction firstActionToCheck,
const PlayerAction lastActionToCheck,
PlayerAction* action /* out */ );
public:
std::string getName () const { return m_name; };
irr::core::stringw toString ();
DeviceConfigType getType () const { return m_type; }
/** Get a user-readable string describing the bound action */
irr::core::stringw getBindingAsString(const PlayerAction action) const;
/** Get an internal unique string describing the bound action */
irr::core::stringw getMappingIdString (const PlayerAction action) const;
void serialize (std::ofstream& stream);
bool deserializeAction (irr::io::IrrXMLReader* xml);
void setBinding (const PlayerAction action,
const Input::InputType type,
const int id,
Input::AxisDirection direction = Input::AD_NEUTRAL,
wchar_t character=0);
void setPlugged (bool plugged) {m_plugged = plugged;}
bool isPlugged () {return m_plugged;}
/**
* \brief Searches for a game actions associated with the given input event
* \note Don't call this directly unless you are KeyboardDevice or GamepadDevice
* \param[out] action the result, only set if method returned true
* \return whether finding an action associated to this input was successful
*/
bool getGameAction (Input::InputType type,
const int id,
const int value,
PlayerAction* action /* out */);
/**
* \brief Searches for a game actions associated with the given input event
* \note Don't call this directly unless you are KeyboardDevice or GamepadDevice
* \param[out] action the result, only set if method returned true
* \return whether finding an action associated to this input was successful
*/
bool getMenuAction (Input::InputType type,
const int id,
const int value,
PlayerAction* action /* out */);
Binding& getBinding (int i) {return m_bindings[i];}
bool hasBindingFor(const int buttonID) const;
bool hasBindingFor(const int buttonID, PlayerAction from, PlayerAction to) const;
/** At this time only relevant for gamepads, keyboards are always enabled */
bool isEnabled() const { return m_enabled; }
void setEnabled(bool newValue) { m_enabled = newValue; }
};
//==== K E Y B O A R D C O N F I G =============================================
/**
* \brief specialisation of DeviceConfig for keyboard type devices
* \ingroup config
*/
class KeyboardConfig : public DeviceConfig
{
public:
void setDefaultBinds ();
void serialize (std::ofstream& stream);
KeyboardConfig ();
};
//==== G A M E P A D C O N F I G ===============================================
/**
* \brief specialisation of DeviceConfig for gamepad type devices
* \ingroup config
*/
class GamepadConfig : public DeviceConfig
{
private:
int m_axis_count;
int m_button_count;
public:
irr::core::stringw toString ();
int getAxisCount() const { return m_axis_count; };
int getButtonCount() const { return m_button_count; };
void serialize (std::ofstream& stream);
void setDefaultBinds ();
GamepadConfig (irr::io::IrrXMLReader* xml);
GamepadConfig (const std::string name,
const int axis_count,
const int btnCount);
// ~GamepadConfig();
};
#endif