controllers done i guess
This commit is contained in:
@@ -51,6 +51,7 @@ struct OpenXRAction
|
||||
XrAction m_action;
|
||||
XrActionType m_eType;
|
||||
XrSpace m_space;
|
||||
EXRInputType_t m_eUserInputType;
|
||||
};
|
||||
|
||||
class COpenXRController: public IXRController
|
||||
@@ -68,7 +69,7 @@ public:
|
||||
EXRControllerType_t m_type;
|
||||
EXRControllerSide_t m_side;
|
||||
CUtlVector<OpenXRAction> m_actions;
|
||||
XrActionSet m_actionSet;
|
||||
XrActionSet m_actionSet = XR_NULL_HANDLE;
|
||||
|
||||
XRInputCallbackFn m_callback = NULL;
|
||||
};
|
||||
@@ -97,9 +98,9 @@ public:
|
||||
XrSession m_session;
|
||||
XrSpace m_space;
|
||||
|
||||
CUtlVector<EyeSwapchain_t> m_eyeSwapchains;
|
||||
CUtlVector<XrCompositionLayerProjectionView> m_projviews;
|
||||
CUtlVector<XrView> m_views;
|
||||
CUtlVector<EyeSwapchain_t> m_eyeSwapchains = {};
|
||||
CUtlVector<XrCompositionLayerProjectionView> m_projviews = {};
|
||||
CUtlVector<XrView> m_views = {};
|
||||
float m_fPredictedTime;
|
||||
|
||||
COpenXRController *m_pLeftHand;
|
||||
@@ -177,7 +178,11 @@ void COpenXRController::Frame()
|
||||
XrActionStateBoolean b = {};
|
||||
b.type = XR_TYPE_ACTION_STATE_BOOLEAN;
|
||||
xrGetActionStateBoolean(m_pHeadset->m_session, &gi, &b);
|
||||
V_printf("%s %b\n", a.m_szName.GetString(), b.currentState);
|
||||
EXRInputValue_t v;
|
||||
v.type = k_EXRValue_Bool;
|
||||
v.b.value = b.currentState;
|
||||
if (m_callback)
|
||||
m_callback( this, a.m_eUserInputType, NULL, k_EXRInputAction_Value, v );
|
||||
break;
|
||||
}
|
||||
case XR_ACTION_TYPE_FLOAT_INPUT:
|
||||
@@ -188,7 +193,11 @@ void COpenXRController::Frame()
|
||||
XrActionStateFloat f32 = {};
|
||||
f32.type = XR_TYPE_ACTION_STATE_FLOAT;
|
||||
xrGetActionStateFloat(m_pHeadset->m_session, &gi, &f32);
|
||||
V_printf("%s %f\n", a.m_szName.GetString(), f32.currentState);
|
||||
EXRInputValue_t v;
|
||||
v.type = k_EXRValue_Float;
|
||||
v.f32.value = f32.currentState;
|
||||
if (m_callback)
|
||||
m_callback( this, a.m_eUserInputType, NULL, k_EXRInputAction_Value, v );
|
||||
break;
|
||||
}
|
||||
case XR_ACTION_TYPE_POSE_INPUT:
|
||||
@@ -208,8 +217,9 @@ void COpenXRController::Frame()
|
||||
EXRInputValue_t v;
|
||||
v.type = k_EXRValue_Pose;
|
||||
v.pose.pos = {s.pose.position.x, s.pose.position.y, s.pose.position.z};
|
||||
v.pose.rot = {s.pose.orientation.x, s.pose.orientation.y, s.pose.orientation.z, s.pose.orientation.w};
|
||||
if (m_callback)
|
||||
m_callback( this, k_EXRInput_Grip, NULL, k_EXRInputAction_Pose, v );
|
||||
m_callback( this, a.m_eUserInputType, NULL, k_EXRInputAction_Pose, v );
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -247,6 +257,82 @@ void COpenXRController::ConfigureActionSets( const char *szDevice, const char *s
|
||||
{
|
||||
IJSONValue *pInput = (*pInputs)[i];
|
||||
CUtlString szInputName = (*pInput)["name"]->GetStringValue();
|
||||
EXRInputType_t eInputType = k_EXRInput_FromString;
|
||||
if (szInputName == "trackpad")
|
||||
eInputType = k_EXRInput_Trackpad;
|
||||
if (szInputName == "thumbstick")
|
||||
eInputType = k_EXRInput_Thumbstick;
|
||||
if (szInputName == "joystick")
|
||||
eInputType = k_EXRInput_Joystick;
|
||||
if (szInputName == "trigger")
|
||||
eInputType = k_EXRInput_Trigger;
|
||||
if (szInputName == "throttle")
|
||||
eInputType = k_EXRInput_Throttle;
|
||||
if (szInputName == "trackball")
|
||||
eInputType = k_EXRInput_Trackball;
|
||||
if (szInputName == "pedal")
|
||||
eInputType = k_EXRInput_Pedal;
|
||||
if (szInputName == "system")
|
||||
eInputType = k_EXRInput_System;
|
||||
if (szInputName == "dpad_up")
|
||||
eInputType = k_EXRInput_Dpad_Up;
|
||||
if (szInputName == "dpad_down")
|
||||
eInputType = k_EXRInput_Dpad_Down;
|
||||
if (szInputName == "dpad_left")
|
||||
eInputType = k_EXRInput_Dpad_Left;
|
||||
if (szInputName == "dpad_right")
|
||||
eInputType = k_EXRInput_Dpad_Right;
|
||||
if (szInputName == "diamond_up")
|
||||
eInputType = k_EXRInput_Diamond_Up;
|
||||
if (szInputName == "diamond_down")
|
||||
eInputType = k_EXRInput_Diamond_Down;
|
||||
if (szInputName == "diamond_left")
|
||||
eInputType = k_EXRInput_Diamond_Left;
|
||||
if (szInputName == "diamond_right")
|
||||
eInputType = k_EXRInput_Diamond_Right;
|
||||
if (szInputName == "a")
|
||||
eInputType = k_EXRInput_A;
|
||||
if (szInputName == "b")
|
||||
eInputType = k_EXRInput_B;
|
||||
if (szInputName == "x")
|
||||
eInputType = k_EXRInput_X;
|
||||
if (szInputName == "y")
|
||||
eInputType = k_EXRInput_Y;
|
||||
if (szInputName == "start")
|
||||
eInputType = k_EXRInput_Start;
|
||||
if (szInputName == "home")
|
||||
eInputType = k_EXRInput_Home;
|
||||
if (szInputName == "end")
|
||||
eInputType = k_EXRInput_End;
|
||||
if (szInputName == "select")
|
||||
eInputType = k_EXRInput_Select;
|
||||
if (szInputName == "volume_up")
|
||||
eInputType = k_EXRInput_Volume_Up;
|
||||
if (szInputName == "volume_down")
|
||||
eInputType = k_EXRInput_Volume_Down;
|
||||
if (szInputName == "mute_mic")
|
||||
eInputType = k_EXRInput_Mute_Mic;
|
||||
if (szInputName == "play_pause")
|
||||
eInputType = k_EXRInput_Play_Pause;
|
||||
if (szInputName == "menu")
|
||||
eInputType = k_EXRInput_Menu;
|
||||
if (szInputName == "view")
|
||||
eInputType = k_EXRInput_View;
|
||||
if (szInputName == "back")
|
||||
eInputType = k_EXRInput_Back;
|
||||
if (szInputName == "thumbrest")
|
||||
eInputType = k_EXRInput_ThumbRest;
|
||||
if (szInputName == "shoulder")
|
||||
eInputType = k_EXRInput_Shoulder;
|
||||
if (szInputName == "squeeze")
|
||||
eInputType = k_EXRInput_Squeeze;
|
||||
if (szInputName == "wheel")
|
||||
eInputType = k_EXRInput_Wheel;
|
||||
if (szInputName == "grip")
|
||||
eInputType = k_EXRInput_Grip;
|
||||
if (szInputName == "aim")
|
||||
eInputType = k_EXRInput_Aim;
|
||||
|
||||
|
||||
IJSONValue *pActions = (*pInput)["actions"];
|
||||
for (uint32_t y = 0; y < pActions->GetArray()->GetCount(); y++ )
|
||||
@@ -284,6 +370,7 @@ void COpenXRController::ConfigureActionSets( const char *szDevice, const char *s
|
||||
action.m_szName = szName;
|
||||
action.m_action = a;
|
||||
action.m_eType = eType;
|
||||
action.m_eUserInputType = eInputType;
|
||||
if (eType == XR_ACTION_TYPE_POSE_INPUT)
|
||||
{
|
||||
XrActionSpaceCreateInfo asci = {};
|
||||
@@ -666,7 +753,7 @@ formatPicked:
|
||||
if (!V_strcmp(c, "/user/hand/right"))
|
||||
{
|
||||
m_pRightHand = new COpenXRController;
|
||||
m_pRightHand->m_side = k_EXRController_Left;
|
||||
m_pRightHand->m_side = k_EXRController_Right;
|
||||
m_pRightHand->m_pHeadset = this;
|
||||
for ( auto &p: s_interactionProfiles )
|
||||
if (s == p.m_szName)
|
||||
|
||||
Reference in New Issue
Block a user