forked from maxvollmer/Half-Life-VR
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Mvivant edited this page Oct 26, 2017
·
2 revisions
Welcome to the Half-Life-VR 3dRudder wiki!
- vr_helper.h
#define _3DRUDDER_SDK_STATIC
#include "3dRudderSDK\Include\3dRudderSDK.h"
...
ns3dRudder::CSdk* pSdk = nullptr;
float vrangle = 0;
- vr_helper.cpp
void VRHelper::Init()
{
// Init the 3dRudder SDK
pSdk = ns3dRudder::GetSDK();
pSdk->Init();
...
}
void VRHelper::Exit(const char* lpErrorMessage)
{
...
// Free 3dRudder SDK
if (pSdk != nullptr)
ns3dRudder::EndSDK();
pSdk = nullptr;
}
void VRHelper::Update3dRudder(double time)
{
// Create linear curves
ns3dRudder::CurveArray curves;
curves.InitLinear();
ns3dRudder::Axis axis;
float deadzone = 0.1f;
// At least one 3dRudder connected
if (pSdk->IsDeviceConnected(0))
{
ns3dRudder::Status status = pSdk->GetStatus(0);
// 3dRudder is not in calibration
if (status == ns3dRudder::InUse || status == ns3dRudder::ExtendedMode)
{
ns3dRudder::ErrorCode res = pSdk->GetAxis(0, ns3dRudder::ValueWithCurveNonSymmetricalPitch, &axis, &curves);
if (res == ns3dRudder::Success)
{
if (axis.GetXAxis() < -deadzone) // Roll Left
ClientCmd("+moveleft");
else
ClientCmd("-moveleft");
if (axis.GetXAxis() > deadzone) // Roll Right
ClientCmd("+moveright");
else
ClientCmd("-moveright");
if (axis.GetYAxis() > deadzone) // Pitch forward
ClientCmd("+forward");
else
ClientCmd("-forward");
if (axis.GetYAxis() < -deadzone) // Pitch backward
ClientCmd("+back");
else
ClientCmd("-back");
float speed = gEngfuncs.pfnGetCvarFloat("cl_yawspeed");
if (speed == 0)
speed = 1;
vrangle += speed * time * axis.GetZRotation(); // Rotation Yaw
}
}
}
}
...
void VRHelper::UpdateGunPosition(struct ref_params_s* pparams)
{
// Transform the position of controller with the rotation of 3dRudder
Vector controllerFromPlayer;
float angle = DEG2RAD * -vrangle;
controllerFromPlayer.x = (originInRelativeHLSpace.x * cos(angle)) - (originInRelativeHLSpace.y * sin(angle));
controllerFromPlayer.y = (originInRelativeHLSpace.x * sin(angle)) + (originInRelativeHLSpace.y * cos(angle));
controllerFromPlayer.z = originInRelativeHLSpace.z;
// apply new position
Vector originInHLSpace = clientGroundPosition + controllerFromPlayer;
...
viewent->angles = GetHLAnglesFromVRMatrix(controllerAbsoluteTrackingMatrix);
// apply new rotation
viewent->angles.y -= vrangle;
}
- vr_renderer.cpp
void VRRenderer::Frame(double time)
{
...
// Poll event of SteamVR
vrHelper->PollEvents();
// Get axis of 3dRudder and send command to player
vrHelper->Update3dRudder(time);
}