2022-09-02 11:06:59 +00:00
|
|
|
#pragma once
|
|
|
|
|
2022-09-07 09:02:01 +00:00
|
|
|
#include "engine_api.h"
|
2022-09-02 23:02:09 +00:00
|
|
|
|
2022-09-02 11:06:59 +00:00
|
|
|
#include "inputs/mouse.hpp"
|
|
|
|
#include "inputs/keyboard.hpp"
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
#include <array>
|
|
|
|
#include <string>
|
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
namespace engine {
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-11-30 00:46:03 +00:00
|
|
|
class Window; // "window.hpp"
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
enum class InputDevice : int {
|
|
|
|
MOUSE,
|
|
|
|
KEYBOARD,
|
|
|
|
CONTROLLER,
|
|
|
|
SIZE
|
|
|
|
};
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
// This class should be used to get platform/input-device independent input
|
2022-11-29 14:22:03 +00:00
|
|
|
class ENGINE_API InputManager {
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
public:
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
// requires a window reference to get input from
|
2022-11-29 14:22:03 +00:00
|
|
|
InputManager(const Window* win);
|
|
|
|
InputManager(const InputManager&) = delete;
|
|
|
|
InputManager& operator=(const InputManager&) = delete;
|
|
|
|
~InputManager();
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
// Add a mouse input
|
|
|
|
void addInputButton(const std::string& name, inputs::MouseButton button);
|
|
|
|
void addInputAxis(const std::string& name, inputs::MouseAxis axis);
|
|
|
|
void addInputButtonAsAxis(const std::string& name, inputs::MouseButton high, inputs::MouseButton low);
|
|
|
|
// Add a keyboard input
|
|
|
|
void addInputButton(const std::string& name, inputs::Key button);
|
|
|
|
void addInputButtonAsAxis(const std::string& name, inputs::Key high, inputs::Key low);
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
void delInputButton(int index);
|
|
|
|
void delInputAxis(int index);
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
void setDeviceActive(enum InputDevice device, bool active);
|
|
|
|
bool getDeviceActive(enum InputDevice device) const;
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
float getAxis(const std::string& axisName) const;
|
|
|
|
bool getButton(const std::string& buttonName) const;
|
|
|
|
bool getButtonPress(const std::string& buttonName) const;
|
|
|
|
bool getButtonRelease(const std::string& buttonName) const;
|
2022-09-02 11:06:59 +00:00
|
|
|
|
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
private:
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
struct ButtonEntry {
|
|
|
|
std::string name;
|
|
|
|
enum InputDevice device;
|
|
|
|
int button; // enumeration of device buttons or axes
|
|
|
|
};
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
struct AxisEntry {
|
|
|
|
std::string name;
|
|
|
|
enum InputDevice device;
|
|
|
|
int axis;
|
|
|
|
bool isButtonAxis;
|
|
|
|
int high;
|
|
|
|
int low;
|
|
|
|
};
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-11-29 14:22:03 +00:00
|
|
|
const Window* const m_win;
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
std::vector<struct ButtonEntry> m_buttonEntries;
|
|
|
|
std::vector<struct AxisEntry> m_axisEntries;
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
std::array<bool, static_cast<int>(InputDevice::SIZE)> m_enabledDevices;
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
// private methods
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
float getDeviceAxis(enum InputDevice device, int axis) const;
|
|
|
|
bool getDeviceButton(enum InputDevice device, int button) const;
|
|
|
|
bool getDeviceButtonDown(enum InputDevice device, int button) const;
|
|
|
|
bool getDeviceButtonUp(enum InputDevice device, int button) const;
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
float getButtonAxis(enum InputDevice device, int high, int low) const;
|
|
|
|
|
|
|
|
void addInputButton(const std::string& name, InputDevice device, int button);
|
|
|
|
void addInputAxis(const std::string& name, InputDevice device, int axis);
|
|
|
|
void addInputButtonAsAxis(const std::string& name, InputDevice device, int high, int low);
|
|
|
|
|
|
|
|
};
|
2022-09-02 11:06:59 +00:00
|
|
|
|
2022-10-02 15:34:51 +00:00
|
|
|
}
|