mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-26 15:44:46 +00:00
162 lines
3.6 KiB
C++
162 lines
3.6 KiB
C++
#include "platform/input/openVR/openVROverlay.h"
|
|
|
|
ImplementEnumType(OpenVROverlayType,
|
|
"Desired overlay type for OpenVROverlay. .\n\n"
|
|
"@ingroup OpenVR")
|
|
{ OpenVROverlay::OVERLAYTYPE_OVERLAY, "Overlay" },
|
|
{ OpenVROverlay::OVERLAYTYPE_DASHBOARD, "Dashboard" },
|
|
EndImplementEnumType;
|
|
|
|
OpenVROverlay::OpenVROverlay()
|
|
{
|
|
|
|
}
|
|
|
|
OpenVROverlay::~OpenVROverlay()
|
|
{
|
|
|
|
}
|
|
|
|
void OpenVROverlay::initPersistFields()
|
|
{
|
|
Parent::initPersistFields();
|
|
}
|
|
|
|
bool OpenVROverlay::onAdd()
|
|
{
|
|
if (Parent::onAdd())
|
|
{
|
|
mOverlayTypeDirty = true;
|
|
mOverlayDirty = true;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void OpenVROverlay::onRemove()
|
|
{
|
|
if (mOverlayHandle)
|
|
{
|
|
vr::VROverlay()->DestroyOverlay(mOverlayHandle);
|
|
mOverlayHandle = NULL;
|
|
}
|
|
}
|
|
|
|
void OpenVROverlay::resetOverlay()
|
|
{
|
|
mOverlayTypeDirty = false;
|
|
}
|
|
|
|
void OpenVROverlay::updateOverlay()
|
|
{
|
|
if (mOverlayTypeDirty)
|
|
resetOverlay();
|
|
|
|
// Update params TODO
|
|
mOverlayDirty = false;
|
|
}
|
|
|
|
void OpenVROverlay::showOverlay()
|
|
{
|
|
if (mOverlayHandle == NULL)
|
|
return;
|
|
|
|
vr::VROverlay()->ShowOverlay(mOverlayHandle);
|
|
}
|
|
|
|
void OpenVROverlay::hideOverlay()
|
|
{
|
|
if (mOverlayHandle == NULL)
|
|
return;
|
|
|
|
vr::VROverlay()->HideOverlay(mOverlayHandle);
|
|
}
|
|
|
|
|
|
bool OpenVROverlay::isOverlayVisible()
|
|
{
|
|
if (mOverlayHandle == NULL)
|
|
return false;
|
|
|
|
return vr::VROverlay()->IsOverlayVisible(mOverlayHandle);
|
|
}
|
|
|
|
bool OpenVROverlay::isOverlayHoverTarget()
|
|
{
|
|
if (mOverlayHandle == NULL)
|
|
return false;
|
|
|
|
return vr::VROverlay()->IsHoverTargetOverlay(mOverlayHandle);
|
|
}
|
|
|
|
|
|
bool OpenVROverlay::isGamepadFocussed()
|
|
{
|
|
if (mOverlayHandle == NULL)
|
|
return false;
|
|
|
|
return vr::VROverlay()->GetGamepadFocusOverlay() == mOverlayHandle;
|
|
}
|
|
|
|
bool OpenVROverlay::isActiveDashboardOverlay()
|
|
{
|
|
return false; // TODO WHERE DID I GET THIS FROM
|
|
}
|
|
|
|
MatrixF OpenVROverlay::getTransformForOverlayCoordinates(const vr::ETrackingUniverseOrigin trackingOrigin, const Point2F &pos)
|
|
{
|
|
if (mOverlayHandle == NULL)
|
|
return MatrixF::Identity;
|
|
|
|
vr::HmdVector2_t vec;
|
|
vec.v[0] = pos.x;
|
|
vec.v[1] = pos.y;
|
|
vr::HmdMatrix34_t outMat;
|
|
MatrixF outTorqueMat;
|
|
if (vr::VROverlay()->GetTransformForOverlayCoordinates(mOverlayHandle, trackingOrigin, vec, &outMat) != vr::VROverlayError_None)
|
|
return MatrixF::Identity;
|
|
|
|
MatrixF vrMat(1);
|
|
vrMat = OpenVRUtil::convertSteamVRAffineMatrixToMatrixFPlain(outMat);
|
|
OpenVRUtil::convertTransformFromOVR(vrMat, outTorqueMat);
|
|
return outTorqueMat;
|
|
}
|
|
|
|
bool OpenVROverlay::castRay(const vr::ETrackingUniverseOrigin trackingOrigin, const Point3F &origin, const Point3F &direction, RayInfo *info)
|
|
{
|
|
if (mOverlayHandle == NULL)
|
|
return false;
|
|
|
|
vr::VROverlayIntersectionParams_t params;
|
|
vr::VROverlayIntersectionResults_t result;
|
|
|
|
params.eOrigin = trackingOrigin;
|
|
params.vSource.v[0] = origin.x;
|
|
params.vSource.v[1] = origin.y;
|
|
params.vSource.v[2] = origin.z;
|
|
params.vDirection.v[0] = direction.x; // TODO: need to transform this to vr-space
|
|
params.vDirection.v[1] = direction.y;
|
|
params.vDirection.v[2] = direction.z;
|
|
|
|
bool rayHit = vr::VROverlay()->ComputeOverlayIntersection(mOverlayHandle, ¶ms, &result);
|
|
|
|
if (rayHit && info)
|
|
{
|
|
info->t = result.fDistance;
|
|
info->point = Point3F(result.vPoint.v[0], result.vPoint.v[1], result.vPoint.v[2]); // TODO: need to transform this FROM vr-space
|
|
info->normal = Point3F(result.vNormal.v[0], result.vNormal.v[1], result.vNormal.v[2]);
|
|
info->texCoord = Point2F(result.vUVs.v[0], result.vUVs.v[1]);
|
|
info->object = NULL;
|
|
info->userData = this;
|
|
}
|
|
|
|
return rayHit;
|
|
}
|
|
|
|
void OpenVROverlay::moveGamepadFocusToNeighbour()
|
|
{
|
|
|
|
}
|
|
|