← index
acidcam.web/source/emscripten-libs/mx2/include/joystick.hpp
Source: acidcam.web/source/emscripten-libs/mx2/include/joystick.hpp
#ifndef __JOYSTICK__H__

#define __JOYSTICK__H__


#include"SDL.h"

#include<string>

#include<optional>

#include"wrapper.hpp"


namespace mx {

    class Joystick {
    public:
        Joystick();
        ~Joystick();
        bool open(int index);
        std::string name() const;
        void close();
        std::optional<SDL_Joystick*> handle();
        SDL_Joystick *unwrap() const;
        int joystickIndex() const;
        static int joysticks() {
            return SDL_NumJoysticks();
        }
        int numButtons();
        int numHats();
        int numAxes();

        bool getButton(int button);
        Uint8 getHat(int hat);
        Sint16 getAxis(int axis);

        mx::Wrapper<SDL_Joystick *> wrapper() const {
            if(stick)
                return stick;
            return std::nullopt;
        }
    protected:
        SDL_Joystick *stick = nullptr;
        int index = -1;
    };

    class Controller {
    public:
        Controller();
        ~Controller();
        bool open(int index);
        bool connectEvent(SDL_Event &e);
        std::string name() const;
        void close();
        std::optional<SDL_GameController*> handle();
        SDL_GameController *unwrap() const;
        int controllerIndex() const;
        static int joysticks() {
            return SDL_NumJoysticks();
        }
        bool getButton(SDL_GameControllerButton button);
        Uint8 getHat(int hat);
        Sint16 getAxis(SDL_GameControllerAxis axis);
        mx::Wrapper<SDL_GameController *> wrapper() const {
            if(stick)
                return stick;
            return std::nullopt;
        }
        bool active() const { if(index >= 0 && stick != nullptr) return true; return false; }
    protected:
        SDL_GameController *stick = nullptr;
        int index = -1;
    };
}

#endif