File quest_controller.hpp
File List > data_format > quest_controller.hpp
Go to the documentation of this file
#pragma once
#include "illixr/data_format/poses/pose_base.hpp"
#include "illixr/switchboard.hpp"
#include
#include
namespace ILLIXR::data_format {
enum class quest_controller_profile : std::uint8_t {
none,
simple_controller,
oculus_touch,
htc_vive,
valve_index,
microsoft_motion,
unknown,
};
struct quest_controller_pose : public pose::pose_base {
#ifdef USING_OPENXR
quest_controller_pose() {
orientation.w = 1.0F;
}
#endif
bool active{false};
bool position_valid{false};
bool orientation_valid{false};
bool position_tracked{false};
bool orientation_tracked{false};
[[nodiscard]] bool valid() const {
return active && position_valid && orientation_valid;
}
[[nodiscard]] bool tracked() const {
return active && position_tracked && orientation_tracked;
}
};
struct quest_controller_button {
bool active{false};
bool pressed{false};
bool changed_since_last_sync{false};
float value{0.0F};
std::int64_t last_change_time{0};
};
struct quest_controller_axis2d {
bool active{false};
bool changed_since_last_sync{false};
Eigen::Vector2f value{Eigen::Vector2f::Zero()};
std::int64_t last_change_time{0};
};
struct quest_hand_controller {
bool available{false};
quest_controller_profile interaction_profile{quest_controller_profile::none};
quest_controller_pose grip_pose;
quest_controller_pose aim_pose;
quest_controller_button trigger;
quest_controller_button squeeze;
quest_controller_button primary;
quest_controller_button secondary;
quest_controller_button thumbstick_click;
quest_controller_axis2d thumbstick;
[[nodiscard]] bool tracked() const {
return grip_pose.tracked() || aim_pose.tracked();
}
};
struct quest_controller_input : public switchboard::event {
std::uint64_t sequence{0};
time_point sample_time{};
std::int64_t xr_sample_time{0};
quest_hand_controller left;
quest_hand_controller right;
};
} // namespace ILLIXR::data_format