forked from dolphin-emu/dolphin
		
	
		
			
				
	
	
		
			258 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2013 Dolphin Emulator Project
 | 
						|
// Licensed under GPLv2+
 | 
						|
// Refer to the license.txt file included.
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <map>
 | 
						|
#include <string>
 | 
						|
 | 
						|
namespace ButtonManager
 | 
						|
{
 | 
						|
	enum ButtonType
 | 
						|
	{
 | 
						|
		// GC
 | 
						|
		BUTTON_A = 0,
 | 
						|
		BUTTON_B = 1,
 | 
						|
		BUTTON_START = 2,
 | 
						|
		BUTTON_X = 3,
 | 
						|
		BUTTON_Y = 4,
 | 
						|
		BUTTON_Z = 5,
 | 
						|
		BUTTON_UP = 6,
 | 
						|
		BUTTON_DOWN = 7,
 | 
						|
		BUTTON_LEFT = 8,
 | 
						|
		BUTTON_RIGHT = 9,
 | 
						|
		STICK_MAIN = 10, // Used on Java Side
 | 
						|
		STICK_MAIN_UP = 11,
 | 
						|
		STICK_MAIN_DOWN = 12,
 | 
						|
		STICK_MAIN_LEFT = 13,
 | 
						|
		STICK_MAIN_RIGHT = 14,
 | 
						|
		STICK_C = 15, // Used on Java Side
 | 
						|
		STICK_C_UP = 16,
 | 
						|
		STICK_C_DOWN = 17,
 | 
						|
		STICK_C_LEFT = 18,
 | 
						|
		STICK_C_RIGHT = 19,
 | 
						|
		TRIGGER_L = 20,
 | 
						|
		TRIGGER_R = 21,
 | 
						|
		// Wiimote
 | 
						|
		WIIMOTE_BUTTON_A = 100,
 | 
						|
		WIIMOTE_BUTTON_B = 101,
 | 
						|
		WIIMOTE_BUTTON_MINUS = 102,
 | 
						|
		WIIMOTE_BUTTON_PLUS = 103,
 | 
						|
		WIIMOTE_BUTTON_HOME = 104,
 | 
						|
		WIIMOTE_BUTTON_1 = 105,
 | 
						|
		WIIMOTE_BUTTON_2 = 106,
 | 
						|
		WIIMOTE_UP = 107,
 | 
						|
		WIIMOTE_DOWN = 108,
 | 
						|
		WIIMOTE_LEFT = 109,
 | 
						|
		WIIMOTE_RIGHT = 110,
 | 
						|
		WIIMOTE_IR = 111, // To Be Used on Java Side
 | 
						|
		WIIMOTE_IR_UP = 112,
 | 
						|
		WIIMOTE_IR_DOWN = 113,
 | 
						|
		WIIMOTE_IR_LEFT = 114,
 | 
						|
		WIIMOTE_IR_RIGHT = 115,
 | 
						|
		WIIMOTE_IR_FORWARD = 116,
 | 
						|
		WIIMOTE_IR_BACKWARD = 117,
 | 
						|
		WIIMOTE_IR_HIDE = 118,
 | 
						|
		WIIMOTE_SWING = 119, // To Be Used on Java Side
 | 
						|
		WIIMOTE_SWING_UP = 120,
 | 
						|
		WIIMOTE_SWING_DOWN = 121,
 | 
						|
		WIIMOTE_SWING_LEFT = 122,
 | 
						|
		WIIMOTE_SWING_RIGHT = 123,
 | 
						|
		WIIMOTE_SWING_FORWARD = 124,
 | 
						|
		WIIMOTE_SWING_BACKWARD = 125,
 | 
						|
		WIIMOTE_TILT = 126, // To Be Used on Java Side
 | 
						|
		WIIMOTE_TILT_FORWARD = 127,
 | 
						|
		WIIMOTE_TILT_BACKWARD = 128,
 | 
						|
		WIIMOTE_TILT_LEFT = 129,
 | 
						|
		WIIMOTE_TILT_RIGHT = 130,
 | 
						|
		WIIMOTE_TILT_MODIFIER = 131,
 | 
						|
		WIIMOTE_SHAKE_X = 132,
 | 
						|
		WIIMOTE_SHAKE_Y = 133,
 | 
						|
		WIIMOTE_SHAKE_Z = 134,
 | 
						|
		//Nunchuk
 | 
						|
		NUNCHUK_BUTTON_C = 200,
 | 
						|
		NUNCHUK_BUTTON_Z = 201,
 | 
						|
		NUNCHUK_STICK = 202, // To Be Used on Java Side
 | 
						|
		NUNCHUK_STICK_UP = 203,
 | 
						|
		NUNCHUK_STICK_DOWN = 204,
 | 
						|
		NUNCHUK_STICK_LEFT = 205,
 | 
						|
		NUNCHUK_STICK_RIGHT = 206,
 | 
						|
		NUNCHUK_SWING = 207, // To Be Used on Java Side
 | 
						|
		NUNCHUK_SWING_UP = 208,
 | 
						|
		NUNCHUK_SWING_DOWN = 209,
 | 
						|
		NUNCHUK_SWING_LEFT = 210,
 | 
						|
		NUNCHUK_SWING_RIGHT = 211,
 | 
						|
		NUNCHUK_SWING_FORWARD = 212,
 | 
						|
		NUNCHUK_SWING_BACKWARD = 213,
 | 
						|
		NUNCHUK_TILT = 214, // To Be Used on Java Side
 | 
						|
		NUNCHUK_TILT_FORWARD = 215,
 | 
						|
		NUNCHUK_TILT_BACKWARD = 216,
 | 
						|
		NUNCHUK_TILT_LEFT = 217,
 | 
						|
		NUNCHUK_TILT_RIGHT = 218,
 | 
						|
		NUNCHUK_TILT_MODIFIER = 219,
 | 
						|
		NUNCHUK_SHAKE_X = 220,
 | 
						|
		NUNCHUK_SHAKE_Y = 221,
 | 
						|
		NUNCHUK_SHAKE_Z = 222,
 | 
						|
		//Classic
 | 
						|
		CLASSIC_BUTTON_A = 300,
 | 
						|
		CLASSIC_BUTTON_B = 301,
 | 
						|
		CLASSIC_BUTTON_X = 302,
 | 
						|
		CLASSIC_BUTTON_Y = 303,
 | 
						|
		CLASSIC_BUTTON_MINUS = 304,
 | 
						|
		CLASSIC_BUTTON_PLUS = 305,
 | 
						|
		CLASSIC_BUTTON_HOME = 306,
 | 
						|
		CLASSIC_BUTTON_ZL = 307,
 | 
						|
		CLASSIC_BUTTON_ZR = 308,
 | 
						|
		CLASSIC_DPAD_UP = 309,
 | 
						|
		CLASSIC_DPAD_DOWN = 310,
 | 
						|
		CLASSIC_DPAD_LEFT = 311,
 | 
						|
		CLASSIC_DPAD_RIGHT = 312,
 | 
						|
		CLASSIC_STICK_LEFT = 313, // To Be Used on Java Side
 | 
						|
		CLASSIC_STICK_LEFT_UP = 314,
 | 
						|
		CLASSIC_STICK_LEFT_DOWN = 315,
 | 
						|
		CLASSIC_STICK_LEFT_LEFT = 316,
 | 
						|
		CLASSIC_STICK_LEFT_RIGHT = 317,
 | 
						|
		CLASSIC_STICK_RIGHT = 318, // To Be Used on Java Side
 | 
						|
		CLASSIC_STICK_RIGHT_UP = 319,
 | 
						|
		CLASSIC_STICK_RIGHT_DOWN = 320,
 | 
						|
		CLASSIC_STICK_RIGHT_LEFT = 321,
 | 
						|
		CLASSIC_STICK_RIGHT_RIGHT = 322,
 | 
						|
		CLASSIC_TRIGGER_L = 323,
 | 
						|
		CLASSIC_TRIGGER_R = 324,
 | 
						|
		//Guitar
 | 
						|
		GUITAR_BUTTON_MINUS = 400,
 | 
						|
		GUITAR_BUTTON_PLUS = 401,
 | 
						|
		GUITAR_FRET_GREEN = 402,
 | 
						|
		GUITAR_FRET_RED = 403,
 | 
						|
		GUITAR_FRET_YELLOW = 404,
 | 
						|
		GUITAR_FRET_BLUE = 405,
 | 
						|
		GUITAR_FRET_ORANGE = 406,
 | 
						|
		GUITAR_STRUM_UP = 407,
 | 
						|
		GUITAR_STRUM_DOWN = 408,
 | 
						|
		GUITAR_STICK = 409, // To Be Used on Java Side
 | 
						|
		GUITAR_STICK_UP = 410,
 | 
						|
		GUITAR_STICK_DOWN = 411,
 | 
						|
		GUITAR_STICK_LEFT = 412,
 | 
						|
		GUITAR_STICK_RIGHT = 413,
 | 
						|
		GUITAR_WHAMMY_BAR = 414,
 | 
						|
		//Drums
 | 
						|
		DRUMS_BUTTON_MINUS = 500,
 | 
						|
		DRUMS_BUTTON_PLUS = 501,
 | 
						|
		DRUMS_PAD_RED = 502,
 | 
						|
		DRUMS_PAD_YELLOW = 503,
 | 
						|
		DRUMS_PAD_BLUE = 504,
 | 
						|
		DRUMS_PAD_GREEN	 = 505,
 | 
						|
		DRUMS_PAD_ORANGE = 506,
 | 
						|
		DRUMS_PAD_BASS = 507,
 | 
						|
		DRUMS_STICK = 508, // To Be Used on Java Side
 | 
						|
		DRUMS_STICK_UP = 509,
 | 
						|
		DRUMS_STICK_DOWN = 510,
 | 
						|
		DRUMS_STICK_LEFT = 511,
 | 
						|
		DRUMS_STICK_RIGHT = 512,
 | 
						|
		//Turntable
 | 
						|
		TURNTABLE_BUTTON_GREEN_LEFT = 600,
 | 
						|
		TURNTABLE_BUTTON_RED_LEFT = 601,
 | 
						|
		TURNTABLE_BUTTON_BLUE_LEFT = 602,
 | 
						|
		TURNTABLE_BUTTON_GREEN_RIGHT = 603,
 | 
						|
		TURNTABLE_BUTTON_RED_RIGHT = 604,
 | 
						|
		TURNTABLE_BUTTON_BLUE_RIGHT = 605,
 | 
						|
		TURNTABLE_BUTTON_MINUS = 606,
 | 
						|
		TURNTABLE_BUTTON_PLUS = 607,
 | 
						|
		TURNTABLE_BUTTON_HOME = 608,
 | 
						|
		TURNTABLE_BUTTON_EUPHORIA = 609,
 | 
						|
		TURNTABLE_TABLE_LEFT = 610, // To Be Used on Java Side
 | 
						|
		TURNTABLE_TABLE_LEFT_LEFT = 611,
 | 
						|
		TURNTABLE_TABLE_LEFT_RIGHT = 612,
 | 
						|
		TURNTABLE_TABLE_RIGHT = 613, // To Be Used on Java Side
 | 
						|
		TURNTABLE_TABLE_RIGHT_LEFT = 614,
 | 
						|
		TURNTABLE_TABLE_RIGHT_RIGHT = 615,
 | 
						|
		TURNTABLE_STICK = 616, // To Be Used on Java Side
 | 
						|
		TURNTABLE_STICK_UP = 617,
 | 
						|
		TURNTABLE_STICK_DOWN = 618,
 | 
						|
		TURNTABLE_STICK_LEFT = 619,
 | 
						|
		TURNTABLE_STICK_RIGHT = 620,
 | 
						|
		TURNTABLE_EFFECT_DIAL = 621,
 | 
						|
		TURNTABLE_CROSSFADE = 622, // To Be Used on Java Side
 | 
						|
		TURNTABLE_CROSSFADE_LEFT = 623,
 | 
						|
		TURNTABLE_CROSSFADE_RIGHT = 624,
 | 
						|
	};
 | 
						|
	enum ButtonState
 | 
						|
	{
 | 
						|
		BUTTON_RELEASED = 0,
 | 
						|
		BUTTON_PRESSED = 1
 | 
						|
	};
 | 
						|
	enum BindType
 | 
						|
	{
 | 
						|
		BIND_BUTTON = 0,
 | 
						|
		BIND_AXIS
 | 
						|
	};
 | 
						|
	class Button
 | 
						|
	{
 | 
						|
	private:
 | 
						|
		ButtonState m_state;
 | 
						|
	public:
 | 
						|
		Button() : m_state(BUTTON_RELEASED) {}
 | 
						|
		void SetState(ButtonState state) { m_state = state; }
 | 
						|
		bool Pressed() { return m_state == BUTTON_PRESSED; }
 | 
						|
 | 
						|
		~Button() {}
 | 
						|
	};
 | 
						|
	class Axis
 | 
						|
	{
 | 
						|
	private:
 | 
						|
		float m_value;
 | 
						|
	public:
 | 
						|
		Axis() : m_value(0.0f) {}
 | 
						|
		void SetValue(float value) { m_value = value; }
 | 
						|
		float AxisValue() { return m_value; }
 | 
						|
 | 
						|
		~Axis() {}
 | 
						|
	};
 | 
						|
 | 
						|
	struct sBind
 | 
						|
	{
 | 
						|
		const int _padID;
 | 
						|
		const ButtonType _buttontype;
 | 
						|
		const BindType _bindtype;
 | 
						|
		const int _bind;
 | 
						|
		const float _neg;
 | 
						|
		sBind(int padID, ButtonType buttontype, BindType bindtype, int bind, float neg)
 | 
						|
			: _padID(padID), _buttontype(buttontype), _bindtype(bindtype), _bind(bind), _neg(neg)
 | 
						|
		{}
 | 
						|
	};
 | 
						|
 | 
						|
 | 
						|
	class InputDevice
 | 
						|
	{
 | 
						|
	private:
 | 
						|
		const std::string _dev;
 | 
						|
		std::map<ButtonType, bool> _buttons;
 | 
						|
		std::map<ButtonType, float> _axises;
 | 
						|
 | 
						|
		// Key is padID and ButtonType
 | 
						|
		std::map<std::pair<int, ButtonType>, sBind*> _inputbinds;
 | 
						|
	public:
 | 
						|
		InputDevice(std::string dev)
 | 
						|
			: _dev(dev) {}
 | 
						|
		~InputDevice()
 | 
						|
		{
 | 
						|
			for (const auto& bind : _inputbinds)
 | 
						|
				delete bind.second;
 | 
						|
			_inputbinds.clear();
 | 
						|
		}
 | 
						|
		void AddBind(sBind* bind) { _inputbinds[std::make_pair(bind->_padID, bind->_buttontype)] = bind; }
 | 
						|
		bool PressEvent(int button, int action);
 | 
						|
		void AxisEvent(int axis, float value);
 | 
						|
		bool ButtonValue(int padID, ButtonType button);
 | 
						|
		float AxisValue(int padID, ButtonType axis);
 | 
						|
	};
 | 
						|
 | 
						|
	void Init();
 | 
						|
	bool GetButtonPressed(int padID, ButtonType button);
 | 
						|
	float GetAxisValue(int padID, ButtonType axis);
 | 
						|
	bool GamepadEvent(const std::string& dev, int button, int action);
 | 
						|
	void GamepadAxisEvent(const std::string& dev, int axis, float value);
 | 
						|
	void Shutdown();
 | 
						|
}
 |