Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8801a48fa
|
||
|
|
de11ff03c8
|
||
|
|
42c560c43c
|
||
|
|
dfdb6017dc
|
||
|
|
2523b54a91
|
||
|
|
1d9ca12cf8
|
||
|
|
50599d2832
|
||
|
|
843c528fe1
|
||
|
|
33a0bc10b8
|
||
|
|
2dfb39842e
|
||
|
|
bae22c36f5
|
||
|
|
cfa01f1b97
|
||
|
|
ab72a893e5
|
||
|
|
5c902276e9
|
||
|
|
63ff7ba433
|
||
|
|
4ee17604dd
|
||
|
|
937b298d83
|
||
|
|
5c33917333
|
||
|
|
6d2103bb9b
|
||
|
|
0b30940ee7
|
||
|
|
ba92e4313d
|
||
|
|
c9e8e24ee0
|
||
|
|
f19f76d439
|
@@ -635,6 +635,9 @@ endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
|
||||
@echo "transform: scale(1.05);" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo ".cell a {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "display: block;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "height: 100%;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "width: 100%;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "text-decoration: none;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "color: #fff;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
@echo "font-weight: bold;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
|
||||
|
||||
@@ -5,6 +5,37 @@ 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).
|
||||
|
||||
## [2.1.3] - 2024-10-11
|
||||
|
||||
### Added
|
||||
|
||||
- Added initial support for the upcoming Unreal Engine `5.5` release. Please note that, while the plugin is functional, a few adjustments are still required to address deprecation warnings. Specifically, the `FXRMotionControllerData` struct needs to be replaced with the newly introduced `FXRMotionControllerState` and `FXRHandTrackingState` structs, along with adjustments to adhere to the new hand-tracking API changes.
|
||||
- Added support for Epic Native Toolchain `v23`.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix a bug inside `USGVirtualHandComponent::PostEditChangeProperty()` where the get member name check happens against the wrong class and member names.
|
||||
- Additional minor fixes and improvements that may not be listed here.
|
||||
|
||||
### Changed
|
||||
|
||||
- The SenseGlove libraries have been updated to `v2.105.0-02a2e508`.
|
||||
|
||||
## [2.1.2] - 2024-09-02
|
||||
|
||||
This is a bugfix release that addresses a few non-critical issues and documentation fixes.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix a bug where the hands are always visible even when `bVisibleWhenHandDataUnavailable` is disabled.
|
||||
- Fix a bug where the `HandVisibilityChangedEvent` event is not triggered on the virtual hand component visibility changes.
|
||||
- Fix the wrong script name for `USGHMDTrackerKismetLibrary`.
|
||||
- Fix the wrong script name for `USGXRTrackerKismetLibrary `.
|
||||
- Fix `LogPython: Warning: 'SGHMDTrackerKismetLibrary' and 'SGXRTrackerKismetLibrary' have the same name (SenseGloveHeadMountDisplayKismetLibrary) when exposed to Python. Rename one of them using 'ScriptName' meta-data` when packaging the game.
|
||||
- Fix the non-existent default hand-mesh warnings polluting the logs when packaging the game.
|
||||
- Expanded the clickable area on the handbook index page revision buttons.
|
||||
- Minor documentation fixes.
|
||||
|
||||
## [2.1.1] - 2024-08-18
|
||||
|
||||
This is a bugfix release with no actual plugin code changes, mostly addressing issues in the documentation and third-party dependencies caused by source control merge conflicts.
|
||||
@@ -691,4 +722,4 @@ This is a minor release focusing on adherence to the Unreal Engine Marketplace G
|
||||
|
||||
### Added
|
||||
|
||||
- Initial public release of the SenseGlove haptic API for Unreal Engine with support for Microsoft Windows and GNU/Linux.
|
||||
- Initial public release of the SenseGlove haptic API for Unreal Engine with support for Microsoft Windows and GNU/Linux.
|
||||
@@ -1,6 +1,6 @@
|
||||
## Planned Features Completion Status
|
||||
|
||||
### Implemented as of v2.1.0
|
||||
### Implemented as of v2.1.x
|
||||
|
||||
- [X] Full SenseGlove low-level core API access through Unreal C++.
|
||||
- [X] Full SenseGlove low-level core API access through Blueprint.
|
||||
@@ -36,8 +36,9 @@
|
||||
- [X] A flexible virtual hand animation system that can take the mesh bone's transforms into account for a more reliable hand animation.
|
||||
- [X] Ability to manage the Engine Scalability Settings through the SenseGlove plugin in order to change the graphics settings on the fly.
|
||||
|
||||
### Upcoming features planned for the v2.2.0 release
|
||||
### Upcoming features planned for the v2.2.x release
|
||||
|
||||
- [ ] Migrating away from the deprecated `FXRMotionControllerData` in favor of `FXRMotionControllerState` and `FXRHandTrackingState`.
|
||||
|
||||
### Planned features long-term
|
||||
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
| | **Windows (MSVC 2017)** | **Windows (MSVC 2019)** | **Windows (MSVC 2022)** | **Linux x86-64 (Native Toolchain)** | **Linux AArch64 (Native Toolchain)** | **Meta Quest Stand-alone (Android NDK)** | **HTC VIVE Stand-alone (Android NDK)** | **UE Marketplace Version** | **Azure DevOps Version** |
|
||||
|:--------:|:-----------------------:|:-----------------------:|:-----------------------:|:-----------------------------------:|:------------------------------------:|:----------------------------------------:|:--------------------------------------:|:--------------------------:|:------------------------:|
|
||||
| **5.4** | ❌ | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.1 | ✅ v2.1.1 |
|
||||
| **5.3** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.1 | ✅ v2.1.1 |
|
||||
| **5.2** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.1 | ✅ v2.1.1 |
|
||||
| **5.5** | ❌ | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ❌ | ✅ v2.1.3 |
|
||||
| **5.4** | ❌ | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.2 | ✅ v2.1.3 |
|
||||
| **5.3** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.2 | ✅ v2.1.3 |
|
||||
| **5.2** | ❌ | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x | ✅ v2.1.x (r25b) | ❓ | ✅ v2.1.2 | ✅ v2.1.3 |
|
||||
| **5.1** | ❌ | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x (r25b) | ❓ | ⚠️ v2.0.1 | ⚠️ v2.0.2 |
|
||||
| **5.0** | ❌ | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x (r21e) | ❓ | ⚠️ v1.6.1 | ⚠️ v1.6.1 |
|
||||
| **4.27** | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x (r21e) | ❓ | ⚠️ v1.3.1 | ⚠️ v1.4.3 |
|
||||
@@ -20,6 +21,7 @@
|
||||
* <code>❓</code> Unknown or untested
|
||||
|
||||
Remarks:
|
||||
* With the Fab content marketplace scheduled to launch at an unspecified date in October 2024, and the fact that the Unreal Engine Marketplace no longer accepting any new submissions starting from October 1, any releases made during the transition from the Unreal Engine Marketplace to Fab will only be accessible through the [SenseGlove Microsoft Azure repositories](../getting-started/installation/microsoft-azure-devops-repositories.md).
|
||||
* Per [Epic's Marketplace Guidelines](https://www.unrealengine.com/en-US/marketplace-guidelines) in regards to Code Plugins (sections `2.6.3`.d and `3.1.b`), we are only able to distribute or update the SenseGlove plugin for the last `3` stable versions of Unreal Engine. As a result, we won't be able to publish updates or bug fixes for the older versions of the Engine except on rare occasions and only through our official repository on Microsoft Azure DevOps.
|
||||
* All third-party libraries on Windows built against Windows SDK `10.0`.
|
||||
* Oculus and VIVE support is only provided through the recommended Android NDK versions by Epic Games.
|
||||
|
||||
@@ -57,7 +57,7 @@ Toipcs that do not fall under any specific category:
|
||||
- [SenseGlove Console Commands](../misc/console-commands/)
|
||||
- [Deploying to Android (Standalone)](../misc/android-standalone-deployment/)
|
||||
- [Upgrade Guide](../misc/upgrade-guide/)
|
||||
- [Optimizing for More FPS](../misc/optimize-higher-fps/)
|
||||
- [Optimizing for Higher FPS](../misc/optimize-higher-fps/)
|
||||
|
||||
## 🛠️ Advanced Topics
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "2.1.1",
|
||||
"VersionName": "2.1.3",
|
||||
"FriendlyName": "SenseGlove",
|
||||
"Description": "Integrating the SenseGlove haptic controller into Unreal Engine",
|
||||
"Category": "Virtual Reality",
|
||||
|
||||
@@ -326,8 +326,8 @@ void USGVirtualHandComponent::PostEditChangeProperty(FPropertyChangedEvent& Prop
|
||||
|
||||
static const FName OverridePluginSettingsName{
|
||||
FImpl::ParseVirtualHandSettingsOverridesPropertyName(
|
||||
GET_MEMBER_NAME_CHECKED(FSGWristTrackingSettingsOverrides,
|
||||
FSGWristTrackingSettingsOverrides::bOverridePluginSettings))
|
||||
GET_MEMBER_NAME_CHECKED(FSGVirtualHandSettingsOverrides,
|
||||
FSGVirtualHandSettingsOverrides::bOverridePluginSettings))
|
||||
};
|
||||
|
||||
if (PropertyName == RightName)
|
||||
@@ -651,17 +651,26 @@ bool USGVirtualHandComponent::FImpl::IsUsingUserMesh() const
|
||||
|
||||
USkeletalMesh* USGVirtualHandComponent::FImpl::LoadDefaultMesh() const
|
||||
{
|
||||
const FString DefaultMeshPath{GetDefaultMeshPath()};
|
||||
USkeletalMesh* DefaultMesh{
|
||||
Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *DefaultMeshPath))
|
||||
};
|
||||
// FIXME
|
||||
// Disable this warning altogether as it results in polluting the packaging logs, at least until we ship a set of
|
||||
// virtual hand meshes again.
|
||||
// const FString DefaultMeshPath{GetDefaultMeshPath()};
|
||||
// USkeletalMesh* DefaultMesh{
|
||||
// Cast<USkeletalMesh>(StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, *DefaultMeshPath))
|
||||
// };
|
||||
|
||||
if (!IsValid(DefaultMesh))
|
||||
{
|
||||
SGLOG_WARNING(FString::Printf(TEXT("Failed to load the default skeletal mesh: '%s'"), *DefaultMeshPath));
|
||||
}
|
||||
// FIXME
|
||||
// Disable this warning altogether as it results in polluting the packaging logs, at least until we ship a set of
|
||||
// virtual hand meshes again.
|
||||
// if (!IsValid(DefaultMesh))
|
||||
// {
|
||||
// SGLOG_WARNING(FString::Printf(TEXT("Failed to load the default skeletal mesh: '%s'"), *DefaultMeshPath));
|
||||
// }
|
||||
|
||||
return DefaultMesh;
|
||||
// FIXME
|
||||
//return DefaultMesh;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void USGVirtualHandComponent::FImpl::SetDefaultMesh() const
|
||||
@@ -677,7 +686,10 @@ void USGVirtualHandComponent::FImpl::SetDefaultMesh() const
|
||||
//Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
|
||||
// Temporary hack to make it work inside the Blueprint Editor.
|
||||
#if WITH_EDITOR
|
||||
Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
|
||||
// FIXME
|
||||
//Owner->SetSkeletalMesh(LoadDefaultMesh(), true);
|
||||
// Instead
|
||||
Owner->SetSkeletalMesh(nullptr, true);
|
||||
#endif /* WITH_EDITOR */
|
||||
}
|
||||
|
||||
@@ -719,7 +731,7 @@ void USGVirtualHandComponent::FImpl::RestoreCollisionResponse() const
|
||||
|
||||
void USGVirtualHandComponent::FImpl::SetVisibility(const bool bInVisible)
|
||||
{
|
||||
Owner->SetVisibility(bInVisible, true);
|
||||
Owner->SetHiddenInGame(!bInVisible, false);
|
||||
|
||||
if (bInVisible)
|
||||
{
|
||||
@@ -786,7 +798,7 @@ void USGVirtualHandComponent::FImpl::UpdateVisibility()
|
||||
|
||||
if (bSetNewVisibility)
|
||||
{
|
||||
Owner->SetHiddenInGame(bHandDataAvailable);
|
||||
SetVisibility(bHandDataAvailable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "Components/PrimitiveComponent.h"
|
||||
#include "Components/SphereComponent.h"
|
||||
#include "Kismet/KismetMathLibrary.h"
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
#include "UObject/UObjectGlobals.h"
|
||||
#include "XRDeviceVisualizationComponent.h"
|
||||
|
||||
@@ -430,7 +431,7 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
this, TEXT("RightThumbFingertipTouchCollider"));
|
||||
RightThumbFingertipTouchCollider->SetRelativeScale3D(RightHandSettings.TouchSettings.DefaultColliderSize);
|
||||
RightThumbFingertipTouchCollider->SetupAttachment(
|
||||
HandRight,RightHandSettings.TouchSettings.ThumbColliderSocketName);
|
||||
HandRight, RightHandSettings.TouchSettings.ThumbColliderSocketName);
|
||||
RightThumbFingertipTouchCollider->SetCastShadow(false);
|
||||
RightThumbFingertipTouchCollider->bCastDynamicShadow = false;
|
||||
RightThumbFingertipTouchCollider->SetReceivesDecals(true);
|
||||
@@ -1986,7 +1987,7 @@ void ASGPawn::FImpl::SetVisibility(USceneComponent* SceneComponent, const bool b
|
||||
return;
|
||||
}
|
||||
|
||||
SceneComponent->SetHiddenInGame(!bVisibility);
|
||||
SceneComponent->SetHiddenInGame(!bVisibility, false);
|
||||
}
|
||||
|
||||
void ASGPawn::FImpl::UpdateHandLocation(const bool bRight, const FVector& Location, const bool bUpdateVirtualHand) const
|
||||
@@ -2192,7 +2193,13 @@ void ASGPawn::FImpl::RecordHandVelocity(FSGGrabState& GrabState, const float Del
|
||||
{
|
||||
if (GrabState.HandVelocityHistory.IsValidIndex(0))
|
||||
{
|
||||
GrabState.HandVelocityHistory.RemoveAt(0, 1, false);
|
||||
GrabState.HandVelocityHistory.RemoveAt(0, 1,
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
|
||||
EAllowShrinking::No
|
||||
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
false
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
);
|
||||
GrabState.HandVelocityHistory.Emplace(MoveTemp(HandVelocity));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +113,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
|
||||
#if UE_5_3_OR_LATER
|
||||
#if UE_5_5_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
|
||||
#elif UE_5_3_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -128,7 +130,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
|
||||
#if UE_5_3_OR_LATER
|
||||
#if UE_5_5_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
|
||||
#elif UE_5_3_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -233,7 +237,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
|
||||
#if UE_5_3_OR_LATER
|
||||
#if UE_5_5_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
|
||||
#elif UE_5_3_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -248,7 +254,9 @@ public class SenseGloveConnectImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
|
||||
#if UE_5_3_OR_LATER
|
||||
#if UE_5_5_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
|
||||
#elif UE_5_3_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
|
||||
@@ -112,7 +112,9 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
|
||||
#if UE_5_3_OR_LATER
|
||||
#if UE_5_5_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
|
||||
#elif UE_5_3_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
@@ -127,7 +129,9 @@ public class SenseGloveCoreImpl : ModuleRules
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "linux"));
|
||||
LibraryName = string.Format("lib{0}.a", LibraryName);
|
||||
|
||||
#if UE_5_3_OR_LATER
|
||||
#if UE_5_5_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v23"));
|
||||
#elif UE_5_3_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v22"));
|
||||
#elif UE_5_2_OR_LATER
|
||||
LibraryPath = Path.GetFullPath(Path.Combine(LibraryPath, "v21"));
|
||||
|
||||
@@ -59,7 +59,7 @@ struct SENSEGLOVESETTINGS_API FSGTrackingSettings
|
||||
|
||||
public:
|
||||
/**
|
||||
* Determines whether to fallback to hand-tracking, or not, when no SenseGlove device is detected:
|
||||
* Determines whether to fall back to hand-tracking, or not, when no SenseGlove device is detected:
|
||||
*
|
||||
* - If disabled, only a real glove will be tracked.
|
||||
* - If enabled, the plugin will fall back to hand-tracking when it's available and supported by the HMD device.
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3
|
||||
#include "OpenXRHMD.h"
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3 */
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
|
||||
#include "SGCore/SGHapticGlove.h"
|
||||
#include "SGLog/SGLog.h"
|
||||
@@ -1164,9 +1163,28 @@ bool FSGXRTracker::GetMotionControllerData(
|
||||
{
|
||||
OutMotionControllerData.DeviceVisualType = EXRVisualType::Hand;
|
||||
|
||||
/// TODO
|
||||
// This is a just a temporary workaround to silence a UE 5.5 deprecation warning.
|
||||
// Should be refactored with a proper implementation when migrating away from the deprecated
|
||||
// `FXRMotionControllerData` in favor of newly introduced
|
||||
// `FXRMotionControllerState` and `FXRHandTrackingState` structs.
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
|
||||
bool bTracked = false;
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
OutMotionControllerData.bValid = HandTracker->GetAllKeypointStates(
|
||||
Hand, OutMotionControllerData.HandKeyPositions, OutMotionControllerData.HandKeyRotations,
|
||||
OutMotionControllerData.HandKeyRadii);
|
||||
OutMotionControllerData.HandKeyRadii
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
|
||||
, bTracked
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
);
|
||||
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
|
||||
if (!bTracked)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
|
||||
if (!ensureAlwaysMsgf(
|
||||
!OutMotionControllerData.bValid
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
#include "SGHMDTrackerKismetLibrary.generated.h"
|
||||
|
||||
UCLASS(meta=(ScriptName = "SenseGloveHeadMountDisplayKismetLibrary"))
|
||||
UCLASS(meta=(ScriptName = "SenseGloveHMDTrackerKismetLibrary"))
|
||||
class SENSEGLOVETRACKINGKISMET_API USGHMDTrackerKismetLibrary final : public USGBlueprintFunctionLibrary
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
class UObject;
|
||||
|
||||
UCLASS(meta=(ScriptName = "SenseGloveHeadMountDisplayKismetLibrary"))
|
||||
UCLASS(meta=(ScriptName = "SenseGloveXRTrackerKismetLibrary"))
|
||||
class SENSEGLOVETRACKINGKISMET_API USGXRTrackerKismetLibrary final : public USGBlueprintFunctionLibrary
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#include "SGUtils/SGEngineUtils.h"
|
||||
|
||||
#include "CoreGlobals.h"
|
||||
#if WITH_EDITOR
|
||||
#include "Editor.h"
|
||||
#endif /* WITH_EDITOR */
|
||||
@@ -53,8 +54,21 @@ UWorld* FSGEngineUtils::GetWorld()
|
||||
if (IsValid(GEditor))
|
||||
{
|
||||
{
|
||||
const bool bIsPIE = GPlayInEditorID != -1;
|
||||
const int32 WorldPIEInstance = bIsPIE ? GPlayInEditorID : 1;
|
||||
const bool bIsPIE =
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
|
||||
UE::GetPlayInEditorID()
|
||||
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
GPlayInEditorID
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
!= -1;
|
||||
const int32 WorldPIEInstance = bIsPIE
|
||||
?
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
|
||||
UE::GetPlayInEditorID()
|
||||
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
GPlayInEditorID
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
|
||||
: 1;
|
||||
const FWorldContext* WorldContext{GEditor->GetPIEWorldContext(WorldPIEInstance)};
|
||||
if (WorldContext)
|
||||
{
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user