Touch Interface Designer 2025.2
Create touch interface with a visual editor and manage all mobile inputs like gestures
Loading...
Searching...
No Matches
SliderLogic.h
Go to the documentation of this file.
1// Copyright 2025 Lost in Game Studio. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "ComponentLogic.h"
7#include "SliderLogic.generated.h"
8
10
11UENUM()
12enum class ESliderType : uint8
13{
17};
18
22UCLASS()
23class TOUCHINTERFACE_API USliderLogic : public UComponentLogic
24{
25 GENERATED_BODY()
26
27public:
29
30 virtual void Initialize_Implementation() override;
31
32 virtual void OnPress_Implementation(const FGeometry& ComponentGeometry, const FPointerEvent& PointerEvent) override;
33 virtual void OnMove_Implementation(const FGeometry& ComponentGeometry, const FPointerEvent& PointerEvent) override;
34 virtual void OnRelease_Implementation(const FGeometry& ComponentGeometry, const FPointerEvent& PointerEvent) override;
35
36 virtual void SetInputAction_Implementation(UInputAction* NewInputAction) override;
37
38 //TODO: Make properties private (with allowPrivateAccess) and add getters and setters exposed to blueprint
39
40#if WITH_EDITOR
41 virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
42#endif
43
44private:
45 FVector2D CalculateHandleOffset(const float InValue) const;
46
47 void CalculateCircularHandleDirectionAndAlignment(const float InValue, FVector2D& Direction, FVector2D& Alignment) const;
48
49 FVector2D CalculateHandleOffsetFromLocation(const FVector2D Location);
50
51 void CalculateCircularHandleDirectionAndAlignmentFromLocation(const FVector2D Location, FVector2D& Direction, FVector2D& Alignment) const;
52
53 float CalculateInputValue(const FVector2D Location) const;
54
55 bool CanSendInput(const FVector2D Location) const;
56
57public:
58 //Slider the slider type
61
62
63 // Name of decorator layer that is moved
64 UPROPERTY(Category="Slider|Appearance", EditAnywhere, BlueprintReadOnly, meta=(GetOptions="GetAllDecoratorNames"))
65 FName HandleDecoratorName;
66
70 UPROPERTY(Category="Slider|Appearance", EditAnywhere, BlueprintReadWrite)
71 uint8 bInvert:1;
72
73 //Start angle (-180 to 180). Used only with circle type slider
74 UPROPERTY(Category="Slider|Appearance", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="Type==ESliderType::Circle", EditConditionHides))
75 float StartAngle;
76
77 //End angle (-180 to 180). Used only with circle type slider
78 UPROPERTY(Category="Slider|Appearance", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="Type==ESliderType::Circle", EditConditionHides))
79 float EndAngle;
80
81 //If enabled, set handle rotation to circle rotation based on value. Otherwise, the handle keep same rotation
82 UPROPERTY(Category="Slider|Appearance", EditAnywhere, BlueprintReadWrite, meta=(EditCondition="Type==ESliderType::Circle", EditConditionHides))
83 uint8 bAlignRotation:1;
84
85
86 UPROPERTY(Category="Slider|Input", EditAnywhere, BlueprintReadWrite)
87 TObjectPtr<UInputAction> InputAction;
88
89 //Minimum value of slider
90 UPROPERTY(Category="Slider|Input", EditAnywhere, BlueprintReadWrite)
91 float MinValue;
92
93 //Maximum value of slider
94 UPROPERTY(Category="Slider|Input", EditAnywhere, BlueprintReadWrite)
95 float MaxValue;
96
97 //Current value of slider (0 to 1)
98 UPROPERTY(Category="Slider|Input", EditAnywhere, BlueprintReadWrite, meta=(ClampMin=0.0f, ClampMax=1.0f))
99 float Value;
100
101 //If enabled, inject input each frame otherwise, inject only when value change.
102 UPROPERTY(Category="Slider|Input", EditAnywhere, BlueprintReadWrite)
104
105 //TODO: Inject continuously even on release. Should be stopped manually
106
107
108 //The slider handle back to center when interaction ended
109 UPROPERTY(Category="Slider|Advanced", EditAnywhere, BlueprintReadWrite)
111
112 //If enabled, the center of handle can be moved to reach the edge of component
113 UPROPERTY(Category="Slider|Advanced", EditAnywhere, BlueprintReadWrite)
115
116protected:
117 UPROPERTY()
119
120private:
121 FVector2D OriginalDecoratorBrushOffset;
122};
ESliderType
Definition SliderLogic.h:13
@ Vertical
Definition SliderLogic.h:15
@ Circle
Definition SliderLogic.h:16
@ Horizontal
Definition SliderLogic.h:14
Definition ComponentDecorator.h:36
BlueprintReadWrite float MaxValue
Definition SliderLogic.h:95
BlueprintReadWrite
Definition SliderLogic.h:74
virtual void Initialize_Implementation() override
Definition SliderLogic.cpp:28
BlueprintReadWrite uint8 bInvert
Definition SliderLogic.h:71
virtual void OnPress_Implementation(const FGeometry &ComponentGeometry, const FPointerEvent &PointerEvent) override
Definition SliderLogic.cpp:87
virtual void OnMove_Implementation(const FGeometry &ComponentGeometry, const FPointerEvent &PointerEvent) override
Definition SliderLogic.cpp:140
TWeakObjectPtr< UComponentDecorator > HandleDecoratorRef
Definition SliderLogic.h:118
EditAnywhere
Definition SliderLogic.h:59
virtual void OnRelease_Implementation(const FGeometry &ComponentGeometry, const FPointerEvent &PointerEvent) override
Definition SliderLogic.cpp:195
BlueprintReadWrite ESliderType Type
Definition SliderLogic.h:60
BlueprintReadWrite uint8 bHandleCenterToEdge
Definition SliderLogic.h:114
Category
Definition SliderLogic.h:59
BlueprintReadWrite TObjectPtr< UInputAction > InputAction
Definition SliderLogic.h:87
virtual void SetInputAction_Implementation(UInputAction *NewInputAction) override
Definition SliderLogic.cpp:223
BlueprintReadOnly
Definition SliderLogic.h:64
BlueprintReadWrite uint8 bBackToCenter
Definition SliderLogic.h:110
USliderLogic()
Definition SliderLogic.cpp:11
meta
Definition SliderLogic.h:64
BlueprintReadWrite uint8 bSendContinuousInput
Definition SliderLogic.h:103
BlueprintReadWrite float MinValue
Definition SliderLogic.h:91