Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0db0b0846
|
||
|
|
5e1cb6a637
|
||
|
|
eca69677b1
|
||
|
|
fbe415c7ae
|
||
|
|
0b052356ee
|
||
|
|
42316edb95
|
||
|
|
932bdb26d4
|
||
|
|
4fe5281cd8
|
||
|
|
dcbe1015f8
|
||
|
|
6ebee2aa2f
|
||
|
|
7c8f26e978
|
||
|
|
bf234d720b
|
+28
-1
@@ -5,6 +5,32 @@ 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.2] - 2023-11-03
|
||||
|
||||
# Added
|
||||
|
||||
- Added a list of planned features and their completion status to the main README file.
|
||||
|
||||
### Fixed
|
||||
|
||||
- A bug where released actor is going to be NULL whenever the OnActorReleased event fires.
|
||||
|
||||
## [1.9.1] - 2023-10-11
|
||||
|
||||
### Fixed
|
||||
|
||||
- Add the missing Unreal Engine C++ header to files that rely on the ENGINE\_\*\_VERSION macros in order to fix the Epic Store build failures on UE 5.3.
|
||||
|
||||
## [1.9.0] - 2023-10-10
|
||||
|
||||
### Changed
|
||||
|
||||
- The BlueprintImplementableEvent UFUNCTION specifier for the OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch events have been changed to BlueprintNativeEvent in order to allow them to be implemented from the child C++ classes as well. This won't break any existing Blueprint code that relies on the previous BlueprintImplementableEvent signature.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Add a missing release note entry for the v1.8.0 release to the changelog file.
|
||||
|
||||
## [1.8.0] - 2023-10-10
|
||||
|
||||
### Added
|
||||
@@ -15,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Fixed
|
||||
|
||||
- Fix a bug where the OnTouchStateUpdated event is mistakenly triggered instead of the OnGrabStateUpdated when the right thumb fingertip grab collider overlaps with a grabbable actor.
|
||||
- Fix the DECLARE_EVENT macro signature for OnGrabStateUpdated and OnTouchStateUpdated events.
|
||||
|
||||
## [1.7.0] - 2023-09-14
|
||||
|
||||
@@ -333,4 +360,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.
|
||||
|
||||
@@ -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.8.x | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x (r25b) | ✅ v1.8.0 | ✅ v1.8.0 |
|
||||
| **5.2** | ❌ | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x (r25b) | ✅ v1.8.0 | ✅ v1.8.0 |
|
||||
| **5.3** | ❌ | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x | ✅ v1.8.x (r25b) | ✅ v1.8.0 | ✅ v1.8.0 |
|
||||
| **5.1** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.1 | ✅ v1.9.1 |
|
||||
| **5.2** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.1 | ✅ v1.9.1 |
|
||||
| **5.3** | ❌ | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x | ✅ v1.9.x (r25b) | ✅ v1.9.2 | ✅ v1.9.2 |
|
||||
|
||||
* <code>✅</code> Supported
|
||||
* <code>⚠️</code> Not supported by the latest release and might be lacking features
|
||||
@@ -53,6 +53,52 @@ The following modules are intended to be used by the C++ users of this plugin:
|
||||
|
||||
Please note that modules postfixed with **Impl** are intended for interal use and are discouraged to be used by the users of the API. The modules postfixed with **Kismet** are exposing the functionality of the equivalent modules to Blueprints. For other modules descriptions, please see [the Directory Structure section](#directory-structure).
|
||||
|
||||
## Planned Features Completion Status
|
||||
|
||||
### Implemented as of v1.9.2
|
||||
|
||||
- [X] Full SenseGlove low-level core API access through Unreal C++.
|
||||
- [X] Full SenseGlove low-level core API access through Blueprint.
|
||||
- [X] DK 1 Support.
|
||||
- [X] Nova 1 Support.
|
||||
- [X] Support for Microsoft Windows as a development platform.
|
||||
- [X] Support for GNU/Linux as a development platform.
|
||||
- [X] Support for Microsoft Windows as a deployment platform.
|
||||
- [X] Support for GNU/Linux x64 as a deployment platform.
|
||||
- [X] Support for GNU/Linux AArch64 as a deployment platform.
|
||||
- [X] Support for Android as a deployment platform.
|
||||
- [X] Support for Oculus Quest 2 and Oculus Quest Pro.
|
||||
- [X] Support for HTC VIVE Pro and HTC VIVE Focus 3.
|
||||
- [X] Support for HTC VIVE Trackers and HTC VIVE Wrist Trackers.
|
||||
- [X] On-device calibration for Android without the need for SenseCom.
|
||||
- [X] Haptic feedback including force feedback, buzz, and thumper commands.
|
||||
- [X] A customizable Grab component that could be added to any actor.
|
||||
- [X] A customizable Touch component that could be added to any actor.
|
||||
- [X] Ability to grab, release, and throw objects around.
|
||||
- [X] Separation of the real and virtual hand rendering.
|
||||
- [X] An out-of-the-box customizable SGPawn with the ability to be extended in C++ and Blueprint.
|
||||
- [X] Easy wrist/hand tracking debugging using the SenseGlove Debug module.
|
||||
- [X] A generic Settings module with the ability to override settings.
|
||||
- [X] C++/Blueprint interaction events such as OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch.
|
||||
|
||||
### Upcoming features planned for the v2.0.0 release
|
||||
|
||||
- [ ] A default hand mesh rigged with the standard SenseGlove default hand pose.
|
||||
- [ ] Hand tracking compatible with OpenXR (or other generic hand tracking format).
|
||||
- [ ] Nova 2 Support.
|
||||
|
||||
### Planned features long-term
|
||||
|
||||
- [ ] Get tracking input from sources other than a SenseGlove device.
|
||||
- [ ] Be able to assign behaviors to different objects (meshes) in the scene (e.g. Slider, Hinge, basic Grabables, etc).
|
||||
- [ ] Make it so developers can define or extend their own behavior(s) to an object through Code / Blueprints (e.g. I want a car door that is like a slider, but follows a path rather than a straight line).
|
||||
- [ ] Make the hand(s) able to push around physics-driven objects (for as much as their behaviors allow) (in backlog).
|
||||
- [ ] Be able to grab objects with up to 2 hands (and move them around with both hands at the same time in a way that seems realistic).
|
||||
- [ ] Ensure that our virtual hands (and the objects they hold) do not phase through other physics objects (e.g. walls and tables).
|
||||
- [ ] Allow other scripts to force a grab and/or release to occur (for example, when you place it apart at the designated location, it gets removed from your hand and snaps into place).
|
||||
- [ ] Have some form of weight simulation by making certain objects harder to push, lowering manipulation speed, or making objects only moveable with two hands.
|
||||
- [ ] (Optional) Make it so the fingers of your virtual hands do not clip inside the meshes you are holding (certain people see this as an indicator of how fast the Force-Feedback activates - but it's basically just rendering).
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
@@ -239,4 +285,4 @@ The SenseGlove plug-in for Unreal Engine is licensed under the terms of the [MIT
|
||||
|
||||
### Third-Party Licenses
|
||||
|
||||
Please note that while the SenseGlove plug-in for Unreal Engine is made available under the [MIT License](LICENSE.md), it utilizes a few third-party libraries with permissive free licenses as well, in order to power various components. For a list of these libraries and their own respective open-source licenses take a look at [LICENSE-THIRD-PARTY.md](LICENSE-THIRD-PARTY.md), please.
|
||||
Please note that while the SenseGlove plug-in for Unreal Engine is made available under the [MIT License](LICENSE.md), it utilizes a few third-party libraries with permissive free licenses as well, in order to power various components. For a list of these libraries and their own respective open-source licenses take a look at [LICENSE-THIRD-PARTY.md](LICENSE-THIRD-PARTY.md), please.
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"FileVersion": 3,
|
||||
"Version": 1,
|
||||
"VersionName": "1.8.0",
|
||||
"VersionName": "1.9.1",
|
||||
"FriendlyName": "SenseGlove",
|
||||
"Description": "Integrating the SenseGlove haptic controller into Unreal Engine",
|
||||
"Category": "Virtual Reality",
|
||||
|
||||
@@ -44,9 +44,9 @@
|
||||
#include "Engine/SkeletalMesh.h"
|
||||
#include "Math/Rotator.h"
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
#include "SGLog/SGLog.h"
|
||||
|
||||
#include "SenseGlove/Components/SGVirtualHandComponent.h"
|
||||
#include "SGLog/SGLog.h"
|
||||
|
||||
FSGVirtualHandAnimInstanceProxy::FSGVirtualHandAnimInstanceProxy()
|
||||
: FAnimInstanceProxy()
|
||||
|
||||
@@ -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 "SenseGlove/Components/SGGrabComponent.h"
|
||||
@@ -613,6 +614,30 @@ ASGPawn::ASGPawn(const FObjectInitializer& ObjectInitializer)
|
||||
RightHandTouchState = FSGTouchState(HandRight, nullptr, nullptr, nullptr, nullptr, nullptr);
|
||||
}
|
||||
|
||||
void ASGPawn::OnGrabStateUpdated_Implementation(const FSGGrabState& GrabState)
|
||||
{
|
||||
}
|
||||
|
||||
void ASGPawn::OnTouchStateUpdated_Implementation(const FSGTouchState& TouchState)
|
||||
{
|
||||
}
|
||||
|
||||
void ASGPawn::OnActorGrabbed_Implementation(const USGVirtualHandComponent* Hand, const AActor* Actor)
|
||||
{
|
||||
}
|
||||
|
||||
void ASGPawn::OnActorReleased_Implementation(const USGVirtualHandComponent* Hand, const AActor* Actor)
|
||||
{
|
||||
}
|
||||
|
||||
void ASGPawn::OnActorBeginTouch_Implementation(const USGVirtualHandComponent* Hand, const AActor* Actor)
|
||||
{
|
||||
}
|
||||
|
||||
void ASGPawn::OnActorEndTouch_Implementation(const USGVirtualHandComponent* Hand, const AActor* Actor)
|
||||
{
|
||||
}
|
||||
|
||||
void ASGPawn::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
@@ -1952,9 +1977,9 @@ void ASGPawn::FImpl::Release(FSGGrabState& GrabState) const
|
||||
|
||||
ApplyHandVelocityToGrabbedActor(GrabState);
|
||||
|
||||
SetGrabbedActor(GrabState, nullptr);
|
||||
|
||||
TriggerActorReleasedEvent(GrabState.Hand, GrabState.GrabbedActor);
|
||||
|
||||
SetGrabbedActor(GrabState, nullptr);
|
||||
}
|
||||
|
||||
void ASGPawn::FImpl::TriggerGrabStateUpdatedEvent(const FSGGrabState& GrabState) const
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#include "SenseGlove/GameFramework/SGPlayerController.h"
|
||||
|
||||
#include "Runtime/Launch/Resources/Version.h"
|
||||
|
||||
#if ENGINE_MAJOR_VERSION > 5 || ( ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 2 )
|
||||
#include "Engine/TimerHandle.h"
|
||||
#else /* ENGINE_MAJOR_VERSION > 5 || ( ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 2 ) */
|
||||
|
||||
@@ -215,22 +215,22 @@ private:
|
||||
TArray<const AActor*> RightHandOverlappedActors;
|
||||
|
||||
protected:
|
||||
UFUNCTION(BlueprintImplementableEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
UFUNCTION(BlueprintNativeEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
void OnGrabStateUpdated(const FSGGrabState& GrabState);
|
||||
|
||||
UFUNCTION(BlueprintImplementableEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
UFUNCTION(BlueprintNativeEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
void OnTouchStateUpdated(const FSGTouchState& TouchState);
|
||||
|
||||
UFUNCTION(BlueprintImplementableEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
UFUNCTION(BlueprintNativeEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
void OnActorGrabbed(const USGVirtualHandComponent* Hand, const AActor* Actor);
|
||||
|
||||
UFUNCTION(BlueprintImplementableEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
UFUNCTION(BlueprintNativeEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
void OnActorReleased(const USGVirtualHandComponent* Hand, const AActor* Actor);
|
||||
|
||||
UFUNCTION(BlueprintImplementableEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
UFUNCTION(BlueprintNativeEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
void OnActorBeginTouch(const USGVirtualHandComponent* Hand, const AActor* Actor);
|
||||
|
||||
UFUNCTION(BlueprintImplementableEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
UFUNCTION(BlueprintNativeEvent, Category="SenseGlove | Game Framework | Pawn")
|
||||
void OnActorEndTouch(const USGVirtualHandComponent* Hand, const AActor* Actor);
|
||||
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user