Gin
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Attributes | List of all members
GameControllerManager Class Reference

Cross-platform game controller manager. More...

#include <gin_gamecontrollermanager.h>

Inherits juce::Timer.

Classes

class  Backend
 Platform extension point. More...
 
class  Listener
 
struct  PollState
 Snapshot of a single controller's state, written by a Backend. More...
 

Public Member Functions

 GameControllerManager ()
 
 ~GameControllerManager () override
 
GameControllergetController (int index) noexcept
 Returns the controller at the given port, or nullptr if out of range.
 
int getNumConnectedControllers () const noexcept
 Returns the number of currently-connected controllers.
 
void setTriggerThreshold (float threshold) noexcept
 Trigger axis threshold above which the trigger is reported as a digital button press (Button::leftTrigger / Button::rightTrigger).
 
void setPollIntervalHz (int hz)
 Sets the poll rate.
 
void addListener (Listener *l)
 
void removeListener (Listener *l)
 

Static Public Attributes

static constexpr int maxControllers = 8
 Maximum number of simultaneously-tracked controllers.
 

Detailed Description

Cross-platform game controller manager.

Create one instance — typically as a long-lived member of your application or game state — and register Listeners to receive connect/disconnect, button, and axis events on the JUCE message thread.

class Game : private gin::GameControllerManager::Listener
{
public:
    Game() { controllers.addListener (this); }

    void controllerConnected (gin::GameController& c) override
    {
        DBG ("Connected: " << c.getName() << " on port " << c.getIndex());
    }

    void controllerButtonPressed (gin::GameController& c,
                                  gin::GameController::Button b) override
    {
        if (b == gin::GameController::Button::faceDown)
            jump();
    }

private:
    gin::GameControllerManager controllers;
};

The manager polls platform backends on a timer (default 60 Hz) and diffs state against the previous frame to emit listener callbacks. Polling rate can be changed with setPollIntervalHz().

Constructor & Destructor Documentation

◆ GameControllerManager()

GameControllerManager::GameControllerManager ( )

◆ ~GameControllerManager()

GameControllerManager::~GameControllerManager ( )
override

Member Function Documentation

◆ getController()

GameController * GameControllerManager::getController ( int  index)
noexcept

Returns the controller at the given port, or nullptr if out of range.

The returned pointer is stable for the lifetime of the manager. Use GameController::isConnected() to check whether anything is plugged in.

◆ getNumConnectedControllers()

int GameControllerManager::getNumConnectedControllers ( ) const
noexcept

Returns the number of currently-connected controllers.

◆ setTriggerThreshold()

void GameControllerManager::setTriggerThreshold ( float  threshold)
noexcept

Trigger axis threshold above which the trigger is reported as a digital button press (Button::leftTrigger / Button::rightTrigger).

Default 0.5.

◆ setPollIntervalHz()

void GameControllerManager::setPollIntervalHz ( int  hz)

Sets the poll rate.

Range is clamped to 10..240 Hz. Default 60.

◆ addListener()

void GameControllerManager::addListener ( Listener l)

◆ removeListener()

void GameControllerManager::removeListener ( Listener l)

Member Data Documentation

◆ maxControllers

constexpr int GameControllerManager::maxControllers = 8
staticconstexpr

Maximum number of simultaneously-tracked controllers.


The documentation for this class was generated from the following file: