diff --git a/Source/SenseGloveCore/Private/SGCore/SGDevice.cpp b/Source/SenseGloveCore/Private/SGCore/SGDevice.cpp index 6ce5e8b6..ff3ab174 100644 --- a/Source/SenseGloveCore/Private/SGCore/SGDevice.cpp +++ b/Source/SenseGloveCore/Private/SGCore/SGDevice.cpp @@ -347,36 +347,56 @@ bool USGDevice::IsASenseGlove() const USGBetaDevice* USGDevice::AsBetaDevice(UObject* Outer) const { + FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()}; + FSGIC_TSharedPtr_FSGBetaDeviceImpl OutSharedPtr; + SGCoreImpl_FSGDeviceImpl_AsBetaDevice(&InstanceContainer, &OutSharedPtr); + USGBetaDevice* BetaDevice = NewObject(Outer); - BetaDevice->SetSGDeviceImpl(FSGDeviceImplCast::ToBetaDeviceImpl(ToSGDeviceImpl())); + BetaDevice->SetSGDeviceImpl(OutSharedPtr.Ptr.ToSharedRef()); return BetaDevice; } USGHapticGlove* USGDevice::AsHapticGlove(UObject* Outer) const { + FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()}; + FSGIC_TSharedPtr_FSGHapticGloveImpl OutSharedPtr; + SGCoreImpl_FSGDeviceImpl_AsHapticGlove(&InstanceContainer, &OutSharedPtr); + USGHapticGlove* HapticGlove = NewObject(Outer); - HapticGlove->SetSGDeviceImpl(FSGDeviceImplCast::ToHapticGloveImpl(ToSGDeviceImpl())); + HapticGlove->SetSGDeviceImpl(OutSharedPtr.Ptr.ToSharedRef()); return HapticGlove; } USGNova2Glove* USGDevice::AsNova2Glove(UObject* Outer) const { + FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()}; + FSGIC_TSharedPtr_FSGNova2GloveImpl OutSharedPtr; + SGCoreImpl_FSGDeviceImpl_AsNova2Glove(&InstanceContainer, &OutSharedPtr); + USGNova2Glove* Nova2Glove = NewObject(Outer); - Nova2Glove->SetSGDeviceImpl(FSGDeviceImplCast::ToNova2GloveImpl(ToSGDeviceImpl())); + Nova2Glove->SetSGDeviceImpl(OutSharedPtr.Ptr.ToSharedRef()); return Nova2Glove; } USGNovaGlove* USGDevice::AsNovaGlove(UObject* Outer) const { + FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()}; + FSGIC_TSharedPtr_FSGNovaGloveImpl OutSharedPtr; + SGCoreImpl_FSGDeviceImpl_AsNovaGlove(&InstanceContainer, &OutSharedPtr); + USGNovaGlove* NovaGlove = NewObject(Outer); - NovaGlove->SetSGDeviceImpl(FSGDeviceImplCast::ToNovaGloveImpl(ToSGDeviceImpl())); + NovaGlove->SetSGDeviceImpl(OutSharedPtr.Ptr.ToSharedRef()); return NovaGlove; } USGSenseGlove* USGDevice::AsSenseGlove(UObject* Outer) const { + FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()}; + FSGIC_TSharedPtr_FSGSenseGloveImpl OutSharedPtr; + SGCoreImpl_FSGDeviceImpl_AsSenseGlove(&InstanceContainer, &OutSharedPtr); + USGSenseGlove* SenseGlove = NewObject(Outer); - SenseGlove->SetSGDeviceImpl(FSGDeviceImplCast::ToSenseGloveImpl(ToSGDeviceImpl())); + SenseGlove->SetSGDeviceImpl(OutSharedPtr.Ptr.ToSharedRef()); return SenseGlove; } diff --git a/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGDeviceImpl.cpp b/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGDeviceImpl.cpp index 5226fe5d..be8e8917 100644 --- a/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGDeviceImpl.cpp +++ b/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGDeviceImpl.cpp @@ -224,6 +224,51 @@ bool FSGDeviceImpl::IsASenseGlove() const return SenseGlove != nullptr; } +TSharedPtr FSGDeviceImpl::AsBetaDevice() const +{ + const FSGBetaDeviceImpl::FBetaDevicePtrType BetaDevice{ + std::dynamic_pointer_cast(ToSGDevicePtr()) + }; + ensureAlwaysMsgf(BetaDevice, TEXT("Invalid BetaDevice!")); + return MakeShared(BetaDevice); +} + +TSharedPtr FSGDeviceImpl::AsHapticGlove() const +{ + const FSGHapticGloveImpl::FHapticGlovePtrType HapticGlove{ + std::dynamic_pointer_cast(ToSGDevicePtr()) + }; + ensureAlwaysMsgf(HapticGlove, TEXT("Invalid HapticGlove!")); + return MakeShared(HapticGlove); +} + +TSharedPtr FSGDeviceImpl::AsNova2Glove() const +{ + const FSGNova2GloveImpl::FNova2GlovePtrType Nova2Glove{ + std::dynamic_pointer_cast(ToSGDevicePtr()) + }; + ensureAlwaysMsgf(Nova2Glove, TEXT("Invalid Nova2Glove!")); + return MakeShared(Nova2Glove); +} + +TSharedPtr FSGDeviceImpl::AsNovaGlove() const +{ + const FSGNovaGloveImpl::FNovaGlovePtrType NovaGlove{ + std::dynamic_pointer_cast(ToSGDevicePtr()) + }; + ensureAlwaysMsgf(NovaGlove, TEXT("Invalid NovaGlove!")); + return MakeShared(NovaGlove); +} + +TSharedPtr FSGDeviceImpl::AsSenseGlove() const +{ + const FSGSenseGloveImpl::FSenseGlovePtrType SenseGlove{ + std::dynamic_pointer_cast(ToSGDevicePtr()) + }; + ensureAlwaysMsgf(SenseGlove, TEXT("Invalid SenseGlove!")); + return MakeShared(SenseGlove); +} + ESGDeviceType FSGDeviceImpl::GetDeviceType() const { return FSGCoreEnumCast::ToESGDeviceType(ToSGDevicePtrChecked()->GetDeviceType()); diff --git a/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGExportedFunctions.cpp b/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGExportedFunctions.cpp index 191c54d7..5bc5407f 100644 --- a/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGExportedFunctions.cpp +++ b/Source/SenseGloveCoreImpl/Private/SGCoreImpl/SGExportedFunctions.cpp @@ -1102,6 +1102,46 @@ bool SGCoreImpl_FSGDeviceImpl_IsASenseGlove( return StaticCast(Instance)->Ptr->IsASenseGlove(); } +void SGCoreImpl_FSGDeviceImpl_AsBetaDevice( + void* Instance, + void* OutSharedPtr) +{ + StaticCast(OutSharedPtr)->Ptr = + StaticCast(Instance)->Ptr->AsBetaDevice(); +} + +void SGCoreImpl_FSGDeviceImpl_AsHapticGlove( + void* Instance, + void* OutSharedPtr) +{ + StaticCast(OutSharedPtr)->Ptr = + StaticCast(Instance)->Ptr->AsHapticGlove(); +} + +void SGCoreImpl_FSGDeviceImpl_AsNova2Glove( + void* Instance, + void* OutSharedPtr) +{ + StaticCast(OutSharedPtr)->Ptr = + StaticCast(Instance)->Ptr->AsNova2Glove(); +} + +void SGCoreImpl_FSGDeviceImpl_AsNovaGlove( + void* Instance, + void* OutSharedPtr) +{ + StaticCast(OutSharedPtr)->Ptr = + StaticCast(Instance)->Ptr->AsNovaGlove(); +} + +void SGCoreImpl_FSGDeviceImpl_AsSenseGlove( + void* Instance, + void* OutSharedPtr) +{ + StaticCast(OutSharedPtr)->Ptr = + StaticCast(Instance)->Ptr->AsSenseGlove(); +} + void SGCoreImpl_FSGDeviceImpl_GetDeviceType( void* Instance, void* OutType) diff --git a/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGDeviceImpl.h b/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGDeviceImpl.h index 2278a159..865fb6a7 100644 --- a/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGDeviceImpl.h +++ b/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGDeviceImpl.h @@ -173,6 +173,13 @@ public: bool IsANovaGlove() const; bool IsASenseGlove() const; +public: + TSharedPtr AsBetaDevice() const; + TSharedPtr AsHapticGlove() const; + TSharedPtr AsNova2Glove() const; + TSharedPtr AsNovaGlove() const; + TSharedPtr AsSenseGlove() const; + public: virtual ESGDeviceType GetDeviceType() const; diff --git a/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGExportedFunctions.h b/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGExportedFunctions.h index b66ce7c0..70c3db6e 100644 --- a/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGExportedFunctions.h +++ b/Source/SenseGloveCoreImpl/Public/SGCoreImpl/SGExportedFunctions.h @@ -568,6 +568,26 @@ SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsANovaGlove( SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsASenseGlove( void* Instance); +SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_AsBetaDevice( + void* Instance, + void* OutSharedPtr); + +SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_AsHapticGlove( + void* Instance, + void* OutSharedPtr); + +SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_AsNova2Glove( + void* Instance, + void* OutSharedPtr); + +SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_AsNovaGlove( + void* Instance, + void* OutSharedPtr); + +SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_AsSenseGlove( + void* Instance, + void* OutSharedPtr); + SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_GetDeviceType( void* Instance, void* OutType);