A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
GS_InteractibleSettings.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"
6#include "VRGripScriptBase.h"
8#include "GS_InteractibleSettings.generated.h"
9
10
11USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
12struct VREXPANSIONPLUGIN_API FBPGS_InteractionSettings
13{
14 GENERATED_BODY()
15public:
16
17 bool bHasValidBaseTransform; // So we don't have to equals the transform
18 FTransform BaseTransform;
19
20 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings")
21 uint32 bLimitsInLocalSpace : 1;
22
23 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings")
24 uint32 bGetInitialPositionsOnBeginPlay : 1;
25
26 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
27 uint32 bLimitX : 1;
29 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
30 uint32 bLimitY : 1;
31
32 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
33 uint32 bLimitZ : 1;
34
35 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
36 uint32 bLimitPitch : 1;
37
38 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
39 uint32 bLimitYaw : 1;
40
41 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
42 uint32 bLimitRoll : 1;
43
44 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
45 uint32 bIgnoreHandRotation : 1;
46
47 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear", meta = (editcondition = "!bGetInitialPositionsOnBeginPlay"))
48 FVector_NetQuantize100 InitialLinearTranslation;
50 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
51 FVector_NetQuantize100 MinLinearTranslation;
52
53 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
54 FVector_NetQuantize100 MaxLinearTranslation;
55
56 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular", meta = (editcondition = "!bGetInitialPositionsOnBeginPlay"))
57 FRotator InitialAngularTranslation;
58
59 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
60 FRotator MinAngularTranslation;
61
62 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
63 FRotator MaxAngularTranslation;
64
66 bLimitsInLocalSpace(true),
67 bGetInitialPositionsOnBeginPlay(true),
68 bLimitX(false),
69 bLimitY(false),
70 bLimitZ(false),
71 bLimitPitch(false),
72 bLimitYaw(false),
73 bLimitRoll(false),
74 bIgnoreHandRotation(false),
75 InitialLinearTranslation(FVector::ZeroVector),
76 MinLinearTranslation(FVector::ZeroVector),
77 MaxLinearTranslation(FVector::ZeroVector),
78 InitialAngularTranslation(FRotator::ZeroRotator),
79 MinAngularTranslation(FRotator::ZeroRotator),
80 MaxAngularTranslation(FRotator::ZeroRotator)
81 {
82 BaseTransform = FTransform::Identity;
83 bHasValidBaseTransform = false;
84 }
85};
86
87// A Grip script that overrides the default grip behavior and adds custom clamping logic instead,
88UCLASS(NotBlueprintable, ClassGroup = (VRExpansionPlugin), hideCategories = TickSettings)
89class VREXPANSIONPLUGIN_API UGS_InteractibleSettings : public UVRGripScriptBase
90{
91 GENERATED_BODY()
92public:
93
94 UGS_InteractibleSettings(const FObjectInitializer& ObjectInitializer);
95
96 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "InteractionSettings")
97 FBPGS_InteractionSettings InteractionSettings;
99 virtual void OnBeginPlay_Implementation(UObject * CallingOwner) override;
100 virtual bool GetWorldTransform_Implementation(UGripMotionControllerComponent * GrippingController, float DeltaTime, FTransform & WorldTransform, const FTransform &ParentTransform, FBPActorGripInformation &Grip, AActor * actor, UPrimitiveComponent * root, bool bRootHasInterface, bool bActorHasInterface, bool bIsForTeleport) override;
101 virtual void OnGrip_Implementation(UGripMotionControllerComponent * GrippingController, const FBPActorGripInformation & GripInformation) override;
102 virtual void OnGripRelease_Implementation(UGripMotionControllerComponent * ReleasingController, const FBPActorGripInformation & GripInformation, bool bWasSocketed = false) override;
103
104 // Flags the the interaction settings so that it will regenerate removing the hand rotation.
105 // Use this if you just changed the relative hand transform.
106 UFUNCTION(BlueprintCallable, Category = "InteractionSettings")
107 void RemoveHandRotation()
108 {
109 // Flag the base transform to be re-applied
110 InteractionSettings.bHasValidBaseTransform = false;
111 }
113 inline void RemoveRelativeRotation(UGripMotionControllerComponent * GrippingController, const FBPActorGripInformation & GripInformation)
114 {
115 InteractionSettings.BaseTransform = GripInformation.RelativeTransform;
116
117 // Reconstitute the controller transform relative to the object, then remove the rotation and set it back to relative to controller
118 // This could likely be done easier by just removing rotation that the object doesn't possess but for now this will do.
119 FTransform compTrans = this->GetParentTransform(true, GripInformation.GrippedBoneName);
120
121 InteractionSettings.BaseTransform = FTransform(InteractionSettings.BaseTransform.ToInverseMatrixWithScale()) * compTrans; // Reconstitute transform
122 InteractionSettings.BaseTransform.SetScale3D(GrippingController->GetPivotTransform().GetScale3D());
123 InteractionSettings.BaseTransform.SetRotation(FQuat::Identity); // Remove rotation
124
125 InteractionSettings.BaseTransform = compTrans.GetRelativeTransform(InteractionSettings.BaseTransform); // Set back to relative
126 InteractionSettings.bHasValidBaseTransform = true;
127 }
UCLASS(NotBlueprintable, ClassGroup = (VRExpansionPlugin), hideCategories = TickSettings)
FBPGS_InteractionSettings InteractionSettings
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "InteractionSettings")
void RemoveRelativeRotation(UGripMotionControllerComponent *GrippingController, const FBPActorGripInformation &GripInformation)
void RemoveHandRotation()
UFUNCTION(BlueprintCallable, Category = "InteractionSettings")
UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent), ClassGroup = MotionController)
UCLASS(NotBlueprintable, BlueprintType, EditInlineNew, DefaultToInstanced, Abstract,...
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
FTransform_NetQuantize RelativeTransform
UPROPERTY(BlueprintReadWrite, Category = "Settings")
FName GrippedBoneName
UPROPERTY(BlueprintReadWrite, Category = "Settings")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
uint32 bLimitRoll
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
uint32 bLimitY
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
uint32 bLimitsInLocalSpace
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings")
FVector_NetQuantize100 MinLinearTranslation
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
uint32 bIgnoreHandRotation
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
uint32 bGetInitialPositionsOnBeginPlay
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings")
uint32 bLimitX
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
FVector_NetQuantize100 MaxLinearTranslation
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
FRotator MinAngularTranslation
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
uint32 bLimitYaw
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
FVector_NetQuantize100 InitialLinearTranslation
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear", meta = (editcondition = "!...
FRotator InitialAngularTranslation
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular", meta = (editcondition = "!...
uint32 bLimitPitch
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")
uint32 bLimitZ
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Linear")
FRotator MaxAngularTranslation
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Settings|Angular")