Touch Interface Designer 2025.2
Create touch interface with a visual editor and manage all mobile inputs like gestures
Loading...
Searching...
No Matches
VirtualControlSetup.h
Go to the documentation of this file.
1// Copyright 2022 Lost in Game Studio. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "InputAction.h"
7#include "SlateFwd.h"
8#include "UObject/Object.h"
9#include "InputCoreTypes.h"
10#include "Styling/SlateBrush.h"
11#include "Sound/SoundBase.h"
12#include "Curves/CurveFloat.h"
13#include "Engine/Texture2D.h"
14#include "Materials/MaterialInstanceDynamic.h"
15#include "VirtualControlSetup.generated.h"
16
17class UVirtualInput;
18class UVirtualInputScalar;
22
23UENUM(BlueprintType)
24enum class EControlType : uint8
25{
28 TouchRegion UMETA(DisplayName="Touch Region")
29};
30
31UENUM(BlueprintType, meta=(Bitflags, UseEnumValuesAsMaskValuesInEditor="true"))
32enum class ELayerType : uint8
33{
34 None = 0x0, //0
35 Background = 0x01, //1
36 Thumb = 0x02, //2
37 Unpressed = 0x04, //4
38 Pressed = 0x08, //8
39 Disabled = 0x10, //10
40};
41ENUM_CLASS_FLAGS(ELayerType)
42
43/*UENUM(BlueprintType)
44enum class ELayerState : uint8
45{
46 Released,
47 Pressed,
48 Both
49};*/
50
51UENUM(BlueprintType)
52enum class EHitTestType : uint8
53{
56 //Alpha,
57 //Custom Shape
58};
59
60USTRUCT(BlueprintType)
62{
63 GENERATED_BODY()
64
65
66 UPROPERTY(Category="Layer", EditAnywhere, BlueprintReadWrite, meta=(ShowOnlyInnerProperties))
67 FSlateBrush Brush;
68
70 UPROPERTY(Category="Brush Settings", EditAnywhere, BlueprintReadWrite)
72
73 //Todo: Add anchor position
74
76 UPROPERTY(Category="Transform", EditAnywhere, BlueprintReadWrite)
77 FVector2D Offset;
78
80 UPROPERTY(Category="Transform", EditAnywhere, BlueprintReadWrite)
81 float Rotation;
82
87 UPROPERTY(Category="Brush Settings", EditAnywhere, BlueprintReadWrite, meta=(Bitmask, BitmaskEnum="/Script/TouchInterface.ELayerType"))
88 int32 LayerType;
89
90 //UPROPERTY(Category="Layer", EditAnywhere, BlueprintReadWrite)
91 UPROPERTY()
93
94 static FORCEINLINE bool Accept(int32 LayerType, TArray<ELayerType> TestLayer)
95 {
96 if (LayerType != (int32)ELayerType::None)
97 {
98 for (ELayerType Type : TestLayer)
99 {
100 if (LayerType & (int32)Type)
101 {
102
103 }
104 else
105 {
106 return false;
107 }
108 }
109 return true;
110 }
111 return false;
112 }
113
115 : bUseBrushSize(false)
116 , Offset(0.0f)
117 , Rotation(0.0f)
118 , LayerType(0)
119 {
120
121 }
122
123 /*FVisualLayer(const FSlateBrush Default, const int32 InLayerType, const bool InUseBrushSize = false, const float BrushSize = 80.0f) :
124 Brush(Default),
125 bUseBrushSize(InUseBrushSize),
126 Offset(0.0f),
127 LayerType(InLayerType)
128 {
129 if (InUseBrushSize)
130 {
131 Brush.ImageSize = FVector2D(BrushSize);
132 }
133 }*/
134
135 FVisualLayer(FName LayerName, UTexture2D* DefaultResource, const int32 InLayerType, const bool InUseBrushSize = false, const float BrushSize = 80.0f)
136 : bUseBrushSize(InUseBrushSize)
137 , Offset(0.0f)
138 , Rotation(0.0f)
139 , LayerType(InLayerType)
140 , ExposedLayerName(LayerName)
141 {
142 Brush.SetResourceObject(DefaultResource);
143 if (InUseBrushSize)
144 {
145 Brush.ImageSize = FVector2D(BrushSize);
146 }
147 }
148
149 /*FVisualLayer(UMaterialInterface* DefaultResource, const int32 InLayerType, const bool InUseBrushSize = false, const float BrushSize = 80.0f) :
150 bUseBrushSize(InUseBrushSize),
151 Offset(0.0f),
152 LayerType(InLayerType)
153 {
154 Brush.SetResourceObject(DefaultResource);
155 if (InUseBrushSize)
156 {
157 Brush.ImageSize = FVector2D(BrushSize);
158 }
159 }*/
160};
161
162//Todo: Make class instead of struct ?
163USTRUCT(BlueprintType)
165{
166 GENERATED_BODY()
167
168 //COMMON
169
170 //Todo: Add anchor position ?
171
172
173 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
175
177 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.0f, ClampMax=1.0f))
178 float Opacity;
179
181 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
183
187 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
189
193 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
195
197 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
199
201 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
202 FVector2D PortraitCenter;
203
204 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
206
209 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
211
212 // Used only in runtime configurator
213 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
215
217 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
218 uint8 bIsChild:1;
219
221 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
223
225 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
226 FVector2D ParentOffset;
227
229 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
231
233 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
234 TArray<FName> Children;
235
239 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
241
242 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly, meta=(EditCondition="bEnableBackgroundBlur == true", EditConditionHides))
243 float BlurStrength;
244
245 //UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly, meta=(EditCondition="bEnableBackgroundBlur == true", EditConditionHides))
246 //FSlateBrush LowQualityFallbackBrush;
247
248 // Number of pixel
249 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly, meta=(EditCondition="bEnableBackgroundBlur == true", EditConditionHides, ClampMin=1))
250 int32 BlurRadius;
251
252 // Square by default. Allow you to round corner.
253 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly, meta=(EditCondition="bEnableBackgroundBlur == true", EditConditionHides))
254 FVector4 CornerRadius;
255
257 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
259
261 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
262 FVector2D VisualSize;
263
264 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
266
269 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
270 FVector2D SizeScale;
271
272 // Used only in runtime configurator
273 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
275
277 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
279
281 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="InteractionShape==EHitTestType::Square", EditConditionHides))
282 FVector2D InteractionSize;
283
285 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite, meta=(ClampMin=1.0f, EditCondition="InteractionShape==EHitTestType::Circle", EditConditionHides))
286 float InteractionRadiusSize;
287
289 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadWrite)
291
294 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly, Instanced)
295 TArray<TObjectPtr<ULCInputModifier>> Modifiers;
296
299 //UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly, Instanced)
300 //TArray<TObjectPtr<UVirtualInputEvent>> VirtualInputEvent;
301
302 UPROPERTY(Category="Virtual Control", EditAnywhere, BlueprintReadOnly)
304
305
306 //BUTTON
307
308 // The Input Action to use for button. Should be Digital (bool)
309 UPROPERTY(Category="Virtual Control|Button", EditAnywhere, BlueprintReadWrite)
310 UInputAction* ButtonAction;
311
312
313 //JOYSTICK
314
315 // For sticks, the size of the thumb. It's absolute
316 UPROPERTY(Category="Virtual Control|Joystick", EditAnywhere, BlueprintReadWrite)
317 FVector2D ThumbSize;
318
319 // The Input Action to use for joystick. Should be Axis2D
320 UPROPERTY(Category="Virtual Control|Joystick", EditAnywhere, BlueprintReadWrite)
321 UInputAction* JoystickAction;
322
323 //TODO: Implements this feature
324 // Whether or not thumb position can exceed visual size (thumb appear out of background)
325 UPROPERTY(Category="Virtual Control|Joystick", EditAnywhere, BlueprintReadWrite)
327
328
329 // TOUCH REGION
330
333 UPROPERTY(Category="Virtual Control|Touch Region", EditAnywhere, BlueprintReadWrite)
335
338 UPROPERTY(Category="Virtual Control|Touch Region", EditAnywhere, BlueprintReadWrite, meta=(ClampMin=0.0f, UIMin=0.0f))
339 float DeltaThreshold;
340
343 UPROPERTY(Category="Virtual Control|Touch Region", EditAnywhere, BlueprintReadWrite)
345
346
347 bool IsParent() const
348 {
349 return Children.Num() > 0;
350 }
351
353 {
354 bIsChild = false;
355 ParentName = NAME_None;
356 ParentOffset = FVector2D::ZeroVector;
358 Children.Empty();
359 }
360
363 : Opacity(1.0f)
364 , bStartHidden(false)
365 , bRecenterOnTouch(false)
366 , bBlockTouchRegion(false)
367 , LandscapeCenter(0.5f,0.5f)
368 , PortraitCenter(0.5f,0.5f)
370 , MaxPositionOffset(FVector4f(0,0,0,0))
371 , CurrentPositionOffset(ForceInitToZero)
372 , bIsChild(false)
373 , ParentOffset(ForceInitToZero)
375
376 , bEnableBackgroundBlur(false)
377 , BlurStrength(5.0f)
378 , BlurRadius(10)
379 , VisualSize(60.0f,60.0f)
381 , SizeScale(FVector2D::UnitVector)
382 , CurrentSizeScale(1.0f)
384 , InteractionSize(60.0f,60.0f)
385 , InteractionRadiusSize(10.0f)
387
388 //Button
389 , ButtonAction(nullptr)
390
391 //Joystick
392 , ThumbSize(60.0f)
393 , JoystickAction(nullptr)
395
396 //Touch Region
397 , bJoystickMode(false)
398 , DeltaThreshold(0.0f)
399 , bBlockMultitouchInput(false)
400 {
401 ControlName = FName(TEXT("NewControl"));
402 }
403
404 //Construct new virtual control based on type
406 : Opacity(1.0f)
407 , bStartHidden(false)
408 , bRecenterOnTouch(false)
409 , bBlockTouchRegion(false)
410 , LandscapeCenter(0.5f)
411 , PortraitCenter(0.5f)
413 , MaxPositionOffset(FVector4f(0,0,0,0))
414 , CurrentPositionOffset(ForceInitToZero)
415 , bIsChild(false)
416 , ParentOffset(ForceInitToZero)
418 , bEnableBackgroundBlur(false)
419 , BlurStrength(5.0f)
420 , BlurRadius(10)
422 , SizeScale(FVector2D::UnitVector)
423 , CurrentSizeScale(1.0f)
425 , Type(InType)
426
427 //Button
428 , ButtonAction(nullptr)
429
430 //Joystick
431 , ThumbSize(60.0f)
432 , JoystickAction(nullptr)
434
435 //Touch Region
436 , bJoystickMode(false)
437 , DeltaThreshold(0.0f)
438 , bBlockMultitouchInput(false)
439 {
440 switch (InType)
441 {
443 ControlName = FName(TEXT("NewButton"));
444 VisualSize = FVector2D(60.0f);
445 InteractionSize = FVector2D(60.0f);
446 InteractionRadiusSize = 30.0f;
447 break;
449 ControlName = FName(TEXT("NewJoystick"));
450 VisualSize = FVector2D(100.0f);
451 InteractionSize = FVector2D(60.0f);
452 InteractionRadiusSize = 50.0f;
453 break;
454 case EControlType::TouchRegion:
455 ControlName = FName(TEXT("NewTouchRegion"));
456 InteractionSize = FVector2D(300.0f, 300.0f);
457 InteractionRadiusSize = 150.0f;
458 break;
459 }
460 }
461};
462
463UCLASS(BlueprintType)
464class TOUCHINTERFACE_API UVirtualControlSetup : public UObject
465{
466 GENERATED_BODY()
467
468 UVirtualControlSetup();
469
470public:
471 // Contain all data for virtual controls
472 UPROPERTY(Category="Virtual Control Setup|Virtual Control", EditAnywhere, BlueprintReadOnly)
474
475
476 // Opacity (0.0 - 1.0) of all virtual controls while touch interface is active
477 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.0f, ClampMax=1.0f, UIMin=0.0f, UIMax=1.0f))
478 float ActiveOpacity;
479
480 // Opacity (0.0 - 1.0) of all virtual controls while touch interface is inactive (no interaction)
481 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.0f, ClampMax=1.0f, UIMin=0.0f, UIMax=1.0f))
482 float InactiveOpacity;
483
484 // Speed at which active opacity is reached
485 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.1f, UIMin=0.1f))
486 float ActiveLerpRate;
487
488 // Speed at which inactive opacity is reached
489 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.1f, UIMin=0.1f))
490 float InactiveLerpRate;
491
492 // How long after user interaction will all virtual controls fade out to Inactive Opacity
493 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.0f, UIMin=0.0f))
494 float TimeUntilDeactivated;
495
498 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.0f, UIMin=0.0f))
499 float TimeUntilReset;
500
503 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.0f, UIMin=0.0f))
504 float ActivationDelay;
505
508 UPROPERTY(Category="Virtual Control Setup|General Settings", EditAnywhere, BlueprintReadOnly, meta=(ClampMin=0.016f, UIMin=0.016f))
509 float StartupDelay;
510
511#if WITH_EDITOR
512 // Return type of current selected control
513 EControlType GetSelectedControlType() const;
514
515 // return index of current selected control
516 int32 GetSelectedControlIndex() const { return CurrentSelectedControlIndex; }
517
518 FName GetUniqueName(const EControlType ControlType);
519
520 void SetSelectedControlIndex(const int32 Index);
521
522 int32 SelectLastControl();
523
524 FVirtualControl GetSelectedControl() const;
525
526 FVirtualControl& GetVirtualControlRef(const FName Name);
527
528 FVirtualControl GetVirtualControlByName(const FName Name);
529
530
531//LAYER
532
533 int32 GetCurrentSelectedLayerIndex() const { return CurrentSelectedLayerIndex; }
534
535 void SetSelectedLayerIndex(const int32 Index) { CurrentSelectedLayerIndex = Index; }
536 bool SetSelectedLayerByName(const FName LayerName);
537
538 FVisualLayer GetCurrentSelectedLayer() const;
539
540 //bool GetVisualLayerByName(const FName ControlName, const FName LayerName, FVisualLayer& OutVisualLayer);
541 //bool GetVisualLayerByIndex(const FName ControlName, const int32 LayerIndex, FVisualLayer& OutVisualLayer);
542
543 FName GetUniqueLayerName(FName VirtualControlName);
544
545private:
546 bool DoesThisNameExistInControl(const FName OtherName);
547 bool DoesThisNameExistInVisualLayers(const TArray<FVisualLayer> VisualLayers, const FName OtherName);
548
549 int32 GetUniqueId(const EControlType Type);
550 int32 GetLastIndex() const;
551
552 // Return -1 if not found
553 int32 GetControlIndexByName(const FName Name);
554
555 int32 CurrentSelectedControlIndex;
556 EControlType CurrentSelectedControlType;
557
558 int32 CurrentSelectedLayerIndex;
559#endif
560};
@ Pressed
Definition ComponentDecorator.h:22
BlueprintType
Definition ComponentDecorator_Animation.h:40
DisplayName
Definition DecoratorRotationAnim.h:15
meta
Definition GestureRecognizerComp.h:274
EControlType
Definition VirtualControlSetup.h:25
@ Joystick
Definition VirtualControlSetup.h:27
@ Button
Definition VirtualControlSetup.h:26
@ UMETA
Definition VirtualControlSetup.h:28
EHitTestType
Definition VirtualControlSetup.h:53
@ Circle
Definition VirtualControlSetup.h:55
@ Square
Definition VirtualControlSetup.h:54
Definition SDeprecatedTouchInterface.h:47
Definition LCInputModifier.h:18
EditAnywhere
Definition VirtualControlSetup.h:472
Category
Definition VirtualControlSetup.h:472
meta
Definition VirtualControlSetup.h:477
BlueprintReadOnly TArray< FVirtualControl > VirtualControls
Definition VirtualControlSetup.h:473
BlueprintReadOnly
Definition VirtualControlSetup.h:477
Definition VirtualInputEvent.h:21
Definition VirtualInput.h:26
Definition VirtualControlSetup.h:165
BlueprintReadWrite TArray< FVisualLayer > VisualLayers
Definition VirtualControlSetup.h:258
FVirtualControl()
Definition VirtualControlSetup.h:362
BlueprintReadWrite UInputAction * ButtonAction
Definition VirtualControlSetup.h:310
BlueprintReadWrite uint8 bAllowPositionModification
Definition VirtualControlSetup.h:205
meta
Definition VirtualControlSetup.h:177
BlueprintReadWrite UInputAction * JoystickAction
Definition VirtualControlSetup.h:321
BlueprintReadWrite FVector2D PortraitCenter
Definition VirtualControlSetup.h:202
BlueprintReadWrite FName ControlName
Definition VirtualControlSetup.h:174
BlueprintReadWrite uint8 bAllowSizeModification
Definition VirtualControlSetup.h:265
BlueprintReadOnly float CurrentSizeScale
Definition VirtualControlSetup.h:274
BlueprintReadWrite FVector2D LandscapeCenter
Definition VirtualControlSetup.h:198
Instanced TArray< TObjectPtr< ULCInputModifier > > Modifiers
Definition VirtualControlSetup.h:295
BlueprintReadOnly TArray< TSubclassOf< UVirtualInputEvent > > VirtualInputEvent
Definition VirtualControlSetup.h:303
BlueprintReadWrite FVector2D VisualSize
Definition VirtualControlSetup.h:262
BlueprintReadOnly uint8 bIsChild
Definition VirtualControlSetup.h:218
EditAnywhere
Definition VirtualControlSetup.h:173
BlueprintReadWrite uint8 bBlockMultitouchInput
Definition VirtualControlSetup.h:344
FVirtualControl(EControlType InType)
Definition VirtualControlSetup.h:405
BlueprintReadWrite uint8 bRecenterOnTouch
Definition VirtualControlSetup.h:188
BlueprintReadWrite uint8 bStartHidden
Definition VirtualControlSetup.h:182
BlueprintReadOnly FName ParentName
Definition VirtualControlSetup.h:222
BlueprintReadOnly uint8 bEnableBackgroundBlur
Definition VirtualControlSetup.h:240
BlueprintReadOnly FVector2D ParentOffset
Definition VirtualControlSetup.h:226
BlueprintReadOnly TArray< FName > Children
Definition VirtualControlSetup.h:234
Category
Definition VirtualControlSetup.h:173
BlueprintReadWrite uint8 bJoystickMode
Definition VirtualControlSetup.h:334
BlueprintReadWrite
Definition VirtualControlSetup.h:281
BlueprintReadOnly uint8 bMoveWhenParentRecenter
Definition VirtualControlSetup.h:230
bool IsParent() const
Definition VirtualControlSetup.h:347
BlueprintReadWrite EControlType Type
Definition VirtualControlSetup.h:290
BlueprintReadOnly FVector2D CurrentPositionOffset
Definition VirtualControlSetup.h:214
void ClearLinkData()
Definition VirtualControlSetup.h:352
BlueprintReadWrite FVector2D SizeScale
Definition VirtualControlSetup.h:270
BlueprintReadWrite FVector2D ThumbSize
Definition VirtualControlSetup.h:317
BlueprintReadWrite uint8 bClampJoystickPosition
Definition VirtualControlSetup.h:326
BlueprintReadWrite EHitTestType InteractionShape
Definition VirtualControlSetup.h:278
BlueprintReadWrite uint8 bBlockTouchRegion
Definition VirtualControlSetup.h:194
BlueprintReadOnly
Definition VirtualControlSetup.h:177
BlueprintReadWrite FVector4f MaxPositionOffset
Definition VirtualControlSetup.h:210
Definition VirtualControlSetup.h:62
Category
Definition VirtualControlSetup.h:66
static FORCEINLINE bool Accept(int32 LayerType, TArray< ELayerType > TestLayer)
Definition VirtualControlSetup.h:94
FName ExposedLayerName
Definition VirtualControlSetup.h:92
FVisualLayer(FName LayerName, UTexture2D *DefaultResource, const int32 InLayerType, const bool InUseBrushSize=false, const float BrushSize=80.0f)
Definition VirtualControlSetup.h:135
BlueprintReadWrite FVector2D Offset
Definition VirtualControlSetup.h:77
FVisualLayer()
Definition VirtualControlSetup.h:114
meta
Definition VirtualControlSetup.h:66
BlueprintReadWrite float Rotation
Definition VirtualControlSetup.h:81
BlueprintReadWrite
Definition VirtualControlSetup.h:66
EditAnywhere
Definition VirtualControlSetup.h:66
BlueprintReadWrite uint8 bUseBrushSize
Definition VirtualControlSetup.h:71