DDNet documentation
Loading...
Searching...
No Matches
touch_controls.h
Go to the documentation of this file.
1#ifndef GAME_CLIENT_COMPONENTS_TOUCH_CONTROLS_H
2#define GAME_CLIENT_COMPONENTS_TOUCH_CONTROLS_H
3
4#include <base/color.h>
5#include <base/vmath.h>
6
7#include <engine/input.h>
8
10#include <game/client/ui_rect.h>
11
12#include <array>
13#include <chrono>
14#include <functional>
15#include <memory>
16#include <optional>
17#include <string>
18#include <vector>
19
20class CJsonWriter;
21typedef struct _json_value json_value;
22
24{
25public:
26 static constexpr const int BUTTON_SIZE_SCALE = 1000000;
27 static constexpr const int BUTTON_SIZE_MINIMUM = 50000;
28 static constexpr const int BUTTON_SIZE_MAXIMUM = 500000;
44
45 int Sizeof() const override { return sizeof(*this); }
46 void OnInit() override;
47 void OnReset() override;
48 void OnWindowResize() override;
49 bool OnTouchState(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates) override;
50 void OnRender() override;
51
52 bool LoadConfigurationFromFile(int StorageType);
56
69 bool IsEditingActive() const { return m_EditingActive; }
70 void SetEditingActive(bool EditingActive) { m_EditingActive = EditingActive; }
71 bool HasEditingChanges() const { return m_EditingChanges; }
72 void SetEditingChanges(bool EditingChanges) { m_EditingChanges = EditingChanges; }
73
75 {
76 public:
77 int m_X;
78 int m_Y;
79 int m_W;
80 int m_H;
81 float Distance(const CUnitRect &Other) const;
82 bool IsOverlap(const CUnitRect &Other) const
83 {
84 return (m_X < Other.m_X + Other.m_W) && (m_X + m_W > Other.m_X) && (m_Y < Other.m_Y + Other.m_H) && (m_Y + m_H > Other.m_Y);
85 }
86 bool operator==(const CUnitRect &Other) const
87 {
88 return m_X == Other.m_X && m_Y == Other.m_Y && m_W == Other.m_W && m_H == Other.m_H;
89 }
90 };
91
109
116
118 {
119 public:
140
142 const char *m_pLabel;
143 };
144
145private:
146 static constexpr const char *const DIRECT_TOUCH_INGAME_MODE_NAMES[(int)EDirectTouchIngameMode::NUM_STATES] = {"disabled", "action", "aim", "fire", "hook"};
147 static constexpr const char *const DIRECT_TOUCH_SPECTATE_MODE_NAMES[(int)EDirectTouchSpectateMode::NUM_STATES] = {"disabled", "aim"};
148 static constexpr const char *const SHAPE_NAMES[(int)EButtonShape::NUM_SHAPES] = {"rect", "circle"};
149
151 {
152 public:
155
157 m_Type(Type), m_Parity(Parity) {}
158 };
159
161 {
162 public:
163 const char *m_pId;
164 std::function<bool()> m_Function;
165 };
166
168
169 enum
170 {
175 };
176
177 static constexpr const char *const LABEL_TYPE_NAMES[(int)CButtonLabel::EType::NUM_TYPES] = {"plain", "localized", "icon"};
178
179public:
180 class CTouchButtonBehavior;
181
183 {
184 public:
185 CTouchButton(CTouchControls *pTouchControls);
186 CTouchButton(CTouchButton &&Other) noexcept;
187 CTouchButton(const CTouchButton &Other) = delete;
188
189 CTouchButton &operator=(const CTouchButton &Other) = delete;
190 CTouchButton &operator=(CTouchButton &&Other) noexcept;
191
193
194 CUnitRect m_UnitRect; // {0,0,BUTTON_SIZE_MINIMUM,BUTTON_SIZE_MINIMUM} = default
196
197 EButtonShape m_Shape; // Rect = default
198 int m_BackgroundCorners; // only used with EButtonShape::RECT
199
200 std::vector<CButtonVisibility> m_vVisibilities;
201 std::unique_ptr<CTouchButtonBehavior> m_pBehavior; // nullptr = default. In button editor the default is bind behavior with nothing.
202
204 std::chrono::nanoseconds m_VisibilityStartTime;
205
206 void UpdatePointers();
209
210 vec2 ClampTouchPosition(vec2 TouchPosition) const;
211 bool IsInside(vec2 TouchPosition) const;
214 bool IsVisible() const;
215 // Force using Selected for button colors, Rect for rendering rects.
216 void Render(std::optional<bool> Selected = std::nullopt, std::optional<CUnitRect> Rect = std::nullopt) const;
217 void WriteToConfiguration(CJsonWriter *pWriter);
218 };
219
221 {
222 public:
225
226 bool m_Active; // variables below must only be used when active
230 std::chrono::nanoseconds m_ActivationStartTime;
231
232 virtual ~CTouchButtonBehavior() = default;
233 virtual void Init(CTouchButton *pTouchButton);
234
235 void Reset();
236 void SetActive(const IInput::CTouchFingerState &FingerState);
237 void SetInactive(bool ByFinger);
238 bool IsActive() const;
239 bool IsActive(const IInput::CTouchFinger &Finger) const;
240
241 virtual CButtonLabel GetLabel() const = 0;
242 virtual void OnActivate() {}
243 virtual void OnDeactivate(bool ByFinger) {}
244 virtual void OnUpdate() {}
245 virtual void WriteToConfiguration(CJsonWriter *pWriter) = 0;
246 virtual const char *GetBehaviorType() const = 0;
247 };
248
255 {
256 public:
257 static constexpr const char *const BEHAVIOR_TYPE = "predefined";
258
260 m_pId(pId) {}
261
266 void WriteToConfiguration(CJsonWriter *pWriter) override;
267 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
268 const char *GetPredefinedType() { return m_pId; }
269
270 private:
271 const char *m_pId;
272 };
273
275 {
276 public:
277 static constexpr const char *const BEHAVIOR_ID = "ingame-menu";
278
281
282 CButtonLabel GetLabel() const override;
283 void OnDeactivate(bool ByFinger) override;
284 };
285
287 {
288 public:
289 static constexpr const char *const BEHAVIOR_ID = "extra-menu";
290
292
293 CButtonLabel GetLabel() const override;
294 void OnDeactivate(bool ByFinger) override;
295 int GetNumber() const { return m_Number; }
296 void WriteToConfiguration(CJsonWriter *pWriter) override;
297
298 private:
300 char m_aLabel[16];
301 };
302
304 {
305 public:
306 static constexpr const char *const BEHAVIOR_ID = "emoticon";
307
310
311 CButtonLabel GetLabel() const override;
312 void OnDeactivate(bool ByFinger) override;
313 };
314
316 {
317 public:
318 static constexpr const char *const BEHAVIOR_ID = "spectate";
319
322
323 CButtonLabel GetLabel() const override;
324 void OnDeactivate(bool ByFinger) override;
325 };
326
328 {
329 public:
330 static constexpr const char *const BEHAVIOR_ID = "swap-action";
331
334
335 CButtonLabel GetLabel() const override;
336 void OnActivate() override;
337 void OnDeactivate(bool ByFinger) override;
338
339 private:
341 };
342
344 {
345 public:
346 static constexpr const char *const BEHAVIOR_ID = "use-action";
347
350
351 CButtonLabel GetLabel() const override;
352 void OnActivate() override;
353 void OnDeactivate(bool ByFinger) override;
354
355 private:
357 };
358
360 {
361 public:
364
365 CButtonLabel GetLabel() const override;
366 void OnActivate() override;
367 void OnDeactivate(bool ByFinger) override;
368 void OnUpdate() override;
369 int ActiveAction() const { return m_ActiveAction; }
370 virtual int SelectedAction() const = 0;
371
372 private:
374 };
375
377 {
378 public:
379 static constexpr const char *const BEHAVIOR_ID = "joystick-action";
380
383
384 int SelectedAction() const override;
385 };
386
388 {
389 public:
390 static constexpr const char *const BEHAVIOR_ID = "joystick-aim";
391
394
395 int SelectedAction() const override;
396 };
397
399 {
400 public:
401 static constexpr const char *const BEHAVIOR_ID = "joystick-fire";
402
405
406 int SelectedAction() const override;
407 };
408
410 {
411 public:
412 static constexpr const char *const BEHAVIOR_ID = "joystick-hook";
413
416
417 int SelectedAction() const override;
418 };
419
424 {
425 public:
426 static constexpr const char *const BEHAVIOR_TYPE = "bind";
427
428 CBindTouchButtonBehavior(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand) :
429 m_Label(pLabel),
430 m_LabelType(LabelType),
431 m_Command(pCommand) {}
432
433 CButtonLabel GetLabel() const override;
434 const char *GetCommand() const { return m_Command.c_str(); }
435 void OnActivate() override;
436 void OnDeactivate(bool ByFinger) override;
437 void OnUpdate() override;
438 void WriteToConfiguration(CJsonWriter *pWriter) override;
439 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
440
441 private:
442 std::string m_Label;
444 std::string m_Command;
445
446 bool m_Repeating = false;
447 std::chrono::nanoseconds m_LastUpdateTime;
448 std::chrono::nanoseconds m_AccumulatedRepeatingTime;
449 };
450
455 {
456 public:
457 static constexpr const char *const BEHAVIOR_TYPE = "bind-toggle";
458
460 {
461 public:
462 std::string m_Label;
464 std::string m_Command;
465
466 CCommand(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand) :
467 m_Label(pLabel),
468 m_LabelType(LabelType),
469 m_Command(pCommand) {}
471 m_LabelType(CButtonLabel::EType::PLAIN) {}
472 };
473
474 CBindToggleTouchButtonBehavior(std::vector<CCommand> &&vCommands) :
475 m_vCommands(std::move(vCommands)) {}
476
477 CButtonLabel GetLabel() const override;
478 std::vector<CCommand> GetCommand() const { return m_vCommands; }
480 void OnActivate() override;
481 void WriteToConfiguration(CJsonWriter *pWriter) override;
482 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
483
484 private:
485 std::vector<CCommand> m_vCommands;
487 };
488
489private:
496
503
510
516 ColorRGBA m_BackgroundColorActive = ColorRGBA(0.2f, 0.2f, 0.2f, 0.25f);
517
523 std::vector<CTouchButton> m_vTouchButtons;
524
529
534
539
545
547 {
548 public:
549 bool m_Active = false;
551 };
552
557
562 std::vector<IInput::CTouchFinger> m_vStaleFingers;
563
567 bool m_EditingActive = false;
568
572 bool m_EditingChanges = false;
573
575 int NextActiveAction(int Action) const;
576 int NextDirectTouchAction() const;
577 void UpdateButtonsGame(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates);
578 void ResetButtons();
579 void RenderButtonsGame();
581
582 bool ParseConfiguration(const void *pFileData, unsigned FileLength);
583 std::optional<EDirectTouchIngameMode> ParseDirectTouchIngameMode(const json_value *pModeValue);
584 std::optional<EDirectTouchSpectateMode> ParseDirectTouchSpectateMode(const json_value *pModeValue);
585 std::optional<ColorRGBA> ParseColor(const json_value *pColorValue, const char *pAttributeName, std::optional<ColorRGBA> DefaultColor) const;
586 std::optional<CTouchButton> ParseButton(const json_value *pButtonObject);
587 std::unique_ptr<CTouchButtonBehavior> ParseBehavior(const json_value *pBehaviorObject);
588 std::unique_ptr<CPredefinedTouchButtonBehavior> ParsePredefinedBehavior(const json_value *pBehaviorObject);
589 std::unique_ptr<CExtraMenuTouchButtonBehavior> ParseExtraMenuBehavior(const json_value *pBehaviorObject);
590 std::unique_ptr<CBindTouchButtonBehavior> ParseBindBehavior(const json_value *pBehaviorObject);
591 std::unique_ptr<CBindToggleTouchButtonBehavior> ParseBindToggleBehavior(const json_value *pBehaviorObject);
592 void WriteConfiguration(CJsonWriter *pWriter);
593
594 std::vector<ivec2> m_vTargets;
595 std::vector<CUnitRect> m_vLastUpdateRects;
596 std::vector<CUnitRect> m_vXSortedRects;
597 std::vector<CUnitRect> m_vYSortedRects;
598 int m_LastWidth = -10;
599 int m_LastHeight = -10;
600 void BuildPositionXY(std::vector<CUnitRect> vVisibleButtonRects, CUnitRect MyRect);
601 std::optional<CUnitRect> FindPositionXY(std::vector<CUnitRect> &vVisibleButtonRects, CUnitRect MyRect);
602
603 // This is how editor render buttons.
604 void RenderButtonsEditor();
605 // This is how editor deal with touch inputs.
606 void UpdateButtonsEditor(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates);
607 void UpdateSampleButton(const CTouchButton &SrcButton);
608
609 // For process fingerstates in button editor.
610 bool m_PreventSaving = false;
611 std::optional<IInput::CTouchFingerState> m_ActiveFingerState;
612 std::optional<IInput::CTouchFingerState> m_ZoomFingerState;
613 std::optional<IInput::CTouchFingerState> m_LongPressFingerState;
614 vec2 m_ZoomStartPos = vec2(0.0f, 0.0f);
616 std::vector<IInput::CTouchFingerState> m_vDeletedFingerState;
618
619 // Partially copied so it looks the same as m_pSelectedButton. Follows along the fingers while sliding.
620 std::unique_ptr<CTouchButton> m_pSampleButton = nullptr;
621 // For rendering. Calculated from m_pSampleButton's m_UnitRect, will not overlapping with any rect.
622 std::optional<CUnitRect> m_ShownRect;
624
625 bool m_UnsavedChanges = false;
627
628public:
631 bool IsRectOverlapping(CUnitRect MyRect, EButtonShape Shape) const;
632 std::optional<CUnitRect> UpdatePosition(CUnitRect MyRect, EButtonShape Shape, bool Ignore = false); // If Ignore == true, then the function will also try to avoid m_pSelectedButton.
633 void ResetButtonPointers();
636 CUnitRect CalculateHitbox(const CUnitRect &Rect, EButtonShape Shape) const;
637
638 // Getters and setters.
639 bool HasUnsavedChanges() const { return m_UnsavedChanges; }
640 void SetUnsavedChanges(bool UnsavedChanges) { m_UnsavedChanges = UnsavedChanges; }
643 std::optional<CUnitRect> ShownRect() const { return m_ShownRect; }
644 void SetShownRect(std::optional<CUnitRect> Rect) { m_ShownRect = Rect; }
646 void SetSelectedButton(CTouchButton *TargetButton) { m_pSelectedButton = TargetButton; }
647 void RemakeSampleButton() { m_pSampleButton = std::make_unique<CTouchButton>(this); }
648 CTouchButton *SampleButton() const { return m_pSampleButton.get(); }
649 bool IsButtonEditing() const { return m_pSelectedButton != nullptr || m_pSampleButton != nullptr; }
650 ColorRGBA DefaultBackgroundColorInactive() const { return ColorRGBA(0.0f, 0.0f, 0.0f, 0.25f); }
651 ColorRGBA DefaultBackgroundColorActive() const { return ColorRGBA(0.2f, 0.2f, 0.2f, 0.25f); }
656 std::vector<CTouchButton *> GetButtonsEditor();
657 bool PreviewAllButtons() const { return m_PreviewAllButtons; }
658 void SetPreviewAllButtons(bool Preview) { m_PreviewAllButtons = Preview; }
659
660 // Set the EPopupType and call
661 enum class EPopupType
662 {
663 // Unsaved settings when changing selected button.
665 // FindPositionXY can't find an empty space for the selected button(Currently it's overlapping).
667 // Selected button is not visible.
670 };
671
672 // These things must be set before opening the menu for calling the popup.
673 // After setting these, use GameClient()->m_Menus.SetActive(true), then the popup could be called automatically if EPopupType is not NUM_POPUPS.
682
684
685 // The issues won't be resolved until the Button Editor is rendered. If you want to solve issues right now don't use this.
686 // This is usually for update cached settings in button editor.
687 enum class EIssueType
688 {
689 CACHE_SETTINGS, // Update Cached settings from m_pTargetButton.
690 SAVE_SETTINGS, // Save Cached settings to m_pTargetButton.
691 CACHE_POSITION, // Update position from m_pTargetButton.
693 };
694
696 {
697 public:
698 bool m_Resolved = true;
700 };
701
702 bool AnyIssueNotResolved() const;
704
705private:
708};
709
710#endif
Definition component.h:165
Definition jsonwriter.h:15
Definition touch_controls.h:547
IInput::CTouchFinger m_Finger
Definition touch_controls.h:550
bool m_Active
Definition touch_controls.h:549
std::string m_Label
Definition touch_controls.h:462
CButtonLabel::EType m_LabelType
Definition touch_controls.h:463
CCommand(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand)
Definition touch_controls.h:466
std::string m_Command
Definition touch_controls.h:464
CBindToggleTouchButtonBehavior(std::vector< CCommand > &&vCommands)
Definition touch_controls.h:474
const char * GetBehaviorType() const override
Definition touch_controls.h:482
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:719
std::vector< CCommand > m_vCommands
Definition touch_controls.h:485
size_t GetActiveCommandIndex() const
Definition touch_controls.h:479
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:457
void OnActivate() override
Definition touch_controls.cpp:725
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:731
std::vector< CCommand > GetCommand() const
Definition touch_controls.h:478
size_t m_ActiveCommandIndex
Definition touch_controls.h:486
CBindTouchButtonBehavior(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand)
Definition touch_controls.h:428
const char * GetCommand() const
Definition touch_controls.h:434
std::chrono::nanoseconds m_AccumulatedRepeatingTime
Definition touch_controls.h:448
void OnActivate() override
Definition touch_controls.cpp:671
CButtonLabel::EType m_LabelType
Definition touch_controls.h:443
std::chrono::nanoseconds m_LastUpdateTime
Definition touch_controls.h:447
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:677
std::string m_Command
Definition touch_controls.h:444
void OnUpdate() override
Definition touch_controls.cpp:682
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:666
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:703
std::string m_Label
Definition touch_controls.h:442
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:426
const char * GetBehaviorType() const override
Definition touch_controls.h:439
bool m_Repeating
Definition touch_controls.h:446
Definition touch_controls.h:118
EType m_Type
Definition touch_controls.h:141
const char * m_pLabel
Definition touch_controls.h:142
EType
Definition touch_controls.h:121
@ NUM_TYPES
Definition touch_controls.h:138
@ LOCALIZED
Definition touch_controls.h:130
@ ICON
Definition touch_controls.h:134
@ PLAIN
Definition touch_controls.h:125
Definition touch_controls.h:161
std::function< bool()> m_Function
Definition touch_controls.h:164
const char * m_pId
Definition touch_controls.h:163
CButtonVisibility(EButtonVisibility Type, bool Parity)
Definition touch_controls.h:156
EButtonVisibility m_Type
Definition touch_controls.h:153
bool m_Parity
Definition touch_controls.h:154
CEmoticonTouchButtonBehavior()
Definition touch_controls.h:308
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:499
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:504
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:306
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:490
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:289
int m_Number
Definition touch_controls.h:299
CExtraMenuTouchButtonBehavior(int Number)
Definition touch_controls.cpp:450
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:476
int GetNumber() const
Definition touch_controls.h:295
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:464
char m_aLabel[16]
Definition touch_controls.h:300
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:277
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:435
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:440
CIngameMenuTouchButtonBehavior()
Definition touch_controls.h:279
Definition touch_controls.h:696
CTouchButton * m_pTargetButton
Definition touch_controls.h:699
bool m_Resolved
Definition touch_controls.h:698
CJoystickActionTouchButtonBehavior()
Definition touch_controls.h:381
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:379
int SelectedAction() const override
Definition touch_controls.cpp:642
int SelectedAction() const override
Definition touch_controls.cpp:648
CJoystickAimTouchButtonBehavior()
Definition touch_controls.h:392
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:390
int SelectedAction() const override
Definition touch_controls.cpp:654
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:401
CJoystickFireTouchButtonBehavior()
Definition touch_controls.h:403
int SelectedAction() const override
Definition touch_controls.cpp:660
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:412
CJoystickHookTouchButtonBehavior()
Definition touch_controls.h:414
CJoystickTouchButtonBehavior(const char *pId)
Definition touch_controls.h:362
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:605
int ActiveAction() const
Definition touch_controls.h:369
void OnActivate() override
Definition touch_controls.cpp:594
int m_ActiveAction
Definition touch_controls.h:373
void OnUpdate() override
Definition touch_controls.cpp:615
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:585
Definition touch_controls.h:675
CTouchButton * m_pOldSelectedButton
Definition touch_controls.h:678
EPopupType m_PopupType
Definition touch_controls.h:677
CTouchButton * m_pNewSelectedButton
Definition touch_controls.h:679
bool m_KeepMenuOpen
Definition touch_controls.h:680
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:425
const char * GetBehaviorType() const override
Definition touch_controls.h:267
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:257
const char * GetPredefinedType()
Definition touch_controls.h:268
const char * m_pId
Definition touch_controls.h:271
CPredefinedTouchButtonBehavior(const char *pId)
Definition touch_controls.h:259
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:318
CSpectateTouchButtonBehavior()
Definition touch_controls.h:320
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:512
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:517
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:553
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:330
void OnActivate() override
Definition touch_controls.cpp:540
int m_ActiveAction
Definition touch_controls.h:340
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:527
CSwapActionTouchButtonBehavior()
Definition touch_controls.h:332
Definition touch_controls.h:221
virtual CButtonLabel GetLabel() const =0
bool m_Active
Definition touch_controls.h:226
virtual void Init(CTouchButton *pTouchButton)
Definition touch_controls.cpp:368
std::chrono::nanoseconds m_ActivationStartTime
Definition touch_controls.h:230
virtual void WriteToConfiguration(CJsonWriter *pWriter)=0
IInput::CTouchFinger m_Finger
Definition touch_controls.h:227
virtual const char * GetBehaviorType() const =0
vec2 m_ActivePosition
Definition touch_controls.h:228
bool IsActive() const
Definition touch_controls.cpp:415
vec2 m_AccumulatedDelta
Definition touch_controls.h:229
CTouchButton * m_pTouchButton
Definition touch_controls.h:223
void SetInactive(bool ByFinger)
Definition touch_controls.cpp:406
virtual void OnDeactivate(bool ByFinger)
Definition touch_controls.h:243
void SetActive(const IInput::CTouchFingerState &FingerState)
Definition touch_controls.cpp:379
void Reset()
Definition touch_controls.cpp:374
CTouchControls * m_pTouchControls
Definition touch_controls.h:224
virtual void OnUpdate()
Definition touch_controls.h:244
virtual void OnActivate()
Definition touch_controls.h:242
Definition touch_controls.h:183
EButtonShape m_Shape
Definition touch_controls.h:197
bool IsVisible() const
Definition touch_controls.cpp:270
CUnitRect m_UnitRect
Definition touch_controls.h:194
std::unique_ptr< CTouchButtonBehavior > m_pBehavior
Definition touch_controls.h:201
void UpdateVisibilityGame()
Definition touch_controls.cpp:246
void UpdateBackgroundCorners()
Definition touch_controls.cpp:145
void UpdateVisibilityEditor()
Definition touch_controls.cpp:258
void Render(std::optional< bool > Selected=std::nullopt, std::optional< CUnitRect > Rect=std::nullopt) const
Definition touch_controls.cpp:276
void UpdateScreenFromUnitRect()
Definition touch_controls.cpp:103
std::vector< CButtonVisibility > m_vVisibilities
Definition touch_controls.h:200
vec2 ClampTouchPosition(vec2 TouchPosition) const
Definition touch_controls.cpp:204
bool m_VisibilityCached
Definition touch_controls.h:203
bool IsInside(vec2 TouchPosition) const
Definition touch_controls.cpp:232
CTouchControls * m_pTouchControls
Definition touch_controls.h:192
CTouchButton & operator=(const CTouchButton &Other)=delete
CUIRect m_ScreenRect
Definition touch_controls.h:195
std::chrono::nanoseconds m_VisibilityStartTime
Definition touch_controls.h:204
int m_BackgroundCorners
Definition touch_controls.h:198
void WriteToConfiguration(CJsonWriter *pWriter)
Definition touch_controls.cpp:333
CTouchButton(CTouchControls *pTouchControls)
Definition touch_controls.cpp:58
void UpdatePointers()
Definition touch_controls.cpp:98
CTouchButton(const CTouchButton &Other)=delete
Definition touch_controls.h:75
bool IsOverlap(const CUnitRect &Other) const
Definition touch_controls.h:82
bool operator==(const CUnitRect &Other) const
Definition touch_controls.h:86
int m_Y
Definition touch_controls.h:78
int m_X
Definition touch_controls.h:77
float Distance(const CUnitRect &Other) const
Definition touch_controls.cpp:2516
int m_H
Definition touch_controls.h:80
int m_W
Definition touch_controls.h:79
int m_ActiveAction
Definition touch_controls.h:356
CUseActionTouchButtonBehavior()
Definition touch_controls.h:348
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:578
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:346
void OnActivate() override
Definition touch_controls.cpp:572
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:563
Definition touch_controls.h:24
std::vector< ivec2 > m_vTargets
Definition touch_controls.h:594
void SetBackgroundColorInactive(ColorRGBA Color)
Definition touch_controls.h:654
void UpdateButtonsGame(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates)
Definition touch_controls.cpp:976
std::optional< IInput::CTouchFingerState > m_ActiveFingerState
Definition touch_controls.h:611
void SetSelectedButton(CTouchButton *TargetButton)
Definition touch_controls.h:646
void ResetVirtualVisibilities()
Definition touch_controls.cpp:1736
std::vector< CUnitRect > m_vYSortedRects
Definition touch_controls.h:597
std::vector< IInput::CTouchFingerState > m_vDeletedFingerState
Definition touch_controls.h:616
void OnWindowResize() override
Definition touch_controls.cpp:773
std::optional< CUnitRect > FindPositionXY(std::vector< CUnitRect > &vVisibleButtonRects, CUnitRect MyRect)
Definition touch_controls.cpp:2086
vec2 m_AccumulatedDelta
Definition touch_controls.h:615
void SetPreviewAllButtons(bool Preview)
Definition touch_controls.h:658
void OnReset() override
Definition touch_controls.cpp:767
std::optional< EDirectTouchIngameMode > ParseDirectTouchIngameMode(const json_value *pModeValue)
Definition touch_controls.cpp:1310
void WriteConfiguration(CJsonWriter *pWriter)
Definition touch_controls.cpp:1705
std::optional< CUnitRect > ShownRect() const
Definition touch_controls.h:643
vec2 m_ZoomStartPos
Definition touch_controls.h:614
void ResetButtonPointers()
Definition touch_controls.cpp:2455
int m_DirectTouchLastAction
Definition touch_controls.h:544
std::array< bool,(size_t) EButtonVisibility::NUM_VISIBILITIES > m_aVirtualVisibilities
Definition touch_controls.h:617
@ ACTION_AIM
Definition touch_controls.h:171
@ ACTION_HOOK
Definition touch_controls.h:173
@ NUM_ACTIONS
Definition touch_controls.h:174
@ ACTION_FIRE
Definition touch_controls.h:172
void SetBackgroundColorActive(ColorRGBA Color)
Definition touch_controls.h:655
std::optional< CUnitRect > m_ShownRect
Definition touch_controls.h:622
void UpdateButtonsEditor(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates)
Definition touch_controls.cpp:1743
int NextActiveAction(int Action) const
Definition touch_controls.cpp:929
std::array< CTouchControls::CIssueParam,(unsigned) CTouchControls::EIssueType::NUM_ISSUES > Issues()
Definition touch_controls.cpp:2479
void SaveConfigurationToClipboard()
Definition touch_controls.cpp:869
int m_ActionSelected
Definition touch_controls.h:533
void SetEditingActive(bool EditingActive)
Definition touch_controls.h:70
ColorRGBA BackgroundColorInactive() const
Definition touch_controls.h:652
void OnRender() override
Definition touch_controls.cpp:806
int m_LastWidth
Definition touch_controls.h:598
CUIRect CalculateScreenFromUnitRect(CUnitRect Unit, EButtonShape Shape=EButtonShape::RECT) const
Definition touch_controls.cpp:108
CTouchButton * SampleButton() const
Definition touch_controls.h:648
int NextDirectTouchAction() const
Definition touch_controls.cpp:942
int m_JoystickPressCount
Definition touch_controls.h:538
std::vector< IInput::CTouchFinger > m_vStaleFingers
Definition touch_controls.h:562
EButtonShape
Definition touch_controls.h:111
@ CIRCLE
Definition touch_controls.h:113
@ RECT
Definition touch_controls.h:112
@ NUM_SHAPES
Definition touch_controls.h:114
CTouchButton * SelectedButton() const
Definition touch_controls.h:645
std::unique_ptr< CTouchButton > m_pSampleButton
Definition touch_controls.h:620
std::vector< CUnitRect > m_vLastUpdateRects
Definition touch_controls.h:595
bool IsRectOverlapping(CUnitRect MyRect, EButtonShape Shape) const
Definition touch_controls.cpp:2421
static constexpr const char *const SHAPE_NAMES[(int) EButtonShape::NUM_SHAPES]
Definition touch_controls.h:148
void SetShownRect(std::optional< CUnitRect > Rect)
Definition touch_controls.h:644
ColorRGBA DefaultBackgroundColorActive() const
Definition touch_controls.h:651
CPopupParam m_PopupParam
Definition touch_controls.h:706
void DeleteSelectedButton()
Definition touch_controls.cpp:2410
bool IsButtonEditing() const
Definition touch_controls.h:649
bool m_aExtraMenuActive[(int) EButtonVisibility::EXTRA_MENU_5 -(int) EButtonVisibility::EXTRA_MENU_1+1]
Definition touch_controls.h:528
void ReverseVirtualVisibilities(int Number)
Definition touch_controls.h:642
bool IsEditingActive() const
Definition touch_controls.h:69
std::array< CIssueParam,(int) EIssueType::NUM_ISSUES > m_aIssueParam
Definition touch_controls.h:707
int Sizeof() const override
Definition touch_controls.h:45
EDirectTouchSpectateMode DirectTouchSpectate() const
Definition touch_controls.h:63
bool LoadConfigurationFromClipboard()
Definition touch_controls.cpp:849
std::optional< EDirectTouchSpectateMode > ParseDirectTouchSpectateMode(const json_value *pModeValue)
Definition touch_controls.cpp:1340
void RenderButtonsGame()
Definition touch_controls.cpp:1191
std::array< bool,(size_t) EButtonVisibility::NUM_VISIBILITIES > VirtualVisibilities() const
Definition touch_controls.h:641
std::optional< CTouchButton > ParseButton(const json_value *pButtonObject)
Definition touch_controls.cpp:1391
std::unique_ptr< CBindTouchButtonBehavior > ParseBindBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1591
static constexpr const int BUTTON_SIZE_MAXIMUM
Definition touch_controls.h:28
void UpdateSampleButton(const CTouchButton &SrcButton)
Definition touch_controls.cpp:2491
bool m_EditingActive
Definition touch_controls.h:567
CTouchButton * m_pSelectedButton
Definition touch_controls.h:623
vec2 CalculateScreenSize() const
Definition touch_controls.cpp:1209
std::unique_ptr< CBindToggleTouchButtonBehavior > ParseBindToggleBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1639
CActionState m_aDirectTouchActionStates[NUM_ACTIONS]
Definition touch_controls.h:556
std::vector< CTouchButton * > GetButtonsEditor()
Definition touch_controls.cpp:2504
static constexpr const char *const DIRECT_TOUCH_SPECTATE_MODE_NAMES[(int) EDirectTouchSpectateMode::NUM_STATES]
Definition touch_controls.h:147
bool PreviewAllButtons() const
Definition touch_controls.h:657
void SetUnsavedChanges(bool UnsavedChanges)
Definition touch_controls.h:640
std::vector< CTouchButton > m_vTouchButtons
Definition touch_controls.h:523
bool LoadConfigurationFromFile(int StorageType)
Definition touch_controls.cpp:834
void OnInit() override
Definition touch_controls.cpp:758
void SetDirectTouchSpectate(EDirectTouchSpectateMode DirectTouchSpectate)
Definition touch_controls.h:64
void SetEditingChanges(bool EditingChanges)
Definition touch_controls.h:72
std::unique_ptr< CExtraMenuTouchButtonBehavior > ParseExtraMenuBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1575
static const constexpr int MAX_EXTRA_MENU_NUMBER
Definition touch_controls.h:108
bool m_UnsavedChanges
Definition touch_controls.h:625
int m_LastHeight
Definition touch_controls.h:599
EDirectTouchIngameMode
Definition touch_controls.h:30
@ DISABLED
Definition touch_controls.h:31
@ HOOK
Definition touch_controls.h:35
@ AIM
Definition touch_controls.h:33
@ FIRE
Definition touch_controls.h:34
@ NUM_STATES
Definition touch_controls.h:36
@ ACTION
Definition touch_controls.h:32
ColorRGBA m_BackgroundColorInactive
Definition touch_controls.h:509
EPopupType
Definition touch_controls.h:662
@ BUTTON_CHANGED
Definition touch_controls.h:664
@ NO_SPACE
Definition touch_controls.h:666
@ NUM_POPUPS
Definition touch_controls.h:669
@ BUTTON_INVISIBLE
Definition touch_controls.h:668
void RemakeSampleButton()
Definition touch_controls.h:647
ColorRGBA DefaultBackgroundColorInactive() const
Definition touch_controls.h:650
CTouchButton * NewButton()
Definition touch_controls.cpp:2385
EDirectTouchIngameMode DirectTouchIngame() const
Definition touch_controls.h:57
bool m_PreventSaving
Definition touch_controls.h:610
bool HasEditingChanges() const
Definition touch_controls.h:71
EIssueType
Definition touch_controls.h:688
@ CACHE_SETTINGS
Definition touch_controls.h:689
@ CACHE_POSITION
Definition touch_controls.h:691
@ NUM_ISSUES
Definition touch_controls.h:692
@ SAVE_SETTINGS
Definition touch_controls.h:690
std::unique_ptr< CPredefinedTouchButtonBehavior > ParsePredefinedBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1536
std::optional< IInput::CTouchFingerState > m_LongPressFingerState
Definition touch_controls.h:613
ColorRGBA BackgroundColorActive() const
Definition touch_controls.h:653
void SetDirectTouchIngame(EDirectTouchIngameMode DirectTouchIngame)
Definition touch_controls.h:58
ColorRGBA m_BackgroundColorActive
Definition touch_controls.h:516
bool ParseConfiguration(const void *pFileData, unsigned FileLength)
Definition touch_controls.cpp:1216
void ResetButtons()
Definition touch_controls.cpp:1179
bool OnTouchState(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates) override
Definition touch_controls.cpp:782
std::optional< CUnitRect > UpdatePosition(CUnitRect MyRect, EButtonShape Shape, bool Ignore=false)
Definition touch_controls.cpp:2437
CButtonVisibilityData m_aVisibilityFunctions[(int) EButtonVisibility::NUM_VISIBILITIES]
Definition touch_controls.h:167
static constexpr const char *const LABEL_TYPE_NAMES[(int) CButtonLabel::EType::NUM_TYPES]
Definition touch_controls.h:177
CPopupParam RequiredPopup()
Definition touch_controls.cpp:2463
static constexpr const int BUTTON_SIZE_SCALE
Definition touch_controls.h:26
std::vector< CUnitRect > m_vXSortedRects
Definition touch_controls.h:596
std::unique_ptr< CTouchButtonBehavior > ParseBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1501
bool AnyIssueNotResolved() const
Definition touch_controls.cpp:2472
EDirectTouchIngameMode m_DirectTouchIngame
Definition touch_controls.h:495
void RenderButtonsEditor()
Definition touch_controls.cpp:2066
static constexpr const int BUTTON_SIZE_MINIMUM
Definition touch_controls.h:27
bool m_PreviewAllButtons
Definition touch_controls.h:626
std::optional< ColorRGBA > ParseColor(const json_value *pColorValue, const char *pAttributeName, std::optional< ColorRGBA > DefaultColor) const
Definition touch_controls.cpp:1370
std::optional< IInput::CTouchFingerState > m_ZoomFingerState
Definition touch_controls.h:612
bool SaveConfigurationToFile()
Definition touch_controls.cpp:855
bool m_EditingChanges
Definition touch_controls.h:572
EButtonVisibility
Definition touch_controls.h:93
@ EXTRA_MENU_3
Definition touch_controls.h:103
@ EXTRA_MENU_2
Definition touch_controls.h:102
@ DUMMY_ALLOWED
Definition touch_controls.h:97
@ NUM_VISIBILITIES
Definition touch_controls.h:106
@ ZOOM_ALLOWED
Definition touch_controls.h:95
@ EXTRA_MENU_5
Definition touch_controls.h:105
@ VOTE_ACTIVE
Definition touch_controls.h:96
@ DEMO_PLAYER
Definition touch_controls.h:100
@ EXTRA_MENU_4
Definition touch_controls.h:104
@ RCON_AUTHED
Definition touch_controls.h:99
@ INGAME
Definition touch_controls.h:94
@ DUMMY_CONNECTED
Definition touch_controls.h:98
@ EXTRA_MENU_1
Definition touch_controls.h:101
bool HasUnsavedChanges() const
Definition touch_controls.h:639
EDirectTouchSpectateMode
Definition touch_controls.h:39
@ AIM
Definition touch_controls.h:41
@ NUM_STATES
Definition touch_controls.h:42
void InitVisibilityFunctions()
Definition touch_controls.cpp:877
CUnitRect CalculateHitbox(const CUnitRect &Rect, EButtonShape Shape) const
Definition touch_controls.cpp:120
static constexpr const char *const DIRECT_TOUCH_INGAME_MODE_NAMES[(int) EDirectTouchIngameMode::NUM_STATES]
Definition touch_controls.h:146
void BuildPositionXY(std::vector< CUnitRect > vVisibleButtonRects, CUnitRect MyRect)
Definition touch_controls.cpp:2174
EDirectTouchSpectateMode m_DirectTouchSpectate
Definition touch_controls.h:502
Definition ui_rect.h:12
Definition color.h:182
Definition input.h:142
Definition input.h:128
struct _json_value json_value
Definition serverbrowser.h:18
vector2_base< float > vec2
Definition vmath.h:161