A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
VRSliderComponent.h
Go to the documentation of this file.
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "MotionControllerComponent.h"
8#include "VRGripInterface.h"
9#include "GameplayTagContainer.h"
10#include "GameplayTagAssetInterface.h"
11#include "Components/SplineComponent.h"
13#include "Components/StaticMeshComponent.h"
14
15#include "VRSliderComponent.generated.h"
16
17UENUM(Blueprintable)
18enum class EVRInteractibleSliderLerpType : uint8
19{
23};
24
25UENUM(Blueprintable)
26enum class EVRInteractibleSliderDropBehavior : uint8
27{
29 Stay,
30
33};
34
36DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVRSliderHitPointSignature, float, SliderProgressPoint);
37DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVRSliderFinishedLerpingSignature, float, FinalProgress);
38
42UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent), ClassGroup = (VRExpansionPlugin))
43class VREXPANSIONPLUGIN_API UVRSliderComponent : public UStaticMeshComponent, public IVRGripInterface, public IGameplayTagAssetInterface
44{
45 GENERATED_BODY()
46
47public:
48 UVRSliderComponent(const FObjectInitializer& ObjectInitializer);
49
50
53 // Call to use an object
54 UPROPERTY(BlueprintAssignable, Category = "VRSliderComponent")
55 FVRSliderHitPointSignature OnSliderHitPoint;
56
57 UFUNCTION(BlueprintImplementableEvent, meta = (DisplayName = "Slider State Changed"))
58 void ReceiveSliderHitPoint(float SliderProgressPoint);
59
60 UPROPERTY(BlueprintAssignable, Category = "VRSliderComponent")
61 FVRSliderFinishedLerpingSignature OnSliderFinishedLerping;
62
63 UFUNCTION(BlueprintImplementableEvent, meta = (DisplayName = "Slider Finished Lerping"))
64 void ReceiveSliderFinishedLerping(float FinalProgress);
65
66 // If true then this slider will only update in its tick event instead of normally using the controllers update event
67 // Keep in mind that you then must adjust the tick group in order to make sure it happens after the gripping controller
68 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
69 bool bUpdateInTick;
70 bool bPassThrough;
71
72 float LastSliderProgressState;
74 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
75 FVector MaxSlideDistance;
76
77 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
78 FVector MinSlideDistance;
80 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
81 EVRInteractibleSliderDropBehavior SliderBehaviorWhenReleased;
82
83 // Number of frames to average momentum across for the release momentum (avoids quick waggles)
84 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings", meta = (ClampMin = "0", ClampMax = "12", UIMin = "0", UIMax = "12"))
85 int FramesToAverage;
86
87 // Units in % of total length per second to slow a momentum lerp down
88 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings", meta = (ClampMin = "0.0", ClampMax = "10.0", UIMin = "0.0", UIMax = "10.0"))
89 float SliderMomentumFriction;
90
91 // % of elasticity on reaching the end 0 - 1.0
92 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings", meta = (ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0"))
93 float SliderRestitution;
95 // Maximum momentum of the slider in units of the total distance per second (0.0 - 1.0)
96 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings", meta = (ClampMin = "0.0", UIMin = "0.0"))
97 float MaxSliderMomentum;
98
99 UPROPERTY(BlueprintReadOnly, Category = "VRSliderComponent")
100 bool bIsLerping;
101
102 // For momentum retention
103 FVector MomentumAtDrop;
104 FVector LastSliderProgress;
105 float SplineMomentumAtDrop;
106 float SplineLastSliderProgress;
107
108 // Gets filled in with the current slider location progress
109 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "VRSliderComponent")
110 float CurrentSliderProgress;
112 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
113 bool bSlideDistanceIsInParentSpace;
114
115 // If true then this slider is locked in place until unlocked again
116 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
117 bool bIsLocked;
119 // If true then this slider will auto drop even when locked
120 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
121 bool bAutoDropWhenLocked;
122
123 // Sets if the slider is locked or not
124 UFUNCTION(BlueprintCallable, Category = "GripSettings")
125 void SetIsLocked(bool bNewLockedState);
127 // Uses the legacy slider logic that doesn't ABS the min and max values
128 // Retains compatibility with some older projects
129 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
130 bool bUseLegacyLogic;
131
132 // How far away from an event state before the slider allows throwing the same state again, default of 1.0 means it takes a full toggle
133 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0"))
134 float EventThrowThreshold;
135 bool bHitEventThreshold;
136
137 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GripSettings")
138 float PrimarySlotRange;
139
140 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GripSettings")
141 float SecondarySlotRange;
143 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GripSettings")
144 int GripPriority;
145
146 // Sets the grip priority
147 UFUNCTION(BlueprintCallable, Category = "GripSettings")
148 void SetGripPriority(int NewGripPriority);
149
150 // Set this to assign a spline component to the slider
151 UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Replicated/*Using = OnRep_SplineComponentToFollow*/, Category = "VRSliderComponent")
152 USplineComponent * SplineComponentToFollow;
153
154 /*UFUNCTION()
155 virtual void OnRep_SplineComponentToFollow()
157 CalculateSliderProgress();
158 }*/
160 // Where the slider should follow the rotation and scale of the spline as well
161 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
162 bool bFollowSplineRotationAndScale;
163
164 // Does not allow the slider to skip past nodes on the spline, it requires it to progress from node to node
165 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
166 bool bEnforceSplineLinearity;
167 float LastInputKey;
168 float LerpedKey;
169
170 // Type of lerp to use when following a spline
171 // For lerping I would suggest using ConstantTo in general as it will be the smoothest.
172 // Normal Interp will change speed based on distance, that may also have its uses.
173 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
174 EVRInteractibleSliderLerpType SplineLerpType;
175
176 // Lerp Value for the spline, when in InterpMode it is the speed of interpolation
177 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (ClampMin = "0", UIMin = "0"))
178 float SplineLerpValue;
179
180 // Uses snap increments to move between, not compatible with retain momentum.
181 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
182 bool bSliderUsesSnapPoints;
183
184 // Portion of the slider that the slider snaps to on release and when within the threshold distance
185 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (editcondition = "bSliderUsesSnapPoints", ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0"))
186 float SnapIncrement;
187
188 // Threshold distance that when within the slider will stay snapped to its current snap increment
189 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (editcondition = "bSliderUsesSnapPoints", ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0"))
190 float SnapThreshold;
191
192 // If true then the slider progress will keep incrementing between snap points if outside of the threshold
193 // However events will not be thrown
194 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (editcondition = "bSliderUsesSnapPoints") )
195 bool bIncrementProgressBetweenSnapPoints;
196
197
198 // Resetting the initial transform here so that it comes in prior to BeginPlay and save loading.
199 virtual void OnRegister() override;
200
201 // Now replicating this so that it works correctly over the network
202 UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_InitialRelativeTransform, Category = "VRSliderComponent")
203 FTransform_NetQuantize InitialRelativeTransform;
204
205 UFUNCTION()
206 virtual void OnRep_InitialRelativeTransform()
207 {
208 CalculateSliderProgress();
210
211 FVector InitialInteractorLocation;
212 FVector InitialGripLoc;
213 FVector InitialDropLocation;
214
215 // Checks if we should throw some events
216 void CheckSliderProgress();
218 /*
219 Credit to:
220 https://github.com/Seurabimn
221
222 Who had this function in an engine pull request:
223 https://github.com/EpicGames/UnrealEngine/pull/6646
224 */
225 float GetDistanceAlongSplineAtSplineInputKey(float InKey) const;
226
227
228 // Calculates the current slider progress
229 UFUNCTION(BlueprintCallable, Category = "VRSliderComponent")
230 float CalculateSliderProgress();
231
232 // Forcefully sets the slider progress to the defined value
233 UFUNCTION(BlueprintCallable, Category = "VRSliderComponent")
234 void SetSliderProgress(float NewSliderProgress);
235
236 // Should be called after the slider is moved post begin play
237 UFUNCTION(BlueprintCallable, Category = "VRSliderComponent")
238 void ResetInitialSliderLocation();
240 // Sets the spline component to follow, if empty, just reinitializes the transform and removes the follow component
241 UFUNCTION(BlueprintCallable, Category = "VRSliderComponent")
242 void SetSplineComponentToFollow(USplineComponent * SplineToFollow);
243
244 void ResetToParentSplineLocation();
245
246 void GetLerpedKey(float &ClosestKey, float DeltaTime);
247 float GetCurrentSliderProgress(FVector CurLocation, bool bUseKeyInstead = false, float CurKey = 0.f);
248 FVector ClampSlideVector(FVector ValueToClamp);
249
250 // ------------------------------------------------
251 // Gameplay tag interface
252 // ------------------------------------------------
253
255 virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override
256 {
257 TagContainer = GameplayTags;
258 }
259
261 UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "GameplayTags")
262 FGameplayTagContainer GameplayTags;
263
264 // End Gameplay Tag Interface
265
266 virtual void PreReplication(IRepChangedPropertyTracker & ChangedPropertyTracker) override;
267
268
269 // Requires bReplicates to be true for the component
270 UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface")
271 bool bRepGameplayTags;
272
273 // Overrides the default of : true and allows for controlling it like in an actor, should be default of off normally with grippable components
274 UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface|Replication")
275 bool bReplicateMovement;
276
277 virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
278 virtual void BeginPlay() override;
280 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
281 EGripMovementReplicationSettings MovementReplicationSetting;
282
283 // Distance before the object will break out of the hand, 0.0f == never will
284 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
285 float BreakDistance;
286
287 // Checks and applies auto drop if we need too
288 bool CheckAutoDrop(UGripMotionControllerComponent* GrippingController, const FBPActorGripInformation& GripInformation);
290 // Should we deny gripping on this object
291 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface", meta = (ScriptName = "IsDenyGripping"))
292 bool bDenyGripping;
293
294 UPROPERTY(BlueprintReadOnly, Category = "VRGripInterface", meta = (ScriptName = "IsCurrentlyHeld"))
295 bool bIsHeld; // Set on grip notify, not net serializing
296
297 UPROPERTY(BlueprintReadOnly, Category = "VRGripInterface")
298 FBPGripPair HoldingGrip; // Set on grip notify, not net serializing
299 bool bOriginalReplicatesMovement;
300
301 // Called when a object is gripped
302 // If you override the OnGrip event then you will need to call the parent implementation or this event will not fire!!
303 UPROPERTY(BlueprintAssignable, Category = "Grip Events")
304 FVROnGripSignature OnGripped;
306 // Called when a object is dropped
307 // If you override the OnGrip event then you will need to call the parent implementation or this event will not fire!!
308 UPROPERTY(BlueprintAssignable, Category = "Grip Events")
309 FVROnDropSignature OnDropped;
310
311 // Grip interface setup
312
313 // Set up as deny instead of allow so that default allows for gripping
314 // The GripInitiator is not guaranteed to be valid, check it for validity
315 bool DenyGripping_Implementation(UGripMotionControllerComponent * GripInitiator = nullptr) override;
316
317 // How an interfaced object behaves when teleporting
318 EGripInterfaceTeleportBehavior TeleportBehavior_Implementation() override;
319
320 // Should this object simulate on drop
321 bool SimulateOnDrop_Implementation() override;
322
323 // Grip type to use
324 EGripCollisionType GetPrimaryGripType_Implementation(bool bIsSlot) override;
325
326 // Secondary grip type
327 ESecondaryGripType SecondaryGripType_Implementation() override;
328
329 // Define which movement repliation setting to use
330 EGripMovementReplicationSettings GripMovementReplicationType_Implementation() override;
331
332 // Define the late update setting
333 EGripLateUpdateSettings GripLateUpdateSetting_Implementation() override;
334
335 // What grip stiffness and damping to use if using a physics constraint
336 void GetGripStiffnessAndDamping_Implementation(float& GripStiffnessOut, float& GripDampingOut) override;
337
338 // Get the advanced physics settings for this grip
339 FBPAdvGripSettings AdvancedGripSettings_Implementation() override;
340
341 // What distance to break a grip at (only relevent with physics enabled grips
342 float GripBreakDistance_Implementation() override;
343
344 // Get grip slot in range
345 void ClosestGripSlotInRange_Implementation(FVector WorldLocation, bool bSecondarySlot, bool& bHadSlotInRange, FTransform& SlotWorldTransform, FName& SlotName, UGripMotionControllerComponent* CallingController = nullptr, FName OverridePrefix = NAME_None) override;
347 // Check if an object allows multiple grips at one time
348 bool AllowsMultipleGrips_Implementation() override;
349
350 // Returns if the object is held and if so, which controllers are holding it
351 void IsHeld_Implementation(TArray<FBPGripPair>& CurHoldingControllers, bool& bCurIsHeld) override;
353 // Interface function used to throw the delegates that is invisible to blueprints so that it can't be overridden
354 virtual void Native_NotifyThrowGripDelegates(UGripMotionControllerComponent* Controller, bool bGripped, const FBPActorGripInformation& GripInformation, bool bWasSocketed = false) override;
355
356 // Sets is held, used by the plugin
357 void SetHeld_Implementation(UGripMotionControllerComponent* NewHoldingController, uint8 GripID, bool bNewIsHeld) override;
358
359 // Returns if the object wants to be socketed
360 bool RequestsSocketing_Implementation(USceneComponent*& ParentToSocketTo, FName& OptionalSocketName, FTransform_NetQuantize& RelativeTransform) override;
361
362 // Get grip scripts
363 bool GetGripScripts_Implementation(TArray<UVRGripScriptBase*>& ArrayReference) override;
364
365
366 // Events //
367
368 // Event triggered each tick on the interfaced object when gripped, can be used for custom movement or grip based logic
369 void TickGrip_Implementation(UGripMotionControllerComponent* GrippingController, const FBPActorGripInformation& GripInformation, float DeltaTime) override;
370
371 // Event triggered on the interfaced object when gripped
372 void OnGrip_Implementation(UGripMotionControllerComponent* GrippingController, const FBPActorGripInformation& GripInformation) override;
373
374 // Event triggered on the interfaced object when grip is released
375 void OnGripRelease_Implementation(UGripMotionControllerComponent* ReleasingController, const FBPActorGripInformation& GripInformation, bool bWasSocketed = false) override;
376
377 // Event triggered on the interfaced object when child component is gripped
378 void OnChildGrip_Implementation(UGripMotionControllerComponent* GrippingController, const FBPActorGripInformation& GripInformation) override;
379
380 // Event triggered on the interfaced object when child component is released
381 void OnChildGripRelease_Implementation(UGripMotionControllerComponent* ReleasingController, const FBPActorGripInformation& GripInformation, bool bWasSocketed = false) override;
382
383 // Event triggered on the interfaced object when secondary gripped
384 void OnSecondaryGrip_Implementation(UGripMotionControllerComponent* GripOwningController, USceneComponent* SecondaryGripComponent, const FBPActorGripInformation& GripInformation) override;
385
386 // Event triggered on the interfaced object when secondary grip is released
387 void OnSecondaryGripRelease_Implementation(UGripMotionControllerComponent* GripOwningController, USceneComponent* ReleasingSecondaryGripComponent, const FBPActorGripInformation& GripInformation) override;
388
389 // Interaction Functions
390
391 // Call to use an object
392 void OnUsed_Implementation() override;
393
394 // Call to stop using an object
395 void OnEndUsed_Implementation() override;
396
397 // Call to use an object
398 void OnSecondaryUsed_Implementation() override;
399
400 // Call to stop using an object
401 void OnEndSecondaryUsed_Implementation() override;
402
403 // Call to send an action event to the object
404 void OnInput_Implementation(FKey Key, EInputEvent KeyEvent) override;
405
406 protected:
408};
EGripMovementReplicationSettings
UENUM(Blueprintable)
ESecondaryGripType
UENUM(Blueprintable)
EGripCollisionType
UENUM(Blueprintable)
EGripLateUpdateSettings
UENUM(Blueprintable)
EGripInterfaceTeleportBehavior
UENUM(Blueprintable)
EVRInteractibleSliderDropBehavior
UENUM(Blueprintable)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVRSliderHitPointSignature, float, SliderProgressPoint)
EVRInteractibleSliderLerpType
UENUM(Blueprintable)
virtual void Native_NotifyThrowGripDelegates(UGripMotionControllerComponent *Controller, bool bGripped, const FBPActorGripInformation &GripInformation, bool bWasSocketed=false)
UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent), ClassGroup = MotionController)
UCLASS(NotBlueprintable, BlueprintType, EditInlineNew, DefaultToInstanced, Abstract,...
UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent), ClassGroup = (VRExpansionPlugin))
float SnapThreshold
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (editcondition = "...
FBPGripPair HoldingGrip
UPROPERTY(BlueprintReadOnly, Category = "VRGripInterface")
virtual void GetOwnedGameplayTags(FGameplayTagContainer &TagContainer) const override
FVRSliderFinishedLerpingSignature OnSliderFinishedLerping
UPROPERTY(BlueprintAssignable, Category = "VRSliderComponent")
virtual void OnRep_InitialRelativeTransform()
UFUNCTION()
FGameplayTagContainer GameplayTags
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "GameplayTags")
float PrimarySlotRange
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GripSettings")
float BreakDistance
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
int FramesToAverage
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings",...
float SnapIncrement
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (editcondition = "...
EVRInteractibleSliderLerpType SplineLerpType
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
int GripPriority
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GripSettings")
float MaxSliderMomentum
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings",...
float SecondarySlotRange
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "GripSettings")
USplineComponent * SplineComponentToFollow
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Replicated, Category = "VRSliderComponent")
bool bIsLocked
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
bool bEnforceSplineLinearity
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
float EventThrowThreshold
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (ClampMin = "0....
bool bRepGameplayTags
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface")
bool bIsHeld
UPROPERTY(BlueprintReadOnly, Category = "VRGripInterface", meta = (ScriptName = "IsCurrentlyHeld"))
void ReceiveSliderHitPoint(float SliderProgressPoint)
UFUNCTION(BlueprintImplementableEvent, meta = (DisplayName = "Slider State Changed"))
FVector MinSlideDistance
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
float CurrentSliderProgress
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "VRSliderComponent")
EGripMovementReplicationSettings MovementReplicationSetting
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
float SliderMomentumFriction
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings",...
bool bDenyGripping
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface", meta = (ScriptName = "IsDen...
bool bUpdateInTick
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
EVRInteractibleSliderDropBehavior SliderBehaviorWhenReleased
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
FVROnGripSignature OnGripped
UPROPERTY(BlueprintAssignable, Category = "Grip Events")
bool bIsLerping
UPROPERTY(BlueprintReadOnly, Category = "VRSliderComponent")
bool bSliderUsesSnapPoints
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
FTransform_NetQuantize InitialRelativeTransform
UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_InitialRelativeTransform, Category = "VRSliderCo...
bool bUseLegacyLogic
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
FVRSliderHitPointSignature OnSliderHitPoint
UPROPERTY(BlueprintAssignable, Category = "VRSliderComponent")
bool bIncrementProgressBetweenSnapPoints
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (editcondition = "...
bool bSlideDistanceIsInParentSpace
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
FVector MaxSlideDistance
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
bool bReplicateMovement
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface|Replication")
void ReceiveSliderFinishedLerping(float FinalProgress)
UFUNCTION(BlueprintImplementableEvent, meta = (DisplayName = "Slider Finished Lerping"))
FVROnDropSignature OnDropped
UPROPERTY(BlueprintAssignable, Category = "Grip Events")
float SplineLerpValue
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent", meta = (ClampMin = "0",...
float SliderRestitution
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent|Momentum Settings",...
bool bAutoDropWhenLocked
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
bool bFollowSplineRotationAndScale
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRSliderComponent")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary|TransformNetQuantize", meta = (HasNativeMake = ...