another attempt at improving the glove casts

This commit is contained in:
Mamadou Babaei
2024-03-22 20:54:16 +01:00
parent 40f27c227f
commit beadba4544
8 changed files with 101 additions and 38 deletions
@@ -37,6 +37,11 @@
#include "Engine/Engine.h"
#include "SGCore/SGBetaDevice.h"
#include "SGCore/SGHapticGlove.h"
#include "SGCore/SGNovaGlove.h"
#include "SGCore/SGNova2Glove.h"
#include "SGCore/SGSenseGlove.h"
#include "SGCoreImpl/SGBetaDeviceImpl.h"
#include "SGCoreImpl/SGDeviceImpl.h"
#include "SGCoreImpl/SGExportedFunctions.h"
@@ -315,6 +320,12 @@ bool USGDevice::IsABetaDevice() const
return SGCoreImpl_FSGDeviceImpl_IsABetaDevice(&InstanceContainer);
}
bool USGDevice::IsAHapticGlove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsAHapticGlove(&InstanceContainer);
}
bool USGDevice::IsANova2Glove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
@@ -333,6 +344,56 @@ bool USGDevice::IsASenseGlove() const
return SGCoreImpl_FSGDeviceImpl_IsASenseGlove(&InstanceContainer);
}
USGBetaDevice* USGDevice::AsBetaDevice(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGBetaDeviceImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToBetaDeviceImplRef(&InstanceContainer, &OutSharedPtr);
USGBetaDevice* BetaDevice = NewObject<USGBetaDevice>(Outer);
BetaDevice->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return BetaDevice;
}
USGHapticGlove* USGDevice::AsHapticGlove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGHapticGloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToHapticGloveImplRef(&InstanceContainer, &OutSharedPtr);
USGHapticGlove* HapticGlove = NewObject<USGHapticGlove>(Outer);
HapticGlove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return HapticGlove;
}
USGNova2Glove* USGDevice::AsNova2Glove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGNova2GloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToNova2GloveImplRef(&InstanceContainer, &OutSharedPtr);
USGNova2Glove* Nova2Glove = NewObject<USGNova2Glove>(Outer);
Nova2Glove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return Nova2Glove;
}
USGNovaGlove* USGDevice::AsNovaGlove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToNovaGloveImplRef(&InstanceContainer, &OutSharedPtr);
USGNovaGlove* NovaGlove = NewObject<USGNovaGlove>(Outer);
NovaGlove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return NovaGlove;
}
USGSenseGlove* USGDevice::AsSenseGlove(UObject* Outer) const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
FSGIC_TSharedPtr_FSGSenseGloveImpl OutSharedPtr;
SGCoreImpl_FSGDeviceImpl_ToSenseGloveImplRef(&InstanceContainer, &OutSharedPtr);
USGSenseGlove* SenseGlove = NewObject<USGSenseGlove>(Outer);
SenseGlove->SetSGDeviceImpl(*OutSharedPtr.Ptr.Get());
return SenseGlove;
}
ESGDeviceType USGDevice::GetDeviceType() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
@@ -38,8 +38,6 @@
#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"
@@ -205,27 +203,6 @@ TSharedRef<FSGHapticGloveImpl> USGHapticGlove::ToHapticGloveImpl() const
return FSGDeviceImplCast::ToHapticGloveImpl(ToSGDeviceImpl());
}
USGNova2Glove* USGHapticGlove::AsNova2Glove(UObject* Outer) const
{
USGNova2Glove* Instance = NewObject<USGNova2Glove>(Outer);
Instance->SetSGDeviceImpl(ToHapticGloveImpl());
return Instance;
}
USGNovaGlove* USGHapticGlove::AsNovaGlove(UObject* Outer) const
{
USGNovaGlove* Instance = NewObject<USGNovaGlove>(Outer);
Instance->SetSGDeviceImpl(ToHapticGloveImpl());
return Instance;
}
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()};
@@ -54,6 +54,11 @@ class FSGNovaGloveImpl;
class FSGNova2GloveImpl;
class FSGSenseGloveImpl;
class USGHapticChannelInfo;
class USGBetaDevice;
class USGHapticGlove;
class USGNova2Glove;
class USGNovaGlove;
class USGSenseGlove;
/**
*
@@ -254,10 +259,22 @@ public:
public:
bool IsABetaDevice() const;
bool IsAHapticGlove() const;
bool IsANova2Glove() const;
bool IsANovaGlove() const;
bool IsASenseGlove() const;
public:
USGBetaDevice* AsBetaDevice(UObject* Outer) const;
USGHapticGlove* AsHapticGlove(UObject* Outer) const;
USGNova2Glove* AsNova2Glove(UObject* Outer) const;
USGNovaGlove* AsNovaGlove(UObject* Outer) const;
USGSenseGlove* AsSenseGlove(UObject* Outer) const;
public:
/**
* Check which DeviceType this class belongs to.
@@ -58,9 +58,6 @@ 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.
@@ -189,13 +186,6 @@ public:
*/
TSharedRef<FSGHapticGloveImpl> ToHapticGloveImpl() const;
public:
USGNova2Glove* AsNova2Glove(UObject* Outer) const;
USGNovaGlove* AsNovaGlove(UObject* Outer) const;
USGSenseGlove* AsSenseGlove(UObject* Outer) const;
public:
/**
* Get the DeviceType enumerator of this device; used to check if its a SenseGlove/Nova/etc.
@@ -151,35 +151,35 @@ TSharedRef<FSGDeviceImpl> FSGDeviceImpl::ToSGDeviceImplRef()
TSharedRef<FSGBetaDeviceImpl> FSGDeviceImpl::ToBetaDeviceImplRef()
{
FSGBetaDeviceImpl* BetaDevice(dynamic_cast<FSGBetaDeviceImpl*>(this));
FSGBetaDeviceImpl* BetaDevice{dynamic_cast<FSGBetaDeviceImpl*>(this)};
ensureAlwaysMsgf(BetaDevice, TEXT("Invalid BetaDevice!"));
return SharedThis(BetaDevice);
}
TSharedRef<FSGHapticGloveImpl> FSGDeviceImpl::ToHapticGloveImplRef()
{
FSGHapticGloveImpl* HapticGlove(dynamic_cast<FSGHapticGloveImpl*>(this));
FSGHapticGloveImpl* HapticGlove{dynamic_cast<FSGHapticGloveImpl*>(this)};
ensureAlwaysMsgf(HapticGlove, TEXT("Invalid HapticGlove!"));
return SharedThis(HapticGlove);
}
TSharedRef<FSGNova2GloveImpl> FSGDeviceImpl::ToNova2GloveImplRef()
{
FSGNova2GloveImpl* Nova2Glove(dynamic_cast<FSGNova2GloveImpl*>(this));
FSGNova2GloveImpl* Nova2Glove{dynamic_cast<FSGNova2GloveImpl*>(this)};
ensureAlwaysMsgf(Nova2Glove, TEXT("Invalid Nova2Glove!"));
return SharedThis(Nova2Glove);
}
TSharedRef<FSGNovaGloveImpl> FSGDeviceImpl::ToNovaGloveImplRef()
{
FSGNovaGloveImpl* NovaGlove(dynamic_cast<FSGNovaGloveImpl*>(this));
FSGNovaGloveImpl* NovaGlove{dynamic_cast<FSGNovaGloveImpl*>(this)};
ensureAlwaysMsgf(NovaGlove, TEXT("Invalid NovaGlove!"));
return SharedThis(NovaGlove);
}
TSharedRef<FSGSenseGloveImpl> FSGDeviceImpl::ToSenseGloveImplRef()
{
FSGSenseGloveImpl* SenseGlove(dynamic_cast<FSGSenseGloveImpl*>(this));
FSGSenseGloveImpl* SenseGlove{dynamic_cast<FSGSenseGloveImpl*>(this)};
ensureAlwaysMsgf(SenseGlove, TEXT("Invalid SenseGlove!"));
return SharedThis(SenseGlove);
}
@@ -192,6 +192,14 @@ bool FSGDeviceImpl::IsABetaDevice() const
return BetaDevice != nullptr;
}
bool FSGDeviceImpl::IsAHapticGlove() const
{
const FSGHapticGloveImpl::FHapticGlovePtrType HapticGlove{
std::dynamic_pointer_cast<FSGHapticGloveImpl::FHapticGloveType>(ToSGDevicePtr())
};
return HapticGlove != nullptr;
}
bool FSGDeviceImpl::IsANova2Glove() const
{
const FSGNova2GloveImpl::FNova2GlovePtrType Nova2Glove{
@@ -1078,6 +1078,12 @@ bool SGCoreImpl_FSGDeviceImpl_IsABetaDevice(
return StaticCast<FSGIC_TSharedPtr_FSGDeviceImpl*>(Instance)->Ptr->IsABetaDevice();
}
bool SGCoreImpl_FSGDeviceImpl_IsAHapticGlove(
void* Instance)
{
return StaticCast<FSGIC_TSharedPtr_FSGDeviceImpl*>(Instance)->Ptr->IsAHapticGlove();
}
bool SGCoreImpl_FSGDeviceImpl_IsANova2Glove(
void* Instance)
{
@@ -168,6 +168,7 @@ public:
public:
bool IsABetaDevice() const;
bool IsAHapticGlove() const;
bool IsANova2Glove() const;
bool IsANovaGlove() const;
bool IsASenseGlove() const;
@@ -556,6 +556,9 @@ SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_ToSenseGloveImplRef(
SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsABetaDevice(
void* Instance);
SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsAHapticGlove(
void* Instance);
SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsANova2Glove(
void* Instance);