diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index bd53bf4..52c8d90 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -17,7 +17,7 @@ on: jobs: build-game: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: checkout uses: actions/checkout@v4 @@ -115,7 +115,7 @@ jobs: test-linux-build: needs: build-game - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 if: ${{ !startsWith(github.ref, 'refs/tags/') }} steps: - name: Download Linux artifact diff --git a/.github/workflows/discord.yml b/.github/workflows/discord.yml index e3c34ce..e5e607a 100644 --- a/.github/workflows/discord.yml +++ b/.github/workflows/discord.yml @@ -5,7 +5,7 @@ on: jobs: notify-reviewers: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Send Discord notification env: diff --git a/.github/workflows/pr_comment_artifact.yml b/.github/workflows/pr_comment_artifact.yml index 4990e7f..50e00e2 100644 --- a/.github/workflows/pr_comment_artifact.yml +++ b/.github/workflows/pr_comment_artifact.yml @@ -11,7 +11,7 @@ on: jobs: comment-on-pr: if: github.event.workflow_run.conclusion == 'success' - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Get Artifact URL & PR Info diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4695e7d..c0938dc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ on: jobs: pre-commit: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v3 @@ -19,7 +19,7 @@ jobs: # This could be a pre-commit hook but it's quite expensive, so we only run it on CI godot-validator: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: checkout uses: actions/checkout@v4 @@ -34,7 +34,7 @@ jobs: tests: # The type of runner that the job will run on - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 # Steps represent a sequence of tasks that will be executed as part of the job steps: diff --git a/src/addons/fmod/FmodManager.gd b/src/addons/fmod/FmodManager.gd new file mode 100644 index 0000000..172b033 --- /dev/null +++ b/src/addons/fmod/FmodManager.gd @@ -0,0 +1,19 @@ +@tool +extends Node + +var performance_display: PerformancesDisplay + +func _ready(): + process_mode = PROCESS_MODE_ALWAYS + performance_display = PerformancesDisplay.new() + add_child(performance_display) + +func _exit_tree() -> void: + remove_child(performance_display) + performance_display.free() + +func _process(delta): + FmodServer.update() + +func _notification(what): + FmodServer.notification(what) diff --git a/src/addons/fmod/FmodManager.gd.uid b/src/addons/fmod/FmodManager.gd.uid new file mode 100644 index 0000000..8f9ac60 --- /dev/null +++ b/src/addons/fmod/FmodManager.gd.uid @@ -0,0 +1 @@ +uid://cds10pm7hwn3p diff --git a/src/addons/fmod/FmodPlugin.gd b/src/addons/fmod/FmodPlugin.gd new file mode 100644 index 0000000..eba98bd --- /dev/null +++ b/src/addons/fmod/FmodPlugin.gd @@ -0,0 +1,78 @@ +@tool +class_name FmodPlugin extends EditorPlugin + + +const ADDON_PATH = "res://addons/fmod" + + +@onready var theme = get_editor_interface().get_base_control().get_theme() + + +var fmod_bank_explorer_window: PackedScene = load("res://addons/fmod/tool/ui/FmodBankExplorer.tscn") +var bank_explorer: FmodBankExplorer +var fmod_button: Button +var export_plugin = FmodEditorExportPlugin.new() +var emitter_inspector_plugin = FmodEmitterPropertyInspectorPlugin.new(self) +var bank_loader_inspector_plugin = FmodBankLoaderPropertyInspectorPlugin.new(self) + + +func _init(): + FmodBankDatabase.reload_all_banks() + + add_autoload_singleton("FmodManager", "res://addons/fmod/FmodManager.gd") + fmod_button = Button.new() + fmod_button.icon = load("res://addons/fmod/icons/fmod_icon.svg") + fmod_button.text = "Fmod Explorer" + + fmod_button.pressed.connect(_on_project_explorer_button_clicked) + + add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, fmod_button) + + bank_explorer = fmod_bank_explorer_window.instantiate() + bank_explorer.theme = get_editor_interface().get_base_control().get_theme() + bank_explorer.visible = false + add_child(bank_explorer) + + add_inspector_plugin(bank_loader_inspector_plugin) + add_inspector_plugin(emitter_inspector_plugin) + + +func _on_project_explorer_button_clicked(): + bank_explorer.should_display_copy_buttons = true + bank_explorer.should_display_select_button = false + _popup_project_explorer(FmodBankExplorer.ToDisplayFlags.BANKS | FmodBankExplorer.ToDisplayFlags.BUSES | FmodBankExplorer.ToDisplayFlags.VCA | FmodBankExplorer.ToDisplayFlags.EVENTS) + + +func open_project_explorer_events(on_select_callable: Callable): + _open_project_explorer(FmodBankExplorer.ToDisplayFlags.BANKS | FmodBankExplorer.ToDisplayFlags.EVENTS, on_select_callable) + + +func open_project_explorer_bank(on_select_callable: Callable): + _open_project_explorer(FmodBankExplorer.ToDisplayFlags.BANKS, on_select_callable) + + +func _open_project_explorer(display_flag: int, on_select_callable: Callable): + bank_explorer.should_display_copy_buttons = false + bank_explorer.should_display_select_button = true + _popup_project_explorer(display_flag, on_select_callable) + + +func _popup_project_explorer(to_display: int, callable: Callable = Callable()): + if bank_explorer.visible == true: + bank_explorer.close_window() + return + bank_explorer.regenerate_tree(to_display, callable) + bank_explorer.popup_centered() + + +func _enter_tree(): + add_export_plugin(export_plugin) + + +func _exit_tree(): + remove_inspector_plugin(emitter_inspector_plugin) + remove_inspector_plugin(bank_loader_inspector_plugin) + + remove_control_from_container(EditorPlugin.CONTAINER_TOOLBAR, fmod_button) + fmod_button.queue_free() + remove_export_plugin(export_plugin) diff --git a/src/addons/fmod/FmodPlugin.gd.uid b/src/addons/fmod/FmodPlugin.gd.uid new file mode 100644 index 0000000..6ab96c7 --- /dev/null +++ b/src/addons/fmod/FmodPlugin.gd.uid @@ -0,0 +1 @@ +uid://cwsif6rhp50p5 diff --git a/src/addons/fmod/fmod.gdextension b/src/addons/fmod/fmod.gdextension new file mode 100644 index 0000000..4f49914 --- /dev/null +++ b/src/addons/fmod/fmod.gdextension @@ -0,0 +1,101 @@ +[configuration] +entry_symbol = "fmod_library_init" +compatibility_minimum = 4.2 + +[libraries] +windows.editor.x86_64 = "res://addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.dll" +windows.debug.x86_64 = "res://addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.dll" +windows.release.x86_64 = "res://addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.dll" +macos.editor = "res://addons/fmod/libs/macos/libGodotFmod.macos.editor.framework" +macos.debug = "res://addons/fmod/libs/macos/libGodotFmod.macos.template_debug.framework" +macos.release = "res://addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework" +linux.editor.x86_64 = "res://addons/fmod/libs/linux/libGodotFmod.linux.editor.x86_64.so" +linux.debug.x86_64 = "res://addons/fmod/libs/linux/libGodotFmod.linux.template_debug.x86_64.so" +linux.release.x86_64 = "res://addons/fmod/libs/linux/libGodotFmod.linux.template_release.x86_64.so" +android.debug.x86_64 = "res://addons/fmod/libs/android/x86_64/libGodotFmod.android.template_debug.x86_64.so" +android.release.x86_64 = "res://addons/fmod/libs/android/x86_64/libGodotFmod.android.template_release.x86_64.so" +android.debug.arm64 = "res://addons/fmod/libs/android/arm64/libGodotFmod.android.template_debug.arm64.so" +android.release.arm64 = "res://addons/fmod/libs/android/arm64/libGodotFmod.android.template_release.arm64.so" +ios.debug = "res://addons/fmod/libs/ios/libGodotFmod.ios.template_debug.xcframework" +ios.release = "res://addons/fmod/libs/ios/libGodotFmod.ios.template_release.xcframework" + +[icons] +FmodEventEmitter2D = "res://addons/fmod/icons/fmod_icon.svg" +FmodEventEmitter3D = "res://addons/fmod/icons/fmod_icon.svg" +FmodListener2D = "res://addons/fmod/icons/fmod_icon.svg" +FmodListener3D = "res://addons/fmod/icons/fmod_icon.svg" +FmodBankLoader = "res://addons/fmod/icons/fmod_icon.svg" + +[dependencies] +windows.editor.x86_64 = { +"libs/windows/fmodL.dll": "", +"libs/windows/fmodstudioL.dll": "" +} +windows.debug.x86_64 = { +"libs/windows/fmodL.dll": "", +"libs/windows/fmodstudioL.dll": "" +} +windows.release.x86_64 = { +"libs/windows/fmod.dll": "", +"libs/windows/fmodstudio.dll": "" +} +linux.editor.x86_64 = { +"libs/linux/libfmodL.so": "", +"libs/linux/libfmodL.so.14": "", +"libs/linux/libfmodL.so.14.6": "", +"libs/linux/libfmodstudioL.so": "", +"libs/linux/libfmodstudioL.so.14": "", +"libs/linux/libfmodstudioL.so.14.6": "" +} +linux.debug.x86_64 = { +"libs/linux/libfmodL.so": "", +"libs/linux/libfmodL.so.14": "", +"libs/linux/libfmodL.so.14.6": "", +"libs/linux/libfmodstudioL.so": "", +"libs/linux/libfmodstudioL.so.14": "", +"libs/linux/libfmodstudioL.so.14.6": "" +} +linux.release.x86_64 = { +"libs/linux/libfmod.so": "", +"libs/linux/libfmod.so.14": "", +"libs/linux/libfmod.so.14.6": "", +"libs/linux/libfmodstudio.so": "", +"libs/linux/libfmodstudio.so.14": "", +"libs/linux/libfmodstudio.so.14.6": "" +} +macos.editor = { +"libs/macos/libfmodL.dylib": "", +"libs/macos/libfmodstudioL.dylib": "" +} +macos.debug = { +"libs/macos/libfmodL.dylib": "", +"libs/macos/libfmodstudioL.dylib": "" +} +macos.release = { +"libs/macos/libfmod.dylib": "", +"libs/macos/libfmodstudio.dylib": "" +} +android.debug.x86_64 = { +"libs/android/x86_64/libfmodL.so": "", +"libs/android/x86_64/libfmodstudioL.so": "", +} +android.release.x86_64 = { +"libs/android/x86_64/libfmod.so": "", +"libs/android/x86_64/libfmodstudio.so": "", +} +android.debug.arm64 = { +"libs/android/arm64/libfmodL.so": "", +"libs/android/arm64/libfmodstudioL.so": "", +} +android.release.arm64 = { +"libs/android/arm64/libfmod.so": "", +"libs/android/arm64/libfmodstudio.so": "", +} +ios.debug = { +"libs/ios/libfmodL_iphoneos.a": "", +"libs/ios/libfmodstudioL_iphoneos.a": "" +} +ios.release = { +"libs/ios/libfmod_iphoneos.a": "", +"libs/ios/libfmodstudio_iphoneos.a": "" +} \ No newline at end of file diff --git a/src/addons/fmod/fmod.gdextension.uid b/src/addons/fmod/fmod.gdextension.uid new file mode 100644 index 0000000..7e95cfe --- /dev/null +++ b/src/addons/fmod/fmod.gdextension.uid @@ -0,0 +1 @@ +uid://dq17s7r52klxe diff --git a/src/addons/fmod/icons/bank_icon.svg b/src/addons/fmod/icons/bank_icon.svg new file mode 100644 index 0000000..7aef6f3 --- /dev/null +++ b/src/addons/fmod/icons/bank_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6edb5ac7f7d94c70b6e2c00aea8bb1ca78bf28012a035501ee99ecd3e4c5849f +size 1651 diff --git a/src/addons/fmod/icons/bank_icon.svg.import b/src/addons/fmod/icons/bank_icon.svg.import new file mode 100644 index 0000000..7959a54 --- /dev/null +++ b/src/addons/fmod/icons/bank_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://o2chsr07oeqs" +path="res://.godot/imported/bank_icon.svg-8de6c7bff09a67352e162b3c61b601de.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/bank_icon.svg" +dest_files=["res://.godot/imported/bank_icon.svg-8de6c7bff09a67352e162b3c61b601de.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/icons/bus_icon.svg b/src/addons/fmod/icons/bus_icon.svg new file mode 100644 index 0000000..e133361 --- /dev/null +++ b/src/addons/fmod/icons/bus_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1231a7aa73ad6aaf67236737c193109b728359872e82b67892c909ace105807d +size 1649 diff --git a/src/addons/fmod/icons/bus_icon.svg.import b/src/addons/fmod/icons/bus_icon.svg.import new file mode 100644 index 0000000..904ef45 --- /dev/null +++ b/src/addons/fmod/icons/bus_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dj1kag4aeg58t" +path="res://.godot/imported/bus_icon.svg-f536ffd3c4893e79a9d3cb9a1b4fb50c.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/bus_icon.svg" +dest_files=["res://.godot/imported/bus_icon.svg-f536ffd3c4893e79a9d3cb9a1b4fb50c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/icons/c_parameter_icon.svg b/src/addons/fmod/icons/c_parameter_icon.svg new file mode 100644 index 0000000..648e281 --- /dev/null +++ b/src/addons/fmod/icons/c_parameter_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9da90a559464eaab6f1699b1d1da9f4572d9e860cbb3eb620a50f6549cd5ac8c +size 1025 diff --git a/src/addons/fmod/icons/c_parameter_icon.svg.import b/src/addons/fmod/icons/c_parameter_icon.svg.import new file mode 100644 index 0000000..09f585b --- /dev/null +++ b/src/addons/fmod/icons/c_parameter_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmvcqfsl167te" +path="res://.godot/imported/c_parameter_icon.svg-04115c2482c9a6874356ffdc09c41db0.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/c_parameter_icon.svg" +dest_files=["res://.godot/imported/c_parameter_icon.svg-04115c2482c9a6874356ffdc09c41db0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/icons/d_parameter_icon.svg b/src/addons/fmod/icons/d_parameter_icon.svg new file mode 100644 index 0000000..eee7818 --- /dev/null +++ b/src/addons/fmod/icons/d_parameter_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce8ec93cf51108867a96f21c6f0f11c1e3b3e30908acc4a4338fb9d3f54269d4 +size 773 diff --git a/src/addons/fmod/icons/d_parameter_icon.svg.import b/src/addons/fmod/icons/d_parameter_icon.svg.import new file mode 100644 index 0000000..d5ef9cf --- /dev/null +++ b/src/addons/fmod/icons/d_parameter_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dgna04txtwnyb" +path="res://.godot/imported/d_parameter_icon.svg-d339e4e3f950ae8593b999ef51579136.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/d_parameter_icon.svg" +dest_files=["res://.godot/imported/d_parameter_icon.svg-d339e4e3f950ae8593b999ef51579136.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/icons/event_icon.svg b/src/addons/fmod/icons/event_icon.svg new file mode 100644 index 0000000..e290211 --- /dev/null +++ b/src/addons/fmod/icons/event_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f20160ba866c11c277239ac233b451a9c3603493b493414405d2ae4ca107a43 +size 1159 diff --git a/src/addons/fmod/icons/event_icon.svg.import b/src/addons/fmod/icons/event_icon.svg.import new file mode 100644 index 0000000..fd49058 --- /dev/null +++ b/src/addons/fmod/icons/event_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmpgmbn3y4svl" +path="res://.godot/imported/event_icon.svg-4e6e2103d076f95b7bef82f079e433e6.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/event_icon.svg" +dest_files=["res://.godot/imported/event_icon.svg-4e6e2103d076f95b7bef82f079e433e6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/icons/fmod_emitter.png b/src/addons/fmod/icons/fmod_emitter.png new file mode 100644 index 0000000..ec46926 --- /dev/null +++ b/src/addons/fmod/icons/fmod_emitter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37f711e44a8e20ef12568b84c78e0c93721c01065f36ea7544aef71ffec6ea7c +size 535 diff --git a/src/addons/fmod/icons/fmod_emitter.png.import b/src/addons/fmod/icons/fmod_emitter.png.import new file mode 100644 index 0000000..b12e6e8 --- /dev/null +++ b/src/addons/fmod/icons/fmod_emitter.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cotpb54utx6d6" +path="res://.godot/imported/fmod_emitter.png-6783a287e298e2a04e64a6deaa6fe366.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/fmod_emitter.png" +dest_files=["res://.godot/imported/fmod_emitter.png-6783a287e298e2a04e64a6deaa6fe366.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/addons/fmod/icons/fmod_icon.svg b/src/addons/fmod/icons/fmod_icon.svg new file mode 100644 index 0000000..29fb87e --- /dev/null +++ b/src/addons/fmod/icons/fmod_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:734e563ba529e5b4d1954297a102e810e0f05a6959b4714398168a39345cb659 +size 4481 diff --git a/src/addons/fmod/icons/fmod_icon.svg.import b/src/addons/fmod/icons/fmod_icon.svg.import new file mode 100644 index 0000000..cd78f8b --- /dev/null +++ b/src/addons/fmod/icons/fmod_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bwqq5q7kodk40" +path="res://.godot/imported/fmod_icon.svg-cca7eb13231881fafaea0d598d407ea3.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/fmod_icon.svg" +dest_files=["res://.godot/imported/fmod_icon.svg-cca7eb13231881fafaea0d598d407ea3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/icons/snapshot_icon.svg b/src/addons/fmod/icons/snapshot_icon.svg new file mode 100644 index 0000000..ef8c058 --- /dev/null +++ b/src/addons/fmod/icons/snapshot_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16750974a44374711fea653929148cfd6f27c42d0629f1672b1595601443d620 +size 1162 diff --git a/src/addons/fmod/icons/snapshot_icon.svg.import b/src/addons/fmod/icons/snapshot_icon.svg.import new file mode 100644 index 0000000..f06df82 --- /dev/null +++ b/src/addons/fmod/icons/snapshot_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b4jxbh86chubi" +path="res://.godot/imported/snapshot_icon.svg-7b517248819b3685844766808fbce2a5.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/snapshot_icon.svg" +dest_files=["res://.godot/imported/snapshot_icon.svg-7b517248819b3685844766808fbce2a5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/icons/vca_icon.svg b/src/addons/fmod/icons/vca_icon.svg new file mode 100644 index 0000000..54967c1 --- /dev/null +++ b/src/addons/fmod/icons/vca_icon.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4c5fb21cce10e19680f3dc9a8da863873e90b188cee302e7fc5de83fb04db07 +size 1649 diff --git a/src/addons/fmod/icons/vca_icon.svg.import b/src/addons/fmod/icons/vca_icon.svg.import new file mode 100644 index 0000000..fb5c289 --- /dev/null +++ b/src/addons/fmod/icons/vca_icon.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crsj4jjaeq87a" +path="res://.godot/imported/vca_icon.svg-def43f27fe148a7a0b18c7dcaab20c79.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/fmod/icons/vca_icon.svg" +dest_files=["res://.godot/imported/vca_icon.svg-def43f27fe148a7a0b18c7dcaab20c79.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=true diff --git a/src/addons/fmod/libs/android/arm64/CopyPast_Fmod_Libs_Here.txt b/src/addons/fmod/libs/android/arm64/CopyPast_Fmod_Libs_Here.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/addons/fmod/libs/android/arm64/libGodotFmod.android.editor.arm64.so b/src/addons/fmod/libs/android/arm64/libGodotFmod.android.editor.arm64.so new file mode 100644 index 0000000..36341d4 --- /dev/null +++ b/src/addons/fmod/libs/android/arm64/libGodotFmod.android.editor.arm64.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91047f5012e3a2acdf4e8c559c4fe4496ca871f23ba1ce87b77ba4c31e656085 +size 2050144 diff --git a/src/addons/fmod/libs/android/arm64/libGodotFmod.android.template_debug.arm64.so b/src/addons/fmod/libs/android/arm64/libGodotFmod.android.template_debug.arm64.so new file mode 100644 index 0000000..4e421e6 --- /dev/null +++ b/src/addons/fmod/libs/android/arm64/libGodotFmod.android.template_debug.arm64.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea946d3e07511effbc59697c6cb545c65059b0f1d6b11947d7f42db1902d6595 +size 1713560 diff --git a/src/addons/fmod/libs/android/arm64/libGodotFmod.android.template_release.arm64.so b/src/addons/fmod/libs/android/arm64/libGodotFmod.android.template_release.arm64.so new file mode 100644 index 0000000..af5cf54 --- /dev/null +++ b/src/addons/fmod/libs/android/arm64/libGodotFmod.android.template_release.arm64.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:267cab7a3d5aa88282ca33b571fafad5d642c9b4dffda8baaa7ebb2ba363b2ee +size 1589152 diff --git a/src/addons/fmod/libs/android/arm64/libfmod.so b/src/addons/fmod/libs/android/arm64/libfmod.so new file mode 100644 index 0000000..7d185e5 --- /dev/null +++ b/src/addons/fmod/libs/android/arm64/libfmod.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39b30fa72de6b9abbed0336bc8c40dc00976af9ba3804d84e3ebd49f5a7fc2d6 +size 1467600 diff --git a/src/addons/fmod/libs/android/arm64/libfmodL.so b/src/addons/fmod/libs/android/arm64/libfmodL.so new file mode 100644 index 0000000..63614f6 --- /dev/null +++ b/src/addons/fmod/libs/android/arm64/libfmodL.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e52620c1be1b27925cb887ac48b48d71a1056930c34cc288bccd9a5645e6f12 +size 1654784 diff --git a/src/addons/fmod/libs/android/arm64/libfmodstudio.so b/src/addons/fmod/libs/android/arm64/libfmodstudio.so new file mode 100644 index 0000000..94366c9 --- /dev/null +++ b/src/addons/fmod/libs/android/arm64/libfmodstudio.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b832388b360f29f543652cfa786cd9dde00d1e1960678c999253f7fddfed9f8 +size 1285912 diff --git a/src/addons/fmod/libs/android/arm64/libfmodstudioL.so b/src/addons/fmod/libs/android/arm64/libfmodstudioL.so new file mode 100644 index 0000000..0580268 --- /dev/null +++ b/src/addons/fmod/libs/android/arm64/libfmodstudioL.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9e4a6c55b952e95a5138655408a6f5d59f112f15409b9ec5c200a22cfa8c85f +size 1810168 diff --git a/src/addons/fmod/libs/iOS/CopyPast_Fmod_Libs_Here.txt b/src/addons/fmod/libs/iOS/CopyPast_Fmod_Libs_Here.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_debug.xcframework/Info.plist b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_debug.xcframework/Info.plist new file mode 100644 index 0000000..83dc063 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_debug.xcframework/Info.plist @@ -0,0 +1,29 @@ + + + + + AvailableLibraries + + + BinaryPath + libGodotFmod.ios.template_debug.universal.dylib + LibraryIdentifier + ios-arm64 + LibraryPath + libGodotFmod.ios.template_debug.universal.dylib + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + CFBundlePackageType + XFWK + MinimumOSVersion + 12.0 + XCFrameworkFormatVersion + 1.0 + + diff --git a/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_debug.xcframework/ios-arm64/libGodotFmod.ios.template_debug.universal.dylib b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_debug.xcframework/ios-arm64/libGodotFmod.ios.template_debug.universal.dylib new file mode 100644 index 0000000..06c628c --- /dev/null +++ b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_debug.xcframework/ios-arm64/libGodotFmod.ios.template_debug.universal.dylib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:255cf3007b7d41189d191d3f4af50d88dcbb9f9d99a2f8d367d81ce844840208 +size 5410968 diff --git a/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_release.xcframework/Info.plist b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_release.xcframework/Info.plist new file mode 100644 index 0000000..e83cd6b --- /dev/null +++ b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_release.xcframework/Info.plist @@ -0,0 +1,29 @@ + + + + + AvailableLibraries + + + BinaryPath + libGodotFmod.ios.template_release.universal.dylib + LibraryIdentifier + ios-arm64 + LibraryPath + libGodotFmod.ios.template_release.universal.dylib + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + CFBundlePackageType + XFWK + MinimumOSVersion + 12.0 + XCFrameworkFormatVersion + 1.0 + + diff --git a/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_release.xcframework/ios-arm64/libGodotFmod.ios.template_release.universal.dylib b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_release.xcframework/ios-arm64/libGodotFmod.ios.template_release.universal.dylib new file mode 100644 index 0000000..89e1336 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libGodotFmod.ios.template_release.xcframework/ios-arm64/libGodotFmod.ios.template_release.universal.dylib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8150145192cd09ce070b7cbf34d1b1e928bf875349d3b0b5df0a268fecd307d8 +size 4320056 diff --git a/src/addons/fmod/libs/iOS/libfmodL_appletvos.a b/src/addons/fmod/libs/iOS/libfmodL_appletvos.a new file mode 100644 index 0000000..bb7978d --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodL_appletvos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:083d03b1659f6d329b98799a876f134087da4db7ae689a43173fc5450eecdb2b +size 5169040 diff --git a/src/addons/fmod/libs/iOS/libfmodL_appletvsimulator.a b/src/addons/fmod/libs/iOS/libfmodL_appletvsimulator.a new file mode 100644 index 0000000..abdb6aa --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodL_appletvsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d984145a0a635506dc9cf670b1dd79d6343f9020316c082827acd3a6eaa7535e +size 5649840 diff --git a/src/addons/fmod/libs/iOS/libfmodL_iphoneos.a b/src/addons/fmod/libs/iOS/libfmodL_iphoneos.a new file mode 100644 index 0000000..9785cd4 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodL_iphoneos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:714d7acf79413333c62947fda8fa2a1c0fb75b34d2dba71d29a1dc41cde4ee81 +size 5169072 diff --git a/src/addons/fmod/libs/iOS/libfmodL_iphonesimulator.a b/src/addons/fmod/libs/iOS/libfmodL_iphonesimulator.a new file mode 100644 index 0000000..ed1b81f --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodL_iphonesimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16e304546d4137fc7865c329860360a1c2c4ea608aa185b89afe1996138f0666 +size 5649840 diff --git a/src/addons/fmod/libs/iOS/libfmodL_xros.a b/src/addons/fmod/libs/iOS/libfmodL_xros.a new file mode 100644 index 0000000..fe4122e --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodL_xros.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88e20cb279a3190081f9ee2ba826320376a7790884a543fac6180088b16acf9c +size 5226368 diff --git a/src/addons/fmod/libs/iOS/libfmodL_xrsimulator.a b/src/addons/fmod/libs/iOS/libfmodL_xrsimulator.a new file mode 100644 index 0000000..37102da --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodL_xrsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e76edc84d05d738318d197b28f412f349e64d86d5e453e687cf37f90aba2ab6c +size 5716576 diff --git a/src/addons/fmod/libs/iOS/libfmod_appletvos.a b/src/addons/fmod/libs/iOS/libfmod_appletvos.a new file mode 100644 index 0000000..f99e19d --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmod_appletvos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a943c3cbfa7e5235fdac7279f476c355650094fa3eb48b6f089b3ff1da473f9 +size 4176816 diff --git a/src/addons/fmod/libs/iOS/libfmod_appletvsimulator.a b/src/addons/fmod/libs/iOS/libfmod_appletvsimulator.a new file mode 100644 index 0000000..34baec2 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmod_appletvsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68b1459528f31eff0039cf903556149f2451fcaa498e26dbe228ae5dc08fedac +size 4776240 diff --git a/src/addons/fmod/libs/iOS/libfmod_iphoneos.a b/src/addons/fmod/libs/iOS/libfmod_iphoneos.a new file mode 100644 index 0000000..119690e --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmod_iphoneos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be71bb8678c9b843029821cf36916ca735a9577e8dc6176fab49bd67f6dd4e14 +size 4176848 diff --git a/src/addons/fmod/libs/iOS/libfmod_iphonesimulator.a b/src/addons/fmod/libs/iOS/libfmod_iphonesimulator.a new file mode 100644 index 0000000..ea00a0e --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmod_iphonesimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd2235442556857a76d899cb6470a06aa9b12e0e5f8c1f1bd796052f06e8cbfe +size 4776232 diff --git a/src/addons/fmod/libs/iOS/libfmod_xros.a b/src/addons/fmod/libs/iOS/libfmod_xros.a new file mode 100644 index 0000000..7e188ab --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmod_xros.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88806c3584349aeb6d0b3d4de2fab8b883920745df95986eb33b15be7e3c97d9 +size 4232472 diff --git a/src/addons/fmod/libs/iOS/libfmod_xrsimulator.a b/src/addons/fmod/libs/iOS/libfmod_xrsimulator.a new file mode 100644 index 0000000..accebc7 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmod_xrsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbc3279588f7d5656d94b91f71a2842810a737c314082065b668b2f27740648d +size 4841888 diff --git a/src/addons/fmod/libs/iOS/libfmodstudioL_appletvos.a b/src/addons/fmod/libs/iOS/libfmodstudioL_appletvos.a new file mode 100644 index 0000000..9f1e4d7 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudioL_appletvos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5386ceef3d237066d094c47a25c8f2035d8c3ef518c0c2be748eb2f05eb29558 +size 10622128 diff --git a/src/addons/fmod/libs/iOS/libfmodstudioL_appletvsimulator.a b/src/addons/fmod/libs/iOS/libfmodstudioL_appletvsimulator.a new file mode 100644 index 0000000..580b922 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudioL_appletvsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9262b234b74e529c97cf30cc296cb92b441137c4d49295360749839e466eb300 +size 10740856 diff --git a/src/addons/fmod/libs/iOS/libfmodstudioL_iphoneos.a b/src/addons/fmod/libs/iOS/libfmodstudioL_iphoneos.a new file mode 100644 index 0000000..295fd7c --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudioL_iphoneos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81d8c469b576c26554e13fffc7f20e072e3504e2411d5dfa2ae2ca0a436f6ac6 +size 10622120 diff --git a/src/addons/fmod/libs/iOS/libfmodstudioL_iphonesimulator.a b/src/addons/fmod/libs/iOS/libfmodstudioL_iphonesimulator.a new file mode 100644 index 0000000..7688d2c --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudioL_iphonesimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e810d495ebff42d32728e9551b0271412a7fa0edb58a072e1a964d582eb1617f +size 10740848 diff --git a/src/addons/fmod/libs/iOS/libfmodstudioL_xros.a b/src/addons/fmod/libs/iOS/libfmodstudioL_xros.a new file mode 100644 index 0000000..2b960a6 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudioL_xros.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f97f7495a59d19672510328ae7fc27e18b35a4a502a0c848a71d04df05158076 +size 10702968 diff --git a/src/addons/fmod/libs/iOS/libfmodstudioL_xrsimulator.a b/src/addons/fmod/libs/iOS/libfmodstudioL_xrsimulator.a new file mode 100644 index 0000000..130822c --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudioL_xrsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dad703680bba4787e46d454e2044856004b6a1f0dabadfa3dc776b072950008 +size 10796760 diff --git a/src/addons/fmod/libs/iOS/libfmodstudio_appletvos.a b/src/addons/fmod/libs/iOS/libfmodstudio_appletvos.a new file mode 100644 index 0000000..f39a944 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudio_appletvos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43ab2eda08d1c09a57e1fecdd11d230622913747494f3b87a53b47dd9927c33c +size 6056080 diff --git a/src/addons/fmod/libs/iOS/libfmodstudio_appletvsimulator.a b/src/addons/fmod/libs/iOS/libfmodstudio_appletvsimulator.a new file mode 100644 index 0000000..b2dac53 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudio_appletvsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:675e27c1346c5111df2753fcb874ea74aeac1469c301f4961b7b3c6f1e88bd0a +size 6750736 diff --git a/src/addons/fmod/libs/iOS/libfmodstudio_iphoneos.a b/src/addons/fmod/libs/iOS/libfmodstudio_iphoneos.a new file mode 100644 index 0000000..72963cb --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudio_iphoneos.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93c60a9ec7af616a438e657b178fbed11905a5940e1b397e5e2b5cd728744861 +size 6056072 diff --git a/src/addons/fmod/libs/iOS/libfmodstudio_iphonesimulator.a b/src/addons/fmod/libs/iOS/libfmodstudio_iphonesimulator.a new file mode 100644 index 0000000..d7fdf59 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudio_iphonesimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c046848c9ea8e5f47da575bb0a1bed581343bba4974a51261c0aaa335d8448b +size 6750736 diff --git a/src/addons/fmod/libs/iOS/libfmodstudio_xros.a b/src/addons/fmod/libs/iOS/libfmodstudio_xros.a new file mode 100644 index 0000000..bc2fba8 --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudio_xros.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cd331bfce376e70aa563da181ee4c882b3fc5e3239a0b01f7bc3e19960340a3 +size 6125144 diff --git a/src/addons/fmod/libs/iOS/libfmodstudio_xrsimulator.a b/src/addons/fmod/libs/iOS/libfmodstudio_xrsimulator.a new file mode 100644 index 0000000..6d71f3a --- /dev/null +++ b/src/addons/fmod/libs/iOS/libfmodstudio_xrsimulator.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0da2e4420ef5ab776f9aaa8a813f4217d71ed48d23dab386569bf6f72fd97a47 +size 6806152 diff --git a/src/addons/fmod/libs/linux/CopyPast_Fmod_Libs_Here.txt b/src/addons/fmod/libs/linux/CopyPast_Fmod_Libs_Here.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/addons/fmod/libs/linux/libGodotFmod.linux.editor.x86_64.so b/src/addons/fmod/libs/linux/libGodotFmod.linux.editor.x86_64.so new file mode 100644 index 0000000..75a0ff0 --- /dev/null +++ b/src/addons/fmod/libs/linux/libGodotFmod.linux.editor.x86_64.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e778d0870ba3ff4a8df0720203d346d936cc08a8ed040a89fa7edd475ed09ea5 +size 2274728 diff --git a/src/addons/fmod/libs/linux/libGodotFmod.linux.template_debug.x86_64.so b/src/addons/fmod/libs/linux/libGodotFmod.linux.template_debug.x86_64.so new file mode 100644 index 0000000..7d279cd --- /dev/null +++ b/src/addons/fmod/libs/linux/libGodotFmod.linux.template_debug.x86_64.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b655497eb7ae9b480349a1a63bff65783db666b778407ce1dfda852eec72593 +size 1922056 diff --git a/src/addons/fmod/libs/linux/libGodotFmod.linux.template_release.x86_64.so b/src/addons/fmod/libs/linux/libGodotFmod.linux.template_release.x86_64.so new file mode 100644 index 0000000..a0aa937 --- /dev/null +++ b/src/addons/fmod/libs/linux/libGodotFmod.linux.template_release.x86_64.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a06e7139e030b7f5d4205bf502be43cbbc09e84d2e1b4cf670adfb1d584a753 +size 1839072 diff --git a/src/addons/fmod/libs/linux/libfmod.so b/src/addons/fmod/libs/linux/libfmod.so new file mode 100644 index 0000000..52ce7be --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmod.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2abe192c8ddd8942d7a62f2c7ff674d73423ea9b1be6b087e5de0cfb30bc4bb +size 1688248 diff --git a/src/addons/fmod/libs/linux/libfmod.so.14 b/src/addons/fmod/libs/linux/libfmod.so.14 new file mode 100644 index 0000000..52ce7be --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmod.so.14 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2abe192c8ddd8942d7a62f2c7ff674d73423ea9b1be6b087e5de0cfb30bc4bb +size 1688248 diff --git a/src/addons/fmod/libs/linux/libfmod.so.14.6 b/src/addons/fmod/libs/linux/libfmod.so.14.6 new file mode 100644 index 0000000..52ce7be --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmod.so.14.6 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2abe192c8ddd8942d7a62f2c7ff674d73423ea9b1be6b087e5de0cfb30bc4bb +size 1688248 diff --git a/src/addons/fmod/libs/linux/libfmodL.so b/src/addons/fmod/libs/linux/libfmodL.so new file mode 100644 index 0000000..1e5a61b --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodL.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6405f30b5d52cc10cdfbd554c3a86a76a3b6b95157faf8ffcd9a7d3876d8553 +size 1934704 diff --git a/src/addons/fmod/libs/linux/libfmodL.so.14 b/src/addons/fmod/libs/linux/libfmodL.so.14 new file mode 100644 index 0000000..1e5a61b --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodL.so.14 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6405f30b5d52cc10cdfbd554c3a86a76a3b6b95157faf8ffcd9a7d3876d8553 +size 1934704 diff --git a/src/addons/fmod/libs/linux/libfmodL.so.14.6 b/src/addons/fmod/libs/linux/libfmodL.so.14.6 new file mode 100644 index 0000000..1e5a61b --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodL.so.14.6 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6405f30b5d52cc10cdfbd554c3a86a76a3b6b95157faf8ffcd9a7d3876d8553 +size 1934704 diff --git a/src/addons/fmod/libs/linux/libfmodstudio.so b/src/addons/fmod/libs/linux/libfmodstudio.so new file mode 100644 index 0000000..f1aca12 --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodstudio.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7a86fd2b53028be8974b9f968040dcf32528bac9eb52c448ea0f66c842712e +size 1622616 diff --git a/src/addons/fmod/libs/linux/libfmodstudio.so.14 b/src/addons/fmod/libs/linux/libfmodstudio.so.14 new file mode 100644 index 0000000..f1aca12 --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodstudio.so.14 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7a86fd2b53028be8974b9f968040dcf32528bac9eb52c448ea0f66c842712e +size 1622616 diff --git a/src/addons/fmod/libs/linux/libfmodstudio.so.14.6 b/src/addons/fmod/libs/linux/libfmodstudio.so.14.6 new file mode 100644 index 0000000..f1aca12 --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodstudio.so.14.6 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7a86fd2b53028be8974b9f968040dcf32528bac9eb52c448ea0f66c842712e +size 1622616 diff --git a/src/addons/fmod/libs/linux/libfmodstudioL.so b/src/addons/fmod/libs/linux/libfmodstudioL.so new file mode 100644 index 0000000..e5f5b70 --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodstudioL.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8576a8416722d4999abd6ed0c372ed58aa908c99319ee95383ac1a43aead920a +size 2513656 diff --git a/src/addons/fmod/libs/linux/libfmodstudioL.so.14 b/src/addons/fmod/libs/linux/libfmodstudioL.so.14 new file mode 100644 index 0000000..e5f5b70 --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodstudioL.so.14 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8576a8416722d4999abd6ed0c372ed58aa908c99319ee95383ac1a43aead920a +size 2513656 diff --git a/src/addons/fmod/libs/linux/libfmodstudioL.so.14.6 b/src/addons/fmod/libs/linux/libfmodstudioL.so.14.6 new file mode 100644 index 0000000..e5f5b70 --- /dev/null +++ b/src/addons/fmod/libs/linux/libfmodstudioL.so.14.6 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8576a8416722d4999abd6ed0c372ed58aa908c99319ee95383ac1a43aead920a +size 2513656 diff --git a/src/addons/fmod/libs/macos/CopyPast_Fmod_Libs_Here.txt b/src/addons/fmod/libs/macos/CopyPast_Fmod_Libs_Here.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/addons/fmod/libs/macos/libGodotFmod.macos.editor.framework/Info.plist b/src/addons/fmod/libs/macos/libGodotFmod.macos.editor.framework/Info.plist new file mode 100644 index 0000000..c75e412 --- /dev/null +++ b/src/addons/fmod/libs/macos/libGodotFmod.macos.editor.framework/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleExecutable + libGodotFmod.macos.editor + CFBundleIdentifier + com.utopia-rise.fmod-gdextension + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + libGodotFmod.macos.editor + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.0.0 + LSMinimumSystemVersion + 10.12 + + \ No newline at end of file diff --git a/src/addons/fmod/libs/macos/libGodotFmod.macos.editor.framework/libGodotFmod.macos.editor b/src/addons/fmod/libs/macos/libGodotFmod.macos.editor.framework/libGodotFmod.macos.editor new file mode 100644 index 0000000..75232db Binary files /dev/null and b/src/addons/fmod/libs/macos/libGodotFmod.macos.editor.framework/libGodotFmod.macos.editor differ diff --git a/src/addons/fmod/libs/macos/libGodotFmod.macos.template_debug.framework/Info.plist b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_debug.framework/Info.plist new file mode 100644 index 0000000..5fd2651 --- /dev/null +++ b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_debug.framework/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleExecutable + libGodotFmod.macos.template_debug + CFBundleIdentifier + com.utopiarise.fmod-gdextension + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + libGodotFmod.macos.template_debug + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.0.0 + LSMinimumSystemVersion + 10.12 + + \ No newline at end of file diff --git a/src/addons/fmod/libs/macos/libGodotFmod.macos.template_debug.framework/libGodotFmod.macos.template_debug b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_debug.framework/libGodotFmod.macos.template_debug new file mode 100644 index 0000000..3b91c66 --- /dev/null +++ b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_debug.framework/libGodotFmod.macos.template_debug @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca0d20f237cfa6ff0fcea1ba0805bfc96e498319217ab13d404ab5d8b7db7d43 +size 13189520 diff --git a/src/addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework/Info.plist b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework/Info.plist new file mode 100644 index 0000000..f6b580a --- /dev/null +++ b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleExecutable + libGodotFmod.macos.template_release + CFBundleIdentifier + com.utopiarise.fmod-gdextension + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + libGodotFmod.macos.template_release + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1.0.0 + LSMinimumSystemVersion + 10.12 + + \ No newline at end of file diff --git a/src/addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework/libGodotFmod.macos.template_release b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework/libGodotFmod.macos.template_release new file mode 100644 index 0000000..3bf2505 Binary files /dev/null and b/src/addons/fmod/libs/macos/libGodotFmod.macos.template_release.framework/libGodotFmod.macos.template_release differ diff --git a/src/addons/fmod/libs/macos/libfmod.dylib b/src/addons/fmod/libs/macos/libfmod.dylib new file mode 100644 index 0000000..4e675b8 --- /dev/null +++ b/src/addons/fmod/libs/macos/libfmod.dylib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f68033e8fcd495bd0cbbe92eeff26694515a12a0676fcd83dce95223c2e07755 +size 2586720 diff --git a/src/addons/fmod/libs/macos/libfmodL.dylib b/src/addons/fmod/libs/macos/libfmodL.dylib new file mode 100644 index 0000000..1d9d1ec --- /dev/null +++ b/src/addons/fmod/libs/macos/libfmodL.dylib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0b61f76a199016160b6a28fd6039d260d1260c482d00b9a697538d11db69810 +size 2982176 diff --git a/src/addons/fmod/libs/macos/libfmodstudio.dylib b/src/addons/fmod/libs/macos/libfmodstudio.dylib new file mode 100644 index 0000000..3b83a94 --- /dev/null +++ b/src/addons/fmod/libs/macos/libfmodstudio.dylib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:debfd45d958833f9747a722c8f997e2c07dbd9fd79f2de35b1d21d5c15eaea4b +size 2355424 diff --git a/src/addons/fmod/libs/macos/libfmodstudioL.dylib b/src/addons/fmod/libs/macos/libfmodstudioL.dylib new file mode 100644 index 0000000..346d557 --- /dev/null +++ b/src/addons/fmod/libs/macos/libfmodstudioL.dylib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdccee0833a2525df478648e4f6c0074df8916acc06cb978a102928c30e4c72f +size 3856672 diff --git a/src/addons/fmod/libs/windows/CopyPast_Fmod_Libs_Here.txt b/src/addons/fmod/libs/windows/CopyPast_Fmod_Libs_Here.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/addons/fmod/libs/windows/fmod.dll b/src/addons/fmod/libs/windows/fmod.dll new file mode 100644 index 0000000..3a555a9 --- /dev/null +++ b/src/addons/fmod/libs/windows/fmod.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c5948d83d11406fc1a95ace03943a9b0429bf2eaa3b1ad949f51de02fbdd9c6 +size 1875968 diff --git a/src/addons/fmod/libs/windows/fmodL.dll b/src/addons/fmod/libs/windows/fmodL.dll new file mode 100644 index 0000000..22bf28b --- /dev/null +++ b/src/addons/fmod/libs/windows/fmodL.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39e345f3a59fabab994f954321cf486753e09d230a36a524596abbc72233b894 +size 2141184 diff --git a/src/addons/fmod/libs/windows/fmodL_vc.lib b/src/addons/fmod/libs/windows/fmodL_vc.lib new file mode 100644 index 0000000..30adcb1 --- /dev/null +++ b/src/addons/fmod/libs/windows/fmodL_vc.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63f4472aa01f0c89b76c82419da5e3abaedfb7b6e6f5c828756ca1b93a4753b4 +size 350244 diff --git a/src/addons/fmod/libs/windows/fmod_vc.lib b/src/addons/fmod/libs/windows/fmod_vc.lib new file mode 100644 index 0000000..fa0a944 --- /dev/null +++ b/src/addons/fmod/libs/windows/fmod_vc.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c0736b606b1b3a18d5b82e6619d82d31e266c5e9a6825a1588f73a9a380a5ff +size 348364 diff --git a/src/addons/fmod/libs/windows/fmodstudio.dll b/src/addons/fmod/libs/windows/fmodstudio.dll new file mode 100644 index 0000000..3d5f982 --- /dev/null +++ b/src/addons/fmod/libs/windows/fmodstudio.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85364e241fc04bd4c4eea93b9365ba56f37af2f1721e9413f9a36a6cffa6d44b +size 1577984 diff --git a/src/addons/fmod/libs/windows/fmodstudioL.dll b/src/addons/fmod/libs/windows/fmodstudioL.dll new file mode 100644 index 0000000..23ba16b --- /dev/null +++ b/src/addons/fmod/libs/windows/fmodstudioL.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e90720970b13f729045906e37eba5be99f4dc01d60258cbb517d6e783ac1e7de +size 2464256 diff --git a/src/addons/fmod/libs/windows/fmodstudioL_vc.lib b/src/addons/fmod/libs/windows/fmodstudioL_vc.lib new file mode 100644 index 0000000..cd01398 --- /dev/null +++ b/src/addons/fmod/libs/windows/fmodstudioL_vc.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3160168d75a1e415c4f1665fbf3db28850cd7e30761a8c6086e437d8e48b708b +size 162868 diff --git a/src/addons/fmod/libs/windows/fmodstudio_vc.lib b/src/addons/fmod/libs/windows/fmodstudio_vc.lib new file mode 100644 index 0000000..f8a90f6 --- /dev/null +++ b/src/addons/fmod/libs/windows/fmodstudio_vc.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ce90859f8ae8c6600d48a3540ea832a4f0a04ecf569c6b4dbfe1ac368707ef4 +size 162484 diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.dll b/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.dll new file mode 100644 index 0000000..81afdda --- /dev/null +++ b/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95b694f24406881f04d8d76d5751e1b9043118ed9a53504e168764f6aba8353b +size 1295360 diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.exp b/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.exp new file mode 100644 index 0000000..8be19e9 Binary files /dev/null and b/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.exp differ diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.lib b/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.lib new file mode 100644 index 0000000..674d234 --- /dev/null +++ b/src/addons/fmod/libs/windows/libGodotFmod.windows.editor.x86_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77017a60a1f1b996fdfc3b4300640931930adad7382668c1ec53fb65df3ed11d +size 2172 diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.dll b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.dll new file mode 100644 index 0000000..1f135c1 --- /dev/null +++ b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:685eff2b7bcf40b24cb31b2b08b1bd10d97efeae66f5fc6600f9a01f81f3dd18 +size 1205760 diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.exp b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.exp new file mode 100644 index 0000000..c6b1c37 Binary files /dev/null and b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.exp differ diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.lib b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.lib new file mode 100644 index 0000000..9e063c6 --- /dev/null +++ b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_debug.x86_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39023e16b21a313bdbedffe668a968a9266c6447a094591d49ed2ab2ffb48f3a +size 2276 diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.dll b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.dll new file mode 100644 index 0000000..3ce6259 --- /dev/null +++ b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57ae792e0bdc16560f836f0eeaff2cd96c68300771f54dae5a311055bce63fd2 +size 969728 diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.exp b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.exp new file mode 100644 index 0000000..15d7ffc Binary files /dev/null and b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.exp differ diff --git a/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.lib b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.lib new file mode 100644 index 0000000..fe68be7 --- /dev/null +++ b/src/addons/fmod/libs/windows/libGodotFmod.windows.template_release.x86_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9189b4868c6e50a3a2aebe6bfa7497e9c11ef0562d079c7e6838bac5bd748aed +size 2302 diff --git a/src/addons/fmod/plugin.cfg b/src/addons/fmod/plugin.cfg new file mode 100644 index 0000000..3ed6bfc --- /dev/null +++ b/src/addons/fmod/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="FMOD GDExtension" +description="FMOD GDExtension for Godot Engine 4.4" +author="Utopia-rise, Tristan Grespinet, Pierre-Thomas Meisels" +version="5.0.5" +script="FmodPlugin.gd" diff --git a/src/addons/fmod/tool/FmodBankDatabase.gd b/src/addons/fmod/tool/FmodBankDatabase.gd new file mode 100644 index 0000000..7042088 --- /dev/null +++ b/src/addons/fmod/tool/FmodBankDatabase.gd @@ -0,0 +1,44 @@ +extends Node + +class_name FmodBankDatabase + + +static var banks := Array() +const MASTER_STRINGS_BANK_NAME = "Master.strings.bank" +const MASTER_BANK_NAME = "Master.bank" + +static func reload_all_banks(): + banks.clear() + + var banks_root = ProjectSettings.get_setting("Fmod/General/banks_path", "") + var master_strings_bank_path = "%s/%s" % [banks_root, MASTER_STRINGS_BANK_NAME] + var master_bank_path = "%s/%s" % [banks_root, MASTER_BANK_NAME] + + if not FileAccess.file_exists(master_strings_bank_path): + push_warning("Cannot find master strings bank at %s" % master_strings_bank_path) + return + + if not FileAccess.file_exists(master_bank_path): + push_warning("Cannot find master bank at %s" % master_bank_path) + return + + banks.append( + FmodServer.load_bank(master_strings_bank_path, FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL) + ) + banks.append( + FmodServer.load_bank(master_bank_path, FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL) + ) + + var dir: DirAccess = DirAccess.open(banks_root) + if dir: + dir.list_dir_begin() + var file_name : String = dir.get_next() + while file_name != "": + if dir.current_is_dir(): + pass # the found item is a directory + elif file_name.ends_with(".bank") and file_name != MASTER_STRINGS_BANK_NAME and file_name != MASTER_BANK_NAME: + banks.append( + FmodServer.load_bank("%s/%s" % [banks_root, file_name], FmodServer.FMOD_STUDIO_LOAD_BANK_NORMAL) + ) + file_name = dir.get_next() + diff --git a/src/addons/fmod/tool/FmodBankDatabase.gd.uid b/src/addons/fmod/tool/FmodBankDatabase.gd.uid new file mode 100644 index 0000000..fa647d4 --- /dev/null +++ b/src/addons/fmod/tool/FmodBankDatabase.gd.uid @@ -0,0 +1 @@ +uid://dklrc5eyc1gp4 diff --git a/src/addons/fmod/tool/inspectors/FmodBankLoaderPropertyInspectorPlugin.gd b/src/addons/fmod/tool/inspectors/FmodBankLoaderPropertyInspectorPlugin.gd new file mode 100644 index 0000000..e679bb9 --- /dev/null +++ b/src/addons/fmod/tool/inspectors/FmodBankLoaderPropertyInspectorPlugin.gd @@ -0,0 +1,20 @@ +class_name FmodBankLoaderPropertyInspectorPlugin extends EditorInspectorPlugin + +static var bank_icon = load("res://addons/fmod/icons/bank_icon.svg") + +var _open_project_explorer_callable: Callable + +func _init(plugin: FmodPlugin): + _open_project_explorer_callable = plugin.open_project_explorer_bank + +func _can_handle(object: Object): + return object is FmodBankLoader + +func _parse_property(object: Object, type: Variant.Type, name: String, hint_type: PropertyHint, hint_string: String, usage_flags: int, wide: bool): + return name == "bank_paths" + +func _parse_category(object: Object, category: String): + if category != "FmodBankLoader": + return + var editor_property := FmodBankPathEditorProperty.new(_open_project_explorer_callable) + add_property_editor("bank_paths", editor_property, false, "Fmod banks") diff --git a/src/addons/fmod/tool/inspectors/FmodBankLoaderPropertyInspectorPlugin.gd.uid b/src/addons/fmod/tool/inspectors/FmodBankLoaderPropertyInspectorPlugin.gd.uid new file mode 100644 index 0000000..6b3c0ee --- /dev/null +++ b/src/addons/fmod/tool/inspectors/FmodBankLoaderPropertyInspectorPlugin.gd.uid @@ -0,0 +1 @@ +uid://tnljjxahubam diff --git a/src/addons/fmod/tool/inspectors/FmodEmitterPropertyInspectorPlugin.gd b/src/addons/fmod/tool/inspectors/FmodEmitterPropertyInspectorPlugin.gd new file mode 100644 index 0000000..bc58619 --- /dev/null +++ b/src/addons/fmod/tool/inspectors/FmodEmitterPropertyInspectorPlugin.gd @@ -0,0 +1,21 @@ +class_name FmodEmitterPropertyInspectorPlugin extends EditorInspectorPlugin + +var _open_project_explorer_callable: Callable +var _event_editor_property_scene: PackedScene = load("res://addons/fmod/tool/property_editors/FmodEventEditorProperty.tscn") + +func _init(plugin: FmodPlugin): + _open_project_explorer_callable = plugin.open_project_explorer_events + +func _can_handle(object: Object): + return object is FmodEventEmitter2D or \ + object is FmodEventEmitter3D + +func _parse_property(object: Object, type: Variant.Type, name: String, hint_type: PropertyHint, hint_string: String, usage_flags: int, wide: bool): + return name == "event_name" || name == "event_guid" + +func _parse_category(object: Object, category: String): + if category != "FmodEventEmitter2D" and category != "FmodEventEmitter3D": + return + var editor_property := _event_editor_property_scene.instantiate() + editor_property.initialize(_open_project_explorer_callable, "event_name", "event_guid") + add_property_editor_for_multiple_properties("Fmod event", PackedStringArray(["event_name", "event_guid"]), editor_property) diff --git a/src/addons/fmod/tool/inspectors/FmodEmitterPropertyInspectorPlugin.gd.uid b/src/addons/fmod/tool/inspectors/FmodEmitterPropertyInspectorPlugin.gd.uid new file mode 100644 index 0000000..b3f1f5e --- /dev/null +++ b/src/addons/fmod/tool/inspectors/FmodEmitterPropertyInspectorPlugin.gd.uid @@ -0,0 +1 @@ +uid://co1ktq45h26wx diff --git a/src/addons/fmod/tool/performances/PerformancesDisplay.gd b/src/addons/fmod/tool/performances/PerformancesDisplay.gd new file mode 100644 index 0000000..35eeac5 --- /dev/null +++ b/src/addons/fmod/tool/performances/PerformancesDisplay.gd @@ -0,0 +1,61 @@ +class_name PerformancesDisplay extends Node + + +const CORE_CPU_DSP_CATEGORY = "FMOD [Core]/Cpu DSP" +const CORE_CPU_GEOMETRY_CATEGORY = "FMOD [Core]/Cpu Geometry" +const CORE_CPU_STREAM_CATEGORY = "FMOD [Core]/Cpu Stream" +const CORE_CPU_UPDATE_CATEGORY = "FMOD/[Core] Cpu Update" +const CORE_CPU_CONVOLUTION_THREAD1_CATEGORY = "FMOD/[Core] Cpu convolution Thread 1" +const CORE_CPU_CONVOLUTION_THREAD2_CATEGORY = "FMOD/[Core] Cpu convolution Thread 2" + +const STUDIO_CPU_UPDATE_CATEGORY = "FMOD/[Studio] Cpu Update" + +const MEMORY_CURRENTLY_ALLOCATED_CATEGORY = "FMOD/[Memory] Currently allocated" +const MEMORY_MAX_ALLOCATED_CATEGORY = "FMOD/[Memory] Max allocated" + +const FILE_SAMPLE_CATEGORY = "FMOD/[File] Sample bytes read" +const FILE_STREAM_CATEGORY = "FMOD/[File] Stream bytes read" +const FILE_OTHER_CATEGORY = "FMOD/[File] Other bytes read" + +func _enter_tree(): + var performance_data: FmodPerformanceData = FmodServer.get_performance_data() + add_monitor(CORE_CPU_DSP_CATEGORY, func(): return performance_data.dsp) + add_monitor(CORE_CPU_GEOMETRY_CATEGORY, func(): return performance_data.geometry) + add_monitor(CORE_CPU_STREAM_CATEGORY, func(): return performance_data.stream) + add_monitor(CORE_CPU_UPDATE_CATEGORY, func(): return performance_data.update) + add_monitor(CORE_CPU_CONVOLUTION_THREAD1_CATEGORY, func(): return performance_data.convolution1) + add_monitor(CORE_CPU_CONVOLUTION_THREAD2_CATEGORY, func(): return performance_data.convolution2) + + add_monitor(STUDIO_CPU_UPDATE_CATEGORY, func(): return performance_data.studio) + + add_monitor(MEMORY_CURRENTLY_ALLOCATED_CATEGORY, func(): return performance_data.currently_allocated) + add_monitor(MEMORY_MAX_ALLOCATED_CATEGORY, func(): return performance_data.max_allocated) + + add_monitor(FILE_SAMPLE_CATEGORY, func(): return performance_data.sample_bytes_read) + add_monitor(FILE_STREAM_CATEGORY, func(): return performance_data.stream_bytes_read) + add_monitor(FILE_OTHER_CATEGORY, func(): return performance_data.other_bytes_read) + +func _exit_tree() -> void: + remove_monitor(CORE_CPU_DSP_CATEGORY) + remove_monitor(CORE_CPU_GEOMETRY_CATEGORY) + remove_monitor(CORE_CPU_STREAM_CATEGORY) + remove_monitor(CORE_CPU_UPDATE_CATEGORY) + remove_monitor(CORE_CPU_CONVOLUTION_THREAD1_CATEGORY) + remove_monitor(CORE_CPU_CONVOLUTION_THREAD2_CATEGORY) + + remove_monitor(STUDIO_CPU_UPDATE_CATEGORY) + + remove_monitor(MEMORY_CURRENTLY_ALLOCATED_CATEGORY) + remove_monitor(MEMORY_MAX_ALLOCATED_CATEGORY) + + remove_monitor(FILE_SAMPLE_CATEGORY) + remove_monitor(FILE_STREAM_CATEGORY) + remove_monitor(FILE_OTHER_CATEGORY) + +func add_monitor(title: String, callable: Callable) -> void: + if not Performance.has_custom_monitor(title): + Performance.add_custom_monitor(title, callable) + +func remove_monitor(title: String) -> void: + if Performance.has_custom_monitor(title): + Performance.remove_custom_monitor(title) diff --git a/src/addons/fmod/tool/performances/PerformancesDisplay.gd.uid b/src/addons/fmod/tool/performances/PerformancesDisplay.gd.uid new file mode 100644 index 0000000..8013914 --- /dev/null +++ b/src/addons/fmod/tool/performances/PerformancesDisplay.gd.uid @@ -0,0 +1 @@ +uid://bc0uajlvc0u00 diff --git a/src/addons/fmod/tool/property_editors/FmodBankPathEditorProperty.gd b/src/addons/fmod/tool/property_editors/FmodBankPathEditorProperty.gd new file mode 100644 index 0000000..ee61c26 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodBankPathEditorProperty.gd @@ -0,0 +1,88 @@ +class_name FmodBankPathEditorProperty extends EditorProperty + +var path_property_name := "bank_paths" + +var ui: Control +var last_selected_index := -1 + +func _init(open_project_explorer_callable: Callable): + ui = load("res://addons/fmod/tool/property_editors/FmodBankPathsPropertyEditorUi.tscn").instantiate() + add_child(ui) + var add_button: Button = ui.get_node("%AddButton") + + var open_project_explorer_event = func open_project_explorer_event(): + open_project_explorer_callable.call(self._set_path_and_guid) + add_button.pressed.connect(open_project_explorer_event) + + var remove_button: Button = ui.get_node("%RemoveButton") + remove_button.pressed.connect(_on_remove_button) + + var manual_add_button: Button = ui.get_node("%ManualAddButton") + manual_add_button.pressed.connect(_on_manual_add_button) + + var up_button: Button = ui.get_node("%UpButton") + up_button.pressed.connect(_on_move_button.bind(false)) + + var down_button: Button = ui.get_node("%DownButton") + down_button.pressed.connect(_on_move_button.bind(true)) + +func _update_property(): + var bank_list: ItemList = ui.get_node("%BankList") + bank_list.clear() + var bank_paths: Array = get_edited_object()[path_property_name] + for path in bank_paths: + bank_list.add_item(path) + + if last_selected_index == -1: + return + bank_list.select(last_selected_index) + last_selected_index = -1 + +func _set_path_and_guid(path: String, _cancel: String): + var current_bank_paths: Array = get_edited_object()[path_property_name] + + if current_bank_paths.has(path): + return + + var bank_paths := Array(current_bank_paths) + bank_paths.append(path) + emit_changed(path_property_name, bank_paths) + +func _on_remove_button(): + var bank_list: ItemList = ui.get_node("%BankList") + var current_bank_paths: Array = get_edited_object()[path_property_name] + var bank_paths := Array(current_bank_paths) + var selected_items_indexes: PackedInt32Array = bank_list.get_selected_items() + if selected_items_indexes.is_empty(): + return + var item = bank_list.get_item_text(selected_items_indexes[0]) + var in_list_index = bank_paths.find(item) + bank_paths.remove_at(in_list_index) + last_selected_index = in_list_index if in_list_index < bank_paths.size() else in_list_index - 1 + emit_changed(path_property_name, bank_paths) + +func _on_manual_add_button(): + var manual_add_line_edit: LineEdit = ui.get_node("%ManualAddLineEdit") + var to_add: String = manual_add_line_edit.text + if not to_add.begins_with("res://") || not to_add.ends_with(".bank"): + return + _set_path_and_guid(to_add, "") + manual_add_line_edit.text = "" + +func _on_move_button(is_down: bool): + var bank_list: ItemList = ui.get_node("%BankList") + var current_bank_paths: Array = get_edited_object()[path_property_name] + var bank_paths := Array(current_bank_paths) + var selected_items_indexes: PackedInt32Array = bank_list.get_selected_items() + if selected_items_indexes.is_empty(): + return + var item = bank_list.get_item_text(selected_items_indexes[0]) + var in_list_index = bank_paths.find(item) + var boundary = current_bank_paths.size() - 1 if is_down else 0 + if in_list_index == boundary: + return + var new_index = in_list_index + 1 if is_down else in_list_index - 1 + bank_paths.remove_at(in_list_index) + bank_paths.insert(new_index, item) + last_selected_index = new_index + emit_changed(path_property_name, bank_paths) diff --git a/src/addons/fmod/tool/property_editors/FmodBankPathEditorProperty.gd.uid b/src/addons/fmod/tool/property_editors/FmodBankPathEditorProperty.gd.uid new file mode 100644 index 0000000..bf989a5 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodBankPathEditorProperty.gd.uid @@ -0,0 +1 @@ +uid://cxyd4qioylvgr diff --git a/src/addons/fmod/tool/property_editors/FmodBankPathsPropertyEditorUi.tscn b/src/addons/fmod/tool/property_editors/FmodBankPathsPropertyEditorUi.tscn new file mode 100644 index 0000000..a4162f5 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodBankPathsPropertyEditorUi.tscn @@ -0,0 +1,60 @@ +[gd_scene load_steps=2 format=3 uid="uid://dtlwk8wdeal3h"] + +[ext_resource type="Texture2D" uid="uid://o2chsr07oeqs" path="res://addons/fmod/icons/bank_icon.svg" id="1_11c48"] + +[node name="FmodBankPathsPropertyEditorUi" type="VBoxContainer"] +offset_right = 92.0 +offset_bottom = 43.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="AddButton" type="Button" parent="HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "+" +icon = ExtResource("1_11c48") +icon_alignment = 2 + +[node name="RemoveButton" type="Button" parent="HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "-" + +[node name="VSeparator" type="VSeparator" parent="HBoxContainer"] +layout_mode = 2 + +[node name="UpButton" type="Button" parent="HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "↑" + +[node name="DownButton" type="Button" parent="HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "↓" + +[node name="BankList" type="ItemList" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +auto_height = true + +[node name="HBoxContainer2" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="ManualAddLineEdit" type="LineEdit" parent="HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="ManualAddButton" type="Button" parent="HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +text = "+" diff --git a/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.gd b/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.gd new file mode 100644 index 0000000..4032b74 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.gd @@ -0,0 +1,101 @@ +@tool class_name FmodEventEditorProperty extends FmodPathEditorProperty + + +static var EVENT_PARAMETER_PREFIX_FOR_PROPERTIES = "fmod_parameters" + +var former_event_description: FmodEventDescription + +func _update_property(): + super() + if get_edited_object().event_name == "": + return + _update_parameters() + var event_description: FmodEventDescription = FmodServer.get_event_from_guid(get_edited_object().event_guid) + + if event_description == null: + event_description = FmodServer.get_event(get_edited_object().event_name) + + former_event_description = event_description + +func _set_path_and_guid(path: String, guid: String): + super(path, guid) + if get_edited_object().event_name == "": + return + _update_parameters() + former_event_description = FmodServer.get_event_from_guid(get_edited_object().event_guid) + +func _update_parameters(): + var event_description: FmodEventDescription = FmodServer.get_event_from_guid(get_edited_object().event_guid) + + if event_description == null: + return + + if former_event_description != null and event_description != former_event_description: + get_edited_object().tool_remove_all_parameters() + + var map_to_property_name = func map_to_property_name(dict: Dictionary): + return dict["name"] + var filter_fmod_parameter_property = func filter_fmod_parameter_property(parameter_name: String): + return parameter_name.begins_with(EVENT_PARAMETER_PREFIX_FOR_PROPERTIES) + + var filter_property_id = func filter_property_id(property: String): + return property.ends_with("/id") + var existing_property_ids = get_edited_object().get_property_list().map(map_to_property_name).filter(filter_fmod_parameter_property).filter(filter_property_id) + + var map_property_name_to_parameter_name = func map_property_name_to_parameter_name(parameter: String): + return parameter.split("/")[1] + var existing_parameter_names = existing_property_ids.map(map_property_name_to_parameter_name) + + var map_property_id_to_parameter_id_value = func map_property_id_to_parameter_id_value(property: String): + return get_edited_object()[property] + var existing_parameter_ids = existing_property_ids.map(map_property_id_to_parameter_id_value) + + var property_matching = existing_parameter_ids.map(func(id): return false) + + for param: FmodParameterDescription in event_description.get_parameters(): + if param.is_global() or param.is_automatic() or param.is_read_only(): + continue + + var parameter_name = param.get_name() + var parameter_id_param = "%s/%s/id" % [EVENT_PARAMETER_PREFIX_FOR_PROPERTIES, parameter_name] + var parameter_value_param = "%s/%s" % [EVENT_PARAMETER_PREFIX_FOR_PROPERTIES, parameter_name] + var parameter_variant_type = "%s/%s/variant_type" % [EVENT_PARAMETER_PREFIX_FOR_PROPERTIES, parameter_name] + var parameter_labels = "%s/%s/labels" % [EVENT_PARAMETER_PREFIX_FOR_PROPERTIES, parameter_name] + + var existing_property_name_index = existing_property_ids.find(parameter_id_param) + var are_properties_already_in_node = existing_property_name_index != -1 + + var parameter_id = param.get_id() + + var variant_type: Variant.Type = TYPE_FLOAT + var default_value = param.get_default_value() + var minimum_value = param.get_minimum() + var maximum_value = param.get_maximum() + if param.is_labeled(): + variant_type = TYPE_STRING + default_value = event_description.get_parameter_label_by_id(parameter_id, default_value) + minimum_value = event_description.get_parameter_label_by_id(parameter_id, minimum_value) + maximum_value = event_description.get_parameter_label_by_id(parameter_id, maximum_value) + elif param.is_discrete(): + variant_type = TYPE_INT + default_value = int(default_value) + minimum_value = int(minimum_value) + maximum_value = int(maximum_value) + + if are_properties_already_in_node: + property_matching[existing_property_name_index] = existing_parameter_ids[existing_property_name_index] == parameter_id + + if not are_properties_already_in_node or get_edited_object()[parameter_id_param] == null: + get_edited_object()[parameter_id_param] = parameter_id + if not are_properties_already_in_node or get_edited_object()[parameter_value_param] == null: + get_edited_object()[parameter_value_param] = default_value + if not are_properties_already_in_node or get_edited_object()[parameter_variant_type] == null: + get_edited_object()[parameter_variant_type] = variant_type + if param.is_labeled() and (not are_properties_already_in_node or get_edited_object()[parameter_labels] == null): + get_edited_object()[parameter_labels] = event_description.get_parameter_labels_by_id(parameter_id) + + for i in property_matching.size(): + if not property_matching[i]: + get_edited_object().tool_remove_parameter(existing_parameter_ids[i]) + + get_edited_object().notify_property_list_changed() diff --git a/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.gd.uid b/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.gd.uid new file mode 100644 index 0000000..7afcc53 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.gd.uid @@ -0,0 +1 @@ +uid://b32x60k0th8td diff --git a/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.tscn b/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.tscn new file mode 100644 index 0000000..2e43554 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodEventEditorProperty.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=3 format=3 uid="uid://cowfthogh1n7i"] + +[ext_resource type="PackedScene" uid="uid://cujo3xq0erren" path="res://addons/fmod/tool/property_editors/FmodPathEditorProperty.tscn" id="1_xvpec"] +[ext_resource type="Script" uid="uid://b32x60k0th8td" path="res://addons/fmod/tool/property_editors/FmodEventEditorProperty.gd" id="2_nkhkm"] + +[node name="FmodEventEditorProperty" instance=ExtResource("1_xvpec")] +script = ExtResource("2_nkhkm") diff --git a/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.gd b/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.gd new file mode 100644 index 0000000..783c6b9 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.gd @@ -0,0 +1,10 @@ +@tool class_name FmodGuidAndPathPropertyEditorUi extends HBoxContainer + + +func set_callables(window_callable: Callable, path_callable: Callable, guid_callable: Callable): + %EventExplorerButton.pressed.connect(window_callable) + %PathLineEdit.text_changed.connect(path_callable) + %GuidLineEdit.text_changed.connect(guid_callable) + +func set_icon(icon: Texture2D): + %EventExplorerButton.icon = icon diff --git a/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.gd.uid b/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.gd.uid new file mode 100644 index 0000000..f2f083a --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.gd.uid @@ -0,0 +1 @@ +uid://3xn18ci172v4 diff --git a/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.tscn b/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.tscn new file mode 100644 index 0000000..423e4d4 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=3 format=3 uid="uid://hy04frgfhtgu"] + +[ext_resource type="Script" uid="uid://3xn18ci172v4" path="res://addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.gd" id="1_eao7t"] +[ext_resource type="Texture2D" uid="uid://cmpgmbn3y4svl" path="res://addons/fmod/icons/event_icon.svg" id="1_kuu6i"] + +[node name="FmodGuidAndPathPropertyEditorUi" type="HBoxContainer"] +offset_right = 1152.0 +offset_bottom = 66.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("1_eao7t") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PathLineEdit" type="LineEdit" parent="VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="GuidLineEdit" type="LineEdit" parent="VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="EventExplorerButton" type="Button" parent="."] +unique_name_in_owner = true +layout_mode = 2 +icon = ExtResource("1_kuu6i") diff --git a/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.gd b/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.gd new file mode 100644 index 0000000..bc51780 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.gd @@ -0,0 +1,40 @@ +@tool class_name FmodPathEditorProperty extends EditorProperty + +var ui: Control +var guid_property: String +var path_property: String +var regex := RegEx.new() + +var default_line_edit_modulate: Color + +func initialize(open_project_explorer_callable: Callable, path_prop: String, guid_prop: String): + regex.compile("{\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}}") + guid_property = guid_prop + path_property = path_prop + var guid_and_path_ui: FmodGuidAndPathPropertyEditorUi = %FmodGuidAndPathPropertyEditorUi + + default_line_edit_modulate = guid_and_path_ui.get_node("%GuidLineEdit").modulate + + var open_project_explorer_event = func open_project_explorer_event(): + open_project_explorer_callable.call(self._set_path_and_guid) + guid_and_path_ui.set_callables(open_project_explorer_event, _set_path, _set_guid) + +func _update_property(): + var guid_and_path_ui = %FmodGuidAndPathPropertyEditorUi + guid_and_path_ui.get_node("%PathLineEdit").text = get_edited_object()[path_property] + guid_and_path_ui.get_node("%GuidLineEdit").text = get_edited_object()[guid_property] + +func _set_path(path: String): + emit_changed(path_property, path) + +func _set_guid(guid: String): + var line_edit := %FmodGuidAndPathPropertyEditorUi.get_node("%GuidLineEdit") as LineEdit + if not regex.search(guid): + line_edit.modulate = Color.RED + return + line_edit.modulate = default_line_edit_modulate + emit_changed(guid_property, guid) + +func _set_path_and_guid(path: String, guid: String): + _set_path(path) + _set_guid(guid) diff --git a/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.gd.uid b/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.gd.uid new file mode 100644 index 0000000..84d9b97 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.gd.uid @@ -0,0 +1 @@ +uid://qshng8csi2fr diff --git a/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.tscn b/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.tscn new file mode 100644 index 0000000..bab3416 --- /dev/null +++ b/src/addons/fmod/tool/property_editors/FmodPathEditorProperty.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://cujo3xq0erren"] + +[ext_resource type="Script" uid="uid://qshng8csi2fr" path="res://addons/fmod/tool/property_editors/FmodPathEditorProperty.gd" id="1_4e4vx"] +[ext_resource type="PackedScene" uid="uid://hy04frgfhtgu" path="res://addons/fmod/tool/property_editors/FmodGuidAndPathPropertyEditorUi.tscn" id="2_nvtqg"] + +[node name="FmodPathEditorProperty" type="EditorProperty"] +script = ExtResource("1_4e4vx") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 + +[node name="FmodGuidAndPathPropertyEditorUi" parent="VBoxContainer" instance=ExtResource("2_nvtqg")] +unique_name_in_owner = true +layout_mode = 2 diff --git a/src/addons/fmod/tool/ui/EventParametersDisplay.gd b/src/addons/fmod/tool/ui/EventParametersDisplay.gd new file mode 100644 index 0000000..71c98c7 --- /dev/null +++ b/src/addons/fmod/tool/ui/EventParametersDisplay.gd @@ -0,0 +1,22 @@ +@tool class_name EventParametersDisplay extends ScrollContainer + +static var parameter_display_scene: PackedScene = load("res://addons/fmod/tool/ui/ParameterDisplay.tscn") + +func set_fmod_event(event: FmodEventDescription) -> bool: # returns false if there were no parameters + for child in %ParameterDisplaysContainer.get_children(): + %ParameterDisplaysContainer.remove_child(child) + child.queue_free() + + var event_parameters: Array = event.get_parameters() + if event_parameters: + show() + for parameter : FmodParameterDescription in event_parameters: + var parameter_display: ParameterDisplay = parameter_display_scene.instantiate() + parameter_display.set_event_description(event) + parameter_display.set_parameter(parameter) + if %ParameterDisplaysContainer.get_child_count() > 0: + %ParameterDisplaysContainer.add_child(HSeparator.new()) + %ParameterDisplaysContainer.add_child(parameter_display) + return true # we had parameters to show! + else: + return false # no parameters to visualise diff --git a/src/addons/fmod/tool/ui/EventParametersDisplay.gd.uid b/src/addons/fmod/tool/ui/EventParametersDisplay.gd.uid new file mode 100644 index 0000000..3157d3f --- /dev/null +++ b/src/addons/fmod/tool/ui/EventParametersDisplay.gd.uid @@ -0,0 +1 @@ +uid://7relkis52fsu diff --git a/src/addons/fmod/tool/ui/EventParametersDisplay.tscn b/src/addons/fmod/tool/ui/EventParametersDisplay.tscn new file mode 100644 index 0000000..f6f3049 --- /dev/null +++ b/src/addons/fmod/tool/ui/EventParametersDisplay.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=2 format=3 uid="uid://cppeyr1ke5wre"] + +[ext_resource type="Script" uid="uid://7relkis52fsu" path="res://addons/fmod/tool/ui/EventParametersDisplay.gd" id="1_2l58q"] + +[node name="EventParametersDisplay" type="ScrollContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("1_2l58q") + +[node name="ParameterDisplaysContainer" type="VBoxContainer" parent="."] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 diff --git a/src/addons/fmod/tool/ui/EventParametersWindow.tscn b/src/addons/fmod/tool/ui/EventParametersWindow.tscn new file mode 100644 index 0000000..2d6520b --- /dev/null +++ b/src/addons/fmod/tool/ui/EventParametersWindow.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=3 uid="uid://skp8awewyl85"] + +[ext_resource type="PackedScene" uid="uid://cppeyr1ke5wre" path="res://addons/fmod/tool/ui/EventParametersDisplay.tscn" id="1_clkxg"] + +[node name="EventParametersWindow" type="Window"] + +[node name="EventParametersDisplay" parent="." instance=ExtResource("1_clkxg")] diff --git a/src/addons/fmod/tool/ui/EventPlayControls.gd b/src/addons/fmod/tool/ui/EventPlayControls.gd new file mode 100644 index 0000000..b97c404 --- /dev/null +++ b/src/addons/fmod/tool/ui/EventPlayControls.gd @@ -0,0 +1,52 @@ +@tool +extends PanelContainer + +@export var play_button : Button +@export var stop_button : Button +@export var fade_out_toggle : CheckButton +var event_instance : FmodEvent + +func _ready() -> void: + hide() + play_button.icon = EditorInterface.get_editor_theme().get_icon("Play", "EditorIcons") + stop_button.icon = EditorInterface.get_editor_theme().get_icon("Stop", "EditorIcons") + play_button.pressed.connect(on_play_button_pressed) + stop_button.pressed.connect(on_stop_button_pressed) + + +func set_fmod_event(_event_description : FmodEventDescription) -> void: + stop_and_release_instance() # always stop and release if a previous one is active + event_instance = FmodServer.create_event_instance_with_guid(_event_description.get_guid()) + show() + + +func play_event() -> void: + if event_instance: + event_instance.start() + + +func stop_event() -> void: + if event_instance: + var stop_mode : int = FmodServer.FMOD_STUDIO_STOP_IMMEDIATE + if fade_out_toggle.button_pressed: + stop_mode = FmodServer.FMOD_STUDIO_STOP_ALLOWFADEOUT + + event_instance.stop(stop_mode) + + +func _exit_tree() -> void: + stop_and_release_instance() + + +func stop_and_release_instance() -> void: + if event_instance: + event_instance.stop(0) + event_instance.release() + + +func on_play_button_pressed() -> void: + play_event() + + +func on_stop_button_pressed() -> void: + stop_event() diff --git a/src/addons/fmod/tool/ui/EventPlayControls.gd.uid b/src/addons/fmod/tool/ui/EventPlayControls.gd.uid new file mode 100644 index 0000000..4bbac12 --- /dev/null +++ b/src/addons/fmod/tool/ui/EventPlayControls.gd.uid @@ -0,0 +1 @@ +uid://vgmq7hfrbddw diff --git a/src/addons/fmod/tool/ui/FmodBankExplorer.gd b/src/addons/fmod/tool/ui/FmodBankExplorer.gd new file mode 100644 index 0000000..f358f29 --- /dev/null +++ b/src/addons/fmod/tool/ui/FmodBankExplorer.gd @@ -0,0 +1,237 @@ +@tool class_name FmodBankExplorer extends Window + +enum ToDisplayFlags { + BANKS = 1, + BUSES = 2, + VCA = 4, + EVENTS = 8 +} + +static var _fmod_icon = load("res://addons/fmod/icons/fmod_icon.svg") +static var _vca_icon = load("res://addons/fmod/icons/vca_icon.svg") +static var _bank_icon = load("res://addons/fmod/icons/bank_icon.svg") +static var _event_icon = load("res://addons/fmod/icons/event_icon.svg") +static var _bus_icon = load("res://addons/fmod/icons/bus_icon.svg") +static var _snapshot_icon = load("res://addons/fmod/icons/snapshot_icon.svg") + +signal emit_path_and_guid(path: String, guid: String) + +var tree: Tree +@onready var copy_path_button := %PathLabel.get_child(0) +@onready var copy_guid_button := %GuidLabel.get_child(0) + +var should_display_copy_buttons = true +var should_display_select_button = false + +var _current_select_callable: Callable + +var base_color: Color +var contrast: float +var background_color: Color + +var banks: Array = Array() + +func _ready(): + var main_window_size = get_parent().get_window().size + size = main_window_size * 0.5 + + var copy_texture : Texture = EditorInterface.get_editor_theme().get_icon("ActionCopy", "EditorIcons") + copy_guid_button.icon = copy_texture + copy_path_button.icon = copy_texture + copy_guid_button.visible = false + copy_path_button.visible = false + copy_path_button.pressed.connect(_on_copy_path_button) + copy_guid_button.pressed.connect(_on_copy_guid_button) + + var emit_path_and_guid_callable = func emit_path_and_guid_callable(): + var selected_item = tree.get_selected() + if selected_item == null: + return + var selected_fmod_element = selected_item.get_metadata(0) + if selected_fmod_element == null: + return + + var path = selected_fmod_element.get_godot_res_path() if selected_fmod_element is FmodBank else selected_fmod_element.get_path() + emit_path_and_guid.emit(path, selected_fmod_element.get_guid()) + %SelectButton.pressed.connect(emit_path_and_guid_callable) + %SelectButton.pressed.connect(close_window) + %CloseButton.pressed.connect(close_window) + close_requested.connect(close_window) + + tree = %Tree + tree.item_selected.connect(_on_item_selected) + + tree.columns = 1 + generate_tree(ToDisplayFlags.BANKS | ToDisplayFlags.BUSES | ToDisplayFlags.VCA | ToDisplayFlags.EVENTS) + + %RefreshBanksButton.pressed.connect(on_refresh_banks_button_pressed) + + +func regenerate_tree(to_display: int, callable: Callable = Callable()): + tree.clear() + generate_tree(to_display, callable) + + +func generate_tree(to_display: int, callable: Callable = Callable()): + %SelectButton.visible = should_display_select_button + if _current_select_callable != Callable() && _current_select_callable.get_object() != null: + emit_path_and_guid.disconnect(_current_select_callable) + _current_select_callable = callable + + var root_item := tree.create_item() + root_item.set_text(0, "Fmod objects") + root_item.set_icon(0, _fmod_icon) + + for bank in FmodServer.get_all_banks(): + var fmod_bank := bank as FmodBank + + var bank_item := tree.create_item(root_item) + bank_item.set_text(0, fmod_bank.get_godot_res_path()) + bank_item.set_icon(0, _bank_icon) + bank_item.set_metadata(0, bank) + + if to_display & ToDisplayFlags.BUSES: + var buses_item := tree.create_item(bank_item) + buses_item.set_text(0, "Buses") + buses_item.set_icon(0, _bus_icon) + + var buses := fmod_bank.get_bus_list() + buses.sort_custom(sort_by_path) + _add_elements_as_tree(buses, buses_item) + + if to_display & ToDisplayFlags.VCA: + var vca_item := tree.create_item(bank_item) + vca_item.set_text(0, "VCAs") + vca_item.set_icon(0, _vca_icon) + + var vcas := fmod_bank.get_vca_list() + vcas.sort_custom(sort_by_path) + _add_elements_as_tree(vcas, vca_item) + + if to_display & ToDisplayFlags.EVENTS: + var events_item := tree.create_item(bank_item) + events_item.set_text(0, "Events") + events_item.set_icon(0, _event_icon) + + var events := fmod_bank.get_description_list() + events.sort_custom(sort_by_path) + _add_elements_as_tree(events, events_item) + + if copy_path_button.visible: + copy_path_button.visible = should_display_copy_buttons + + if copy_guid_button.visible: + copy_guid_button.visible = should_display_copy_buttons + + if _current_select_callable != Callable(): + print(_current_select_callable) + emit_path_and_guid.connect(_current_select_callable) + + %SelectButton.visible = should_display_select_button and %GuidLabel.text != "" + + +func _add_elements_as_tree(elements: Array, parent: TreeItem): + var stack = Array() + for element in elements: + _add_element_to_stack(stack, parent, element) + + +func _add_element_to_stack(stack: Array, parent_root: TreeItem, path_element): + var fmod_path: String = path_element.get_path() + var path_parts := fmod_path.split("/") + if path_parts[path_parts.size() - 1] == "": + path_parts.remove_at(path_parts.size() - 1) + + for i in range(0, path_parts.size()): + var path_part = path_parts[i] + path_part = path_part if path_part != "bus:" else "Master" + + if i >= stack.size(): + var parent_item = parent_root if stack.is_empty() else stack[stack.size() - 1] + var tree_item = tree.create_item(parent_item) + tree_item.set_text(0, path_part) + if i == path_parts.size() - 1: + tree_item.set_metadata(0, path_element) + tree_item.set_icon(0, _get_icon_for_fmod_path(fmod_path)) + stack.append(tree_item) + continue + + if stack[i].get_text(0) != path_part: + for j in range(stack.size() - 1, i - 1, -1): + stack.remove_at(j) + + var parent_item = parent_root if stack.is_empty() else stack[stack.size() - 1] + var tree_item = tree.create_item(parent_item) + tree_item.set_text(0, path_part) + if i == path_parts.size() - 1: + tree_item.set_metadata(0, path_element) + tree_item.set_icon(0, _get_icon_for_fmod_path(fmod_path)) + stack.append(tree_item) + + +func _on_item_selected(): + var metadata = tree.get_selected().get_metadata(0) + if metadata == null or !metadata.get_guid(): + %PathsBG.hide() + %EventPlayControls.hide() + copy_path_button.visible = false + copy_guid_button.visible = false + %SelectButton.visible = false + %ParametersLabel.visible = false + %ParametersContainer.visible = false + return + %GuidLabel.set_text(metadata.get_guid()) + %PathLabel.set_text(metadata.get_path()) + %PathsBG.show() + if should_display_copy_buttons: + copy_path_button.visible = true + copy_guid_button.visible = true + if should_display_select_button: + %SelectButton.visible = true + + if metadata is FmodEventDescription: + %EventPlayControls.set_fmod_event(metadata) + var _show_parameter_controls : bool = %EventParametersDisplay.set_fmod_event(metadata) + %ParametersLabel.visible = _show_parameter_controls + %ParametersContainer.visible = _show_parameter_controls + return + %EventPlayControls.hide() + %EventParametersDisplay.hide() + %ParametersLabel.visible = false + %ParametersContainer.visible = false + +func _on_copy_path_button(): + DisplayServer.clipboard_set(%PathLabel.text) + +func _on_copy_guid_button(): + DisplayServer.clipboard_set(%GuidLabel.text) + + +func on_refresh_banks_button_pressed() -> void: + # unload banks + banks.clear() + tree.clear() + + FmodBankDatabase.reload_all_banks() + + generate_tree(ToDisplayFlags.BANKS | ToDisplayFlags.BUSES | ToDisplayFlags.VCA | ToDisplayFlags.EVENTS) + + +func close_window(): + %EventPlayControls.stop_event() + visible = false + +static func _get_icon_for_fmod_path(fmod_path: String) -> Texture2D: + var icon: Texture2D = null + if fmod_path.begins_with("bus:/"): + icon = _bus_icon + elif fmod_path.begins_with("event:/"): + icon = _event_icon + elif fmod_path.begins_with("vca:/"): + icon = _vca_icon + elif fmod_path.begins_with("snapshot:/"): + icon = _snapshot_icon + return icon + +static func sort_by_path(a, b): + return a.get_path().casecmp_to(b.get_path()) < 0 diff --git a/src/addons/fmod/tool/ui/FmodBankExplorer.gd.uid b/src/addons/fmod/tool/ui/FmodBankExplorer.gd.uid new file mode 100644 index 0000000..690c8c6 --- /dev/null +++ b/src/addons/fmod/tool/ui/FmodBankExplorer.gd.uid @@ -0,0 +1 @@ +uid://b5xgbibc3amtk diff --git a/src/addons/fmod/tool/ui/FmodBankExplorer.tscn b/src/addons/fmod/tool/ui/FmodBankExplorer.tscn new file mode 100644 index 0000000..28361c0 --- /dev/null +++ b/src/addons/fmod/tool/ui/FmodBankExplorer.tscn @@ -0,0 +1,348 @@ +[gd_scene load_steps=17 format=3 uid="uid://nr38urn226al"] + +[ext_resource type="Script" uid="uid://b5xgbibc3amtk" path="res://addons/fmod/tool/ui/FmodBankExplorer.gd" id="1_ekqus"] +[ext_resource type="Script" uid="uid://vgmq7hfrbddw" path="res://addons/fmod/tool/ui/EventPlayControls.gd" id="2_mleop"] +[ext_resource type="PackedScene" uid="uid://cppeyr1ke5wre" path="res://addons/fmod/tool/ui/EventParametersDisplay.tscn" id="2_uoyg8"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wrr0m"] +bg_color = Color(0, 0, 0, 0.247059) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(1, 1, 1, 0.207843) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_2pbsy"] + +[sub_resource type="LabelSettings" id="LabelSettings_3jkpq"] +font_size = 18 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0awfk"] +bg_color = Color(0, 0, 0, 0.14902) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color(0.8, 0.8, 0.8, 0.145098) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 + +[sub_resource type="LabelSettings" id="LabelSettings_d4isr"] + +[sub_resource type="Image" id="Image_potss"] +data = { +"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 184, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 184, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 181, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 181, 224, 224, 224, 255, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 181, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_piloo"] +image = SubResource("Image_potss") + +[sub_resource type="Image" id="Image_02ixt"] +data = { +"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 195, 224, 224, 224, 210, 224, 224, 224, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 224, 224, 224, 139, 224, 224, 224, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 215, 224, 224, 224, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 253, 224, 224, 224, 139, 224, 224, 224, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 252, 225, 225, 225, 134, 255, 255, 255, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 212, 226, 226, 226, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 252, 225, 225, 225, 134, 255, 255, 255, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 225, 225, 191, 224, 224, 224, 206, 226, 226, 226, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_p4ox3"] +image = SubResource("Image_02ixt") + +[sub_resource type="Image" id="Image_2s7ac"] +data = { +"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 225, 225, 182, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 225, 225, 182, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +"format": "RGBA8", +"height": 16, +"mipmaps": false, +"width": 16 +} + +[sub_resource type="ImageTexture" id="ImageTexture_26yvm"] +image = SubResource("Image_2s7ac") + +[sub_resource type="InputEventKey" id="InputEventKey_w47tf"] +device = -1 +keycode = 4194305 + +[sub_resource type="Shortcut" id="Shortcut_rarey"] +events = [SubResource("InputEventKey_w47tf")] + +[node name="FmodBankExplorer" type="Window"] +title = "Fmod banks explorer" +initial_position = 2 +size = Vector2i(1280, 508) +script = ExtResource("1_ekqus") + +[node name="BGPanel" type="Panel" parent="."] +unique_name_in_owner = true +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="WindowMargin" type="MarginContainer" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 16 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 16 +theme_override_constants/margin_bottom = 16 + +[node name="VBoxContainer" type="VBoxContainer" parent="WindowMargin"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="TopPanel" type="PanelContainer" parent="WindowMargin/VBoxContainer"] +custom_minimum_size = Vector2(0, 42.315) +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="WindowMargin/VBoxContainer/TopPanel"] +layout_mode = 2 +alignment = 2 + +[node name="RefreshBanksButton" type="Button" parent="WindowMargin/VBoxContainer/TopPanel/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Refresh Banks" + +[node name="BaseColorPanel" type="PanelContainer" parent="WindowMargin/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_wrr0m") + +[node name="MarginContainer" type="MarginContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 + +[node name="HSplitContainer" type="HSplitContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer"] +layout_mode = 2 + +[node name="Tree" type="Tree" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.54 +theme_override_styles/panel = SubResource("StyleBoxEmpty_2pbsy") +hide_root = true + +[node name="MarginContainer" type="MarginContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 + +[node name="RightPanelContent" type="VBoxContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="PathsLabel" type="Label" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent"] +visible = false +layout_mode = 2 +size_flags_vertical = 1 +text = "ID:" +label_settings = SubResource("LabelSettings_3jkpq") +justification_flags = 35 + +[node name="PathsBG" type="PanelContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_0awfk") + +[node name="MarginContainer" type="MarginContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="PathContainer" type="HBoxContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer"] +layout_mode = 2 + +[node name="TitleLabelContainer" type="VBoxContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer"] +layout_mode = 2 + +[node name="PathTitleLabel" type="Label" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer/TitleLabelContainer"] +layout_mode = 2 +size_flags_vertical = 6 +text = "Path:" +label_settings = SubResource("LabelSettings_d4isr") + +[node name="GuidTitleLabel" type="Label" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer/TitleLabelContainer"] +layout_mode = 2 +size_flags_vertical = 6 +text = "GUID: " +label_settings = SubResource("LabelSettings_d4isr") + +[node name="ValueContainer" type="VBoxContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PathLabel" type="Label" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer/ValueContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 6 +text = "asdfasdfasdfasdf" + +[node name="CopyPathLabel" type="Button" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer/ValueContainer/PathLabel"] +visible = false +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = 5.57001 +offset_top = -15.5 +offset_right = 36.57 +offset_bottom = 15.5 +grow_horizontal = 0 +grow_vertical = 2 +icon = SubResource("ImageTexture_piloo") + +[node name="GuidLabel" type="Label" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer/ValueContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 6 +text = "asdfasdf" +vertical_alignment = 1 + +[node name="CopyGuidLabel" type="Button" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/PathsBG/MarginContainer/PathContainer/ValueContainer/GuidLabel"] +visible = false +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = 6.095 +offset_top = -15.5 +offset_right = 37.095 +offset_bottom = 15.5 +grow_horizontal = 0 +grow_vertical = 2 +icon = SubResource("ImageTexture_piloo") + +[node name="ParametersLabel" type="Label" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent"] +unique_name_in_owner = true +visible = false +custom_minimum_size = Vector2(0, 45) +layout_mode = 2 +text = "Parameters:" +label_settings = SubResource("LabelSettings_3jkpq") +vertical_alignment = 2 + +[node name="ParametersContainer" type="PanelContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_0awfk") + +[node name="MarginContainer" type="MarginContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/ParametersContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="EventParametersDisplay" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/ParametersContainer/MarginContainer" instance=ExtResource("2_uoyg8")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="EventPlayControls" type="PanelContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent" node_paths=PackedStringArray("play_button", "stop_button", "fade_out_toggle")] +unique_name_in_owner = true +visible = false +custom_minimum_size = Vector2(0, 55.44) +layout_mode = 2 +size_flags_vertical = 10 +size_flags_stretch_ratio = 0.1 +theme_override_styles/panel = SubResource("StyleBoxFlat_0awfk") +script = ExtResource("2_mleop") +play_button = NodePath("MarginContainer/HBoxContainer/PlayEventButton") +stop_button = NodePath("MarginContainer/HBoxContainer/StopEventButton") +fade_out_toggle = NodePath("MarginContainer/HBoxContainer/FadeoutToggle") + +[node name="MarginContainer" type="MarginContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/EventPlayControls"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="HBoxContainer" type="HBoxContainer" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/EventPlayControls/MarginContainer"] +layout_mode = 2 + +[node name="PlayEventButton" type="Button" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/EventPlayControls/MarginContainer/HBoxContainer"] +layout_mode = 2 +text = "Play" +icon = SubResource("ImageTexture_p4ox3") + +[node name="StopEventButton" type="Button" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/EventPlayControls/MarginContainer/HBoxContainer"] +layout_mode = 2 +text = "Stop" +icon = SubResource("ImageTexture_26yvm") + +[node name="FadeoutToggle" type="CheckButton" parent="WindowMargin/VBoxContainer/BaseColorPanel/MarginContainer/HSplitContainer/MarginContainer/RightPanelContent/EventPlayControls/MarginContainer/HBoxContainer"] +layout_mode = 2 +text = "Allow fade out" + +[node name="MarginContainer" type="MarginContainer" parent="WindowMargin/VBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_top = 8 + +[node name="HBoxContainer" type="HBoxContainer" parent="WindowMargin/VBoxContainer/MarginContainer"] +layout_mode = 2 +alignment = 1 + +[node name="MarginContainer2" type="MarginContainer" parent="WindowMargin/VBoxContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_right = 8 + +[node name="SelectButton" type="Button" parent="WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/MarginContainer2"] +unique_name_in_owner = true +visible = false +layout_mode = 2 +size_flags_horizontal = 4 +text = "Select" + +[node name="MarginContainer" type="MarginContainer" parent="WindowMargin/VBoxContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_right = 8 + +[node name="CloseButton" type="Button" parent="WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/MarginContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +shortcut = SubResource("Shortcut_rarey") +text = "Close" diff --git a/src/addons/fmod/tool/ui/ParameterDisplay.gd b/src/addons/fmod/tool/ui/ParameterDisplay.gd new file mode 100644 index 0000000..e4d74e7 --- /dev/null +++ b/src/addons/fmod/tool/ui/ParameterDisplay.gd @@ -0,0 +1,66 @@ +@tool class_name ParameterDisplay extends MarginContainer + +var event_description: FmodEventDescription +var parameter: FmodParameterDescription + +func set_event_description(p_event_description: FmodEventDescription): + event_description = p_event_description + +func set_parameter(p_parameter: FmodParameterDescription): + show() + parameter = p_parameter + +func display_value_selector(should: bool): + %ValueSetterContainer.visible = should + +func _ready(): + if parameter == null: + hide() + return + var minimum_value = parameter.get_minimum() + var maximum_value = parameter.get_maximum() + var default_value = parameter.get_default_value() + + var copy_icon : Texture = EditorInterface.get_editor_theme().get_icon("ActionCopy", "EditorIcons") + %NameCopyButton.icon = copy_icon + %IdCopyButton.icon = copy_icon + + + %NameLabel.text = parameter.get_name() + %IdLabel.text = str(parameter.get_id()) + if parameter.is_labeled(): + %RangeTitle.text = "Values" + var values_text = "[" + var is_first: bool = true + for label: String in event_description.get_parameter_labels_by_id(parameter.get_id()): + if not is_first: + values_text += ", " + values_text += label + is_first = false + values_text += "]" + %RangeLabel.text = values_text + else: + %RangeLabel.text = "[%s, %s]" % [minimum_value, maximum_value] + %DefaultValueLabel.text = str(default_value) + %NameCopyButton.pressed.connect(_on_copy_name_button) + %IdCopyButton.pressed.connect(_on_copy_id_button) + %BackToDefaultButton.pressed.connect(_on_default_value_button) + + %ValueSlider.min_value = minimum_value + %ValueSlider.max_value = maximum_value + %ValueSlider.value = default_value + + _on_slider_value_changed(%ValueSlider.value) + %ValueSlider.value_changed.connect(_on_slider_value_changed) + +func _on_copy_name_button(): + DisplayServer.clipboard_set(%NameLabel.text) + +func _on_copy_id_button(): + DisplayServer.clipboard_set(%IdLabel.text) + +func _on_default_value_button(): + %ValueSlider.value = parameter.get_default_value() + +func _on_slider_value_changed(value: float): + %CurrentValueLabel.text = str(value) diff --git a/src/addons/fmod/tool/ui/ParameterDisplay.gd.uid b/src/addons/fmod/tool/ui/ParameterDisplay.gd.uid new file mode 100644 index 0000000..6294b70 --- /dev/null +++ b/src/addons/fmod/tool/ui/ParameterDisplay.gd.uid @@ -0,0 +1 @@ +uid://ve6g43nb1hdd diff --git a/src/addons/fmod/tool/ui/ParameterDisplay.tscn b/src/addons/fmod/tool/ui/ParameterDisplay.tscn new file mode 100644 index 0000000..5009988 --- /dev/null +++ b/src/addons/fmod/tool/ui/ParameterDisplay.tscn @@ -0,0 +1,146 @@ +[gd_scene load_steps=2 format=3 uid="uid://bfdldojk5i6u3"] + +[ext_resource type="Script" uid="uid://ve6g43nb1hdd" path="res://addons/fmod/tool/ui/ParameterDisplay.gd" id="1_fxyw8"] + +[node name="ParameterDisplay" type="MarginContainer"] +visible = false +offset_right = 168.0 +offset_bottom = 160.0 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 4 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 4 +script = ExtResource("1_fxyw8") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 + +[node name="VBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="TitleContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"] +layout_mode = 2 +theme_override_constants/separation = 20 + +[node name="NameTitle" type="Label" parent="VBoxContainer/VBoxContainer/TitleContainer"] +layout_mode = 2 +size_flags_vertical = 10 +text = "Name: " + +[node name="IdTitle" type="Label" parent="VBoxContainer/VBoxContainer/TitleContainer"] +layout_mode = 2 +size_flags_vertical = 10 +text = "ID: " + +[node name="RangeTitle" type="Label" parent="VBoxContainer/VBoxContainer/TitleContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 10 +text = "Range: " + +[node name="DefaultValueTitle" type="Label" parent="VBoxContainer/VBoxContainer/TitleContainer"] +layout_mode = 2 +size_flags_vertical = 10 +text = "Default value: " + +[node name="ContentContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"] +layout_mode = 2 +theme_override_constants/separation = 20 + +[node name="NameLabel" type="Label" parent="VBoxContainer/VBoxContainer/ContentContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 10 + +[node name="NameCopyButton" type="Button" parent="VBoxContainer/VBoxContainer/ContentContainer/NameLabel"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = 9.0 +offset_top = -15.5 +offset_right = 40.0 +offset_bottom = 15.5 +grow_horizontal = 0 +grow_vertical = 2 +size_flags_vertical = 10 + +[node name="IdLabel" type="Label" parent="VBoxContainer/VBoxContainer/ContentContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 10 + +[node name="IdCopyButton" type="Button" parent="VBoxContainer/VBoxContainer/ContentContainer/IdLabel"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = 9.0 +offset_top = -15.5 +offset_right = 40.0 +offset_bottom = 15.5 +grow_horizontal = 0 +grow_vertical = 2 +size_flags_vertical = 10 + +[node name="RangeLabel" type="Label" parent="VBoxContainer/VBoxContainer/ContentContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 10 + +[node name="DefaultValueLabel" type="Label" parent="VBoxContainer/VBoxContainer/ContentContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 10 + +[node name="ValueSetterContainer" type="VBoxContainer" parent="VBoxContainer"] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="VBoxContainer/ValueSetterContainer"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/ValueSetterContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="VBoxContainer/ValueSetterContainer/HBoxContainer"] +layout_mode = 2 +text = "Set value: " + +[node name="ValueSlider" type="HSlider" parent="VBoxContainer/ValueSetterContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 + +[node name="BackToDefaultButton" type="Button" parent="VBoxContainer/ValueSetterContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Default" + +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/ValueSetterContainer"] +layout_mode = 2 + +[node name="CurrentValueTitleLabel" type="Label" parent="VBoxContainer/ValueSetterContainer/HBoxContainer2"] +layout_mode = 2 +text = "Current value: " + +[node name="CurrentValueLabel" type="Label" parent="VBoxContainer/ValueSetterContainer/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="Button" type="Button" parent="VBoxContainer/ValueSetterContainer"] +layout_mode = 2 +text = "Select" diff --git a/src/addons/fmod/tool/ui/TestFmodBankExplorer.tscn b/src/addons/fmod/tool/ui/TestFmodBankExplorer.tscn new file mode 100644 index 0000000..5368f06 --- /dev/null +++ b/src/addons/fmod/tool/ui/TestFmodBankExplorer.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=2 format=3 uid="uid://f4i35731qm63"] + +[ext_resource type="PackedScene" uid="uid://nr38urn226al" path="res://addons/fmod/tool/ui/FmodBankExplorer.tscn" id="1_0ul6h"] + +[node name="TestFmodBankExplorer" type="Node2D"] + +[node name="FmodBankLoader" type="FmodBankLoader" parent="."] +bank_paths = ["res://assets/Banks/Master.strings.bank", "res://assets/Banks/Master.bank", "res://assets/Banks/Music.bank", "res://assets/Banks/Vehicles.bank"] + +[node name="FmodBankExplorer" parent="FmodBankLoader" instance=ExtResource("1_0ul6h")] +initial_position = 0 +position = Vector2i(0, 36) diff --git a/src/assets/fmod/Master.bank b/src/assets/fmod/Master.bank new file mode 100644 index 0000000..7148770 --- /dev/null +++ b/src/assets/fmod/Master.bank @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fed516735b6329bc1dfc5dc77252d25d5ad9a1535239781da3cfa899418c4130 +size 15856 diff --git a/src/assets/fmod/Master.strings.bank b/src/assets/fmod/Master.strings.bank new file mode 100644 index 0000000..cc19757 --- /dev/null +++ b/src/assets/fmod/Master.strings.bank @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26781812a7786530a210ebe8765814ecf48122f47c99fae79629fbf76d5966ee +size 1656 diff --git a/src/assets/fmod/VO.bank b/src/assets/fmod/VO.bank new file mode 100644 index 0000000..832066d --- /dev/null +++ b/src/assets/fmod/VO.bank @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:697f5b70643ef2b6b9d32600e06075222cde692bf13c7e9046b70339af5c70c1 +size 38592 diff --git a/src/empty_scene.tscn b/src/empty_scene.tscn index 7714a80..fb0aab3 100644 --- a/src/empty_scene.tscn +++ b/src/empty_scene.tscn @@ -1,3 +1,14 @@ [gd_scene format=3 uid="uid://cygqjanirnqqt"] [node name="Node" type="Node"] + +[node name="FmodBankLoader" type="FmodBankLoader" parent="."] +bank_paths = ["res://assets/fmod/Master.strings.bank", "res://assets/fmod/Master.bank", "res://assets/fmod/VO.bank"] + +[node name="FmodListener2D" type="FmodListener2D" parent="."] + +[node name="FmodEventEmitter2D" type="FmodEventEmitter2D" parent="."] +event_name = "event:/VO/Welcome" +event_guid = "{d7eabb29-abd9-4057-b408-eef937d66f2a}" +autoplay = true +auto_release = true diff --git a/src/export_presets.cfg b/src/export_presets.cfg index 7849851..fa3a86c 100644 --- a/src/export_presets.cfg +++ b/src/export_presets.cfg @@ -1,50 +1,5 @@ [preset.0] -name="web_release" -platform="Web" -runnable=true -advanced_options=true -dedicated_server=false -custom_features="" -export_filter="exclude" -export_files=PackedStringArray() -include_filter="" -exclude_filter="addons/format_on_save/*, addons/panku_console/*, addons/resource_resave/*, addons/version_check/*" -export_path="builds/web/web_release/index.html" -patches=PackedStringArray() -encryption_include_filters="" -encryption_exclude_filters="" -seed=0 -encrypt_pck=false -encrypt_directory=false -script_export_mode=2 - -[preset.0.options] - -custom_template/debug="" -custom_template/release="" -variant/extensions_support=true -variant/thread_support=false -vram_texture_compression/for_desktop=true -vram_texture_compression/for_mobile=false -html/export_icon=true -html/custom_html_shell="" -html/head_include="" -html/canvas_resize_policy=2 -html/focus_canvas_on_start=true -html/experimental_virtual_keyboard=false -progressive_web_app/enabled=false -progressive_web_app/ensure_cross_origin_isolation_headers=true -progressive_web_app/offline_page="" -progressive_web_app/display=1 -progressive_web_app/orientation=0 -progressive_web_app/icon_144x144="" -progressive_web_app/icon_180x180="" -progressive_web_app/icon_512x512="" -progressive_web_app/background_color=Color(0, 0, 0, 1) - -[preset.1] - name="linux_release" platform="Linux" runnable=true @@ -64,7 +19,7 @@ encrypt_pck=false encrypt_directory=false script_export_mode=2 -[preset.1.options] +[preset.0.options] custom_template/debug="" custom_template/release="" @@ -90,7 +45,7 @@ texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false -[preset.2] +[preset.1] name="windows" platform="Windows Desktop" @@ -111,7 +66,7 @@ encrypt_pck=false encrypt_directory=false script_export_mode=2 -[preset.2.options] +[preset.1.options] custom_template/debug="" custom_template/release="" diff --git a/src/free_fmod.gd b/src/free_fmod.gd new file mode 100644 index 0000000..9111343 --- /dev/null +++ b/src/free_fmod.gd @@ -0,0 +1,5 @@ +extends Node + +func _exit_tree() -> void: + print("exiting tree") + FmodServer.shutdown() diff --git a/src/free_fmod.gd.uid b/src/free_fmod.gd.uid new file mode 100644 index 0000000..44ae8a9 --- /dev/null +++ b/src/free_fmod.gd.uid @@ -0,0 +1 @@ +uid://c1osrer787cv7 diff --git a/src/project.godot b/src/project.godot index 8445c98..d236aa0 100644 --- a/src/project.godot +++ b/src/project.godot @@ -8,6 +8,25 @@ config_version=5 +[Fmod] + +General/auto_initialize=true +General/channel_count=1024 +General/is_live_update_enabled=true +General/is_memory_tracking_enabled=false +"Software Format/sample_rate"=48000 +"Software Format/speaker_mode"=3 +"Software Format/raw_speaker_count"=0 +General/default_listener_count=1 +General/banks_path="res://assets/fmod" +Plugins/path_to_plugin_configuration="" +General/should_load_by_name=false +DSP/dsp_buffer_size=512 +DSP/dsp_buffer_count=4 +"3D Settings/doppler_scale"=1.0 +"3D Settings/distance_factor"=1.0 +"3D Settings/rolloff_scale"=1.0 + [application] config/name="Project Template" @@ -19,6 +38,7 @@ config/features=PackedStringArray("4.4", "GL Compatibility") Logger="*res://addons/godot-logger/logger.gd" PhantomCameraManager="*res://addons/phantom_camera/scripts/managers/phantom_camera_manager.gd" EventBus="*res://global/event_bus.gd" +FmodManager="*res://addons/fmod/FmodManager.gd" [debug_draw_3d] @@ -26,7 +46,7 @@ settings/addon_root_folder="res://addons/debug_draw_3d" [editor_plugins] -enabled=PackedStringArray("res://addons/format_on_save/plugin.cfg", "res://addons/godot-logger/plugin.cfg", "res://addons/gut/plugin.cfg", "res://addons/phantom_camera/plugin.cfg", "res://addons/resource_resave/plugin.cfg", "res://addons/version_check/plugin.cfg") +enabled=PackedStringArray("res://addons/fmod/plugin.cfg", "res://addons/format_on_save/plugin.cfg", "res://addons/godot-logger/plugin.cfg", "res://addons/gut/plugin.cfg", "res://addons/phantom_camera/plugin.cfg", "res://addons/resource_resave/plugin.cfg", "res://addons/version_check/plugin.cfg") [input]