DDraceNetwork 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;
30 {
32 ACTION,
33 AIM,
34 FIRE,
35 HOOK,
37 };
39 {
41 AIM,
43 };
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; }
71 bool HasEditingChanges() const { return m_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
110 enum class EButtonShape
111 {
112 RECT,
113 CIRCLE,
115 };
116
118 {
119 public:
120 enum class EType
121 {
125 PLAIN,
130 LOCALIZED,
134 ICON,
139 };
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
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:
186 CTouchButton(CTouchButton &&Other) noexcept;
188
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
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;
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();
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() {}
246 virtual const char *GetBehaviorType() const = 0;
247 };
248
255 {
256 public:
257 static constexpr const char *const BEHAVIOR_TYPE = "predefined";
258
261
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; }
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 void Init(CTouchButton *pTouchButton) override;
385 int SelectedAction() const override;
386 };
387
389 {
390 public:
391 static constexpr const char *const BEHAVIOR_ID = "joystick-aim";
392
395
396 int SelectedAction() const override;
397 };
398
400 {
401 public:
402 static constexpr const char *const BEHAVIOR_ID = "joystick-fire";
403
406
407 int SelectedAction() const override;
408 };
409
411 {
412 public:
413 static constexpr const char *const BEHAVIOR_ID = "joystick-hook";
414
417
418 int SelectedAction() const override;
419 };
420
425 {
426 public:
427 static constexpr const char *const BEHAVIOR_TYPE = "bind";
428
433
434 CButtonLabel GetLabel() const override;
435 const char *GetCommand() const { return m_Command.c_str(); }
436 void OnActivate() override;
437 void OnDeactivate(bool ByFinger) override;
438 void OnUpdate() override;
440 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
441
442 private:
443 std::string m_Label;
445 std::string m_Command;
446
447 bool m_Repeating = false;
448 std::chrono::nanoseconds m_LastUpdateTime;
449 std::chrono::nanoseconds m_AccumulatedRepeatingTime;
450 };
451
456 {
457 public:
458 static constexpr const char *const BEHAVIOR_TYPE = "bind-toggle";
459
461 {
462 public:
463 std::string m_Label;
465 std::string m_Command;
466
472 m_LabelType(CButtonLabel::EType::PLAIN) {}
473 };
474
475 CBindToggleTouchButtonBehavior(std::vector<CCommand> &&vCommands) :
476 m_vCommands(std::move(vCommands)) {}
477
478 CButtonLabel GetLabel() const override;
479 std::vector<CCommand> GetCommand() const { return m_vCommands; }
481 void OnActivate() override;
483 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
484
485 private:
486 std::vector<CCommand> m_vCommands;
488 };
489
490private:
497
504
511
517 ColorRGBA m_BackgroundColorActive = ColorRGBA(0.2f, 0.2f, 0.2f, 0.25f);
518
524 std::vector<CTouchButton> m_vTouchButtons;
525
530
535
540
546
548 {
549 public:
550 bool m_Active = false;
552 };
553
558
563 std::vector<IInput::CTouchFinger> m_vStaleFingers;
564
568 bool m_EditingActive = false;
569
573 bool m_EditingChanges = false;
574
576 int NextActiveAction(int Action) const;
577 int NextDirectTouchAction() const;
578 void UpdateButtonsGame(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates);
579 void ResetButtons();
580 void RenderButtonsGame();
582
583 bool ParseConfiguration(const void *pFileData, unsigned FileLength);
584 std::optional<EDirectTouchIngameMode> ParseDirectTouchIngameMode(const json_value *pModeValue);
585 std::optional<EDirectTouchSpectateMode> ParseDirectTouchSpectateMode(const json_value *pModeValue);
586 std::optional<ColorRGBA> ParseColor(const json_value *pColorValue, const char *pAttributeName, std::optional<ColorRGBA> DefaultColor) const;
587 std::optional<CTouchButton> ParseButton(const json_value *pButtonObject);
588 std::unique_ptr<CTouchButtonBehavior> ParseBehavior(const json_value *pBehaviorObject);
589 std::unique_ptr<CPredefinedTouchButtonBehavior> ParsePredefinedBehavior(const json_value *pBehaviorObject);
590 std::unique_ptr<CExtraMenuTouchButtonBehavior> ParseExtraMenuBehavior(const json_value *pBehaviorObject);
591 std::unique_ptr<CBindTouchButtonBehavior> ParseBindBehavior(const json_value *pBehaviorObject);
592 std::unique_ptr<CBindToggleTouchButtonBehavior> ParseBindToggleBehavior(const json_value *pBehaviorObject);
594
595 std::vector<ivec2> m_vTargets;
596 std::vector<CUnitRect> m_vLastUpdateRects;
597 std::vector<CUnitRect> m_vXSortedRects;
598 std::vector<CUnitRect> m_vYSortedRects;
599 int m_LastWidth = -10;
600 int m_LastHeight = -10;
601 void BuildPositionXY(std::vector<CUnitRect> vVisibleButtonRects, CUnitRect MyRect);
603
604 // This is how editor render buttons.
605 void RenderButtonsEditor();
606 // This is how editor deal with touch inputs.
607 void UpdateButtonsEditor(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates);
609
610 // For process fingerstates in button editor.
611 bool m_PreventSaving = false;
612 std::optional<IInput::CTouchFingerState> m_ActiveFingerState;
613 std::optional<IInput::CTouchFingerState> m_ZoomFingerState;
614 std::optional<IInput::CTouchFingerState> m_LongPressFingerState;
615 vec2 m_ZoomStartPos = vec2(0.0f, 0.0f);
617 std::vector<IInput::CTouchFingerState> m_vDeletedFingerState;
619
620 // Partially copied so it looks the same as m_pSelectedButton. Follows along the fingers while sliding.
621 std::unique_ptr<CTouchButton> m_pSampleButton = nullptr;
622 // For rendering. Calculated from m_pSampleButton's m_UnitRect, will not overlapping with any rect.
623 std::optional<CUnitRect> m_ShownRect;
625
626 bool m_UnsavedChanges = false;
628
629public:
633 CUnitRect UpdatePosition(CUnitRect MyRect, bool Ignore = false); // If Ignore == true, then the function will also try to avoid m_pSelectedButton.
634 void ResetButtonPointers();
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; }
647 bool NoRealButtonSelected() const { return m_pSelectedButton == nullptr; }
648 void RemakeSampleButton() { m_pSampleButton = std::make_unique<CTouchButton>(this); }
649 CTouchButton *SampleButton() const { return m_pSampleButton.get(); }
650 bool IsButtonEditing() const { return m_pSelectedButton != nullptr || m_pSampleButton != nullptr; }
651 ColorRGBA DefaultBackgroundColorInactive() const { return ColorRGBA(0.0f, 0.0f, 0.0f, 0.25f); }
652 ColorRGBA DefaultBackgroundColorActive() const { return ColorRGBA(0.2f, 0.2f, 0.2f, 0.25f); }
657 std::vector<CTouchButton *> GetButtonsEditor();
658 bool PreviewAllButtons() const { return m_PreviewAllButtons; }
660
661 // Set the EPopupType and call
662 enum class EPopupType
663 {
664 // Unsaved settings when changing selected button.
666 // FindPositionXY can't find an empty space for the selected button(Currently it's overlapping).
667 NO_SPACE,
668 // Selected button is not visible.
671 };
672
673 // These things must be set before opening the menu for calling the popup.
674 // After setting these, use GameClient()->m_Menus.SetActive(true), then the popup could be called automatically if EPopupType is not NUM_POPUPS.
683
685
686 // The issues won't be resolved until the Button Editor is rendered. If you want to solve issues right now don't use this.
687 // This is usually for update cached settings in button editor.
688 enum class EIssueType
689 {
690 CACHE_SETTINGS, // Update Cached settings from m_pTargetButton.
691 SAVE_SETTINGS, // Save Cached settings to m_pTargetButton.
692 CACHE_POSITION, // Update position from m_pTargetButton.
694 };
695
697 {
698 public:
699 bool m_Resolved = true;
701 };
702
703 bool AnyIssueNotResolved() const;
705
706private:
709};
710
711#endif
Definition component.h:165
Definition jsonwriter.h:15
Definition touch_controls.h:548
IInput::CTouchFinger m_Finger
Definition touch_controls.h:551
bool m_Active
Definition touch_controls.h:550
std::string m_Label
Definition touch_controls.h:463
CButtonLabel::EType m_LabelType
Definition touch_controls.h:464
CCommand(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand)
Definition touch_controls.h:467
std::string m_Command
Definition touch_controls.h:465
Definition touch_controls.h:456
CBindToggleTouchButtonBehavior(std::vector< CCommand > &&vCommands)
Definition touch_controls.h:475
const char * GetBehaviorType() const override
Definition touch_controls.h:483
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:709
std::vector< CCommand > m_vCommands
Definition touch_controls.h:486
size_t GetActiveCommandIndex() const
Definition touch_controls.h:480
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:458
void OnActivate() override
Definition touch_controls.cpp:715
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:721
std::vector< CCommand > GetCommand() const
Definition touch_controls.h:479
size_t m_ActiveCommandIndex
Definition touch_controls.h:487
Definition touch_controls.h:425
CBindTouchButtonBehavior(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand)
Definition touch_controls.h:429
const char * GetCommand() const
Definition touch_controls.h:435
std::chrono::nanoseconds m_AccumulatedRepeatingTime
Definition touch_controls.h:449
void OnActivate() override
Definition touch_controls.cpp:661
CButtonLabel::EType m_LabelType
Definition touch_controls.h:444
std::chrono::nanoseconds m_LastUpdateTime
Definition touch_controls.h:448
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:667
std::string m_Command
Definition touch_controls.h:445
void OnUpdate() override
Definition touch_controls.cpp:672
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:656
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:693
std::string m_Label
Definition touch_controls.h:443
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:427
const char * GetBehaviorType() const override
Definition touch_controls.h:440
bool m_Repeating
Definition touch_controls.h:447
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
Definition touch_controls.h:161
std::function< bool()> m_Function
Definition touch_controls.h:164
const char * m_pId
Definition touch_controls.h:163
Definition touch_controls.h:151
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
Definition touch_controls.h:304
CEmoticonTouchButtonBehavior()
Definition touch_controls.h:308
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:486
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:491
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:306
Definition touch_controls.h:287
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:477
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:289
int m_Number
Definition touch_controls.h:299
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:463
int GetNumber() const
Definition touch_controls.h:295
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:451
char m_aLabel[16]
Definition touch_controls.h:300
Definition touch_controls.h:275
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:277
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:422
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:427
CIngameMenuTouchButtonBehavior()
Definition touch_controls.h:279
Definition touch_controls.h:697
CTouchButton * m_pTargetButton
Definition touch_controls.h:700
bool m_Resolved
Definition touch_controls.h:699
CJoystickActionTouchButtonBehavior()
Definition touch_controls.h:381
void Init(CTouchButton *pTouchButton) override
Definition touch_controls.cpp:627
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:379
int SelectedAction() const override
Definition touch_controls.cpp:632
int SelectedAction() const override
Definition touch_controls.cpp:638
CJoystickAimTouchButtonBehavior()
Definition touch_controls.h:393
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:391
int SelectedAction() const override
Definition touch_controls.cpp:644
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:402
CJoystickFireTouchButtonBehavior()
Definition touch_controls.h:404
int SelectedAction() const override
Definition touch_controls.cpp:650
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:413
CJoystickHookTouchButtonBehavior()
Definition touch_controls.h:415
Definition touch_controls.h:360
CJoystickTouchButtonBehavior(const char *pId)
Definition touch_controls.h:362
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:592
int ActiveAction() const
Definition touch_controls.h:369
void OnActivate() override
Definition touch_controls.cpp:581
int m_ActiveAction
Definition touch_controls.h:373
void OnUpdate() override
Definition touch_controls.cpp:602
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:572
Definition touch_controls.h:676
CTouchButton * m_pOldSelectedButton
Definition touch_controls.h:679
EPopupType m_PopupType
Definition touch_controls.h:678
CTouchButton * m_pNewSelectedButton
Definition touch_controls.h:680
bool m_KeepMenuOpen
Definition touch_controls.h:681
Definition touch_controls.h:255
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:412
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
Definition touch_controls.h:316
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:499
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:504
Definition touch_controls.h:328
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:540
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:330
void OnActivate() override
Definition touch_controls.cpp:527
int m_ActiveAction
Definition touch_controls.h:340
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:514
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:355
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:402
vec2 m_AccumulatedDelta
Definition touch_controls.h:229
CTouchButton * m_pTouchButton
Definition touch_controls.h:223
void SetInactive(bool ByFinger)
Definition touch_controls.cpp:393
virtual void OnDeactivate(bool ByFinger)
Definition touch_controls.h:243
void SetActive(const IInput::CTouchFingerState &FingerState)
Definition touch_controls.cpp:366
void Reset()
Definition touch_controls.cpp:361
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:256
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:232
void UpdateBackgroundCorners()
Definition touch_controls.cpp:130
void UpdateVisibilityEditor()
Definition touch_controls.cpp:244
void Render(std::optional< bool > Selected=std::nullopt, std::optional< CUnitRect > Rect=std::nullopt) const
Definition touch_controls.cpp:262
void UpdateScreenFromUnitRect()
Definition touch_controls.cpp:98
std::vector< CButtonVisibility > m_vVisibilities
Definition touch_controls.h:200
vec2 ClampTouchPosition(vec2 TouchPosition) const
Definition touch_controls.cpp:189
bool m_VisibilityCached
Definition touch_controls.h:203
bool IsInside(vec2 TouchPosition) const
Definition touch_controls.cpp:218
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:320
void UpdatePointers()
Definition touch_controls.cpp:93
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:2491
int m_H
Definition touch_controls.h:80
int m_W
Definition touch_controls.h:79
Definition touch_controls.h:344
int m_ActiveAction
Definition touch_controls.h:356
CUseActionTouchButtonBehavior()
Definition touch_controls.h:348
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:565
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:346
void OnActivate() override
Definition touch_controls.cpp:559
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:550
Definition touch_controls.h:24
std::vector< ivec2 > m_vTargets
Definition touch_controls.h:595
void SetBackgroundColorInactive(ColorRGBA Color)
Definition touch_controls.h:655
void UpdateButtonsGame(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates)
Definition touch_controls.cpp:969
std::optional< IInput::CTouchFingerState > m_ActiveFingerState
Definition touch_controls.h:612
void SetSelectedButton(CTouchButton *TargetButton)
Definition touch_controls.h:646
void ResetVirtualVisibilities()
Definition touch_controls.cpp:1727
std::vector< CUnitRect > m_vYSortedRects
Definition touch_controls.h:598
std::vector< IInput::CTouchFingerState > m_vDeletedFingerState
Definition touch_controls.h:617
void OnWindowResize() override
Definition touch_controls.cpp:763
vec2 m_AccumulatedDelta
Definition touch_controls.h:616
void SetPreviewAllButtons(bool Preview)
Definition touch_controls.h:659
void OnReset() override
Definition touch_controls.cpp:757
std::optional< EDirectTouchIngameMode > ParseDirectTouchIngameMode(const json_value *pModeValue)
Definition touch_controls.cpp:1301
void WriteConfiguration(CJsonWriter *pWriter)
Definition touch_controls.cpp:1696
std::optional< CUnitRect > ShownRect() const
Definition touch_controls.h:643
vec2 m_ZoomStartPos
Definition touch_controls.h:615
void ResetButtonPointers()
Definition touch_controls.cpp:2431
int m_DirectTouchLastAction
Definition touch_controls.h:545
std::array< bool,(size_t) EButtonVisibility::NUM_VISIBILITIES > m_aVirtualVisibilities
Definition touch_controls.h:618
void SetBackgroundColorActive(ColorRGBA Color)
Definition touch_controls.h:656
std::optional< CUnitRect > m_ShownRect
Definition touch_controls.h:623
void UpdateButtonsEditor(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates)
Definition touch_controls.cpp:1734
int NextActiveAction(int Action) const
Definition touch_controls.cpp:919
std::array< CTouchControls::CIssueParam,(unsigned) CTouchControls::EIssueType::NUM_ISSUES > Issues()
Definition touch_controls.cpp:2455
void SaveConfigurationToClipboard()
Definition touch_controls.cpp:859
int m_ActionSelected
Definition touch_controls.h:534
void SetEditingActive(bool EditingActive)
Definition touch_controls.h:70
ColorRGBA BackgroundColorInactive() const
Definition touch_controls.h:653
void OnRender() override
Definition touch_controls.cpp:796
int m_LastWidth
Definition touch_controls.h:599
CUIRect CalculateScreenFromUnitRect(CUnitRect Unit, EButtonShape Shape=EButtonShape::RECT) const
Definition touch_controls.cpp:103
CTouchButton * SampleButton() const
Definition touch_controls.h:649
int NextDirectTouchAction() const
Definition touch_controls.cpp:933
@ 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
int m_JoystickPressCount
Definition touch_controls.h:539
std::vector< IInput::CTouchFinger > m_vStaleFingers
Definition touch_controls.h:563
EButtonShape
Definition touch_controls.h:111
CTouchButton * SelectedButton() const
Definition touch_controls.h:645
std::unique_ptr< CTouchButton > m_pSampleButton
Definition touch_controls.h:621
CUnitRect FindPositionXY(std::vector< CUnitRect > &vVisibleButtonRects, CUnitRect MyRect)
Definition touch_controls.cpp:2066
std::vector< CUnitRect > m_vLastUpdateRects
Definition touch_controls.h:596
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:652
CPopupParam m_PopupParam
Definition touch_controls.h:707
void DeleteSelectedButton()
Definition touch_controls.cpp:2389
bool IsButtonEditing() const
Definition touch_controls.h:650
bool m_aExtraMenuActive[(int) EButtonVisibility::EXTRA_MENU_5 -(int) EButtonVisibility::EXTRA_MENU_1+1]
Definition touch_controls.h:529
void ReverseVirtualVisibilities(int Number)
Definition touch_controls.h:642
bool NoRealButtonSelected() const
Definition touch_controls.h:647
bool IsEditingActive() const
Definition touch_controls.h:69
std::array< CIssueParam,(int) EIssueType::NUM_ISSUES > m_aIssueParam
Definition touch_controls.h:708
int Sizeof() const override
Definition touch_controls.h:45
CUnitRect UpdatePosition(CUnitRect MyRect, bool Ignore=false)
Definition touch_controls.cpp:2415
EDirectTouchSpectateMode DirectTouchSpectate() const
Definition touch_controls.h:63
bool LoadConfigurationFromClipboard()
Definition touch_controls.cpp:839
std::optional< EDirectTouchSpectateMode > ParseDirectTouchSpectateMode(const json_value *pModeValue)
Definition touch_controls.cpp:1331
void RenderButtonsGame()
Definition touch_controls.cpp:1182
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:1382
std::unique_ptr< CBindTouchButtonBehavior > ParseBindBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1582
static constexpr const int BUTTON_SIZE_MAXIMUM
Definition touch_controls.h:28
void UpdateSampleButton(const CTouchButton &SrcButton)
Definition touch_controls.cpp:2467
bool m_EditingActive
Definition touch_controls.h:568
CTouchButton * m_pSelectedButton
Definition touch_controls.h:624
vec2 CalculateScreenSize() const
Definition touch_controls.cpp:1200
std::unique_ptr< CBindToggleTouchButtonBehavior > ParseBindToggleBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1630
CActionState m_aDirectTouchActionStates[NUM_ACTIONS]
Definition touch_controls.h:557
std::vector< CTouchButton * > GetButtonsEditor()
Definition touch_controls.cpp:2479
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:658
void SetUnsavedChanges(bool UnsavedChanges)
Definition touch_controls.h:640
std::vector< CTouchButton > m_vTouchButtons
Definition touch_controls.h:524
bool LoadConfigurationFromFile(int StorageType)
Definition touch_controls.cpp:824
void OnInit() override
Definition touch_controls.cpp:748
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:1566
static const constexpr int MAX_EXTRA_MENU_NUMBER
Definition touch_controls.h:108
bool m_UnsavedChanges
Definition touch_controls.h:626
int m_LastHeight
Definition touch_controls.h:600
EDirectTouchIngameMode
Definition touch_controls.h:30
ColorRGBA m_BackgroundColorInactive
Definition touch_controls.h:510
EPopupType
Definition touch_controls.h:663
void RemakeSampleButton()
Definition touch_controls.h:648
ColorRGBA DefaultBackgroundColorInactive() const
Definition touch_controls.h:651
CTouchButton * NewButton()
Definition touch_controls.cpp:2364
EDirectTouchIngameMode DirectTouchIngame() const
Definition touch_controls.h:57
bool m_PreventSaving
Definition touch_controls.h:611
bool HasEditingChanges() const
Definition touch_controls.h:71
EIssueType
Definition touch_controls.h:689
std::unique_ptr< CPredefinedTouchButtonBehavior > ParsePredefinedBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1527
std::optional< IInput::CTouchFingerState > m_LongPressFingerState
Definition touch_controls.h:614
ColorRGBA BackgroundColorActive() const
Definition touch_controls.h:654
void SetDirectTouchIngame(EDirectTouchIngameMode DirectTouchIngame)
Definition touch_controls.h:58
ColorRGBA m_BackgroundColorActive
Definition touch_controls.h:517
bool ParseConfiguration(const void *pFileData, unsigned FileLength)
Definition touch_controls.cpp:1207
void ResetButtons()
Definition touch_controls.cpp:1170
bool OnTouchState(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates) override
Definition touch_controls.cpp:772
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:2439
static constexpr const int BUTTON_SIZE_SCALE
Definition touch_controls.h:26
std::vector< CUnitRect > m_vXSortedRects
Definition touch_controls.h:597
std::unique_ptr< CTouchButtonBehavior > ParseBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1492
bool AnyIssueNotResolved() const
Definition touch_controls.cpp:2448
EDirectTouchIngameMode m_DirectTouchIngame
Definition touch_controls.h:496
void RenderButtonsEditor()
Definition touch_controls.cpp:2046
static constexpr const int BUTTON_SIZE_MINIMUM
Definition touch_controls.h:27
bool m_PreviewAllButtons
Definition touch_controls.h:627
std::optional< ColorRGBA > ParseColor(const json_value *pColorValue, const char *pAttributeName, std::optional< ColorRGBA > DefaultColor) const
Definition touch_controls.cpp:1361
std::optional< IInput::CTouchFingerState > m_ZoomFingerState
Definition touch_controls.h:613
bool SaveConfigurationToFile()
Definition touch_controls.cpp:845
bool m_EditingChanges
Definition touch_controls.h:573
EButtonVisibility
Definition touch_controls.h:93
bool HasUnsavedChanges() const
Definition touch_controls.h:639
EDirectTouchSpectateMode
Definition touch_controls.h:39
void InitVisibilityFunctions()
Definition touch_controls.cpp:867
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:2153
EDirectTouchSpectateMode m_DirectTouchSpectate
Definition touch_controls.h:503
bool IsRectOverlapping(CUnitRect MyRect={0, 0, BUTTON_SIZE_MINIMUM, BUTTON_SIZE_MINIMUM}) const
Definition touch_controls.cpp:2400
Definition ui_rect.h:11
Definition color.h:198
Definition input.h:136
Definition input.h:122
Definition vmath.h:15
struct _json_value json_value
Definition serverbrowser.h:17
struct _json_value json_value
Definition touch_controls.h:21
vector2_base< float > vec2
Definition vmath.h:161