Touch Interface Designer 2025.2
Create touch interface with a visual editor and manage all mobile inputs like gestures
Loading...
Searching...
No Matches
MotionRecognizer.h
Go to the documentation of this file.
1// Copyright Lost in Game Studio. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Components/ActorComponent.h"
7#include "MotionRecognizer.generated.h"
8
9UENUM(BlueprintType)
10enum class EShake : uint8
11{
15};
16
17UENUM(BlueprintType)
18enum class EAccelerationType : uint8
19{
20 None UMETA(Hidden),
21
22 //Quick acceleration to the left
24
25 //Quick acceleration to the right
27
28 //Quick forward acceleration (device moves away from you)
30
31 //Quick acceleration backwards (device moves closer to you)
33
34 //Quick upward acceleration
36
37 //Quick downward acceleration
39};
40
41DECLARE_DYNAMIC_MULTICAST_DELEGATE_FiveParams(FOnSimpleMotionDelegate, int32, PlayerIndex, FVector, Acceleration, FVector, Gravity, FVector, RotationRate, FVector, Tilt);
42DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnShakeMotionDelegate, int32, PlayerIndex, EShake, ShakeType);
43DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnQuickAccelerationDelegate, int32, PlayerIndex, EAccelerationType, Type );
44DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnMotionDelegate, int32, PlayerIndex, FVector, Value);
45
49UCLASS(ClassGroup=(TouchInterfaceDesigner), meta=(BlueprintSpawnableComponent))
50class TOUCHINTERFACE_API UMotionRecognizer : public UActorComponent
51{
52 GENERATED_BODY()
53
54public:
55 // Sets default values for this component's properties
56 UMotionRecognizer();
57
58protected:
59 // Called when the game starts
60 virtual void BeginPlay() override;
61
62public:
63 // Called every frame
64 virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
65
66 // Calibrate tilt
67 UFUNCTION(Category="Motion Manager", BlueprintCallable)
68 virtual void Calibrate();
69
70 // Tries to counteract the parasitic rotation of the sensor
71 //UFUNCTION(Category="Motion Manager", BlueprintCallable)
72 //virtual void StabilizeGyroscope();
73
74 UFUNCTION(Category="Motion Manager", BlueprintCallable)
75 virtual void Recenter(const bool bRememberOffset, const FRotator CurrentOffset);
76
77private:
78 void QuickAccDetector();
79 void ShakeDetector();
80 void MotionBasedRotation(const float DeltaTime);
81
82public:
83 UPROPERTY(Category="Input", EditAnywhere, BlueprintReadOnly)
84 TEnumAsByte<EAutoReceiveInput::Type> AutoReceiveInput;
85
86
88 UPROPERTY(Category="Quick Acceleration", EditAnywhere, BlueprintReadWrite)
89 float QuickAccelerationThreshold;
90
93 UPROPERTY(Category="Quick Acceleration", EditAnywhere, BlueprintReadWrite, meta=(ClampMin=0.25f))
94 float DelayBetweenQuickAccDetection;
95
96
98 UPROPERTY(Category="Shake", EditAnywhere, BlueprintReadWrite)
99 float ShakeDetectionThreshold;
100
103 UPROPERTY(Category="Shake", EditAnywhere, BlueprintReadWrite, meta=(ClampMin=0.25f))
104 float ShakeAllowedTime;
105
108 UPROPERTY(Category="Shake", EditAnywhere, BlueprintReadWrite)
109 uint8 bCallShakeEachFrame:1;
110
111
113 UPROPERTY(Category="Motion Based Rotation", EditAnywhere, BlueprintReadWrite)
114 float TurnRate;
115
116 //TODO: Useful param if motion manager drive the camera rotation directly
118 //UPROPERTY(Category="Motion Based Rotation", EditAnywhere, BlueprintReadWrite)
119 //uint8 bAllowRoll:1;
120
122 UPROPERTY(Category="Motion Based Rotation", EditAnywhere, BlueprintReadWrite)
123 uint8 bInvertAxis:1;
124
125 UPROPERTY(Category="Motion Based Rotation", EditAnywhere, BlueprintReadWrite)
126 uint8 bLimitRotation:1;
127
129 UPROPERTY(Category="Motion Based Rotation", EditAnywhere, BlueprintReadWrite)
130 FVector MaxAmplitude;
131
133 uint8 bRememberLimit:1;
134
135
136 // EVENT
137
138 UPROPERTY(Category="Motion Manager", BlueprintAssignable)
139 FOnSimpleMotionDelegate OnIMUInputState;
140
145 UPROPERTY(Category="Motion Manager", BlueprintAssignable)
146 FOnQuickAccelerationDelegate OnQuickAcceleration;
147
148 UPROPERTY(Category="Motion Manager", BlueprintAssignable)
149 FOnShakeMotionDelegate OnShakeStart;
150
151 UPROPERTY(Category="Motion Manager", BlueprintAssignable)
152 FOnShakeMotionDelegate OnShaking;
153
154 UPROPERTY(Category="Motion Manager", BlueprintAssignable)
155 FOnShakeMotionDelegate OnShakeEnd;
156
159 UPROPERTY(Category="Motion Manager", BlueprintAssignable)
160 FOnMotionDelegate OnMotionBasedRotation;
161
162private:
163 EAccelerationType GetAccelerationType(float Threshold) const;
164
165 UPROPERTY()
166 APlayerController* PlayerController;
167
168 FVector Tilt;
169 FVector LastTilt;
170 FVector Gravity;
171 FVector RotationRate;
172 FVector Acceleration;
173
174 TArray<FVector> TiltValues;
175
176 uint8 bCanDetectTap:1;
177 uint8 bShakeDetected:1;
178 uint8 bAccelerationDetected:1;
179
180 FTimerHandle TapDetectorTimerHandle;
181 FTimerHandle StabilizationTimerHandle;
182 FTimerHandle ShakeTimerHandle;
183
184 double CurrentTime;
185 double LastQuickAccTime;
186
187 int32 ShakeAccCount;
188
189 EAccelerationType ShakeNextDirectionExpected;
190 EShake CurrentShake;
191 EShake ShakeDirectionExpected;
192
193 float LastAccelerationZ;
194
195 FRotator CameraRotation;
196};
BlueprintType
Definition ComponentDecorator_Animation.h:40
meta
Definition GestureRecognizerComp.h:274
ClassGroup
Definition GestureRecognizerComp.h:274
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FiveParams(FOnSimpleMotionDelegate, int32, PlayerIndex, FVector, Acceleration, FVector, Gravity, FVector, RotationRate, FVector, Tilt)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnShakeMotionDelegate, int32, PlayerIndex, EShake, ShakeType)
EShake
Definition MotionRecognizer.h:11
@ Vertical
Definition MotionRecognizer.h:13
@ Horizontal
Definition MotionRecognizer.h:12
@ BackAndForth
Definition MotionRecognizer.h:14
EAccelerationType
Definition MotionRecognizer.h:19
@ Down
Definition MotionRecognizer.h:38
@ Up
Definition MotionRecognizer.h:35
@ Forward
Definition MotionRecognizer.h:29
@ Right
Definition MotionRecognizer.h:26
@ Left
Definition MotionRecognizer.h:23
@ UMETA
Definition MotionRecognizer.h:20
@ Backward
Definition MotionRecognizer.h:32