diff --git a/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.cpp b/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.cpp index 89446d7c..60b7d04a 100644 --- a/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.cpp +++ b/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.cpp @@ -111,6 +111,36 @@ MetaEditorExportPlugin::MetaEditorExportPlugin() { false, false ); + _use_overlay_keyboard_option = _generate_export_option( + "meta_xr_features/use_overlay_keyboard", + "", + Variant::Type::BOOL, + PROPERTY_HINT_NONE, + "", + PROPERTY_USAGE_DEFAULT, + false, + false + ); + _use_experimental_features_option = _generate_export_option( + "meta_xr_features/use_experimental_features", + "", + Variant::Type::BOOL, + PROPERTY_HINT_NONE, + "", + PROPERTY_USAGE_DEFAULT, + false, + false + ); + _boundary_mode_option = _generate_export_option( + "meta_xr_features/boundary_mode", + "", + Variant::Type::INT, + PROPERTY_HINT_ENUM, + "Enabled,Disabled,Contextual", + PROPERTY_USAGE_DEFAULT, + BOUNDARY_ENABLED_VALUE, + false + ); _support_quest_1_option = _generate_export_option( "meta_xr_features/quest_1_support", "", @@ -168,6 +198,9 @@ TypedArray MetaEditorExportPlugin::_get_export_options(const Ref BOUNDARY_ENABLED_VALUE) { + return "Boundary mode changes require \"XR Mode\" to be \"OpenXR\".\n"; + } } return OpenXREditorExportPlugin::_get_export_option_warning(platform, option); @@ -305,6 +346,26 @@ String MetaEditorExportPlugin::_get_android_manifest_element_contents(const Ref< contents += " \n"; } + // Check for overlay keyboard + bool use_overlay_keyboard_option = _get_bool_option("meta_xr_features/use_overlay_keyboard"); + if (use_overlay_keyboard_option) { + contents += " \n"; + } + + // Check for experimental features + bool use_experimental_features = _get_bool_option("meta_xr_features/use_experimental_features"); + if (use_experimental_features) { + contents += " \n"; + } + + // Check for boundary mode + int boundary_mode = _get_int_option("meta_xr_features/boundary_mode", BOUNDARY_ENABLED_VALUE); + if (boundary_mode == BOUNDARY_DISABLED_VALUE) { + contents += " \n"; + } else if (boundary_mode == BOUNDARY_CONTEXTUAL_VALUE) { + contents += " \n"; + } + return contents; } diff --git a/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.h b/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.h index 126bf6a5..448455eb 100644 --- a/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.h +++ b/godotopenxrmeta/src/main/cpp/export/meta_export_plugin.h @@ -52,6 +52,10 @@ static const int HAND_TRACKING_REQUIRED_VALUE = 2; static const int HAND_TRACKING_FREQUENCY_LOW_VALUE = 0; static const int HAND_TRACKING_FREQUENCY_HIGH_VALUE = 1; +static const int BOUNDARY_ENABLED_VALUE = 0; +static const int BOUNDARY_DISABLED_VALUE = 1; +static const int BOUNDARY_CONTEXTUAL_VALUE = 2; + } // namespace class MetaEditorExportPlugin : public OpenXREditorExportPlugin { @@ -84,6 +88,9 @@ class MetaEditorExportPlugin : public OpenXREditorExportPlugin { Dictionary _passthrough_option; Dictionary _use_anchor_api_option; Dictionary _use_scene_api_option; + Dictionary _use_overlay_keyboard_option; + Dictionary _use_experimental_features_option; + Dictionary _boundary_mode_option; Dictionary _support_quest_1_option; Dictionary _support_quest_2_option; Dictionary _support_quest_3_option; diff --git a/godotopenxrmeta/src/main/java/org/godotengine/openxr/vendors/meta/GodotOpenXRMeta.kt b/godotopenxrmeta/src/main/java/org/godotengine/openxr/vendors/meta/GodotOpenXRMeta.kt index b79e74cf..b02817e8 100644 --- a/godotopenxrmeta/src/main/java/org/godotengine/openxr/vendors/meta/GodotOpenXRMeta.kt +++ b/godotopenxrmeta/src/main/java/org/godotengine/openxr/vendors/meta/GodotOpenXRMeta.kt @@ -70,6 +70,7 @@ class GodotOpenXRMeta(godot: Godot?) : GodotPlugin(godot) { } // Request the scene API permission if it's included in the manifest if (PermissionsUtil.hasManifestPermission(activity, SCENE_PERMISSION)) { + Log.d(TAG, "Requesting permission '${SCENE_PERMISSION}'") PermissionsUtil.requestPermission(SCENE_PERMISSION, activity) } return null