try to add a solution for glove type-casting in higher levels of the api
This commit is contained in:
@@ -329,11 +329,20 @@ void ASGPlayerController::FImpl::UpdateHapticsFeedback(const FSGTouchState& Touc
|
||||
};
|
||||
Glove->QueueForceFeedbackLevels(MoveTemp(ForceFeedbackLevels));
|
||||
|
||||
USGNovaGlove* NovaGlove = Cast<USGNovaGlove>(Glove);
|
||||
USGNova2Glove* Nova2Glove = Cast<USGNova2Glove>(Glove);
|
||||
USGNova2Glove* Nova2Glove = nullptr;
|
||||
if (Glove->IsANova2Glove())
|
||||
{
|
||||
Nova2Glove = Glove->AsNova2Glove(Owner);
|
||||
}
|
||||
|
||||
// Queue the Vibrotactile command if a Nova or Nova 2 glove...
|
||||
if (IsValid(NovaGlove) || IsValid(Nova2Glove))
|
||||
USGNovaGlove* NovaGlove = nullptr;
|
||||
if (Glove->IsANovaGlove())
|
||||
{
|
||||
NovaGlove = Glove->AsNovaGlove(Owner);
|
||||
}
|
||||
|
||||
// Queue the Vibrotactile command if a Nova 2 or Nova glove...
|
||||
if (IsValid(Nova2Glove) || IsValid(NovaGlove))
|
||||
{
|
||||
TArray<float> VibrotactileLevels{
|
||||
GetVibrotactileLevels(
|
||||
@@ -341,23 +350,24 @@ void ASGPlayerController::FImpl::UpdateHapticsFeedback(const FSGTouchState& Touc
|
||||
TouchState.ActorRingTouching, TouchState.ActorPinkyTouching)
|
||||
};
|
||||
|
||||
if (IsValid(NovaGlove))
|
||||
{
|
||||
NovaGlove->QueueVibroLevels(MoveTemp(VibrotactileLevels));
|
||||
}
|
||||
|
||||
// Queue the Vibrotactile command if a Nova 2 glove...
|
||||
if (IsValid(Nova2Glove))
|
||||
{
|
||||
/// TODO
|
||||
}
|
||||
|
||||
// Queue the Vibrotactile command if a Nova glove...
|
||||
if (IsValid(NovaGlove))
|
||||
{
|
||||
NovaGlove->QueueVibroLevels(MoveTemp(VibrotactileLevels));
|
||||
}
|
||||
}
|
||||
|
||||
// Send the haptics commands!
|
||||
Glove->SendHaptics();
|
||||
|
||||
// Stop the Vibrotactile command after the timeout if a Nova or Nova 2 glove.
|
||||
if (IsValid(NovaGlove) || IsValid(Nova2Glove))
|
||||
// Stop the Vibrotactile command after the timeout if a Nova 2 or Nova glove.
|
||||
if (IsValid(Nova2Glove) || IsValid(NovaGlove))
|
||||
{
|
||||
const float VibrotactileDuration = FImpl::GetVibrotactileDuration(
|
||||
TouchState.ActorThumbTouching, TouchState.ActorIndexTouching, TouchState.ActorMiddleTouching,
|
||||
@@ -368,18 +378,18 @@ void ASGPlayerController::FImpl::UpdateHapticsFeedback(const FSGTouchState& Touc
|
||||
FTimerDelegate TouchVibrotactileStopHandler;
|
||||
TouchVibrotactileStopHandler.BindLambda([= SG_CAPTURE_THIS]()-> void
|
||||
{
|
||||
// Stop the Vibrotactile command after the timeout if a Nova 2 Glove.
|
||||
if (IsValid(Nova2Glove))
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// Stop the Vibrotactile command after the timeout if a Nova Glove.
|
||||
if (IsValid(NovaGlove))
|
||||
{
|
||||
NovaGlove->QueueVibroLevels(VibrotactileOffCommand);
|
||||
NovaGlove->SendHaptics();
|
||||
}
|
||||
|
||||
// Stop the Vibrotactile command after the timeout if a Nova 2 Glove.
|
||||
if (IsValid(Nova2Glove))
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
});
|
||||
|
||||
Owner->GetWorldTimerManager().SetTimer(
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
#include "SGCore/SGBasicHandModel.h"
|
||||
#include "SGCore/SGCustomWaveform.h"
|
||||
#include "SGCore/SGDeviceImplCast.h"
|
||||
#include "SGCore/SGNova2Glove.h"
|
||||
#include "SGCore/SGNovaGlove.h"
|
||||
#include "SGCore/SGSenseGlove.h"
|
||||
#include "SGCoreImpl/SGBasicHandModelImpl.h"
|
||||
#include "SGCoreImpl/SGCustomWaveformImpl.h"
|
||||
#include "SGCoreImpl/SGDeviceImpl.h"
|
||||
@@ -202,6 +205,48 @@ TSharedRef<FSGHapticGloveImpl> USGHapticGlove::ToHapticGloveImpl() const
|
||||
return FSGDeviceImplCast::ToHapticGloveImpl(ToSGDeviceImpl());
|
||||
}
|
||||
|
||||
bool USGHapticGlove::IsANova2Glove() const
|
||||
{
|
||||
const TSharedPtr<FSGNova2GloveImpl> Nova2Glove =
|
||||
StaticCastSharedPtr<FSGNova2GloveImpl>(ToHapticGloveImpl().ToSharedPtr());
|
||||
return Nova2Glove.IsValid();
|
||||
}
|
||||
|
||||
USGNova2Glove* USGHapticGlove::AsNova2Glove(UObject* Outer) const
|
||||
{
|
||||
USGNova2Glove* Instance = NewObject<USGNova2Glove>(Outer);
|
||||
Instance->SetSGDeviceImpl(ToHapticGloveImpl());
|
||||
return Instance;
|
||||
}
|
||||
|
||||
bool USGHapticGlove::IsANovaGlove() const
|
||||
{
|
||||
const TSharedPtr<FSGNovaGloveImpl> NovaGlove =
|
||||
StaticCastSharedPtr<FSGNovaGloveImpl>(ToHapticGloveImpl().ToSharedPtr());
|
||||
return NovaGlove.IsValid();
|
||||
}
|
||||
|
||||
USGNovaGlove* USGHapticGlove::AsNovaGlove(UObject* Outer) const
|
||||
{
|
||||
USGNovaGlove* Instance = NewObject<USGNovaGlove>(Outer);
|
||||
Instance->SetSGDeviceImpl(ToHapticGloveImpl());
|
||||
return Instance;
|
||||
}
|
||||
|
||||
bool USGHapticGlove::IsASenseGlove() const
|
||||
{
|
||||
const TSharedPtr<FSGSenseGloveImpl> SenseGlove =
|
||||
StaticCastSharedPtr<FSGSenseGloveImpl>(ToHapticGloveImpl().ToSharedPtr());
|
||||
return SenseGlove.IsValid();
|
||||
}
|
||||
|
||||
USGSenseGlove* USGHapticGlove::AsSenseGlove(UObject* Outer) const
|
||||
{
|
||||
USGSenseGlove* Instance = NewObject<USGSenseGlove>(Outer);
|
||||
Instance->SetSGDeviceImpl(ToHapticGloveImpl());
|
||||
return Instance;
|
||||
}
|
||||
|
||||
ESGDeviceType USGHapticGlove::GetDeviceType() const
|
||||
{
|
||||
FSGIC_TSharedPtr_FSGHapticGloveImpl InstanceContainer{ToHapticGloveImpl()};
|
||||
|
||||
@@ -58,6 +58,9 @@ class FSGNova2GloveImpl;
|
||||
class FSGSenseGloveImpl;
|
||||
class USGBasicHandModel;
|
||||
class USGCustomWaveform;
|
||||
class USGNova2Glove;
|
||||
class USGNovaGlove;
|
||||
class USGSenseGlove;
|
||||
|
||||
/**
|
||||
* A glove developed by SenseGlove, that has hand tracking and/or haptic feedback functionality.
|
||||
@@ -186,6 +189,16 @@ public:
|
||||
*/
|
||||
TSharedRef<FSGHapticGloveImpl> ToHapticGloveImpl() const;
|
||||
|
||||
public:
|
||||
bool IsANova2Glove() const;
|
||||
USGNova2Glove* AsNova2Glove(UObject* Outer) const;
|
||||
|
||||
bool IsANovaGlove() const;
|
||||
USGNovaGlove* AsNovaGlove(UObject* Outer) const;
|
||||
|
||||
bool IsASenseGlove() const;
|
||||
USGSenseGlove* AsSenseGlove(UObject* Outer) const;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Get the DeviceType enumerator of this device; used to check if its a SenseGlove/Nova/etc.
|
||||
|
||||
Reference in New Issue
Block a user