Merge pull request #11142 from BastiaanOlij/arvr_signal_id
Added ID to tracker signals and property for storing hand
This commit is contained in:
commit
88fd69c9bb
5 changed files with 46 additions and 5 deletions
|
@ -31,7 +31,6 @@
|
||||||
#include "arvr_nodes.h"
|
#include "arvr_nodes.h"
|
||||||
#include "core/os/input.h"
|
#include "core/os/input.h"
|
||||||
#include "servers/arvr/arvr_interface.h"
|
#include "servers/arvr/arvr_interface.h"
|
||||||
#include "servers/arvr/arvr_positional_tracker.h"
|
|
||||||
#include "servers/arvr_server.h"
|
#include "servers/arvr_server.h"
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -142,6 +141,7 @@ void ARVRController::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_joystick_axis", "axis"), &ARVRController::get_joystick_axis);
|
ClassDB::bind_method(D_METHOD("get_joystick_axis", "axis"), &ARVRController::get_joystick_axis);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_is_active"), &ARVRController::get_is_active);
|
ClassDB::bind_method(D_METHOD("get_is_active"), &ARVRController::get_is_active);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_hand"), &ARVRController::get_hand);
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("button_pressed", PropertyInfo(Variant::INT, "button")));
|
ADD_SIGNAL(MethodInfo("button_pressed", PropertyInfo(Variant::INT, "button")));
|
||||||
ADD_SIGNAL(MethodInfo("button_release", PropertyInfo(Variant::INT, "button")));
|
ADD_SIGNAL(MethodInfo("button_release", PropertyInfo(Variant::INT, "button")));
|
||||||
|
@ -204,6 +204,19 @@ bool ARVRController::get_is_active() const {
|
||||||
return is_active;
|
return is_active;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ARVRPositionalTracker::TrackerHand ARVRController::get_hand() const {
|
||||||
|
// get our ARVRServer
|
||||||
|
ARVRServer *arvr_server = ARVRServer::get_singleton();
|
||||||
|
ERR_FAIL_NULL_V(arvr_server, ARVRPositionalTracker::TRACKER_HAND_UNKNOWN);
|
||||||
|
|
||||||
|
ARVRPositionalTracker *tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, controller_id);
|
||||||
|
if (tracker == NULL) {
|
||||||
|
return ARVRPositionalTracker::TRACKER_HAND_UNKNOWN;
|
||||||
|
};
|
||||||
|
|
||||||
|
return tracker->get_hand();
|
||||||
|
};
|
||||||
|
|
||||||
String ARVRController::get_configuration_warning() const {
|
String ARVRController::get_configuration_warning() const {
|
||||||
if (!is_visible() || !is_inside_tree())
|
if (!is_visible() || !is_inside_tree())
|
||||||
return String();
|
return String();
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#include "scene/3d/camera.h"
|
#include "scene/3d/camera.h"
|
||||||
#include "scene/3d/spatial.h"
|
#include "scene/3d/spatial.h"
|
||||||
|
#include "servers/arvr/arvr_positional_tracker.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@author Bastiaan Olij <mux213@gmail.com>
|
@author Bastiaan Olij <mux213@gmail.com>
|
||||||
|
@ -84,6 +85,7 @@ public:
|
||||||
float get_joystick_axis(int p_axis) const;
|
float get_joystick_axis(int p_axis) const;
|
||||||
|
|
||||||
bool get_is_active() const;
|
bool get_is_active() const;
|
||||||
|
ARVRPositionalTracker::TrackerHand get_hand() const;
|
||||||
|
|
||||||
String get_configuration_warning() const;
|
String get_configuration_warning() const;
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,10 @@
|
||||||
#include "core/os/input.h"
|
#include "core/os/input.h"
|
||||||
|
|
||||||
void ARVRPositionalTracker::_bind_methods() {
|
void ARVRPositionalTracker::_bind_methods() {
|
||||||
|
BIND_ENUM_CONSTANT(TRACKER_HAND_UNKNOWN);
|
||||||
|
BIND_ENUM_CONSTANT(TRACKER_LEFT_HAND);
|
||||||
|
BIND_ENUM_CONSTANT(TRACKER_RIGHT_HAND);
|
||||||
|
|
||||||
// this class is read only from GDScript, so we only have access to getters..
|
// this class is read only from GDScript, so we only have access to getters..
|
||||||
ClassDB::bind_method(D_METHOD("get_type"), &ARVRPositionalTracker::get_type);
|
ClassDB::bind_method(D_METHOD("get_type"), &ARVRPositionalTracker::get_type);
|
||||||
ClassDB::bind_method(D_METHOD("get_name"), &ARVRPositionalTracker::get_name);
|
ClassDB::bind_method(D_METHOD("get_name"), &ARVRPositionalTracker::get_name);
|
||||||
|
@ -39,6 +43,7 @@ void ARVRPositionalTracker::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_orientation"), &ARVRPositionalTracker::get_orientation);
|
ClassDB::bind_method(D_METHOD("get_orientation"), &ARVRPositionalTracker::get_orientation);
|
||||||
ClassDB::bind_method(D_METHOD("get_tracks_position"), &ARVRPositionalTracker::get_tracks_position);
|
ClassDB::bind_method(D_METHOD("get_tracks_position"), &ARVRPositionalTracker::get_tracks_position);
|
||||||
ClassDB::bind_method(D_METHOD("get_position"), &ARVRPositionalTracker::get_position);
|
ClassDB::bind_method(D_METHOD("get_position"), &ARVRPositionalTracker::get_position);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_hand"), &ARVRPositionalTracker::get_hand);
|
||||||
ClassDB::bind_method(D_METHOD("get_transform", "adjust_by_reference_frame"), &ARVRPositionalTracker::get_transform);
|
ClassDB::bind_method(D_METHOD("get_transform", "adjust_by_reference_frame"), &ARVRPositionalTracker::get_transform);
|
||||||
|
|
||||||
// these functions we don't want to expose to normal users but do need to be callable from GDNative
|
// these functions we don't want to expose to normal users but do need to be callable from GDNative
|
||||||
|
@ -141,6 +146,14 @@ Vector3 ARVRPositionalTracker::get_rw_position() const {
|
||||||
return rw_position;
|
return rw_position;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ARVRPositionalTracker::TrackerHand ARVRPositionalTracker::get_hand() const {
|
||||||
|
return hand;
|
||||||
|
};
|
||||||
|
|
||||||
|
void ARVRPositionalTracker::set_hand(const ARVRPositionalTracker::TrackerHand p_hand) {
|
||||||
|
hand = p_hand;
|
||||||
|
};
|
||||||
|
|
||||||
Transform ARVRPositionalTracker::get_transform(bool p_adjust_by_reference_frame) const {
|
Transform ARVRPositionalTracker::get_transform(bool p_adjust_by_reference_frame) const {
|
||||||
Transform new_transform;
|
Transform new_transform;
|
||||||
|
|
||||||
|
@ -164,6 +177,7 @@ ARVRPositionalTracker::ARVRPositionalTracker() {
|
||||||
tracker_id = 0;
|
tracker_id = 0;
|
||||||
tracks_orientation = false;
|
tracks_orientation = false;
|
||||||
tracks_position = false;
|
tracks_position = false;
|
||||||
|
hand = TRACKER_HAND_UNKNOWN;
|
||||||
};
|
};
|
||||||
|
|
||||||
ARVRPositionalTracker::~ARVRPositionalTracker(){
|
ARVRPositionalTracker::~ARVRPositionalTracker(){
|
||||||
|
|
|
@ -48,6 +48,13 @@ class ARVRPositionalTracker : public Object {
|
||||||
GDCLASS(ARVRPositionalTracker, Object);
|
GDCLASS(ARVRPositionalTracker, Object);
|
||||||
_THREAD_SAFE_CLASS_
|
_THREAD_SAFE_CLASS_
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum TrackerHand {
|
||||||
|
TRACKER_HAND_UNKNOWN, /* unknown or not applicable */
|
||||||
|
TRACKER_LEFT_HAND, /* controller is the left hand controller */
|
||||||
|
TRACKER_RIGHT_HAND /* controller is the right hand controller */
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ARVRServer::TrackerType type; // type of tracker
|
ARVRServer::TrackerType type; // type of tracker
|
||||||
StringName name; // (unique) name of the tracker
|
StringName name; // (unique) name of the tracker
|
||||||
|
@ -57,6 +64,7 @@ private:
|
||||||
Basis orientation; // our orientation
|
Basis orientation; // our orientation
|
||||||
bool tracks_position; // do we track position?
|
bool tracks_position; // do we track position?
|
||||||
Vector3 rw_position; // our position "in the real world, so without world_scale applied"
|
Vector3 rw_position; // our position "in the real world, so without world_scale applied"
|
||||||
|
TrackerHand hand; // if known, the hand this tracker is held in
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
@ -77,6 +85,8 @@ public:
|
||||||
Vector3 get_position() const; // get position with world_scale applied
|
Vector3 get_position() const; // get position with world_scale applied
|
||||||
void set_rw_position(const Vector3 &p_rw_position);
|
void set_rw_position(const Vector3 &p_rw_position);
|
||||||
Vector3 get_rw_position() const;
|
Vector3 get_rw_position() const;
|
||||||
|
ARVRPositionalTracker::TrackerHand get_hand() const;
|
||||||
|
void set_hand(const ARVRPositionalTracker::TrackerHand p_hand);
|
||||||
|
|
||||||
Transform get_transform(bool p_adjust_by_reference_frame) const;
|
Transform get_transform(bool p_adjust_by_reference_frame) const;
|
||||||
|
|
||||||
|
@ -84,4 +94,6 @@ public:
|
||||||
~ARVRPositionalTracker();
|
~ARVRPositionalTracker();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
VARIANT_ENUM_CAST(ARVRPositionalTracker::TrackerHand);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -68,8 +68,8 @@ void ARVRServer::_bind_methods() {
|
||||||
ADD_SIGNAL(MethodInfo("interface_added", PropertyInfo(Variant::STRING, "name")));
|
ADD_SIGNAL(MethodInfo("interface_added", PropertyInfo(Variant::STRING, "name")));
|
||||||
ADD_SIGNAL(MethodInfo("interface_removed", PropertyInfo(Variant::STRING, "name")));
|
ADD_SIGNAL(MethodInfo("interface_removed", PropertyInfo(Variant::STRING, "name")));
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("tracker_added", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::INT, "type")));
|
ADD_SIGNAL(MethodInfo("tracker_added", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::INT, "type"), PropertyInfo(Variant::INT, "id")));
|
||||||
ADD_SIGNAL(MethodInfo("tracker_removed", PropertyInfo(Variant::STRING, "name")));
|
ADD_SIGNAL(MethodInfo("tracker_removed", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::INT, "type"), PropertyInfo(Variant::INT, "id")));
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t ARVRServer::get_world_scale() const {
|
real_t ARVRServer::get_world_scale() const {
|
||||||
|
@ -232,7 +232,7 @@ void ARVRServer::add_tracker(ARVRPositionalTracker *p_tracker) {
|
||||||
ERR_FAIL_NULL(p_tracker);
|
ERR_FAIL_NULL(p_tracker);
|
||||||
|
|
||||||
trackers.push_back(p_tracker);
|
trackers.push_back(p_tracker);
|
||||||
emit_signal("tracker_added", p_tracker->get_name(), p_tracker->get_type());
|
emit_signal("tracker_added", p_tracker->get_name(), p_tracker->get_type(), p_tracker->get_tracker_id());
|
||||||
};
|
};
|
||||||
|
|
||||||
void ARVRServer::remove_tracker(ARVRPositionalTracker *p_tracker) {
|
void ARVRServer::remove_tracker(ARVRPositionalTracker *p_tracker) {
|
||||||
|
@ -250,7 +250,7 @@ void ARVRServer::remove_tracker(ARVRPositionalTracker *p_tracker) {
|
||||||
|
|
||||||
ERR_FAIL_COND(idx == -1);
|
ERR_FAIL_COND(idx == -1);
|
||||||
|
|
||||||
emit_signal("tracker_removed", p_tracker->get_name());
|
emit_signal("tracker_removed", p_tracker->get_name(), p_tracker->get_type(), p_tracker->get_tracker_id());
|
||||||
trackers.remove(idx);
|
trackers.remove(idx);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue