Added methods to OpenXR interface to set which action sets are active

This commit is contained in:
Bastiaan Olij 2023-01-31 10:20:19 +11:00
parent e9de988020
commit d3ec17e9ae
3 changed files with 61 additions and 0 deletions

View file

@ -11,12 +11,33 @@
<link title="Setting up XR">$DOCS_URL/tutorials/xr/setting_up_xr.html</link> <link title="Setting up XR">$DOCS_URL/tutorials/xr/setting_up_xr.html</link>
</tutorials> </tutorials>
<methods> <methods>
<method name="get_action_sets" qualifiers="const">
<return type="Array" />
<description>
Returns a list of action sets registered with Godot (loaded from the action map at runtime).
</description>
</method>
<method name="get_available_display_refresh_rates" qualifiers="const"> <method name="get_available_display_refresh_rates" qualifiers="const">
<return type="Array" /> <return type="Array" />
<description> <description>
Returns display refresh rates supported by the current HMD. Only returned if this feature is supported by the OpenXR runtime and after the interface has been initialized. Returns display refresh rates supported by the current HMD. Only returned if this feature is supported by the OpenXR runtime and after the interface has been initialized.
</description> </description>
</method> </method>
<method name="is_action_set_active" qualifiers="const">
<return type="bool" />
<param index="0" name="name" type="String" />
<description>
Returns [code]true[/code] if the given action set is active.
</description>
</method>
<method name="set_action_set_active">
<return type="void" />
<param index="0" name="name" type="String" />
<param index="1" name="active" type="bool" />
<description>
Sets the given action set as active or inactive.
</description>
</method>
</methods> </methods>
<members> <members>
<member name="display_refresh_rate" type="float" setter="set_display_refresh_rate" getter="get_display_refresh_rate" default="0.0"> <member name="display_refresh_rate" type="float" setter="set_display_refresh_rate" getter="get_display_refresh_rate" default="0.0">

View file

@ -47,6 +47,10 @@ void OpenXRInterface::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_display_refresh_rate", "refresh_rate"), &OpenXRInterface::set_display_refresh_rate); ClassDB::bind_method(D_METHOD("set_display_refresh_rate", "refresh_rate"), &OpenXRInterface::set_display_refresh_rate);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "display_refresh_rate"), "set_display_refresh_rate", "get_display_refresh_rate"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "display_refresh_rate"), "set_display_refresh_rate", "get_display_refresh_rate");
ClassDB::bind_method(D_METHOD("is_action_set_active", "name"), &OpenXRInterface::is_action_set_active);
ClassDB::bind_method(D_METHOD("set_action_set_active", "name", "active"), &OpenXRInterface::set_action_set_active);
ClassDB::bind_method(D_METHOD("get_action_sets"), &OpenXRInterface::get_action_sets);
ClassDB::bind_method(D_METHOD("get_available_display_refresh_rates"), &OpenXRInterface::get_available_display_refresh_rates); ClassDB::bind_method(D_METHOD("get_available_display_refresh_rates"), &OpenXRInterface::get_available_display_refresh_rates);
} }
@ -621,6 +625,38 @@ Array OpenXRInterface::get_available_display_refresh_rates() const {
} }
} }
bool OpenXRInterface::is_action_set_active(const String &p_action_set) const {
for (ActionSet *action_set : action_sets) {
if (action_set->action_set_name == p_action_set) {
return action_set->is_active;
}
}
WARN_PRINT("OpenXR: Unknown action set " + p_action_set);
return false;
}
void OpenXRInterface::set_action_set_active(const String &p_action_set, bool p_active) {
for (ActionSet *action_set : action_sets) {
if (action_set->action_set_name == p_action_set) {
action_set->is_active = p_active;
return;
}
}
WARN_PRINT("OpenXR: Unknown action set " + p_action_set);
}
Array OpenXRInterface::get_action_sets() const {
Array arr;
for (ActionSet *action_set : action_sets) {
arr.push_back(action_set->action_set_name);
}
return arr;
}
Size2 OpenXRInterface::get_render_target_size() { Size2 OpenXRInterface::get_render_target_size() {
if (openxr_api == nullptr) { if (openxr_api == nullptr) {
return Size2(); return Size2();

View file

@ -123,6 +123,10 @@ public:
void set_display_refresh_rate(float p_refresh_rate); void set_display_refresh_rate(float p_refresh_rate);
Array get_available_display_refresh_rates() const; Array get_available_display_refresh_rates() const;
bool is_action_set_active(const String &p_action_set) const;
void set_action_set_active(const String &p_action_set, bool p_active);
Array get_action_sets() const;
virtual Size2 get_render_target_size() override; virtual Size2 get_render_target_size() override;
virtual uint32_t get_view_count() override; virtual uint32_t get_view_count() override;
virtual Transform3D get_camera_transform() override; virtual Transform3D get_camera_transform() override;