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;
45
46 int Sizeof() const override { return sizeof(*this); }
47 void OnInit() override;
48 void OnReset() override;
49 void OnWindowResize() override;
50 bool OnTouchState(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates) override;
51 void OnRender() override;
52
53 bool LoadConfigurationFromFile(int StorageType);
57
70 bool IsEditingActive() const { return m_EditingActive; }
71 void SetEditingActive(bool EditingActive) { m_EditingActive = EditingActive; }
72 bool HasEditingChanges() const { return m_EditingChanges; }
73 void SetEditingChanges(bool EditingChanges) { m_EditingChanges = EditingChanges; }
74
76 {
77 public:
78 int m_X;
79 int m_Y;
80 int m_W;
81 int m_H;
82 float Distance(const CUnitRect &Other) const;
83 bool IsOverlap(const CUnitRect &Other) const
84 {
85 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);
86 }
87 bool operator==(const CUnitRect &Other) const
88 {
89 return m_X == Other.m_X && m_Y == Other.m_Y && m_W == Other.m_W && m_H == Other.m_H;
90 }
91 };
92
110
117
119 {
120 public:
141
143 const char *m_pLabel;
144 };
145
146private:
147 static constexpr const char *const DIRECT_TOUCH_INGAME_MODE_NAMES[(int)EDirectTouchIngameMode::NUM_STATES] = {"disabled", "action", "aim", "aim-relative", "fire", "hook"};
148 static constexpr const char *const DIRECT_TOUCH_SPECTATE_MODE_NAMES[(int)EDirectTouchSpectateMode::NUM_STATES] = {"disabled", "aim"};
149 static constexpr const char *const SHAPE_NAMES[(int)EButtonShape::NUM_SHAPES] = {"rect", "circle"};
150
152 {
153 public:
156
158 m_Type(Type), m_Parity(Parity) {}
159 };
160
162 {
163 public:
164 const char *m_pId;
165 std::function<bool()> m_Function;
166 };
167
169
170 enum
171 {
176 };
177
178 static constexpr const char *const LABEL_TYPE_NAMES[(int)CButtonLabel::EType::NUM_TYPES] = {"plain", "localized", "icon"};
179
180public:
181 class CTouchButtonBehavior;
182
184 {
185 public:
186 CTouchButton(CTouchControls *pTouchControls);
187 CTouchButton(CTouchButton &&Other) noexcept;
188 CTouchButton(const CTouchButton &Other) = delete;
189
190 CTouchButton &operator=(const CTouchButton &Other) = delete;
191 CTouchButton &operator=(CTouchButton &&Other) noexcept;
192
194
195 CUnitRect m_UnitRect; // {0,0,BUTTON_SIZE_MINIMUM,BUTTON_SIZE_MINIMUM} = default
197
198 EButtonShape m_Shape; // Rect = default
199 int m_BackgroundCorners; // only used with EButtonShape::RECT
200
201 std::vector<CButtonVisibility> m_vVisibilities;
202 std::unique_ptr<CTouchButtonBehavior> m_pBehavior; // nullptr = default. In button editor the default is bind behavior with nothing.
203
205 std::chrono::nanoseconds m_VisibilityStartTime;
206
207 void UpdatePointers();
210
211 vec2 ClampTouchPosition(vec2 TouchPosition) const;
212 bool IsInside(vec2 TouchPosition) const;
215 bool IsVisible() const;
216 // Force using Selected for button colors, Rect for rendering rects.
217 void Render(std::optional<bool> Selected = std::nullopt, std::optional<CUnitRect> Rect = std::nullopt) const;
218 void WriteToConfiguration(CJsonWriter *pWriter);
219 };
220
222 {
223 public:
226
227 bool m_Active; // variables below must only be used when active
231 std::chrono::nanoseconds m_ActivationStartTime;
232
233 virtual ~CTouchButtonBehavior() = default;
234 virtual void Init(CTouchButton *pTouchButton);
235
236 void Reset();
237 void SetActive(const IInput::CTouchFingerState &FingerState);
238 void SetInactive(bool ByFinger);
239 bool IsActive() const;
240 bool IsActive(const IInput::CTouchFinger &Finger) const;
241
242 virtual CButtonLabel GetLabel() const = 0;
243 virtual void OnActivate() {}
244 virtual void OnDeactivate(bool ByFinger) {}
245 virtual void OnUpdate() {}
246 virtual void WriteToConfiguration(CJsonWriter *pWriter) = 0;
247 virtual const char *GetBehaviorType() const = 0;
248 };
249
256 {
257 public:
258 static constexpr const char *const BEHAVIOR_TYPE = "predefined";
259
261 m_pId(pId) {}
262
267 void WriteToConfiguration(CJsonWriter *pWriter) override;
268 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
269 const char *GetPredefinedType() { return m_pId; }
270
271 private:
272 const char *m_pId;
273 };
274
276 {
277 public:
278 static constexpr const char *const BEHAVIOR_ID = "ingame-menu";
279
282
283 CButtonLabel GetLabel() const override;
284 void OnDeactivate(bool ByFinger) override;
285 };
286
288 {
289 public:
290 static constexpr const char *const BEHAVIOR_ID = "extra-menu";
291
293
294 CButtonLabel GetLabel() const override;
295 void OnDeactivate(bool ByFinger) override;
296 int GetNumber() const { return m_Number; }
297 void WriteToConfiguration(CJsonWriter *pWriter) override;
298
299 private:
301 char m_aLabel[16];
302 };
303
305 {
306 public:
307 static constexpr const char *const BEHAVIOR_ID = "emoticon";
308
311
312 CButtonLabel GetLabel() const override;
313 void OnDeactivate(bool ByFinger) override;
314 };
315
317 {
318 public:
319 static constexpr const char *const BEHAVIOR_ID = "spectate";
320
323
324 CButtonLabel GetLabel() const override;
325 void OnDeactivate(bool ByFinger) override;
326 };
327
329 {
330 public:
331 static constexpr const char *const BEHAVIOR_ID = "swap-action";
332
335
336 CButtonLabel GetLabel() const override;
337 void OnActivate() override;
338 void OnDeactivate(bool ByFinger) override;
339
340 private:
342 };
343
345 {
346 public:
347 static constexpr const char *const BEHAVIOR_ID = "use-action";
348
351
352 CButtonLabel GetLabel() const override;
353 void OnActivate() override;
354 void OnDeactivate(bool ByFinger) override;
355
356 private:
358 };
359
361 {
362 public:
365
366 CButtonLabel GetLabel() const override;
367 void OnActivate() override;
368 void OnDeactivate(bool ByFinger) override;
369 void OnUpdate() override;
370 int ActiveAction() const { return m_ActiveAction; }
371 virtual int SelectedAction() const = 0;
372 virtual bool IsRelative() const { return false; }
373
374 private:
376 };
377
379 {
380 public:
381 static constexpr const char *const BEHAVIOR_ID = "joystick-action";
382
385
386 int SelectedAction() const override;
387 };
388
390 {
391 public:
392 static constexpr const char *const BEHAVIOR_ID = "joystick-aim";
393
396
397 int SelectedAction() const override;
398 };
399
401 {
402 public:
403 static constexpr const char *const BEHAVIOR_ID = "joystick-aim-relative";
404
407
408 int SelectedAction() const override;
409 bool IsRelative() const override { return true; }
410 };
411
413 {
414 public:
415 static constexpr const char *const BEHAVIOR_ID = "joystick-fire";
416
419
420 int SelectedAction() const override;
421 };
422
424 {
425 public:
426 static constexpr const char *const BEHAVIOR_ID = "joystick-hook";
427
430
431 int SelectedAction() const override;
432 };
433
438 {
439 public:
440 static constexpr const char *const BEHAVIOR_TYPE = "bind";
441
442 CBindTouchButtonBehavior(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand) :
443 m_Label(pLabel),
444 m_LabelType(LabelType),
445 m_Command(pCommand) {}
446
447 CButtonLabel GetLabel() const override;
448 const char *GetCommand() const { return m_Command.c_str(); }
449 void OnActivate() override;
450 void OnDeactivate(bool ByFinger) override;
451 void OnUpdate() override;
452 void WriteToConfiguration(CJsonWriter *pWriter) override;
453 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
454
455 private:
456 std::string m_Label;
458 std::string m_Command;
459
460 bool m_Repeating = false;
461 std::chrono::nanoseconds m_LastUpdateTime;
462 std::chrono::nanoseconds m_AccumulatedRepeatingTime;
463 };
464
469 {
470 public:
471 static constexpr const char *const BEHAVIOR_TYPE = "bind-toggle";
472
474 {
475 public:
476 std::string m_Label;
478 std::string m_Command;
479
480 CCommand(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand) :
481 m_Label(pLabel),
482 m_LabelType(LabelType),
483 m_Command(pCommand) {}
485 m_LabelType(CButtonLabel::EType::PLAIN) {}
486 };
487
488 CBindToggleTouchButtonBehavior(std::vector<CCommand> &&vCommands) :
489 m_vCommands(std::move(vCommands)) {}
490
491 CButtonLabel GetLabel() const override;
492 std::vector<CCommand> GetCommand() const { return m_vCommands; }
494 void OnActivate() override;
495 void WriteToConfiguration(CJsonWriter *pWriter) override;
496 const char *GetBehaviorType() const override { return BEHAVIOR_TYPE; }
497
498 private:
499 std::vector<CCommand> m_vCommands;
501 };
502
503private:
510
517
524
530 ColorRGBA m_BackgroundColorActive = ColorRGBA(0.2f, 0.2f, 0.2f, 0.25f);
531
537 std::vector<CTouchButton> m_vTouchButtons;
538
543
548
553
559
561 {
562 public:
563 bool m_Active = false;
565 };
566
571
576 std::vector<IInput::CTouchFinger> m_vStaleFingers;
577
581 bool m_EditingActive = false;
582
586 bool m_EditingChanges = false;
587
589 int NextActiveAction(int Action) const;
590 int NextDirectTouchAction() const;
591 void UpdateButtonsGame(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates);
592 void ResetButtons();
593 void RenderButtonsGame();
595
596 bool ParseConfiguration(const void *pFileData, unsigned FileLength);
597 std::optional<EDirectTouchIngameMode> ParseDirectTouchIngameMode(const json_value *pModeValue);
598 std::optional<EDirectTouchSpectateMode> ParseDirectTouchSpectateMode(const json_value *pModeValue);
599 std::optional<ColorRGBA> ParseColor(const json_value *pColorValue, const char *pAttributeName, std::optional<ColorRGBA> DefaultColor) const;
600 std::optional<CTouchButton> ParseButton(const json_value *pButtonObject);
601 std::unique_ptr<CTouchButtonBehavior> ParseBehavior(const json_value *pBehaviorObject);
602 std::unique_ptr<CPredefinedTouchButtonBehavior> ParsePredefinedBehavior(const json_value *pBehaviorObject);
603 std::unique_ptr<CExtraMenuTouchButtonBehavior> ParseExtraMenuBehavior(const json_value *pBehaviorObject);
604 std::unique_ptr<CBindTouchButtonBehavior> ParseBindBehavior(const json_value *pBehaviorObject);
605 std::unique_ptr<CBindToggleTouchButtonBehavior> ParseBindToggleBehavior(const json_value *pBehaviorObject);
606 void WriteConfiguration(CJsonWriter *pWriter);
607
608 std::vector<ivec2> m_vTargets;
609 std::vector<CUnitRect> m_vLastUpdateRects;
610 std::vector<CUnitRect> m_vXSortedRects;
611 std::vector<CUnitRect> m_vYSortedRects;
612 int m_LastWidth = -10;
613 int m_LastHeight = -10;
614 void BuildPositionXY(std::vector<CUnitRect> vVisibleButtonRects, CUnitRect MyRect);
615 std::optional<CUnitRect> FindPositionXY(std::vector<CUnitRect> &vVisibleButtonRects, CUnitRect MyRect);
616 CUnitRect FindSizeWH(std::vector<CUnitRect> vVisibleButtonRects, CUnitRect MyRect);
617
618 // This is how editor render buttons.
619 void RenderButtonsEditor();
620 // This is how editor deal with touch inputs.
621 void UpdateButtonsEditor(const std::vector<IInput::CTouchFingerState> &vTouchFingerStates);
622 void UpdateSampleButton(const CTouchButton &SrcButton);
623
624 // For process fingerstates in button editor.
625 bool m_PreventSaving = false;
626 std::optional<IInput::CTouchFingerState> m_ActiveFingerState;
627 std::optional<IInput::CTouchFingerState> m_ZoomFingerState;
628 std::optional<IInput::CTouchFingerState> m_LongPressFingerState;
629 vec2 m_ZoomStartPos = vec2(0.0f, 0.0f);
631 std::vector<IInput::CTouchFingerState> m_vDeletedFingerState;
633
634 // Partially copied so it looks the same as m_pSelectedButton. Follows along the fingers while sliding.
635 std::unique_ptr<CTouchButton> m_pSampleButton = nullptr;
636 // For rendering. Calculated from m_pSampleButton's m_UnitRect, will not overlapping with any rect.
637 std::optional<CUnitRect> m_ShownRect;
639
640 bool m_UnsavedChanges = false;
642
643public:
646 bool IsRectOverlapping(CUnitRect MyRect, EButtonShape Shape) const;
647 std::optional<CUnitRect> UpdatePosition(CUnitRect MyRect, EButtonShape Shape, bool Ignore = false); // If Ignore == true, then the function will also try to avoid m_pSelectedButton.
648 void ResetButtonPointers();
651 CUnitRect CalculateHitbox(const CUnitRect &Rect, EButtonShape Shape) const;
652
653 // Getters and setters.
654 bool HasUnsavedChanges() const { return m_UnsavedChanges; }
655 void SetUnsavedChanges(bool UnsavedChanges) { m_UnsavedChanges = UnsavedChanges; }
658 std::optional<CUnitRect> ShownRect() const { return m_ShownRect; }
659 void SetShownRect(std::optional<CUnitRect> Rect) { m_ShownRect = Rect; }
661 void SetSelectedButton(CTouchButton *TargetButton) { m_pSelectedButton = TargetButton; }
662 void RemakeSampleButton() { m_pSampleButton = std::make_unique<CTouchButton>(this); }
663 CTouchButton *SampleButton() const { return m_pSampleButton.get(); }
664 bool IsButtonEditing() const { return m_pSelectedButton != nullptr || m_pSampleButton != nullptr; }
665 ColorRGBA DefaultBackgroundColorInactive() const { return ColorRGBA(0.0f, 0.0f, 0.0f, 0.25f); }
666 ColorRGBA DefaultBackgroundColorActive() const { return ColorRGBA(0.2f, 0.2f, 0.2f, 0.25f); }
671 std::vector<CTouchButton *> GetButtonsEditor();
672 bool PreviewAllButtons() const { return m_PreviewAllButtons; }
673 void SetPreviewAllButtons(bool Preview) { m_PreviewAllButtons = Preview; }
674
675 // Set the EPopupType and call
676 enum class EPopupType
677 {
678 // Unsaved settings when changing selected button.
680 // FindPositionXY can't find an empty space for the selected button(Currently it's overlapping).
682 // Selected button is not visible.
685 };
686
687 // These things must be set before opening the menu for calling the popup.
688 // After setting these, use GameClient()->m_Menus.SetActive(true), then the popup could be called automatically if EPopupType is not NUM_POPUPS.
697
699
700 // The issues won't be resolved until the Button Editor is rendered. If you want to solve issues right now don't use this.
701 // This is usually for update cached settings in button editor.
702 enum class EIssueType
703 {
704 CACHE_SETTINGS, // Update Cached settings from m_pTargetButton.
705 SAVE_SETTINGS, // Save Cached settings to m_pTargetButton.
706 CACHE_POSITION, // Update position from m_pTargetButton.
708 };
709
711 {
712 public:
713 bool m_Resolved = true;
715 };
716
717 bool AnyIssueNotResolved() const;
719
720private:
723};
724
725#endif
Definition component.h:165
Definition jsonwriter.h:15
Definition touch_controls.h:561
IInput::CTouchFinger m_Finger
Definition touch_controls.h:564
bool m_Active
Definition touch_controls.h:563
std::string m_Label
Definition touch_controls.h:476
CButtonLabel::EType m_LabelType
Definition touch_controls.h:477
CCommand(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand)
Definition touch_controls.h:480
std::string m_Command
Definition touch_controls.h:478
CBindToggleTouchButtonBehavior(std::vector< CCommand > &&vCommands)
Definition touch_controls.h:488
const char * GetBehaviorType() const override
Definition touch_controls.h:496
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:734
std::vector< CCommand > m_vCommands
Definition touch_controls.h:499
size_t GetActiveCommandIndex() const
Definition touch_controls.h:493
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:471
void OnActivate() override
Definition touch_controls.cpp:740
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:746
std::vector< CCommand > GetCommand() const
Definition touch_controls.h:492
size_t m_ActiveCommandIndex
Definition touch_controls.h:500
CBindTouchButtonBehavior(const char *pLabel, CButtonLabel::EType LabelType, const char *pCommand)
Definition touch_controls.h:442
const char * GetCommand() const
Definition touch_controls.h:448
std::chrono::nanoseconds m_AccumulatedRepeatingTime
Definition touch_controls.h:462
void OnActivate() override
Definition touch_controls.cpp:686
CButtonLabel::EType m_LabelType
Definition touch_controls.h:457
std::chrono::nanoseconds m_LastUpdateTime
Definition touch_controls.h:461
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:692
std::string m_Command
Definition touch_controls.h:458
void OnUpdate() override
Definition touch_controls.cpp:697
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:681
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:718
std::string m_Label
Definition touch_controls.h:456
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:440
const char * GetBehaviorType() const override
Definition touch_controls.h:453
bool m_Repeating
Definition touch_controls.h:460
Definition touch_controls.h:119
EType m_Type
Definition touch_controls.h:142
const char * m_pLabel
Definition touch_controls.h:143
EType
Definition touch_controls.h:122
@ NUM_TYPES
Definition touch_controls.h:139
@ LOCALIZED
Definition touch_controls.h:131
@ ICON
Definition touch_controls.h:135
@ PLAIN
Definition touch_controls.h:126
Definition touch_controls.h:162
std::function< bool()> m_Function
Definition touch_controls.h:165
const char * m_pId
Definition touch_controls.h:164
CButtonVisibility(EButtonVisibility Type, bool Parity)
Definition touch_controls.h:157
EButtonVisibility m_Type
Definition touch_controls.h:154
bool m_Parity
Definition touch_controls.h:155
CEmoticonTouchButtonBehavior()
Definition touch_controls.h:309
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:498
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:503
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:307
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:489
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:290
int m_Number
Definition touch_controls.h:300
CExtraMenuTouchButtonBehavior(int Number)
Definition touch_controls.cpp:449
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:475
int GetNumber() const
Definition touch_controls.h:296
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:463
char m_aLabel[16]
Definition touch_controls.h:301
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:278
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:434
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:439
CIngameMenuTouchButtonBehavior()
Definition touch_controls.h:280
Definition touch_controls.h:711
CTouchButton * m_pTargetButton
Definition touch_controls.h:714
bool m_Resolved
Definition touch_controls.h:713
CJoystickActionTouchButtonBehavior()
Definition touch_controls.h:383
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:381
int SelectedAction() const override
Definition touch_controls.cpp:651
CJoystickAimRelativeTouchButtonBehavior()
Definition touch_controls.h:405
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:403
bool IsRelative() const override
Definition touch_controls.h:409
int SelectedAction() const override
Definition touch_controls.cpp:663
int SelectedAction() const override
Definition touch_controls.cpp:657
CJoystickAimTouchButtonBehavior()
Definition touch_controls.h:394
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:392
int SelectedAction() const override
Definition touch_controls.cpp:669
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:415
CJoystickFireTouchButtonBehavior()
Definition touch_controls.h:417
int SelectedAction() const override
Definition touch_controls.cpp:675
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:426
CJoystickHookTouchButtonBehavior()
Definition touch_controls.h:428
CJoystickTouchButtonBehavior(const char *pId)
Definition touch_controls.h:363
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:604
int ActiveAction() const
Definition touch_controls.h:370
void OnActivate() override
Definition touch_controls.cpp:593
int m_ActiveAction
Definition touch_controls.h:375
void OnUpdate() override
Definition touch_controls.cpp:614
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:584
virtual bool IsRelative() const
Definition touch_controls.h:372
Definition touch_controls.h:690
CTouchButton * m_pOldSelectedButton
Definition touch_controls.h:693
EPopupType m_PopupType
Definition touch_controls.h:692
CTouchButton * m_pNewSelectedButton
Definition touch_controls.h:694
bool m_KeepMenuOpen
Definition touch_controls.h:695
void WriteToConfiguration(CJsonWriter *pWriter) override
Definition touch_controls.cpp:424
const char * GetBehaviorType() const override
Definition touch_controls.h:268
static constexpr const char *const BEHAVIOR_TYPE
Definition touch_controls.h:258
const char * GetPredefinedType()
Definition touch_controls.h:269
const char * m_pId
Definition touch_controls.h:272
CPredefinedTouchButtonBehavior(const char *pId)
Definition touch_controls.h:260
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:319
CSpectateTouchButtonBehavior()
Definition touch_controls.h:321
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:511
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:516
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:552
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:331
void OnActivate() override
Definition touch_controls.cpp:539
int m_ActiveAction
Definition touch_controls.h:341
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:526
CSwapActionTouchButtonBehavior()
Definition touch_controls.h:333
Definition touch_controls.h:222
virtual CButtonLabel GetLabel() const =0
bool m_Active
Definition touch_controls.h:227
virtual void Init(CTouchButton *pTouchButton)
Definition touch_controls.cpp:367
std::chrono::nanoseconds m_ActivationStartTime
Definition touch_controls.h:231
virtual void WriteToConfiguration(CJsonWriter *pWriter)=0
IInput::CTouchFinger m_Finger
Definition touch_controls.h:228
virtual const char * GetBehaviorType() const =0
vec2 m_ActivePosition
Definition touch_controls.h:229
bool IsActive() const
Definition touch_controls.cpp:414
vec2 m_AccumulatedDelta
Definition touch_controls.h:230
CTouchButton * m_pTouchButton
Definition touch_controls.h:224
void SetInactive(bool ByFinger)
Definition touch_controls.cpp:405
virtual void OnDeactivate(bool ByFinger)
Definition touch_controls.h:244
void SetActive(const IInput::CTouchFingerState &FingerState)
Definition touch_controls.cpp:378
void Reset()
Definition touch_controls.cpp:373
CTouchControls * m_pTouchControls
Definition touch_controls.h:225
virtual void OnUpdate()
Definition touch_controls.h:245
virtual void OnActivate()
Definition touch_controls.h:243
Definition touch_controls.h:184
EButtonShape m_Shape
Definition touch_controls.h:198
bool IsVisible() const
Definition touch_controls.cpp:269
CUnitRect m_UnitRect
Definition touch_controls.h:195
std::unique_ptr< CTouchButtonBehavior > m_pBehavior
Definition touch_controls.h:202
void UpdateVisibilityGame()
Definition touch_controls.cpp:245
void UpdateBackgroundCorners()
Definition touch_controls.cpp:144
void UpdateVisibilityEditor()
Definition touch_controls.cpp:257
void Render(std::optional< bool > Selected=std::nullopt, std::optional< CUnitRect > Rect=std::nullopt) const
Definition touch_controls.cpp:275
void UpdateScreenFromUnitRect()
Definition touch_controls.cpp:102
std::vector< CButtonVisibility > m_vVisibilities
Definition touch_controls.h:201
vec2 ClampTouchPosition(vec2 TouchPosition) const
Definition touch_controls.cpp:203
bool m_VisibilityCached
Definition touch_controls.h:204
bool IsInside(vec2 TouchPosition) const
Definition touch_controls.cpp:231
CTouchControls * m_pTouchControls
Definition touch_controls.h:193
CTouchButton & operator=(const CTouchButton &Other)=delete
CUIRect m_ScreenRect
Definition touch_controls.h:196
std::chrono::nanoseconds m_VisibilityStartTime
Definition touch_controls.h:205
int m_BackgroundCorners
Definition touch_controls.h:199
void WriteToConfiguration(CJsonWriter *pWriter)
Definition touch_controls.cpp:332
CTouchButton(CTouchControls *pTouchControls)
Definition touch_controls.cpp:57
void UpdatePointers()
Definition touch_controls.cpp:97
CTouchButton(const CTouchButton &Other)=delete
Definition touch_controls.h:76
bool IsOverlap(const CUnitRect &Other) const
Definition touch_controls.h:83
bool operator==(const CUnitRect &Other) const
Definition touch_controls.h:87
int m_Y
Definition touch_controls.h:79
int m_X
Definition touch_controls.h:78
float Distance(const CUnitRect &Other) const
Definition touch_controls.cpp:2551
int m_H
Definition touch_controls.h:81
int m_W
Definition touch_controls.h:80
int m_ActiveAction
Definition touch_controls.h:357
CUseActionTouchButtonBehavior()
Definition touch_controls.h:349
void OnDeactivate(bool ByFinger) override
Definition touch_controls.cpp:577
static constexpr const char *const BEHAVIOR_ID
Definition touch_controls.h:347
void OnActivate() override
Definition touch_controls.cpp:571
CButtonLabel GetLabel() const override
Definition touch_controls.cpp:562
Definition touch_controls.h:24
std::vector< ivec2 > m_vTargets
Definition touch_controls.h:608
void SetBackgroundColorInactive(ColorRGBA Color)
Definition touch_controls.h:669
void UpdateButtonsGame(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates)
Definition touch_controls.cpp:999
std::optional< IInput::CTouchFingerState > m_ActiveFingerState
Definition touch_controls.h:626
void SetSelectedButton(CTouchButton *TargetButton)
Definition touch_controls.h:661
void ResetVirtualVisibilities()
Definition touch_controls.cpp:1756
std::vector< CUnitRect > m_vYSortedRects
Definition touch_controls.h:611
std::vector< IInput::CTouchFingerState > m_vDeletedFingerState
Definition touch_controls.h:631
void OnWindowResize() override
Definition touch_controls.cpp:788
std::optional< CUnitRect > FindPositionXY(std::vector< CUnitRect > &vVisibleButtonRects, CUnitRect MyRect)
Definition touch_controls.cpp:2050
vec2 m_AccumulatedDelta
Definition touch_controls.h:630
void SetPreviewAllButtons(bool Preview)
Definition touch_controls.h:673
void OnReset() override
Definition touch_controls.cpp:782
std::optional< EDirectTouchIngameMode > ParseDirectTouchIngameMode(const json_value *pModeValue)
Definition touch_controls.cpp:1329
void WriteConfiguration(CJsonWriter *pWriter)
Definition touch_controls.cpp:1725
std::optional< CUnitRect > ShownRect() const
Definition touch_controls.h:658
vec2 m_ZoomStartPos
Definition touch_controls.h:629
void ResetButtonPointers()
Definition touch_controls.cpp:2490
int m_DirectTouchLastAction
Definition touch_controls.h:558
std::array< bool,(size_t) EButtonVisibility::NUM_VISIBILITIES > m_aVirtualVisibilities
Definition touch_controls.h:632
@ ACTION_AIM
Definition touch_controls.h:172
@ ACTION_HOOK
Definition touch_controls.h:174
@ NUM_ACTIONS
Definition touch_controls.h:175
@ ACTION_FIRE
Definition touch_controls.h:173
void SetBackgroundColorActive(ColorRGBA Color)
Definition touch_controls.h:670
std::optional< CUnitRect > m_ShownRect
Definition touch_controls.h:637
void UpdateButtonsEditor(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates)
Definition touch_controls.cpp:1763
int NextActiveAction(int Action) const
Definition touch_controls.cpp:944
std::array< CTouchControls::CIssueParam,(unsigned) CTouchControls::EIssueType::NUM_ISSUES > Issues()
Definition touch_controls.cpp:2514
void SaveConfigurationToClipboard()
Definition touch_controls.cpp:884
int m_ActionSelected
Definition touch_controls.h:547
void SetEditingActive(bool EditingActive)
Definition touch_controls.h:71
ColorRGBA BackgroundColorInactive() const
Definition touch_controls.h:667
void OnRender() override
Definition touch_controls.cpp:821
int m_LastWidth
Definition touch_controls.h:612
CUIRect CalculateScreenFromUnitRect(CUnitRect Unit, EButtonShape Shape=EButtonShape::RECT) const
Definition touch_controls.cpp:107
CTouchButton * SampleButton() const
Definition touch_controls.h:663
int NextDirectTouchAction() const
Definition touch_controls.cpp:957
int m_JoystickPressCount
Definition touch_controls.h:552
std::vector< IInput::CTouchFinger > m_vStaleFingers
Definition touch_controls.h:576
EButtonShape
Definition touch_controls.h:112
@ CIRCLE
Definition touch_controls.h:114
@ RECT
Definition touch_controls.h:113
@ NUM_SHAPES
Definition touch_controls.h:115
CTouchButton * SelectedButton() const
Definition touch_controls.h:660
std::unique_ptr< CTouchButton > m_pSampleButton
Definition touch_controls.h:635
std::vector< CUnitRect > m_vLastUpdateRects
Definition touch_controls.h:609
bool IsRectOverlapping(CUnitRect MyRect, EButtonShape Shape) const
Definition touch_controls.cpp:2456
static constexpr const char *const SHAPE_NAMES[(int) EButtonShape::NUM_SHAPES]
Definition touch_controls.h:149
void SetShownRect(std::optional< CUnitRect > Rect)
Definition touch_controls.h:659
ColorRGBA DefaultBackgroundColorActive() const
Definition touch_controls.h:666
CPopupParam m_PopupParam
Definition touch_controls.h:721
void DeleteSelectedButton()
Definition touch_controls.cpp:2445
bool IsButtonEditing() const
Definition touch_controls.h:664
bool m_aExtraMenuActive[(int) EButtonVisibility::EXTRA_MENU_5 -(int) EButtonVisibility::EXTRA_MENU_1+1]
Definition touch_controls.h:542
void ReverseVirtualVisibilities(int Number)
Definition touch_controls.h:657
bool IsEditingActive() const
Definition touch_controls.h:70
std::array< CIssueParam,(int) EIssueType::NUM_ISSUES > m_aIssueParam
Definition touch_controls.h:722
int Sizeof() const override
Definition touch_controls.h:46
EDirectTouchSpectateMode DirectTouchSpectate() const
Definition touch_controls.h:64
bool LoadConfigurationFromClipboard()
Definition touch_controls.cpp:864
std::optional< EDirectTouchSpectateMode > ParseDirectTouchSpectateMode(const json_value *pModeValue)
Definition touch_controls.cpp:1359
void RenderButtonsGame()
Definition touch_controls.cpp:1210
std::array< bool,(size_t) EButtonVisibility::NUM_VISIBILITIES > VirtualVisibilities() const
Definition touch_controls.h:656
std::optional< CTouchButton > ParseButton(const json_value *pButtonObject)
Definition touch_controls.cpp:1410
std::unique_ptr< CBindTouchButtonBehavior > ParseBindBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1611
static constexpr const int BUTTON_SIZE_MAXIMUM
Definition touch_controls.h:28
void UpdateSampleButton(const CTouchButton &SrcButton)
Definition touch_controls.cpp:2526
bool m_EditingActive
Definition touch_controls.h:581
CTouchButton * m_pSelectedButton
Definition touch_controls.h:638
vec2 CalculateScreenSize() const
Definition touch_controls.cpp:1228
std::unique_ptr< CBindToggleTouchButtonBehavior > ParseBindToggleBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1659
CActionState m_aDirectTouchActionStates[NUM_ACTIONS]
Definition touch_controls.h:570
std::vector< CTouchButton * > GetButtonsEditor()
Definition touch_controls.cpp:2539
static constexpr const char *const DIRECT_TOUCH_SPECTATE_MODE_NAMES[(int) EDirectTouchSpectateMode::NUM_STATES]
Definition touch_controls.h:148
bool PreviewAllButtons() const
Definition touch_controls.h:672
void SetUnsavedChanges(bool UnsavedChanges)
Definition touch_controls.h:655
std::vector< CTouchButton > m_vTouchButtons
Definition touch_controls.h:537
bool LoadConfigurationFromFile(int StorageType)
Definition touch_controls.cpp:849
void OnInit() override
Definition touch_controls.cpp:773
void SetDirectTouchSpectate(EDirectTouchSpectateMode DirectTouchSpectate)
Definition touch_controls.h:65
void SetEditingChanges(bool EditingChanges)
Definition touch_controls.h:73
std::unique_ptr< CExtraMenuTouchButtonBehavior > ParseExtraMenuBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1595
static const constexpr int MAX_EXTRA_MENU_NUMBER
Definition touch_controls.h:109
bool m_UnsavedChanges
Definition touch_controls.h:640
int m_LastHeight
Definition touch_controls.h:613
EDirectTouchIngameMode
Definition touch_controls.h:30
@ DISABLED
Definition touch_controls.h:31
@ HOOK
Definition touch_controls.h:36
@ AIM
Definition touch_controls.h:33
@ FIRE
Definition touch_controls.h:35
@ NUM_STATES
Definition touch_controls.h:37
@ AIM_RELATIVE
Definition touch_controls.h:34
@ ACTION
Definition touch_controls.h:32
ColorRGBA m_BackgroundColorInactive
Definition touch_controls.h:523
EPopupType
Definition touch_controls.h:677
@ BUTTON_CHANGED
Definition touch_controls.h:679
@ NO_SPACE
Definition touch_controls.h:681
@ NUM_POPUPS
Definition touch_controls.h:684
@ BUTTON_INVISIBLE
Definition touch_controls.h:683
void RemakeSampleButton()
Definition touch_controls.h:662
ColorRGBA DefaultBackgroundColorInactive() const
Definition touch_controls.h:665
CTouchButton * NewButton()
Definition touch_controls.cpp:2420
EDirectTouchIngameMode DirectTouchIngame() const
Definition touch_controls.h:58
bool m_PreventSaving
Definition touch_controls.h:625
bool HasEditingChanges() const
Definition touch_controls.h:72
EIssueType
Definition touch_controls.h:703
@ CACHE_SETTINGS
Definition touch_controls.h:704
@ CACHE_POSITION
Definition touch_controls.h:706
@ NUM_ISSUES
Definition touch_controls.h:707
@ SAVE_SETTINGS
Definition touch_controls.h:705
std::unique_ptr< CPredefinedTouchButtonBehavior > ParsePredefinedBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1555
std::optional< IInput::CTouchFingerState > m_LongPressFingerState
Definition touch_controls.h:628
ColorRGBA BackgroundColorActive() const
Definition touch_controls.h:668
void SetDirectTouchIngame(EDirectTouchIngameMode DirectTouchIngame)
Definition touch_controls.h:59
ColorRGBA m_BackgroundColorActive
Definition touch_controls.h:530
bool ParseConfiguration(const void *pFileData, unsigned FileLength)
Definition touch_controls.cpp:1235
void ResetButtons()
Definition touch_controls.cpp:1198
bool OnTouchState(const std::vector< IInput::CTouchFingerState > &vTouchFingerStates) override
Definition touch_controls.cpp:797
std::optional< CUnitRect > UpdatePosition(CUnitRect MyRect, EButtonShape Shape, bool Ignore=false)
Definition touch_controls.cpp:2472
CButtonVisibilityData m_aVisibilityFunctions[(int) EButtonVisibility::NUM_VISIBILITIES]
Definition touch_controls.h:168
static constexpr const char *const LABEL_TYPE_NAMES[(int) CButtonLabel::EType::NUM_TYPES]
Definition touch_controls.h:178
CPopupParam RequiredPopup()
Definition touch_controls.cpp:2498
static constexpr const int BUTTON_SIZE_SCALE
Definition touch_controls.h:26
std::vector< CUnitRect > m_vXSortedRects
Definition touch_controls.h:610
std::unique_ptr< CTouchButtonBehavior > ParseBehavior(const json_value *pBehaviorObject)
Definition touch_controls.cpp:1520
bool AnyIssueNotResolved() const
Definition touch_controls.cpp:2507
CUnitRect FindSizeWH(std::vector< CUnitRect > vVisibleButtonRects, CUnitRect MyRect)
Definition touch_controls.cpp:2351
EDirectTouchIngameMode m_DirectTouchIngame
Definition touch_controls.h:509
void RenderButtonsEditor()
Definition touch_controls.cpp:2030
static constexpr const int BUTTON_SIZE_MINIMUM
Definition touch_controls.h:27
bool m_PreviewAllButtons
Definition touch_controls.h:641
std::optional< ColorRGBA > ParseColor(const json_value *pColorValue, const char *pAttributeName, std::optional< ColorRGBA > DefaultColor) const
Definition touch_controls.cpp:1389
std::optional< IInput::CTouchFingerState > m_ZoomFingerState
Definition touch_controls.h:627
bool SaveConfigurationToFile()
Definition touch_controls.cpp:870
bool m_EditingChanges
Definition touch_controls.h:586
EButtonVisibility
Definition touch_controls.h:94
@ EXTRA_MENU_3
Definition touch_controls.h:104
@ EXTRA_MENU_2
Definition touch_controls.h:103
@ DUMMY_ALLOWED
Definition touch_controls.h:98
@ NUM_VISIBILITIES
Definition touch_controls.h:107
@ ZOOM_ALLOWED
Definition touch_controls.h:96
@ EXTRA_MENU_5
Definition touch_controls.h:106
@ VOTE_ACTIVE
Definition touch_controls.h:97
@ DEMO_PLAYER
Definition touch_controls.h:101
@ EXTRA_MENU_4
Definition touch_controls.h:105
@ RCON_AUTHED
Definition touch_controls.h:100
@ INGAME
Definition touch_controls.h:95
@ DUMMY_CONNECTED
Definition touch_controls.h:99
@ EXTRA_MENU_1
Definition touch_controls.h:102
bool HasUnsavedChanges() const
Definition touch_controls.h:654
EDirectTouchSpectateMode
Definition touch_controls.h:40
@ AIM
Definition touch_controls.h:42
@ NUM_STATES
Definition touch_controls.h:43
void InitVisibilityFunctions()
Definition touch_controls.cpp:892
CUnitRect CalculateHitbox(const CUnitRect &Rect, EButtonShape Shape) const
Definition touch_controls.cpp:119
static constexpr const char *const DIRECT_TOUCH_INGAME_MODE_NAMES[(int) EDirectTouchIngameMode::NUM_STATES]
Definition touch_controls.h:147
void BuildPositionXY(std::vector< CUnitRect > vVisibleButtonRects, CUnitRect MyRect)
Definition touch_controls.cpp:2138
EDirectTouchSpectateMode m_DirectTouchSpectate
Definition touch_controls.h:516
Definition ui_rect.h:12
Definition color.h:183
Definition input.h:142
Definition input.h:128
struct _json_value json_value
Definition serverbrowser.h:18
vector2_base< float > vec2
Definition vmath.h:168