try an alternative approach for glove instances upcasting at the lower levels of the api

This commit is contained in:
Mamadou Babaei
2024-03-22 21:03:49 +01:00
parent 46813b44ec
commit f1c4c8ba78
8 changed files with 104 additions and 24 deletions
@@ -309,6 +309,30 @@ TSharedRef<FSGDeviceImpl> USGDevice::ToSGDeviceImpl() const
return Pimpl->SGDeviceImpl.ToSharedRef();
}
bool USGDevice::IsABetaDevice() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsABetaDevice(&InstanceContainer);
}
bool USGDevice::IsANova2Glove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsANova2Glove(&InstanceContainer);
}
bool USGDevice::IsANovaGlove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsANovaGlove(&InstanceContainer);
}
bool USGDevice::IsASenseGlove() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
return SGCoreImpl_FSGDeviceImpl_IsASenseGlove(&InstanceContainer);
}
ESGDeviceType USGDevice::GetDeviceType() const
{
FSGIC_TSharedPtr_FSGDeviceImpl InstanceContainer{ToSGDeviceImpl()};
@@ -205,13 +205,6 @@ 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);
@@ -219,13 +212,6 @@ USGNova2Glove* USGHapticGlove::AsNova2Glove(UObject* Outer) const
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);
@@ -233,13 +219,6 @@ USGNovaGlove* USGHapticGlove::AsNovaGlove(UObject* Outer) const
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);
@@ -252,6 +252,12 @@ public:
*/
TSharedRef<FSGDeviceImpl> ToSGDeviceImpl() const;
public:
bool IsABetaDevice() const;
bool IsANova2Glove() const;
bool IsANovaGlove() const;
bool IsASenseGlove() const;
public:
/**
* Check which DeviceType this class belongs to.
@@ -190,13 +190,10 @@ 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:
@@ -184,6 +184,38 @@ TSharedRef<FSGSenseGloveImpl> FSGDeviceImpl::ToSenseGloveImplRef()
return SharedThis(SenseGlove);
}
bool FSGDeviceImpl::IsABetaDevice() const
{
const FSGBetaDeviceImpl::FBetaDevicePtrType BetaDevice{
std::dynamic_pointer_cast<FSGBetaDeviceImpl::FBetaDeviceType>(ToSGDevicePtr())
};
return BetaDevice != nullptr;
}
bool FSGDeviceImpl::IsANova2Glove() const
{
const FSGNova2GloveImpl::FNova2GlovePtrType Nova2Glove{
std::dynamic_pointer_cast<FSGNova2GloveImpl::FNova2GloveType>(ToSGDevicePtr())
};
return Nova2Glove != nullptr;
}
bool FSGDeviceImpl::IsANovaGlove() const
{
const FSGNovaGloveImpl::FNovaGlovePtrType NovaGlove{
std::dynamic_pointer_cast<FSGNovaGloveImpl::FNovaGloveType>(ToSGDevicePtr())
};
return NovaGlove != nullptr;
}
bool FSGDeviceImpl::IsASenseGlove() const
{
const FSGSenseGloveImpl::FSenseGlovePtrType SenseGlove{
std::dynamic_pointer_cast<FSGSenseGloveImpl::FSenseGloveType>(ToSGDevicePtr())
};
return SenseGlove != nullptr;
}
ESGDeviceType FSGDeviceImpl::GetDeviceType() const
{
return FSGCoreEnumCast::ToESGDeviceType(ToSGDevicePtrChecked()->GetDeviceType());
@@ -1072,6 +1072,30 @@ void SGCoreImpl_FSGDeviceImpl_ToSenseGloveImplRef(
StaticCast<FSGIC_TSharedPtr_FSGDeviceImpl*>(Instance)->Ptr->ToSenseGloveImplRef();
}
bool SGCoreImpl_FSGDeviceImpl_IsABetaDevice(
void* Instance)
{
return StaticCast<FSGIC_TSharedPtr_FSGDeviceImpl*>(Instance)->Ptr->IsABetaDevice();
}
bool SGCoreImpl_FSGDeviceImpl_IsANova2Glove(
void* Instance)
{
return StaticCast<FSGIC_TSharedPtr_FSGDeviceImpl*>(Instance)->Ptr->IsANova2Glove();
}
bool SGCoreImpl_FSGDeviceImpl_IsANovaGlove(
void* Instance)
{
return StaticCast<FSGIC_TSharedPtr_FSGDeviceImpl*>(Instance)->Ptr->IsANovaGlove();
}
bool SGCoreImpl_FSGDeviceImpl_IsASenseGlove(
void* Instance)
{
return StaticCast<FSGIC_TSharedPtr_FSGDeviceImpl*>(Instance)->Ptr->IsASenseGlove();
}
void SGCoreImpl_FSGDeviceImpl_GetDeviceType(
void* Instance,
void* OutType)
@@ -166,6 +166,12 @@ public:
*/
TSharedRef<FSGSenseGloveImpl> ToSenseGloveImplRef();
public:
bool IsABetaDevice() const;
bool IsANova2Glove() const;
bool IsANovaGlove() const;
bool IsASenseGlove() const;
public:
virtual ESGDeviceType GetDeviceType() const;
@@ -553,6 +553,18 @@ SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_ToSenseGloveImplRef(
void* Instance,
void* OutSharedPtr);
SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsABetaDevice(
void* Instance);
SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsANova2Glove(
void* Instance);
SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsANovaGlove(
void* Instance);
SENSEGLOVECOREIMPL_PUBLIC_API bool SGCoreImpl_FSGDeviceImpl_IsASenseGlove(
void* Instance);
SENSEGLOVECOREIMPL_PUBLIC_API void SGCoreImpl_FSGDeviceImpl_GetDeviceType(
void* Instance,
void* OutType);