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

71 lines
2.6 KiB
GDScript

@tool
extends EditorExportPlugin
const PATH_EXTENSION_DEF = "res://.godot/extension_list.cfg"
var gdextensions_exclude_list : Array
var extension_definition_buffer : String = "default"
func _get_name() -> String:
return "GodotXRToggleExport"
func _export_begin(features : PackedStringArray, _is_debug : bool, _path : String, _flags : int) -> void:
# GDExtension export disable
var gdextension_exclude_platforms : Dictionary = ProjectSettings.get_setting("godot_xr_toggle/export/exclude_gdextensions_from_export", {})
for platform_name : String in gdextension_exclude_platforms.keys():
if features.has(platform_name):
gdextensions_exclude_list = gdextension_exclude_platforms[platform_name]
if not gdextensions_exclude_list.is_empty():
var file_extension_list := FileAccess.open(PATH_EXTENSION_DEF, FileAccess.READ)
var extensions : String = file_extension_list.get_as_text()
file_extension_list.close()
extension_definition_buffer = extensions
var lines : PackedStringArray = extensions.split("\n")
var extensions_without_excluded : String = ""
for line in lines:
for gdextension_name in gdextensions_exclude_list:
if not gdextension_name in line:
extensions_without_excluded += line + "\n"
extensions_without_excluded = extensions_without_excluded.trim_suffix("\n")
file_extension_list = FileAccess.open(PATH_EXTENSION_DEF, FileAccess.WRITE)
file_extension_list.store_string(extensions_without_excluded)
file_extension_list.close()
# XR Mode force mode
var force_mode_platforms : Dictionary = ProjectSettings.get_setting("godot_xr_toggle/export/platforms_force_mode", {})
for platform_name : String in force_mode_platforms.keys():
if features.has(platform_name):
ProjectSettings.set_setting("xr/openxr/enabled", force_mode_platforms[platform_name])
break
func _export_file(path : String, _type : String, _features : PackedStringArray) -> void:
# Remove editor-only override file before exporting
if path == "res://override.cfg":
skip()
# Skip predefined GDExtensions
elif not gdextensions_exclude_list.is_empty():
for gdextension_name in gdextensions_exclude_list:
if gdextension_name in path:
gdextensions_exclude_list.erase(gdextension_name)
skip()
break
# Restore gdextension list
func _export_end() -> void:
gdextensions_exclude_list.clear()
if extension_definition_buffer != "default":
var file_extension_list := FileAccess.open(PATH_EXTENSION_DEF, FileAccess.WRITE)
file_extension_list.store_string(extension_definition_buffer)
file_extension_list.close()
extension_definition_buffer = "default"