BsVirtualInput.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include "BsPrerequisites.h"
  3. #include "CmModule.h"
  4. #include "BsInputConfiguration.h"
  5. namespace BansheeEngine
  6. {
  7. class BS_EXPORT VirtualInput : public Module<VirtualInput>
  8. {
  9. enum class ButtonState
  10. {
  11. Off,
  12. On,
  13. ToggledOn,
  14. ToggledOff
  15. };
  16. struct ButtonData
  17. {
  18. VirtualButton button;
  19. ButtonState state;
  20. UINT64 timestamp;
  21. bool allowRepeat;
  22. };
  23. struct VirtualButtonEvent
  24. {
  25. VirtualButton button;
  26. ButtonState state;
  27. };
  28. public:
  29. VirtualInput();
  30. static std::shared_ptr<InputConfiguration> createConfiguration();
  31. void setConfiguration(const std::shared_ptr<InputConfiguration>& input);
  32. const std::shared_ptr<InputConfiguration>& getConfiguration() const { return mInputConfiguration; }
  33. bool isButtonDown(const VirtualButton& button) const;
  34. bool isButtonUp(const VirtualButton& button) const;
  35. bool isButtonHeld(const VirtualButton& button) const;
  36. void update();
  37. Event<void(const VirtualButton&)> onButtonDown;
  38. Event<void(const VirtualButton&)> onButtonUp;
  39. Event<void(const VirtualButton&)> onButtonHeld;
  40. private:
  41. friend class VirtualButton;
  42. std::shared_ptr<InputConfiguration> mInputConfiguration;
  43. Map<UINT32, ButtonData> mCachedStates;
  44. Queue<VirtualButtonEvent> mEvents;
  45. UINT32 mActiveModifiers;
  46. void buttonDown(const ButtonEvent& event);
  47. void buttonUp(const ButtonEvent& event);
  48. };
  49. }