add a debug virtual hand and some other fixes

This commit is contained in:
Mamadou Babaei
2023-04-28 01:21:04 +02:00
parent 5946528f14
commit 2846783ffc
13 changed files with 501 additions and 1 deletions
+1
View File
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- A new generic SenseGlove Debug module.
- A debug virtual hand.
### Fixed
@@ -43,11 +43,13 @@
#include "UObject/ConstructorHelpers.h"
#include "SenseGlove/Animation/SGVirtualHandAnimInstance.h"
#include "SenseGlove/Components/SGWristTrackerComponent.h"
#include "SGConnect/SGConnect.h"
#include "SGCore/SGDeviceList.h"
#include "SGCore/SGHandPose.h"
#include "SGCore/SGHapticGlove.h"
#include "SGCore/SGHapticGloveHandProfiles.h"
#include "SGDebug/SGDebugVirtualHand.h"
#include "SGLog/SGLog.h"
struct USGVirtualHandComponent::FImpl
@@ -124,6 +126,8 @@ struct USGVirtualHandComponent::FImpl
bool CheckGlove() const;
void SetVisibility(bool bInVisible) const;
void DrawDebugVirtualHand() const;
};
const TArray<TArray<FName>>& USGVirtualHandComponent::GetLeftHandFingerBoneNames()
@@ -205,11 +209,22 @@ USGVirtualHandComponent::USGVirtualHandComponent(const FObjectInitializer& Objec
bRight = true;
bHiddenInGameIfNoGloveDetected = false;
DebugVirtualHandSettings = FSGDebugVirtualHandSettings{
ESGDebugVirtualHandDrawingMode::None,
FVector(0.5f, 0.5f, 0.5f),
FColor(255, 0, 0, 255),
0.1f, 1.0f, 1.0f,
FColor(255, 0, 0, 255),
FColor(0, 255, 0, 255),
FColor(0, 0, 255, 255),
false, 1.1f, 0
};
Super::SetSkeletalMesh(nullptr, true);
bBackendInitialized = false;
Glove = nullptr;
WristTracker = nullptr;
}
void USGVirtualHandComponent::SetRight(const bool bInRight)
@@ -313,6 +328,11 @@ void USGVirtualHandComponent::TickComponent(
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
(void) Pimpl->CheckGlove();
if (IsValid(Glove) && DebugVirtualHandSettings.DrawingMode != ESGDebugVirtualHandDrawingMode::None)
{
Pimpl->DrawDebugVirtualHand();
}
}
void USGVirtualHandComponent::SetSkeletalMesh(USkeletalMesh* NewMesh, const bool bReinitPose)
@@ -331,6 +351,11 @@ void USGVirtualHandComponent::EditorTick(
const float DeltaTime, const ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
(void) Pimpl->CheckGlove();
if (IsValid(Glove) && DebugVirtualHandSettings.DrawingMode != ESGDebugVirtualHandDrawingMode::None)
{
Pimpl->DrawDebugVirtualHand();
}
}
bool USGVirtualHandComponent::IsGloveConnected() const
@@ -680,6 +705,31 @@ void USGVirtualHandComponent::FImpl::SetVisibility(const bool bInVisible) const
Owner->SetVisibility(bInVisible, true);
}
void USGVirtualHandComponent::FImpl::DrawDebugVirtualHand() const
{
const UWorld* World{Owner->GetWorld()};
if (!IsValid(Owner->WristTracker))
{
return;
}
const FVector& WristLocation{Owner->WristTracker->GetWristLocation()};
const FRotator& WristRotation{Owner->WristTracker->GetWristRotation()};
const USGHandPose* HandPose{Owner->GetHandPose()};
if (!IsValid(HandPose))
{
return;
}
const TArray<TArray<FVector>>& JointPositions{HandPose->GetJointPositions()};
const TArray<TArray<FRotator>>& JointRotations{HandPose->GetJointRotations()};
FSGDebugVirtualHand::Draw(World, WristLocation, WristRotation, JointPositions, JointRotations,
Owner->DebugVirtualHandSettings);
}
void USGVirtualHandComponent::FImplDeleter::operator()(const FImpl* P) const
{
delete P;
@@ -540,6 +540,7 @@ void USGWristTrackerComponent::FImpl::DrawDebugGizmo()
const FSGDebugGizmoSettings& DebugGizmoSettings{Owner->GetWristTrackerDebugGizmoSettings()};
FSGDebugGizmo::Draw(World, Location, Rotation, DebugGizmoSettings);
//FSGDebugGizmo::Draw(World, Owner->WristLocation, Owner->WristRotation, DebugGizmoSettings);
}
void USGWristTrackerComponent::FImplDeleter::operator()(const FImpl* P) const
@@ -97,6 +97,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
false, nullptr, ETeleportType::None);
HandLeft->SetRelativeLocation(FVector{30.0f, -20.0f, -10.0f},
false, nullptr, ETeleportType::None);
HandLeft->SetWristTracker(WristTrackerLeft);
WristTrackerRight = ObjectInitializer.CreateDefaultSubobject<USGWristTrackerComponent>(
this, TEXT("WristTrackerRight"));
@@ -111,6 +112,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
false, nullptr, ETeleportType::None);
HandRight->SetRelativeLocation(FVector{30.0f, 20.0f, -10.0f},
false, nullptr, ETeleportType::None);
HandRight->SetWristTracker(WristTrackerRight);
}
void ASGPawn::BeginPlay()
@@ -45,12 +45,15 @@
#include "Templates/UniquePtr.h"
#include "UObject/NameTypes.h"
#include "SGSettings/SGDebugVirtualHandSettings.h"
#include "SGVirtualHandComponent.generated.h"
class USkeletalMesh;
class USGHandPose;
class USGHapticGlove;
class USGWristTrackerComponent;
UCLASS(Config=Engine, Blueprintable, ClassGroup=(Rendering, Common), hidecategories=(Object, "Mesh|SkeletalAsset"),
editinlinenew, meta=(BlueprintSpawnableComponent))
@@ -83,6 +86,10 @@ private:
UPROPERTY(EditAnywhere, Category="SenseGlove", meta=(AllowPrivateAccess="false"))
uint8 bHiddenInGameIfNoGloveDetected : 1;
UPROPERTY(EditAnywhere, Category="SenseGlove",
meta=(AllowPrivateAccess="false", EditCondition="bDrawDebugVirtualHand", EditConditionHides))
FSGDebugVirtualHandSettings DebugVirtualHandSettings;
private:
UPROPERTY(Transient)
uint8 bBackendInitialized : 1;
@@ -90,6 +97,9 @@ private:
UPROPERTY(Transient)
USGHapticGlove* Glove;
UPROPERTY(Transient)
USGWristTrackerComponent* WristTracker;
public:
FORCEINLINE bool IsLeft() const
{
@@ -113,6 +123,11 @@ public:
bHiddenInGameIfNoGloveDetected = bInHiddenIfNoGloveDetected;
}
FORCEINLINE void SetWristTracker(USGWristTrackerComponent* InWristTracker)
{
WristTracker = InWristTracker;
}
public:
virtual void SetAnimClass(class UClass* NewClass) override;
@@ -32,7 +32,6 @@
*
*/
#pragma once
#include <memory>
@@ -0,0 +1,120 @@
/**
* @file
*
* @author Mamadou Babaei <mamadou@senseglove.com>
*
* @section LICENSE
*
* (The MIT License)
*
* Copyright (c) 2020 - 2023 SenseGlove
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @section DESCRIPTION
*
*
*/
#include "SGDebug/SGDebugVirtualHand.h"
#include "DrawDebugHelpers.h"
#include "Kismet/GameplayStatics.h"
#include "Math/Color.h"
#include "Math/Rotator.h"
#include "Math/Vector.h"
#include "SGDebug/SGDebugGizmo.h"
void FSGDebugVirtualHand::Draw(const UWorld* World, const FVector& WristLocation, const FRotator& WristRotation,
const TArray<TArray<FVector>>& JointPositions,
const TArray<TArray<FRotator>>& JointRotations,
const FSGDebugVirtualHandSettings& Settings)
{
ensureAlwaysMsgf(Settings.DrawingMode != ESGDebugVirtualHandDrawingMode::None,
TEXT("Invalid virtual hand drawing mode!"));
const float LifeTime = UGameplayStatics::GetWorldDeltaSeconds(World) * Settings.LifeTimeModifier;
if (Settings.DrawingMode == ESGDebugVirtualHandDrawingMode::CubicJoints)
{
DrawDebugBox(World, WristLocation, Settings.CubeExtent,
WristRotation.Quaternion(), Settings.CubeColor,
Settings.bPersistentLines, LifeTime, Settings.DepthPriority, Settings.CubeThickness);
}
else if (Settings.DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints)
{
FSGDebugGizmo::Draw(World,
WristLocation, WristRotation,
FSGDebugGizmoSettings{
Settings.GizmoLength,
Settings.GizmoThickness,
Settings.GizmoXAxisColor,
Settings.GizmoYAxisColor,
Settings.GizmoZAxisColor,
!!Settings.bPersistentLines,
Settings.LifeTimeModifier,
Settings.DepthPriority
});
}
uint32 JointRotationsIndex = -1;
for (const TArray<FVector>& FingerJointPositions: JointPositions)
{
++JointRotationsIndex;
uint32 FingerJointRotationsIndex = -1;
const TArray<FRotator>& FingerJointRotations{JointRotations[JointRotationsIndex]};
for (const FVector& FingerJointPosition: FingerJointPositions)
{
++FingerJointRotationsIndex;
const FRotator& FingerJointRotation(FingerJointRotations[FingerJointRotationsIndex]);
const FVector DrawJointLocation(WristRotation.RotateVector(FingerJointPosition) + WristLocation);
const FQuat JointQuat{FingerJointRotation};
const FQuat WristQuat{WristRotation};
const FRotator DrawJointRotation{WristQuat * JointQuat};
if (Settings.DrawingMode == ESGDebugVirtualHandDrawingMode::CubicJoints)
{
DrawDebugBox(World, DrawJointLocation, Settings.CubeExtent,
DrawJointRotation.Quaternion(), Settings.CubeColor,
Settings.bPersistentLines, LifeTime, Settings.DepthPriority, Settings.CubeThickness);
}
else if (Settings.DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints)
{
FSGDebugGizmo::Draw(World,
DrawJointLocation, DrawJointRotation,
FSGDebugGizmoSettings{
Settings.GizmoLength,
Settings.GizmoThickness,
Settings.GizmoXAxisColor,
Settings.GizmoYAxisColor,
Settings.GizmoZAxisColor,
!!Settings.bPersistentLines,
Settings.LifeTimeModifier,
Settings.DepthPriority
});
}
}
}
}
@@ -0,0 +1,52 @@
/**
* @file
*
* @author Mamadou Babaei <mamadou@senseglove.com>
*
* @section LICENSE
*
* (The MIT License)
*
* Copyright (c) 2020 - 2023 SenseGlove
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @section DESCRIPTION
*
*
*/
#pragma once
#include "SGSettings/SGDebugVirtualHandSettings.h"
class SENSEGLOVEDEBUG_API FSGDebugVirtualHand final
{
public:
static void Draw(
const UWorld* World,
const FVector& WristLocation, const FRotator& WristRotation,
const TArray<TArray<FVector>>& JointPositions, const TArray<TArray<FRotator>>& JointRotations,
const FSGDebugVirtualHandSettings& Settings);
public:
FSGDebugVirtualHand() = delete;
virtual ~FSGDebugVirtualHand() = delete;
};
@@ -56,6 +56,7 @@ public class SenseGloveDebug : ModuleRules
"Engine",
"SenseGloveLog",
"SenseGloveSettings",
"SenseGloveTypes",
}
);
}
@@ -0,0 +1,57 @@
/**
* @file
*
* @author Mamadou Babaei <mamadou@senseglove.com>
*
* @section LICENSE
*
* (The MIT License)
*
* Copyright (c) 2020 - 2023 SenseGlove
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @section DESCRIPTION
*
*
*/
#include "SGSettings/SGDebugVirtualHandSettings.h"
FSGDebugVirtualHandSettings::FSGDebugVirtualHandSettings(
const ESGDebugVirtualHandDrawingMode InDrawingMode,
const FVector& InCubeExtent, const FColor& InCubeColor, const float InCubeThickness,
const float InGizmoLength, const float InGizmoThickness,
const FColor& InGizmoXAxisColor, const FColor& InGizmoYAxisColor, const FColor& InGizmoZAxisColor,
const bool bInPersistentLines, const float InLifeTimeModifier, const uint8 InDepthPriority)
: DrawingMode(InDrawingMode),
CubeExtent(InCubeExtent),
CubeColor(InCubeColor),
CubeThickness(InCubeThickness),
GizmoLength(InGizmoLength),
GizmoThickness(InGizmoThickness),
GizmoXAxisColor(InGizmoXAxisColor),
GizmoYAxisColor(InGizmoYAxisColor),
GizmoZAxisColor(InGizmoZAxisColor),
bPersistentLines(bInPersistentLines),
LifeTimeModifier(InLifeTimeModifier),
DepthPriority(InDepthPriority)
{
}
@@ -0,0 +1,111 @@
/**
* @file
*
* @author Mamadou Babaei <mamadou@senseglove.com>
*
* @section LICENSE
*
* (The MIT License)
*
* Copyright (c) 2020 - 2023 SenseGlove
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @section DESCRIPTION
*
*
*/
#pragma once
#include "UObject/ObjectMacros.h"
#include "SGTypes/SGDebugTypes.h"
#include "SGDebugVirtualHandSettings.generated.h"
USTRUCT(BlueprintType)
struct SENSEGLOVESETTINGS_API FSGDebugVirtualHandSettings
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings")
ESGDebugVirtualHandDrawingMode DrawingMode;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::CubicJoints", EditConditionHides))
FVector CubeExtent;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::CubicJoints", EditConditionHides))
FColor CubeColor;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::CubicJoints", EditConditionHides))
float CubeThickness;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
float GizmoLength;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
float GizmoThickness;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
FColor GizmoXAxisColor;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
FColor GizmoYAxisColor;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
FColor GizmoZAxisColor;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
uint8 bPersistentLines : 1;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
float LifeTimeModifier;
UPROPERTY(EditAnywhere, Category = "Debug Virtual Hand Settings",
meta=(EditCondition="DrawingMode == ESGDebugVirtualHandDrawingMode::GizmoJoints", EditConditionHides))
uint8 DepthPriority;
public:
explicit FSGDebugVirtualHandSettings(
ESGDebugVirtualHandDrawingMode InDrawingMode = ESGDebugVirtualHandDrawingMode::None,
const FVector& InCubeExtent = FVector(0.5f, 0.5f, 0.5f),
const FColor& InCubeColor = FColor(255, 0, 0, 255),
float InCubeThickness = 0.1f,
float InGizmoLength = 1.0f,
float InGizmoThickness = 0.2f,
const FColor& InGizmoXAxisColor = FColor(255, 0, 0, 255),
const FColor& InGizmoYAxisColor = FColor(0, 255, 0, 255),
const FColor& InGizmoZAxisColor = FColor(0, 0, 255, 255),
bool bInPersistentLines = false,
float InLifeTimeModifier = 1.1f,
uint8 InDepthPriority = 0);
};
@@ -0,0 +1,36 @@
/**
* @file
*
* @author Mamadou Babaei <mamadou@senseglove.com>
*
* @section LICENSE
*
* (The MIT License)
*
* Copyright (c) 2020 - 2023 SenseGlove
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @section DESCRIPTION
*
*
*/
#include "SGTypes/SGDebugTypes.h"
@@ -0,0 +1,55 @@
/**
* @file
*
* @author Mamadou Babaei <mamadou@senseglove.com>
*
* @section LICENSE
*
* (The MIT License)
*
* Copyright (c) 2020 - 2023 SenseGlove
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @section DESCRIPTION
*
*
*/
#pragma once
#include "CoreTypes.h"
#include "UObject/ObjectMacros.h"
/**
* Determines the debug virtual hand drawing mode.
*/
UENUM(BlueprintType)
enum class ESGDebugVirtualHandDrawingMode : uint8
{
/** Do not draw any debug virtual hands. */
None UMETA(DisplayName = "None"),
/** Draw a debug virtual hand with cubic joints. */
CubicJoints UMETA(DisplayName = "Cubic Joints"),
/** Draw a debug virtual hand with gizmo joints. */
GizmoJoints UMETA(DisplayName = "Gizmo Joints"),
};