You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-02 16:48:55 +00:00
OpenXR: Implement play_area_changed signal
This implements the missing logic for the 'play_area_changed' in OpenXRInterface. It modifies the existing 'on_reference_space_change_pending' method by receiving the XrReferenceSpaceType enum from the event and selects the appropriate PlayAreaMode, it finally emits the 'play_area_changed' signal.
This commit is contained in:
@@ -2099,7 +2099,7 @@ bool OpenXRAPI::poll_events() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (xr_interface) {
|
if (xr_interface) {
|
||||||
xr_interface->on_reference_space_change_pending();
|
xr_interface->on_reference_space_change_pending(event->referenceSpaceType);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED: {
|
case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED: {
|
||||||
|
|||||||
@@ -1408,8 +1408,32 @@ void OpenXRInterface::on_state_exiting() {
|
|||||||
emit_signal(SNAME("instance_exiting"));
|
emit_signal(SNAME("instance_exiting"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInterface::on_reference_space_change_pending() {
|
void OpenXRInterface::on_reference_space_change_pending(XrReferenceSpaceType p_type) {
|
||||||
reference_stage_changing = true;
|
reference_stage_changing = true;
|
||||||
|
|
||||||
|
// Emit play area bounds changed signal when the reference space changes.
|
||||||
|
PlayAreaMode mode = XR_PLAY_AREA_UNKNOWN;
|
||||||
|
|
||||||
|
switch (p_type) {
|
||||||
|
case XR_REFERENCE_SPACE_TYPE_VIEW:
|
||||||
|
mode = XR_PLAY_AREA_3DOF;
|
||||||
|
break;
|
||||||
|
case XR_REFERENCE_SPACE_TYPE_LOCAL:
|
||||||
|
mode = XR_PLAY_AREA_SITTING;
|
||||||
|
break;
|
||||||
|
case XR_REFERENCE_SPACE_TYPE_STAGE:
|
||||||
|
mode = XR_PLAY_AREA_STAGE;
|
||||||
|
break;
|
||||||
|
case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR:
|
||||||
|
mode = XR_PLAY_AREA_ROOMSCALE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mode = XR_PLAY_AREA_UNKNOWN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
print_verbose("OpenXR Interface: Play area changed, emitting signal.");
|
||||||
|
emit_signal(SNAME("play_area_changed"), mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenXRInterface::on_refresh_rate_changes(float p_new_rate) {
|
void OpenXRInterface::on_refresh_rate_changes(float p_new_rate) {
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ public:
|
|||||||
void on_state_stopping();
|
void on_state_stopping();
|
||||||
void on_state_loss_pending();
|
void on_state_loss_pending();
|
||||||
void on_state_exiting();
|
void on_state_exiting();
|
||||||
void on_reference_space_change_pending();
|
void on_reference_space_change_pending(XrReferenceSpaceType p_type);
|
||||||
void on_refresh_rate_changes(float p_new_rate);
|
void on_refresh_rate_changes(float p_new_rate);
|
||||||
void tracker_profile_changed(RID p_tracker, RID p_interaction_profile);
|
void tracker_profile_changed(RID p_tracker, RID p_interaction_profile);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user