Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bae035ed3
|
||
|
|
5ea2f1c5be
|
||
|
|
5742f7f315
|
||
|
|
e29c037198
|
||
|
|
4a96590460
|
||
|
|
01f74dd141
|
@@ -5,6 +5,31 @@ 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).
|
||||
|
||||
## [1.9.7] - 2024-02-18
|
||||
|
||||
This is a bugfix release with containing bugfixes backported from the next major release of the plugin as documented below.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix various bugs inside the SGPlayerController which occur when the thumb and pinky fingers are simultaneously touching different SGTouchComponents, or only one of them is in touch with such a component. In this case pinky's buzz and force-feedback levels are determined from the SGTouchComponent that is in collision with the thumb instead of the one that is touched by the pinky. Or, the pinky could ignore the buzz and force-feedback level if the thumb is not in collision with an SGTouchComponent. Or, the pinky could have reacted with a buzz or force feedback while only the thumb is in contact with an SGTouchComponent.
|
||||
- Fix the BuzzDuration UPROPERTY range in order not to get clamped at 100.0f and also use float values for ClampMin and UIMin specifiers instead of integer values.
|
||||
|
||||
## [1.9.6] - 2024-02-14
|
||||
|
||||
This is a bugfix release.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix a few critical bugs inside the NovaGlove class where the higher levels of the API including constructors, Parse, and NewNovaGlove methods mistakenly instantiate a SenseGloveImpl class instead of a NovaGloveImpl class.
|
||||
|
||||
## [1.9.5] - 2024-02-09
|
||||
|
||||
This is a bugfix release.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix a wrong type-casting inside SGDeviceModel::ParseFirmware where OutMainVersion and OutSubVersion arguments are getting passed to the lower levels of the API. This could potentially result in a segfault at the FFI boundary between lower and higher levels of the API.
|
||||
|
||||
## [1.9.4] - 2024-02-08
|
||||
|
||||
This is a bugfix release addressing mostly Blueprint API issues with ABI breaking changes inside the Blueprint layer, backported from the next major release of the plugin as documented below.
|
||||
|
||||
@@ -15,9 +15,9 @@ This repository relies on Git LFS for storing binary blobs (e.g. third-party lib
|
||||
| **4.26** | ⚠️ v1.0.x | ⚠️ v1.0.x | ❌ | ⚠️ v1.0.x | ❌ | ❌ | ❌ | ⚠️ v1.0.4 |
|
||||
| **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 |
|
||||
| **5.0** | ❌ | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x (r21e) | ⚠️ v1.6.1 | ⚠️ v1.6.1 |
|
||||
| **5.1** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.4 | ✅ v1.9.4 |
|
||||
| **5.2** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.4 | ✅ v1.9.4 |
|
||||
| **5.3** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.4 | ✅ v1.9.4 |
|
||||
| **5.1** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.7 | ✅ v1.9.7 |
|
||||
| **5.2** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.7 | ✅ v1.9.7 |
|
||||
| **5.3** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.7 | ✅ v1.9.7 |
|
||||
|
||||
* <code>✅</code> Supported
|
||||
* <code>⚠️</code> Not supported by the latest release and might be lacking features
|
||||
@@ -55,7 +55,7 @@ Please note that modules postfixed with **Impl** are intended for interal use an
|
||||
|
||||
## Planned Features Completion Status
|
||||
|
||||
### Implemented as of v1.9.4
|
||||
### Implemented as of v1.9.7
|
||||
|
||||
- [X] Full SenseGlove low-level core API access through Unreal C++.
|
||||
- [X] Full SenseGlove low-level core API access through Blueprint.
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "1.9.4",
|
||||
"VersionName": "1.9.7",
|
||||
"FriendlyName": "SenseGlove",
|
||||
"Description": "Integrating the SenseGlove haptic controller into Unreal Engine",
|
||||
"Category": "Virtual Reality",
|
||||
|
||||
@@ -262,7 +262,7 @@ USGBuzzCommand* ASGPlayerController::FImpl::GetBuzzCommand(
|
||||
const int32 IndexBuzzLevel = GetBuzzLevel(ActorIndexTouching);
|
||||
const int32 MiddleBuzzLevel = GetBuzzLevel(ActorMiddleTouching);
|
||||
const int32 RingBuzzLevel = GetBuzzLevel(ActorRingTouching);
|
||||
const int32 PinkyBuzzLevel = GetBuzzLevel(ActorThumbTouching);
|
||||
const int32 PinkyBuzzLevel = GetBuzzLevel(ActorPinkyTouching);
|
||||
|
||||
if (ThumbBuzzLevel <= 0 && IndexBuzzLevel <= 0 && MiddleBuzzLevel <= 0 && RingBuzzLevel <= 0 && PinkyBuzzLevel <= 0)
|
||||
{
|
||||
@@ -292,7 +292,7 @@ USGForceFeedbackCommand* ASGPlayerController::FImpl::GetForceFeedbackCommand(
|
||||
const int32 IndexForceFeedbackLevel = GetForceFeedbackLevel(ActorIndexTouching);
|
||||
const int32 MiddleForceFeedbackLevel = GetForceFeedbackLevel(ActorMiddleTouching);
|
||||
const int32 RingForceFeedbackLevel = GetForceFeedbackLevel(ActorRingTouching);
|
||||
const int32 PinkyForceFeedbackLevel = GetForceFeedbackLevel(ActorThumbTouching);
|
||||
const int32 PinkyForceFeedbackLevel = GetForceFeedbackLevel(ActorPinkyTouching);
|
||||
|
||||
if (ThumbForceFeedbackLevel <= 0 && IndexForceFeedbackLevel <= 0 && MiddleForceFeedbackLevel <= 0
|
||||
&& RingForceFeedbackLevel <= 0 && PinkyForceFeedbackLevel <= 0)
|
||||
|
||||
@@ -57,8 +57,7 @@ private:
|
||||
meta=(AllowPrivateAccess="false", ClampMin = "0", ClampMax = "100", UIMin = "0", UIMax = "100"))
|
||||
int32 BuzzLevel;
|
||||
|
||||
UPROPERTY(EditAnywhere, Category="SenseGlove",
|
||||
meta=(AllowPrivateAccess="false", ClampMin = "0", ClampMax = "100", UIMin = "0", UIMax = "100"))
|
||||
UPROPERTY(EditAnywhere, Category="SenseGlove", meta=(AllowPrivateAccess="false", ClampMin = "0.0", UIMin = "0.0"))
|
||||
float BuzzDuration;
|
||||
|
||||
UPROPERTY(EditAnywhere, Category="SenseGlove",
|
||||
|
||||
@@ -87,7 +87,7 @@ USGNovaGlove* USGNovaGlove::NewNovaGlove(UObject* Outer, TSharedRef<FSGNovaGlove
|
||||
USGNovaGlove* USGNovaGlove::NewNovaGlove(UObject* Outer)
|
||||
{
|
||||
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtrContainer;
|
||||
SGCoreImpl_FSGSenseGloveImpl_ctor_MakeShared(&OutSharedPtrContainer);
|
||||
SGCoreImpl_FSGNovaGloveImpl_ctor_MakeShared(&OutSharedPtrContainer);
|
||||
|
||||
return NewNovaGlove(Outer, OutSharedPtrContainer.Ptr.ToSharedRef());
|
||||
}
|
||||
@@ -96,7 +96,7 @@ USGNovaGlove* USGNovaGlove::NewNovaGlove(UObject* Outer, const USGNovaGloveInfo&
|
||||
{
|
||||
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtrContainer;
|
||||
FSGIC_FSGNovaGloveInfoImpl DeviceInfoContainer{DeviceInfo.ToNovaGloveInfoImpl()};
|
||||
SGCoreImpl_FSGSenseGloveImpl_ctor_Model_MakeShared(&OutSharedPtrContainer, &DeviceInfoContainer);
|
||||
SGCoreImpl_FSGNovaGloveImpl_ctor_DeviceInfo_MakeShared(&OutSharedPtrContainer, &DeviceInfoContainer);
|
||||
|
||||
return NewNovaGlove(Outer, OutSharedPtrContainer.Ptr.ToSharedRef());
|
||||
}
|
||||
@@ -132,7 +132,7 @@ USGDevice* USGNovaGlove::Parse(UObject* Outer, const FString& ConstantsString)
|
||||
{
|
||||
FSGIC_FSGNovaGloveImpl OutNovaGloveImplContainer;
|
||||
FSGIC_FString ConstantsStringContainer{ConstantsString};
|
||||
SGCoreImpl_FSGSenseGloveImpl_Parse(&OutNovaGloveImplContainer, &ConstantsStringContainer);
|
||||
SGCoreImpl_FSGNovaGloveImpl_Parse(&OutNovaGloveImplContainer, &ConstantsStringContainer);
|
||||
|
||||
return NewNovaGlove(Outer, MoveTemp(OutNovaGloveImplContainer.NovaGloveImpl));
|
||||
}
|
||||
@@ -303,7 +303,7 @@ USGNovaGlove::USGNovaGlove()
|
||||
: USGHapticGlove()
|
||||
{
|
||||
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtrContainer;
|
||||
SGCoreImpl_FSGSenseGloveImpl_ctor_MakeShared(&OutSharedPtrContainer);
|
||||
SGCoreImpl_FSGNovaGloveImpl_ctor_MakeShared(&OutSharedPtrContainer);
|
||||
|
||||
SetSGDeviceImpl(OutSharedPtrContainer.Ptr.ToSharedRef());
|
||||
}
|
||||
@@ -313,7 +313,7 @@ USGNovaGlove::USGNovaGlove(const USGNovaGloveInfo& DeviceInfo)
|
||||
{
|
||||
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtrContainer;
|
||||
FSGIC_FSGNovaGloveInfoImpl DeviceInfoContainer{DeviceInfo.ToNovaGloveInfoImpl()};
|
||||
SGCoreImpl_FSGSenseGloveImpl_ctor_Model_MakeShared(&OutSharedPtrContainer, &DeviceInfoContainer);
|
||||
SGCoreImpl_FSGNovaGloveImpl_ctor_DeviceInfo_MakeShared(&OutSharedPtrContainer, &DeviceInfoContainer);
|
||||
|
||||
SetSGDeviceImpl(OutSharedPtrContainer.Ptr.ToSharedRef());
|
||||
}
|
||||
|
||||
@@ -106,7 +106,6 @@
|
||||
#include "SGInterop/SGIC_FSGTimedThumpCommandImpl.h"
|
||||
#include "SGInterop/SGIC_FString.h"
|
||||
#include "SGInterop/SGIC_FVector.h"
|
||||
#include "SGInterop/SGIC_int32_Ref.h"
|
||||
|
||||
#if PLATFORM_ANDROID
|
||||
#include "SGInterop/SGIC_jclass.h"
|
||||
@@ -1243,13 +1242,13 @@ void SGCoreImpl_FSGDeviceModelImpl_ParseFunctions(
|
||||
|
||||
void SGCoreImpl_FSGDeviceModelImpl_ParseFirmware(
|
||||
void* RawFirmware,
|
||||
void* OutMainVersion,
|
||||
void* OutSubVersion)
|
||||
int32* OutMainVersion,
|
||||
int32* OutSubVersion)
|
||||
{
|
||||
FSGDeviceModelImpl::ParseFirmware(
|
||||
StaticCast<FSGIC_FString*>(RawFirmware)->String,
|
||||
StaticCast<FSGIC_int32_Ref*>(OutMainVersion)->Ref,
|
||||
StaticCast<FSGIC_int32_Ref*>(OutSubVersion)->Ref);
|
||||
*OutMainVersion,
|
||||
*OutSubVersion);
|
||||
}
|
||||
|
||||
void SGCoreImpl_FSGDeviceModelImpl_ctor(
|
||||
|
||||
@@ -630,8 +630,8 @@ SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceModelImpl_ParseFunctions(
|
||||
|
||||
SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceModelImpl_ParseFirmware(
|
||||
void* RawFirmware,
|
||||
void* OutMainVersion,
|
||||
void* OutSubVersion);
|
||||
int32* OutMainVersion,
|
||||
int32* OutSubVersion);
|
||||
|
||||
SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceModelImpl_ctor(
|
||||
void* OutDeviceModelImpl);
|
||||
|
||||
Reference in New Issue
Block a user