ezEngine  Milestone 7
VirtualThumbStick.h
1 #pragma once
2 
3 #include <Core/Input/InputDevice.h>
4 #include <Core/Input/InputManager.h>
5 #include <Foundation/Math/Vec2.h>
6 
14 class EZ_CORE_DLL ezVirtualThumbStick : public ezInputDevice
15 {
17 
18 public:
21 
24 
26  struct Input
27  {
28  enum Enum
29  {
32  Custom
33  };
34  };
35 
37  struct Output
38  {
39  enum Enum
40  {
49  Custom
50  };
51  };
52 
54  struct CenterMode
55  {
56  enum Enum
57  {
59  ActivationPoint
60  };
61  };
62 
76  void SetInputArea(const ezVec2& vLowerLeft, const ezVec2& vUpperRight, float fThumbstickRadius, float fPriority, CenterMode::Enum center = CenterMode::ActivationPoint);
77 
79  void GetInputArea(ezVec2& out_vLowerLeft, ezVec2& out_vUpperRight);
80 
85  void SetTriggerInputSlot(Input::Enum Input, const ezInputActionConfig* pCustomConfig = nullptr);
86 
91  void SetThumbstickOutput(Output::Enum Output, const char* szOutputLeft = nullptr, const char* szOutputRight = nullptr, const char* szOutputUp = nullptr, const char* szOutputDown = nullptr);
92 
94  void SetAreaFocusMode(ezInputActionConfig::OnEnterArea OnEnter, ezInputActionConfig::OnLeaveArea OnLeave);
95 
97  void SetEnabled(bool bEnabled) { m_bEnabled = bEnabled; }
98 
100  bool IsEnabled() const { return m_bEnabled; }
101 
103  bool IsActive() const { return m_bIsActive; }
104 
105 protected:
106 
107  void UpdateActionMapping();
108 
109  ezVec2 m_vLowerLeft;
110  ezVec2 m_vUpperRight;
111  float m_fRadius;
112 
113  ezInputActionConfig m_ActionConfig;
114  const char* m_szOutputLeft;
115  const char* m_szOutputRight;
116  const char* m_szOutputUp;
117  const char* m_szOutputDown;
118 
119  bool m_bEnabled;
120  bool m_bConfigChanged;
121  bool m_bIsActive;
122  ezString m_sName;
123  ezVec2 m_vCenter;
124  CenterMode::Enum m_CenterMode;
125 
126  static ezInt32 s_iThumbsticks;
127 
128 private:
129 
130  virtual void InitializeDevice() override { }
131  virtual void UpdateInputSlotValues() override;
132  virtual void RegisterInputSlots() override;
133 };
134