Reserved controller ids 1 and 2 for left and right hand controllers and added new center on hmd option
This commit is contained in:
@ -43,7 +43,7 @@ void ARVRServer::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("get_world_scale"), &ARVRServer::get_world_scale);
|
||||
ClassDB::bind_method(D_METHOD("set_world_scale"), &ARVRServer::set_world_scale);
|
||||
ClassDB::bind_method(D_METHOD("get_reference_frame"), &ARVRServer::get_reference_frame);
|
||||
ClassDB::bind_method(D_METHOD("center_on_hmd", "ignore_tilt", "keep_height"), &ARVRServer::center_on_hmd);
|
||||
ClassDB::bind_method(D_METHOD("center_on_hmd", "rotation_mode", "keep_height"), &ARVRServer::center_on_hmd);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "world_scale"), "set_world_scale", "get_world_scale");
|
||||
|
||||
@ -63,6 +63,10 @@ void ARVRServer::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(TRACKER_UNKNOWN);
|
||||
BIND_ENUM_CONSTANT(TRACKER_ANY);
|
||||
|
||||
BIND_ENUM_CONSTANT(RESET_FULL_ROTATION);
|
||||
BIND_ENUM_CONSTANT(RESET_BUT_KEEP_TILT);
|
||||
BIND_ENUM_CONSTANT(DONT_RESET_ROTATION);
|
||||
|
||||
ADD_SIGNAL(MethodInfo("interface_added", PropertyInfo(Variant::STRING, "name")));
|
||||
ADD_SIGNAL(MethodInfo("interface_removed", PropertyInfo(Variant::STRING, "name")));
|
||||
|
||||
@ -96,7 +100,7 @@ Transform ARVRServer::get_reference_frame() const {
|
||||
return reference_frame;
|
||||
};
|
||||
|
||||
void ARVRServer::center_on_hmd(bool p_ignore_tilt, bool p_keep_height) {
|
||||
void ARVRServer::center_on_hmd(RotationMode p_rotation_mode, bool p_keep_height) {
|
||||
if (primary_interface != NULL) {
|
||||
// clear our current reference frame or we'll end up double adjusting it
|
||||
reference_frame = Transform();
|
||||
@ -105,7 +109,7 @@ void ARVRServer::center_on_hmd(bool p_ignore_tilt, bool p_keep_height) {
|
||||
Transform new_reference_frame = primary_interface->get_transform_for_eye(ARVRInterface::EYE_MONO, Transform());
|
||||
|
||||
// remove our tilt
|
||||
if (p_ignore_tilt) {
|
||||
if (p_rotation_mode == 1) {
|
||||
// take the Y out of our Z
|
||||
new_reference_frame.basis.set_axis(2, Vector3(new_reference_frame.basis.elements[0][2], 0.0, new_reference_frame.basis.elements[2][2]).normalized());
|
||||
|
||||
@ -114,6 +118,9 @@ void ARVRServer::center_on_hmd(bool p_ignore_tilt, bool p_keep_height) {
|
||||
|
||||
// and X is our cross reference
|
||||
new_reference_frame.basis.set_axis(0, new_reference_frame.basis.get_axis(1).cross(new_reference_frame.basis.get_axis(2)).normalized());
|
||||
} else if (p_rotation_mode == 2) {
|
||||
// remove our rotation, we're only interesting in centering on position
|
||||
new_reference_frame.basis = Basis();
|
||||
};
|
||||
|
||||
// don't negate our height
|
||||
@ -229,8 +236,12 @@ bool ARVRServer::is_tracker_id_in_use_for_type(TrackerType p_tracker_type, int p
|
||||
};
|
||||
|
||||
int ARVRServer::get_free_tracker_id_for_type(TrackerType p_tracker_type) {
|
||||
// we start checking at 1, 0 means that it's not a controller..
|
||||
int tracker_id = 1;
|
||||
// We start checking at 1, 0 means that it's not a controller..
|
||||
// Note that for controller we reserve:
|
||||
// - 1 for the left hand controller and
|
||||
// - 2 for the right hand controller
|
||||
// so we start at 3 :)
|
||||
int tracker_id = p_tracker_type == ARVRServer::TRACKER_CONTROLLER ? 3 : 1;
|
||||
|
||||
while (is_tracker_id_in_use_for_type(p_tracker_type, tracker_id)) {
|
||||
// try the next one
|
||||
|
||||
Reference in New Issue
Block a user