Touch Interface Designer 2025.2
Create touch interface with a visual editor and manage all mobile inputs like gestures
Loading...
Searching...
No Matches
VirtualShape.h
Go to the documentation of this file.
1// Copyright 2024 Lost in Game Studio. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "UObject/Object.h"
7#include "VirtualShape.generated.h"
8
11
12USTRUCT(BlueprintType)
14{
15 GENERATED_BODY()
16
17
20 UPROPERTY(Category="Draw Data", EditAnywhere, BlueprintReadWrite)
21 FVector2D Location;
22
24 UPROPERTY(Category="Draw Data", EditAnywhere, BlueprintReadWrite)
26
27 UPROPERTY(Category="Draw Data", EditAnywhere, BlueprintReadWrite)
29
30 UPROPERTY(Category="Draw Data", EditAnywhere, BlueprintReadWrite)
31 uint8 bIsEndPoint:1;
32
33 bool IsPrimaryPoint() const { return bIsStartPoint || bIsEndPoint; }
34
35 FLinearColor GetColor() const
36 {
37 if (bIsSelected)
38 {
39 return FLinearColor(FColor::Blue);
40 }
41
42 if (bIsHovered)
43 {
44 return FLinearColor(FColor::Cyan);
45 }
46
47 if (bIsStartPoint)
48 {
49 return FLinearColor::Green;
50 }
51
52 if (bIsEndPoint)
53 {
54 return FLinearColor::Red;
55 }
56
57 return FLinearColor::White;
58 }
59
60 void SetIsHover(const bool bIsHover) { bIsHovered = bIsHover; }
61 void SetIsSelected(const bool bSelect) { bIsSelected = bSelect; }
62
64 : Location(ForceInitToZero)
65 , LocationFromBoundCenter(ForceInitToZero)
66 , bIsStartPoint(false)
67 , bIsEndPoint(false)
68 , bIsHovered(false)
69 , bIsSelected(false)
70 {
71
72 }
73
74 explicit FDrawData(const FVector2D InLocation, const bool bIsFirstPoint = false, const bool bSelect = false)
75 : Location(InLocation)
76 , LocationFromBoundCenter(ForceInitToZero)
77 , bIsStartPoint(bIsFirstPoint)
78 , bIsEndPoint(false)
79 , bIsHovered(false)
80 , bIsSelected(bSelect)
81 {
82
83 }
84
85 /*explicit FDotData(const FVector2D InLocation, const bool bIsFirstPoint = false, const bool bSelect = false, const bool bInIsEndPoint = false)
86 : Location(InLocation)
87 , bIsHovered(false)
88 , bIsSelected(bSelect)
89 , bIsStartPoint(bIsFirstPoint)
90 , bIsEndPoint(bInIsEndPoint)
91 {
92
93 }*/
94
95private:
97
98 uint8 bIsHovered:1;
99 uint8 bIsSelected:1;
100};
101
102USTRUCT(BlueprintType)
104{
105 GENERATED_BODY()
106
107
110 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
111 FVector2D StartPosition;
112
116 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
117 FVector2D EndPosition;
118
120 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
122
124 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
126
127 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
128 FVector2D Direction;
129
130 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
132
133 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
134 float Length;
135
136 float GetLength() const
137 {
138 return FVector2D::Distance(StartPosition, EndPosition);
139 }
140
142 : StartPosition(ForceInitToZero)
143 , EndPosition(ForceInitToZero)
144 , StartPositionFromBoundCenter(ForceInitToZero)
145 , EndPositionFromBoundCenter(ForceInitToZero)
146 , Direction(ForceInitToZero)
147 , bHasEndPoint(false)
148 , Length(0.0f)
149 , bHasDirection(false)
150 {
151
152 }
153
154 explicit FShapeLine(FVector2D InStartPosition)
155 : StartPosition(InStartPosition)
156 , EndPosition(ForceInitToZero)
157 , StartPositionFromBoundCenter(ForceInitToZero)
158 , Direction(ForceInitToZero)
159 , bHasEndPoint(false)
160 , Length(0.0f)
161 , bHasDirection(false)
162 {
163
164 }
165
166 FShapeLine(const FVector2D InStartPosition, const FVector2D InEndPosition, const FVector2D InDirection, const float InLength, const FVector2D InBoundCenter)
167 : StartPosition(InStartPosition)
168 , EndPosition(InEndPosition)
169 , Direction(InDirection)
170 , bHasEndPoint(false)
171 , Length(InLength)
172 , bHasDirection(false)
173 {
174 StartPositionFromBoundCenter = InBoundCenter - InStartPosition;
175 EndPositionFromBoundCenter = InBoundCenter - InEndPosition;
176 }
177
178private:
180
181 uint8 bHasDirection:1;
182};
183
184USTRUCT(BlueprintType)
186{
187 GENERATED_BODY()
188
189
192 UPROPERTY(Category="Shape Angle", EditAnywhere, BlueprintReadWrite)
193 FVector2D Location;
194
196 UPROPERTY(Category="Shape Angle", EditAnywhere, BlueprintReadWrite)
198
199 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
200 float Angle;
201
202 UPROPERTY(Category="Shape Line", EditAnywhere, BlueprintReadWrite)
204
206 : Location(ForceInitToZero)
207 , LocationFromBoundCenter(ForceInitToZero)
208 , Angle(0.0f)
209 , bIsRightCornerAngle(false)
210 {
211
212 }
213
214 FShapeAngle(const FVector2D InPosition, const float InAngle, const bool InIsRightCornerAngle, const FVector2D InBoundCenter)
215 : Location(InPosition)
216 , Angle(InAngle)
217 , bIsRightCornerAngle(InIsRightCornerAngle)
218 {
219 LocationFromBoundCenter = InBoundCenter - InPosition;
220 }
221};
222
223#if WITH_EDITOR
224 DECLARE_DELEGATE_OneParam(FOnVirtualShapeChangedEvent, FPropertyChangedEvent&)
225#endif
226
227
231UCLASS(BlueprintType)
232class TOUCHINTERFACE_API UVirtualShape : public UObject
233{
234 GENERATED_BODY()
235
236public:
238
241 float Evaluate(const TArray<FDrawData> InDrawData);
242
243
244 UFUNCTION(Category="Virtual Shape", BlueprintCallable, BlueprintPure)
245 TArray<FShapeLine> GetShapeLines() const { return ShapeLines; }
246
247 UFUNCTION(Category="Virtual Shape", BlueprintCallable, BlueprintPure)
248 TArray<FShapeAngle> GetShapeAngles() const { return ShapeAngles; }
249
250 UFUNCTION(Category="Virtual Shape", BlueprintCallable, BlueprintPure)
251 TArray<FDrawData> GetShapeDots() const { return ShapeDots; }
252
253 UFUNCTION(Category="Virtual Shape", BlueprintCallable, BlueprintPure)
254 TArray<FDrawData>& GetShapeDotsByRef() { return ShapeDots; }
255
256
257 TMap<FName, float> GetResults() const { return LastMatchingResults; }
258
259 UFUNCTION(Category="Virtual Shape", BlueprintCallable, BlueprintPure)
260 float GetMatchingResult() const { return LastMatchingResult; }
261
262#if WITH_EDITOR
263 virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
264
265 FOnVirtualShapeChangedEvent OnVirtualShapeChangedEvent;
266#endif
267
268
271 UPROPERTY(Category="Virtual Shape", EditAnywhere, BlueprintReadOnly)
272 FName Name;
273
276 UPROPERTY(Category="Virtual Shape", EditAnywhere, BlueprintReadOnly)
278
281 UPROPERTY(Category="Virtual Shape", EditAnywhere, BlueprintReadOnly, Instanced)
283
286 UPROPERTY(Category="Virtual Shape", EditAnywhere, BlueprintReadOnly, Instanced)
288
289
290 UPROPERTY()
292
293 UPROPERTY()
295
296 UPROPERTY()
298
299 UPROPERTY()
301
302 UPROPERTY()
304
305 UPROPERTY()
307
308 UPROPERTY()
309 FVector2D TopLeftBound;
310
311 UPROPERTY()
313
314 UPROPERTY()
315 FVector2D BoundCenter;
316
317private:
318 TMap<FName, float> LastMatchingResults;
319
320 float LastMatchingResult;
321};
BlueprintType
Definition ComponentDecorator_Animation.h:40
DECLARE_DELEGATE_OneParam(FOnVirtualInputSelected, FName)
Definition VirtualShapeCleaner.h:18
Definition VirtualShapeEvaluator.h:19
BlueprintPure TArray< FDrawData > GetShapeDots() const
Definition VirtualShape.h:251
FVector2D SumOfLineDirections
Definition VirtualShape.h:306
UVirtualShape()
Definition VirtualShape.cpp:9
EditAnywhere
Definition VirtualShape.h:271
BlueprintPure float GetMatchingResult() const
Definition VirtualShape.h:260
Instanced TArray< TObjectPtr< UVirtualShapeCleaner > > CleanerFilters
Definition VirtualShape.h:282
BlueprintPure TArray< FDrawData > & GetShapeDotsByRef()
Definition VirtualShape.h:254
FVector2D BoundCenter
Definition VirtualShape.h:315
float TotalAngleValue
Definition VirtualShape.h:303
TArray< FShapeAngle > ShapeAngles
Definition VirtualShape.h:297
BlueprintReadOnly FText FriendlyName
Definition VirtualShape.h:277
TMap< FName, float > GetResults() const
Definition VirtualShape.h:257
BlueprintReadOnly FName Name
Definition VirtualShape.h:272
BlueprintPure TArray< FShapeLine > GetShapeLines() const
Definition VirtualShape.h:245
BlueprintReadOnly
Definition VirtualShape.h:281
Category
Definition VirtualShape.h:244
float Evaluate(const TArray< FDrawData > InDrawData)
Definition VirtualShape.cpp:18
BlueprintPure TArray< FShapeAngle > GetShapeAngles() const
Definition VirtualShape.h:248
FVector2D TopLeftBound
Definition VirtualShape.h:309
BlueprintCallable
Definition VirtualShape.h:244
float TotalLength
Definition VirtualShape.h:300
FVector2D BottomRightBound
Definition VirtualShape.h:312
TArray< FShapeLine > ShapeLines
Definition VirtualShape.h:294
Instanced TArray< TObjectPtr< UVirtualShapeEvaluator > > DetectFilters
Definition VirtualShape.h:287
TArray< FDrawData > ShapeDots
Definition VirtualShape.h:291
Definition VirtualShape.h:14
void SetIsSelected(const bool bSelect)
Definition VirtualShape.h:61
BlueprintReadWrite uint8 bIsEndPoint
Definition VirtualShape.h:31
bool IsPrimaryPoint() const
Definition VirtualShape.h:33
BlueprintReadWrite uint8 bIsStartPoint
Definition VirtualShape.h:28
Category
Definition VirtualShape.h:20
FDrawData()
Definition VirtualShape.h:63
BlueprintReadWrite FVector2D LocationFromBoundCenter
Definition VirtualShape.h:25
friend class SVirtualShapeEditorDesigner
Definition VirtualShape.h:96
EditAnywhere
Definition VirtualShape.h:20
void SetIsHover(const bool bIsHover)
Definition VirtualShape.h:60
FLinearColor GetColor() const
Definition VirtualShape.h:35
FDrawData(const FVector2D InLocation, const bool bIsFirstPoint=false, const bool bSelect=false)
Definition VirtualShape.h:74
BlueprintReadWrite FVector2D Location
Definition VirtualShape.h:21
Definition VirtualShape.h:186
FShapeAngle(const FVector2D InPosition, const float InAngle, const bool InIsRightCornerAngle, const FVector2D InBoundCenter)
Definition VirtualShape.h:214
BlueprintReadWrite float Angle
Definition VirtualShape.h:200
BlueprintReadWrite FVector2D Location
Definition VirtualShape.h:193
BlueprintReadWrite uint8 bIsRightCornerAngle
Definition VirtualShape.h:203
Category
Definition VirtualShape.h:192
FShapeAngle()
Definition VirtualShape.h:205
BlueprintReadWrite FVector2D LocationFromBoundCenter
Definition VirtualShape.h:197
EditAnywhere
Definition VirtualShape.h:192
Definition VirtualShape.h:104
EditAnywhere
Definition VirtualShape.h:110
BlueprintReadWrite float Length
Definition VirtualShape.h:134
FShapeLine(FVector2D InStartPosition)
Definition VirtualShape.h:154
BlueprintReadWrite uint8 bHasEndPoint
Definition VirtualShape.h:131
float GetLength() const
Definition VirtualShape.h:136
FShapeLine(const FVector2D InStartPosition, const FVector2D InEndPosition, const FVector2D InDirection, const float InLength, const FVector2D InBoundCenter)
Definition VirtualShape.h:166
BlueprintReadWrite FVector2D Direction
Definition VirtualShape.h:128
friend class SVirtualShapeEditorDesigner
Definition VirtualShape.h:179
FShapeLine()
Definition VirtualShape.h:141
BlueprintReadWrite FVector2D EndPosition
Definition VirtualShape.h:117
BlueprintReadWrite FVector2D EndPositionFromBoundCenter
Definition VirtualShape.h:125
BlueprintReadWrite FVector2D StartPositionFromBoundCenter
Definition VirtualShape.h:121
BlueprintReadWrite FVector2D StartPosition
Definition VirtualShape.h:111
Category
Definition VirtualShape.h:110