Compare commits

...
12 Commits
Author SHA1 Message Date
Mamadou Babaei 3c56af0e1f bump the plugin version to v1.2.1 2023-03-30 06:42:46 +02:00
Mamadou Babaei 9cbdf5cea7 add the engine settings module into the private include paths for the senseglove settings module in order to solve run uat build issues 2023-03-30 06:22:27 +02:00
Mamadou Babaei 032422de1c remove the engine settings module from the senseglove module's private dependencies list 2023-03-30 06:14:59 +02:00
Mamadou Babaei 0f89d1c4dd remove the launch and settings from the android module's private includes 2023-03-30 05:58:15 +02:00
Mamadou Babaei 8d289c0f2f bump the plugin version to v1.2.0 2023-03-28 21:38:59 +02:00
Mamadou Babaei 62a2dd44f0 add the new dev/test hand model (this hand mesh is not meant to be published) 2023-03-28 18:28:01 +02:00
Mamadou Babaei c3001c588c alternative approach to constructor helpers in order to set the default hand mesh as it won't causes annoying ue pop-up cdo messages 2023-03-28 18:28:01 +02:00
Mamadou Babaei f3b21fecfa remove the old virtual hand model mesh 2023-03-28 18:28:00 +02:00
Mamadou Babaei 94e1b9ffcb fix the hand animation implementation and angle conversions to work with the standard ue5.1+ hand from epic 2023-03-28 18:28:00 +02:00
Mamadou Babaei 01078b6cd6 add missing paths headers that causes uat build issues 2023-03-28 11:45:17 +02:00
Mamadou Babaei a62f615036 add missing vershon headers and clean up unused headers 2023-03-28 11:45:16 +02:00
Mamadou Babaei 5213282f25 fix uat errors C4458 when building the virtual hand component 2023-03-28 11:22:22 +02:00
50 changed files with 89 additions and 94 deletions
+11 -1
View File
@@ -5,7 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [v1.2.1] - 2023-03-30
### Fixed
- Fix RunUAT build issues with Android.
## [v1.2.0] - 2023-03-28
This release breaks ABI/API compatibility with the previous versions.
@@ -35,6 +41,10 @@ This release breaks ABI/API compatibility with the previous versions.
- Removed redundant SGConnectImpl/SGPlatform.
- Removed redundant SGTypes/SGConnectTypes.
### Known Issues
- Wrist Tracker's offsets are a bit off (e.g. on Quest 2), scheduled to be fixed in the next patch release.
## [1.1.1] - 2023-02-07
### Added
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,7 +1,7 @@
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.1.1",
"VersionName": "1.2.1",
"FriendlyName": "SenseGlove",
"Description": "Integrating the SenseGlove haptic controller into Unreal Engine",
"Category": "Virtual Reality",
@@ -43,6 +43,7 @@
#include "Containers/UnrealString.h"
#include "Engine/SkeletalMesh.h"
#include "Math/Rotator.h"
#include "Runtime/Launch/Resources/Version.h"
#include "SGLog/SGLog.h"
#include "SenseGlove/Components/SGVirtualHandComponent.h"
@@ -39,6 +39,7 @@
#include "Components/SkeletalMeshComponent.h"
#include "Engine/SkeletalMesh.h"
#include "Kismet/GameplayStatics.h"
#include "Runtime/Launch/Resources/Version.h"
#include "UObject/ConstructorHelpers.h"
#include "SenseGlove/Animation/SGVirtualHandAnimInstance.h"
@@ -122,7 +123,7 @@ struct USGVirtualHandComponent::FImpl
bool UninitializeBackend() const;
bool CheckGlove() const;
void SetVisibility(bool bVisible) const;
void SetVisibility(bool bInVisible) const;
};
const TArray<TArray<FName>>& USGVirtualHandComponent::GetLeftHandFingerBoneNames()
@@ -205,11 +206,7 @@ USGVirtualHandComponent::USGVirtualHandComponent(const FObjectInitializer& Objec
bRight = true;
bHiddenInGameIfNoGloveDetected = false;
const FString SkeletalMeshPath{Pimpl->GetDefaultMeshPath()};
const ConstructorHelpers::FObjectFinder<USkeletalMesh> SkeletalMesh{*SkeletalMeshPath};
ensureAlwaysMsgf(SkeletalMesh.Succeeded() && SkeletalMesh.Object,
TEXT("Failed to load the skeletal mesh: '%s'"), *SkeletalMeshPath);
Super::SetSkeletalMesh(SkeletalMesh.Object, true);
Super::SetSkeletalMesh(nullptr, true);
bBackendInitialized = false;
Glove = nullptr;
@@ -233,6 +230,16 @@ void USGVirtualHandComponent::SetAnimClass(UClass* NewClass)
Super::SetAnimClass(NewClass);
}
void USGVirtualHandComponent::PostInitProperties()
{
Super::PostInitProperties();
if (!Pimpl->IsUsingUserMesh())
{
Pimpl->SetDefaultMesh();
}
}
#if WITH_EDITOR
void USGVirtualHandComponent::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
@@ -458,13 +465,13 @@ FString USGVirtualHandComponent::FImpl::GetDefaultMeshPath() const
bool USGVirtualHandComponent::FImpl::IsUsingUserMesh() const
{
const USkeletalMesh* SkeletalMesh{GetMesh()};
if (!IsValid(SkeletalMesh))
const USkeletalMesh* CurrentMesh{GetMesh()};
if (!IsValid(CurrentMesh))
{
return false;
}
const FString CurrentMeshPath(SkeletalMesh->GetPathName());
const FString CurrentMeshPath(CurrentMesh->GetPathName());
const FString LeftHandDefaultMeshPath(GetDefaultLeftHandMeshPath());
const FString LeftHandDefaultMeshPathOnly(GetDefaultLeftHandMeshPathOnly());
const FString RightHandDefaultMeshPath(GetDefaultRightHandMeshPath());
@@ -482,14 +489,17 @@ bool USGVirtualHandComponent::FImpl::IsUsingUserMesh() const
USkeletalMesh* USGVirtualHandComponent::FImpl::LoadDefaultMesh() const
{
const FString SkeletalMeshPath{GetDefaultMeshPath()};
USkeletalMesh* SkeletalMesh{
Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *SkeletalMeshPath))
const FString DefaultMeshPath{GetDefaultMeshPath()};
USkeletalMesh* DefaultMesh{
Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *DefaultMeshPath))
};
ensureAlwaysMsgf(SkeletalMesh, TEXT("Failed to load the skeletal mesh: '%s'"), *SkeletalMeshPath);
if (!IsValid(DefaultMesh))
{
SGLOG_WARNING(FString::Printf(TEXT("Failed to load the default skeletal mesh: '%s'"), *DefaultMeshPath));
}
return SkeletalMesh;
return DefaultMesh;
}
void USGVirtualHandComponent::FImpl::SetDefaultMesh() const
@@ -510,16 +520,16 @@ USkeletalMesh* USGVirtualHandComponent::FImpl::GetMesh() const
USkeleton* USGVirtualHandComponent::FImpl::GetSkeleton() const
{
USkeletalMesh* SkeletalMesh{GetMesh()};
ensureAlwaysMsgf(IsValid(SkeletalMesh), TEXT("Invalid SkeletalMesh object!"));
return SkeletalMesh->GetSkeleton();
USkeletalMesh* Mesh{GetMesh()};
ensureAlwaysMsgf(IsValid(Mesh), TEXT("Invalid SkeletalMesh object!"));
return Mesh->GetSkeleton();
}
const FReferenceSkeleton& USGVirtualHandComponent::FImpl::GetRefSkeleton() const
{
const USkeletalMesh* SkeletalMesh{GetMesh()};
ensureAlwaysMsgf(IsValid(SkeletalMesh), TEXT("Invalid SkeletalMesh object!"));
return SkeletalMesh->GetRefSkeleton();
const USkeletalMesh* Mesh{GetMesh()};
ensureAlwaysMsgf(IsValid(Mesh), TEXT("Invalid SkeletalMesh object!"));
return Mesh->GetRefSkeleton();
}
bool USGVirtualHandComponent::FImpl::InitializeBackend() const
@@ -665,9 +675,9 @@ bool USGVirtualHandComponent::FImpl::CheckGlove() const
return bFoundGlove;
}
void USGVirtualHandComponent::FImpl::SetVisibility(const bool bVisible) const
void USGVirtualHandComponent::FImpl::SetVisibility(const bool bInVisible) const
{
Owner->SetVisibility(bVisible, true);
Owner->SetVisibility(bInVisible, true);
}
void USGVirtualHandComponent::FImplDeleter::operator()(const FImpl* P) const
@@ -93,8 +93,10 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
HandLeft->SetupAttachment(GetRootComponent());
HandLeft->SetRight(false);
HandLeft->SetHiddenIfNoGloveDetected(true);
HandLeft->SetWorldLocation(FVector{30.0f, -20.0f, -10.0f},
false, nullptr, ETeleportType::None);
HandLeft->SetRelativeRotation(FRotator{0.0f, -90.0f, 0.0f},
false, nullptr, ETeleportType::None);
HandLeft->SetRelativeLocation(FVector{30.0f, -20.0f, -10.0f},
false, nullptr, ETeleportType::None);
WristTrackerRight = ObjectInitializer.CreateDefaultSubobject<USGWristTrackerComponent>(
this, TEXT("WristTrackerRight"));
@@ -105,8 +107,10 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
HandRight->SetupAttachment(GetRootComponent());
HandRight->SetRight(true);
HandRight->SetHiddenIfNoGloveDetected(true);
HandRight->SetWorldLocation(FVector{30.0f, 20.0f, -10.0f},
false, nullptr, ETeleportType::None);
HandRight->SetRelativeRotation(FRotator{0.0f, -90.0f, 0.0f},
false, nullptr, ETeleportType::None);
HandRight->SetRelativeLocation(FVector{30.0f, 20.0f, -10.0f},
false, nullptr, ETeleportType::None);
}
void ASGPawn::BeginPlay()
@@ -76,6 +76,8 @@ ASGVirtualHandActor::ASGVirtualHandActor(const FObjectInitializer& ObjectInitial
VirtualHand = CreateDefaultSubobject<USGVirtualHandComponent>(TEXT("VirtualHand"));
VirtualHand->SetupAttachment(RootComponent);
VirtualHand->SetRelativeRotation(FRotator{0.0f, -90.0f, 0.0f},
false, nullptr, ETeleportType::None);
WristTracker = CreateDefaultSubobject<USGWristTrackerComponent>(TEXT("WristTracker"));
WristTracker->SetupAttachment(RootComponent);
@@ -116,6 +116,8 @@ public:
public:
virtual void SetAnimClass(class UClass* NewClass) override;
virtual void PostInitProperties() override;
#if WITH_EDITOR
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
#endif /* WITH_EDITOR */
@@ -40,6 +40,8 @@
#include "Android/AndroidJava.h"
#endif /* PLATFORM_ANDROID */
#include "Misc/Paths.h"
#if PLATFORM_ANDROID
#include "SGConnectImpl/SGExportedFunctions.h"
#include "SGInterop/SGIC_FString.h"
@@ -40,6 +40,8 @@
#include "Android/AndroidJava.h"
#endif /* PLATFORM_ANDROID */
#include "Misc/Paths.h"
#if PLATFORM_ANDROID
#include "SGCoreImpl/SGExportedFunctions.h"
#include "SGInterop/SGIC_FString.h"
@@ -64,15 +64,8 @@ public class SenseGloveAndroid : ModuleRules
if (Target.Platform == UnrealTargetPlatform.Android)
{
PrivateIncludePathModuleNames.AddRange(
new string[]
{
"Launch",
"Settings",
}
);
AdditionalPropertiesForReceipt.Add("AndroidPlugin", Path.Combine(ModuleDirectory, "SenseGloveAndroid_UPL.xml"));
AdditionalPropertiesForReceipt.Add("AndroidPlugin",
Path.Combine(ModuleDirectory, "SenseGloveAndroid_UPL.xml"));
}
}
}
@@ -38,7 +38,6 @@
#include "Containers/UnrealString.h"
#include "Math/Quat.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -38,7 +38,6 @@
#include "Containers/UnrealString.h"
#include "Math/Quat.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -36,7 +36,6 @@
#pragma once
#include "HAL/Platform.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/SharedPointer.h"
#include "Templates/UniquePtr.h"
@@ -36,7 +36,6 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -38,7 +38,6 @@
#include <vector>
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/SharedPointer.h"
#include "Templates/UniquePtr.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "SGCoreImpl/SGAnatomyImpl.h"
#include "SGCoreImpl/SGDeviceImpl.h"
#include "SGTypes/SGCoreTypes.h"
@@ -36,7 +36,6 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/Array.h"
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/SharedPointer.h"
#include "Templates/UniquePtr.h"
@@ -36,7 +36,6 @@
#pragma once
#include "HAL/Platform.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/SharedPointer.h"
#include "Templates/UniquePtr.h"
@@ -38,7 +38,6 @@
#include "Containers/UnrealString.h"
#include "Math/Quat.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -36,7 +36,6 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -36,7 +36,6 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/Array.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/SharedPointer.h"
#include "Templates/UniquePtr.h"
@@ -36,11 +36,9 @@
#pragma once
#include "Containers/Array.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
#include "SGTypes/SGCoreTypes.h"
namespace SGCore
{
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGHapticGloveCalibrationSequenceImpl.h"
@@ -36,7 +36,6 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -36,7 +36,6 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -36,11 +36,9 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
#include "SGTypes/SGCoreTypes.h"
namespace SGCore
{
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -36,7 +36,6 @@
#pragma once
#include "Containers/UnrealString.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "Math/Vector.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -36,7 +36,6 @@
#pragma once
#include "HAL/Platform.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "HAL/Platform.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/SharedPointer.h"
#include "Templates/UniquePtr.h"
@@ -37,7 +37,6 @@
#include "Containers/UnrealString.h"
#include "HAL/Platform.h"
#include "Runtime/Launch/Resources/Version.h"
#include "Templates/UniquePtr.h"
#include "SGCoreImpl/SGPlatform.h"
@@ -54,11 +54,17 @@ public class SenseGloveSettings : ModuleRules
{
"CoreUObject",
"Engine",
"Settings",
"SenseGloveCore",
"SenseGloveLog",
"SenseGloveTypes",
}
);
PrivateIncludePathModuleNames.AddRange(
new string[]
{
"Settings",
}
);
}
}
@@ -55,13 +55,13 @@ public:
static FORCEINLINE FVector TransformToSenseGlove(const FVector& Vector)
{
return FMath::DegreesToRadians(FVector(Vector.X * -1.0f, Vector.Z, Vector.Y));
return FMath::DegreesToRadians(FVector(Vector.Y * -1.0f, Vector.X, Vector.Z));
}
template<typename V>
static FORCEINLINE V TransformToSenseGlove(const FVector& Vector)
{
return FMath::DegreesToRadians(V(Vector.X * -1.0f, Vector.Z, Vector.Y));
return FMath::DegreesToRadians(V(Vector.Y * -1.0f, Vector.X, Vector.Z));
}
static FORCEINLINE float TransformToUnreal(const float Radians)
@@ -114,13 +114,13 @@ public:
static FORCEINLINE FVector TransformToUnreal(const FVector& Vector)
{
return FMath::RadiansToDegrees(FVector(Vector.X * -1.0f, Vector.Z, Vector.Y));
return FMath::RadiansToDegrees(FVector(Vector.Y * -1.0f, Vector.X, Vector.Z));
}
template<typename V>
static FORCEINLINE FVector TransformToUnreal(const V& Vector)
{
return FMath::RadiansToDegrees(FVector(Vector.GetX() * -1.0f, Vector.GetZ(), Vector.GetY()));
return FMath::RadiansToDegrees(FVector(Vector.GetY() * -1.0f, Vector.GetX(), Vector.GetZ()));
}
public: