mirror of
https://github.com/godotengine/godot.git
synced 2024-11-23 04:33:29 +00:00
Merge pull request #12557 from BastiaanOlij/arvr_add_rumble_support
Adding rumble support to ARVR controllers
This commit is contained in:
commit
25c38c7542
@ -5316,6 +5316,13 @@
|
|||||||
["godot_real", "p_value"],
|
["godot_real", "p_value"],
|
||||||
["godot_bool", "p_can_be_negative"]
|
["godot_bool", "p_can_be_negative"]
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "godot_arvr_get_controller_rumble",
|
||||||
|
"return_type": "godot_real",
|
||||||
|
"arguments": [
|
||||||
|
["godot_int", "p_controller_id"]
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,7 @@ void GDAPI godot_arvr_remove_controller(godot_int p_controller_id);
|
|||||||
void GDAPI godot_arvr_set_controller_transform(godot_int p_controller_id, godot_transform *p_transform, godot_bool p_tracks_orientation, godot_bool p_tracks_position);
|
void GDAPI godot_arvr_set_controller_transform(godot_int p_controller_id, godot_transform *p_transform, godot_bool p_tracks_orientation, godot_bool p_tracks_position);
|
||||||
void GDAPI godot_arvr_set_controller_button(godot_int p_controller_id, godot_int p_button, godot_bool p_is_pressed);
|
void GDAPI godot_arvr_set_controller_button(godot_int p_controller_id, godot_int p_button, godot_bool p_is_pressed);
|
||||||
void GDAPI godot_arvr_set_controller_axis(godot_int p_controller_id, godot_int p_axis, godot_real p_value, godot_bool p_can_be_negative);
|
void GDAPI godot_arvr_set_controller_axis(godot_int p_controller_id, godot_int p_axis, godot_real p_value, godot_bool p_can_be_negative);
|
||||||
|
godot_real GDAPI godot_arvr_get_controller_rumble(godot_int p_controller_id);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -383,4 +383,16 @@ void GDAPI godot_arvr_set_controller_axis(godot_int p_controller_id, godot_int p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
godot_real GDAPI godot_arvr_get_controller_rumble(godot_int p_controller_id) {
|
||||||
|
ARVRServer *arvr_server = ARVRServer::get_singleton();
|
||||||
|
ERR_FAIL_NULL_V(arvr_server, 0.0);
|
||||||
|
|
||||||
|
ARVRPositionalTracker *tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, p_controller_id);
|
||||||
|
if (tracker != NULL) {
|
||||||
|
return tracker->get_rumble();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ void ARVRController::_notification(int p_what) {
|
|||||||
void ARVRController::_bind_methods() {
|
void ARVRController::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_controller_id", "controller_id"), &ARVRController::set_controller_id);
|
ClassDB::bind_method(D_METHOD("set_controller_id", "controller_id"), &ARVRController::set_controller_id);
|
||||||
ClassDB::bind_method(D_METHOD("get_controller_id"), &ARVRController::get_controller_id);
|
ClassDB::bind_method(D_METHOD("get_controller_id"), &ARVRController::get_controller_id);
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "controller_id"), "set_controller_id", "get_controller_id");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "controller_id", PROPERTY_HINT_RANGE, "1,32,1"), "set_controller_id", "get_controller_id");
|
||||||
ClassDB::bind_method(D_METHOD("get_controller_name"), &ARVRController::get_controller_name);
|
ClassDB::bind_method(D_METHOD("get_controller_name"), &ARVRController::get_controller_name);
|
||||||
|
|
||||||
// passthroughs to information about our related joystick
|
// passthroughs to information about our related joystick
|
||||||
@ -242,6 +242,10 @@ void ARVRController::_bind_methods() {
|
|||||||
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);
|
ClassDB::bind_method(D_METHOD("get_hand"), &ARVRController::get_hand);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_rumble"), &ARVRController::get_rumble);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_rumble", "rumble"), &ARVRController::set_rumble);
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "rumble", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"), "set_rumble", "get_rumble");
|
||||||
|
|
||||||
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")));
|
||||||
};
|
};
|
||||||
@ -299,6 +303,30 @@ float ARVRController::get_joystick_axis(int p_axis) const {
|
|||||||
return Input::get_singleton()->get_joy_axis(joy_id, p_axis);
|
return Input::get_singleton()->get_joy_axis(joy_id, p_axis);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
real_t ARVRController::get_rumble() const {
|
||||||
|
// get our ARVRServer
|
||||||
|
ARVRServer *arvr_server = ARVRServer::get_singleton();
|
||||||
|
ERR_FAIL_NULL_V(arvr_server, 0.0);
|
||||||
|
|
||||||
|
ARVRPositionalTracker *tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, controller_id);
|
||||||
|
if (tracker == NULL) {
|
||||||
|
return 0.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
return tracker->get_rumble();
|
||||||
|
};
|
||||||
|
|
||||||
|
void ARVRController::set_rumble(real_t p_rumble) {
|
||||||
|
// get our ARVRServer
|
||||||
|
ARVRServer *arvr_server = ARVRServer::get_singleton();
|
||||||
|
ERR_FAIL_NULL(arvr_server);
|
||||||
|
|
||||||
|
ARVRPositionalTracker *tracker = arvr_server->find_by_type_and_id(ARVRServer::TRACKER_CONTROLLER, controller_id);
|
||||||
|
if (tracker != NULL) {
|
||||||
|
tracker->set_rumble(p_rumble);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
bool ARVRController::get_is_active() const {
|
bool ARVRController::get_is_active() const {
|
||||||
return is_active;
|
return is_active;
|
||||||
};
|
};
|
||||||
|
@ -89,6 +89,9 @@ public:
|
|||||||
int is_button_pressed(int p_button) const;
|
int is_button_pressed(int p_button) const;
|
||||||
float get_joystick_axis(int p_axis) const;
|
float get_joystick_axis(int p_axis) const;
|
||||||
|
|
||||||
|
real_t get_rumble() const;
|
||||||
|
void set_rumble(real_t p_rumble);
|
||||||
|
|
||||||
bool get_is_active() const;
|
bool get_is_active() const;
|
||||||
ARVRPositionalTracker::TrackerHand get_hand() const;
|
ARVRPositionalTracker::TrackerHand get_hand() const;
|
||||||
|
|
||||||
|
@ -52,6 +52,11 @@ void ARVRPositionalTracker::_bind_methods() {
|
|||||||
ClassDB::bind_method(D_METHOD("_set_joy_id", "joy_id"), &ARVRPositionalTracker::set_joy_id);
|
ClassDB::bind_method(D_METHOD("_set_joy_id", "joy_id"), &ARVRPositionalTracker::set_joy_id);
|
||||||
ClassDB::bind_method(D_METHOD("_set_orientation", "orientation"), &ARVRPositionalTracker::set_orientation);
|
ClassDB::bind_method(D_METHOD("_set_orientation", "orientation"), &ARVRPositionalTracker::set_orientation);
|
||||||
ClassDB::bind_method(D_METHOD("_set_rw_position", "rw_position"), &ARVRPositionalTracker::set_rw_position);
|
ClassDB::bind_method(D_METHOD("_set_rw_position", "rw_position"), &ARVRPositionalTracker::set_rw_position);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_rumble"), &ARVRPositionalTracker::get_rumble);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_rumble", "rumble"), &ARVRPositionalTracker::set_rumble);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "rumble"), "set_rumble", "get_rumble");
|
||||||
};
|
};
|
||||||
|
|
||||||
void ARVRPositionalTracker::set_type(ARVRServer::TrackerType p_type) {
|
void ARVRPositionalTracker::set_type(ARVRServer::TrackerType p_type) {
|
||||||
@ -170,6 +175,18 @@ Transform ARVRPositionalTracker::get_transform(bool p_adjust_by_reference_frame)
|
|||||||
return new_transform;
|
return new_transform;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
real_t ARVRPositionalTracker::get_rumble() const {
|
||||||
|
return rumble;
|
||||||
|
};
|
||||||
|
|
||||||
|
void ARVRPositionalTracker::set_rumble(real_t p_rumble) {
|
||||||
|
if (p_rumble > 0.0) {
|
||||||
|
rumble = p_rumble;
|
||||||
|
} else {
|
||||||
|
rumble = 0.0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
ARVRPositionalTracker::ARVRPositionalTracker() {
|
ARVRPositionalTracker::ARVRPositionalTracker() {
|
||||||
type = ARVRServer::TRACKER_UNKNOWN;
|
type = ARVRServer::TRACKER_UNKNOWN;
|
||||||
name = "Unknown";
|
name = "Unknown";
|
||||||
@ -178,6 +195,7 @@ ARVRPositionalTracker::ARVRPositionalTracker() {
|
|||||||
tracks_orientation = false;
|
tracks_orientation = false;
|
||||||
tracks_position = false;
|
tracks_position = false;
|
||||||
hand = TRACKER_HAND_UNKNOWN;
|
hand = TRACKER_HAND_UNKNOWN;
|
||||||
|
rumble = 0.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
ARVRPositionalTracker::~ARVRPositionalTracker(){
|
ARVRPositionalTracker::~ARVRPositionalTracker(){
|
||||||
|
@ -65,6 +65,7 @@ private:
|
|||||||
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
|
TrackerHand hand; // if known, the hand this tracker is held in
|
||||||
|
real_t rumble; // rumble strength, 0.0 is off, 1.0 is maximum, note that we only record here, arvr_interface is responsible for execution
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
@ -87,6 +88,8 @@ public:
|
|||||||
Vector3 get_rw_position() const;
|
Vector3 get_rw_position() const;
|
||||||
ARVRPositionalTracker::TrackerHand get_hand() const;
|
ARVRPositionalTracker::TrackerHand get_hand() const;
|
||||||
void set_hand(const ARVRPositionalTracker::TrackerHand p_hand);
|
void set_hand(const ARVRPositionalTracker::TrackerHand p_hand);
|
||||||
|
real_t get_rumble() const;
|
||||||
|
void set_rumble(real_t p_rumble);
|
||||||
|
|
||||||
Transform get_transform(bool p_adjust_by_reference_frame) const;
|
Transform get_transform(bool p_adjust_by_reference_frame) const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user