xrjamfeb2025/addons/godot-xr-toggle/plugin.gd
2025-02-09 23:38:24 -07:00

97 lines
2.3 KiB
GDScript

@tool
extends EditorPlugin
var xr_toggle : CheckButton
var export_plugin : EditorExportPlugin
func _define_project_setting(
p_name : String,
p_type : int,
p_hint : int = PROPERTY_HINT_NONE,
p_hint_string : String = "",
p_default_val = "") -> void:
# p_default_val can be any type!!
if !ProjectSettings.has_setting(p_name):
ProjectSettings.set_setting(p_name, p_default_val)
var property_info : Dictionary = {
"name" : p_name,
"type" : p_type,
"hint" : p_hint,
"hint_string" : p_hint_string
}
ProjectSettings.add_property_info(property_info)
if ProjectSettings.has_method("set_as_basic"):
ProjectSettings.call("set_as_basic", p_name, true)
ProjectSettings.set_initial_value(p_name, p_default_val)
func _enter_tree() -> void:
_create_export_plugin()
_create_toggle_control()
# Add android to forced XR enabled platforms
_define_project_setting(
"godot_xr_toggle/export/platforms_force_mode",
TYPE_DICTIONARY,
PROPERTY_HINT_NONE,
"",
{"android": true}
)
# Add android to forced XR enabled platforms
_define_project_setting(
"godot_xr_toggle/export/exclude_gdextensions_from_export",
TYPE_DICTIONARY,
PROPERTY_HINT_NONE,
"",
{
"windows": [],
"linux": [],
"macos": [],
"android": []
}
)
add_export_plugin(export_plugin)
add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, xr_toggle)
# Initialize
_toggle_xr_mode(xr_toggle.button_pressed)
func _create_export_plugin() -> void:
if not export_plugin:
export_plugin = EditorExportPlugin.new()
export_plugin.set_script(load("res://addons/godot-xr-toggle/export_plugin.gd"))
func _create_toggle_control() -> void:
if not xr_toggle:
xr_toggle = CheckButton.new()
xr_toggle.text = "XR Enabled"
xr_toggle.toggled.connect(_toggle_xr_mode)
func _toggle_xr_mode(toggled_on : bool) -> void:
if FileAccess.file_exists("res://override.cfg"):
DirAccess.remove_absolute("res://override.cfg")
var config = ConfigFile.new()
# Enable OpenXR
config.set_value("xr", "openxr/enabled", toggled_on)
# Save override file
config.save("res://override.cfg")
func _exit_tree() -> void:
if FileAccess.file_exists("res://override.cfg"):
DirAccess.remove_absolute("res://override.cfg")
if xr_toggle:
xr_toggle.queue_free()
remove_export_plugin(export_plugin)
export_plugin = null