1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2024-12-28 18:18:52 +00:00
OpenMW/apps/openmw/mwinput/inputmanagerimp.hpp

132 lines
4.2 KiB
C++

#ifndef MWINPUT_MWINPUTMANAGERIMP_H
#define MWINPUT_MWINPUTMANAGERIMP_H
#include <memory>
#include <osg/ref_ptr>
#include <osgViewer/ViewerEventHandlers>
#include <components/sdlutil/events.hpp>
#include <components/settings/settings.hpp>
#include <filesystem>
#include "../mwbase/inputmanager.hpp"
#include "actions.hpp"
namespace MWWorld
{
class Player;
}
namespace MWBase
{
class WindowManager;
}
namespace SDLUtil
{
class InputWrapper;
}
struct SDL_Window;
namespace MWInput
{
class ControlSwitch;
class ActionManager;
class BindingsManager;
class ControllerManager;
class KeyboardManager;
class MouseManager;
class SensorManager;
class GyroManager;
/**
* @brief Class that provides a high-level API for game input
*/
class InputManager final : public MWBase::InputManager
{
public:
InputManager(SDL_Window* window, osg::ref_ptr<osgViewer::Viewer> viewer,
osg::ref_ptr<osgViewer::ScreenCaptureHandler> screenCaptureHandler,
osgViewer::ScreenCaptureHandler::CaptureOperation* screenCaptureOperation,
const std::filesystem::path& userFile, bool userFileExists,
const std::filesystem::path& userControllerBindingsFile,
const std::filesystem::path& controllerBindingsFile, bool grab);
~InputManager() final;
/// Clear all savegame-specific data
void clear() override;
void update(float dt, bool disableControls, bool disableEvents = false) override;
void changeInputMode(bool guiMode) override;
void processChangedSettings(const Settings::CategorySettingVector& changed) override;
void setDragDrop(bool dragDrop) override;
void setGamepadGuiCursorEnabled(bool enabled) override;
void toggleControlSwitch(std::string_view sw, bool value) override;
bool getControlSwitch(std::string_view sw) override;
std::string_view getActionDescription(int action) const override;
std::string getActionKeyBindingName(int action) const override;
std::string getActionControllerBindingName(int action) const override;
bool actionIsActive(int action) const override;
float getActionValue(int action) const override;
bool isControllerButtonPressed(SDL_GameControllerButton button) const override;
float getControllerAxisValue(SDL_GameControllerAxis axis) const override;
int getMouseMoveX() const override;
int getMouseMoveY() const override;
int getNumActions() override { return A_Last; }
const std::initializer_list<int>& getActionKeySorting() override;
const std::initializer_list<int>& getActionControllerSorting() override;
void enableDetectingBindingMode(int action, bool keyboard) override;
void resetToDefaultKeyBindings() override;
void resetToDefaultControllerBindings() override;
void setJoystickLastUsed(bool enabled) override;
bool joystickLastUsed() override;
int countSavedGameRecords() const override;
void write(ESM::ESMWriter& writer, Loading::Listener& progress) override;
void readRecord(ESM::ESMReader& reader, uint32_t type) override;
void resetIdleTime() override;
bool isIdle() const override;
void executeAction(int action) override;
bool controlsDisabled() override { return mControlsDisabled; }
private:
void convertMousePosForMyGUI(int& x, int& y);
void handleGuiArrowKey(int action);
void quickKey(int index);
void showQuickKeysMenu();
void loadKeyDefaults(bool force = false);
void loadControllerDefaults(bool force = false);
bool mControlsDisabled;
std::unique_ptr<SDLUtil::InputWrapper> mInputWrapper;
std::unique_ptr<BindingsManager> mBindingsManager;
std::unique_ptr<ControlSwitch> mControlSwitch;
std::unique_ptr<ActionManager> mActionManager;
std::unique_ptr<KeyboardManager> mKeyboardManager;
std::unique_ptr<MouseManager> mMouseManager;
std::unique_ptr<ControllerManager> mControllerManager;
std::unique_ptr<SensorManager> mSensorManager;
std::unique_ptr<GyroManager> mGyroManager;
};
}
#endif