Download
122 lines 3.6 KiBCModified 2026-03-31 raw
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
/**
 * Copyright (c) 2006-2026 LOVE Development Team
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 *    claim that you wrote the original software. If you use this software
 *    in a product, an acknowledgment in the product documentation would be
 *    appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 *    misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 **/

#ifndef LOVE_JOYSTICK_JOYSTICK_MODULE_H
#define LOVE_JOYSTICK_JOYSTICK_MODULE_H

// LOVE
#include "common/Module.h"
#include "Joystick.h"

namespace love
{
namespace joystick
{

class JoystickModule : public Module
{
public:

	virtual ~JoystickModule() {}

	/**
	 * Adds a connected Joystick device and opens it for use.
	 * Returns NULL if the Joystick could not be added.
	 **/
	virtual Joystick *addJoystick(int64 deviceid) = 0;

	/**
	 * Removes a disconnected Joystick device.
	 **/
	virtual void removeJoystick(Joystick *joystick) = 0;

	/**
	 * Gets a connected Joystick from its unique Instance ID.
	 * Returns NULL if the instance ID does not correspond to a connected stick.
	 **/
	virtual Joystick *getJoystickFromID(int instanceid) = 0;

	/**
	 * Gets a connected Joystick.
	 * Returns NULL if joyindex is not in the range of [0, getJoystickCount()).
	 **/
	virtual Joystick *getJoystick(int joyindex) = 0;

	/**
	 * Gets the index of a connected joystick.
	 * Returns -1 if the joystick is not connected.
	 **/
	virtual int getIndex(const Joystick *joystick) = 0;

	/**
	 * Gets the number of currently connected Joysticks.
	 **/
	virtual int getJoystickCount() const = 0;

	/**
	 * Sets whether joystick input events are produced while the app doesn't have focus.
	 **/
	virtual void setBackgroundEvents(bool enable) = 0;

	/**
	 * Gets whether joystick input events are produced while the app doesn't have focus.
	 **/
	virtual bool hasBackgroundEvents() const = 0;

	/**
	 * Sets the virtual Gamepad mapping for a joystick input value for all
	 * joystick devices with the specified joystick product GUID.
	 * If any joysticks with the specified GUID are connected, they will be
	 * added as Gamepads if they aren't already, otherwise their Gamepad mapping
	 * will be updated.
	 **/
	virtual bool setGamepadMapping(const std::string &pguid, Joystick::GamepadInput gpinput, Joystick::JoystickInput joyinput) = 0;

	/**
	 * Loads a newline-separated list of virtual Gamepad mapping strings for
	 * multiple joysticks at a time. The mapping strings must have been
	 * generated with saveGamepadMappings, via Steam, or some other tool which
	 * generates SDL GameController mappings.
	 **/
	virtual void loadGamepadMappings(const std::string &mappings) = 0;

	/**
	 * Gets a newline-separated list of virtual Gamepad mapping strings for
	 * all used or modified Joysticks which are identified as Gamepads.
	 **/
	virtual std::string saveGamepadMappings() = 0;

	/**
	 * Gets the gamepad mapping string for the given GUID.
	 **/
	virtual std::string getGamepadMappingString(const std::string &guid) const = 0;

protected:

	JoystickModule(const char *name)
		: Module(M_JOYSTICK, name)
	{}

}; // JoystickModule

} // joystick
} // love

#endif // LOVE_JOYSTICK_JOYSTICK_MODULE_H