1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-15 19:49:54 +00:00
openmw-tes3mp/apps/openmw/mwinput/inputmanagerimp.hpp

207 lines
6.3 KiB
C++
Raw Normal View History

#ifndef MWINPUT_MWINPUTMANAGERIMP_H
#define MWINPUT_MWINPUTMANAGERIMP_H
#include "../mwgui/mode.hpp"
#include <SDL_sensor.h>
2015-05-13 14:50:47 +00:00
#include <osg/ref_ptr>
2017-11-09 17:26:27 +00:00
#include <osgViewer/ViewerEventHandlers>
2015-05-13 14:50:47 +00:00
#include <extern/oics/ICSChannelListener.h>
#include <extern/oics/ICSInputControlSystem.h>
#include <components/settings/settings.hpp>
2014-12-20 20:46:11 +00:00
#include <components/files/configurationmanager.hpp>
2015-05-13 14:50:47 +00:00
#include <components/sdlutil/events.hpp>
#include "../mwbase/inputmanager.hpp"
2015-05-13 14:50:47 +00:00
#include "actions.hpp"
namespace MWInput
{
class ActionManager;
class ControllerManager;
class MouseManager;
class SensorManager;
}
namespace MWWorld
2010-07-17 17:58:15 +00:00
{
2012-08-12 18:45:02 +00:00
class Player;
2010-07-17 17:58:15 +00:00
}
namespace MWBase
2010-07-17 17:58:15 +00:00
{
2012-08-12 18:45:02 +00:00
class WindowManager;
2010-07-17 17:58:15 +00:00
}
2012-08-12 18:45:02 +00:00
namespace ICS
{
class InputControlSystem;
}
2014-12-20 20:46:11 +00:00
namespace Files
{
struct ConfigurationManager;
}
2015-05-13 14:50:47 +00:00
namespace SDLUtil
{
class InputWrapper;
class VideoWrapper;
2015-05-13 14:50:47 +00:00
}
struct SDL_Window;
2012-08-12 18:45:02 +00:00
namespace MWInput
{
2012-08-12 18:45:02 +00:00
/**
* @brief Class that handles all input and key bindings for OpenMW.
*/
class InputManager :
public MWBase::InputManager,
2015-05-13 14:50:47 +00:00
public SDLUtil::KeyListener,
public SDLUtil::WindowListener,
public ICS::ChannelListener,
public ICS::DetectingBindingListener
2012-08-12 18:45:02 +00:00
{
public:
2015-05-03 15:24:35 +00:00
InputManager(
2015-05-13 14:50:47 +00:00
SDL_Window* window,
osg::ref_ptr<osgViewer::Viewer> viewer,
osg::ref_ptr<osgViewer::ScreenCaptureHandler> screenCaptureHandler,
2017-11-09 17:26:27 +00:00
osgViewer::ScreenCaptureHandler::CaptureOperation *screenCaptureOperation,
const std::string& userFile, bool userFileExists,
2019-08-03 19:55:58 +00:00
const std::string& userControllerBindingsFile,
const std::string& controllerBindingsFile, bool grab);
2012-08-12 18:45:02 +00:00
virtual ~InputManager();
virtual bool isWindowVisible();
/// Clear all savegame-specific data
virtual void clear();
virtual void update(float dt, bool disableControls=false, bool disableEvents=false);
2012-08-12 18:45:02 +00:00
virtual void changeInputMode(bool guiMode);
virtual void processChangedSettings(const Settings::CategorySettingVector& changed);
virtual void setDragDrop(bool dragDrop);
virtual void setGamepadGuiCursorEnabled(bool enabled);
2012-08-12 18:45:02 +00:00
virtual void toggleControlSwitch (const std::string& sw, bool value);
virtual bool getControlSwitch (const std::string& sw);
2012-08-12 18:45:02 +00:00
2012-08-12 23:26:15 +00:00
virtual std::string getActionDescription (int action);
2014-12-09 03:57:32 +00:00
virtual std::string getActionKeyBindingName (int action);
virtual std::string getActionControllerBindingName (int action);
2012-08-12 23:26:15 +00:00
virtual int getNumActions() { return A_Last; }
2014-12-09 03:57:32 +00:00
virtual std::vector<int> getActionKeySorting();
virtual std::vector<int> getActionControllerSorting();
virtual void enableDetectingBindingMode (int action, bool keyboard);
virtual void resetToDefaultKeyBindings();
virtual void resetToDefaultControllerBindings();
2012-08-12 23:26:15 +00:00
virtual void setJoystickLastUsed(bool enabled);
virtual bool joystickLastUsed();
2014-12-20 20:46:11 +00:00
2014-02-13 14:08:40 +00:00
virtual void keyPressed(const SDL_KeyboardEvent &arg );
virtual void keyReleased( const SDL_KeyboardEvent &arg );
2013-06-16 17:43:59 +00:00
virtual void textInput (const SDL_TextInputEvent &arg);
2012-08-12 18:45:02 +00:00
2013-07-29 00:32:08 +00:00
virtual void windowVisibilityChange( bool visible );
virtual void windowFocusChange( bool have_focus );
virtual void windowResized (int x, int y);
virtual void windowClosed ();
2012-08-12 18:45:02 +00:00
virtual void channelChanged(ICS::Channel* channel, float currentValue, float previousValue);
2012-08-12 23:26:15 +00:00
virtual void keyBindingDetected(ICS::InputControlSystem* ICS, ICS::Control* control
2014-09-13 18:39:32 +00:00
, SDL_Scancode key, ICS::Control::ControlChangingDirection direction);
2012-08-12 23:26:15 +00:00
virtual void mouseAxisBindingDetected(ICS::InputControlSystem* ICS, ICS::Control* control
, ICS::InputControlSystem::NamedAxis axis, ICS::Control::ControlChangingDirection direction);
2012-08-12 23:26:15 +00:00
virtual void mouseButtonBindingDetected(ICS::InputControlSystem* ICS, ICS::Control* control
, unsigned int button, ICS::Control::ControlChangingDirection direction);
virtual void mouseWheelBindingDetected(ICS::InputControlSystem* ICS, ICS::Control* control
, ICS::InputControlSystem::MouseWheelClick click, ICS::Control::ControlChangingDirection direction);
virtual void joystickAxisBindingDetected(ICS::InputControlSystem* ICS, int deviceID, ICS::Control* control
2014-12-09 03:57:32 +00:00
, int axis, ICS::Control::ControlChangingDirection direction);
2012-08-12 23:26:15 +00:00
virtual void joystickButtonBindingDetected(ICS::InputControlSystem* ICS, int deviceID, ICS::Control* control
2014-12-09 03:57:32 +00:00
, unsigned int button, ICS::Control::ControlChangingDirection direction);
2012-08-12 23:26:15 +00:00
2014-12-09 03:57:32 +00:00
void clearAllKeyBindings (ICS::Control* control);
void clearAllControllerBindings (ICS::Control* control);
2012-08-12 23:26:15 +00:00
2016-10-20 00:12:01 +00:00
virtual int countSavedGameRecords() const;
virtual void write(ESM::ESMWriter& writer, Loading::Listener& progress);
virtual void readRecord(ESM::ESMReader& reader, uint32_t type);
virtual void setPlayerControlsEnabled(bool enabled);
virtual void resetIdleTime();
2012-08-12 18:45:02 +00:00
private:
SDL_Window* mWindow;
bool mWindowVisible;
ICS::InputControlSystem* mInputBinder;
2012-08-12 18:45:02 +00:00
2015-05-13 14:50:47 +00:00
SDLUtil::InputWrapper* mInputManager;
SDLUtil::VideoWrapper* mVideoWrapper;
2012-08-12 18:45:02 +00:00
std::string mUserFile;
bool mDragDrop;
bool mGrabCursor;
bool mControlsDisabled;
2012-08-17 12:42:42 +00:00
float mPreviewPOVDelay;
2012-08-17 21:31:57 +00:00
float mTimeIdle;
2012-08-13 16:48:50 +00:00
2012-08-12 18:45:02 +00:00
bool mGuiCursorEnabled;
2014-12-09 03:57:32 +00:00
bool mDetectingKeyboard;
float mOverencumberedMessageDelay;
bool mAttemptJump;
2012-08-12 18:45:02 +00:00
std::map<std::string, bool> mControlSwitch;
ActionManager* mActionManager;
ControllerManager* mControllerManager;
MouseManager* mMouseManager;
SensorManager* mSensorManager;
2015-05-14 22:41:21 +00:00
void convertMousePosForMyGUI(int& x, int& y);
2012-08-17 21:31:57 +00:00
void updateIdleTime(float dt);
void handleGuiArrowKey(int action);
void updateCursorMode();
void quickKey (int index);
void showQuickKeysMenu();
2012-08-12 18:45:02 +00:00
bool actionIsActive (int id);
void loadKeyDefaults(bool force = false);
2014-12-09 03:57:32 +00:00
void loadControllerDefaults(bool force = false);
int mFakeDeviceID; //As we only support one controller at a time, use a fake deviceID so we don't lose bindings when switching controllers
2012-08-12 18:45:02 +00:00
};
}
#endif