toggle edit mode

This commit is contained in:
Crispy 2023-04-22 19:21:31 +02:00
parent 533bf45087
commit 1134e37b10
5 changed files with 700 additions and 50 deletions

View file

@ -57,11 +57,13 @@ App::App()
printf("actions path: %s\n", _actions_path.c_str());
vr_input->SetActionManifestPath(_actions_path.c_str());
auto action_err = vr_input->GetActionHandle("/actions/main/in/Grab", &_input_handles.grab);
auto action_err = vr_input->GetActionHandle("/actions/main/in/grab", &_input_handles.grab);
assert(action_err == 0);
action_err = vr_input->GetActionHandle("/actions/main/in/ToggleAll", &_input_handles.toggle);
action_err = vr_input->GetActionHandle("/actions/main/in/toggle_visibility", &_input_handles.toggle_hidden);
assert(action_err == 0);
action_err = vr_input->GetActionHandle("/actions/main/in/Distance", &_input_handles.distance);
action_err = vr_input->GetActionHandle("/actions/main/in/edit_mode", &_input_handles.edit_mode);
assert(action_err == 0);
action_err = vr_input->GetActionHandle("/actions/main/in/distance", &_input_handles.distance);
assert(action_err == 0);
action_err = vr_input->GetActionSetHandle("/actions/main", &_input_handles.set);
assert(action_err == 0);
@ -162,19 +164,29 @@ void App::UpdateInput()
vr_sys->GetDeviceToAbsoluteTrackingPose(_tracking_origin, 0, _tracker_poses, MAX_TRACKERS);
if (IsInputJustPressed(_input_handles.toggle))
if (IsInputJustPressed(_input_handles.toggle_hidden))
{
_hidden = !_hidden;
_root_overlay.SetHidden(_hidden);
for (auto &panel : _panels)
{
panel.SetHidden(_hidden);
}
_controllers[0]->SetHidden(_hidden);
_controllers[1]->SetHidden(_hidden);
_root_overlay.SetHidden(_hidden || !_edit_mode);
_controllers[0]->SetHidden(_hidden || !_edit_mode);
_controllers[1]->SetHidden(_hidden || !_edit_mode);
}
if (!_hidden && IsInputJustPressed(_input_handles.edit_mode))
{
_edit_mode = !_edit_mode;
_root_overlay.SetHidden(_hidden || !_edit_mode);
_controllers[0]->SetHidden(_hidden || !_edit_mode);
_controllers[1]->SetHidden(_hidden || !_edit_mode);
}
if (_edit_mode)
{
_controllers[0]->Update();
_controllers[1]->Update();
}
_controllers[0]->Update();
_controllers[1]->Update();
}
void App::UpdateFramebuffer()

View file

@ -19,9 +19,10 @@ struct CursorPos
struct InputHandles
{
vr::VRActionSetHandle_t set;
vr::VRActionHandle_t toggle;
vr::VRActionHandle_t toggle_hidden;
vr::VRActionHandle_t distance;
vr::VRActionHandle_t grab;
vr::VRActionHandle_t edit_mode;
};
class App
@ -63,6 +64,7 @@ class App
Overlay _root_overlay;
std::vector<Panel> _panels;
bool _hidden = false;
bool _edit_mode = false;
private:
void InitX11();

View file

@ -25,6 +25,7 @@ Controller::Controller(App *app, ControllerSide side)
UpdateStatus();
_laser.SetTextureToColor(255, 200, 255);
_laser.SetAlpha(0.2f);
_laser.SetHidden(true);
}
TrackerID Controller::DeviceIndex()
@ -50,6 +51,7 @@ bool Controller::IsConnected()
void Controller::SetHidden(bool state)
{
_hidden = state;
_laser.SetHidden(_hidden);
}
void Controller::ReleaseOverlay()
@ -94,7 +96,7 @@ void Controller::UpdateLaser()
auto controller_pose = _app->GetTrackerPose(_device_index);
auto controller_pos = GetPos(controller_pose);
auto forward = -glm::vec3(controller_pose[2]);
auto ray = _app->IntersectRay(controller_pos, forward, 5.0f);
auto ray = _app->IntersectRay(controller_pos, forward, 8.0f);
float len = ray.distance;
_last_pos = controller_pos;
@ -143,5 +145,8 @@ void Controller::UpdateStatus()
_device_index = _app->vr_sys->GetTrackedDeviceIndexForControllerRole(vr::TrackedControllerRole_RightHand);
}
_is_connected &= _device_index < MAX_TRACKERS;
_laser.SetHidden(!_is_connected || _hidden);
if (!_is_connected)
{
_laser.SetHidden(true);
}
}