diff --git a/.fmod/.gitignore b/.fmod/.gitignore
new file mode 100644
index 0000000..9d6994d
--- /dev/null
+++ b/.fmod/.gitignore
@@ -0,0 +1,4 @@
+.cache/
+.user/
+.unsaved/
+Build/
diff --git a/.fmod/Assets/UI/click.ogg b/.fmod/Assets/UI/click.ogg
new file mode 100644
index 0000000..502a729
Binary files /dev/null and b/.fmod/Assets/UI/click.ogg differ
diff --git a/.fmod/Assets/UI/pause.ogg b/.fmod/Assets/UI/pause.ogg
new file mode 100644
index 0000000..562ddb3
Binary files /dev/null and b/.fmod/Assets/UI/pause.ogg differ
diff --git a/.fmod/Assets/UI/rollover.ogg b/.fmod/Assets/UI/rollover.ogg
new file mode 100644
index 0000000..d1964d0
Binary files /dev/null and b/.fmod/Assets/UI/rollover.ogg differ
diff --git a/.fmod/Foundations.fspro b/.fmod/Foundations.fspro
new file mode 100644
index 0000000..c8e34d2
--- /dev/null
+++ b/.fmod/Foundations.fspro
@@ -0,0 +1,2 @@
+
+
diff --git a/.fmod/Metadata/Asset/{6ab7ca78-a7cc-4484-8759-72c2162791e9}.xml b/.fmod/Metadata/Asset/{6ab7ca78-a7cc-4484-8759-72c2162791e9}.xml
new file mode 100644
index 0000000..770c943
--- /dev/null
+++ b/.fmod/Metadata/Asset/{6ab7ca78-a7cc-4484-8759-72c2162791e9}.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/.fmod/Metadata/Asset/{71f2cc45-7b23-44bf-bd24-e69a3158f55b}.xml b/.fmod/Metadata/Asset/{71f2cc45-7b23-44bf-bd24-e69a3158f55b}.xml
new file mode 100644
index 0000000..c26b464
--- /dev/null
+++ b/.fmod/Metadata/Asset/{71f2cc45-7b23-44bf-bd24-e69a3158f55b}.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/.fmod/Metadata/AudioFile/{4feb7219-17e4-4016-8479-8a061d7c6635}.xml b/.fmod/Metadata/AudioFile/{4feb7219-17e4-4016-8479-8a061d7c6635}.xml
new file mode 100644
index 0000000..697b3aa
--- /dev/null
+++ b/.fmod/Metadata/AudioFile/{4feb7219-17e4-4016-8479-8a061d7c6635}.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/.fmod/Metadata/AudioFile/{92b4da6d-485a-4ad9-9d8c-78d9d75c7feb}.xml b/.fmod/Metadata/AudioFile/{92b4da6d-485a-4ad9-9d8c-78d9d75c7feb}.xml
new file mode 100644
index 0000000..92b927d
--- /dev/null
+++ b/.fmod/Metadata/AudioFile/{92b4da6d-485a-4ad9-9d8c-78d9d75c7feb}.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/.fmod/Metadata/AudioFile/{cd7c9df6-1305-4bf7-8e3f-4924c9b28f75}.xml b/.fmod/Metadata/AudioFile/{cd7c9df6-1305-4bf7-8e3f-4924c9b28f75}.xml
new file mode 100644
index 0000000..5fbbd65
--- /dev/null
+++ b/.fmod/Metadata/AudioFile/{cd7c9df6-1305-4bf7-8e3f-4924c9b28f75}.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/.fmod/Metadata/Bank/{87a1f613-fee9-4f55-8752-5c103c1c499c}.xml b/.fmod/Metadata/Bank/{87a1f613-fee9-4f55-8752-5c103c1c499c}.xml
new file mode 100644
index 0000000..41cee92
--- /dev/null
+++ b/.fmod/Metadata/Bank/{87a1f613-fee9-4f55-8752-5c103c1c499c}.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/.fmod/Metadata/Bank/{8c7fb2e4-913c-446b-9d34-589d1d8b6137}.xml b/.fmod/Metadata/Bank/{8c7fb2e4-913c-446b-9d34-589d1d8b6137}.xml
new file mode 100644
index 0000000..f8ef063
--- /dev/null
+++ b/.fmod/Metadata/Bank/{8c7fb2e4-913c-446b-9d34-589d1d8b6137}.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/.fmod/Metadata/BankFolder/{d0b5257e-4937-4370-8f09-a6796aa36d96}.xml b/.fmod/Metadata/BankFolder/{d0b5257e-4937-4370-8f09-a6796aa36d96}.xml
new file mode 100644
index 0000000..9bdd28c
--- /dev/null
+++ b/.fmod/Metadata/BankFolder/{d0b5257e-4937-4370-8f09-a6796aa36d96}.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/.fmod/Metadata/EffectPresetFolder/{b86c2794-81be-4801-bfff-cd383dd2e86a}.xml b/.fmod/Metadata/EffectPresetFolder/{b86c2794-81be-4801-bfff-cd383dd2e86a}.xml
new file mode 100644
index 0000000..f6d21ba
--- /dev/null
+++ b/.fmod/Metadata/EffectPresetFolder/{b86c2794-81be-4801-bfff-cd383dd2e86a}.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/.fmod/Metadata/EncodingSetting/{423a1571-9108-4dc5-b0b3-306e089f12e8}.xml b/.fmod/Metadata/EncodingSetting/{423a1571-9108-4dc5-b0b3-306e089f12e8}.xml
new file mode 100644
index 0000000..456110e
--- /dev/null
+++ b/.fmod/Metadata/EncodingSetting/{423a1571-9108-4dc5-b0b3-306e089f12e8}.xml
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/.fmod/Metadata/Event/{1e353d65-82a8-4b60-a556-06a16520879b}.xml b/.fmod/Metadata/Event/{1e353d65-82a8-4b60-a556-06a16520879b}.xml
new file mode 100644
index 0000000..1229d86
--- /dev/null
+++ b/.fmod/Metadata/Event/{1e353d65-82a8-4b60-a556-06a16520879b}.xml
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.fmod/Metadata/Event/{c8cc9f60-331d-4a5e-bfb7-7ca9d157c188}.xml b/.fmod/Metadata/Event/{c8cc9f60-331d-4a5e-bfb7-7ca9d157c188}.xml
new file mode 100644
index 0000000..736ce76
--- /dev/null
+++ b/.fmod/Metadata/Event/{c8cc9f60-331d-4a5e-bfb7-7ca9d157c188}.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.fmod/Metadata/Event/{ecceccc1-a345-40b3-ab32-168017d4ca32}.xml b/.fmod/Metadata/Event/{ecceccc1-a345-40b3-ab32-168017d4ca32}.xml
new file mode 100644
index 0000000..980665d
--- /dev/null
+++ b/.fmod/Metadata/Event/{ecceccc1-a345-40b3-ab32-168017d4ca32}.xml
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.fmod/Metadata/EventFolder/{46fa9868-a1a2-4f63-a482-869c4c5e42b6}.xml b/.fmod/Metadata/EventFolder/{46fa9868-a1a2-4f63-a482-869c4c5e42b6}.xml
new file mode 100644
index 0000000..42d593f
--- /dev/null
+++ b/.fmod/Metadata/EventFolder/{46fa9868-a1a2-4f63-a482-869c4c5e42b6}.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/.fmod/Metadata/EventFolder/{6a6b8292-3ea3-488c-a0a7-ea62e3b4bb95}.xml b/.fmod/Metadata/EventFolder/{6a6b8292-3ea3-488c-a0a7-ea62e3b4bb95}.xml
new file mode 100644
index 0000000..a08187b
--- /dev/null
+++ b/.fmod/Metadata/EventFolder/{6a6b8292-3ea3-488c-a0a7-ea62e3b4bb95}.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/.fmod/Metadata/Master.xml b/.fmod/Metadata/Master.xml
new file mode 100644
index 0000000..ba0637c
--- /dev/null
+++ b/.fmod/Metadata/Master.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/.fmod/Metadata/Mixer.xml b/.fmod/Metadata/Mixer.xml
new file mode 100644
index 0000000..2547eaf
--- /dev/null
+++ b/.fmod/Metadata/Mixer.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/.fmod/Metadata/ParameterPresetFolder/{007d5526-84de-483c-8aa5-66a43d869085}.xml b/.fmod/Metadata/ParameterPresetFolder/{007d5526-84de-483c-8aa5-66a43d869085}.xml
new file mode 100644
index 0000000..9e11937
--- /dev/null
+++ b/.fmod/Metadata/ParameterPresetFolder/{007d5526-84de-483c-8aa5-66a43d869085}.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/.fmod/Metadata/Platform/{f8ebb1b6-1a91-447c-a873-54568d7423de}.xml b/.fmod/Metadata/Platform/{f8ebb1b6-1a91-447c-a873-54568d7423de}.xml
new file mode 100644
index 0000000..db51cc1
--- /dev/null
+++ b/.fmod/Metadata/Platform/{f8ebb1b6-1a91-447c-a873-54568d7423de}.xml
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/.fmod/Metadata/ProfilerFolder/{e9e69137-ff2a-4dc3-901c-461f33d1548b}.xml b/.fmod/Metadata/ProfilerFolder/{e9e69137-ff2a-4dc3-901c-461f33d1548b}.xml
new file mode 100644
index 0000000..73fc9ba
--- /dev/null
+++ b/.fmod/Metadata/ProfilerFolder/{e9e69137-ff2a-4dc3-901c-461f33d1548b}.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/.fmod/Metadata/Return/{d048b03c-8152-4673-b7da-d0020b3d0b90}.xml b/.fmod/Metadata/Return/{d048b03c-8152-4673-b7da-d0020b3d0b90}.xml
new file mode 100644
index 0000000..38fd239
--- /dev/null
+++ b/.fmod/Metadata/Return/{d048b03c-8152-4673-b7da-d0020b3d0b90}.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
diff --git a/.fmod/Metadata/SandboxFolder/{762275a7-45cf-4a82-88b3-ab7ef5b17d81}.xml b/.fmod/Metadata/SandboxFolder/{762275a7-45cf-4a82-88b3-ab7ef5b17d81}.xml
new file mode 100644
index 0000000..7b2a312
--- /dev/null
+++ b/.fmod/Metadata/SandboxFolder/{762275a7-45cf-4a82-88b3-ab7ef5b17d81}.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/.fmod/Metadata/SnapshotGroup/{c8d44c98-8452-4f1d-8aa3-65c5281afa60}.xml b/.fmod/Metadata/SnapshotGroup/{c8d44c98-8452-4f1d-8aa3-65c5281afa60}.xml
new file mode 100644
index 0000000..51ec57f
--- /dev/null
+++ b/.fmod/Metadata/SnapshotGroup/{c8d44c98-8452-4f1d-8aa3-65c5281afa60}.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/.fmod/Metadata/Tags.xml b/.fmod/Metadata/Tags.xml
new file mode 100644
index 0000000..a96a1bd
--- /dev/null
+++ b/.fmod/Metadata/Tags.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/.fmod/Metadata/Workspace.xml b/.fmod/Metadata/Workspace.xml
new file mode 100644
index 0000000..b25be3f
--- /dev/null
+++ b/.fmod/Metadata/Workspace.xml
@@ -0,0 +1,35 @@
+
+
+
+
diff --git a/.github/actions/fmod/action.yml b/.github/actions/fmod/action.yml
new file mode 100644
index 0000000..1a5a262
--- /dev/null
+++ b/.github/actions/fmod/action.yml
@@ -0,0 +1,8 @@
+name: FMOD
+description: Builds FMOD for Unity
+runs:
+ using: docker
+ image: aarthificial/fmod:2.02.15
+ args:
+ - -build
+ - /github/workspace/.fmod/Foundations.fspro
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 0ad30b0..db77835 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -52,9 +52,21 @@ jobs:
core.setOutput('version', version);
core.setOutput('release', release.data.id);
+ fmod:
+ name: Build FMOD
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ lfs: true
+ - uses: ./.github/actions/fmod
+ - uses: actions/upload-artifact@v3
+ with:
+ name: FMOD Build
+ path: .fmod/Build
build:
name: Build for ${{ matrix.targetPlatform }}
- needs: release
+ needs: [release, fmod]
runs-on: ubuntu-latest
strategy:
matrix:
@@ -71,6 +83,10 @@ jobs:
path: Library
key: Library-${{ matrix.targetPlatform }}
restore-keys: Library-
+ - uses: actions/download-artifact@v3
+ with:
+ name: FMOD Build
+ path: .fmod/Build
- uses: game-ci/unity-builder@v2
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
@@ -99,4 +115,4 @@ jobs:
release_id,
name,
data: require("fs").readFileSync("artifact.zip"),
- });
\ No newline at end of file
+ });
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index 61ec1f3..74c69d0 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -5,15 +5,28 @@ on:
workflow_dispatch: { }
jobs:
+ fmod:
+ name: Build FMOD
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ lfs: true
+ - uses: ./.github/actions/fmod
+ - uses: actions/upload-artifact@v3
+ with:
+ name: FMOD Build
+ path: .fmod/Build
build:
name: Build for ${{ matrix.targetPlatform }}
runs-on: ubuntu-latest
+ needs: fmod
+ timeout-minutes: 15
strategy:
matrix:
targetPlatform:
- StandaloneWindows64
- - StandaloneLinux64
- - StandaloneOSX
steps:
- uses: actions/checkout@v3
with:
@@ -23,6 +36,10 @@ jobs:
path: Library
key: Library-${{ matrix.targetPlatform }}
restore-keys: Library-
+ - uses: actions/download-artifact@v3
+ with:
+ name: FMOD Build
+ path: .fmod/Build
- uses: game-ci/unity-builder@v2
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
@@ -32,4 +49,4 @@ jobs:
gitPrivateToken: ${{ secrets.PACKAGES_TOKEN }}
unityVersion: 2021.3.25f1
targetPlatform: ${{ matrix.targetPlatform }}
- versioning: Tag
\ No newline at end of file
+ versioning: Tag
diff --git a/.gitignore b/.gitignore
index 5309d78..118314d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -70,4 +70,25 @@ crashlytics-build.properties
# Temporary auto-generated Android Assets
/[Aa]ssets/[Ss]treamingAssets/aa.meta
-/[Aa]ssets/[Ss]treamingAssets/aa/*
\ No newline at end of file
+/[Aa]ssets/[Ss]treamingAssets/aa/*
+
+
+# FMOD Studio specific
+
+# Never ignore DLLs in the FMOD subfolder.
+!/[Aa]ssets/Plugins/FMOD/**/lib/*
+
+# Don't ignore images and gizmos used by FMOD in the Unity Editor.
+!/[Aa]ssets/Gizmos/FMOD/*
+!/[Aa]ssets/Editor Default Resources/FMOD/*
+
+# Ignore the Cache folder since it is updated locally.
+/[Aa]ssets/Plugins/FMOD/Cache/*
+
+# Ignore bank files in the StreamingAssets folder.
+/[Aa]ssets/StreamingAssets/**/*.bank
+/[Aa]ssets/StreamingAssets/**/*.bank.meta
+
+# If the source bank files are kept outside of the StreamingAssets folder then these can be ignored.
+# Log files can be ignored.
+fmod_editor.log
diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta
new file mode 100644
index 0000000..ec85e93
--- /dev/null
+++ b/Assets/Plugins.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1478ce7cea584e742a2d8bd56ff348bf
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD.meta b/Assets/Plugins/FMOD.meta
new file mode 100644
index 0000000..38cc0ba
--- /dev/null
+++ b/Assets/Plugins/FMOD.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 06ae579381df01a4a87bb149dec89954
+folderAsset: yes
+timeCreated: 1429061260
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/Cache.meta b/Assets/Plugins/FMOD/Cache.meta
new file mode 100644
index 0000000..9919a8f
--- /dev/null
+++ b/Assets/Plugins/FMOD/Cache.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 98248e588f8f40642a42e95123fa7e55
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/FMODUnity.asmdef b/Assets/Plugins/FMOD/FMODUnity.asmdef
new file mode 100644
index 0000000..e5b2d05
--- /dev/null
+++ b/Assets/Plugins/FMOD/FMODUnity.asmdef
@@ -0,0 +1,38 @@
+{
+ "name": "FMODUnity",
+ "references": [
+ "Unity.Timeline",
+ "Unity.Addressables",
+ "Unity.ResourceManager"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [
+ {
+ "name": "com.unity.timeline",
+ "expression": "1.0.0",
+ "define": "UNITY_TIMELINE_EXIST"
+ },
+ {
+ "name": "com.unity.addressables",
+ "expression": "1.0.0",
+ "define": "UNITY_ADDRESSABLES_EXIST"
+ },
+ {
+ "name": "com.unity.modules.physics",
+ "expression": "1.0.0",
+ "define": "UNITY_PHYSICS_EXIST"
+ },
+ {
+ "name": "com.unity.modules.physics2d",
+ "expression": "1.0.0",
+ "define": "UNITY_PHYSICS2D_EXIST"
+ }
+ ],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Assets/Plugins/FMOD/FMODUnity.asmdef.meta b/Assets/Plugins/FMOD/FMODUnity.asmdef.meta
new file mode 100644
index 0000000..4dce579
--- /dev/null
+++ b/Assets/Plugins/FMOD/FMODUnity.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0c752da273b17c547ae705acf0f2adf2
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/LICENSE.TXT b/Assets/Plugins/FMOD/LICENSE.TXT
new file mode 100644
index 0000000..c2f8863
--- /dev/null
+++ b/Assets/Plugins/FMOD/LICENSE.TXT
@@ -0,0 +1,157 @@
+ FMOD END USER LICENCE AGREEMENT
+ ===============================
+
+This End User Licence Agreement (EULA) is a legal agreement between you and
+Firelight Technologies Pty Ltd (ACN 099 182 448) (us or we) and governs your use
+of FMOD Studio Authoring Tool and FMOD Studio Engine, together the Software.
+
+1. GRANT OF LICENCE
+
+1.1 FMOD Studio Authoring Tool
+
+This EULA grants you the right to use FMOD Studio Authoring Tool for all use,
+including Commercial use, subject to the following:
+
+ i. FMOD Studio Authoring Tool is used to create content for use with the
+ FMOD Studio Engine only;
+
+ ii. FMOD Studio Authoring Tool is not redistributed in any form.
+
+1.2 FMOD Studio Engine
+
+This EULA grants you the right to use FMOD Studio Engine, for personal
+(hobbyist), educational (students and teachers) or Non-Commercial use only,
+subject to the following:
+
+ i. FMOD Studio Engine is integrated and redistributed in a software
+ application (Product) only;
+
+ ii. FMOD Studio Engine is not distributed as part of a game engine or tool
+ set;
+
+ iii. FMOD Studio Engine is not used in any Commercial enterprise or for any
+ Commercial production or subcontracting, except for the purposes of
+ Evaluation or Development of a Commercial Product;
+
+ iv. Non-Commercial use does not involve any form of monetisation,
+ sponsorship or promotion;
+
+ v. Product includes attribution in accordance with Clause 3.
+
+2.OTHER USE
+
+For all Commercial use, and any Non Commercial use not permitted by this
+license, a separate license is required. Refer to www.fmod.com/licensing for
+information.
+
+3. CREDITS
+
+All Products require an in game credit line which must include the words “FMOD
+Studio” and “Firelight Technologies Pty Ltd”. Refer to www.fmod.com/attribution
+for examples.
+
+4. INTELLECTUAL PROPERTY RIGHTS
+
+We are and remain at all times the owner of the Software (including all
+intellectual property rights in or to the Software). For the avoidance of doubt,
+nothing in this EULA may be deemed to grant or assign to you any proprietary or
+ownership interest or intellectual property rights in or to the Software other
+than the rights licensed pursuant to Clause 1.
+
+You acknowledge and agree that you have no right, title or interest in and to
+the intellectual property rights in the Software.
+
+5. SECURITY AND RISK
+
+You are responsible for protecting the Software and any related materials at all
+times from unauthorised access, use or damage.
+
+6. WARRANTY AND LIMITATION OF LIABILITY
+
+The Software is provided by us “as is” and, to the maximum extent permitted by
+law, any express or implied warranties of any kind, including (but not limited
+to) all implied warranties of merchantability and fitness for a particular
+purpose are disclaimed.
+
+In no event shall we (and our employees, contractors and subcontractors),
+developers and contributors be liable for any direct, special, indirect or
+consequential damages whatsoever resulting from loss of data or profits, whether
+in an action of contract, negligence or other tortious conduct, arising out of
+or in connection with the use or performance of the Software.
+
+7. OGG VORBIS CODEC
+
+FMOD uses the Ogg Vorbis codec © 2002, Xiph.Org Foundation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ i. Redistributions of source code must retain the above copyright notice,
+ the list of conditions and the following disclaimer.
+
+ ii. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other material provided with the distribution.
+
+ iii. Neither the name of the Xiph.org Foundation nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+8. RESONANCE AUDIO SDK
+
+FMOD includes Resonance Audio SDK, licensed under the Apache Licence, Version
+2.0 (the Licence); you may not use this file except in compliance with the
+License. You may obtain a copy of the License at:
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed
+under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, either express or implied. See the License for the
+specific language governing permissions and limitations under the License.
+
+8. ANDROID PLATFORM CODE
+
+Copyright (C) 2010 The Android Open Source Project All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+9. AUDIOMOTORS DEMO CONTENT
+
+The audiogaming_audiomotors_demo_engine.agp file is provided for evaluation
+purposes only and is not to be redistributed. AudioMotors V2 Pro is required to
+create your own engine content. Refer to https://lesound.io for information.
diff --git a/Assets/Plugins/FMOD/LICENSE.TXT.meta b/Assets/Plugins/FMOD/LICENSE.TXT.meta
new file mode 100644
index 0000000..a6a67c7
--- /dev/null
+++ b/Assets/Plugins/FMOD/LICENSE.TXT.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3cee4bdda23a8d1488e567e9e17bdfc4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/README.txt b/Assets/Plugins/FMOD/README.txt
new file mode 100644
index 0000000..885c47c
--- /dev/null
+++ b/Assets/Plugins/FMOD/README.txt
@@ -0,0 +1,14 @@
+Welcome to FMOD for Unity
+
+This package allows you to easily play back audio events created in FMOD Studio
+within your Unity project.
+
+The best place to start is with our online documentation:
+https://fmod.com/docs/2.02/unity
+
+If you prefer a more step-by-step guide, try our integration tutorial that
+builds on the familiar Karting Microgame:
+https://fmod.com/unity-integrate
+
+For support, join the conversation on our Unity forums:
+https://qa.fmod.com/c/unity
diff --git a/Assets/Plugins/FMOD/README.txt.meta b/Assets/Plugins/FMOD/README.txt.meta
new file mode 100644
index 0000000..bb70fc0
--- /dev/null
+++ b/Assets/Plugins/FMOD/README.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 081074d1d9d6ab448b88688c3730e8a1
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/Resources.meta b/Assets/Plugins/FMOD/Resources.meta
new file mode 100644
index 0000000..5db7a4f
--- /dev/null
+++ b/Assets/Plugins/FMOD/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 84aa990efd53b1f4ca854369f5120dcc
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset b/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset
new file mode 100644
index 0000000..86e9d5f
--- /dev/null
+++ b/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset
@@ -0,0 +1,816 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &-8481457764781106504
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 335f0a4b26fb46942858ea029e030d2a, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: playInEditor
+ parentIdentifier:
+ active: 1
+ Properties:
+ LiveUpdate:
+ Value: 1
+ HasValue: 1
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 1
+ HasValue: 1
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 48000
+ HasValue: 1
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 1024
+ HasValue: 1
+ RealChannelCount:
+ Value: 256
+ HasValue: 1
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &-7689286232147634041
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: bc1f51bc35d549941904cf062bae93a3, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: 0f8eb3f400726694eb47beb1a9f94ce8
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &-7021063117773784713
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3abeb1429547a134480f4f2f1efc7e21, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: c88d16e5272a4e241b0ef0ac2e53b73d
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &-6377998316826934892
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 97ba6cc2660c0ca498540d254701057a, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: 2fea114e74ecf3c4f920e1d5cc1c4c40
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &-5828544772289781125
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: b87314b32fbe18943af496e4b47136c6, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: 46fbfdf3fc43db0458918377fd40293e
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &-2796802649194294324
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 17eea195bdfbf014e91ba7620ee491f8, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: e7a046c753c3c3d4aacc91f6597f310d
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &-2178580042432467152
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9587379c972e4a54da1949613f11e1c6, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: default
+ parentIdentifier:
+ active: 1
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 9264
+ HasValue: 1
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 1
+ StaticPlugins:
+ Value: []
+ HasValue: 1
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers:
+ - 0f8eb3f400726694eb47beb1a9f94ce8
+ - c88d16e5272a4e241b0ef0ac2e53b73d
+ - 2fea114e74ecf3c4f920e1d5cc1c4c40
+ - 46fbfdf3fc43db0458918377fd40293e
+ - e7a046c753c3c3d4aacc91f6597f310d
+ - b7716510a1f36934c87976f3a81dbf3d
+ - 2c5177b11d81d824dbb064f9ac8527da
+ - 52eb9df5db46521439908db3a29a1bbb
+ - fd7c55dab0fce234b8c25f6ffca523c1
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &-2145191031152173241
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 73549a74f689f0849a8271d9e908c514, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: b7716510a1f36934c87976f3a81dbf3d
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eef8d824ea7b63742966aaa0e94ac383, type: 3}
+ m_Name: FMODStudioSettings
+ m_EditorClassIdentifier:
+ switchSettingsMigration: 1
+ HasSourceProject: 1
+ HasPlatforms: 1
+ sourceProjectPath: .fmod/Foundations.fspro
+ sourceBankPath: .fmod/Build
+ sourceBankPathUnformatted:
+ BankRefreshCooldown: 5
+ ShowBankRefreshWindow: 1
+ AutomaticEventLoading: 1
+ BankLoadType: 0
+ AutomaticSampleLoading: 0
+ EncryptionKey:
+ ImportType: 0
+ TargetAssetPath: FMODBanks
+ TargetBankFolder:
+ EventLinkage: 0
+ LoggingLevel: 2
+ SpeakerModeSettings: []
+ SampleRateSettings: []
+ LiveUpdateSettings: []
+ OverlaySettings: []
+ BankDirectorySettings: []
+ VirtualChannelSettings: []
+ RealChannelSettings: []
+ Plugins: []
+ MasterBanks:
+ - Master
+ Banks:
+ - SFX
+ BanksToLoad: []
+ LiveUpdatePort: 9264
+ EnableMemoryTracking: 0
+ AndroidUseOBB: 0
+ AndroidPatchBuild: 0
+ MeterChannelOrdering: 0
+ StopEventsOutsideMaxDistance: 0
+ BoltUnitOptionsBuildPending: 0
+ EnableErrorCallback: 0
+ SharedLibraryUpdateStage: 0
+ SharedLibraryTimeSinceStart: 0
+ CurrentVersion: 131605
+ HideSetupWizard: 1
+ LastEventReferenceScanVersion: 131605
+ Platforms:
+ - {fileID: -8481457764781106504}
+ - {fileID: -7689286232147634041}
+ - {fileID: -7021063117773784713}
+ - {fileID: -6377998316826934892}
+ - {fileID: -5828544772289781125}
+ - {fileID: -2796802649194294324}
+ - {fileID: -2178580042432467152}
+ - {fileID: -2145191031152173241}
+ - {fileID: 1694600673771057540}
+ - {fileID: 7157547541760800896}
+ - {fileID: 7217032086974970559}
+ MigratedPlatforms: 0c000000150000000b0000000a00000009000000120000000800000005000000060000000200000001000000
+--- !u!114 &1694600673771057540
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9660e62d6232af242877f0cc2b90c63d, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: 2c5177b11d81d824dbb064f9ac8527da
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &7157547541760800896
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d92d0baf34dae0e4ea032a42bd6107c0, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: 52eb9df5db46521439908db3a29a1bbb
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
+--- !u!114 &7217032086974970559
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 93a382382f106584e8f8f62412fee177, type: 3}
+ m_Name: FMODStudioSettingsPlatform
+ m_EditorClassIdentifier:
+ identifier: fd7c55dab0fce234b8c25f6ffca523c1
+ parentIdentifier: default
+ active: 0
+ Properties:
+ LiveUpdate:
+ Value: 0
+ HasValue: 0
+ LiveUpdatePort:
+ Value: 0
+ HasValue: 0
+ Overlay:
+ Value: 0
+ HasValue: 0
+ Logging:
+ Value: 0
+ HasValue: 0
+ SampleRate:
+ Value: 0
+ HasValue: 0
+ BuildDirectory:
+ Value:
+ HasValue: 0
+ SpeakerMode:
+ Value: 0
+ HasValue: 0
+ VirtualChannelCount:
+ Value: 0
+ HasValue: 0
+ RealChannelCount:
+ Value: 0
+ HasValue: 0
+ DSPBufferLength:
+ Value: 0
+ HasValue: 0
+ DSPBufferCount:
+ Value: 0
+ HasValue: 0
+ Plugins:
+ Value: []
+ HasValue: 0
+ StaticPlugins:
+ Value: []
+ HasValue: 0
+ CallbackHandler:
+ Value: {fileID: 0}
+ HasValue: 0
+ OutputTypeName:
+ threadAffinities:
+ Value: []
+ HasValue: 0
+ displaySortOrder: 0
+ childIdentifiers: []
+ codecChannels:
+ Value: []
+ HasValue: 0
diff --git a/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset.meta b/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset.meta
new file mode 100644
index 0000000..429fe3a
--- /dev/null
+++ b/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e71fdf245711ced43844466cb8e03684
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons.meta b/Assets/Plugins/FMOD/addons.meta
new file mode 100644
index 0000000..278e114
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 850b7bf08237b964b8b005fe703774f9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio.meta
new file mode 100644
index 0000000..f245895
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ce39533effc93ba409e337ba540bf789
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor.meta
new file mode 100644
index 0000000..41d5009
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 93923a20291353a40809350917bab197
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef
new file mode 100644
index 0000000..3063883
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef
@@ -0,0 +1,17 @@
+{
+ "name": "FMODUnityResonanceEditor",
+ "references": [
+ "FMODUnityResonance"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef.meta
new file mode 100644
index 0000000..140f4b8
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 194213485063a984b98ce9410892267a
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs
new file mode 100644
index 0000000..e86ca73
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs
@@ -0,0 +1,122 @@
+// Copyright 2017 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+namespace FMODUnityResonance
+{
+ /// A custom editor for properties on the FmodResonanceAudioRoom script. This appears in the
+ /// Inspector window of a FmodResonanceAudioRoom object.
+ [CustomEditor(typeof(FmodResonanceAudioRoom))]
+ [CanEditMultipleObjects]
+ public class FmodResonanceAudioRoomEditor : Editor
+ {
+ private SerializedProperty leftWall = null;
+ private SerializedProperty rightWall = null;
+ private SerializedProperty floor = null;
+ private SerializedProperty ceiling = null;
+ private SerializedProperty backWall = null;
+ private SerializedProperty frontWall = null;
+ private SerializedProperty reflectivity = null;
+ private SerializedProperty reverbGainDb = null;
+ private SerializedProperty reverbBrightness = null;
+ private SerializedProperty reverbTime = null;
+ private SerializedProperty size = null;
+
+ private GUIContent surfaceMaterialsLabel = new GUIContent("Surface Materials",
+ "Room surface materials to calculate the acoustic properties of the room.");
+ private GUIContent surfaceMaterialLabel = new GUIContent("Surface Material",
+ "Surface material used to calculate the acoustic properties of the room.");
+ private GUIContent reflectivityLabel = new GUIContent("Reflectivity",
+ "Adjusts what proportion of the direct sound is reflected back by each surface, after an " +
+ "appropriate delay. Reverberation is unaffected by this setting.");
+ private GUIContent reverbGainLabel = new GUIContent("Gain (dB)",
+ "Applies a gain adjustment to the reverberation in the room. The default value will leave " +
+ "reverb unaffected.");
+ private GUIContent reverbPropertiesLabel = new GUIContent("Reverb Properties",
+ "Parameters to adjust the reverb properties of the room.");
+ private GUIContent reverbBrightnessLabel = new GUIContent("Brightness",
+ "Adjusts the balance between high and low frequencies in the reverb.");
+ private GUIContent reverbTimeLabel = new GUIContent("Time",
+ "Adjusts the overall duration of the reverb by a positive scaling factor.");
+ private GUIContent sizeLabel = new GUIContent("Size", "Sets the room dimensions.");
+
+ private void OnEnable()
+ {
+ leftWall = serializedObject.FindProperty("LeftWall");
+ rightWall = serializedObject.FindProperty("RightWall");
+ floor = serializedObject.FindProperty("Floor");
+ ceiling = serializedObject.FindProperty("Ceiling");
+ backWall = serializedObject.FindProperty("BackWall");
+ frontWall = serializedObject.FindProperty("FrontWall");
+ reflectivity = serializedObject.FindProperty("Reflectivity");
+ reverbGainDb = serializedObject.FindProperty("ReverbGainDb");
+ reverbBrightness = serializedObject.FindProperty("ReverbBrightness");
+ reverbTime = serializedObject.FindProperty("ReverbTime");
+ size = serializedObject.FindProperty("Size");
+ }
+
+ /// @cond
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ // Add clickable script field, as would have been provided by DrawDefaultInspector()
+ MonoScript script = MonoScript.FromMonoBehaviour(target as MonoBehaviour);
+ EditorGUI.BeginDisabledGroup(true);
+ EditorGUILayout.ObjectField("Script", script, typeof(MonoScript), false);
+ EditorGUI.EndDisabledGroup();
+
+ EditorGUILayout.LabelField(surfaceMaterialsLabel);
+ ++EditorGUI.indentLevel;
+ DrawSurfaceMaterial(leftWall);
+ DrawSurfaceMaterial(rightWall);
+ DrawSurfaceMaterial(floor);
+ DrawSurfaceMaterial(ceiling);
+ DrawSurfaceMaterial(backWall);
+ DrawSurfaceMaterial(frontWall);
+ --EditorGUI.indentLevel;
+
+ EditorGUILayout.Separator();
+
+ EditorGUILayout.Slider(reflectivity, 0.0f, FmodResonanceAudio.MaxReflectivity, reflectivityLabel);
+
+ EditorGUILayout.Separator();
+
+ EditorGUILayout.LabelField(reverbPropertiesLabel);
+ ++EditorGUI.indentLevel;
+ EditorGUILayout.Slider(reverbGainDb, FmodResonanceAudio.MinGainDb, FmodResonanceAudio.MaxGainDb,
+ reverbGainLabel);
+ EditorGUILayout.Slider(reverbBrightness, FmodResonanceAudio.MinReverbBrightness,
+ FmodResonanceAudio.MaxReverbBrightness, reverbBrightnessLabel);
+ EditorGUILayout.Slider(reverbTime, 0.0f, FmodResonanceAudio.MaxReverbTime, reverbTimeLabel);
+ --EditorGUI.indentLevel;
+
+ EditorGUILayout.Separator();
+
+ EditorGUILayout.PropertyField(size, sizeLabel);
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ /// @endcond
+
+ private void DrawSurfaceMaterial(SerializedProperty surfaceMaterial)
+ {
+ surfaceMaterialLabel.text = surfaceMaterial.displayName;
+ EditorGUILayout.PropertyField(surfaceMaterial, surfaceMaterialLabel);
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs.meta
new file mode 100644
index 0000000..2d054f7
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 935c6716e27bd481e97897dd9e1de595
+timeCreated: 1511395157
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts.meta
new file mode 100644
index 0000000..e41a77c
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 05a6a02c28ee77a49b6fcadf67aff3b7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef
new file mode 100644
index 0000000..a23912c
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef
@@ -0,0 +1,15 @@
+{
+ "name": "FMODUnityResonance",
+ "references": [
+ "FMODUnity"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef.meta
new file mode 100644
index 0000000..7286b11
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 44d09cf463b68274884d8a3c8a94e528
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs
new file mode 100644
index 0000000..c6c6b36
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs
@@ -0,0 +1,290 @@
+// Copyright 2017 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using FMODUnity;
+
+namespace FMODUnityResonance
+{
+ /// This is the main Resonance Audio class that communicates with the FMOD Unity integration. Native
+ /// functions of the system can only be called through this class to preserve the internal system
+ /// functionality.
+ public static class FmodResonanceAudio
+ {
+ /// Maximum allowed gain value in decibels.
+ public const float MaxGainDb = 24.0f;
+
+ /// Minimum allowed gain value in decibels.
+ public const float MinGainDb = -24.0f;
+
+ /// Maximum allowed reverb brightness modifier value.
+ public const float MaxReverbBrightness = 1.0f;
+
+ /// Minimum allowed reverb brightness modifier value.
+ public const float MinReverbBrightness = -1.0f;
+
+ /// Maximum allowed reverb time modifier value.
+ public const float MaxReverbTime = 3.0f;
+
+ /// Maximum allowed reflectivity multiplier of a room surface material.
+ public const float MaxReflectivity = 2.0f;
+
+ // Right-handed to left-handed matrix converter (and vice versa).
+ private static readonly Matrix4x4 flipZ = Matrix4x4.Scale(new Vector3(1, 1, -1));
+
+ // Get a handle to the Resonance Audio Listener FMOD Plugin.
+ private static readonly string listenerPluginName = "Resonance Audio Listener";
+
+ // Size of |RoomProperties| struct in bytes.
+ private static readonly int roomPropertiesSize = FMOD.MarshalHelper.SizeOf(typeof(RoomProperties));
+
+ // Plugin data parameter index for the room properties.
+ private static readonly int roomPropertiesIndex = 1;
+
+ // Boundaries instance to be used in room detection logic.
+ private static Bounds bounds = new Bounds(Vector3.zero, Vector3.zero);
+
+ // Container to store the currently active rooms in the scene.
+ private static List enabledRooms = new List();
+
+ // Current listener position.
+ private static FMOD.VECTOR listenerPositionFmod = new FMOD.VECTOR();
+
+ // FMOD Resonance Audio Listener Plugin.
+ private static FMOD.DSP listenerPlugin;
+
+ /// Updates the room effects of the environment with given |room| properties.
+ /// @note This should only be called from the main Unity thread.
+ public static void UpdateAudioRoom(FmodResonanceAudioRoom room, bool roomEnabled)
+ {
+ // Update the enabled rooms list.
+ if (roomEnabled)
+ {
+ if (!enabledRooms.Contains(room))
+ {
+ enabledRooms.Add(room);
+ }
+ }
+ else
+ {
+ enabledRooms.Remove(room);
+ }
+ // Update the current room effects to be applied.
+ if (enabledRooms.Count > 0)
+ {
+ FmodResonanceAudioRoom currentRoom = enabledRooms[enabledRooms.Count - 1];
+ RoomProperties roomProperties = GetRoomProperties(currentRoom);
+ // Pass the room properties into a pointer.
+ IntPtr roomPropertiesPtr = Marshal.AllocHGlobal(roomPropertiesSize);
+ Marshal.StructureToPtr(roomProperties, roomPropertiesPtr, false);
+ ListenerPlugin.setParameterData(roomPropertiesIndex, GetBytes(roomPropertiesPtr,
+ roomPropertiesSize));
+ Marshal.FreeHGlobal(roomPropertiesPtr);
+ }
+ else
+ {
+ // Set the room properties to a null room, which will effectively disable the room effects.
+ ListenerPlugin.setParameterData(roomPropertiesIndex, GetBytes(IntPtr.Zero, 0));
+ }
+ }
+
+ /// Returns whether the listener is currently inside the given |room| boundaries.
+ public static bool IsListenerInsideRoom(FmodResonanceAudioRoom room)
+ {
+ // Compute the room position relative to the listener.
+ FMOD.VECTOR unused;
+ RuntimeManager.CoreSystem.get3DListenerAttributes(0, out listenerPositionFmod, out unused,
+ out unused, out unused);
+ Vector3 listenerPosition = new Vector3(listenerPositionFmod.x, listenerPositionFmod.y,
+ listenerPositionFmod.z);
+ Vector3 relativePosition = listenerPosition - room.transform.position;
+ Quaternion rotationInverse = Quaternion.Inverse(room.transform.rotation);
+ // Set the size of the room as the boundary and return whether the listener is inside.
+ bounds.size = Vector3.Scale(room.transform.lossyScale, room.Size);
+ return bounds.Contains(rotationInverse * relativePosition);
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ private struct RoomProperties
+ {
+ // Center position of the room in world space.
+ public float PositionX;
+ public float PositionY;
+ public float PositionZ;
+
+ // Rotation (quaternion) of the room in world space.
+ public float RotationX;
+ public float RotationY;
+ public float RotationZ;
+ public float RotationW;
+
+ // Size of the shoebox room in world space.
+ public float DimensionsX;
+ public float DimensionsY;
+ public float DimensionsZ;
+
+ // Material name of each surface of the shoebox room.
+ public FmodResonanceAudioRoom.SurfaceMaterial MaterialLeft;
+ public FmodResonanceAudioRoom.SurfaceMaterial MaterialRight;
+ public FmodResonanceAudioRoom.SurfaceMaterial MaterialBottom;
+ public FmodResonanceAudioRoom.SurfaceMaterial MaterialTop;
+ public FmodResonanceAudioRoom.SurfaceMaterial MaterialFront;
+ public FmodResonanceAudioRoom.SurfaceMaterial MaterialBack;
+
+ // User defined uniform scaling factor for reflectivity. This parameter has no effect when set
+ // to 1.0f.
+ public float ReflectionScalar;
+
+ // User defined reverb tail gain multiplier. This parameter has no effect when set to 0.0f.
+ public float ReverbGain;
+
+ // Adjusts the reverberation time across all frequency bands. RT60 values are multiplied by this
+ // factor. Has no effect when set to 1.0f.
+ public float ReverbTime;
+
+ // Controls the slope of a line from the lowest to the highest RT60 values (increases high
+ // frequency RT60s when positive, decreases when negative). Has no effect when set to 0.0f.
+ public float ReverbBrightness;
+ };
+
+ // Returns the FMOD Resonance Audio Listener Plugin.
+ private static FMOD.DSP ListenerPlugin
+ {
+ get
+ {
+ if (!listenerPlugin.hasHandle())
+ {
+ listenerPlugin = Initialize();
+ }
+ return listenerPlugin;
+ }
+ }
+
+ // Converts given |db| value to its amplitude equivalent where 'dB = 20 * log10(amplitude)'.
+ private static float ConvertAmplitudeFromDb(float db)
+ {
+ return Mathf.Pow(10.0f, 0.05f * db);
+ }
+
+ // Converts given |position| and |rotation| from Unity space to audio space.
+ private static void ConvertAudioTransformFromUnity(ref Vector3 position,
+ ref Quaternion rotation)
+ {
+ // Compose the transformation matrix.
+ Matrix4x4 transformMatrix = Matrix4x4.TRS(position, rotation, Vector3.one);
+ // Convert the transformation matrix from left-handed to right-handed.
+ transformMatrix = flipZ * transformMatrix * flipZ;
+ // Update |position| and |rotation| respectively.
+ position = transformMatrix.GetColumn(3);
+ rotation = Quaternion.LookRotation(transformMatrix.GetColumn(2), transformMatrix.GetColumn(1));
+ }
+
+ // Returns a byte array of |length| created from |ptr|.
+ private static byte[] GetBytes(IntPtr ptr, int length)
+ {
+ if (ptr != IntPtr.Zero)
+ {
+ byte[] byteArray = new byte[length];
+ Marshal.Copy(ptr, byteArray, 0, length);
+ return byteArray;
+ }
+ // Return an empty array if the pointer is null.
+ return new byte[1];
+ }
+
+ // Returns room properties of the given |room|.
+ private static RoomProperties GetRoomProperties(FmodResonanceAudioRoom room)
+ {
+ RoomProperties roomProperties;
+ Vector3 position = room.transform.position;
+ Quaternion rotation = room.transform.rotation;
+ Vector3 scale = Vector3.Scale(room.transform.lossyScale, room.Size);
+ ConvertAudioTransformFromUnity(ref position, ref rotation);
+ roomProperties.PositionX = position.x;
+ roomProperties.PositionY = position.y;
+ roomProperties.PositionZ = position.z;
+ roomProperties.RotationX = rotation.x;
+ roomProperties.RotationY = rotation.y;
+ roomProperties.RotationZ = rotation.z;
+ roomProperties.RotationW = rotation.w;
+ roomProperties.DimensionsX = scale.x;
+ roomProperties.DimensionsY = scale.y;
+ roomProperties.DimensionsZ = scale.z;
+ roomProperties.MaterialLeft = room.LeftWall;
+ roomProperties.MaterialRight = room.RightWall;
+ roomProperties.MaterialBottom = room.Floor;
+ roomProperties.MaterialTop = room.Ceiling;
+ roomProperties.MaterialFront = room.FrontWall;
+ roomProperties.MaterialBack = room.BackWall;
+ roomProperties.ReverbGain = ConvertAmplitudeFromDb(room.ReverbGainDb);
+ roomProperties.ReverbTime = room.ReverbTime;
+ roomProperties.ReverbBrightness = room.ReverbBrightness;
+ roomProperties.ReflectionScalar = room.Reflectivity;
+ return roomProperties;
+ }
+
+ // Initializes and returns the FMOD Resonance Audio Listener Plugin.
+ private static FMOD.DSP Initialize()
+ {
+ // Search through all busses on in banks.
+ int numBanks = 0;
+ FMOD.DSP dsp = new FMOD.DSP();
+ FMOD.Studio.Bank[] banks = null;
+ RuntimeManager.StudioSystem.getBankCount(out numBanks);
+ RuntimeManager.StudioSystem.getBankList(out banks);
+ for (int currentBank = 0; currentBank < numBanks; ++currentBank)
+ {
+ int numBusses = 0;
+ FMOD.Studio.Bus[] busses = null;
+ banks[currentBank].getBusCount(out numBusses);
+ banks[currentBank].getBusList(out busses);
+ for (int currentBus = 0; currentBus < numBusses; ++currentBus)
+ {
+ // Make sure the channel group of the current bus is assigned properly.
+ string busPath = null;
+ busses[currentBus].getPath(out busPath);
+ RuntimeManager.StudioSystem.getBus(busPath, out busses[currentBus]);
+ busses[currentBus].lockChannelGroup();
+ RuntimeManager.StudioSystem.flushCommands();
+ FMOD.ChannelGroup channelGroup;
+ busses[currentBus].getChannelGroup(out channelGroup);
+ if (channelGroup.hasHandle())
+ {
+ int numDsps = 0;
+ channelGroup.getNumDSPs(out numDsps);
+ for (int currentDsp = 0; currentDsp < numDsps; ++currentDsp)
+ {
+ channelGroup.getDSP(currentDsp, out dsp);
+ string dspNameSb;
+ int unusedInt = 0;
+ uint unusedUint = 0;
+ dsp.getInfo(out dspNameSb, out unusedUint, out unusedInt, out unusedInt, out unusedInt);
+ if (dspNameSb.ToString().Equals(listenerPluginName) && dsp.hasHandle())
+ {
+ return dsp;
+ }
+ }
+ }
+ busses[currentBus].unlockChannelGroup();
+ }
+ }
+ RuntimeUtils.DebugLogError(listenerPluginName + " not found in the FMOD project.");
+ return dsp;
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs.meta
new file mode 100644
index 0000000..b18eab0
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6794e6301575a445d8588930a0752568
+timeCreated: 1511395157
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs
new file mode 100644
index 0000000..e74449c
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs
@@ -0,0 +1,121 @@
+// Copyright 2017 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using UnityEngine;
+using UnityEngine.Serialization;
+using System.Collections;
+
+namespace FMODUnityResonance
+{
+ /// Resonance Audio room component that simulates environmental effects of a room with respect to
+ /// the properties of the attached game object.
+ [AddComponentMenu("ResonanceAudio/FmodResonanceAudioRoom")]
+ public class FmodResonanceAudioRoom : MonoBehaviour
+ {
+ /// Material type that determines the acoustic properties of a room surface.
+ public enum SurfaceMaterial
+ {
+ Transparent = 0, ///< Transparent
+ AcousticCeilingTiles = 1, ///< Acoustic ceiling tiles
+ BrickBare = 2, ///< Brick, bare
+ BrickPainted = 3, ///< Brick, painted
+ ConcreteBlockCoarse = 4, ///< Concrete block, coarse
+ ConcreteBlockPainted = 5, ///< Concrete block, painted
+ CurtainHeavy = 6, ///< Curtain, heavy
+ FiberglassInsulation = 7, ///< Fiberglass insulation
+ GlassThin = 8, ///< Glass, thin
+ GlassThick = 9, ///< Glass, thick
+ Grass = 10, ///< Grass
+ LinoleumOnConcrete = 11, ///< Linoleum on concrete
+ Marble = 12, ///< Marble
+ Metal = 13, ///< Galvanized sheet metal
+ ParquetOnConcrete = 14, ///< Parquet on concrete
+ PlasterRough = 15, ///< Plaster, rough
+ PlasterSmooth = 16, ///< Plaster, smooth
+ PlywoodPanel = 17, ///< Plywood panel
+ PolishedConcreteOrTile = 18, ///< Polished concrete or tile
+ Sheetrock = 19, ///< Sheetrock
+ WaterOrIceSurface = 20, ///< Water or ice surface
+ WoodCeiling = 21, ///< Wood ceiling
+ WoodPanel = 22 ///< Wood panel
+ }
+
+ /// Room surface material in negative x direction.
+ [FormerlySerializedAs("leftWall")]
+ public SurfaceMaterial LeftWall = SurfaceMaterial.ConcreteBlockCoarse;
+
+ /// Room surface material in positive x direction.
+ [FormerlySerializedAs("rightWall")]
+ public SurfaceMaterial RightWall = SurfaceMaterial.ConcreteBlockCoarse;
+
+ /// Room surface material in negative y direction.
+ [FormerlySerializedAs("floor")]
+ public SurfaceMaterial Floor = SurfaceMaterial.ParquetOnConcrete;
+
+ /// Room surface material in positive y direction.
+ [FormerlySerializedAs("ceiling")]
+ public SurfaceMaterial Ceiling = SurfaceMaterial.PlasterRough;
+
+ /// Room surface material in negative z direction.
+ [FormerlySerializedAs("backWall")]
+ public SurfaceMaterial BackWall = SurfaceMaterial.ConcreteBlockCoarse;
+
+ /// Room surface material in positive z direction.
+ [FormerlySerializedAs("frontWall")]
+ public SurfaceMaterial FrontWall = SurfaceMaterial.ConcreteBlockCoarse;
+
+ /// Reflectivity scalar for each surface of the room.
+ [FormerlySerializedAs("reflectivity")]
+ public float Reflectivity = 1.0f;
+
+ /// Reverb gain modifier in decibels.
+ [FormerlySerializedAs("reverbGainDb")]
+ public float ReverbGainDb = 0.0f;
+
+ /// Reverb brightness modifier.
+ [FormerlySerializedAs("reverbBrightness")]
+ public float ReverbBrightness = 0.0f;
+
+ /// Reverb time modifier.
+ [FormerlySerializedAs("reverbTime")]
+ public float ReverbTime = 1.0f;
+
+ /// Size of the room (normalized with respect to scale of the game object).
+ [FormerlySerializedAs("size")]
+ public Vector3 Size = Vector3.one;
+
+ private void OnEnable()
+ {
+ FmodResonanceAudio.UpdateAudioRoom(this, FmodResonanceAudio.IsListenerInsideRoom(this));
+ }
+
+ private void OnDisable()
+ {
+ FmodResonanceAudio.UpdateAudioRoom(this, false);
+ }
+
+ private void Update()
+ {
+ FmodResonanceAudio.UpdateAudioRoom(this, FmodResonanceAudio.IsListenerInsideRoom(this));
+ }
+
+ private void OnDrawGizmosSelected()
+ {
+ // Draw shoebox model wireframe of the room.
+ Gizmos.color = Color.yellow;
+ Gizmos.matrix = transform.localToWorldMatrix;
+ Gizmos.DrawWireCube(Vector3.zero, Size);
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs.meta b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs.meta
new file mode 100644
index 0000000..8a43cda
--- /dev/null
+++ b/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6b0c5e63920ee4f55b7ec5248525af4b
+timeCreated: 1511395157
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images.meta b/Assets/Plugins/FMOD/images.meta
new file mode 100644
index 0000000..9f1ffc4
--- /dev/null
+++ b/Assets/Plugins/FMOD/images.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 27e5eef2bd66ffe429eebdc4579b7231
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/AddIcon.png b/Assets/Plugins/FMOD/images/AddIcon.png
new file mode 100644
index 0000000..62d6e58
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/AddIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:860e3a60f97b4f9961eda80617e922ceffeb67aa145077ba0599863ca306a467
+size 380
diff --git a/Assets/Plugins/FMOD/images/AddIcon.png.meta b/Assets/Plugins/FMOD/images/AddIcon.png.meta
new file mode 100644
index 0000000..036170f
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/AddIcon.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 3300e81f02e64924eb7cb7782713b126
+timeCreated: 1455151837
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/ArrowIcon.png b/Assets/Plugins/FMOD/images/ArrowIcon.png
new file mode 100644
index 0000000..d618441
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/ArrowIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ad41545295b579cf3d262f069c5b9ec48b03bd5a1f64a465b7af44272f66cb7
+size 292
diff --git a/Assets/Plugins/FMOD/images/ArrowIcon.png.meta b/Assets/Plugins/FMOD/images/ArrowIcon.png.meta
new file mode 100644
index 0000000..7f07938
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/ArrowIcon.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 01c0101f357b9da4ba78b8f58c290f86
+timeCreated: 1455161898
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/BankIcon.png b/Assets/Plugins/FMOD/images/BankIcon.png
new file mode 100644
index 0000000..2de820b
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/BankIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:057c16f44a3725bb4228401150c905b384ce1e1dfde6902ab074b8405c05b7c7
+size 3699
diff --git a/Assets/Plugins/FMOD/images/BankIcon.png.meta b/Assets/Plugins/FMOD/images/BankIcon.png.meta
new file mode 100644
index 0000000..ca74c12
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/BankIcon.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: a7e06068a7215854a84bf5ed8280ed15
+timeCreated: 1433208188
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/Border.png b/Assets/Plugins/FMOD/images/Border.png
new file mode 100644
index 0000000..4d9969e
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Border.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe700034ded2e2586d707689971698310ce5964018d1a774fb6c6ed9f9060d27
+size 179
diff --git a/Assets/Plugins/FMOD/images/Border.png.meta b/Assets/Plugins/FMOD/images/Border.png.meta
new file mode 100644
index 0000000..57902be
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Border.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 40848578d1961334d820821bec6175a4
+timeCreated: 1455150446
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/BrowserIcon.png b/Assets/Plugins/FMOD/images/BrowserIcon.png
new file mode 100644
index 0000000..6e0acd4
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/BrowserIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e45e42c47b7bf4214d50dcdca6ee7c7b47cce163eb948f8ffcdbf99837fe504c
+size 3194
diff --git a/Assets/Plugins/FMOD/images/BrowserIcon.png.meta b/Assets/Plugins/FMOD/images/BrowserIcon.png.meta
new file mode 100644
index 0000000..09b5db0
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/BrowserIcon.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: c783b763d12874147876e070661b66ab
+timeCreated: 1455688158
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/ContinuousParameterIcon.png b/Assets/Plugins/FMOD/images/ContinuousParameterIcon.png
new file mode 100644
index 0000000..e317c4c
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/ContinuousParameterIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:765322a24dd9be4feda19b5338f83cfdb4250a329c7ddd6e784b4205cb9e5f40
+size 3234
diff --git a/Assets/Plugins/FMOD/images/ContinuousParameterIcon.png.meta b/Assets/Plugins/FMOD/images/ContinuousParameterIcon.png.meta
new file mode 100644
index 0000000..982f7d3
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/ContinuousParameterIcon.png.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: b92803770616fc747bc3c40ffaec0a42
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/CopyIcon.png b/Assets/Plugins/FMOD/images/CopyIcon.png
new file mode 100644
index 0000000..41013f2
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/CopyIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d2b04ee62fd5d8072051bce97cf0edb1465ed43e71ac14485869297157ea05a9
+size 552
diff --git a/Assets/Plugins/FMOD/images/CopyIcon.png.meta b/Assets/Plugins/FMOD/images/CopyIcon.png.meta
new file mode 100644
index 0000000..17246d5
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/CopyIcon.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 6e164dcb85fc8ad4b9ab2f1e883862d2
+timeCreated: 1455688729
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 1
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 0
+ textureType: -1
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/CrossYellow.png b/Assets/Plugins/FMOD/images/CrossYellow.png
new file mode 100644
index 0000000..ab9a2f6
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/CrossYellow.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76090493a60a8bf675e1ab27c5183fc0c1624c889ca6dfe64a703cde2187e88d
+size 278
diff --git a/Assets/Plugins/FMOD/images/CrossYellow.png.meta b/Assets/Plugins/FMOD/images/CrossYellow.png.meta
new file mode 100644
index 0000000..aba7e3e
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/CrossYellow.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 348d2265b48c67342a4db2a7062813fa
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/Delete.png b/Assets/Plugins/FMOD/images/Delete.png
new file mode 100644
index 0000000..3bbc094
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Delete.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ca01b263c0395dce602ba7ff5a836d7f461216d860427a0e3df55a7ab71efa6
+size 221
diff --git a/Assets/Plugins/FMOD/images/Delete.png.meta b/Assets/Plugins/FMOD/images/Delete.png.meta
new file mode 100644
index 0000000..72f6edb
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Delete.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 196080340db65c44883dd3f599556fb9
+timeCreated: 1434604329
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/DiscreteParameterIcon.png b/Assets/Plugins/FMOD/images/DiscreteParameterIcon.png
new file mode 100644
index 0000000..b5fd7a7
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/DiscreteParameterIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bae2b164cbe65ba21d1d509da1f6861c82256a1e8402a7d6d265e7f98d5ebc11
+size 3041
diff --git a/Assets/Plugins/FMOD/images/DiscreteParameterIcon.png.meta b/Assets/Plugins/FMOD/images/DiscreteParameterIcon.png.meta
new file mode 100644
index 0000000..38fe5df
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/DiscreteParameterIcon.png.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: 509563e7079a6ed4cbf3b3240327e702
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/EventIcon.png b/Assets/Plugins/FMOD/images/EventIcon.png
new file mode 100644
index 0000000..639d035
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/EventIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:846f36969a9193bb47cde4c12d2b39c76d3eaa9db4d8ba8b16eb76d21225f24b
+size 705
diff --git a/Assets/Plugins/FMOD/images/EventIcon.png.meta b/Assets/Plugins/FMOD/images/EventIcon.png.meta
new file mode 100644
index 0000000..ca29faf
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/EventIcon.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: a602f206f9cb31f439c79a2fe23687c5
+timeCreated: 1432616010
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/FMODLogoBlack.png b/Assets/Plugins/FMOD/images/FMODLogoBlack.png
new file mode 100644
index 0000000..84f5bfc
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FMODLogoBlack.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cece587e055d82ea2776b0ebff697ce32e024f301ed62077a573e851c75dcab
+size 9688
diff --git a/Assets/Plugins/FMOD/images/FMODLogoBlack.png.meta b/Assets/Plugins/FMOD/images/FMODLogoBlack.png.meta
new file mode 100644
index 0000000..022862c
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FMODLogoBlack.png.meta
@@ -0,0 +1,144 @@
+fileFormatVersion: 2
+guid: 36e46b3c334e47e41a0b4ff2f26905ea
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: PS4
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: iPhone
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/FMODLogoWhite.png b/Assets/Plugins/FMOD/images/FMODLogoWhite.png
new file mode 100644
index 0000000..7af7037
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FMODLogoWhite.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b766d70460bfa442ede86dcdaeac016650552c511be711319c94b74554a7fd9f
+size 8803
diff --git a/Assets/Plugins/FMOD/images/FMODLogoWhite.png.meta b/Assets/Plugins/FMOD/images/FMODLogoWhite.png.meta
new file mode 100644
index 0000000..d61e8b2
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FMODLogoWhite.png.meta
@@ -0,0 +1,144 @@
+fileFormatVersion: 2
+guid: 8fd8ccb8d7e81d943b28ea7975c7185d
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: PS4
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: iPhone
+ maxTextureSize: 256
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/FolderIconClosed.png b/Assets/Plugins/FMOD/images/FolderIconClosed.png
new file mode 100644
index 0000000..014196b
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FolderIconClosed.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e0e2cfe75a26e20382f957b843f704ce604a0b24e5152470ebd28208cfac212
+size 2963
diff --git a/Assets/Plugins/FMOD/images/FolderIconClosed.png.meta b/Assets/Plugins/FMOD/images/FolderIconClosed.png.meta
new file mode 100644
index 0000000..79e34c1
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FolderIconClosed.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 70efeb6d97126f843b30b8ed62d18a4f
+timeCreated: 1432621560
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/FolderIconOpen.png b/Assets/Plugins/FMOD/images/FolderIconOpen.png
new file mode 100644
index 0000000..ffded31
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FolderIconOpen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a5f22962370823cae68458fcc089dd0759636aff6d1e2f45bd701d740aa5598
+size 3221
diff --git a/Assets/Plugins/FMOD/images/FolderIconOpen.png.meta b/Assets/Plugins/FMOD/images/FolderIconOpen.png.meta
new file mode 100644
index 0000000..e84e508
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/FolderIconOpen.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: d2b54e4f7f80b9448a41d3c5985f5672
+timeCreated: 1432621574
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/LabeledParameterIcon.png b/Assets/Plugins/FMOD/images/LabeledParameterIcon.png
new file mode 100644
index 0000000..bbc2757
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/LabeledParameterIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:929ddbd86aad8bc5ae3b466bb2f5f36ed953da22b04cbf4dd8ab8166e4ef91b4
+size 3101
diff --git a/Assets/Plugins/FMOD/images/LabeledParameterIcon.png.meta b/Assets/Plugins/FMOD/images/LabeledParameterIcon.png.meta
new file mode 100644
index 0000000..15d8004
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/LabeledParameterIcon.png.meta
@@ -0,0 +1,92 @@
+fileFormatVersion: 2
+guid: b4d696e5c0be6f44bb2f02aa41320656
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/LevelMeter.png b/Assets/Plugins/FMOD/images/LevelMeter.png
new file mode 100644
index 0000000..27ffcca
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/LevelMeter.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf765236491fd508c50e16b64a19b8f27e79f2174d94c61dd2399dd39ebf8d88
+size 2685
diff --git a/Assets/Plugins/FMOD/images/LevelMeter.png.meta b/Assets/Plugins/FMOD/images/LevelMeter.png.meta
new file mode 100644
index 0000000..01c8d7f
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/LevelMeter.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 21e7a3d41a926364a8b9a6704ebe80d8
+timeCreated: 1433917421
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/LevelMeterOff.png b/Assets/Plugins/FMOD/images/LevelMeterOff.png
new file mode 100644
index 0000000..81068bd
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/LevelMeterOff.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7e162e74d2e9c71d12514bd3199c46cb79046e2e2df315aa8bf5587f61bbd6cd
+size 2194
diff --git a/Assets/Plugins/FMOD/images/LevelMeterOff.png.meta b/Assets/Plugins/FMOD/images/LevelMeterOff.png.meta
new file mode 100644
index 0000000..e27f480
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/LevelMeterOff.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 48dc5470d93f669419f294fcd33f7b7c
+timeCreated: 1434426551
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/NotFound.png b/Assets/Plugins/FMOD/images/NotFound.png
new file mode 100644
index 0000000..ca6e7b5
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/NotFound.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ae518102dd2ae8fab1a9bd2f526c8897de491f55f28ceb72ac3a4e0365d330d
+size 3139
diff --git a/Assets/Plugins/FMOD/images/NotFound.png.meta b/Assets/Plugins/FMOD/images/NotFound.png.meta
new file mode 100644
index 0000000..987e41d
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/NotFound.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 1138ab068176f29499337d7a73dfecd9
+timeCreated: 1432798099
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/Preview.png b/Assets/Plugins/FMOD/images/Preview.png
new file mode 100644
index 0000000..b4416d3
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Preview.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5442882e67f6bd03f05d5cdaf38b12ab53099e2fc002c17ff9d75fe74d917ad1
+size 17576
diff --git a/Assets/Plugins/FMOD/images/Preview.png.meta b/Assets/Plugins/FMOD/images/Preview.png.meta
new file mode 100644
index 0000000..915e1cc
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Preview.png.meta
@@ -0,0 +1,56 @@
+fileFormatVersion: 2
+guid: 0793eda432fc5df4ab1291e6baacd771
+timeCreated: 1434430906
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/PreviewEmitter.png b/Assets/Plugins/FMOD/images/PreviewEmitter.png
new file mode 100644
index 0000000..bbbbe10
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/PreviewEmitter.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d555a49c7381486bc846b226dbaedf52ae4bf3206e7f150c07756641b3228e88
+size 278
diff --git a/Assets/Plugins/FMOD/images/PreviewEmitter.png.meta b/Assets/Plugins/FMOD/images/PreviewEmitter.png.meta
new file mode 100644
index 0000000..f394f47
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/PreviewEmitter.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 9519043db3741934fa01455c47683e8c
+timeCreated: 1434431177
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 1
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 0
+ textureType: -1
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/SearchIconBlack.png b/Assets/Plugins/FMOD/images/SearchIconBlack.png
new file mode 100644
index 0000000..4118e53
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/SearchIconBlack.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17a08ec9844a6c30a78346c21d4ea627645fa217d8e1e6ef8225885e80c663ef
+size 3025
diff --git a/Assets/Plugins/FMOD/images/SearchIconBlack.png.meta b/Assets/Plugins/FMOD/images/SearchIconBlack.png.meta
new file mode 100644
index 0000000..143c5b2
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/SearchIconBlack.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: 99471facfde9fb84dbe4a81ad570ebce
+timeCreated: 1434602090
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/SelectedAlt.png b/Assets/Plugins/FMOD/images/SelectedAlt.png
new file mode 100644
index 0000000..b39f163
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/SelectedAlt.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9450a6d1836697cc7b196df8d9b829c66dc9e38400cd00e78abc0fa0d4290b84
+size 170
diff --git a/Assets/Plugins/FMOD/images/SelectedAlt.png.meta b/Assets/Plugins/FMOD/images/SelectedAlt.png.meta
new file mode 100644
index 0000000..b9b9517
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/SelectedAlt.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 8ce9b717b1bc7564cbe35664f2f178a7
+timeCreated: 1455161898
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/SnapshotIcon.png b/Assets/Plugins/FMOD/images/SnapshotIcon.png
new file mode 100644
index 0000000..86ac78d
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/SnapshotIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a64f883f76eec0a308b9af0607394b4030b3c0b25e22afaae48779b7525c2ef9
+size 737
diff --git a/Assets/Plugins/FMOD/images/SnapshotIcon.png.meta b/Assets/Plugins/FMOD/images/SnapshotIcon.png.meta
new file mode 100644
index 0000000..c589e16
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/SnapshotIcon.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: cf2bba5fb8be7e64ca39979f18eb372a
+timeCreated: 1434600422
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/StudioIcon.png b/Assets/Plugins/FMOD/images/StudioIcon.png
new file mode 100644
index 0000000..d5b631b
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/StudioIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:adb4854cc54817bc18bab8f51b6b9f5dd49220f7019877e596cb02fddf009dd8
+size 3581
diff --git a/Assets/Plugins/FMOD/images/StudioIcon.png.meta b/Assets/Plugins/FMOD/images/StudioIcon.png.meta
new file mode 100644
index 0000000..05d299b
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/StudioIcon.png.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: a4edfa5854cdec34b98b1c55f0562bdd
+timeCreated: 1434601223
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 8
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/TickGreen.png b/Assets/Plugins/FMOD/images/TickGreen.png
new file mode 100644
index 0000000..67a6b13
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TickGreen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6d253361b6878408e62b8aa8da4edb6167fa97c038748f18ebad22292cb6e65
+size 244
diff --git a/Assets/Plugins/FMOD/images/TickGreen.png.meta b/Assets/Plugins/FMOD/images/TickGreen.png.meta
new file mode 100644
index 0000000..da88976
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TickGreen.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 27533226416c4f549b9bec9c024100f7
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/TransportOpen.png b/Assets/Plugins/FMOD/images/TransportOpen.png
new file mode 100644
index 0000000..cd382e1
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportOpen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09901dc10713d986ef1df3b28d6d637d978263f86eebd18fddb57b8d7d3cf472
+size 4234
diff --git a/Assets/Plugins/FMOD/images/TransportOpen.png.meta b/Assets/Plugins/FMOD/images/TransportOpen.png.meta
new file mode 100644
index 0000000..99e4e6a
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportOpen.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: b0fb832e401d1514a9611735d8d340b1
+timeCreated: 1453178387
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/TransportPlayButtonOff.png b/Assets/Plugins/FMOD/images/TransportPlayButtonOff.png
new file mode 100644
index 0000000..382eaf7
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportPlayButtonOff.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7235df4b7a8cc331595984bae5f2f11f18a2da8808a92cbc268454ad7836999d
+size 3525
diff --git a/Assets/Plugins/FMOD/images/TransportPlayButtonOff.png.meta b/Assets/Plugins/FMOD/images/TransportPlayButtonOff.png.meta
new file mode 100644
index 0000000..a6479db
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportPlayButtonOff.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 29258b1336a580946bc144df00b74ac1
+timeCreated: 1453177025
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/TransportPlayButtonOn.png b/Assets/Plugins/FMOD/images/TransportPlayButtonOn.png
new file mode 100644
index 0000000..71dc6f0
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportPlayButtonOn.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6b3ef1497d5583fc59777d3e32b7f0841a1b40cad462f6c7b76e02b600cbe7d2
+size 3715
diff --git a/Assets/Plugins/FMOD/images/TransportPlayButtonOn.png.meta b/Assets/Plugins/FMOD/images/TransportPlayButtonOn.png.meta
new file mode 100644
index 0000000..ebe9b48
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportPlayButtonOn.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 2d777c9a14189d241aea1afeeeff448c
+timeCreated: 1453177025
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/TransportStopButtonOff.png b/Assets/Plugins/FMOD/images/TransportStopButtonOff.png
new file mode 100644
index 0000000..7cb939f
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportStopButtonOff.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3813b737ddf9a4c4ccbad813498d029e168f5d2bdb55ac4940f380f0ef34b9b
+size 3290
diff --git a/Assets/Plugins/FMOD/images/TransportStopButtonOff.png.meta b/Assets/Plugins/FMOD/images/TransportStopButtonOff.png.meta
new file mode 100644
index 0000000..924c927
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportStopButtonOff.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: cafa069c15865d543a07375373f0a18e
+timeCreated: 1453177025
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/TransportStopButtonOn.png b/Assets/Plugins/FMOD/images/TransportStopButtonOn.png
new file mode 100644
index 0000000..d913100
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportStopButtonOn.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b575ed82986cacca2633358315b4ff642d81fd277825afd54f4ddc5d97880b32
+size 3463
diff --git a/Assets/Plugins/FMOD/images/TransportStopButtonOn.png.meta b/Assets/Plugins/FMOD/images/TransportStopButtonOn.png.meta
new file mode 100644
index 0000000..4b6bbfd
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/TransportStopButtonOn.png.meta
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: eab53cb0959d1244aadeacf8b76c755c
+timeCreated: 1453177025
+licenseType: Store
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 1
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ cubemapConvolution: 0
+ cubemapConvolutionSteps: 7
+ cubemapConvolutionExponent: 1.5
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: 1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ rGBM: 0
+ compressionQuality: 50
+ allowsAlphaSplitting: 0
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 2
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/images/Wrench.png b/Assets/Plugins/FMOD/images/Wrench.png
new file mode 100644
index 0000000..196c857
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Wrench.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d6b8c5858c1ee781c129bd611fe94412088d7198285766ce88433901f85a22f
+size 521
diff --git a/Assets/Plugins/FMOD/images/Wrench.png.meta b/Assets/Plugins/FMOD/images/Wrench.png.meta
new file mode 100644
index 0000000..22fa4a3
--- /dev/null
+++ b/Assets/Plugins/FMOD/images/Wrench.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 507cd805ad331e54cb9e9cab5a9270b5
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platform_ios.mm b/Assets/Plugins/FMOD/platform_ios.mm
new file mode 100644
index 0000000..3704a11
--- /dev/null
+++ b/Assets/Plugins/FMOD/platform_ios.mm
@@ -0,0 +1,66 @@
+#import
+#import
+
+void (*gSuspendCallback)(bool suspend);
+bool gIsSuspended = false;
+
+extern "C" void RegisterSuspendCallback(void (*callback)(bool))
+{
+ if (!gSuspendCallback)
+ {
+ gSuspendCallback = callback;
+
+ [[NSNotificationCenter defaultCenter] addObserverForName:AVAudioSessionInterruptionNotification object:nil queue:nil usingBlock:^(NSNotification *notification)
+ {
+ bool began = [[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] intValue] == AVAudioSessionInterruptionTypeBegan;
+
+ if (began == gIsSuspended)
+ {
+ return;
+ }
+ if (@available(iOS 10.3, *))
+ {
+ if (began && [[notification.userInfo valueForKey:AVAudioSessionInterruptionWasSuspendedKey] boolValue])
+ {
+ return;
+ }
+ }
+
+ gIsSuspended = began;
+ if (!began)
+ {
+ [[AVAudioSession sharedInstance] setActive:TRUE error:nil];
+ }
+ if (gSuspendCallback)
+ {
+ gSuspendCallback(began);
+ }
+ }];
+
+ [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:nil usingBlock:^(NSNotification *notification)
+ {
+#ifndef TARGET_OS_TV
+ if (!gIsSuspended)
+ {
+ return;
+ }
+#else
+ if (gSuspendCallback)
+ {
+ gSuspendCallback(true);
+ }
+#endif
+ NSError *errorMessage;
+ if(![[AVAudioSession sharedInstance] setActive:TRUE error:&errorMessage])
+ {
+ NSLog(@"UIApplicationDidBecomeActiveNotification: AVAudioSession.setAtive() failed: %@", errorMessage);
+ return;
+ }
+ if (gSuspendCallback)
+ {
+ gSuspendCallback(false);
+ }
+ gIsSuspended = false;
+ }];
+ }
+}
diff --git a/Assets/Plugins/FMOD/platform_ios.mm.meta b/Assets/Plugins/FMOD/platform_ios.mm.meta
new file mode 100644
index 0000000..6937d22
--- /dev/null
+++ b/Assets/Plugins/FMOD/platform_ios.mm.meta
@@ -0,0 +1,101 @@
+fileFormatVersion: 2
+guid: fc7eb3c9194584004bdf04921e5cb057
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude WebGL: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 0
+ Exclude tvOS: 0
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 1
+ settings:
+ AddToEmbeddedBinaries: false
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 1
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms.meta b/Assets/Plugins/FMOD/platforms.meta
new file mode 100644
index 0000000..127432b
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8b617f082dd1f0645bde3b4ff3cbc25a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android.meta b/Assets/Plugins/FMOD/platforms/android.meta
new file mode 100644
index 0000000..ba2ea9c
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ca9461535f8115a4fb8293c748bcd2e1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib.meta b/Assets/Plugins/FMOD/platforms/android/lib.meta
new file mode 100644
index 0000000..698c7b1
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 328160e4bc4e8b74296f830386ae016b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a.meta b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a.meta
new file mode 100644
index 0000000..d8346bf
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 54305e5cd6046514181f9b21fb0c44ed
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmod.so b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmod.so
new file mode 100644
index 0000000..894bf02
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmod.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmod.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmod.so.meta
new file mode 100644
index 0000000..9538424
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmod.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 1
+guid: 159cb3726937c6c498fa49eb627b0d96
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodL.so b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodL.so
new file mode 100644
index 0000000..459c5c9
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodL.so.meta
new file mode 100644
index 0000000..09c68d2
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 1
+guid: 6f74d8321b529d948a7672da4ca54356
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudio.so b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudio.so
new file mode 100644
index 0000000..fa81718
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudio.so.meta
new file mode 100644
index 0000000..17e07ba
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudio.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 1
+guid: e4d6c68823f34e440bfe4e4ecba4c113
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudioL.so b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudioL.so
new file mode 100644
index 0000000..3e15b97
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudioL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudioL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudioL.so.meta
new file mode 100644
index 0000000..d262319
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libfmodstudioL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 1
+guid: 85af50ee41bfd9c4fbd8107aee814c50
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libresonanceaudio.so b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libresonanceaudio.so
new file mode 100644
index 0000000..a77bf1a
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libresonanceaudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libresonanceaudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libresonanceaudio.so.meta
new file mode 100644
index 0000000..cbd974d
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/arm64-v8a/libresonanceaudio.so.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 2bd9aca31d63ca248bf159e7562a3609
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a.meta b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a.meta
new file mode 100644
index 0000000..fe43265
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 49cc70c20e469a541a7974182c9f588a
+folderAsset: yes
+timeCreated: 1447698325
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmod.so b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmod.so
new file mode 100644
index 0000000..8e17ec9
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmod.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmod.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmod.so.meta
new file mode 100644
index 0000000..5ad7d56
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmod.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: f71c8f89be7646142baed6d482d5e89c
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodL.so b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodL.so
new file mode 100644
index 0000000..b3d18e2
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodL.so.meta
new file mode 100644
index 0000000..d6a8b58
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 0e95029f987dfa248934eaa63745b504
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudio.so b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudio.so
new file mode 100644
index 0000000..40e8f5a
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudio.so.meta
new file mode 100644
index 0000000..cf4c024
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudio.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: cf01ad74bd6e5df46996c61b81ba590c
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudioL.so b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudioL.so
new file mode 100644
index 0000000..9001582
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudioL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudioL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudioL.so.meta
new file mode 100644
index 0000000..2435201
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libfmodstudioL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 8de47c7524234f64fb6a7d661154b1a3
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libresonanceaudio.so b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libresonanceaudio.so
new file mode 100644
index 0000000..162d439
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libresonanceaudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libresonanceaudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libresonanceaudio.so.meta
new file mode 100644
index 0000000..78ad526
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/armeabi-v7a/libresonanceaudio.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: fb0aabfc61c4c1548ac6990286c84327
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/fmod.jar b/Assets/Plugins/FMOD/platforms/android/lib/fmod.jar
new file mode 100644
index 0000000..0342d88
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/fmod.jar differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/fmod.jar.meta b/Assets/Plugins/FMOD/platforms/android/lib/fmod.jar.meta
new file mode 100644
index 0000000..e818fd0
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/fmod.jar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: cba124c31f7e10640bc2ff9464f8ac15
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86.meta
new file mode 100644
index 0000000..cb1892b
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 95bcdcdca315ef640bec049de80ee3eb
+folderAsset: yes
+timeCreated: 1447698325
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmod.so b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmod.so
new file mode 100644
index 0000000..5a30a35
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmod.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmod.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmod.so.meta
new file mode 100644
index 0000000..46cc678
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmod.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 099e80baee62d0c439475fae45e69f4e
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodL.so b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodL.so
new file mode 100644
index 0000000..73e0cfb
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodL.so.meta
new file mode 100644
index 0000000..ad48cdb
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 54236e4c5b88f494598efb4d226b44f0
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudio.so b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudio.so
new file mode 100644
index 0000000..254208c
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudio.so.meta
new file mode 100644
index 0000000..4b1d323
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudio.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: a20d361b085100b4997c4e5b0b83af31
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudioL.so b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudioL.so
new file mode 100644
index 0000000..fd008c9
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudioL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudioL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudioL.so.meta
new file mode 100644
index 0000000..fa35551
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86/libfmodstudioL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 0975b093811db4e4e9e67bc483ad2299
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libresonanceaudio.so b/Assets/Plugins/FMOD/platforms/android/lib/x86/libresonanceaudio.so
new file mode 100644
index 0000000..f85f8fa
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86/libresonanceaudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86/libresonanceaudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86/libresonanceaudio.so.meta
new file mode 100644
index 0000000..b5b5456
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86/libresonanceaudio.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 5c35d7fa6769b114aa63172aaf1fd782
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86_64.meta
new file mode 100644
index 0000000..3795f90
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86_64.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cefe84a452d22af44bc334c4c48b574d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmod.so b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmod.so
new file mode 100644
index 0000000..a25834f
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmod.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmod.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmod.so.meta
new file mode 100644
index 0000000..471c8fd
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmod.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 7b1a5b0e7617bcf49885fb2dd09d7085
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodL.so b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodL.so
new file mode 100644
index 0000000..e241986
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodL.so.meta
new file mode 100644
index 0000000..f53ebc4
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 51dea0d403c47f345a6efe70b23fe6e3
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudio.so b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudio.so
new file mode 100644
index 0000000..83df964
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudio.so.meta
new file mode 100644
index 0000000..f5f29aa
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudio.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 8c078c4748d95c2489bb3b82aa144194
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudioL.so b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudioL.so
new file mode 100644
index 0000000..9fe1afa
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudioL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudioL.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudioL.so.meta
new file mode 100644
index 0000000..0320775
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libfmodstudioL.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 9a5fc9953c8c261488bf0cb6c202e04b
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libresonanceaudio.so b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libresonanceaudio.so
new file mode 100644
index 0000000..9789f29
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libresonanceaudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libresonanceaudio.so.meta b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libresonanceaudio.so.meta
new file mode 100644
index 0000000..e1be61a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/lib/x86_64/libresonanceaudio.so.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 295b4c80a560c81409d44c273128b743
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/src.meta b/Assets/Plugins/FMOD/platforms/android/src.meta
new file mode 100644
index 0000000..5180d4a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 03be3f097a522854dbe1d585023925fb
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs b/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs
new file mode 100644
index 0000000..edbf978
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs
@@ -0,0 +1,127 @@
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+#if UNITY_ANDROID && !UNITY_EDITOR
+namespace FMOD
+{
+ public partial class VERSION
+ {
+ public const string dll = "fmod" + dllSuffix;
+ }
+}
+
+namespace FMOD.Studio
+{
+ public partial class STUDIO_VERSION
+ {
+ public const string dll = "fmodstudio" + dllSuffix;
+ }
+}
+#endif
+
+namespace FMODUnity
+{
+#if UNITY_EDITOR
+ [InitializeOnLoad]
+#endif
+ public class PlatformAndroid : Platform
+ {
+ static PlatformAndroid()
+ {
+ Settings.AddPlatformTemplate("2fea114e74ecf3c4f920e1d5cc1c4c40");
+ }
+
+ internal override string DisplayName { get { return "Android"; } }
+ internal override void DeclareRuntimePlatforms(Settings settings)
+ {
+ settings.DeclareRuntimePlatform(RuntimePlatform.Android, this);
+ }
+
+#if UNITY_EDITOR
+ internal override IEnumerable GetBuildTargets()
+ {
+ yield return BuildTarget.Android;
+ }
+
+ internal override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Android; } }
+
+ protected override BinaryAssetFolderInfo GetBinaryAssetFolder(BuildTarget buildTarget)
+ {
+ return new BinaryAssetFolderInfo("android", "Plugins/Android/libs");
+ }
+
+ private static readonly string[] Architectures = { "arm64-v8a", "armeabi-v7a", "x86", "x86_64" };
+
+ protected override IEnumerable GetBinaryFiles(BuildTarget buildTarget, bool allVariants, string suffix)
+ {
+ yield return new FileRecord("fmod.jar")
+ .WithAbsoluteVersion(FileLayout.Release_1_10, "Plugins/Android/fmod.jar");
+
+ foreach (string architecture in Architectures)
+ {
+ yield return new FileRecord(string.Format("{0}/libfmod{1}.so", architecture, suffix));
+ yield return new FileRecord(string.Format("{0}/libfmodstudio{1}.so", architecture, suffix));
+ }
+ }
+
+ protected override IEnumerable GetOptionalBinaryFiles(BuildTarget buildTarget, bool allVariants)
+ {
+ foreach (string architecture in Architectures)
+ {
+ yield return new FileRecord(string.Format("{0}/libgvraudio.so", architecture));
+ yield return new FileRecord(string.Format("{0}/libresonanceaudio.so", architecture));
+ }
+ }
+
+ internal override bool SupportsAdditionalCPP(BuildTarget target)
+ {
+ // Unity parses --additional-cpp arguments specified via
+ // PlayerSettings.SetAdditionalIl2CppArgs() incorrectly when the Android
+ // Export Project option is set.
+ return false;
+ }
+#endif
+
+ internal override string GetBankFolder()
+ {
+ return StaticGetBankFolder();
+ }
+
+ internal static string StaticGetBankFolder()
+ {
+ return (Settings.Instance.AndroidUseOBB || Settings.Instance.AndroidPatchBuild)
+ ? Application.streamingAssetsPath : "file:///android_asset";
+ }
+
+ internal override string GetPluginPath(string pluginName)
+ {
+ return StaticGetPluginPath(pluginName);
+ }
+
+ internal static string StaticGetPluginPath(string pluginName)
+ {
+ return string.Format("lib{0}.so", pluginName);
+ }
+#if UNITY_EDITOR
+ internal override OutputType[] ValidOutputTypes
+ {
+ get
+ {
+ return sValidOutputTypes;
+ }
+ }
+
+ private static OutputType[] sValidOutputTypes = {
+ new OutputType() { displayName = "Java Audio Track", outputType = FMOD.OUTPUTTYPE.AUDIOTRACK },
+ new OutputType() { displayName = "OpenSL ES", outputType = FMOD.OUTPUTTYPE.OPENSL },
+ new OutputType() { displayName = "AAudio", outputType = FMOD.OUTPUTTYPE.AAUDIO },
+ };
+
+ internal override int CoreCount { get { return MaximumCoreCount; } }
+#endif
+ }
+}
diff --git a/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs.meta b/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs.meta
new file mode 100644
index 0000000..cfd62be
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 97ba6cc2660c0ca498540d254701057a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5.meta b/Assets/Plugins/FMOD/platforms/html5.meta
new file mode 100644
index 0000000..8485acc
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2e8b0cce3730fcf4e996e9cd562a9858
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib.meta b/Assets/Plugins/FMOD/platforms/html5/lib.meta
new file mode 100644
index 0000000..631fa75
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b177b3448f6e68e4b9f8c04bee3914aa
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19.meta b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19.meta
new file mode 100644
index 0000000..21170c4
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 54847690d6c23734ca89652cb5ad8efb
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudio.a b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudio.a
new file mode 100644
index 0000000..923f194
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudio.a differ
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudio.a.meta b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudio.a.meta
new file mode 100644
index 0000000..e1a30e0
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudio.a.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 18569240b868e8b44a20d32b2df12f5c
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ WebGL: WebGL
+ second:
+ enabled: 0
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudioL.a b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudioL.a
new file mode 100644
index 0000000..d11fd72
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudioL.a differ
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudioL.a.meta b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudioL.a.meta
new file mode 100644
index 0000000..6e2d550
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/lib/2.0.19/libfmodstudioL.a.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 072de5b62d53c944fa2bae4cc3cd1754
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ WebGL: WebGL
+ second:
+ enabled: 0
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounityplugin.bc b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounityplugin.bc
new file mode 100644
index 0000000..3d7533b
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounityplugin.bc differ
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounityplugin.bc.meta b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounityplugin.bc.meta
new file mode 100644
index 0000000..3978b12
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounityplugin.bc.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 254f6ee9df4d3024d9c550104ea5feaf
+timeCreated: 1518408468
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ WebGL:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounitypluginL.bc b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounitypluginL.bc
new file mode 100644
index 0000000..7834a72
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounitypluginL.bc differ
diff --git a/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounitypluginL.bc.meta b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounitypluginL.bc.meta
new file mode 100644
index 0000000..a4704d1
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/lib/libfmodstudiounitypluginL.bc.meta
@@ -0,0 +1,23 @@
+fileFormatVersion: 2
+guid: 2dab3dda051681d4a9ea3ed67cb9877f
+timeCreated: 1518408468
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ WebGL:
+ enabled: 0
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/src.meta b/Assets/Plugins/FMOD/platforms/html5/src.meta
new file mode 100644
index 0000000..3a74b92
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 21a9406360b210946b0f52e8bf5ca333
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs b/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs
new file mode 100644
index 0000000..3c183e1
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs
@@ -0,0 +1,100 @@
+using System.Collections.Generic;
+using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+#if UNITY_WEBGL && !UNITY_EDITOR
+namespace FMOD
+{
+ public partial class VERSION
+ {
+ public const string dll = "__Internal";
+ }
+}
+
+namespace FMOD.Studio
+{
+ public partial class STUDIO_VERSION
+ {
+ public const string dll = "__Internal";
+ }
+}
+#endif
+
+namespace FMODUnity
+{
+#if UNITY_EDITOR
+ [InitializeOnLoad]
+#endif
+ public class PlatformWebGL : Platform
+ {
+ static PlatformWebGL()
+ {
+ Settings.AddPlatformTemplate("46fbfdf3fc43db0458918377fd40293e");
+ }
+
+ internal override string DisplayName { get { return "WebGL"; } }
+ internal override void DeclareRuntimePlatforms(Settings settings)
+ {
+ settings.DeclareRuntimePlatform(RuntimePlatform.WebGLPlayer, this);
+ }
+
+#if UNITY_EDITOR
+ internal override IEnumerable GetBuildTargets()
+ {
+ yield return BuildTarget.WebGL;
+ }
+
+ internal override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.WebGL; } }
+
+ protected override BinaryAssetFolderInfo GetBinaryAssetFolder(BuildTarget buildTarget)
+ {
+ return new BinaryAssetFolderInfo("html5", "Plugins/WebGL");
+ }
+
+ protected override IEnumerable GetBinaryFiles(BuildTarget buildTarget, bool allVariants, string suffix)
+ {
+ #if UNITY_2021_2_OR_NEWER
+ bool useWASM = true;
+ #else
+ bool useWASM = false;
+ #endif
+
+ if (allVariants || useWASM)
+ {
+ yield return new FileRecord(string.Format("2.0.19/libfmodstudio{0}.a", suffix));
+ }
+
+ if (allVariants || !useWASM)
+ {
+ yield return new FileRecord(string.Format("libfmodstudiounityplugin{0}.bc", suffix));
+ }
+ }
+
+ internal override bool IsFMODStaticallyLinked { get { return true; } }
+#endif
+
+ internal override string GetPluginPath(string pluginName)
+ {
+ #if UNITY_2021_2_OR_NEWER
+ return string.Format("{0}/{1}.a", GetPluginBasePath(), pluginName);
+ #else
+ return string.Format("{0}/{1}.bc", GetPluginBasePath(), pluginName);
+ #endif
+ }
+#if UNITY_EDITOR
+ internal override OutputType[] ValidOutputTypes
+ {
+ get
+ {
+ return sValidOutputTypes;
+ }
+ }
+
+ private static OutputType[] sValidOutputTypes = {
+ new OutputType() { displayName = "JavaScript webaudio output", outputType = FMOD.OUTPUTTYPE.WEBAUDIO },
+ };
+#endif
+ }
+}
diff --git a/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs.meta b/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs.meta
new file mode 100644
index 0000000..7fe0e95
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b87314b32fbe18943af496e4b47136c6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios.meta b/Assets/Plugins/FMOD/platforms/ios.meta
new file mode 100644
index 0000000..3010024
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 56ef07f8e7caf5f4589a020791b532cd
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib.meta b/Assets/Plugins/FMOD/platforms/ios/lib.meta
new file mode 100644
index 0000000..697c8df
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bf8c331b8ccdb944fa925884d9ffa69c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounityplugin.a b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounityplugin.a
new file mode 100644
index 0000000..42c5320
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounityplugin.a differ
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounityplugin.a.meta b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounityplugin.a.meta
new file mode 100644
index 0000000..4469cb9
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounityplugin.a.meta
@@ -0,0 +1,21 @@
+fileFormatVersion: 2
+guid: 79c89db1833831740aee981c0d90d2d4
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ iOS:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginL.a b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginL.a
new file mode 100644
index 0000000..6882d4a
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginL.a differ
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginL.a.meta b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginL.a.meta
new file mode 100644
index 0000000..465f32b
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginL.a.meta
@@ -0,0 +1,21 @@
+fileFormatVersion: 2
+guid: 5aa4057a8deee1c45a69677125e2c241
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ iOS:
+ enabled: 0
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulator.a b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulator.a
new file mode 100644
index 0000000..ed54723
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulator.a differ
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulator.a.meta b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulator.a.meta
new file mode 100644
index 0000000..92865c0
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulator.a.meta
@@ -0,0 +1,113 @@
+fileFormatVersion: 2
+guid: 26235204f425d41479c8e41c99e96f50
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulatorL.a b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulatorL.a
new file mode 100644
index 0000000..84fcd94
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulatorL.a differ
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulatorL.a.meta b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulatorL.a.meta
new file mode 100644
index 0000000..cdaff51
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/lib/libfmodstudiounitypluginsimulatorL.a.meta
@@ -0,0 +1,113 @@
+fileFormatVersion: 2
+guid: 9aed261b7fbc24099a9b58cbbf374583
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudio.a b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudio.a
new file mode 100644
index 0000000..7d35ac7
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudio.a differ
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudio.a.meta b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudio.a.meta
new file mode 100644
index 0000000..3a18196
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudio.a.meta
@@ -0,0 +1,61 @@
+fileFormatVersion: 2
+guid: bc5d15d8f7607af478126b815040cbd2
+timeCreated: 1511469552
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ LinuxUniversal:
+ enabled: 0
+ settings:
+ CPU: None
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXUniversal:
+ enabled: 0
+ settings:
+ CPU: None
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ iOS:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudiosimulator.a b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudiosimulator.a
new file mode 100644
index 0000000..f444d8f
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudiosimulator.a differ
diff --git a/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudiosimulator.a.meta b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudiosimulator.a.meta
new file mode 100644
index 0000000..ad06f69
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/lib/libresonanceaudiosimulator.a.meta
@@ -0,0 +1,113 @@
+fileFormatVersion: 2
+guid: 5ad1791b3b48a4ba39c30a2b4f438486
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/src.meta b/Assets/Plugins/FMOD/platforms/ios/src.meta
new file mode 100644
index 0000000..b815009
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: eb7a0bd9281687744b74c40dd220a50f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs b/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs
new file mode 100644
index 0000000..11b837d
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs
@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+#if UNITY_IPHONE && !UNITY_EDITOR
+namespace FMOD
+{
+ public partial class VERSION
+ {
+ public const string dll = "__Internal";
+ }
+}
+
+namespace FMOD.Studio
+{
+ public partial class STUDIO_VERSION
+ {
+ public const string dll = "__Internal";
+ }
+}
+#endif
+
+namespace FMODUnity
+{
+#if UNITY_EDITOR
+ [InitializeOnLoad]
+#endif
+ public class PlatformIOS : Platform
+ {
+ static PlatformIOS()
+ {
+ Settings.AddPlatformTemplate("0f8eb3f400726694eb47beb1a9f94ce8");
+ }
+
+ internal override string DisplayName { get { return "iOS"; } }
+ internal override void DeclareRuntimePlatforms(Settings settings)
+ {
+ settings.DeclareRuntimePlatform(RuntimePlatform.IPhonePlayer, this);
+ }
+
+#if UNITY_EDITOR
+ internal override IEnumerable GetBuildTargets()
+ {
+ yield return BuildTarget.iOS;
+ }
+
+ internal override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.iOS; } }
+
+ protected override BinaryAssetFolderInfo GetBinaryAssetFolder(BuildTarget buildTarget)
+ {
+ return new BinaryAssetFolderInfo("ios", "Plugins/iOS");
+ }
+
+ protected override IEnumerable GetBinaryFiles(BuildTarget buildTarget, bool allVariants, string suffix)
+ {
+ if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK)
+ {
+ yield return new FileRecord(string.Format("libfmodstudiounityplugin{0}.a", suffix));
+ }
+
+ if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.SimulatorSDK)
+ {
+ yield return new FileRecord(string.Format("libfmodstudiounitypluginsimulator{0}.a", suffix));
+ }
+ }
+
+ protected override IEnumerable GetOptionalBinaryFiles(BuildTarget buildTarget, bool allVariants)
+ {
+ if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK)
+ {
+ yield return new FileRecord("libgvraudio.a");
+ yield return new FileRecord("libresonanceaudio.a");
+ }
+
+ if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.SimulatorSDK)
+ {
+ yield return new FileRecord("libresonanceaudiosimulator.a");
+ }
+ }
+
+ internal override bool IsFMODStaticallyLinked { get { return true; } }
+
+ internal override bool SupportsAdditionalCPP(BuildTarget target)
+ {
+ return StaticSupportsAdditionalCpp();
+ }
+
+ public static bool StaticSupportsAdditionalCpp()
+ {
+ return false;
+ }
+#endif
+
+ internal override void LoadPlugins(FMOD.System coreSystem, Action reportResult)
+ {
+ StaticLoadPlugins(this, coreSystem, reportResult);
+ }
+
+ public static void StaticLoadPlugins(Platform platform, FMOD.System coreSystem,
+ Action reportResult)
+ {
+ platform.LoadStaticPlugins(coreSystem, reportResult);
+
+ }
+
+#if UNITY_EDITOR
+ internal override OutputType[] ValidOutputTypes
+ {
+ get
+ {
+ return sValidOutputTypes;
+ }
+ }
+
+ private static OutputType[] sValidOutputTypes = {
+ new OutputType() { displayName = "Core Audio", outputType = FMOD.OUTPUTTYPE.COREAUDIO },
+ };
+#endif
+ }
+}
diff --git a/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs.meta b/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs.meta
new file mode 100644
index 0000000..39fda2f
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bc1f51bc35d549941904cf062bae93a3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/linux.meta b/Assets/Plugins/FMOD/platforms/linux.meta
new file mode 100644
index 0000000..fe8abf4
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 127a9ee57a2a27a439bf9e6b2d5731b6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib.meta b/Assets/Plugins/FMOD/platforms/linux/lib.meta
new file mode 100644
index 0000000..832a048
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b28687fd18577ce4c838b916a4ed5c54
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib/x86_64.meta b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64.meta
new file mode 100644
index 0000000..1fd1bc0
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f99f1bb123ca3b6449fc49fc745c0fed
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudio.so b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudio.so
new file mode 100644
index 0000000..d418411
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudio.so.meta b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudio.so.meta
new file mode 100644
index 0000000..5218650
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudio.so.meta
@@ -0,0 +1,65 @@
+fileFormatVersion: 2
+guid: 9063aa11b1fcfcf4cb6030a076d14a30
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: None
+ Linux64:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ LinuxUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: None
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: None
+ OSXUniversal:
+ enabled: 0
+ settings:
+ CPU: None
+ SamsungTV:
+ enabled: 0
+ settings:
+ STV_MODEL: STANDARD_15
+ Win:
+ enabled: 0
+ settings:
+ CPU: None
+ Win64:
+ enabled: 0
+ settings:
+ CPU: None
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudioL.so b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudioL.so
new file mode 100644
index 0000000..8f1e232
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudioL.so differ
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudioL.so.meta b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudioL.so.meta
new file mode 100644
index 0000000..515e94e
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libfmodstudioL.so.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: b712c2a2ef1b63a438a33ba719ee90d4
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ OS: Linux
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libresonanceaudio.so b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libresonanceaudio.so
new file mode 100644
index 0000000..1724bd3
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libresonanceaudio.so differ
diff --git a/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libresonanceaudio.so.meta b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libresonanceaudio.so.meta
new file mode 100644
index 0000000..1a5c941
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/lib/x86_64/libresonanceaudio.so.meta
@@ -0,0 +1,69 @@
+fileFormatVersion: 2
+guid: bca6f630c310b4945b52486d2ed1da0a
+timeCreated: 1511469552
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ Any:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Editor:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: Linux
+ Linux:
+ enabled: 0
+ settings:
+ CPU: None
+ Linux64:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ LinuxUniversal:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: None
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: None
+ OSXUniversal:
+ enabled: 0
+ settings:
+ CPU: None
+ SamsungTV:
+ enabled: 0
+ settings:
+ STV_MODEL: STANDARD_15
+ Win:
+ enabled: 0
+ settings:
+ CPU: None
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
\ No newline at end of file
diff --git a/Assets/Plugins/FMOD/platforms/linux/src.meta b/Assets/Plugins/FMOD/platforms/linux/src.meta
new file mode 100644
index 0000000..885cece
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fb8b6c816014ed44ebc2db5f8dc5e03e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs b/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs
new file mode 100644
index 0000000..25a7ff1
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs
@@ -0,0 +1,108 @@
+using System.Collections.Generic;
+using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+#if UNITY_STANDALONE_LINUX && !UNITY_EDITOR
+namespace FMOD
+{
+ public partial class VERSION
+ {
+ public const string dll = "fmodstudio" + dllSuffix;
+ }
+}
+
+namespace FMOD.Studio
+{
+ public partial class STUDIO_VERSION
+ {
+ public const string dll = "fmodstudio" + dllSuffix;
+ }
+}
+#endif
+
+namespace FMODUnity
+{
+#if UNITY_EDITOR
+ [InitializeOnLoad]
+#endif
+ public class PlatformLinux : Platform
+ {
+ static PlatformLinux()
+ {
+ Settings.AddPlatformTemplate("b7716510a1f36934c87976f3a81dbf3d");
+ }
+
+ internal override string DisplayName { get { return "Linux"; } }
+ internal override void DeclareRuntimePlatforms(Settings settings)
+ {
+ settings.DeclareRuntimePlatform(RuntimePlatform.LinuxPlayer, this);
+ }
+
+#if UNITY_EDITOR
+ internal override IEnumerable GetBuildTargets()
+ {
+ yield return BuildTarget.StandaloneLinux64;
+ }
+
+ internal override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Linux; } }
+
+ protected override BinaryAssetFolderInfo GetBinaryAssetFolder(BuildTarget buildTarget)
+ {
+ return new BinaryAssetFolderInfo("linux", "Plugins");
+ }
+
+ protected override IEnumerable GetBinaryFiles(BuildTarget buildTarget, bool allVariants, string suffix)
+ {
+ yield return new FileRecord(string.Format("x86_64/libfmodstudio{0}.so", suffix));
+ }
+
+ protected override IEnumerable GetOptionalBinaryFiles(BuildTarget buildTarget, bool allVariants)
+ {
+ if (allVariants)
+ {
+ yield return new FileRecord("x86_64/libfmod.so");
+ yield return new FileRecord("x86_64/libfmodL.so");
+ }
+
+ yield return new FileRecord("x86_64/libgvraudio.so");
+ yield return new FileRecord("x86_64/libresonanceaudio.so");
+ }
+
+ protected override IEnumerable GetObsoleteFiles()
+ {
+ yield return "platforms/linux/lib/x86/libfmodstudio.so";
+ yield return "platforms/linux/lib/x86/libfmodstudioL.so";
+ }
+#endif
+
+ internal override string GetPluginPath(string pluginName)
+ {
+ return string.Format("{0}/lib{1}.so", GetPluginBasePath(), pluginName);
+ }
+
+#if UNITY_EDITOR
+ internal override OutputType[] ValidOutputTypes
+ {
+ get
+ {
+ return sValidOutputTypes;
+ }
+ }
+
+ private static OutputType[] sValidOutputTypes = {
+ new OutputType() { displayName = "Pulse Audio", outputType = FMOD.OUTPUTTYPE.PULSEAUDIO },
+ new OutputType() { displayName = "Advanced Linux Sound Architecture", outputType = FMOD.OUTPUTTYPE.ALSA },
+ };
+#endif
+
+ internal override List DefaultCodecChannels { get { return staticCodecChannels; } }
+
+ private static List staticCodecChannels = new List()
+ {
+ new CodecChannelCount { format = CodecType.FADPCM, channels = 0 },
+ new CodecChannelCount { format = CodecType.Vorbis, channels = 32 },
+ };
+ }
+}
diff --git a/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs.meta b/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs.meta
new file mode 100644
index 0000000..d5c137c
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 73549a74f689f0849a8271d9e908c514
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac.meta b/Assets/Plugins/FMOD/platforms/mac.meta
new file mode 100644
index 0000000..8973fd7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5dd2bfa8b9eb6874b9e50b79490891a7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib.meta b/Assets/Plugins/FMOD/platforms/mac/lib.meta
new file mode 100644
index 0000000..e5fede7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 98f2ca7007fe2074d953e949a6fdf971
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle.meta
new file mode 100644
index 0000000..84a6a5b
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle.meta
@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 4f94b6752a0d5ad489274786cbfbc6e5
+folderAsset: yes
+timeCreated: 1442816865
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: OSX
+ Linux:
+ enabled: 1
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ LinuxUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ SamsungTV:
+ enabled: 0
+ settings:
+ STV_MODEL: STANDARD_13
+ Win:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents.meta
new file mode 100644
index 0000000..0c8cf4c
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2879b055c8551c44caa264ce7208ea17
+folderAsset: yes
+timeCreated: 1432606678
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/Info.plist b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/Info.plist
new file mode 100644
index 0000000..98befae
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ BuildMachineOSBuild
+ 17G4015
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ fmodstudio
+ CFBundleIdentifier
+ com.fmod.fmodstudio
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleSignature
+ ????
+ CFBundleSupportedPlatforms
+
+ MacOSX
+
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+ no
+ LSRequiresIPhoneOS
+
+ MinimumOSVersion
+ 10.7
+ NSHighResolutionCapable
+
+ NSSupportsAutomaticGraphicsSwitching
+
+
+
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/Info.plist.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/Info.plist.meta
new file mode 100644
index 0000000..5791483
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: fdf09afde87e8e440a6e331d1850add6
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS.meta
new file mode 100644
index 0000000..4ed5e31
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4c7ef954631945d4981884adcc603e81
+folderAsset: yes
+timeCreated: 1432606678
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS/fmodstudio b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS/fmodstudio
new file mode 100644
index 0000000..eabf34f
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS/fmodstudio differ
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta
new file mode 100644
index 0000000..5b10ad2
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta
@@ -0,0 +1,6 @@
+fileFormatVersion: 2
+guid: c5e926e235023354fb6b94bc154a8d2c
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature.meta
new file mode 100644
index 0000000..9542ad7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0731b3df0eb593f4ebe376b7a4fe7b96
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature/CodeResources b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature/CodeResources
new file mode 100644
index 0000000..d5d0fd7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature/CodeResources
@@ -0,0 +1,115 @@
+
+
+
+
+ files
+
+ files2
+
+ rules
+
+ ^Resources/
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/
+
+ nested
+
+ weight
+ 10
+
+ ^.*
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^Resources/
+
+ weight
+ 20
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^[^/]+$
+
+ nested
+
+ weight
+ 10
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature/CodeResources.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature/CodeResources.meta
new file mode 100644
index 0000000..c7a6d5f
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudio.bundle/Contents/_CodeSignature/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a7e866ce49bf582479f3675646324389
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle.meta
new file mode 100644
index 0000000..9e516ff
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: b7d99dae7482fe945b852253163f656e
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OS: OSX
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents.meta
new file mode 100644
index 0000000..f909211
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 99d82b6758d211244a26db33da5df6ae
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/Info.plist b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/Info.plist
new file mode 100644
index 0000000..2760ee7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ BuildMachineOSBuild
+ 17G4015
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ fmodstudioL
+ CFBundleIdentifier
+ com.fmod.fmodstudioL
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleSignature
+ ????
+ CFBundleSupportedPlatforms
+
+ MacOSX
+
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+ no
+ LSRequiresIPhoneOS
+
+ MinimumOSVersion
+ 10.7
+ NSHighResolutionCapable
+
+ NSSupportsAutomaticGraphicsSwitching
+
+
+
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/Info.plist.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/Info.plist.meta
new file mode 100644
index 0000000..c47a4ac
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 28bc99f6ddbcf4149a24dfd29409a5cc
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS.meta
new file mode 100644
index 0000000..14ccdb5
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5bcb432be37dff04297a06a32bdaf5a8
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS/fmodstudioL b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS/fmodstudioL
new file mode 100644
index 0000000..9658171
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS/fmodstudioL differ
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta
new file mode 100644
index 0000000..fc5206a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a298d76594bb27a4b839b827b7ccc56b
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature.meta
new file mode 100644
index 0000000..b66607a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7d1a5963d0d6bca41983f249e84c6d82
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources
new file mode 100644
index 0000000..d5d0fd7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources
@@ -0,0 +1,115 @@
+
+
+
+
+ files
+
+ files2
+
+ rules
+
+ ^Resources/
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/
+
+ nested
+
+ weight
+ 10
+
+ ^.*
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^Resources/
+
+ weight
+ 20
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^[^/]+$
+
+ nested
+
+ weight
+ 10
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources.meta b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources.meta
new file mode 100644
index 0000000..66c9186
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6f4387888d43e8e459737087caf63eeb
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle.meta b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle.meta
new file mode 100644
index 0000000..7709d06
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle.meta
@@ -0,0 +1,59 @@
+fileFormatVersion: 2
+guid: 04e20ff877bea8747ae257229c720dcc
+folderAsset: yes
+timeCreated: 1511469544
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ LinuxUniversal:
+ enabled: 0
+ settings:
+ CPU: None
+ OSXIntel:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents.meta b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents.meta
new file mode 100644
index 0000000..6546895
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a5e43a852000e2443a14695f63ceffd7
+folderAsset: yes
+timeCreated: 1511469545
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/Info.plist b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/Info.plist
new file mode 100644
index 0000000..95ee74a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ BuildMachineOSBuild
+ 17G4015
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ resonanceaudio
+ CFBundleIdentifier
+ com.fmod.resonanceaudio
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleSignature
+ ????
+ CFBundleSupportedPlatforms
+
+ MacOSX
+
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+ no
+ LSRequiresIPhoneOS
+
+ MinimumOSVersion
+ 10.7
+ NSHighResolutionCapable
+
+ NSSupportsAutomaticGraphicsSwitching
+
+
+
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/Info.plist.meta b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/Info.plist.meta
new file mode 100644
index 0000000..16f0f5c
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/Info.plist.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ea043299abb5407419ae750dbbee6564
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS.meta b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS.meta
new file mode 100644
index 0000000..917b810
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 242a6e2e6d91dcf45a7ef7bdd7bfe227
+folderAsset: yes
+timeCreated: 1511469545
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS/resonanceaudio b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS/resonanceaudio
new file mode 100644
index 0000000..d0e14a8
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS/resonanceaudio differ
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS/resonanceaudio.meta b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS/resonanceaudio.meta
new file mode 100644
index 0000000..8c7f94d
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/MacOS/resonanceaudio.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2e2968e9faea7be4ea2b24d5bd144749
+timeCreated: 1511469545
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature.meta b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature.meta
new file mode 100644
index 0000000..4a6dfb1
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5ff1efee5fe0cee4d969f44cbce4294f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources
new file mode 100644
index 0000000..d5d0fd7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources
@@ -0,0 +1,115 @@
+
+
+
+
+ files
+
+ files2
+
+ rules
+
+ ^Resources/
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/
+
+ nested
+
+ weight
+ 10
+
+ ^.*
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^Resources/
+
+ weight
+ 20
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^[^/]+$
+
+ nested
+
+ weight
+ 10
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources.meta b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources.meta
new file mode 100644
index 0000000..6abb7bf
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/lib/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e84a173ce5cfbbe4b8d3cf667e97df31
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/src.meta b/Assets/Plugins/FMOD/platforms/mac/src.meta
new file mode 100644
index 0000000..c4e8013
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 29af24c23c3906b44bbaeaa0c832f235
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs b/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs
new file mode 100644
index 0000000..66802d8
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs
@@ -0,0 +1,108 @@
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+#if UNITY_STANDALONE_OSX && !UNITY_EDITOR
+namespace FMOD
+{
+ public partial class VERSION
+ {
+ public const string dll = "fmodstudio" + dllSuffix;
+ }
+}
+
+namespace FMOD.Studio
+{
+ public partial class STUDIO_VERSION
+ {
+ public const string dll = "fmodstudio" + dllSuffix;
+ }
+}
+#endif
+
+namespace FMODUnity
+{
+#if UNITY_EDITOR
+ [InitializeOnLoad]
+#endif
+ public class PlatformMac : Platform
+ {
+ static PlatformMac()
+ {
+ Settings.AddPlatformTemplate("52eb9df5db46521439908db3a29a1bbb");
+ }
+
+ internal override string DisplayName { get { return "macOS"; } }
+ internal override void DeclareRuntimePlatforms(Settings settings)
+ {
+ settings.DeclareRuntimePlatform(RuntimePlatform.OSXPlayer, this);
+ }
+
+#if UNITY_EDITOR
+ internal override IEnumerable GetBuildTargets()
+ {
+ yield return BuildTarget.StandaloneOSX;
+ }
+
+ internal override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Mac; } }
+
+ protected override BinaryAssetFolderInfo GetBinaryAssetFolder(BuildTarget buildTarget)
+ {
+ return new BinaryAssetFolderInfo("mac", "Plugins");
+ }
+
+ protected override IEnumerable GetBinaryFiles(BuildTarget buildTarget, bool allVariants, string suffix)
+ {
+ yield return new FileRecord(string.Format("fmodstudio{0}.bundle", suffix));
+ }
+
+ protected override IEnumerable GetOptionalBinaryFiles(BuildTarget buildTarget, bool allVariants)
+ {
+ yield return new FileRecord("gvraudio.bundle");
+ yield return new FileRecord("resonanceaudio.bundle");
+ }
+
+ internal override bool SupportsAdditionalCPP(BuildTarget target)
+ {
+ return false;
+ }
+#endif
+
+ internal override string GetPluginPath(string pluginName)
+ {
+ string pluginPath = string.Format("{0}/{1}.bundle", GetPluginBasePath(), pluginName);
+ if (System.IO.Directory.Exists((pluginPath)))
+ {
+ return pluginPath;
+ }
+ else
+ {
+ return string.Format("{0}/{1}.dylib", GetPluginBasePath(), pluginName);
+ }
+ }
+#if UNITY_EDITOR
+ internal override OutputType[] ValidOutputTypes
+ {
+ get
+ {
+ return sValidOutputTypes;
+ }
+ }
+
+ private static OutputType[] sValidOutputTypes = {
+ new OutputType() { displayName = "Core Audio", outputType = FMOD.OUTPUTTYPE.COREAUDIO },
+ };
+#endif
+
+ internal override List DefaultCodecChannels { get { return staticCodecChannels; } }
+
+ private static List staticCodecChannels = new List()
+ {
+ new CodecChannelCount { format = CodecType.FADPCM, channels = 0 },
+ new CodecChannelCount { format = CodecType.Vorbis, channels = 32 },
+ };
+ }
+}
diff --git a/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs.meta b/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs.meta
new file mode 100644
index 0000000..a3a12b7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d92d0baf34dae0e4ea032a42bd6107c0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos.meta b/Assets/Plugins/FMOD/platforms/tvos.meta
new file mode 100644
index 0000000..f6328b9
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b878fb13ea2d16a40b79b4400b5149ba
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib.meta b/Assets/Plugins/FMOD/platforms/tvos/lib.meta
new file mode 100644
index 0000000..5a74fa2
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3ba8f748d2f09ff46a33e76a54eb551f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounityplugin.a b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounityplugin.a
new file mode 100644
index 0000000..cf71864
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounityplugin.a differ
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounityplugin.a.meta b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounityplugin.a.meta
new file mode 100644
index 0000000..eb186b5
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounityplugin.a.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: 4abc247d0f34143ec95396c7b6bec6a8
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ tvOS:
+ enabled: 1
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginL.a b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginL.a
new file mode 100644
index 0000000..fb90a21
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginL.a differ
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginL.a.meta b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginL.a.meta
new file mode 100644
index 0000000..c7cbbb3
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginL.a.meta
@@ -0,0 +1,20 @@
+fileFormatVersion: 2
+guid: 982978af662f9ea43b7979c7f61bbad3
+timeCreated: 1507179416
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulator.a b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulator.a
new file mode 100644
index 0000000..24a4d87
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulator.a differ
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulator.a.meta b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulator.a.meta
new file mode 100644
index 0000000..91e6fe7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulator.a.meta
@@ -0,0 +1,113 @@
+fileFormatVersion: 2
+guid: 86d28a38815714041bf19dc4cc59ce65
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulatorL.a b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulatorL.a
new file mode 100644
index 0000000..26d450e
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulatorL.a differ
diff --git a/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulatorL.a.meta b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulatorL.a.meta
new file mode 100644
index 0000000..a28d94a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/lib/libfmodstudiounitypluginsimulatorL.a.meta
@@ -0,0 +1,113 @@
+fileFormatVersion: 2
+guid: 649598f6abf894e128aa33102756da99
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ '': Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux: 1
+ Exclude Linux64: 1
+ Exclude LinuxUniversal: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ Exclude tvOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Facebook: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Facebook: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Linux
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: LinuxUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CompileFlags:
+ FrameworkDependencies:
+ - first:
+ tvOS: tvOS
+ second:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos/src.meta b/Assets/Plugins/FMOD/platforms/tvos/src.meta
new file mode 100644
index 0000000..0b94cc0
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a36cddbc75870b64e98ebaac7424553e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs b/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs
new file mode 100644
index 0000000..71a25a8
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs
@@ -0,0 +1,97 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+#if UNITY_TVOS && !UNITY_EDITOR
+namespace FMOD
+{
+ public partial class VERSION
+ {
+ public const string dll = "__Internal";
+ }
+}
+
+namespace FMOD.Studio
+{
+ public partial class STUDIO_VERSION
+ {
+ public const string dll = "__Internal";
+ }
+}
+#endif
+
+namespace FMODUnity
+{
+#if UNITY_EDITOR
+ [InitializeOnLoad]
+#endif
+ public class PlatformAppleTV : Platform
+ {
+ static PlatformAppleTV()
+ {
+ Settings.AddPlatformTemplate("e7a046c753c3c3d4aacc91f6597f310d");
+ }
+
+ internal override string DisplayName { get { return "Apple TV"; } }
+ internal override void DeclareRuntimePlatforms(Settings settings)
+ {
+ settings.DeclareRuntimePlatform(RuntimePlatform.tvOS, this);
+ }
+
+#if UNITY_EDITOR
+ internal override IEnumerable GetBuildTargets()
+ {
+ yield return BuildTarget.tvOS;
+ }
+
+ internal override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.AppleTV; } }
+
+ protected override BinaryAssetFolderInfo GetBinaryAssetFolder(BuildTarget buildTarget)
+ {
+ return new BinaryAssetFolderInfo("tvos", "Plugins/tvOS");
+ }
+
+ protected override IEnumerable GetBinaryFiles(BuildTarget buildTarget, bool allVariants, string suffix)
+ {
+ if (allVariants || PlayerSettings.tvOS.sdkVersion == tvOSSdkVersion.Device)
+ {
+ yield return new FileRecord(string.Format("libfmodstudiounityplugin{0}.a", suffix));
+ }
+
+ if (allVariants || PlayerSettings.tvOS.sdkVersion == tvOSSdkVersion.Simulator)
+ {
+ yield return new FileRecord(string.Format("libfmodstudiounitypluginsimulator{0}.a", suffix));
+ }
+ }
+
+ internal override bool SupportsAdditionalCPP(BuildTarget target)
+ {
+ return PlatformIOS.StaticSupportsAdditionalCpp();
+ }
+#endif
+
+#if !UNITY_EDITOR
+ internal override void LoadPlugins(FMOD.System coreSystem, Action reportResult)
+ {
+ PlatformIOS.StaticLoadPlugins(this, coreSystem, reportResult);
+ }
+#endif
+
+#if UNITY_EDITOR
+ internal override OutputType[] ValidOutputTypes
+ {
+ get
+ {
+ return sValidOutputTypes;
+ }
+ }
+
+ private static OutputType[] sValidOutputTypes = {
+ new OutputType() { displayName = "Core Audio", outputType = FMOD.OUTPUTTYPE.COREAUDIO },
+ };
+#endif
+ }
+}
diff --git a/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs.meta b/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs.meta
new file mode 100644
index 0000000..9bb15a1
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 17eea195bdfbf014e91ba7620ee491f8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp.meta b/Assets/Plugins/FMOD/platforms/uwp.meta
new file mode 100644
index 0000000..e0e3b05
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 76cc08b21e1f3d04e9cc8fdf3cef9eda
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib.meta b/Assets/Plugins/FMOD/platforms/uwp/lib.meta
new file mode 100644
index 0000000..e94655e
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: faacb4351a5f83845b1cea9370b4d244
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/arm.meta
new file mode 100644
index 0000000..d6b1c6b
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/arm.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 0cddbb9418c24f44d87fc49581769340
+folderAsset: yes
+timeCreated: 1457408139
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmod.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmod.dll
new file mode 100644
index 0000000..464ca7a
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmod.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmod.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmod.dll.meta
new file mode 100644
index 0000000..9d77fac
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmod.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 907f4331811d73442b58d50627a775d4
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: ARM
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodL.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodL.dll
new file mode 100644
index 0000000..b642a12
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodL.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodL.dll.meta
new file mode 100644
index 0000000..86bad2a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodL.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 82bacb4b0f3cc85418d2a1aa2ca57df6
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: ARM
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudio.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudio.dll
new file mode 100644
index 0000000..4929072
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudio.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudio.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudio.dll.meta
new file mode 100644
index 0000000..4a04db3
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudio.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: a7c1eb40b6cc0b8468c161b5ba9a6df6
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: ARM
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudioL.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudioL.dll
new file mode 100644
index 0000000..6ed54c2
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudioL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudioL.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudioL.dll.meta
new file mode 100644
index 0000000..5e625dc
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/arm/fmodstudioL.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 5476dd86ee3260f4bb2283aef1d9a883
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: ARM
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x64.meta
new file mode 100644
index 0000000..1cc70d8
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x64.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 81189b2e21a815647a28e3437c86beb2
+folderAsset: yes
+timeCreated: 1457064777
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmod.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmod.dll
new file mode 100644
index 0000000..6b3bf1e
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmod.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmod.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmod.dll.meta
new file mode 100644
index 0000000..9c7c8ad
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmod.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 68f9a982a926833498d438319388a455
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodL.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodL.dll
new file mode 100644
index 0000000..6444f71
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodL.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodL.dll.meta
new file mode 100644
index 0000000..0b13574
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodL.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: d15f9d3e1089b114a8f625e994fea839
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudio.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudio.dll
new file mode 100644
index 0000000..c2e02c2
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudio.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudio.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudio.dll.meta
new file mode 100644
index 0000000..7d2289b
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudio.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 29800d7cce1a5fc46ae163c8a68d8346
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudioL.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudioL.dll
new file mode 100644
index 0000000..ca020d8
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudioL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudioL.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudioL.dll.meta
new file mode 100644
index 0000000..7b7998e
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x64/fmodstudioL.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 813ca429588de5d40b5c8a184a15bcd9
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X64
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x86.meta
new file mode 100644
index 0000000..759bcc1
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x86.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fa5c1a42d40246b4a83af1e8192b6bdf
+folderAsset: yes
+timeCreated: 1457063023
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmod.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmod.dll
new file mode 100644
index 0000000..d98fe05
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmod.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmod.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmod.dll.meta
new file mode 100644
index 0000000..e3fe5c2
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmod.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 39f9a761a2a032045a853a069db31081
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X86
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodL.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodL.dll
new file mode 100644
index 0000000..8eaeddd
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodL.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodL.dll.meta
new file mode 100644
index 0000000..3841f1a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodL.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 243e8fba07980f74b8d49ef345dadd64
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X86
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudio.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudio.dll
new file mode 100644
index 0000000..2edd61a
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudio.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudio.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudio.dll.meta
new file mode 100644
index 0000000..c18a94a
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudio.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: ecb0cc0019197154b9baeef623b6ec0a
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X86
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudioL.dll b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudioL.dll
new file mode 100644
index 0000000..b275f8c
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudioL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudioL.dll.meta b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudioL.dll.meta
new file mode 100644
index 0000000..d5d81f2
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/uwp/lib/x86/fmodstudioL.dll.meta
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 43ab9a198caf2d841b813eb81e02486d
+timeCreated: 1457408139
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 1
+ settings:
+ CPU: X86
+ DontProcess: False
+ PlaceholderPath:
+ SDK: UWP
+ ScriptingBackend: AnyScriptingBackend
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win.meta b/Assets/Plugins/FMOD/platforms/win.meta
new file mode 100644
index 0000000..3e2ab43
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c66754bc90bcdd74dbacaa9bc9adf48b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib.meta b/Assets/Plugins/FMOD/platforms/win/lib.meta
new file mode 100644
index 0000000..7de6a79
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4ad89dfcd36045640a8e902f16b09363
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86.meta
new file mode 100644
index 0000000..c7d65bf
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 03f590b69e4afe14fa1c73f89a98a203
+folderAsset: yes
+timeCreated: 1432606678
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudio.dll b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudio.dll
new file mode 100644
index 0000000..78bc415
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudio.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudio.dll.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudio.dll.meta
new file mode 100644
index 0000000..cda4ae6
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudio.dll.meta
@@ -0,0 +1,78 @@
+fileFormatVersion: 2
+guid: 1550e5c882b8c2445a1f14f8b1b23d41
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 1
+ settings:
+ CPU: x86
+ DefaultValueInitialized: true
+ OS: Windows
+ Linux:
+ enabled: 1
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 1
+ settings:
+ CPU: None
+ LinuxUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 1
+ settings:
+ CPU: None
+ OSXUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ SamsungTV:
+ enabled: 0
+ settings:
+ STV_MODEL: STANDARD_13
+ WP8:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ Win:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: None
+ WindowsStoreApps:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ SDK: AnySDK
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudioL.dll b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudioL.dll
new file mode 100644
index 0000000..6b70597
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudioL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudioL.dll.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudioL.dll.meta
new file mode 100644
index 0000000..a5e3447
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86/fmodstudioL.dll.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 7bc9833e4f632d34794cce4dadfc30d8
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ OS: Windows
+ - first:
+ Standalone: Win
+ second:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86/resonanceaudio.dll b/Assets/Plugins/FMOD/platforms/win/lib/x86/resonanceaudio.dll
new file mode 100644
index 0000000..0a1e0b5
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/win/lib/x86/resonanceaudio.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86/resonanceaudio.dll.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86/resonanceaudio.dll.meta
new file mode 100644
index 0000000..4402a3f
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86/resonanceaudio.dll.meta
@@ -0,0 +1,55 @@
+fileFormatVersion: 2
+guid: b2c11f1e03736f748bd861d7bf4f8952
+timeCreated: 1511469552
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Editor:
+ enabled: 0
+ settings:
+ CPU: x86
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ LinuxUniversal:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXUniversal:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ Win64:
+ enabled: 0
+ settings:
+ CPU: None
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86_64.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86_64.meta
new file mode 100644
index 0000000..2b14535
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86_64.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 8105cca2fc4eb2e488e010278c3ea1bf
+folderAsset: yes
+timeCreated: 1432606678
+licenseType: Store
+DefaultImporter:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudio.dll b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudio.dll
new file mode 100644
index 0000000..8a8e29e
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudio.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudio.dll.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudio.dll.meta
new file mode 100644
index 0000000..310cbb7
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudio.dll.meta
@@ -0,0 +1,78 @@
+fileFormatVersion: 2
+guid: 684d4d47a018ed14080e15f4c99b8e86
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: Windows
+ Linux:
+ enabled: 1
+ settings:
+ CPU: None
+ Linux64:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ LinuxUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXIntel:
+ enabled: 1
+ settings:
+ CPU: None
+ OSXIntel64:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ OSXUniversal:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ SamsungTV:
+ enabled: 0
+ settings:
+ STV_MODEL: STANDARD_13
+ WP8:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ Win:
+ enabled: 0
+ settings:
+ CPU: None
+ Win64:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ WindowsStoreApps:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DontProcess: False
+ PlaceholderPath:
+ SDK: AnySDK
+ iOS:
+ enabled: 0
+ settings:
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudioL.dll b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudioL.dll
new file mode 100644
index 0000000..f5fb4f5
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudioL.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudioL.dll.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudioL.dll.meta
new file mode 100644
index 0000000..3ec9d81
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/fmodstudioL.dll.meta
@@ -0,0 +1,34 @@
+fileFormatVersion: 2
+guid: 3fbceecc4fea25e4182e7e86b878a396
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: Windows
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 1
+ settings: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86_64/resonanceaudio.dll b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/resonanceaudio.dll
new file mode 100644
index 0000000..aea7ae8
Binary files /dev/null and b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/resonanceaudio.dll differ
diff --git a/Assets/Plugins/FMOD/platforms/win/lib/x86_64/resonanceaudio.dll.meta b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/resonanceaudio.dll.meta
new file mode 100644
index 0000000..78e6a65
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/lib/x86_64/resonanceaudio.dll.meta
@@ -0,0 +1,50 @@
+fileFormatVersion: 2
+guid: 4c8fb9b92ea2eae4f9112a3941c4f128
+timeCreated: 1511469552
+licenseType: Store
+PluginImporter:
+ serializedVersion: 1
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ platformData:
+ Android:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Any:
+ enabled: 0
+ settings: {}
+ Editor:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ DefaultValueInitialized: true
+ OS: AnyOS
+ Linux:
+ enabled: 0
+ settings:
+ CPU: x86
+ Linux64:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ OSXIntel:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ OSXIntel64:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ Win:
+ enabled: 0
+ settings:
+ CPU: None
+ Win64:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/src.meta b/Assets/Plugins/FMOD/platforms/win/src.meta
new file mode 100644
index 0000000..ba016c3
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e3438d4d60981a7489133b13b11958ec
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs b/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs
new file mode 100644
index 0000000..1c5a162
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs
@@ -0,0 +1,171 @@
+using System.Collections.Generic;
+using UnityEngine;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+#if !UNITY_EDITOR
+namespace FMOD
+{
+ public partial class VERSION
+ {
+#if UNITY_STANDALONE_WIN
+ public const string dll = "fmodstudio" + dllSuffix;
+#elif UNITY_WSA
+ public const string dll = "fmod" + dllSuffix;
+#endif
+ }
+}
+
+namespace FMOD.Studio
+{
+ public partial class STUDIO_VERSION
+ {
+#if UNITY_STANDALONE_WIN || UNITY_WSA
+ public const string dll = "fmodstudio" + dllSuffix;
+#endif
+ }
+}
+#endif
+
+namespace FMODUnity
+{
+#if UNITY_EDITOR
+ [InitializeOnLoad]
+#endif
+ public class PlatformWindows : Platform
+ {
+ static PlatformWindows()
+ {
+ Settings.AddPlatformTemplate("2c5177b11d81d824dbb064f9ac8527da");
+ }
+
+ internal override string DisplayName { get { return "Windows"; } }
+ internal override void DeclareRuntimePlatforms(Settings settings)
+ {
+ settings.DeclareRuntimePlatform(RuntimePlatform.WindowsPlayer, this);
+ settings.DeclareRuntimePlatform(RuntimePlatform.WSAPlayerX86, this);
+ settings.DeclareRuntimePlatform(RuntimePlatform.WSAPlayerX64, this);
+ settings.DeclareRuntimePlatform(RuntimePlatform.WSAPlayerARM, this);
+ }
+
+#if UNITY_EDITOR
+ internal override IEnumerable GetBuildTargets()
+ {
+ yield return BuildTarget.StandaloneWindows;
+ yield return BuildTarget.StandaloneWindows64;
+ yield return BuildTarget.WSAPlayer;
+ }
+
+ internal override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Windows; } }
+#endif
+
+#if UNITY_WINRT_8_1 || UNITY_WSA_10_0
+ internal override string GetBankFolder()
+ {
+ return "ms-appx:///Data/StreamingAssets";
+ }
+#endif
+
+#if UNITY_EDITOR
+ protected override BinaryAssetFolderInfo GetBinaryAssetFolder(BuildTarget buildTarget)
+ {
+ switch (buildTarget)
+ {
+ case BuildTarget.StandaloneWindows:
+ case BuildTarget.StandaloneWindows64:
+ return new BinaryAssetFolderInfo("win", "Plugins");
+ case BuildTarget.WSAPlayer:
+ return new BinaryAssetFolderInfo("uwp", "Plugins/UWP");
+ default:
+ throw new System.ArgumentException("Unrecognised build target: " + buildTarget);
+ }
+ }
+
+ protected override IEnumerable GetBinaryFiles(BuildTarget buildTarget, bool allVariants, string suffix)
+ {
+ string dllSuffix = suffix + ".dll";
+
+ switch (buildTarget)
+ {
+ case BuildTarget.StandaloneWindows:
+ yield return new FileRecord("x86/fmodstudio" + dllSuffix);
+ break;
+ case BuildTarget.StandaloneWindows64:
+ yield return new FileRecord("x86_64/fmodstudio" + dllSuffix);
+ break;
+ case BuildTarget.WSAPlayer:
+ foreach (string architecture in new[] { "arm", "x64", "x86" })
+ {
+ yield return new FileRecord(string.Format("{0}/fmod{1}", architecture, dllSuffix));
+ yield return new FileRecord(string.Format("{0}/fmodstudio{1}", architecture, dllSuffix));
+ }
+ break;
+ default:
+ throw new System.NotSupportedException("Unrecognised Build Target");
+ }
+ }
+
+ protected override IEnumerable GetOptionalBinaryFiles(BuildTarget buildTarget, bool allVariants)
+ {
+ switch (buildTarget)
+ {
+ case BuildTarget.StandaloneWindows:
+ yield return new FileRecord("x86/gvraudio.dll");
+ yield return new FileRecord("x86/resonanceaudio.dll");
+ break;
+ case BuildTarget.StandaloneWindows64:
+ yield return new FileRecord("x86_64/gvraudio.dll");
+ yield return new FileRecord("x86_64/resonanceaudio.dll");
+ break;
+ case BuildTarget.WSAPlayer:
+ yield break;
+ default:
+ throw new System.NotSupportedException("Unrecognised Build Target");
+ }
+ }
+
+ internal override bool SupportsAdditionalCPP(BuildTarget target)
+ {
+ return target != BuildTarget.WSAPlayer;
+ }
+#endif
+
+ internal override string GetPluginPath(string pluginName)
+ {
+#if UNITY_STANDALONE_WIN
+ #if UNITY_64
+ return string.Format("{0}/X86_64/{1}.dll", GetPluginBasePath(), pluginName);
+ #else
+ return string.Format("{0}/X86/{1}.dll", GetPluginBasePath(), pluginName);
+ #endif
+#else // UNITY_WSA
+ return string.Format("{0}.dll", pluginName);
+#endif
+ }
+#if UNITY_EDITOR
+ internal override OutputType[] ValidOutputTypes
+ {
+ get
+ {
+ return sValidOutputTypes;
+ }
+ }
+
+ private static OutputType[] sValidOutputTypes = {
+ new OutputType() { displayName = "Windows Audio Session API", outputType = FMOD.OUTPUTTYPE.WASAPI },
+ new OutputType() { displayName = "Windows Sonic", outputType = FMOD.OUTPUTTYPE.WINSONIC },
+ };
+
+ internal override int CoreCount { get { return MaximumCoreCount; } }
+#endif
+
+ internal override List DefaultCodecChannels { get { return staticCodecChannels; } }
+
+ private static List staticCodecChannels = new List()
+ {
+ new CodecChannelCount { format = CodecType.FADPCM, channels = 0 },
+ new CodecChannelCount { format = CodecType.Vorbis, channels = 32 },
+ };
+ }
+}
diff --git a/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs.meta b/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs.meta
new file mode 100644
index 0000000..7ce1817
--- /dev/null
+++ b/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9660e62d6232af242877f0cc2b90c63d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src.meta b/Assets/Plugins/FMOD/src.meta
new file mode 100644
index 0000000..f821ba8
--- /dev/null
+++ b/Assets/Plugins/FMOD/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2994e348941404549b266423c2ac329f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/AutomatableSlots.cs b/Assets/Plugins/FMOD/src/AutomatableSlots.cs
new file mode 100644
index 0000000..777eb4b
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/AutomatableSlots.cs
@@ -0,0 +1,85 @@
+using System;
+using UnityEngine.Serialization;
+
+namespace FMODUnity
+{
+ [Serializable]
+ public struct AutomatableSlots
+ {
+ public const int Count = 16;
+
+ [FormerlySerializedAs("slot00")]
+ public float Slot00;
+ [FormerlySerializedAs("slot01")]
+ public float Slot01;
+ [FormerlySerializedAs("slot02")]
+ public float Slot02;
+ [FormerlySerializedAs("slot03")]
+ public float Slot03;
+ [FormerlySerializedAs("slot04")]
+ public float Slot04;
+ [FormerlySerializedAs("slot05")]
+ public float Slot05;
+ [FormerlySerializedAs("slot06")]
+ public float Slot06;
+ [FormerlySerializedAs("slot07")]
+ public float Slot07;
+ [FormerlySerializedAs("slot08")]
+ public float Slot08;
+ [FormerlySerializedAs("slot09")]
+ public float Slot09;
+ [FormerlySerializedAs("slot10")]
+ public float Slot10;
+ [FormerlySerializedAs("slot11")]
+ public float Slot11;
+ [FormerlySerializedAs("slot12")]
+ public float Slot12;
+ [FormerlySerializedAs("slot13")]
+ public float Slot13;
+ [FormerlySerializedAs("slot14")]
+ public float Slot14;
+ [FormerlySerializedAs("slot15")]
+ public float Slot15;
+
+ public float GetValue(int index)
+ {
+ switch(index)
+ {
+ case 0:
+ return Slot00;
+ case 1:
+ return Slot01;
+ case 2:
+ return Slot02;
+ case 3:
+ return Slot03;
+ case 4:
+ return Slot04;
+ case 5:
+ return Slot05;
+ case 6:
+ return Slot06;
+ case 7:
+ return Slot07;
+ case 8:
+ return Slot08;
+ case 9:
+ return Slot09;
+ case 10:
+ return Slot10;
+ case 11:
+ return Slot11;
+ case 12:
+ return Slot12;
+ case 13:
+ return Slot13;
+ case 14:
+ return Slot14;
+ case 15:
+ return Slot15;
+ default:
+ throw new ArgumentException(string.Format("Invalid slot index: {0}", index));
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/AutomatableSlots.cs.meta b/Assets/Plugins/FMOD/src/AutomatableSlots.cs.meta
new file mode 100644
index 0000000..c33e389
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/AutomatableSlots.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9c13d4e62f5f7b44bb33162cbf29a9f8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/BankRefAttribute.cs b/Assets/Plugins/FMOD/src/BankRefAttribute.cs
new file mode 100644
index 0000000..de44917
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/BankRefAttribute.cs
@@ -0,0 +1,8 @@
+using UnityEngine;
+
+namespace FMODUnity
+{
+ public class BankRefAttribute : PropertyAttribute
+ {
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/BankRefAttribute.cs.meta b/Assets/Plugins/FMOD/src/BankRefAttribute.cs.meta
new file mode 100644
index 0000000..a9e3fcb
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/BankRefAttribute.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a8ab5f38e7776644297d8b3687c39b49
+timeCreated: 1445488716
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor.meta b/Assets/Plugins/FMOD/src/Editor.meta
new file mode 100644
index 0000000..9d1900c
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bdb2bdc82b47a634b803bb658c6e312b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs b/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs
new file mode 100644
index 0000000..c126d05
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs
@@ -0,0 +1,66 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace FMODUnity
+{
+ [CustomPropertyDrawer(typeof(BankRefAttribute))]
+ public class BankRefDrawer : PropertyDrawer
+ {
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ Texture browseIcon = EditorUtils.LoadImage("SearchIconBlack.png");
+
+ SerializedProperty pathProperty = property;
+
+ EditorGUI.BeginProperty(position, label, property);
+
+ Event e = Event.current;
+ if (e.type == EventType.DragPerform && position.Contains(e.mousePosition))
+ {
+ if (DragAndDrop.objectReferences.Length > 0 &&
+ DragAndDrop.objectReferences[0] != null &&
+ DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef))
+ {
+ pathProperty.stringValue = ((EditorBankRef)DragAndDrop.objectReferences[0]).Name;
+
+ e.Use();
+ }
+ }
+ if (e.type == EventType.DragUpdated && position.Contains(e.mousePosition))
+ {
+ if (DragAndDrop.objectReferences.Length > 0 &&
+ DragAndDrop.objectReferences[0] != null &&
+ DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef))
+ {
+ DragAndDrop.visualMode = DragAndDropVisualMode.Move;
+ DragAndDrop.AcceptDrag();
+ e.Use();
+ }
+ }
+
+ float baseHeight = GUI.skin.textField.CalcSize(new GUIContent()).y;
+
+ position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
+
+ var buttonStyle = new GUIStyle(GUI.skin.button);
+ buttonStyle.padding.top = buttonStyle.padding.bottom = 1;
+
+ Rect searchRect = new Rect(position.x + position.width - browseIcon.width - 15, position.y, browseIcon.width + 10, baseHeight);
+ Rect pathRect = new Rect(position.x, position.y, searchRect.x - position.x - 5, baseHeight);
+
+ EditorGUI.PropertyField(pathRect, pathProperty, GUIContent.none);
+ if (GUI.Button(searchRect, new GUIContent(browseIcon, "Select FMOD Bank"), buttonStyle))
+ {
+ var eventBrowser = ScriptableObject.CreateInstance();
+
+ eventBrowser.ChooseBank(property);
+ var windowRect = position;
+ windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position);
+ windowRect.height = searchRect.height + 1;
+ eventBrowser.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 400));
+ }
+
+ EditorGUI.EndProperty();
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs.meta b/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs.meta
new file mode 100644
index 0000000..e349aa7
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 49ebe6fea5e4bfc4bb492bba062b2afe
+timeCreated: 1433209573
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs b/Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs
new file mode 100644
index 0000000..533c84e
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs
@@ -0,0 +1,237 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace FMODUnity
+{
+ public class BankRefreshWindow : EditorWindow
+ {
+ private static BankRefreshWindow instance = null;
+
+ private SerializedObject serializedSettings;
+ private SerializedProperty cooldown;
+ private SerializedProperty showWindow;
+
+ private bool readyToRefreshBanks = false;
+ private float closeTime = float.MaxValue;
+ private string lastRefreshError = null;
+
+ private const float CloseDelay = 5;
+
+ public static bool IsVisible { get { return instance != null; } }
+
+ public static bool ReadyToRefreshBanks { get { return instance == null || instance.readyToRefreshBanks; } }
+
+ public static void ShowWindow()
+ {
+ if (instance == null)
+ {
+ instance = CreateInstance();
+ instance.titleContent = new GUIContent("FMOD Bank Refresh Status");
+ instance.minSize = new Vector2(400, 200);
+ instance.maxSize = new Vector2(1000, 200);
+
+ instance.ShowUtility();
+ }
+ }
+
+ private void OnEnable()
+ {
+ serializedSettings = new SerializedObject(Settings.Instance);
+ cooldown = serializedSettings.FindProperty("BankRefreshCooldown");
+ showWindow = serializedSettings.FindProperty("ShowBankRefreshWindow");
+
+ // instance is set to null when scripts are recompiled
+ if (instance == null)
+ {
+ instance = this;
+ }
+ else if (instance != this)
+ {
+ Close();
+ }
+ }
+
+ private void OnDestroy()
+ {
+ if (instance == this)
+ {
+ instance = null;
+ }
+ }
+
+ private void OnInspectorUpdate()
+ {
+ Repaint();
+
+ if (BankRefresher.TimeUntilBankRefresh() != float.MaxValue)
+ {
+ closeTime = float.MaxValue;
+ }
+
+ if (Time.realtimeSinceStartup > closeTime)
+ {
+ Close();
+ }
+ }
+
+ public static void HandleBankRefresh(string error)
+ {
+ if (error != null)
+ {
+ RuntimeUtils.DebugLogErrorFormat("FMOD: Bank refresh failed: {0}", error);
+ }
+
+ if (instance != null)
+ {
+ instance.readyToRefreshBanks = false;
+ instance.lastRefreshError = error;
+
+ if (error == null)
+ {
+ instance.closeTime = Time.realtimeSinceStartup + CloseDelay;
+ }
+ }
+ }
+
+ private void OnGUI()
+ {
+ serializedSettings.Update();
+
+ DrawStatus();
+
+ GUILayout.FlexibleSpace();
+
+ SettingsEditor.DisplayBankRefreshSettings(cooldown, showWindow, false);
+
+ DrawButtons();
+
+ serializedSettings.ApplyModifiedProperties();
+ }
+
+ private bool ConsumeEscapeKey()
+ {
+ if ((focusedWindow == this) && Event.current.isKey && Event.current.keyCode == KeyCode.Escape)
+ {
+ Event.current.Use();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ private void DrawStatus()
+ {
+ GUIStyle labelStyle = new GUIStyle(EditorStyles.whiteLargeLabel);
+ labelStyle.alignment = TextAnchor.MiddleCenter;
+
+ GUIStyle largeErrorStyle = new GUIStyle(labelStyle);
+ largeErrorStyle.normal.textColor = Color.red;
+
+ GUIStyle errorStyle = new GUIStyle(GUI.skin.box);
+ errorStyle.alignment = TextAnchor.UpperLeft;
+ errorStyle.wordWrap = true;
+ errorStyle.normal.textColor = Color.red;
+
+ float timeSinceFileChange = BankRefresher.TimeSinceSourceFileChange();
+
+ if (timeSinceFileChange != float.MaxValue)
+ {
+ GUILayout.Label(string.Format("The FMOD source banks changed {0} ago.",
+ EditorUtils.DurationString(timeSinceFileChange)), labelStyle);
+
+ float timeUntilBankRefresh = BankRefresher.TimeUntilBankRefresh();
+
+ if (timeUntilBankRefresh == 0)
+ {
+ GUILayout.Label("Refreshing banks now...", labelStyle);
+ readyToRefreshBanks = true;
+ }
+ else if (timeUntilBankRefresh != float.MaxValue)
+ {
+ if (DrawCountdown("Refreshing banks", timeUntilBankRefresh, Settings.Instance.BankRefreshCooldown, labelStyle)
+ || ConsumeEscapeKey())
+ {
+ BankRefresher.DisableAutoRefresh();
+ }
+ }
+ else
+ {
+ GUILayout.Label("Would you like to refresh banks?", labelStyle);
+ }
+ }
+ else
+ {
+ if (lastRefreshError == null)
+ {
+ GUILayout.Label("The FMOD banks are up to date.", labelStyle);
+ }
+ else
+ {
+ GUILayout.Label("Bank refresh failed:", largeErrorStyle);
+ GUILayout.Box(lastRefreshError, errorStyle, GUILayout.ExpandWidth(true));
+ }
+ }
+
+ if (closeTime != float.MaxValue)
+ {
+ float timeUntilClose = Mathf.Max(0, closeTime - Time.realtimeSinceStartup);
+
+ if (DrawCountdown("Closing", timeUntilClose, CloseDelay, labelStyle) || ConsumeEscapeKey())
+ {
+ closeTime = float.MaxValue;
+ }
+ }
+ }
+
+ private static bool DrawCountdown(string text, float remainingTime, float totalTime, GUIStyle labelStyle)
+ {
+ GUILayout.Label(string.Format("{0} in {1}...", text, EditorUtils.DurationString(remainingTime)), labelStyle);
+
+ const float boxHeight = 2;
+
+ Rect controlRect = EditorGUILayout.GetControlRect(false, boxHeight * 2);
+
+ Rect boxRect = controlRect;
+ boxRect.width *= remainingTime / totalTime;
+ boxRect.x += (controlRect.width - boxRect.width) / 2;
+ boxRect.height = 2;
+
+ GUI.DrawTexture(boxRect, EditorGUIUtility.whiteTexture);
+
+ GUIContent cancelContent = new GUIContent("Cancel");
+
+ controlRect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * 2);
+
+ Rect buttonRect = controlRect;
+ buttonRect.width = 100;
+ buttonRect.x += (controlRect.width - buttonRect.width) / 2;
+
+ return GUI.Button(buttonRect, cancelContent);
+ }
+
+ private void DrawButtons()
+ {
+ Rect rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * 2);
+
+ int buttonCount = 2;
+
+ Rect closeRect = rect;
+ closeRect.width = rect.width / buttonCount;
+
+ Rect refreshRect = rect;
+ refreshRect.xMin = closeRect.xMax;
+
+ if (GUI.Button(closeRect, "Close"))
+ {
+ Close();
+ }
+
+ if (GUI.Button(refreshRect, "Refresh Banks Now"))
+ {
+ EventManager.RefreshBanks();
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs.meta b/Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs.meta
new file mode 100644
index 0000000..84dfd2b
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BankRefreshWindow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 40a1ca322d08d704eacd449863718b31
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/BankRefresher.cs b/Assets/Plugins/FMOD/src/Editor/BankRefresher.cs
new file mode 100644
index 0000000..0c75f5e
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BankRefresher.cs
@@ -0,0 +1,167 @@
+using System;
+using System.IO;
+using UnityEditor;
+using UnityEngine;
+
+namespace FMODUnity
+{
+ public class BankRefresher
+ {
+ private static string currentWatchPath;
+ private static FileSystemWatcher sourceFileWatcher;
+ private static bool sourceFilesChanged = false;
+ private static float lastSourceFileChange = float.MaxValue;
+ private static bool autoRefresh = true;
+ private static float nextFilePollTime = float.MinValue;
+
+ private const int FilePollPeriod = 5;
+
+ public static void DisableAutoRefresh()
+ {
+ autoRefresh = false;
+ }
+
+ public static void Startup()
+ {
+ sourceFileWatcher = new FileSystemWatcher();
+ sourceFileWatcher.IncludeSubdirectories = true;
+ sourceFileWatcher.NotifyFilter = NotifyFilters.LastWrite;
+
+ sourceFileWatcher.Changed += OnSourceFileChanged;
+ sourceFileWatcher.Created += OnSourceFileChanged;
+ sourceFileWatcher.Deleted += OnSourceFileChanged;
+
+ EditorApplication.update += Update;
+ }
+
+ private static void OnSourceFileChanged(object source, FileSystemEventArgs e)
+ {
+ sourceFilesChanged = true;
+ }
+
+ private static void Update()
+ {
+ UpdateFileWatcherPath();
+ CheckSourceFilesChanged();
+ CheckCacheFileExists();
+ RefreshBanksIfReady();
+ }
+
+ private static void UpdateFileWatcherPath()
+ {
+ string sourceBankPath = Settings.Instance.SourceBankPath;
+
+ string pathToWatch;
+
+ if (Path.IsPathRooted(sourceBankPath))
+ {
+ pathToWatch = Path.GetFullPath(sourceBankPath);
+ }
+ else
+ {
+ pathToWatch = Path.GetFullPath(Environment.CurrentDirectory + "/" + sourceBankPath);
+ }
+
+ if (currentWatchPath != pathToWatch)
+ {
+ currentWatchPath = pathToWatch;
+
+ try {
+ sourceFileWatcher.EnableRaisingEvents = false;
+ sourceFilesChanged = false;
+
+ if (!string.IsNullOrEmpty(sourceBankPath))
+ {
+ sourceFileWatcher.Path = pathToWatch;
+ sourceFileWatcher.EnableRaisingEvents = true;
+ }
+ }
+ catch (ArgumentException e)
+ {
+ RuntimeUtils.DebugLogWarningFormat("Error watching {0}: {1}", pathToWatch, e.Message);
+ }
+ }
+ }
+
+ private static void CheckSourceFilesChanged()
+ {
+ if (sourceFilesChanged)
+ {
+ lastSourceFileChange = Time.realtimeSinceStartup;
+ sourceFilesChanged = false;
+
+ if (!BankRefreshWindow.IsVisible)
+ {
+ autoRefresh = true;
+ }
+
+ if (IsWindowEnabled())
+ {
+ BankRefreshWindow.ShowWindow();
+ }
+ }
+ }
+
+ private static void CheckCacheFileExists()
+ {
+ if (Time.realtimeSinceStartup >= nextFilePollTime)
+ {
+ if (!File.Exists(EventManager.CacheAssetFullName))
+ {
+ EventManager.RefreshBanks();
+ }
+
+ nextFilePollTime = Time.realtimeSinceStartup + FilePollPeriod;
+ }
+ }
+
+ private static void RefreshBanksIfReady()
+ {
+ if (TimeUntilBankRefresh() == 0 && BankRefreshWindow.ReadyToRefreshBanks)
+ {
+ EventManager.RefreshBanks();
+ }
+ }
+
+ public static void HandleBankRefresh(string result)
+ {
+ lastSourceFileChange = float.MaxValue;
+ BankRefreshWindow.HandleBankRefresh(result);
+ }
+
+ private static bool IsWindowEnabled()
+ {
+ Settings settings = Settings.Instance;
+
+ return settings.BankRefreshCooldown == Settings.BankRefreshPrompt
+ || (settings.BankRefreshCooldown >= 0 && settings.ShowBankRefreshWindow);
+ }
+
+ public static float TimeSinceSourceFileChange()
+ {
+ if (lastSourceFileChange == float.MaxValue)
+ {
+ return float.MaxValue;
+ }
+ else
+ {
+ return Mathf.Max(0, Time.realtimeSinceStartup - lastSourceFileChange);
+ }
+ }
+
+ public static float TimeUntilBankRefresh()
+ {
+ if (!autoRefresh
+ || lastSourceFileChange == float.MaxValue
+ || Settings.Instance.BankRefreshCooldown < 0)
+ {
+ return float.MaxValue;
+ }
+ else
+ {
+ float nextRefreshTime = lastSourceFileChange + Settings.Instance.BankRefreshCooldown;
+ return Mathf.Max(0, nextRefreshTime - Time.realtimeSinceStartup);
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/BankRefresher.cs.meta b/Assets/Plugins/FMOD/src/Editor/BankRefresher.cs.meta
new file mode 100644
index 0000000..11dadf9
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BankRefresher.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e564c074e96205b49b91ff80126983c5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs b/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs
new file mode 100644
index 0000000..fd72801
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs
@@ -0,0 +1,131 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using UnityEngine;
+using UnityEditor;
+
+#if (UNITY_VISUALSCRIPTING_EXIST)
+using Unity.VisualScripting;
+#elif (UNITY_BOLT_EXIST)
+using Ludiq;
+using Bolt;
+#endif
+
+namespace FMODUnity
+{
+ public class BoltIntegration : MonoBehaviour
+ {
+ [MenuItem("FMOD/Generate Visual Scripting Units")]
+ public static void GenerateBoltUnitOptions()
+ {
+#if (UNITY_BOLT_EXIST || UNITY_VISUALSCRIPTING_EXIST)
+ BuildBoltUnitOptions();
+#else
+ TriggerBuild();
+#endif
+ }
+
+#if !(UNITY_BOLT_EXIST || UNITY_VISUALSCRIPTING_EXIST)
+ [MenuItem("FMOD/Generate Visual Scripting Units", true)]
+ private static bool IsBoltPresent()
+ {
+ Assembly ludiqCoreRuntimeAssembly = null;
+ Assembly boltFlowEditorAssembly = null;
+
+ try
+ {
+ ludiqCoreRuntimeAssembly = Assembly.Load("Ludiq.Core.Runtime");
+ boltFlowEditorAssembly = Assembly.Load("Bolt.Flow.Editor");
+ }
+ catch (FileNotFoundException)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ private static void TriggerBuild()
+ {
+ BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
+ BuildTargetGroup group = BuildPipeline.GetBuildTargetGroup(target);
+
+ string previousSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
+ if (!previousSymbols.Contains("UNITY_BOLT_EXIST"))
+ {
+ PlayerSettings.SetScriptingDefineSymbolsForGroup(group, previousSymbols + ";UNITY_BOLT_EXIST");
+ }
+ Settings.Instance.BoltUnitOptionsBuildPending = true;
+ AssetDatabase.Refresh();
+ }
+
+#else
+ private static void BuildBoltUnitOptions()
+ {
+#if (UNITY_BOLT_EXIST)
+ DictionaryAsset projectSettings = AssetDatabase.LoadAssetAtPath(PathUtility.FromProject(LudiqCore.Paths.projectSettings), typeof(DictionaryAsset)) as DictionaryAsset;
+ List assemblyOptions = projectSettings.dictionary["assemblyOptions"] as List;
+#else
+ List assemblyOptions = BoltCore.Configuration.assemblyOptions;
+#endif
+
+ if (!assemblyOptions.Contains("FMODUnity"))
+ {
+ assemblyOptions.Add("FMODUnity");
+ }
+
+ if (!assemblyOptions.Contains("FMODUnityResonance"))
+ {
+ assemblyOptions.Add("FMODUnityResonance");
+ }
+#if (UNITY_BOLT_EXIST)
+ List typeOptions = projectSettings.dictionary["typeOptions"] as List;
+#else
+ List typeOptions = BoltCore.Configuration.typeOptions;
+#endif
+ Assembly fmodUnityAssembly = Assembly.Load("FMODUnity");
+ Assembly fmodUnityResonanceAssembly = Assembly.Load("FMODUnityResonance");
+
+ List allTypes = new List(GetTypesForNamespace(fmodUnityAssembly, "FMOD"));
+ allTypes.AddRange(GetTypesForNamespace(fmodUnityAssembly, "FMOD.Studio"));
+ allTypes.AddRange(GetTypesForNamespace(fmodUnityAssembly, "FMODUnity"));
+ allTypes.AddRange(GetTypesForNamespace(fmodUnityResonanceAssembly, "FMODUnityResonance"));
+
+ foreach (Type type in allTypes)
+ {
+ if (!typeOptions.Contains(type))
+ {
+ typeOptions.Add(type);
+ }
+ }
+
+ Codebase.UpdateSettings();
+#if (UNITY_BOLT_EXIST)
+ UnitBase.Build();
+#else
+ BoltCore.Configuration.Save();
+ UnitBase.Rebuild();
+#endif
+ }
+
+ private static IEnumerable GetTypesForNamespace(Assembly assembly, string requestedNamespace)
+ {
+ return assembly.GetTypes()
+ .Where(t => string.Equals(t.Namespace, requestedNamespace, StringComparison.Ordinal));
+ }
+#endif
+
+ public static void Startup()
+ {
+#if (UNITY_BOLT_EXIST || UNITY_VISUALSCRIPTING_EXIST)
+ if (Settings.Instance.BoltUnitOptionsBuildPending)
+ {
+ Settings.Instance.BoltUnitOptionsBuildPending = false;
+ BuildBoltUnitOptions();
+ }
+#endif
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs.meta b/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs.meta
new file mode 100644
index 0000000..b9235c5
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f876942dd549ef444a82ab923e75ccb1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/CodeGeneration.cs b/Assets/Plugins/FMOD/src/Editor/CodeGeneration.cs
new file mode 100644
index 0000000..f9ff18c
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/CodeGeneration.cs
@@ -0,0 +1,124 @@
+#if UNITY_EDITOR
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+
+namespace FMODUnity
+{
+ public static class CodeGeneration
+ {
+ public static void GenerateStaticPluginRegistration(string filePath, Platform platform,
+ Action reportError)
+ {
+ List validatedPlugins = ValidateStaticPlugins(platform.StaticPlugins, reportError);
+
+ using (StreamWriter file = new StreamWriter(filePath))
+ {
+ WriteStaticPluginRegistration(file, platform.IsFMODStaticallyLinked, validatedPlugins);
+ }
+ }
+
+ private static void WriteStaticPluginRegistration(StreamWriter file, bool isFMODStaticallyLinked,
+ IEnumerable pluginFunctions)
+ {
+ file.WriteLine("#if ENABLE_IL2CPP");
+ file.WriteLine();
+ file.WriteLine("// This file was generated by FMOD for Unity from the Static Plugins list in the FMOD settings.");
+ file.WriteLine();
+
+ file.WriteLine("using System;");
+ file.WriteLine("using System.Runtime.InteropServices;");
+ file.WriteLine();
+
+ file.WriteLine("namespace FMODUnity");
+ file.WriteLine("{");
+
+ file.WriteLine(" class {0}", Platform.RegisterStaticPluginsClassName);
+ file.WriteLine(" {");
+
+ // Import the plugin functions
+ foreach (string pluginFunction in pluginFunctions)
+ {
+ file.WriteLine(" [DllImport(\"__Internal\")]");
+ file.WriteLine(" private static extern IntPtr {0}();", pluginFunction);
+ file.WriteLine();
+ }
+
+ // Import the RegisterDSP function
+ file.WriteLine(" [DllImport(FMOD.VERSION.dll)]");
+ file.WriteLine(" private static extern FMOD.RESULT FMOD5_System_RegisterDSP(IntPtr system, IntPtr description, IntPtr handle);");
+ file.WriteLine();
+
+ file.WriteLine(" public static void {0}(FMOD.System coreSystem, Action reportResult)",
+ Platform.RegisterStaticPluginsFunctionName);
+ file.WriteLine(" {");
+
+ if (pluginFunctions.Any())
+ {
+ file.WriteLine(" FMOD.RESULT result;");
+
+ foreach (string pluginFunction in pluginFunctions)
+ {
+ file.WriteLine();
+ file.WriteLine(" result = FMOD5_System_RegisterDSP(coreSystem.handle, {0}(), IntPtr.Zero);", pluginFunction);
+ file.WriteLine(" reportResult(result, \"Registering static plugin '{0}'\");", pluginFunction);
+ }
+ }
+
+ file.WriteLine(" }");
+ file.WriteLine(" }");
+ file.WriteLine("}");
+ file.WriteLine("");
+ file.WriteLine("#endif // ENABLE_IL2CPP");
+ }
+
+ private static List ValidateStaticPlugins(List staticPlugins, Action reportError)
+ {
+ List result = new List();
+
+ for (int i = 0; i < staticPlugins.Count; ++i)
+ {
+ string functionName = staticPlugins[i];
+
+ string trimmedName = (functionName != null) ? functionName.Trim() : null;
+
+ if (string.IsNullOrEmpty(trimmedName))
+ {
+ reportError(string.Format("Static plugin {0} has no name and will be ignored.", i + 1));
+ }
+ else if (IsValidFunctionName(trimmedName, reportError))
+ {
+ result.Add(trimmedName);
+ }
+ }
+
+ return result;
+ }
+
+ private static bool IsValidFunctionName(string name, Action reportError)
+ {
+ if (!(char.IsLetter(name[0]) || name[0] == '_'))
+ {
+ reportError(string.Format(
+ "Plugin name '{0}' is not valid. Names must start with a letter or an underscore ('_').", name));
+ return false;
+ }
+
+ for (int i = 1; i < name.Length; ++i)
+ {
+ if (!(char.IsLetterOrDigit(name[i]) || name[i] == '_'))
+ {
+ reportError(string.Format(
+ "Plugin name '{0}' is not valid. " +
+ "Character '{1}' at position {2} is invalid - it must be a letter, a number, or an underscore ('_').",
+ name, name[i], i));
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
+}
+#endif
diff --git a/Assets/Plugins/FMOD/src/Editor/CodeGeneration.cs.meta b/Assets/Plugins/FMOD/src/Editor/CodeGeneration.cs.meta
new file mode 100644
index 0000000..540276c
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/CodeGeneration.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 438155f6a2d689e45b5cc7701d412b80
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs b/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs
new file mode 100644
index 0000000..fd6d7d1
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs
@@ -0,0 +1,402 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEditor;
+
+namespace FMODUnity
+{
+ public class CreateEventPopup : EditorWindow
+ {
+ private class FolderEntry
+ {
+ public FolderEntry parent;
+ public string name;
+ public string guid;
+ public List entries = new List();
+ public Rect rect;
+ }
+
+ private SerializedProperty outputProperty;
+
+ private FolderEntry rootFolder;
+ private FolderEntry currentFolder;
+ private List banks;
+
+ private int lastHover = 0;
+ private string eventFolder = "/";
+ private string eventName = "";
+ private string currentFilter = "";
+ private int selectedBank = 0;
+ private bool resetCursor = true;
+ private Vector2 scrollPos = new Vector2();
+ private Rect scrollRect = new Rect();
+ private bool isConnected = false;
+
+ internal void SelectEvent(SerializedProperty property)
+ {
+ outputProperty = property;
+ }
+
+ private class BankEntry
+ {
+ public string name;
+ public string guid;
+ }
+
+ public CreateEventPopup()
+ {
+ }
+
+ private void BuildTree()
+ {
+ var rootGuid = EditorUtils.GetScriptOutput("studio.project.workspace.masterEventFolder.id");
+ rootFolder = new FolderEntry();
+ rootFolder.guid = rootGuid;
+ BuildTreeItem(rootFolder);
+ wantsMouseMove = true;
+ banks = new List();
+
+ const string buildBankTreeFunc =
+ @"function() {
+ var output = """";
+ const items = [ studio.project.workspace.masterBankFolder ];
+ while (items.length > 0) {
+ var currentItem = items.shift();
+ if (currentItem.isOfType(""BankFolder"")) {
+ currentItem.items.reverse().forEach(function(val) {
+ items.unshift(val);
+ });
+ } else {
+ output += "","" + currentItem.id + currentItem.getPath().replace(""bank:/"", """");
+ }
+ }
+ return output;
+ }";
+
+ string bankList = EditorUtils.GetScriptOutput(string.Format("({0})()", buildBankTreeFunc));
+ string[] bankListSplit = bankList.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
+ foreach (var bank in bankListSplit)
+ {
+ var entry = new BankEntry();
+ entry.guid = bank.Substring(0, 38);
+ entry.name = bank.Substring(38);
+ banks.Add(entry);
+ }
+ }
+
+ private void BuildTreeItem(FolderEntry entry)
+ {
+ // lookup the entry
+ EditorUtils.GetScriptOutput(string.Format("cur = studio.project.lookup(\"{0}\");", entry.guid));
+
+ // get child count
+ string itemCountString = EditorUtils.GetScriptOutput("cur.items.length;");
+ int itemCount;
+ Int32.TryParse(itemCountString, out itemCount);
+
+ // iterate children looking for folder
+ for (int item = 0; item < itemCount; item++)
+ {
+ EditorUtils.GetScriptOutput(String.Format("child = cur.items[{0}]", item));
+
+ // check if it's a folder
+ string isFolder = EditorUtils.GetScriptOutput("child.isOfExactType(\"EventFolder\")");
+ if (isFolder == "false")
+ {
+ continue;
+ }
+
+ // Get guid and name
+ string info = EditorUtils.GetScriptOutput("child.id + child.name");
+
+ var childEntry = new FolderEntry();
+ childEntry.guid = info.Substring(0, 38);
+ childEntry.name = info.Substring(38);
+ childEntry.parent = entry;
+ entry.entries.Add(childEntry);
+ }
+
+ // Recurse for child entries
+ foreach(var childEntry in entry.entries)
+ {
+ BuildTreeItem(childEntry);
+ }
+ }
+
+ public void OnGUI()
+ {
+ var borderIcon = EditorUtils.LoadImage("Border.png");
+ var border = new GUIStyle(GUI.skin.box);
+ border.normal.background = borderIcon;
+ GUI.Box(new Rect(1, 1, position.width - 1, position.height - 1), GUIContent.none, border);
+
+ if (Event.current.type == EventType.Layout)
+ {
+ isConnected = EditorUtils.IsConnectedToStudio();
+ }
+
+ if (!isConnected)
+ {
+ this.ShowNotification(new GUIContent("FMOD Studio not running"));
+ return;
+ }
+
+ this.RemoveNotification();
+
+ if (rootFolder == null)
+ {
+ BuildTree();
+ currentFolder = rootFolder;
+ }
+
+ var arrowIcon = EditorUtils.LoadImage("ArrowIcon.png");
+ var hoverIcon = EditorUtils.LoadImage("SelectedAlt.png");
+
+ var nextEntry = currentFolder;
+
+ var filteredEntries = currentFolder.entries.FindAll((x) => x.name.StartsWith(currentFilter, StringComparison.CurrentCultureIgnoreCase));
+
+ // Process key strokes for the folder list
+ {
+ if (Event.current.keyCode == KeyCode.UpArrow)
+ {
+ if (Event.current.type == EventType.KeyDown)
+ {
+ lastHover = Math.Max(lastHover - 1, 0);
+ if (filteredEntries[lastHover].rect.y < scrollPos.y)
+ {
+ scrollPos.y = filteredEntries[lastHover].rect.y;
+ }
+ }
+ Event.current.Use();
+ }
+ if (Event.current.keyCode == KeyCode.DownArrow)
+ {
+ if (Event.current.type == EventType.KeyDown)
+ {
+ lastHover = Math.Min(lastHover + 1, filteredEntries.Count - 1);
+ if (filteredEntries[lastHover].rect.y + filteredEntries[lastHover].rect.height > scrollPos.y + scrollRect.height)
+ {
+ scrollPos.y = filteredEntries[lastHover].rect.y - scrollRect.height + filteredEntries[lastHover].rect.height * 2;
+ }
+ }
+ Event.current.Use();
+ }
+ if (Event.current.keyCode == KeyCode.RightArrow)
+ {
+ if (Event.current.type == EventType.KeyDown)
+ nextEntry = filteredEntries[lastHover];
+ Event.current.Use();
+ }
+ if (Event.current.keyCode == KeyCode.LeftArrow)
+ {
+ if (Event.current.type == EventType.KeyDown)
+ if (currentFolder.parent != null)
+ {
+ nextEntry = currentFolder.parent;
+ }
+ Event.current.Use();
+ }
+ }
+
+ bool disabled = eventName.Length == 0;
+ EditorGUI.BeginDisabledGroup(disabled);
+ if (GUILayout.Button("Create Event"))
+ {
+ CreateEventInStudio();
+ this.Close();
+ }
+ EditorGUI.EndDisabledGroup();
+
+ {
+ GUI.SetNextControlName("name");
+
+ EditorGUILayout.LabelField("Name");
+ eventName = EditorGUILayout.TextField(eventName);
+ }
+
+ {
+ EditorGUILayout.LabelField("Bank");
+ selectedBank = EditorGUILayout.Popup(selectedBank, banks.Select(x => x.name).ToArray());
+ }
+
+ bool updateEventPath = false;
+ {
+ GUI.SetNextControlName("folder");
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.LabelField("Path");
+ eventFolder = GUILayout.TextField(eventFolder);
+ if (EditorGUI.EndChangeCheck())
+ {
+ updateEventPath = true;
+ }
+ }
+
+ if (resetCursor)
+ {
+ resetCursor = false;
+
+ var textEditor = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), GUIUtility.keyboardControl);
+ if (textEditor != null)
+ {
+ textEditor.MoveCursorToPosition(new Vector2(9999, 9999));
+ }
+ }
+
+ // Draw the current folder as a title bar, click to go back one level
+ {
+ Rect currentRect = EditorGUILayout.GetControlRect();
+
+ var bg = new GUIStyle(GUI.skin.box);
+ Rect bgRect = new Rect(currentRect);
+ bgRect.x = 2;
+ bgRect.width = position.width-4;
+ GUI.Box(bgRect, GUIContent.none, bg);
+
+ Rect textureRect = currentRect;
+ textureRect.width = arrowIcon.width;
+ if (currentFolder.name != null)
+ {
+ GUI.DrawTextureWithTexCoords(textureRect, arrowIcon, new Rect(1, 1, -1, -1));
+ }
+
+ Rect labelRect = currentRect;
+ labelRect.x += arrowIcon.width;
+ labelRect.width -= arrowIcon.width;
+ GUI.Label(labelRect, currentFolder.name != null ? currentFolder.name : "Folders", EditorStyles.boldLabel);
+
+ if (Event.current.type == EventType.MouseDown && currentRect.Contains(Event.current.mousePosition) &&
+ currentFolder.parent != null)
+ {
+ nextEntry = currentFolder.parent;
+ Event.current.Use();
+ }
+ }
+
+ var normal = new GUIStyle(GUI.skin.label);
+ normal.padding.left = 14;
+ var hover = new GUIStyle(normal);
+ hover.normal.background = hoverIcon;
+
+ scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false);
+
+ for (int i = 0; i < filteredEntries.Count; i++)
+ {
+ var entry = filteredEntries[i];
+ var content = new GUIContent(entry.name);
+ var rect = EditorGUILayout.GetControlRect();
+ if ((rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseMove) || i == lastHover)
+ {
+ lastHover = i;
+
+ GUI.Label(rect, content, hover);
+ if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown)
+ {
+ nextEntry = entry;
+ }
+ }
+ else
+ {
+ GUI.Label(rect, content, normal);
+ }
+
+ Rect textureRect = rect;
+ textureRect.x = textureRect.width - arrowIcon.width;
+ textureRect.width = arrowIcon.width;
+ GUI.DrawTexture(textureRect, arrowIcon);
+
+ if (Event.current.type == EventType.Repaint)
+ {
+ entry.rect = rect;
+ }
+ }
+ EditorGUILayout.EndScrollView();
+
+ if (Event.current.type == EventType.Repaint)
+ {
+ scrollRect = GUILayoutUtility.GetLastRect();
+ }
+
+ if (currentFolder != nextEntry)
+ {
+ lastHover = 0;
+ currentFolder = nextEntry;
+ UpdateTextFromList();
+ Repaint();
+ }
+
+ if (updateEventPath)
+ {
+ UpdateListFromText();
+ }
+
+ if (Event.current.type == EventType.MouseMove)
+ {
+ Repaint();
+ }
+ }
+
+ private void CreateEventInStudio()
+ {
+ string eventGuid = EditorUtils.CreateStudioEvent(eventFolder, eventName);
+
+ if (!string.IsNullOrEmpty(eventGuid))
+ {
+ EditorUtils.GetScriptOutput(String.Format("studio.project.lookup(\"{0}\").relationships.banks.add(studio.project.lookup(\"{1}\"));", eventGuid, banks[selectedBank].guid));
+ EditorUtils.GetScriptOutput("studio.project.build();");
+
+ if (!eventFolder.EndsWith("/"))
+ {
+ eventFolder += "/";
+ }
+
+ string fullPath = "event:" + eventFolder + eventName;
+ outputProperty.SetEventReference(FMOD.GUID.Parse(eventGuid), fullPath);
+ EditorUtils.UpdateParamsOnEmitter(outputProperty.serializedObject, fullPath);
+ outputProperty.serializedObject.ApplyModifiedProperties();
+ }
+ }
+
+ private void UpdateListFromText()
+ {
+ int endFolders = eventFolder.LastIndexOf("/");
+ currentFilter = eventFolder.Substring(endFolders + 1);
+
+ var folders = eventFolder.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
+ FolderEntry entry = rootFolder;
+ int i;
+ for (i = 0; i < folders.Length; i++)
+ {
+ var newEntry = entry.entries.Find((x) => x.name.Equals(folders[i], StringComparison.CurrentCultureIgnoreCase));
+ if (newEntry == null)
+ {
+ break;
+ }
+ entry = newEntry;
+ }
+ currentFolder = entry;
+
+ // Treat an exact filter match as being in that folder and clear the filter
+ if (entry.name != null && entry.name.Equals(currentFilter, StringComparison.CurrentCultureIgnoreCase))
+ {
+ currentFilter = "";
+ }
+ }
+
+ private void UpdateTextFromList()
+ {
+ string path = "";
+ var entry = currentFolder;
+ while (entry.parent != null)
+ {
+ path = entry.name + "/" + path;
+ entry = entry.parent;
+ }
+
+ eventFolder = "/" + path;
+ resetCursor = true;
+ currentFilter = "";
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs.meta b/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs.meta
new file mode 100644
index 0000000..a31c645
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9c9773a32ed4a2b429fd42645175c32b
+timeCreated: 1455063674
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs b/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs
new file mode 100644
index 0000000..3c82ca9
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+namespace FMODUnity
+{
+ public class EditorBankRef : ScriptableObject
+ {
+ [SerializeField]
+ public string Path;
+
+ [SerializeField]
+ public string Name;
+
+ [SerializeField]
+ public string StudioPath;
+
+ [SerializeField]
+ private Int64 lastModified;
+
+ [SerializeField]
+ public List FileSizes;
+
+ public bool Exists;
+
+ public DateTime LastModified
+ {
+ get { return new DateTime(lastModified); }
+ set { lastModified = value.Ticks; }
+ }
+
+ public static string CalculateName(string filePath, string basePath)
+ {
+ string relativePath = filePath.Substring(basePath.Length + 1);
+ string extension = System.IO.Path.GetExtension(relativePath);
+
+ string name = relativePath.Substring(0, relativePath.Length - extension.Length);
+ name = RuntimeUtils.GetCommonPlatformPath(name);
+
+ return name;
+ }
+
+ public void SetPath(string filePath, string basePath)
+ {
+ Path = RuntimeUtils.GetCommonPlatformPath(filePath);
+ Name = CalculateName(filePath, basePath);
+ base.name = "bank:/" + Name + System.IO.Path.GetExtension(filePath);
+ }
+
+ public void SetStudioPath(string studioPath)
+ {
+ string stringCmp;
+ stringCmp = System.IO.Path.GetFileName(Name);
+ if (!studioPath.Contains(stringCmp))
+ {
+ // No match means localization
+ studioPath = studioPath.Substring(0, studioPath.LastIndexOf("/") + 1);
+ studioPath += stringCmp;
+ }
+ StudioPath = studioPath;
+ }
+
+ [Serializable]
+ public class NameValuePair
+ {
+ public string Name;
+ public long Value;
+
+ public NameValuePair(string name, long value)
+ {
+ Name = name;
+ Value = value;
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs.meta b/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs.meta
new file mode 100644
index 0000000..438bf3f
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c18180ecb35941f4682ae60107b85b7c
+timeCreated: 1432775088
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs b/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs
new file mode 100644
index 0000000..406d95d
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEditor;
+
+namespace FMODUnity
+{
+ public class EditorEventRef : ScriptableObject
+ {
+ [SerializeField]
+ public string Path;
+
+ [SerializeField]
+ public FMOD.GUID Guid;
+
+ [SerializeField]
+ public List Banks;
+ [SerializeField]
+ public bool IsStream;
+ [SerializeField]
+ public bool Is3D;
+ [SerializeField]
+ public bool IsOneShot;
+ [SerializeField]
+ public List Parameters;
+ [SerializeField]
+ public float MinDistance;
+ [SerializeField]
+ public float MaxDistance;
+ [SerializeField]
+ public int Length;
+
+ public List LocalParameters
+ {
+ get { return Parameters.Where(p => p.IsGlobal == false).OrderBy(p => p.Name).ToList(); }
+ }
+
+ public List GlobalParameters
+ {
+ get { return Parameters.Where(p => p.IsGlobal == true).OrderBy(p => p.Name).ToList(); }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs.meta b/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs.meta
new file mode 100644
index 0000000..afa881e
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ceb653cd98e289a4e8697a1af55201f2
+timeCreated: 1432775088
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs b/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs
new file mode 100644
index 0000000..c1bc821
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UnityEditor;
+using UnityEngine;
+
+namespace FMODUnity
+{
+ public enum ParameterType
+ {
+ Continuous,
+ Discrete,
+ Labeled,
+ }
+
+ public class EditorParamRef : ScriptableObject
+ {
+ [SerializeField]
+ public string Name;
+ [SerializeField]
+ public string StudioPath;
+ [SerializeField]
+ public float Min;
+ [SerializeField]
+ public float Max;
+ [SerializeField]
+ public float Default;
+ [SerializeField]
+ public ParameterID ID;
+ [SerializeField]
+ public ParameterType Type;
+ [SerializeField]
+ public bool IsGlobal;
+ [SerializeField]
+ public string[] Labels = { };
+
+ public bool Exists;
+
+ [Serializable]
+ public struct ParameterID
+ {
+ public static implicit operator ParameterID(FMOD.Studio.PARAMETER_ID source)
+ {
+ return new ParameterID {
+ data1 = source.data1,
+ data2 = source.data2,
+ };
+ }
+
+ public static implicit operator FMOD.Studio.PARAMETER_ID(ParameterID source)
+ {
+ return new FMOD.Studio.PARAMETER_ID {
+ data1 = source.data1,
+ data2 = source.data2,
+ };
+ }
+
+ public bool Equals(FMOD.Studio.PARAMETER_ID other)
+ {
+ return data1 == other.data1 && data2 == other.data2;
+ }
+
+ public uint data1;
+ public uint data2;
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs.meta b/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs.meta
new file mode 100644
index 0000000..b7cdffc
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: fecb8ef7f94ca804a8ab72049b86782e
+timeCreated: 1432775088
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorSettings.cs b/Assets/Plugins/FMOD/src/Editor/EditorSettings.cs
new file mode 100644
index 0000000..f8ae523
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorSettings.cs
@@ -0,0 +1,706 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using UnityEditor;
+using UnityEditor.Build;
+using UnityEditor.Build.Reporting;
+using UnityEngine;
+
+namespace FMODUnity
+{
+ [InitializeOnLoad]
+ public class EditorSettings : IEditorSettings
+ {
+ static EditorSettings()
+ {
+ Settings.EditorSettings = new EditorSettings();
+ }
+
+ public const string DownloadURL = "https://www.fmod.com/download";
+
+ // This is used to find the platform that implements the current Unity build target.
+ private Dictionary PlatformForBuildTarget = new Dictionary();
+
+ private static string FMODFolderFull => $"Assets/{RuntimeUtils.PluginBasePath}";
+
+ private const string CacheFolderName = "Cache";
+ private static string CacheFolderRelative => $"{RuntimeUtils.PluginBasePath}/{CacheFolderName}";
+ private static string CacheFolderFull => $"{FMODFolderFull}/{CacheFolderName}";
+
+ private const string RegisterStaticPluginsFile = "RegisterStaticPlugins.cs";
+ private static string RegisterStaticPluginsAssetPathRelative => $"{CacheFolderRelative}/{RegisterStaticPluginsFile}";
+ private static string RegisterStaticPluginsAssetPathFull => $"{CacheFolderFull}/{RegisterStaticPluginsFile}";
+
+ [NonSerialized]
+ private Dictionary binaryCompatibilitiesBeforeBuild;
+
+ public static EditorSettings Instance
+ {
+ get
+ {
+ return Settings.EditorSettings as EditorSettings;
+ }
+ }
+
+ public Settings RuntimeSettings { get; set; }
+
+ [MenuItem("FMOD/Edit Settings", priority = 0)]
+ public static void EditSettings()
+ {
+ Selection.activeObject = Settings.Instance;
+ EditorApplication.ExecuteMenuItem("Window/General/Inspector");
+ }
+
+ public void Clear()
+ {
+ PlatformForBuildTarget.Clear();
+ binaryCompatibilitiesBeforeBuild = null;
+ }
+
+ public void CreateSettingsAsset(string assetName)
+ {
+ string resourcesPath = $"{FMODFolderFull}/Resources";
+
+ if (!Directory.Exists(resourcesPath))
+ {
+ AssetDatabase.CreateFolder(FMODFolderFull, "Resources");
+ }
+ AssetDatabase.CreateAsset(RuntimeSettings, $"{resourcesPath}/{assetName}.asset");
+
+ AddPlatformsToAsset();
+ }
+
+ public void AddPlatformForBuildTargets(Platform platform)
+ {
+ foreach (BuildTarget buildTarget in platform.GetBuildTargets())
+ {
+ if (buildTarget != BuildTarget.NoTarget)
+ {
+ try
+ {
+ PlatformForBuildTarget.Add(buildTarget, platform);
+ }
+ catch (Exception e)
+ {
+ RuntimeUtils.DebugLogWarningFormat("FMOD: Error platform {0} already added to build targets. : {1}", buildTarget, e.Message);
+ }
+ }
+ }
+ }
+
+ // Adds a new platform group to the set of platforms.
+ public PlatformGroup AddPlatformGroup(string displayName, int sortOrder)
+ {
+ PlatformGroup group = PlatformGroup.Create(displayName, Legacy.Platform.None);
+ group.DisplaySortOrder = sortOrder;
+
+ RuntimeSettings.AddPlatform(group);
+ AssetDatabase.AddObjectToAsset(group, RuntimeSettings);
+
+ RuntimeSettings.LinkPlatform(group);
+
+ return group;
+ }
+
+ private void ClearPlatformSettings()
+ {
+ RemovePlatformFromAsset(RuntimeSettings.DefaultPlatform);
+ RemovePlatformFromAsset(RuntimeSettings.PlayInEditorPlatform);
+
+ RuntimeSettings.Platforms.ForEach(RemovePlatformFromAsset);
+
+ foreach (Platform platform in Resources.LoadAll(Settings.SettingsAssetName))
+ {
+ RemovePlatformFromAsset(platform);
+ }
+
+ RuntimeSettings.DefaultPlatform = null;
+ RuntimeSettings.PlayInEditorPlatform = null;
+
+ RuntimeSettings.Platforms.Clear();
+ PlatformForBuildTarget.Clear();
+ RuntimeSettings.PlatformForRuntimePlatform.Clear();
+ }
+
+ // Testing function: Resets all platform settings.
+ public void ResetPlatformSettings()
+ {
+ ClearPlatformSettings();
+ RuntimeSettings.OnEnable();
+ }
+
+ // Testing function: Reimports legacy platform settings.
+ public void ReimportLegacyPlatforms()
+ {
+ ClearPlatformSettings();
+ RuntimeSettings.MigratedPlatforms.Clear();
+ RuntimeSettings.OnEnable();
+ }
+
+ public void UpdateMigratedPlatform(Platform platform)
+ {
+ if (!RuntimeSettings.MigratedPlatforms.Contains(platform.LegacyIdentifier))
+ {
+ RuntimeSettings.MigratedPlatforms.Add(platform.LegacyIdentifier);
+ }
+ }
+
+ // Adds any missing platforms:
+ // * From the template collection
+ // * From the legacy settings
+ public void AddMissingPlatforms()
+ {
+ var newPlatforms = new List();
+
+ foreach (Settings.PlatformTemplate template in Settings.PlatformTemplates)
+ {
+ if (!RuntimeSettings.PlatformExists(template.Identifier))
+ {
+ newPlatforms.Add(template.CreateInstance());
+ }
+ }
+
+ // Ensure that the default platform exists
+ if (!RuntimeSettings.DefaultPlatform)
+ {
+ RuntimeSettings.DefaultPlatform = ScriptableObject.CreateInstance();
+ newPlatforms.Add(RuntimeSettings.DefaultPlatform);
+ }
+
+ // Ensure that the Play In Editor platform exists
+ if (!RuntimeSettings.PlayInEditorPlatform)
+ {
+ RuntimeSettings.PlayInEditorPlatform = ScriptableObject.CreateInstance();
+ newPlatforms.Add(RuntimeSettings.PlayInEditorPlatform);
+ }
+
+ // Ensure that the default and Play In Editor platforms have properties
+ AffirmPlatformProperties(RuntimeSettings.DefaultPlatform);
+ AffirmPlatformProperties(RuntimeSettings.PlayInEditorPlatform);
+
+ // Migrate plugins if necessary
+ var PluginsProperty = Platform.PropertyAccessors.Plugins;
+
+ if (!RuntimeSettings.MigratedPlatforms.Contains(RuntimeSettings.DefaultPlatform.LegacyIdentifier))
+ {
+ PluginsProperty.Set(RuntimeSettings.DefaultPlatform, RuntimeSettings.Plugins);
+ }
+ else if (!PluginsProperty.HasValue(RuntimeSettings.DefaultPlatform))
+ {
+ PluginsProperty.Set(RuntimeSettings.DefaultPlatform, new List());
+ }
+
+ // Migrate LiveUpdatePort
+ if (!Platform.PropertyAccessors.LiveUpdatePort.HasValue(RuntimeSettings.DefaultPlatform))
+ {
+ Platform.PropertyAccessors.LiveUpdatePort.Set(RuntimeSettings.DefaultPlatform, RuntimeSettings.LiveUpdatePort);
+ }
+
+ // Create a map for migrating legacy settings
+ var platformMap = new Dictionary();
+
+ foreach (Platform platform in RuntimeSettings.Platforms.Concat(newPlatforms))
+ {
+ if (platform.LegacyIdentifier != Legacy.Platform.None)
+ {
+ platformMap.Add(platform.LegacyIdentifier, platform);
+ }
+ }
+
+ Func AffirmPlatform = null;
+
+ // Ensures that all of the platform's ancestors exist.
+ Action AffirmAncestors = (platform) =>
+ {
+ Legacy.Platform legacyParent = Legacy.Parent(platform.LegacyIdentifier);
+
+ if (legacyParent != Legacy.Platform.None)
+ {
+ platform.ParentIdentifier = AffirmPlatform(legacyParent).Identifier;
+ }
+ };
+
+ // Gets the platform corresponding to legacyPlatform (or creates it if it is a group),
+ // and ensures that it has properties and all of its ancestors exist.
+ // Returns null if legacyPlatform is unknown.
+ AffirmPlatform = (legacyPlatform) =>
+ {
+ Platform platform;
+
+ if (platformMap.TryGetValue(legacyPlatform, out platform))
+ {
+ platform.AffirmProperties();
+ }
+ else if (Legacy.IsGroup(legacyPlatform))
+ {
+ PlatformGroup group = PlatformGroup.Create(Legacy.DisplayName(legacyPlatform), legacyPlatform);
+ platformMap.Add(legacyPlatform, group);
+ newPlatforms.Add(group);
+
+ platform = group;
+ }
+ else
+ {
+ // This is an unknown platform
+ return null;
+ }
+
+ AffirmAncestors(platform);
+
+ return platform;
+ };
+
+ // Gets the target plaform to use when migrating settings from legacyPlatform.
+ // Returns null if legacyPlatform is unknown or has already been migrated.
+ Func getMigrationTarget = (legacyPlatform) =>
+ {
+ if (RuntimeSettings.MigratedPlatforms.Contains(legacyPlatform))
+ {
+ // Already migrated
+ return null;
+ }
+
+ return AffirmPlatform(legacyPlatform);
+ };
+
+ var speakerModeSettings = RuntimeSettings.SpeakerModeSettings.ConvertAll(
+ setting => new Legacy.PlatformSetting()
+ {
+ Value = (FMOD.SPEAKERMODE)setting.Value,
+ Platform = setting.Platform
+ }
+ );
+
+ // Migrate all the legacy settings, creating platforms as we need them via AffirmPlatform
+ MigrateLegacyPlatforms(speakerModeSettings, Platform.PropertyAccessors.SpeakerMode, getMigrationTarget);
+ MigrateLegacyPlatforms(RuntimeSettings.SampleRateSettings, Platform.PropertyAccessors.SampleRate, getMigrationTarget);
+ MigrateLegacyPlatforms(RuntimeSettings.LiveUpdateSettings, Platform.PropertyAccessors.LiveUpdate, getMigrationTarget);
+ MigrateLegacyPlatforms(RuntimeSettings.OverlaySettings, Platform.PropertyAccessors.Overlay, getMigrationTarget);
+ MigrateLegacyPlatforms(RuntimeSettings.BankDirectorySettings, Platform.PropertyAccessors.BuildDirectory, getMigrationTarget);
+ MigrateLegacyPlatforms(RuntimeSettings.VirtualChannelSettings, Platform.PropertyAccessors.VirtualChannelCount, getMigrationTarget);
+ MigrateLegacyPlatforms(RuntimeSettings.RealChannelSettings, Platform.PropertyAccessors.RealChannelCount, getMigrationTarget);
+
+ // Now we ensure that if a legacy group has settings, all of its descendants exist
+ // and inherit from it (even if they have no settings of their own), so that the
+ // inheritance structure matches the old system.
+ // We look at all groups (not just newly created ones), because a newly created platform
+ // may need to inherit from a preexisting group.
+ var groupsToProcess = new Queue(platformMap.Values.Where(
+ platform => platform is PlatformGroup
+ && platform.LegacyIdentifier != Legacy.Platform.None
+ && platform.HasAnyOverriddenProperties));
+
+ while (groupsToProcess.Count > 0)
+ {
+ Platform group = groupsToProcess.Dequeue();
+
+ // Ensure that all descendants exist
+ foreach (var child in platformMap.Values)
+ {
+ if (child.Active)
+ {
+ // Don't overwrite existing settings
+ continue;
+ }
+
+ var legacyPlatform = child.LegacyIdentifier;
+
+ if (legacyPlatform == Legacy.Platform.iOS || legacyPlatform == Legacy.Platform.Android)
+ {
+ // These platforms were overridden by MobileHigh and MobileLow in the old system
+ continue;
+ }
+
+ if (RuntimeSettings.MigratedPlatforms.Contains(legacyPlatform))
+ {
+ // The user may have deleted this platform since migration, so don't mess with it
+ continue;
+ }
+
+ if (Legacy.Parent(legacyPlatform) == group.LegacyIdentifier)
+ {
+ child.AffirmProperties();
+ child.ParentIdentifier = group.Identifier;
+
+ if (child is PlatformGroup)
+ {
+ groupsToProcess.Enqueue(child as PlatformGroup);
+ }
+ }
+ }
+ }
+
+ // Add all of the new platforms to the set of known platforms
+ foreach (Platform platform in newPlatforms)
+ {
+ RuntimeSettings.AddPlatform(platform);
+ }
+
+ RuntimeSettings.Platforms.ForEach(UpdateMigratedPlatform);
+ }
+
+ private void MigrateLegacyPlatforms(List settings,
+ Platform.PropertyAccessor property, Func getMigrationTarget)
+ where TSetting : Legacy.PlatformSetting
+ {
+ foreach (TSetting setting in settings)
+ {
+ Platform platform = getMigrationTarget(setting.Platform);
+
+ if (platform != null)
+ {
+ property.Set(platform, setting.Value);
+ }
+ }
+ }
+
+ // The platform that implements the current Unity build target.
+ public Platform CurrentEditorPlatform
+ {
+ get
+ {
+ return GetPlatform(EditorUserBuildSettings.activeBuildTarget);
+ }
+ }
+
+ public Platform GetPlatform(BuildTarget buildTarget)
+ {
+ if (PlatformForBuildTarget.ContainsKey(buildTarget))
+ {
+ return PlatformForBuildTarget[buildTarget];
+ }
+ else
+ {
+ return RuntimeSettings.DefaultPlatform;
+ }
+ }
+
+ public void SetPlatformParent(Platform platform, Platform newParent)
+ {
+ Platform oldParent = RuntimeSettings.FindPlatform(platform.ParentIdentifier);
+
+ if (oldParent != null)
+ {
+ oldParent.ChildIdentifiers.Remove(platform.Identifier);
+ }
+
+ if (newParent != null)
+ {
+ platform.ParentIdentifier = newParent.Identifier;
+
+ newParent.ChildIdentifiers.Add(platform.Identifier);
+ SortPlatformChildren(newParent);
+ }
+ else
+ {
+ platform.ParentIdentifier = null;
+ }
+ }
+
+ public void SetPlatformSortOrder(Platform platform, float sortOrder)
+ {
+ if (platform.DisplaySortOrder != sortOrder)
+ {
+ platform.DisplaySortOrder = sortOrder;
+
+ if (platform.Parent != null)
+ {
+ SortPlatformChildren(platform.Parent);
+ }
+ }
+ }
+
+ public void SortPlatformChildren(Platform platform)
+ {
+ platform.ChildIdentifiers.Sort((a, b) => {
+ Platform platformA = RuntimeSettings.FindPlatform(a);
+ Platform platformB = RuntimeSettings.FindPlatform(b);
+
+ return platformA.DisplaySortOrder.CompareTo(platformB.DisplaySortOrder);
+ });
+ }
+
+ // Ensures that the given platform has valid properties.
+ private void AffirmPlatformProperties(Platform platform)
+ {
+ if (!platform.Active)
+ {
+ RuntimeUtils.DebugLogFormat("[FMOD] Cannot find properties for platform {0}, creating default properties", platform.Identifier);
+ RuntimeSettings.AddPlatformProperties(platform);
+ }
+ }
+
+ private void RemovePlatformFromAsset(Platform platform)
+ {
+ if (AssetDatabase.Contains(platform))
+ {
+ UnityEngine.Object.DestroyImmediate(platform, true);
+ }
+ }
+
+ public bool CanBuildTarget(BuildTarget target, Platform.BinaryType binaryType, out string error)
+ {
+ if (Settings.Instance == null)
+ {
+ error = "Settings instance has not been initialized. Unable to continue build.";
+ return false;
+ }
+
+ Platform platform;
+
+ if (!PlatformForBuildTarget.TryGetValue(target, out platform))
+ {
+ error = string.Format("No FMOD platform found for build target {0}. " +
+ "You may need to install a platform specific integration package from {1}.",
+ target, DownloadURL);
+ return false;
+ }
+
+ IEnumerable missingPathsQuery = platform.GetBinaryFilePaths(target, binaryType)
+ .Where(path => !File.Exists(path) && !Directory.Exists(path));
+
+ if (missingPathsQuery.Any())
+ {
+ string[] missingPaths = missingPathsQuery.Select(path => "- " + path).ToArray();
+
+ string summary;
+
+ if (missingPaths.Length == 1)
+ {
+ summary = string.Format("There is an FMOD binary missing for build target {0}", target);
+ }
+ else
+ {
+ summary = string.Format("There are {0} FMOD binaries missing for build target {1}",
+ missingPaths.Length, target);
+ }
+
+ if (binaryType == Platform.BinaryType.Logging)
+ {
+ summary += " (development build)";
+ }
+
+ error = string.Format(
+ "{0}:\n" +
+ "{1}\n" +
+ "Please run the {2} menu command.\n",
+ summary, string.Join("\n", missingPaths), FileReorganizer.ReorganizerMenuItemPath);
+ return false;
+ }
+
+ error = null;
+ return true;
+ }
+
+ public void PreprocessBuild(BuildTarget target, Platform.BinaryType binaryType)
+ {
+ Platform platform = PlatformForBuildTarget[target];
+
+ PreprocessStaticPlugins(platform, target);
+
+ SelectBinaries(platform, target, binaryType);
+ }
+
+ private void PostprocessBuild(BuildTarget target)
+ {
+ foreach(string path in binaryCompatibilitiesBeforeBuild.Keys)
+ {
+ PluginImporter importer = AssetImporter.GetAtPath(path) as PluginImporter;
+
+ if (importer != null)
+ {
+ importer.SetCompatibleWithPlatform(target, binaryCompatibilitiesBeforeBuild[path]);
+ }
+ }
+ }
+
+ private void PreprocessStaticPlugins(Platform platform, BuildTarget target)
+ {
+ // Ensure we don't have leftover temporary changes from a previous build.
+ CleanTemporaryFiles();
+
+ BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(target);
+ ScriptingImplementation scriptingBackend = PlayerSettings.GetScriptingBackend(buildTargetGroup);
+
+ if (platform.StaticPlugins.Count > 0)
+ {
+ if (scriptingBackend == ScriptingImplementation.IL2CPP)
+ {
+ Action reportError = message => {
+ RuntimeUtils.DebugLogWarningFormat("FMOD: Error processing static plugins for platform {0}: {1}",
+ platform.DisplayName, message);
+ };
+
+ if (!AssetDatabase.IsValidFolder(CacheFolderFull))
+ {
+ RuntimeUtils.DebugLogFormat("Creating {0}", CacheFolderFull);
+ AssetDatabase.CreateFolder(FMODFolderFull, CacheFolderName);
+ }
+
+ // Generate registration code and import it so it's included in the build.
+ RuntimeUtils.DebugLogFormat("FMOD: Generating static plugin registration code in {0}", RegisterStaticPluginsAssetPathFull);
+
+ string filePath = Application.dataPath + "/" + RegisterStaticPluginsAssetPathRelative;
+ CodeGeneration.GenerateStaticPluginRegistration(filePath, platform, reportError);
+ AssetDatabase.ImportAsset(RegisterStaticPluginsAssetPathFull);
+ }
+ else
+ {
+ RuntimeUtils.DebugLogWarningFormat(
+ "FMOD: Platform {0} has {1} static plugins specified, " +
+ "but static plugins are only supported on the IL2CPP scripting backend",
+ platform.DisplayName, platform.StaticPlugins.Count);
+ }
+ }
+ }
+
+ public void CleanTemporaryFiles()
+ {
+ DeleteTemporaryFile(RegisterStaticPluginsAssetPathFull);
+ }
+
+ public void DeleteTemporaryFile(string assetPath)
+ {
+ bool assetExists = !string.IsNullOrEmpty(AssetDatabase.AssetPathToGUID(assetPath));
+
+ if (assetExists && AssetDatabase.DeleteAsset(assetPath))
+ {
+ RuntimeUtils.DebugLogFormat("FMOD: Removed temporary file {0}", assetPath);
+ }
+ }
+
+ private static void SelectBinaries(Platform platform, BuildTarget target, Platform.BinaryType binaryType)
+ {
+ string message = string.Format("FMOD: Selected binaries for platform {0}{1}:", target,
+ (binaryType == Platform.BinaryType.Logging) ? " (development build)" : string.Empty);
+
+ Instance.binaryCompatibilitiesBeforeBuild = new Dictionary();
+
+ HashSet enabledPaths = new HashSet();
+
+ foreach (string path in platform.GetBinaryAssetPaths(target, binaryType | Platform.BinaryType.Optional))
+ {
+ PluginImporter importer = AssetImporter.GetAtPath(path) as PluginImporter;
+
+ if (importer is PluginImporter)
+ {
+ Instance.binaryCompatibilitiesBeforeBuild.Add(path, importer.GetCompatibleWithPlatform(target));
+
+ importer.SetCompatibleWithPlatform(target, true);
+
+ enabledPaths.Add(path);
+
+ message += string.Format("\n- Enabled {0}", path);
+ }
+ }
+
+ foreach (string path in platform.GetBinaryAssetPaths(target, Platform.BinaryType.All))
+ {
+ if (!enabledPaths.Contains(path))
+ {
+ PluginImporter importer = AssetImporter.GetAtPath(path) as PluginImporter;
+
+ if (importer is PluginImporter)
+ {
+ Instance.binaryCompatibilitiesBeforeBuild.Add(path, importer.GetCompatibleWithPlatform(target));
+
+ importer.SetCompatibleWithPlatform(target, false);
+
+ message += string.Format("\n- Disabled {0}", path);
+ }
+ }
+ }
+
+ RuntimeUtils.DebugLog(message);
+ }
+
+ public bool ForceLoggingBinaries { get; set; } = false;
+
+ public class BuildProcessor : IPreprocessBuildWithReport, IPostprocessBuildWithReport
+ {
+ public int callbackOrder { get { return 0; } }
+
+ public void OnPreprocessBuild(BuildReport report)
+ {
+ Platform.BinaryType binaryType;
+
+ if ((report.summary.options & BuildOptions.Development) == BuildOptions.Development
+ || EditorSettings.Instance.ForceLoggingBinaries)
+ {
+ binaryType = Platform.BinaryType.Logging;
+ }
+ else
+ {
+ binaryType = Platform.BinaryType.Release;
+ }
+
+ string error;
+ if (!EditorSettings.Instance.CanBuildTarget(report.summary.platform, binaryType, out error))
+ {
+ throw new BuildFailedException(error);
+ }
+
+ bool androidPatchBuildPrevious = Settings.Instance.AndroidPatchBuild;
+ if ((report.summary.options & BuildOptions.PatchPackage) == BuildOptions.PatchPackage)
+ {
+ Settings.Instance.AndroidPatchBuild = true;
+ }
+ else
+ {
+ Settings.Instance.AndroidPatchBuild = false;
+ }
+ if (androidPatchBuildPrevious != Settings.Instance.AndroidPatchBuild)
+ {
+ EditorUtility.SetDirty(Settings.Instance);
+ }
+
+ EditorSettings.Instance.PreprocessBuild(report.summary.platform, binaryType);
+ }
+
+ public void OnPostprocessBuild(BuildReport report)
+ {
+ Instance.PostprocessBuild(report.summary.platform);
+ Settings.Instance.AndroidPatchBuild = false;
+ }
+ }
+
+ public void CheckActiveBuildTarget()
+ {
+ Settings.EditorSettings.CleanTemporaryFiles();
+
+ Platform.BinaryType binaryType = EditorUserBuildSettings.development
+ ? Platform.BinaryType.Logging
+ : Platform.BinaryType.Release;
+
+ string error;
+ if (!CanBuildTarget(EditorUserBuildSettings.activeBuildTarget, binaryType, out error))
+ {
+ RuntimeUtils.DebugLogWarning(error);
+
+ if (EditorWindow.HasOpenInstances())
+ {
+ GUIContent message =
+ new GUIContent("FMOD detected issues with this platform!\nSee the Console for details.");
+ EditorWindow.GetWindow().ShowNotification(message, 10);
+ }
+ }
+ }
+
+ // Adds all platforms to the settings asset, so they get stored in the same file as the main
+ // Settings object.
+ public void AddPlatformsToAsset()
+ {
+ RuntimeSettings.Platforms.ForEach(AddPlatformToAsset);
+ }
+
+ private void AddPlatformToAsset(Platform platform)
+ {
+ if (!AssetDatabase.Contains(platform))
+ {
+ platform.name = "FMODStudioSettingsPlatform";
+ AssetDatabase.AddObjectToAsset(platform, RuntimeSettings);
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorSettings.cs.meta b/Assets/Plugins/FMOD/src/Editor/EditorSettings.cs.meta
new file mode 100644
index 0000000..4e19895
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c9e3e2137498d343a2e31906a12dec2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs b/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs
new file mode 100644
index 0000000..4a6e828
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs
@@ -0,0 +1,1862 @@
+#if UNITY_ADDRESSABLES_EXIST
+ // The Addressables package depends on the ScriptableBuildPipeline package
+ #define UNITY_SCRIPTABLEBUILDPIPELINE_EXIST
+#endif
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Build;
+#if UNITY_SCRIPTABLEBUILDPIPELINE_EXIST
+using UnityEditor.Build.Pipeline;
+#endif
+using UnityEditor.SceneManagement;
+using System.IO;
+using System.Text;
+using System.Net.Sockets;
+
+namespace FMODUnity
+{
+ public class EditorUtils : MonoBehaviour
+ {
+ public const string BuildFolder = "Build";
+
+ private static FMOD.Studio.System system;
+ private static FMOD.SPEAKERMODE speakerMode;
+ private static string encryptionKey;
+
+ private static List loadedPreviewBanks = new List();
+ private static FMOD.Studio.EventDescription previewEventDesc;
+ private static FMOD.Studio.EventInstance previewEventInstance;
+
+ private const int StudioScriptPort = 3663;
+ private static NetworkStream networkStream = null;
+ private static Socket socket = null;
+ private static IAsyncResult socketConnection = null;
+
+ public static void CheckResult(FMOD.RESULT result)
+ {
+ if (result != FMOD.RESULT.OK)
+ {
+ RuntimeUtils.DebugLogError(string.Format("FMOD Studio: Encountered Error: {0} {1}", result, FMOD.Error.String(result)));
+ }
+ }
+
+ public static void ValidateSource(out bool valid, out string reason)
+ {
+ valid = true;
+ reason = "";
+ var settings = Settings.Instance;
+ if (settings.HasSourceProject)
+ {
+ if (string.IsNullOrEmpty(settings.SourceProjectPath))
+ {
+ valid = false;
+ reason = "The FMOD Studio project path must be set to an .fspro file.";
+ return;
+ }
+ if (!File.Exists(settings.SourceProjectPath))
+ {
+ valid = false;
+ reason = string.Format("The FMOD Studio project path '{0}' does not exist.", settings.SourceProjectPath);
+ return;
+ }
+
+ string projectPath = settings.SourceProjectPath;
+ string projectFolder = Path.GetDirectoryName(projectPath);
+ string buildFolder = RuntimeUtils.GetCommonPlatformPath(Path.Combine(projectFolder, BuildFolder));
+ if (!Directory.Exists(buildFolder) ||
+ Directory.GetDirectories(buildFolder).Length == 0 ||
+ Directory.GetFiles(Directory.GetDirectories(buildFolder)[0], "*.bank", SearchOption.AllDirectories).Length == 0
+ )
+ {
+ valid = false;
+ reason = string.Format("The FMOD Studio project '{0}' does not contain any built banks. Please build your project in FMOD Studio.", settings.SourceProjectPath);
+ return;
+ }
+ }
+ else
+ {
+ if (String.IsNullOrEmpty(settings.SourceBankPath))
+ {
+ valid = false;
+ reason = "The build path has not been set.";
+ return;
+ }
+ if (!Directory.Exists(settings.SourceBankPath))
+ {
+ valid = false;
+ reason = string.Format("The build path '{0}' does not exist.", settings.SourceBankPath);
+ return;
+ }
+
+ if (settings.HasPlatforms)
+ {
+ if (Directory.GetDirectories(settings.SourceBankPath).Length == 0)
+ {
+ valid = false;
+ reason = string.Format("Build path '{0}' does not contain any platform sub-directories. Please check that the build path is correct.", settings.SourceBankPath);
+ return;
+ }
+ }
+ else
+ {
+ if (Directory.GetFiles(settings.SourceBankPath, "*.strings.bank").Length == 0)
+ {
+ valid = false;
+ reason = string.Format("Build path '{0}' does not contain any built banks.", settings.SourceBankPath);
+ return;
+ }
+ }
+ }
+ }
+
+ public static string[] GetBankPlatforms()
+ {
+ string buildFolder = Settings.Instance.SourceBankPath;
+ try
+ {
+ if (Directory.GetFiles(buildFolder, "*.bank").Length == 0)
+ {
+ string[] buildDirectories = Directory.GetDirectories(buildFolder);
+ string[] buildNames = new string[buildDirectories.Length];
+ for (int i = 0; i < buildDirectories.Length; i++)
+ {
+ buildNames[i] = Path.GetFileNameWithoutExtension(buildDirectories[i]);
+ }
+ return buildNames;
+ }
+ }
+ catch
+ {
+ }
+ return new string[0];
+ }
+
+ public static string VersionString(uint version)
+ {
+ uint major = (version & 0x00FF0000) >> 16;
+ uint minor = (version & 0x0000FF00) >> 8;
+ uint patch = (version & 0x000000FF);
+
+ return string.Format("{0:X1}.{1:X2}.{2:X2}", major, minor, patch);
+ }
+
+ public static string DurationString(float seconds)
+ {
+ float minutes = seconds / 60;
+ float hours = minutes / 60;
+
+ if (hours >= 1)
+ {
+ return Pluralize(Mathf.FloorToInt(hours), "hour", "hours");
+ }
+ else if (minutes >= 1)
+ {
+ return Pluralize(Mathf.FloorToInt(minutes), "minute", "minutes");
+ }
+ else if (seconds >= 1)
+ {
+ return Pluralize(Mathf.FloorToInt(seconds), "second", "seconds");
+ }
+ else
+ {
+ return "a moment";
+ }
+ }
+
+ public static string SeriesString(string separator, string finalSeparator, IEnumerable elements)
+ {
+ if (!elements.Any())
+ {
+ return string.Empty;
+ }
+ else if (!elements.Skip(1).Any())
+ {
+ return elements.First();
+ }
+ else
+ {
+ return string.Join(separator, elements.Take(elements.Count() - 1)) + finalSeparator + elements.Last();
+ }
+ }
+
+ public static string Pluralize(int count, string singular, string plural)
+ {
+ return string.Format("{0} {1}", count, (count == 1) ? singular : plural);
+ }
+
+ public static Texture2D LoadImage(string filename)
+ {
+ Texture2D texture = EditorGUIUtility.Load($"Assets/{RuntimeUtils.PluginBasePath}/images/{filename}") as Texture2D;
+
+ if (texture == null)
+ {
+ texture = EditorGUIUtility.Load($"Assets/Editor Default Resources/FMOD/{filename}") as Texture2D;
+ }
+
+ return texture;
+ }
+
+ public static string GameObjectPath(Component component, GameObject root = null)
+ {
+ Transform transform = component.transform;
+
+ StringBuilder objectPath = new StringBuilder();
+
+ while(transform != null && transform.gameObject != root)
+ {
+ if (objectPath.Length > 0)
+ {
+ objectPath.Insert(0, "/");
+ }
+
+ objectPath.Insert(0, transform.name);
+
+ transform = transform.parent;
+ }
+
+ return objectPath.ToString();
+ }
+
+ public static bool HasAttribute(MemberInfo member)
+ where T : Attribute
+ {
+ Attribute[] attributes = Attribute.GetCustomAttributes(member, typeof(Attribute), true);
+
+ return attributes.Any(a => typeof(T).IsAssignableFrom(a.GetType()));
+ }
+
+ public static bool AssetExists(string path)
+ {
+ string fullPath = $"{Environment.CurrentDirectory}/{path}";
+
+ // We check that the file or directory exists as well because recently deleted assets remain in the database
+ return !string.IsNullOrEmpty(AssetDatabase.AssetPathToGUID(path))
+ && (File.Exists(fullPath) || Directory.Exists(fullPath));
+ }
+
+ public static void EnsureFolderExists(string folderPath)
+ {
+ if (!AssetDatabase.IsValidFolder(folderPath))
+ {
+ string parentFolder = GetParentFolder(folderPath);
+
+ EnsureFolderExists(parentFolder);
+
+ string folderName = Path.GetFileName(folderPath);
+
+ AssetDatabase.CreateFolder(parentFolder, folderName);
+ }
+ }
+
+ // Path.GetDirectoryName replaces '/' with '\\' in some scripting runtime versions,
+ // so we have to roll our own.
+ public static string GetParentFolder(string assetPath)
+ {
+ int endIndex = assetPath.LastIndexOf('/');
+
+ return (endIndex > 0) ? assetPath.Substring(0, endIndex) : string.Empty;
+ }
+
+ public static void DrawLegacyEvent(SerializedProperty property, string migrationTarget)
+ {
+ // Display the legacy event field if it is not empty
+ if (!string.IsNullOrEmpty(property.stringValue))
+ {
+ EditorGUILayout.PropertyField(property, new GUIContent("Legacy Event"));
+
+ using (new EditorGUI.IndentLevelScope())
+ {
+ GUIContent content = new GUIContent(
+ string.Format("Will be migrated to {0}", migrationTarget),
+ EditorGUIUtility.IconContent("console.infoicon.sml").image);
+ GUIStyle style = new GUIStyle(GUI.skin.label) { richText = true };
+
+ Rect rect = EditorGUILayout.GetControlRect(false, style.CalcSize(content).y);
+ rect = EditorGUI.IndentedRect(rect);
+
+ GUI.Label(rect, content, style);
+ }
+ }
+ }
+
+ // Gets a control rect, draws a help button at the end of the line,
+ // and returns a rect describing the remaining space.
+ public static Rect DrawHelpButtonLayout(Func createContent)
+ {
+ Vector2 helpSize = GetHelpButtonSize();
+
+ Rect rect = EditorGUILayout.GetControlRect(true, helpSize.y);
+
+ return DrawHelpButton(rect, createContent);
+ }
+
+ public static Rect DrawHelpButton(Rect rect, Func createContent)
+ {
+ GUIContent content;
+ GUIStyle style;
+ GetHelpButtonData(out content, out style);
+
+ Vector2 helpSize = style.CalcSize(content);
+
+ Rect helpRect = rect;
+ helpRect.xMin = helpRect.xMax - helpSize.x;
+
+ if (GUI.Button(helpRect, content, style))
+ {
+ PopupWindow.Show(helpRect, createContent());
+ }
+
+ Rect remainderRect = rect;
+ remainderRect.xMax = helpRect.xMin;
+
+ return remainderRect;
+ }
+
+ public static float DrawParameterValueLayout(float value, EditorParamRef paramRef)
+ {
+ if (paramRef.Type == ParameterType.Labeled)
+ {
+ return EditorGUILayout.Popup((int)value, paramRef.Labels);
+ }
+ else if (paramRef.Type == ParameterType.Discrete)
+ {
+ return EditorGUILayout.IntSlider((int)value, (int)paramRef.Min, (int)paramRef.Max);
+ }
+ else
+ {
+ return EditorGUILayout.Slider(value, paramRef.Min, paramRef.Max);
+ }
+ }
+
+ public static Vector2 GetHelpButtonSize()
+ {
+ GUIContent content;
+ GUIStyle style;
+ GetHelpButtonData(out content, out style);
+
+ return style.CalcSize(content);
+ }
+
+ private static void GetHelpButtonData(out GUIContent content, out GUIStyle style)
+ {
+ content = EditorGUIUtility.IconContent("_Help");
+ style = GUI.skin.label;
+ }
+
+#if !FMOD_STORE_UPLOAD
+ [InitializeOnLoadMethod]
+#endif
+ private static void Startup()
+ {
+ EditorApplication.update += Update;
+ AssemblyReloadEvents.beforeAssemblyReload += HandleBeforeAssemblyReload;
+ EditorApplication.playModeStateChanged += HandleOnPlayModeChanged;
+ EditorApplication.pauseStateChanged += HandleOnPausedModeChanged;
+
+ if (Application.isBatchMode)
+ {
+ BuildStatusWatcher.Startup();
+ }
+ else
+ {
+ EditorApplication.update += CallStartupMethodsWhenReady;
+ }
+ }
+
+ private static void HandleBeforeAssemblyReload()
+ {
+ DestroySystem();
+ }
+
+ private static void HandleOnPausedModeChanged(PauseState state)
+ {
+ if (RuntimeManager.IsInitialized && RuntimeManager.HaveMasterBanksLoaded)
+ {
+ RuntimeManager.GetBus("bus:/").setPaused(EditorApplication.isPaused);
+ RuntimeManager.StudioSystem.update();
+ }
+ }
+
+ private static void HandleOnPlayModeChanged(PlayModeStateChange state)
+ {
+ // Entering Play Mode will cause scripts to reload, losing all state
+ // This is the last chance to clean up FMOD and avoid a leak.
+ if (state == PlayModeStateChange.ExitingEditMode)
+ {
+ DestroySystem();
+ }
+ }
+
+ private static void Update()
+ {
+ // Update the editor system
+ if (system.isValid())
+ {
+ CheckResult(system.update());
+
+ if (speakerMode != Settings.Instance.PlayInEditorPlatform.SpeakerMode)
+ {
+ RecreateSystem();
+ }
+
+ if (encryptionKey != Settings.Instance.EncryptionKey)
+ {
+ RecreateSystem();
+ }
+ }
+
+ for (int i = 0; i < previewEventInstances.Count; i++)
+ {
+ var instance = previewEventInstances[i];
+ if (instance.isValid())
+ {
+ FMOD.Studio.PLAYBACK_STATE state;
+ instance.getPlaybackState(out state);
+ if (state == FMOD.Studio.PLAYBACK_STATE.STOPPED)
+ {
+ PreviewStop(instance);
+ i--;
+ }
+ }
+ }
+ }
+
+ private static void CallStartupMethodsWhenReady()
+ {
+ if (EditorApplication.isUpdating)
+ {
+ // Some startup code accesses Settings.Instance; this can obliterate settings if
+ // the asset database is being updated, so wait until the update is finished.
+ return;
+ }
+
+ EditorApplication.update -= CallStartupMethodsWhenReady;
+
+ // Explicitly initialize Settings so that both it and EditorSettings will work.
+ Settings.Initialize();
+ Settings.EditorSettings.CheckActiveBuildTarget();
+
+ CheckBaseFolderGUID();
+ CheckMacLibraries();
+
+ Legacy.CleanTemporaryChanges();
+ CleanObsoleteFiles();
+
+#if UNITY_TIMELINE_EXIST
+ // Register timeline event receivers.
+ FMODEventPlayableBehavior.Enter += (sender, args) =>
+ {
+ FMODEventPlayableBehavior behavior = sender as FMODEventPlayableBehavior;
+ if (!string.IsNullOrEmpty(behavior.EventReference.Path))
+ {
+ LoadPreviewBanks();
+ EditorEventRef eventRef = EventManager.EventFromPath(behavior.EventReference.Path);
+ Dictionary paramValues = new Dictionary();
+ foreach (EditorParamRef param in eventRef.Parameters)
+ {
+ paramValues.Add(param.Name, param.Default);
+ }
+ foreach (ParamRef param in behavior.Parameters)
+ {
+ paramValues[param.Name] = param.Value;
+ }
+
+ args.eventInstance = PreviewEvent(eventRef, paramValues, behavior.CurrentVolume, behavior.ClipStartTime);
+ }
+ };
+
+ FMODEventPlayableBehavior.Exit += (sender, args) =>
+ {
+ FMODEventPlayableBehavior behavior = sender as FMODEventPlayableBehavior;
+ if (behavior.StopType != STOP_MODE.None)
+ {
+ FMOD.Studio.STOP_MODE stopType = behavior.StopType == STOP_MODE.Immediate ? FMOD.Studio.STOP_MODE.IMMEDIATE : FMOD.Studio.STOP_MODE.ALLOWFADEOUT;
+ PreviewStop(args.eventInstance, stopType);
+ }
+ };
+
+ FMODEventPlayableBehavior.GraphStop += (sender, args) =>
+ {
+ PreviewStop(args.eventInstance);
+ };
+
+ FMODEventPlayable.OnCreatePlayable += (sender, args) =>
+ {
+ FMODEventPlayable playable = sender as FMODEventPlayable;
+ if (playable.Parameters.Length > 0 || playable.Template.ParameterLinks.Count > 0)
+ {
+ LoadPreviewBanks();
+ FMOD.Studio.EventDescription eventDescription;
+ system.getEventByID(playable.EventReference.Guid, out eventDescription);
+ playable.LinkParameters(eventDescription);
+ }
+ };
+#endif
+
+ BuildStatusWatcher.Startup();
+ BankRefresher.Startup();
+ BoltIntegration.Startup();
+ EventManager.Startup();
+ SetupWizardWindow.Startup();
+ }
+
+ private static void RecreateSystem()
+ {
+ StopAllPreviews();
+ DestroySystem();
+ CreateSystem();
+ }
+
+ private static void DestroySystem()
+ {
+ if (system.isValid())
+ {
+ RuntimeUtils.DebugLog("FMOD Studio: Destroying editor system instance");
+ UnloadPreviewBanks();
+ system.release();
+ system.clearHandle();
+ }
+ }
+
+ private static void CreateSystem()
+ {
+ RuntimeUtils.DebugLog("FMOD Studio: Creating editor system instance");
+ RuntimeUtils.EnforceLibraryOrder();
+
+ FMOD.RESULT result = FMOD.Debug.Initialize(FMOD.DEBUG_FLAGS.LOG, FMOD.DEBUG_MODE.FILE, null, "fmod_editor.log");
+ if (result != FMOD.RESULT.OK)
+ {
+ RuntimeUtils.DebugLogWarning("FMOD Studio: Cannot open fmod_editor.log. Logging will be disabled for importing and previewing");
+ }
+
+ CheckResult(FMOD.Studio.System.create(out system));
+
+ FMOD.System lowlevel;
+ CheckResult(system.getCoreSystem(out lowlevel));
+
+ // Use play-in-editor speaker mode for event browser preview and metering
+ speakerMode = Settings.Instance.PlayInEditorPlatform.SpeakerMode;
+ CheckResult(lowlevel.setSoftwareFormat(0, speakerMode, 0));
+
+ encryptionKey = Settings.Instance.EncryptionKey;
+ if (!string.IsNullOrEmpty(encryptionKey))
+ {
+ FMOD.Studio.ADVANCEDSETTINGS studioAdvancedSettings = new FMOD.Studio.ADVANCEDSETTINGS();
+ CheckResult(system.setAdvancedSettings(studioAdvancedSettings, encryptionKey));
+ }
+
+ CheckResult(system.initialize(256, FMOD.Studio.INITFLAGS.ALLOW_MISSING_PLUGINS | FMOD.Studio.INITFLAGS.SYNCHRONOUS_UPDATE, FMOD.INITFLAGS.NORMAL, IntPtr.Zero));
+
+ FMOD.ChannelGroup master;
+ CheckResult(lowlevel.getMasterChannelGroup(out master));
+ FMOD.DSP masterHead;
+ CheckResult(master.getDSP(FMOD.CHANNELCONTROL_DSP_INDEX.HEAD, out masterHead));
+ CheckResult(masterHead.setMeteringEnabled(false, true));
+ }
+
+ public static void UpdateParamsOnEmitter(SerializedObject serializedObject, string path)
+ {
+ if (string.IsNullOrEmpty(path) || EventManager.EventFromPath(path) == null)
+ {
+ return;
+ }
+
+ var eventRef = EventManager.EventFromPath(path);
+ serializedObject.ApplyModifiedProperties();
+ if (serializedObject.isEditingMultipleObjects)
+ {
+ foreach (var obj in serializedObject.targetObjects)
+ {
+ UpdateParamsOnEmitter(obj, eventRef);
+ }
+ }
+ else
+ {
+ UpdateParamsOnEmitter(serializedObject.targetObject, eventRef);
+ }
+ serializedObject.Update();
+ }
+
+ private static void UpdateParamsOnEmitter(UnityEngine.Object obj, EditorEventRef eventRef)
+ {
+ var emitter = obj as StudioEventEmitter;
+ if (emitter == null)
+ {
+ // Custom game object
+ return;
+ }
+
+ for (int i = 0; i < emitter.Params.Length; i++)
+ {
+ if (!eventRef.LocalParameters.Exists((x) => x.Name == emitter.Params[i].Name))
+ {
+ int end = emitter.Params.Length - 1;
+ emitter.Params[i] = emitter.Params[end];
+ Array.Resize(ref emitter.Params, end);
+ i--;
+ }
+ }
+
+ emitter.OverrideAttenuation = false;
+ emitter.OverrideMinDistance = eventRef.MinDistance;
+ emitter.OverrideMaxDistance = eventRef.MaxDistance;
+ }
+
+ public static FMOD.Studio.System System
+ {
+ get
+ {
+ if (!system.isValid())
+ {
+ CreateSystem();
+ }
+ return system;
+ }
+ }
+
+ [MenuItem("FMOD/Help/Getting Started", priority = 2)]
+ private static void OnlineGettingStarted()
+ {
+ OpenOnlineDocumentation("unity", "user-guide");
+ }
+
+ [MenuItem("FMOD/Help/Integration Manual", priority = 3)]
+ public static void OnlineManual()
+ {
+ OpenOnlineDocumentation("unity");
+ }
+
+ [MenuItem("FMOD/Help/API Manual", priority = 4)]
+ private static void OnlineAPIDocs()
+ {
+ OpenOnlineDocumentation("api");
+ }
+
+ [MenuItem("FMOD/Help/Support Forum", priority = 16)]
+ private static void OnlineQA()
+ {
+ Application.OpenURL("https://qa.fmod.com/");
+ }
+
+ [MenuItem("FMOD/Help/Revision History", priority = 5)]
+ private static void OnlineRevisions()
+ {
+ OpenOnlineDocumentation("api", "welcome-revision-history");
+ }
+
+ public static void OpenOnlineDocumentation(string section, string page = null, string anchor = null)
+ {
+ const string Prefix = "https://fmod.com/docs/";
+ string version = string.Format("{0:X}.{1:X}", FMOD.VERSION.number >> 16, (FMOD.VERSION.number >> 8) & 0xFF);
+ string url;
+
+ if (!string.IsNullOrEmpty(page))
+ {
+ if (!string.IsNullOrEmpty(anchor))
+ {
+ url = string.Format("{0}/{1}/{2}/{3}.html#{4}", Prefix, version, section, page, anchor);
+ }
+ else
+ {
+ url = string.Format("{0}/{1}/{2}/{3}.html", Prefix, version, section, page);
+ }
+ }
+ else
+ {
+ url = string.Format("{0}/{1}/{2}", Prefix, version, section);
+ }
+
+ Application.OpenURL(url);
+ }
+
+ [MenuItem("FMOD/About Integration", priority = 7)]
+ public static void About()
+ {
+ FMOD.System lowlevel;
+ CheckResult(System.getCoreSystem(out lowlevel));
+
+ uint version;
+ CheckResult(lowlevel.getVersion(out version));
+
+ string text = string.Format(
+ "Version: {0}\n\nCopyright \u00A9 Firelight Technologies Pty, Ltd. 2014-2023 \n\n" +
+ "See LICENSE.TXT for additional license information.",
+ VersionString(version));
+
+ EditorUtility.DisplayDialog("FMOD Studio Unity Integration", text, "OK");
+ }
+
+ private static List previewEventInstances = new List();
+
+ public static bool PreviewBanksLoaded
+ {
+ get { return loadedPreviewBanks.Count > 0; }
+ }
+
+ public static void LoadPreviewBanks()
+ {
+ if (PreviewBanksLoaded)
+ {
+ return;
+ }
+
+ foreach (var bank in EventManager.Banks)
+ {
+ FMOD.Studio.Bank previewBank;
+ FMOD.RESULT result = System.loadBankFile(bank.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out previewBank);
+ if (result != FMOD.RESULT.ERR_EVENT_ALREADY_LOADED) // ignore error when a bank is already loaded, e.g. localized banks.
+ {
+ CheckResult(result);
+ }
+ loadedPreviewBanks.Add(previewBank);
+ }
+ }
+
+ public static void UnloadPreviewBanks()
+ {
+ if (!PreviewBanksLoaded)
+ {
+ return;
+ }
+
+ loadedPreviewBanks.ForEach(x => { x.unload(); x.clearHandle(); });
+ loadedPreviewBanks.Clear();
+ }
+
+ public static FMOD.Studio.EventInstance PreviewEvent(EditorEventRef eventRef, Dictionary previewParamValues, float volume = 1, float startTime = 0.0f)
+ {
+ FMOD.Studio.EventDescription eventDescription;
+ FMOD.Studio.EventInstance eventInstance;
+
+ CheckResult(System.getEventByID(eventRef.Guid, out eventDescription));
+ CheckResult(eventDescription.createInstance(out eventInstance));
+
+ foreach (EditorParamRef param in eventRef.Parameters)
+ {
+ FMOD.Studio.PARAMETER_DESCRIPTION paramDesc;
+ CheckResult(eventDescription.getParameterDescriptionByName(param.Name, out paramDesc));
+ param.ID = paramDesc.id;
+ if (param.IsGlobal)
+ {
+ CheckResult(System.setParameterByID(param.ID, previewParamValues[param.Name]));
+ }
+ else
+ {
+ CheckResult(eventInstance.setParameterByID(param.ID, previewParamValues[param.Name]));
+ }
+ }
+
+ CheckResult(eventInstance.setVolume(volume));
+ CheckResult(eventInstance.setTimelinePosition((int)(startTime * 1000.0f)));
+ CheckResult(eventInstance.start());
+
+ previewEventInstances.Add(eventInstance);
+
+ return eventInstance;
+ }
+
+ public static void PreviewPause(FMOD.Studio.EventInstance eventInstance)
+ {
+ if (eventInstance.isValid() && previewEventInstances.Contains(eventInstance))
+ {
+ bool paused;
+ CheckResult(eventInstance.getPaused(out paused));
+ CheckResult(eventInstance.setPaused(!paused));
+ }
+ }
+
+ public static void PreviewStop(FMOD.Studio.EventInstance eventInstance, FMOD.Studio.STOP_MODE stopMode = FMOD.Studio.STOP_MODE.IMMEDIATE)
+ {
+ if (previewEventInstances.Contains(eventInstance))
+ {
+ previewEventInstances.Remove(eventInstance);
+ if (eventInstance.isValid())
+ {
+ eventInstance.stop(stopMode);
+ eventInstance.release();
+ eventInstance.clearHandle();
+ }
+ }
+ }
+
+ public static void StopAllPreviews()
+ {
+ foreach (FMOD.Studio.EventInstance eventInstance in previewEventInstances)
+ {
+ PreviewStop(eventInstance);
+ }
+ }
+
+ public static float[] GetMetering()
+ {
+ FMOD.System lowlevel;
+ CheckResult(System.getCoreSystem(out lowlevel));
+ FMOD.ChannelGroup master;
+ CheckResult(lowlevel.getMasterChannelGroup(out master));
+ FMOD.DSP masterHead;
+ CheckResult(master.getDSP(FMOD.CHANNELCONTROL_DSP_INDEX.HEAD, out masterHead));
+
+ FMOD.DSP_METERING_INFO outputMetering;
+ CheckResult(masterHead.getMeteringInfo(IntPtr.Zero, out outputMetering));
+
+ FMOD.SPEAKERMODE mode;
+ int rate, raw;
+ lowlevel.getSoftwareFormat(out rate, out mode, out raw);
+ int channels;
+ lowlevel.getSpeakerModeChannels(mode, out channels);
+
+ float[] data = new float[channels];
+ if (outputMetering.numchannels > 0)
+ {
+ Array.Copy(outputMetering.rmslevel, data, channels);
+ }
+ return data;
+ }
+
+ private static NetworkStream ScriptStream
+ {
+ get
+ {
+ if (networkStream == null)
+ {
+ try
+ {
+ if (socket == null)
+ {
+ socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ }
+
+ if (!socket.Connected)
+ {
+ socketConnection = socket.BeginConnect("127.0.0.1", StudioScriptPort, null, null);
+ socketConnection.AsyncWaitHandle.WaitOne();
+ socket.EndConnect(socketConnection);
+ socketConnection = null;
+ }
+
+ networkStream = new NetworkStream(socket);
+
+ byte[] headerBytes = new byte[128];
+ int read = ScriptStream.Read(headerBytes, 0, 128);
+ string header = Encoding.UTF8.GetString(headerBytes, 0, read - 1);
+ if (header.StartsWith("log():"))
+ {
+ RuntimeUtils.DebugLog("FMOD Studio: Script Client returned " + header.Substring(6));
+ }
+ }
+ catch (Exception e)
+ {
+ RuntimeUtils.DebugLog("FMOD Studio: Script Client failed to connect - Check FMOD Studio is running");
+
+ socketConnection = null;
+ socket = null;
+ networkStream = null;
+
+ throw e;
+ }
+ }
+ return networkStream;
+ }
+ }
+
+ private static void AsyncConnectCallback(IAsyncResult result)
+ {
+ try
+ {
+ socket.EndConnect(result);
+ }
+ catch (Exception)
+ {
+ }
+ finally
+ {
+ socketConnection = null;
+ }
+ }
+
+ public static bool IsConnectedToStudio()
+ {
+ try
+ {
+ if (socket != null && socket.Connected)
+ {
+ if (SendScriptCommand("true"))
+ {
+ return true;
+ }
+ }
+
+ if (socketConnection == null)
+ {
+ socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ socketConnection = socket.BeginConnect("127.0.0.1", StudioScriptPort, AsyncConnectCallback, null);
+ }
+
+ return false;
+
+ }
+ catch(Exception e)
+ {
+ RuntimeUtils.DebugLogException(e);
+ return false;
+ }
+ }
+
+ public static bool SendScriptCommand(string command)
+ {
+ byte[] commandBytes = Encoding.UTF8.GetBytes(command);
+ try
+ {
+ ScriptStream.Write(commandBytes, 0, commandBytes.Length);
+ byte[] commandReturnBytes = new byte[128];
+ int read = ScriptStream.Read(commandReturnBytes, 0, 128);
+ string result = Encoding.UTF8.GetString(commandReturnBytes, 0, read - 1);
+ return (result.Contains("true"));
+ }
+ catch (Exception)
+ {
+ if (networkStream != null)
+ {
+ networkStream.Close();
+ networkStream = null;
+ }
+ return false;
+ }
+ }
+
+
+ public static string GetScriptOutput(string command)
+ {
+ byte[] commandBytes = Encoding.UTF8.GetBytes(command);
+ try
+ {
+ ScriptStream.Write(commandBytes, 0, commandBytes.Length);
+ byte[] commandReturnBytes = new byte[2048];
+ int read = ScriptStream.Read(commandReturnBytes, 0, commandReturnBytes.Length);
+ string result = Encoding.UTF8.GetString(commandReturnBytes, 0, read - 1);
+ if (result.StartsWith("out():"))
+ {
+ return result.Substring(6).Trim();
+ }
+ return null;
+ }
+ catch (Exception)
+ {
+ networkStream.Close();
+ networkStream = null;
+ return null;
+ }
+ }
+
+ private static string GetMasterBank()
+ {
+ GetScriptOutput(string.Format("masterBankFolder = studio.project.workspace.masterBankFolder;"));
+ string bankCountString = GetScriptOutput(string.Format("masterBankFolder.items.length;"));
+ int bankCount = int.Parse(bankCountString);
+ for (int i = 0; i < bankCount; i++)
+ {
+ string isMaster = GetScriptOutput(string.Format("masterBankFolder.items[{1}].isOfExactType(\"MasterBank\");", i));
+ if (isMaster == "true")
+ {
+ string guid = GetScriptOutput(string.Format("masterBankFolder.items[{1}].id;", i));
+ return guid;
+ }
+ }
+ return "";
+ }
+
+ private static bool CheckForNameConflict(string folderGuid, string eventName)
+ {
+ const string checkForNameConflictFunc =
+ @"function(folderGuid, eventName) {
+ var nameConflict = false;
+ studio.project.lookup(folderGuid).items.forEach(function(val) {
+ nameConflict |= val.name == eventName;
+ });
+ return nameConflict;
+ }";
+
+ string conflictBool = GetScriptOutput(string.Format("({0})(\"{1}\", \"{2}\")", checkForNameConflictFunc, folderGuid, eventName));
+ return conflictBool == "1";
+ }
+
+ public static string CreateStudioEvent(string eventPath, string eventName)
+ {
+ var folders = eventPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
+ string folderGuid = GetScriptOutput("studio.project.workspace.masterEventFolder.id;");
+
+ const string getFolderGuidFunc =
+ @"function(parentGuid, folderName) {
+ folderGuid = """";
+ studio.project.lookup(parentGuid).items.forEach(function(val) {
+ folderGuid = val.isOfType(""EventFolder"") && val.name == folderName ? val.id : folderGuid;
+ });
+ if (folderGuid == """")
+ {
+ var newFolder = studio.project.create(""EventFolder"");
+ newFolder.name = folderName;
+ newFolder.folder = studio.project.lookup(parentGuid);
+ folderGuid = newFolder.id;
+ }
+ return folderGuid;
+ }";
+
+ for (int i = 0; i < folders.Length; i++)
+ {
+ string parentGuid = folderGuid;
+ folderGuid = GetScriptOutput(string.Format("({0})(\"{1}\", \"{2}\")", getFolderGuidFunc, parentGuid, folders[i]));
+ }
+
+ if (CheckForNameConflict(folderGuid, eventName))
+ {
+ EditorUtility.DisplayDialog("Name Conflict", string.Format("The event {0} already exists under {1}", eventName, eventPath), "OK");
+ return null;
+ }
+
+ const string createEventFunc =
+ @"function(eventName, folderGuid) {
+ event = studio.project.create(""Event"");
+ event.note = ""Placeholder created via Unity"";
+ event.name = eventName;
+ event.folder = studio.project.lookup(folderGuid);
+
+ track = studio.project.create(""GroupTrack"");
+ track.mixerGroup.output = event.mixer.masterBus;
+ track.mixerGroup.name = ""Audio 1"";
+ event.relationships.groupTracks.add(track);
+
+ tag = studio.project.create(""Tag"");
+ tag.name = ""placeholder"";
+ tag.folder = studio.project.workspace.masterTagFolder;
+ event.relationships.tags.add(tag);
+
+ return event.id;
+ }";
+
+ string eventGuid = GetScriptOutput(string.Format("({0})(\"{1}\", \"{2}\")", createEventFunc, eventName, folderGuid));
+ return eventGuid;
+ }
+
+ // The FMOD base folder needs to have a known GUID so that we can find it
+ // if it has been moved, and so that platform specific integration packages can
+ // be installed correctly.
+ //
+ // However, old FMOD packages didn't specify a GUID for the base folder, meaning Unity
+ // would generate a new one. If this is the case, we need to patch the metadata with
+ // the correct GUID.
+ private static void CheckBaseFolderGUID()
+ {
+ if (string.IsNullOrEmpty(AssetDatabase.GUIDToAssetPath(RuntimeUtils.BaseFolderGUID)))
+ {
+ string folderPath = $"Assets/{RuntimeUtils.PluginBasePathDefault}";
+
+ if (!Directory.Exists(folderPath))
+ {
+ Debug.LogErrorFormat("FMOD: Couldn't find base folder by GUID ({0}) or path ({1})",
+ RuntimeUtils.BaseFolderGUID, RuntimeUtils.PluginBasePathDefault);
+ return;
+ }
+
+ const string DialogTitle = "Update FMOD Folder Metadata";
+
+ bool update = EditorUtility.DisplayDialog(DialogTitle,
+ $"The metadata for the {folderPath} folder needs to be updated"
+ + " so that FMOD can locate required files.\n\n"
+ + "After this change you may move the FMOD folder to any location within your project.",
+ "Update Metadata", "Ignore");
+
+ while (update)
+ {
+ string error = ReplaceMetaFileGUID(folderPath, RuntimeUtils.BaseFolderGUID);
+
+ if (error == null)
+ {
+ return;
+ }
+
+ update = EditorUtility.DisplayDialog(DialogTitle,
+ $"Error updating metadata for {folderPath}:\n\n{error}\n\nDo you want to try again?",
+ "Try Again", "Ignore");
+ }
+ }
+ }
+
+ private static string ReplaceMetaFileGUID(string assetPath, string newGUID)
+ {
+ try
+ {
+ string filePath = $"{assetPath}.meta";
+
+ if (!AssetDatabase.MakeEditable(filePath))
+ {
+ return $"Failed to open {filePath} for editing";
+ }
+
+ string[] lines = File.ReadAllLines(filePath);
+
+ const string GuidPrefix = "guid:";
+ bool guidReplaced = false;
+
+ using (StreamWriter stream = File.CreateText(filePath))
+ {
+ foreach (string line in lines)
+ {
+ if (!guidReplaced && line.StartsWith(GuidPrefix))
+ {
+ guidReplaced = true;
+ stream.WriteLine($"{GuidPrefix} {newGUID}");
+ }
+ else
+ {
+ stream.WriteLine(line);
+ }
+ }
+ }
+
+ if (!guidReplaced)
+ {
+ return $"Couldn't find a line starting with '{GuidPrefix}' in {filePath}";
+ }
+
+ Debug.LogFormat("FMOD: Updated the GUID for {0} to {1}", assetPath, newGUID);
+
+ AssetDatabase.ImportAsset(assetPath);
+
+ return null;
+ }
+ catch (Exception e)
+ {
+ Debug.LogWarningFormat("FMOD: Failed to update the GUID for {0}: {1}", assetPath, e.Message);
+
+ return e.Message;
+ }
+ }
+
+ private static void CheckMacLibraries()
+ {
+ Platform platformMac = EditorSettings.Instance.GetPlatform(BuildTarget.StandaloneOSX);
+
+ IEnumerable allLibraries = platformMac.GetBuildTargets()
+ .SelectMany(t => platformMac.GetBinaryAssetPaths(t, Platform.BinaryType.All))
+ .Distinct();
+
+ List librariesToRepair = allLibraries.Where(path => {
+ string infoPlistPath = $"{path}/Contents/Info.plist";
+
+ if (File.Exists(infoPlistPath))
+ {
+ string contents = File.ReadAllText(infoPlistPath);
+
+ return contents.Contains("\r\n");
+ }
+
+ return false;
+ })
+ .ToList();
+
+ if (!librariesToRepair.Any())
+ {
+ return;
+ }
+
+ librariesToRepair.Sort();
+
+ const string DialogTitle = "Repair FMOD Libraries";
+
+ bool repair = EditorUtility.DisplayDialog(DialogTitle,
+ "The following FMOD libraries contain incorrect line endings, and need to be repaired:\n\n" +
+ $"{string.Join("\n", librariesToRepair)}\n\n" +
+ "Do you want to repair them now?", "Repair", "Ignore");
+
+ while (repair)
+ {
+ try
+ {
+ RepairMacLibraries(librariesToRepair);
+ repair = false;
+ }
+ catch (Exception e)
+ {
+ repair = EditorUtility.DisplayDialog(DialogTitle,
+ $"Error repairing FMOD libraries:\n\n{e.Message}\n\nDo you want to try again?",
+ "Try Again", "Ignore");
+ }
+ }
+ }
+
+ private static void RepairMacLibraries(IEnumerable paths)
+ {
+ foreach (string path in paths)
+ {
+ string infoPlistPath = $"{path}/Contents/Info.plist";
+
+ if (!AssetDatabase.MakeEditable(infoPlistPath))
+ {
+ throw new Exception($"Failed to open {infoPlistPath} for editing");
+ }
+
+ string contents = File.ReadAllText(infoPlistPath);
+ contents = contents.Replace("\r\n", "\n");
+
+ File.WriteAllText(infoPlistPath, contents);
+
+ Debug.LogFormat("FMOD: Replaced CRLF line endings with LF in {0}", infoPlistPath);
+ }
+ }
+
+ private static void CleanObsoleteFiles()
+ {
+ if (Environment.GetCommandLineArgs().Any(a => a == "-exportPackage"))
+ {
+ // Don't delete anything or it won't be included in the package
+ return;
+ }
+ if (EditorApplication.isPlayingOrWillChangePlaymode)
+ {
+ // Messing with the asset database while entering play mode causes a NullReferenceException
+ return;
+ }
+
+ string obsoleteFolder = $"Assets/{RuntimeUtils.PluginBasePath}/obsolete";
+
+ if (AssetDatabase.IsValidFolder(obsoleteFolder))
+ {
+ EditorApplication.LockReloadAssemblies();
+
+ string[] guids = AssetDatabase.FindAssets(string.Empty, new string[] { obsoleteFolder });
+ foreach (string guid in guids)
+ {
+ string path = AssetDatabase.GUIDToAssetPath(guid);
+ if (AssetDatabase.DeleteAsset(path))
+ {
+ RuntimeUtils.DebugLogFormat("FMOD: Removed obsolete file {0}", path);
+ }
+ }
+ if(AssetDatabase.MoveAssetToTrash(obsoleteFolder))
+ {
+ RuntimeUtils.DebugLogFormat("FMOD: Removed obsolete folder {0}", obsoleteFolder);
+ }
+ AssetDatabase.Refresh();
+ EditorApplication.UnlockReloadAssemblies();
+ }
+ }
+ }
+
+ public class StagingSystem
+ {
+ private static string PlatformsFolder => $"Assets/{RuntimeUtils.PluginBasePath}/platforms";
+ private static string StagingFolder => $"Assets/{RuntimeUtils.PluginBasePath}/staging";
+ private const string AnyCPU = "AnyCPU";
+
+ private static readonly LibInfo[] LibrariesToUpdate = {
+ new LibInfo() {cpu = "x86", os = "Windows", lib = "fmodstudioL.dll", platform = "win", buildTarget = BuildTarget.StandaloneWindows},
+ new LibInfo() {cpu = "x86_64", os = "Windows", lib = "fmodstudioL.dll", platform = "win", buildTarget = BuildTarget.StandaloneWindows64},
+ new LibInfo() {cpu = "x86_64", os = "Linux", lib = "libfmodstudioL.so", platform = "linux", buildTarget = BuildTarget.StandaloneLinux64},
+ new LibInfo() {cpu = AnyCPU, os = "OSX", lib = "fmodstudioL.bundle", platform = "mac", buildTarget = BuildTarget.StandaloneOSX},
+ };
+
+ public static bool SourceLibsExist
+ {
+ get
+ {
+ return LibrariesToUpdate.Any((info) =>
+ {
+ string sourcePath = GetSourcePath(info);
+
+ if (sourcePath != null)
+ {
+ return AssetImporter.GetAtPath(sourcePath) as PluginImporter != null;
+ }
+ else
+ {
+ return false;
+ }
+ });
+ }
+ }
+
+ private struct LibInfo
+ {
+ public string cpu;
+ public string os;
+ public string lib;
+ public string platform;
+ public BuildTarget buildTarget;
+ };
+
+ private static string GetTargetPath(LibInfo libInfo)
+ {
+ foreach (Platform.FileLayout layout in Platform.OldFileLayouts)
+ {
+ string path = GetTargetPath(libInfo, layout);
+
+ if (EditorUtils.AssetExists(path))
+ {
+ return path;
+ }
+ }
+
+ return null;
+ }
+
+ private static string GetTargetPath(LibInfo libInfo, Platform.FileLayout layout)
+ {
+ switch (layout)
+ {
+ case Platform.FileLayout.Release_1_10:
+ return $"Assets/Plugins/{CPUAndLibPath(libInfo)}";
+ case Platform.FileLayout.Release_2_0:
+ return $"Assets/Plugins/FMOD/lib/{libInfo.platform}/{CPUAndLibPath(libInfo)}";
+ case Platform.FileLayout.Release_2_1:
+ case Platform.FileLayout.Release_2_2:
+ return $"{PlatformsFolder}/{libInfo.platform}/lib/{CPUAndLibPath(libInfo)}";
+ default:
+ throw new ArgumentException("Unrecognised file layout: " + layout);
+ }
+ }
+
+ private static string CPUAndLibPath(LibInfo libInfo)
+ {
+ return (libInfo.cpu == AnyCPU) ? libInfo.lib : $"{libInfo.cpu}/{libInfo.lib}";
+ }
+
+ private static string GetSourcePath(LibInfo libInfo)
+ {
+ return $"{StagingFolder}/{libInfo.platform}/lib/{CPUAndLibPath(libInfo)}";
+ }
+
+ public class UpdateStep
+ {
+ internal Settings.SharedLibraryUpdateStages Stage;
+ public string Name;
+ public string Description;
+ public string Details;
+ public Action Execute;
+
+ public void CacheDetails()
+ {
+ Details = GetDetails();
+ }
+
+ private Func GetDetails;
+
+ internal static UpdateStep Create(Settings.SharedLibraryUpdateStages stage, string name, string description,
+ Func details, Action execute)
+ {
+ return new UpdateStep() {
+ Stage = stage,
+ Name = name,
+ Description = description,
+ GetDetails = details,
+ Execute = execute,
+ };
+ }
+ }
+
+ public static readonly UpdateStep[] UpdateSteps = {
+ UpdateStep.Create(
+ stage: Settings.SharedLibraryUpdateStages.DisableExistingLibraries,
+ name: "Disable Existing Native Libraries",
+ description: "Disable the existing FMOD native libraries so that Unity will not load them " +
+ "at startup time.",
+ details: () => {
+ IEnumerable importers =
+ LibrariesToUpdate.Select(GetPluginImporter).Where(p => p != null);
+
+ if (!importers.Any())
+ {
+ return string.Empty;
+ }
+
+ IEnumerable paths = importers.Select(p => $"\n* {p.assetPath}");
+
+ return $"This will disable these native libraries:{string.Join(string.Empty, paths)}";
+ },
+ execute: () => {
+ foreach (LibInfo libInfo in LibrariesToUpdate)
+ {
+ PluginImporter pluginImporter = GetPluginImporter(libInfo);
+ if (pluginImporter != null && pluginImporter.GetCompatibleWithEditor())
+ {
+ pluginImporter.SetCompatibleWithEditor(false);
+ pluginImporter.SetCompatibleWithAnyPlatform(false);
+ EditorUtility.SetDirty(pluginImporter);
+ pluginImporter.SaveAndReimport();
+ }
+ }
+
+ Settings.Instance.SharedLibraryUpdateStage = Settings.SharedLibraryUpdateStages.RestartUnity;
+ Settings.Instance.SharedLibraryTimeSinceStart = EditorApplication.timeSinceStartup;
+ EditorUtility.SetDirty(Settings.Instance);
+ }
+ ),
+
+ UpdateStep.Create(
+ stage: Settings.SharedLibraryUpdateStages.RestartUnity,
+ name: "Restart Unity",
+ description: "Restart Unity so that it releases its lock on the existing FMOD native libraries.",
+ details: () => {
+ return "This will restart Unity. You will be prompted to save your work if you have unsaved " +
+ "scene modifications.";
+ },
+ execute: () => {
+ if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
+ {
+ EditorApplication.OpenProject(Environment.CurrentDirectory);
+ }
+ }
+ ),
+
+ UpdateStep.Create(
+ stage: Settings.SharedLibraryUpdateStages.CopyNewLibraries,
+ name: "Copy New Native Libraries",
+ description: "Copy the new FMOD native libraries to the correct location and enable them.",
+ details: () => {
+ List actions = new List();
+
+ foreach (LibInfo libInfo in LibrariesToUpdate)
+ {
+ string sourcePath = GetSourcePath(libInfo);
+ string targetPath = GetTargetPath(libInfo);
+
+ if (EditorUtils.AssetExists(sourcePath))
+ {
+ if (targetPath != null)
+ {
+ actions.Add($"Delete {targetPath}");
+ }
+
+ targetPath = GetTargetPath(libInfo, Platform.FileLayout.Latest);
+
+ actions.Add($"Copy {sourcePath} to {targetPath}");
+ }
+
+ if (targetPath != null)
+ {
+ actions.Add($"Enable {targetPath}");
+ }
+ }
+
+ actions.Add($"Remove {StagingFolder}");
+
+ return $"This will do the following:\n* {string.Join("\n* ", actions)}";
+ },
+ execute: () => {
+ bool allCopiesSucceeded = true;
+
+ foreach (LibInfo libInfo in LibrariesToUpdate)
+ {
+ string sourcePath = GetSourcePath(libInfo);
+ string targetPath = GetTargetPath(libInfo);
+
+ if (EditorUtils.AssetExists(sourcePath))
+ {
+ if (targetPath != null)
+ {
+ if (!AssetDatabase.DeleteAsset(targetPath))
+ {
+ RuntimeUtils.DebugLogError(string.Format("FMOD: Could not delete {0}", targetPath));
+ }
+ }
+
+ targetPath = GetTargetPath(libInfo, Platform.FileLayout.Latest);
+
+ EditorUtils.EnsureFolderExists(EditorUtils.GetParentFolder(targetPath));
+
+ if (!AssetDatabase.CopyAsset(sourcePath, targetPath))
+ {
+ RuntimeUtils.DebugLogError(string.Format("FMOD: Could not copy {0} to {1}", sourcePath, targetPath));
+ allCopiesSucceeded = false;
+ }
+ }
+
+ PluginImporter pluginImporter = AssetImporter.GetAtPath(targetPath) as PluginImporter;
+
+ if (pluginImporter != null)
+ {
+ pluginImporter.ClearSettings();
+ pluginImporter.SetCompatibleWithEditor(true);
+ pluginImporter.SetCompatibleWithAnyPlatform(false);
+ pluginImporter.SetCompatibleWithPlatform(libInfo.buildTarget, true);
+ pluginImporter.SetEditorData("CPU", libInfo.cpu);
+ pluginImporter.SetEditorData("OS", libInfo.os);
+ EditorUtility.SetDirty(pluginImporter);
+ pluginImporter.SaveAndReimport();
+ }
+ }
+
+ if (allCopiesSucceeded)
+ {
+ if (AssetDatabase.MoveAssetToTrash(StagingFolder))
+ {
+ RuntimeUtils.DebugLogFormat("FMOD: Removed staging folder {0}", StagingFolder);
+ }
+ else
+ {
+ RuntimeUtils.DebugLogError(string.Format("FMOD: Could not remove staging folder {0}", StagingFolder));
+ }
+ }
+
+ ResetUpdateStage();
+
+ // This is so that Unity finds the new libraries
+ EditorUtility.RequestScriptReload();
+ }
+ ),
+ };
+
+ private static PluginImporter GetPluginImporter(LibInfo libInfo)
+ {
+ string targetPath = GetTargetPath(libInfo);
+
+ if (targetPath != null)
+ {
+ return AssetImporter.GetAtPath(targetPath) as PluginImporter;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private static UpdateStep FindUpdateStep(Settings.SharedLibraryUpdateStages stage)
+ {
+ return UpdateSteps.FirstOrDefault(s => s.Stage == stage);
+ }
+
+ private static void ResetUpdateStage()
+ {
+ if (Settings.Instance.SharedLibraryUpdateStage != Settings.SharedLibraryUpdateStages.Start ||
+ Settings.Instance.SharedLibraryTimeSinceStart != 0)
+ {
+ Settings.Instance.SharedLibraryUpdateStage = Settings.SharedLibraryUpdateStages.Start;
+ Settings.Instance.SharedLibraryTimeSinceStart = 0;
+ EditorUtility.SetDirty(Settings.Instance);
+ }
+ }
+
+ public static UpdateStep Startup()
+ {
+ if (!AssetDatabase.IsValidFolder(StagingFolder))
+ {
+ ResetUpdateStage();
+ return null;
+ }
+
+ if (Settings.Instance.SharedLibraryUpdateStage == Settings.SharedLibraryUpdateStages.Start)
+ {
+ bool targetLibsExist = LibrariesToUpdate.Any(info => GetPluginImporter(info) != null);
+
+ if (targetLibsExist)
+ {
+ Settings.Instance.SharedLibraryUpdateStage = Settings.SharedLibraryUpdateStages.DisableExistingLibraries;
+ EditorUtility.SetDirty(Settings.Instance);
+ }
+ else
+ {
+ FindUpdateStep(Settings.SharedLibraryUpdateStages.CopyNewLibraries).Execute();
+
+ ResetUpdateStage();
+ return null;
+ }
+ }
+
+ if (Settings.Instance.SharedLibraryUpdateStage == Settings.SharedLibraryUpdateStages.RestartUnity
+ && EditorApplication.timeSinceStartup < Settings.Instance.SharedLibraryTimeSinceStart)
+ {
+ // Unity has been restarted
+ Settings.Instance.SharedLibraryUpdateStage = Settings.SharedLibraryUpdateStages.CopyNewLibraries;
+ EditorUtility.SetDirty(Settings.Instance);
+ }
+
+ return GetNextUpdateStep();
+ }
+
+ public static UpdateStep GetNextUpdateStep()
+ {
+ UpdateStep step = FindUpdateStep(Settings.Instance.SharedLibraryUpdateStage);
+
+ if (step != null)
+ {
+ step.CacheDetails();
+ }
+
+ return step;
+ }
+ }
+
+ public abstract class HelpContent : PopupWindowContent
+ {
+ private GUIContent icon;
+
+ protected abstract void Prepare();
+ protected abstract Vector2 GetContentSize();
+ protected abstract void DrawContent();
+
+ public override void OnOpen()
+ {
+ icon = EditorGUIUtility.IconContent("console.infoicon");
+
+ Prepare();
+ }
+
+ public override Vector2 GetWindowSize()
+ {
+ Vector2 contentSize = GetContentSize();
+
+ Vector2 iconSize = GUI.skin.label.CalcSize(icon);
+
+ return new Vector2(contentSize.x + iconSize.x,
+ Math.Max(contentSize.y, iconSize.y) + EditorGUIUtility.standardVerticalSpacing);
+ }
+
+ public override void OnGUI(Rect rect)
+ {
+ using (new GUILayout.HorizontalScope())
+ {
+ using (new GUILayout.VerticalScope())
+ {
+ GUILayout.Label(icon);
+ }
+
+ using (new GUILayout.VerticalScope())
+ {
+ DrawContent();
+ }
+ }
+ }
+ }
+
+ public class SimpleHelp : HelpContent
+ {
+ private GUIContent text;
+ private GUIStyle style;
+ private float textWidth;
+
+ public SimpleHelp(string text, float textWidth = 300)
+ {
+ this.text = new GUIContent(text);
+ this.textWidth = textWidth;
+ }
+
+ protected override void Prepare()
+ {
+ style = new GUIStyle(GUI.skin.label) {
+ richText = true,
+ wordWrap = true,
+ alignment = TextAnchor.MiddleLeft,
+ };
+ }
+
+ protected override Vector2 GetContentSize()
+ {
+ float textHeight = style.CalcHeight(text, textWidth) + style.margin.bottom;
+
+ return new Vector2(textWidth, textHeight);
+ }
+
+ protected override void DrawContent()
+ {
+ GUILayout.Label(text, style);
+ }
+ }
+
+ public class BuildStatusWatcher
+ {
+ public static Action OnBuildStarted;
+ public static Action OnBuildEnded;
+
+ private static bool buildInProgress = false;
+
+ private static void SetBuildInProgress(bool inProgress)
+ {
+ if (inProgress != buildInProgress)
+ {
+ buildInProgress = inProgress;
+
+ if (buildInProgress)
+ {
+ EditorApplication.update += PollBuildStatus;
+
+ if (OnBuildStarted != null)
+ {
+ OnBuildStarted();
+ }
+ }
+ else
+ {
+ EditorApplication.update -= PollBuildStatus;
+
+ if (OnBuildEnded != null)
+ {
+ OnBuildEnded();
+ }
+ }
+ }
+ }
+
+ private static void PollBuildStatus()
+ {
+ SetBuildInProgress(BuildPipeline.isBuildingPlayer);
+ }
+
+ private class BuildProcessor : IPreprocessBuildWithReport, IPostprocessBuildWithReport
+ {
+ public int callbackOrder { get { return 0; } }
+
+ public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
+ {
+ SetBuildInProgress(true);
+ }
+
+ public void OnPostprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
+ {
+ SetBuildInProgress(false);
+ }
+ }
+
+ public static void Startup()
+ {
+#if UNITY_SCRIPTABLEBUILDPIPELINE_EXIST
+ BuildCallbacks callbacks = ContentPipeline.BuildCallbacks;
+
+ callbacks.PostDependencyCallback += (parameters, dependencyData) => {
+ SetBuildInProgress(true);
+ return ReturnCode.Success;
+ };
+
+ callbacks.PostWritingCallback += (parameters, dependencyData, writeData, results) => {
+ SetBuildInProgress(false);
+ return ReturnCode.Success;
+ };
+#endif
+ }
+ }
+
+ public static class SerializedPropertyExtensions
+ {
+ public static bool ArrayContains(this SerializedProperty array, Func predicate)
+ {
+ return FindArrayIndex(array, predicate) >= 0;
+ }
+
+ public static bool ArrayContains(this SerializedProperty array, string subPropertyName,
+ Func predicate)
+ {
+ return FindArrayIndex(array, subPropertyName, predicate) >= 0;
+ }
+
+ public static int FindArrayIndex(this SerializedProperty array, Func predicate)
+ {
+ for (int i = 0; i < array.arraySize; ++i)
+ {
+ SerializedProperty current = array.GetArrayElementAtIndex(i);
+
+ if (predicate(current))
+ {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ public static int FindArrayIndex(this SerializedProperty array, string subPropertyName,
+ Func predicate)
+ {
+ for (int i = 0; i < array.arraySize; ++i)
+ {
+ SerializedProperty current = array.GetArrayElementAtIndex(i);
+ SerializedProperty subProperty = current.FindPropertyRelative(subPropertyName);
+
+ if (predicate(subProperty))
+ {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ public static void ArrayAdd(this SerializedProperty array, Action initialize)
+ {
+ array.InsertArrayElementAtIndex(array.arraySize);
+ initialize(array.GetArrayElementAtIndex(array.arraySize - 1));
+ }
+
+ public static void ArrayClear(this SerializedProperty array)
+ {
+ while (array.arraySize > 0)
+ {
+ array.DeleteArrayElementAtIndex(array.arraySize - 1);
+ }
+ }
+
+ private static FMOD.GUID GetGuid(this SerializedProperty property)
+ {
+ return new FMOD.GUID() {
+ Data1 = property.FindPropertyRelative("Data1").intValue,
+ Data2 = property.FindPropertyRelative("Data2").intValue,
+ Data3 = property.FindPropertyRelative("Data3").intValue,
+ Data4 = property.FindPropertyRelative("Data4").intValue,
+ };
+ }
+
+ public static void SetGuid(this SerializedProperty property, FMOD.GUID guid)
+ {
+ property.FindPropertyRelative("Data1").intValue = guid.Data1;
+ property.FindPropertyRelative("Data2").intValue = guid.Data2;
+ property.FindPropertyRelative("Data3").intValue = guid.Data3;
+ property.FindPropertyRelative("Data4").intValue = guid.Data4;
+ }
+
+ public static void SetEventReference(this SerializedProperty property, FMOD.GUID guid, string path)
+ {
+ SerializedProperty guidProperty = property.FindPropertyRelative("Guid");
+ guidProperty.SetGuid(guid);
+
+ SerializedProperty pathProperty = property.FindPropertyRelative("Path");
+ pathProperty.stringValue = path;
+ }
+
+ public static EventReference GetEventReference(this SerializedProperty property)
+ {
+ SerializedProperty pathProperty = property.FindPropertyRelative("Path");
+ SerializedProperty guidProperty = property.FindPropertyRelative("Guid");
+
+ return new EventReference() {
+ Path = pathProperty.stringValue,
+ Guid = guidProperty.GetGuid(),
+ };
+ }
+ }
+
+ public class NoIndentScope : IDisposable
+ {
+ private int oldIndentLevel;
+
+ public NoIndentScope()
+ {
+ oldIndentLevel = EditorGUI.indentLevel;
+ EditorGUI.indentLevel = 0;
+ }
+
+ public void Dispose()
+ {
+ EditorGUI.indentLevel = oldIndentLevel;
+ }
+ }
+
+ public class NaturalComparer : IComparer
+ {
+ public int Compare(string a, string b)
+ {
+ return EditorUtility.NaturalCompare(a, b);
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs.meta b/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs.meta
new file mode 100644
index 0000000..0921cc3
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2bb4068641d1f71478f95a9b73533f51
+timeCreated: 1432608272
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs b/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs
new file mode 100644
index 0000000..5972e66
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs
@@ -0,0 +1,1772 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UnityEditor;
+using UnityEditor.IMGUI.Controls;
+using UnityEngine;
+using System.IO;
+
+namespace FMODUnity
+{
+ public class EventBrowser : EditorWindow, ISerializationCallbackReceiver
+ {
+ [SerializeField]
+ private bool isStandaloneWindow;
+
+ [NonSerialized]
+ private float nextRepaintTime;
+
+ [NonSerialized]
+ private float[] cachedMetering;
+
+ private const float RepaintInterval = 1 / 30.0f;
+
+ private Texture2D borderIcon;
+ private GUIStyle borderStyle;
+
+ [NonSerialized]
+ private TreeView treeView;
+
+ [NonSerialized]
+ private SearchField searchField;
+
+ [SerializeField]
+ private PreviewArea previewArea = new PreviewArea();
+
+ [SerializeField]
+ private TreeView.State treeViewState;
+
+ [NonSerialized]
+ private DateTime LastKnownCacheTime;
+
+ private SerializedProperty outputProperty;
+
+ public static FMOD.Studio.EventInstance PreviewEventInstance { get; private set; }
+
+ [MenuItem("FMOD/Event Browser", priority = 2)]
+ public static void ShowWindow()
+ {
+ EventBrowser eventBrowser = GetWindow("FMOD Events");
+ eventBrowser.minSize = new Vector2(380, 600);
+
+ eventBrowser.BeginStandaloneWindow();
+
+ EditorUtils.LoadPreviewBanks();
+ }
+
+ public static bool IsOpen
+ {
+ get; private set;
+ }
+
+ public void OnBeforeSerialize()
+ {
+ treeViewState = treeView.state;
+ }
+
+ public void OnAfterDeserialize()
+ {
+ }
+
+ private void Update()
+ {
+ bool forceRepaint = false;
+
+ float[] currentMetering = EditorUtils.GetMetering();
+ if (cachedMetering == null || !cachedMetering.SequenceEqual(currentMetering))
+ {
+ cachedMetering = currentMetering;
+ forceRepaint = true;
+ }
+
+ if (LastKnownCacheTime != EventManager.CacheTime)
+ {
+ ReadEventCache();
+ forceRepaint = true;
+ }
+
+ if (forceRepaint || (previewArea != null && previewArea.forceRepaint && nextRepaintTime < Time.realtimeSinceStartup))
+ {
+ Repaint();
+ nextRepaintTime = Time.time + RepaintInterval;
+ }
+ }
+
+ private void ReadEventCache()
+ {
+ LastKnownCacheTime = EventManager.CacheTime;
+ treeView.Reload();
+ }
+
+ private class TreeView : UnityEditor.IMGUI.Controls.TreeView
+ {
+ private static readonly Texture2D folderOpenIcon = EditorUtils.LoadImage("FolderIconOpen.png");
+ private static readonly Texture2D folderClosedIcon = EditorUtils.LoadImage("FolderIconClosed.png");
+ private static readonly Texture2D eventIcon = EditorUtils.LoadImage("EventIcon.png");
+ private static readonly Texture2D snapshotIcon = EditorUtils.LoadImage("SnapshotIcon.png");
+ private static readonly Texture2D bankIcon = EditorUtils.LoadImage("BankIcon.png");
+ private static readonly Texture2D continuousParameterIcon = EditorUtils.LoadImage("ContinuousParameterIcon.png");
+ private static readonly Texture2D discreteParameterIcon = EditorUtils.LoadImage("DiscreteParameterIcon.png");
+ private static readonly Texture2D labeledParameterIcon = EditorUtils.LoadImage("LabeledParameterIcon.png");
+
+ private Dictionary itemIDs = new Dictionary();
+
+ private const string EventPrefix = "event:/";
+ private const string SnapshotPrefix = "snapshot:/";
+ private const string BankPrefix = "bank:/";
+ private const string ParameterPrefix = "parameter:/";
+
+ bool expandNextFolderSet = false;
+ string nextFramedItemPath;
+ private string[] searchStringSplit;
+
+ IList noSearchExpandState;
+
+ float oldBaseIndent;
+
+ public TreeView(State state) : base(state.baseState)
+ {
+ noSearchExpandState = state.noSearchExpandState;
+ SelectedObject = state.selectedObject;
+ TypeFilter = state.typeFilter;
+ DragEnabled = state.dragEnabled;
+
+ for (int i = 0; i < state.itemPaths.Count; ++i)
+ {
+ itemIDs.Add(state.itemPaths[i], state.itemIDs[i]);
+ }
+ }
+
+ public void JumpToEvent(string path)
+ {
+ JumpToItem(path);
+ }
+
+ public void JumpToBank(string name)
+ {
+ JumpToItem(BankPrefix + name);
+ }
+
+ private void JumpToItem(string path)
+ {
+ nextFramedItemPath = path;
+ Reload();
+
+ int itemID;
+ if (itemIDs.TryGetValue(path, out itemID))
+ {
+ SetSelection(new List { itemID },
+ TreeViewSelectionOptions.RevealAndFrame | TreeViewSelectionOptions.FireSelectionChanged);
+ }
+ else
+ {
+ SetSelection(new List());
+ }
+ }
+
+ private class LeafItem : TreeViewItem
+ {
+ public LeafItem(int id, int depth, ScriptableObject data)
+ : base(id, depth)
+ {
+ Data = data;
+ }
+
+ public ScriptableObject Data;
+ }
+
+ private class FolderItem : TreeViewItem
+ {
+ public FolderItem(int id, int depth, string displayName)
+ : base(id, depth, displayName)
+ {
+ }
+ }
+
+ private FolderItem CreateFolderItem(string name, string path, bool hasChildren, bool forceExpanded,
+ TreeViewItem parent)
+ {
+ FolderItem item = new FolderItem(AffirmItemID("folder:" + path), 0, name);
+
+ bool expanded;
+
+ if (!hasChildren)
+ {
+ expanded = false;
+ }
+ else if (forceExpanded || expandNextFolderSet
+ || (nextFramedItemPath != null && nextFramedItemPath.StartsWith(path)))
+ {
+ SetExpanded(item.id, true);
+ expanded = true;
+ }
+ else
+ {
+ expanded = IsExpanded(item.id);
+ }
+
+ if (expanded)
+ {
+ item.icon = folderOpenIcon;
+ }
+ else
+ {
+ item.icon = folderClosedIcon;
+
+ if (hasChildren)
+ {
+ item.children = CreateChildListForCollapsedParent();
+ }
+ }
+
+ parent.AddChild(item);
+
+ return item;
+ }
+
+ protected override TreeViewItem BuildRoot()
+ {
+ return new TreeViewItem(-1, -1);
+ }
+
+ private int AffirmItemID(string path)
+ {
+ int id;
+
+ if (!itemIDs.TryGetValue(path, out id))
+ {
+ id = itemIDs.Count;
+ itemIDs.Add(path, id);
+ }
+
+ return id;
+ }
+
+ public TypeFilter TypeFilter { get; set; }
+ public bool DragEnabled { get; set; }
+
+ protected override IList BuildRows(TreeViewItem root)
+ {
+ if (hasSearch)
+ {
+ searchStringSplit = searchString.Split(' ');
+ }
+
+ if (rootItem.children != null)
+ {
+ rootItem.children.Clear();
+ }
+
+ if ((TypeFilter & TypeFilter.Event) != 0)
+ {
+ CreateSubTree("Events", EventPrefix,
+ EventManager.Events.Where(e => e.Path.StartsWith(EventPrefix)), e => e.Path);
+
+ CreateSubTree("Snapshots", SnapshotPrefix,
+ EventManager.Events.Where(e => e.Path.StartsWith(SnapshotPrefix)), s => s.Path);
+ }
+
+ if ((TypeFilter & TypeFilter.Bank) != 0)
+ {
+ CreateSubTree("Banks", BankPrefix, EventManager.Banks, b => b.StudioPath);
+ }
+
+ if ((TypeFilter & TypeFilter.Parameter) != 0)
+ {
+ CreateSubTree("Global Parameters", ParameterPrefix,
+ EventManager.Parameters, p => p.StudioPath);
+ }
+
+ List rows = new List();
+
+ AddChildrenInOrder(rows, rootItem);
+
+ SetupDepthsFromParentsAndChildren(rootItem);
+
+ expandNextFolderSet = false;
+ nextFramedItemPath = null;
+
+ return rows;
+ }
+
+ private static NaturalComparer naturalComparer = new NaturalComparer();
+
+ private void CreateSubTree(string rootName, string rootPath,
+ IEnumerable sourceRecords, Func GetPath,
+ Func MakeUniquePath = null)
+ where T : ScriptableObject
+ {
+ var records = sourceRecords.Select(r => new { source = r, path = GetPath(r) });
+
+ if (hasSearch)
+ {
+ records = records.Where(r => {
+ foreach (var word in searchStringSplit)
+ {
+ if (word.Length > 0 && r.path.IndexOf(word, StringComparison.OrdinalIgnoreCase) < 0)
+ {
+ return false;
+ }
+ }
+ return true;
+ });
+ }
+
+ records = records.OrderBy(r => r.path, naturalComparer);
+
+ TreeViewItem root =
+ CreateFolderItem(rootName, rootPath, records.Any(), TypeFilter != TypeFilter.All, rootItem);
+
+ List currentFolderItems = new List();
+
+ foreach (var record in records)
+ {
+ string leafName;
+ TreeViewItem parent = CreateFolderItems(record.path, currentFolderItems, root, out leafName);
+
+ if (parent != null)
+ {
+ string uniquePath;
+
+ if (MakeUniquePath != null)
+ {
+ uniquePath = MakeUniquePath(record.path, record.source);
+ }
+ else
+ {
+ uniquePath = record.path;
+ }
+
+ TreeViewItem leafItem = new LeafItem(AffirmItemID(uniquePath), 0, record.source);
+ leafItem.displayName = leafName;
+ leafItem.icon = IconForRecord(record.source);
+
+ parent.AddChild(leafItem);
+ }
+ }
+ }
+
+ private Texture2D IconForRecord(ScriptableObject record)
+ {
+ EditorEventRef eventRef = record as EditorEventRef;
+ if (eventRef != null)
+ {
+ if (eventRef.Path.StartsWith(SnapshotPrefix))
+ {
+ return snapshotIcon;
+ }
+ else
+ {
+ return eventIcon;
+ }
+ }
+
+ EditorBankRef bankRef = record as EditorBankRef;
+ if (bankRef != null)
+ {
+ return bankIcon;
+ }
+
+ EditorParamRef paramRef = record as EditorParamRef;
+ if (paramRef != null)
+ {
+ switch(paramRef.Type)
+ {
+ case ParameterType.Continuous:
+ return continuousParameterIcon;
+ case ParameterType.Discrete:
+ return discreteParameterIcon;
+ case ParameterType.Labeled:
+ return labeledParameterIcon;
+ }
+ }
+
+ return null;
+ }
+
+ private TreeViewItem CreateFolderItems(string path, List currentFolderItems,
+ TreeViewItem root, out string leafName)
+ {
+ TreeViewItem parent = root;
+
+ char separator = '/';
+
+ // Skip the type prefix at the start of the path
+ int elementStart = path.IndexOf(separator) + 1;
+
+ for (int i = 0; ; ++i)
+ {
+ if (!IsExpanded(parent.id))
+ {
+ leafName = null;
+ return null;
+ }
+
+ int elementEnd = path.IndexOf(separator, elementStart);
+
+ if (elementEnd < 0)
+ {
+ // No more folders; elementStart points to the event name
+ break;
+ }
+
+ string folderName = path.Substring(elementStart, elementEnd - elementStart);
+
+ if (i < currentFolderItems.Count && folderName != currentFolderItems[i].displayName)
+ {
+ currentFolderItems.RemoveRange(i, currentFolderItems.Count - i);
+ }
+
+ if (i == currentFolderItems.Count)
+ {
+ FolderItem folderItem =
+ CreateFolderItem(folderName, path.Substring(0, elementEnd), true, false, parent);
+
+ currentFolderItems.Add(folderItem);
+ }
+
+ elementStart = elementEnd + 1;
+ parent = currentFolderItems[i];
+ }
+
+ leafName = path.Substring(elementStart);
+ return parent;
+ }
+
+ private static void AddChildrenInOrder(List list, TreeViewItem item)
+ {
+ if (item.children != null)
+ {
+ foreach (TreeViewItem child in item.children.Where(child => child is FolderItem))
+ {
+ list.Add(child);
+
+ AddChildrenInOrder(list, child);
+ }
+
+ foreach (TreeViewItem child in item.children.Where(child => !(child == null || child is FolderItem)))
+ {
+ list.Add(child);
+ }
+ }
+ }
+
+ protected override bool CanMultiSelect(TreeViewItem item)
+ {
+ return false;
+ }
+
+ protected override bool CanChangeExpandedState(TreeViewItem item)
+ {
+ return item.hasChildren;
+ }
+
+ protected override bool CanStartDrag(CanStartDragArgs args)
+ {
+ if (DragEnabled && args.draggedItem is LeafItem)
+ {
+ return IsDraggable((args.draggedItem as LeafItem).Data);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ protected override void SetupDragAndDrop(SetupDragAndDropArgs args)
+ {
+ IList items = FindRows(args.draggedItemIDs);
+
+ if (items[0] is LeafItem)
+ {
+ LeafItem item = items[0] as LeafItem;
+
+ DragAndDrop.PrepareStartDrag();
+ DragAndDrop.objectReferences = new UnityEngine.Object[] { Instantiate(item.Data) };
+
+ string title = string.Empty;
+
+ if (item.Data is EditorEventRef)
+ {
+ title = "New FMOD Studio Emitter";
+ }
+ else if (item.Data is EditorBankRef)
+ {
+ title = "New FMOD Studio Bank Loader";
+ }
+ else if (item.Data is EditorParamRef)
+ {
+ title = "New FMOD Studio Global Parameter Trigger";
+ }
+
+ DragAndDrop.StartDrag(title);
+ }
+ }
+
+ protected override DragAndDropVisualMode HandleDragAndDrop(DragAndDropArgs args)
+ {
+ return DragAndDropVisualMode.None;
+ }
+
+ protected override void SearchChanged(string newSearch)
+ {
+ if (!string.IsNullOrEmpty(newSearch.Trim()))
+ {
+ expandNextFolderSet = true;
+
+ if (noSearchExpandState == null)
+ {
+ // A new search is beginning
+ noSearchExpandState = GetExpanded();
+ SetExpanded(new List());
+ }
+ }
+ else
+ {
+ if (noSearchExpandState != null)
+ {
+ // A search is ending
+ SetExpanded(noSearchExpandState);
+ noSearchExpandState = null;
+ }
+ }
+ }
+
+ public ScriptableObject SelectedObject { get; private set; }
+ public ScriptableObject DoubleClickedObject { get; private set; }
+
+ protected override void SelectionChanged(IList selectedIDs)
+ {
+ SelectedObject = null;
+
+ if (selectedIDs.Count > 0)
+ {
+ TreeViewItem item = FindItem(selectedIDs[0], rootItem);
+
+ if (item is LeafItem)
+ {
+ SelectedObject = (item as LeafItem).Data;
+ }
+ }
+ }
+
+ protected override void DoubleClickedItem(int id)
+ {
+ TreeViewItem item = FindItem(id, rootItem);
+
+ if (item is LeafItem)
+ {
+ DoubleClickedObject = (item as LeafItem).Data;
+ }
+ }
+
+ protected override void BeforeRowsGUI()
+ {
+ oldBaseIndent = baseIndent;
+ DoubleClickedObject = null;
+ }
+
+ protected override void RowGUI(RowGUIArgs args)
+ {
+ if (hasSearch)
+ {
+ // Hack to undo TreeView flattening the hierarchy when searching
+ baseIndent = oldBaseIndent + args.item.depth * depthIndentWidth;
+ }
+
+ base.RowGUI(args);
+
+ TreeViewItem item = args.item;
+
+ if (Event.current.type == EventType.MouseUp && item is FolderItem && item.hasChildren)
+ {
+ Rect rect = args.rowRect;
+ rect.xMin = GetContentIndent(item);
+
+ if (rect.Contains(Event.current.mousePosition))
+ {
+ SetExpanded(item.id, !IsExpanded(item.id));
+ Event.current.Use();
+ }
+ }
+ }
+
+ protected override void AfterRowsGUI()
+ {
+ baseIndent = oldBaseIndent;
+ }
+
+ [Serializable]
+ public class State
+ {
+ public TreeViewState baseState;
+ public List noSearchExpandState;
+ public ScriptableObject selectedObject;
+ public List itemPaths = new List();
+ public List itemIDs = new List();
+ public TypeFilter typeFilter = TypeFilter.All;
+ public bool dragEnabled = true;
+
+ public State() : this(new TreeViewState())
+ {
+ }
+
+ public State(TreeViewState baseState)
+ {
+ this.baseState = baseState;
+ }
+ }
+
+ new public State state
+ {
+ get
+ {
+ State result = new State(base.state);
+
+ if (noSearchExpandState != null)
+ {
+ result.noSearchExpandState = new List(noSearchExpandState);
+ }
+
+ result.selectedObject = SelectedObject;
+
+ foreach (var entry in itemIDs)
+ {
+ result.itemPaths.Add(entry.Key);
+ result.itemIDs.Add(entry.Value);
+ }
+
+ result.typeFilter = TypeFilter;
+ result.dragEnabled = true;
+
+ return result;
+ }
+ }
+ }
+
+ private void AffirmResources()
+ {
+ if (borderIcon == null)
+ {
+ borderIcon = EditorUtils.LoadImage("Border.png");
+
+ borderStyle = new GUIStyle(GUI.skin.box);
+ borderStyle.normal.background = borderIcon;
+ borderStyle.margin = new RectOffset();
+ }
+ }
+
+ private bool InChooserMode { get { return outputProperty != null; } }
+
+ private void OnGUI()
+ {
+ AffirmResources();
+
+ if (InChooserMode)
+ {
+ GUILayout.BeginVertical(borderStyle, GUILayout.ExpandWidth(true));
+ }
+
+ treeView.searchString = searchField.OnGUI(treeView.searchString);
+
+ Rect treeRect = GUILayoutUtility.GetRect(0, 0, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
+ treeRect.y += 2;
+ treeRect.height -= 2;
+
+ treeView.OnGUI(treeRect);
+
+ if (InChooserMode)
+ {
+ GUILayout.EndVertical();
+ HandleChooserModeEvents();
+ }
+ else
+ {
+ previewArea.treeView = treeView;
+ previewArea.OnGUI(position.width, cachedMetering != null ? cachedMetering : EditorUtils.GetMetering());
+ }
+ }
+
+ private void HandleChooserModeEvents()
+ {
+ if (Event.current.isKey)
+ {
+ KeyCode keyCode = Event.current.keyCode;
+
+ if ((keyCode == KeyCode.Return || keyCode == KeyCode.KeypadEnter) && treeView.SelectedObject != null)
+ {
+ SetOutputProperty(treeView.SelectedObject);
+ Event.current.Use();
+ Close();
+ }
+ else if (keyCode == KeyCode.Escape)
+ {
+ Event.current.Use();
+ Close();
+ }
+ }
+ else if (treeView.DoubleClickedObject != null)
+ {
+ SetOutputProperty(treeView.DoubleClickedObject);
+ Close();
+ }
+ }
+
+ private void SetOutputProperty(ScriptableObject data)
+ {
+ if (data is EditorEventRef)
+ {
+ EditorEventRef eventRef = data as EditorEventRef;
+
+ outputProperty.SetEventReference(eventRef.Guid, eventRef.Path);
+
+ EditorUtils.UpdateParamsOnEmitter(outputProperty.serializedObject, eventRef.Path);
+ }
+ else if (data is EditorBankRef)
+ {
+ outputProperty.stringValue = (data as EditorBankRef).Name;
+ }
+ else if (data is EditorParamRef)
+ {
+ outputProperty.stringValue = (data as EditorParamRef).Name;
+ }
+
+ outputProperty.serializedObject.ApplyModifiedProperties();
+ }
+
+ [Serializable]
+ private class PreviewArea
+ {
+ [NonSerialized]
+ public TreeView treeView;
+
+ [NonSerialized]
+ private EditorEventRef currentEvent;
+
+ [SerializeField]
+ private DetailsView detailsView = new DetailsView();
+
+ [SerializeField]
+ private TransportControls transportControls = new TransportControls();
+
+ [SerializeField]
+ private Event3DPreview event3DPreview = new Event3DPreview();
+
+ [SerializeField]
+ private PreviewMeters meters = new PreviewMeters();
+
+ [SerializeField]
+ private EventParameterControls parameterControls = new EventParameterControls();
+
+ private GUIStyle mainStyle;
+
+ private bool isNarrow;
+
+ public bool forceRepaint { get { return transportControls.forceRepaint; } }
+
+ private void SetEvent(EditorEventRef eventRef)
+ {
+ if (eventRef != currentEvent)
+ {
+ currentEvent = eventRef;
+
+ EditorUtils.PreviewStop(PreviewEventInstance);
+ transportControls.Reset();
+ event3DPreview.Reset();
+ parameterControls.Reset();
+ }
+ }
+
+ private void AffirmResources()
+ {
+ if (mainStyle == null)
+ {
+ mainStyle = new GUIStyle(GUI.skin.box);
+ mainStyle.margin = new RectOffset();
+ }
+ }
+
+ public void OnGUI(float width, float[] metering)
+ {
+ isNarrow = width < 600;
+
+ AffirmResources();
+
+ ScriptableObject selectedObject = treeView.SelectedObject;
+
+ if (selectedObject is EditorEventRef)
+ {
+ SetEvent(selectedObject as EditorEventRef);
+ }
+ else
+ {
+ SetEvent(null);
+ }
+
+ if (selectedObject != null)
+ {
+ GUILayout.BeginVertical(mainStyle, GUILayout.ExpandWidth(true));
+
+ if (selectedObject is EditorEventRef)
+ {
+ EditorEventRef eventRef = selectedObject as EditorEventRef;
+
+ if (eventRef.Path.StartsWith("event:"))
+ {
+ DrawEventPreview(eventRef, metering);
+ }
+ else if (eventRef.Path.StartsWith("snapshot:"))
+ {
+ detailsView.DrawSnapshot(eventRef);
+ }
+ }
+ else if (selectedObject is EditorBankRef)
+ {
+ detailsView.DrawBank(selectedObject as EditorBankRef);
+ }
+ else if (selectedObject is EditorParamRef)
+ {
+ detailsView.DrawParameter(selectedObject as EditorParamRef);
+ }
+
+ GUILayout.EndVertical();
+ }
+ }
+
+ private void DrawSeparatorLine()
+ {
+ GUILayout.Box(GUIContent.none, GUILayout.Height(1), GUILayout.ExpandWidth(true));
+ }
+
+ private void DrawEventPreview(EditorEventRef eventRef, float[] metering)
+ {
+ detailsView.DrawEvent(eventRef, isNarrow);
+
+ DrawSeparatorLine();
+
+ // Playback controls, 3D Preview and meters
+ EditorGUILayout.BeginHorizontal(GUILayout.Height(event3DPreview.Height));
+ GUILayout.FlexibleSpace();
+
+ EditorGUILayout.BeginVertical();
+
+ if (!isNarrow)
+ {
+ GUILayout.FlexibleSpace();
+ }
+
+ transportControls.OnGUI(eventRef, parameterControls.ParameterValues);
+
+ if (isNarrow)
+ {
+ EditorGUILayout.Separator();
+ meters.OnGUI(true, metering);
+ }
+ else
+ {
+ GUILayout.FlexibleSpace();
+ }
+
+ EditorGUILayout.EndVertical();
+
+ event3DPreview.OnGUI(eventRef);
+
+ if (!isNarrow)
+ {
+ meters.OnGUI(false, metering);
+ }
+
+ GUILayout.FlexibleSpace();
+ EditorGUILayout.EndHorizontal();
+
+ DrawSeparatorLine();
+
+ parameterControls.OnGUI(eventRef);
+ }
+ }
+
+ [Serializable]
+ private class DetailsView
+ {
+ private Texture copyIcon;
+ private GUIStyle textFieldNameStyle;
+
+ private void AffirmResources()
+ {
+ if (copyIcon == null)
+ {
+ copyIcon = EditorUtils.LoadImage("CopyIcon.png");
+
+ textFieldNameStyle = new GUIStyle(EditorStyles.label);
+ textFieldNameStyle.fontStyle = FontStyle.Bold;
+ }
+ }
+
+ public void DrawEvent(EditorEventRef selectedEvent, bool isNarrow)
+ {
+ AffirmResources();
+
+ DrawCopyableTextField("Full Path", selectedEvent.Path);
+
+ DrawTextField("Banks", string.Join(", ", selectedEvent.Banks.Select(x => x.Name).ToArray()));
+
+ EditorGUILayout.BeginHorizontal();
+ DrawTextField("Panning", selectedEvent.Is3D ? "3D" : "2D");
+ DrawTextField("Oneshot", selectedEvent.IsOneShot.ToString());
+
+ TimeSpan t = TimeSpan.FromMilliseconds(selectedEvent.Length);
+ DrawTextField("Length", selectedEvent.Length > 0 ? string.Format("{0:D2}:{1:D2}:{2:D3}", t.Minutes, t.Seconds, t.Milliseconds) : "N/A");
+
+ if (!isNarrow) DrawTextField("Streaming", selectedEvent.IsStream.ToString());
+ EditorGUILayout.EndHorizontal();
+ if (isNarrow) DrawTextField("Streaming", selectedEvent.IsStream.ToString());
+ }
+
+ public void DrawSnapshot(EditorEventRef eventRef)
+ {
+ AffirmResources();
+
+ DrawCopyableTextField("Full Path", eventRef.Path);
+ }
+
+ public void DrawBank(EditorBankRef bank)
+ {
+ AffirmResources();
+
+ DrawCopyableTextField("Full Path", "bank:/" + bank.Name);
+
+ string[] SizeSuffix = { "B", "KB", "MB", "GB" };
+
+ GUILayout.Label("Platform Bank Sizes", textFieldNameStyle);
+
+ EditorGUI.indentLevel++;
+
+ foreach (var sizeInfo in bank.FileSizes)
+ {
+ int order = 0;
+ long size = sizeInfo.Value;
+
+ while (size >= 1024 && order + 1 < SizeSuffix.Length)
+ {
+ order++;
+ size /= 1024;
+ }
+
+ EditorGUILayout.LabelField(sizeInfo.Name, string.Format("{0} {1}", size, SizeSuffix[order]));
+ }
+
+ EditorGUI.indentLevel--;
+ }
+
+ public void DrawParameter(EditorParamRef parameter)
+ {
+ AffirmResources();
+
+ DrawCopyableTextField("Name", parameter.Name);
+ DrawCopyableTextField("ID",
+ string.Format("{{ data1 = 0x{0:x8}, data2 = 0x{1:x8} }}", parameter.ID.data1, parameter.ID.data2));
+ DrawTextField("Minimum", parameter.Min.ToString());
+ DrawTextField("Maximum", parameter.Max.ToString());
+ }
+
+ private void DrawCopyableTextField(string name, string value)
+ {
+ EditorGUILayout.BeginHorizontal();
+ DrawTextField(name, value);
+ if (GUILayout.Button(copyIcon, GUILayout.ExpandWidth(false)))
+ {
+ EditorGUIUtility.systemCopyBuffer = value;
+ }
+ EditorGUILayout.EndHorizontal();
+ }
+
+ private void DrawTextField(string name, string content)
+ {
+ EditorGUILayout.BeginHorizontal();
+
+ GUILayout.Label(name, textFieldNameStyle, GUILayout.Width(75));
+ GUILayout.Label(content);
+
+ EditorGUILayout.EndHorizontal();
+ }
+ }
+
+ [Serializable]
+ private class TransportControls
+ {
+ private Texture playOff;
+ private Texture playOn;
+ private Texture stopOff;
+ private Texture stopOn;
+ private Texture openIcon;
+ private GUIStyle buttonStyle;
+
+ public bool forceRepaint { get; private set; }
+
+ public void Reset()
+ {
+ forceRepaint = false;
+ }
+
+ private void AffirmResources()
+ {
+ if (playOff == null)
+ {
+ playOff = EditorUtils.LoadImage("TransportPlayButtonOff.png");
+ playOn = EditorUtils.LoadImage("TransportPlayButtonOn.png");
+ stopOff = EditorUtils.LoadImage("TransportStopButtonOff.png");
+ stopOn = EditorUtils.LoadImage("TransportStopButtonOn.png");
+ openIcon = EditorUtils.LoadImage("transportOpen.png");
+
+ buttonStyle = new GUIStyle();
+ buttonStyle.padding.left = 4;
+ buttonStyle.padding.top = 10;
+ }
+ }
+
+ public void OnGUI(EditorEventRef selectedEvent, Dictionary parameterValues)
+ {
+ AffirmResources();
+
+ FMOD.Studio.PLAYBACK_STATE previewState = FMOD.Studio.PLAYBACK_STATE.STOPPED;
+ bool paused = false;
+
+ if (PreviewEventInstance.isValid())
+ {
+ PreviewEventInstance.getPlaybackState(out previewState);
+ PreviewEventInstance.getPaused(out paused);
+ }
+
+ bool playing = previewState == FMOD.Studio.PLAYBACK_STATE.PLAYING;
+ bool stopped = previewState == FMOD.Studio.PLAYBACK_STATE.STOPPED;
+
+ EditorGUILayout.BeginHorizontal();
+
+ if (GUILayout.Button(stopped || paused ? stopOn : stopOff, buttonStyle, GUILayout.ExpandWidth(false)))
+ {
+ forceRepaint = false;
+
+ if (paused)
+ {
+ EditorUtils.PreviewStop(PreviewEventInstance);
+ PreviewEventInstance.release();
+ PreviewEventInstance.clearHandle();
+ }
+ if (playing)
+ {
+ EditorUtils.PreviewPause(PreviewEventInstance);
+ }
+ }
+ if (GUILayout.Button(playing ? playOn : playOff, buttonStyle, GUILayout.ExpandWidth(false)))
+ {
+ if (paused)
+ {
+ EditorUtils.PreviewPause(PreviewEventInstance);
+ }
+ else
+ {
+ if (PreviewEventInstance.isValid())
+ {
+ EditorUtils.PreviewStop(PreviewEventInstance);
+ }
+ PreviewEventInstance = EditorUtils.PreviewEvent(selectedEvent, parameterValues);
+ }
+
+ forceRepaint = true;
+ }
+ if (GUILayout.Button(new GUIContent(openIcon, "Show Event in FMOD Studio"), buttonStyle, GUILayout.ExpandWidth(false)))
+ {
+ string cmd = string.Format("studio.window.navigateTo(studio.project.lookup(\"{0}\"))", selectedEvent.Guid);
+ EditorUtils.SendScriptCommand(cmd);
+ }
+
+ EditorGUILayout.EndHorizontal();
+ }
+ }
+
+ [Serializable]
+ private class Event3DPreview
+ {
+ private bool isDragging;
+ private Rect arenaRect;
+
+ private Vector2 eventPosition;
+ private float eventDistance = 0;
+ private float eventOrientation = 0;
+
+ private Texture arena;
+ private Texture emitter;
+
+ public void Reset()
+ {
+ eventPosition = new Vector2(0, 0);
+ eventDistance = 0;
+ eventOrientation = 0;
+ }
+
+ private void AffirmResources()
+ {
+ if (arena == null)
+ {
+ arena = EditorUtils.LoadImage("Preview.png");
+ emitter = EditorUtils.LoadImage("PreviewEmitter.png");
+ }
+ }
+
+ public float Height
+ {
+ get
+ {
+ AffirmResources();
+ return GUI.skin.label.CalcSize(new GUIContent(arena)).y;
+ }
+ }
+
+ public void OnGUI(EditorEventRef selectedEvent)
+ {
+ AffirmResources();
+
+ var originalColour = GUI.color;
+ if (!selectedEvent.Is3D)
+ {
+ GUI.color = new Color(1.0f, 1.0f, 1.0f, 0.1f);
+ }
+
+ GUILayout.Label(arena, GUILayout.ExpandWidth(false));
+
+ if (Event.current.type == EventType.Repaint)
+ {
+ arenaRect = GUILayoutUtility.GetLastRect();
+ }
+
+ Vector2 center = arenaRect.center;
+ Rect rect2 = new Rect(center.x + eventPosition.x - 6, center.y + eventPosition.y - 6, 12, 12);
+ GUI.DrawTexture(rect2, emitter);
+
+ GUI.color = originalColour;
+
+ if (selectedEvent.Is3D)
+ {
+ bool useGUIEvent = false;
+
+ switch (Event.current.type)
+ {
+ case EventType.MouseDown:
+ if (arenaRect.Contains(Event.current.mousePosition))
+ {
+ isDragging = true;
+ useGUIEvent = true;
+ }
+ break;
+ case EventType.MouseUp:
+ if (isDragging)
+ {
+ isDragging = false;
+ useGUIEvent = true;
+ }
+ break;
+ case EventType.MouseDrag:
+ if (isDragging)
+ {
+ useGUIEvent = true;
+ }
+ break;
+ }
+
+ if (useGUIEvent)
+ {
+ Vector2 newPosition = Event.current.mousePosition;
+ Vector2 delta = newPosition - center;
+
+ float maximumDistance = (arena.width - emitter.width) / 2;
+ float distance = Math.Min(delta.magnitude, maximumDistance);
+
+ delta.Normalize();
+ eventPosition = delta * distance;
+ eventDistance = distance / maximumDistance * selectedEvent.MaxDistance;
+
+ float angle = Mathf.Atan2(delta.y, delta.x);
+ eventOrientation = angle + Mathf.PI * 0.5f;
+
+ Event.current.Use();
+ }
+ }
+
+ if (PreviewEventInstance.isValid())
+ {
+ // Listener at origin
+ FMOD.ATTRIBUTES_3D pos = new FMOD.ATTRIBUTES_3D();
+ pos.position.x = (float)Math.Sin(eventOrientation) * eventDistance;
+ pos.position.y = (float)Math.Cos(eventOrientation) * eventDistance;
+ pos.forward.x = 1.0f;
+ pos.up.z = 1.0f;
+ PreviewEventInstance.set3DAttributes(pos);
+ }
+ }
+ }
+
+ [Serializable]
+ private class EventParameterControls
+ {
+ [NonSerialized]
+ private Dictionary parameterValues = new Dictionary();
+
+ [NonSerialized]
+ private Vector2 scrollPosition;
+
+ [NonSerialized]
+ private bool showGlobalParameters;
+
+ public Dictionary ParameterValues { get { return parameterValues; } }
+
+ public void Reset()
+ {
+ parameterValues.Clear();
+ }
+
+ public void OnGUI(EditorEventRef selectedEvent)
+ {
+ scrollPosition = GUILayout.BeginScrollView(scrollPosition,
+ GUILayout.Height(EditorGUIUtility.singleLineHeight * 7f));
+
+ foreach (EditorParamRef paramRef in selectedEvent.LocalParameters)
+ {
+ if (!parameterValues.ContainsKey(paramRef.Name))
+ {
+ parameterValues[paramRef.Name] = paramRef.Default;
+ }
+
+ CreateParamRefSlider(paramRef);
+ }
+
+ showGlobalParameters = selectedEvent.GlobalParameters.Count > 0 &&
+ EditorGUI.Foldout(EditorGUILayout.GetControlRect(), showGlobalParameters, "Global Parameters");
+
+ foreach (EditorParamRef paramRef in selectedEvent.GlobalParameters)
+ {
+ if (!parameterValues.ContainsKey(paramRef.Name))
+ {
+ parameterValues[paramRef.Name] = paramRef.Default;
+ }
+
+ if (showGlobalParameters)
+ {
+ CreateParamRefSlider(paramRef, true);
+ }
+ }
+
+ GUILayout.EndScrollView();
+ }
+
+ public void CreateParamRefSlider(EditorParamRef paramRef, bool isGlobal = false)
+ {
+ if (paramRef.Type == ParameterType.Labeled)
+ {
+ parameterValues[paramRef.Name] = EditorGUILayout.IntPopup(
+ paramRef.Name, (int)parameterValues[paramRef.Name], paramRef.Labels, null);
+ }
+ else if (paramRef.Type == ParameterType.Discrete)
+ {
+ parameterValues[paramRef.Name] = EditorGUILayout.IntSlider(
+ paramRef.Name, (int)parameterValues[paramRef.Name], (int)paramRef.Min, (int)paramRef.Max);
+ }
+ else
+ {
+ parameterValues[paramRef.Name] = EditorGUILayout.Slider(
+ paramRef.Name, parameterValues[paramRef.Name], paramRef.Min, paramRef.Max);
+ }
+
+ if (isGlobal)
+ {
+ EditorUtils.System.setParameterByID(paramRef.ID, parameterValues[paramRef.Name]);
+ }
+ else
+ {
+ if (PreviewEventInstance.isValid())
+ {
+ PreviewEventInstance.setParameterByID(paramRef.ID, parameterValues[paramRef.Name]);
+ }
+ }
+ }
+ }
+
+ [Serializable]
+ private class PreviewMeters
+ {
+ private Texture meterOn;
+ private Texture meterOff;
+
+ private void AffirmResources()
+ {
+ if (meterOn == null)
+ {
+ meterOn = EditorUtils.LoadImage("LevelMeter.png");
+ meterOff = EditorUtils.LoadImage("LevelMeterOff.png");
+ }
+ }
+
+ public void OnGUI(bool minimized, float[] metering)
+ {
+ AffirmResources();
+
+ int meterHeight = minimized ? 86 : 128;
+ int meterWidth = (int)((128 / (float)meterOff.height) * meterOff.width);
+
+ List meterPositions = meterPositionsForSpeakerMode(speakerModeForChannelCount(metering.Length), meterWidth, 2, 6);
+
+ const int MeterCountMaximum = 16;
+
+ int minimumWidth = meterWidth * MeterCountMaximum;
+
+ Rect fullRect = GUILayoutUtility.GetRect(minimumWidth, meterHeight,
+ GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
+
+ float baseX = fullRect.x + (fullRect.width - (meterWidth * metering.Length)) / 2;
+
+ for(int i = 0; i < metering.Length; i++)
+ {
+ Rect meterRect = new Rect(baseX + meterPositions[i], fullRect.y, meterWidth, fullRect.height);
+
+ GUI.DrawTexture(meterRect, meterOff);
+
+ float db = 20.0f * Mathf.Log10(metering[i] * Mathf.Sqrt(2.0f));
+ db = Mathf.Clamp(db, -80.0f, 10.0f);
+ float visible = 0;
+ int[] segmentPixels = new int[] { 0, 18, 38, 60, 89, 130, 187, 244, 300 };
+ float[] segmentDB = new float[] { -80.0f, -60.0f, -50.0f, -40.0f, -30.0f, -20.0f, -10.0f, 0, 10.0f };
+ int segment = 1;
+ while (segmentDB[segment] < db)
+ {
+ segment++;
+ }
+ visible = segmentPixels[segment - 1] + ((db - segmentDB[segment - 1]) / (segmentDB[segment] - segmentDB[segment - 1])) * (segmentPixels[segment] - segmentPixels[segment - 1]);
+
+ visible *= fullRect.height / (float)meterOff.height;
+
+ Rect levelPosRect = new Rect(meterRect.x, fullRect.height - visible + meterRect.y, meterWidth, visible);
+ Rect levelUVRect = new Rect(0, 0, 1.0f, visible / fullRect.height);
+ GUI.DrawTextureWithTexCoords(levelPosRect, meterOn, levelUVRect);
+ }
+ }
+
+ private FMOD.SPEAKERMODE speakerModeForChannelCount(int channelCount)
+ {
+ switch(channelCount)
+ {
+ case 1:
+ return FMOD.SPEAKERMODE.MONO;
+ case 4:
+ return FMOD.SPEAKERMODE.QUAD;
+ case 5:
+ return FMOD.SPEAKERMODE.SURROUND;
+ case 6:
+ return FMOD.SPEAKERMODE._5POINT1;
+ case 8:
+ return FMOD.SPEAKERMODE._7POINT1;
+ case 12:
+ return FMOD.SPEAKERMODE._7POINT1POINT4;
+ default:
+ return FMOD.SPEAKERMODE.STEREO;
+ }
+ }
+
+ private List meterPositionsForSpeakerMode(FMOD.SPEAKERMODE mode, float meterWidth, float groupGap, float lfeGap)
+ {
+ List offsets = new List();
+
+ switch(mode)
+ {
+ case FMOD.SPEAKERMODE.MONO: // M
+ offsets.Add(0);
+ break;
+
+ case FMOD.SPEAKERMODE.STEREO: // L R
+ offsets.Add(0);
+ offsets.Add(meterWidth);
+ break;
+
+ case FMOD.SPEAKERMODE.QUAD:
+ switch(Settings.Instance.MeterChannelOrdering)
+ {
+ case MeterChannelOrderingType.Standard:
+ case MeterChannelOrderingType.SeparateLFE: // L R | LS RS
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // LS
+ offsets.Add(meterWidth*3 + groupGap); // RS
+ break;
+ case MeterChannelOrderingType.Positional: // LS | L R | RS
+ offsets.Add(meterWidth*1 + groupGap); // L
+ offsets.Add(meterWidth*2 + groupGap); // R
+ offsets.Add(0); // LS
+ offsets.Add(meterWidth*3 + groupGap*2); // RS
+ break;
+ }
+ break;
+
+ case FMOD.SPEAKERMODE.SURROUND:
+ switch(Settings.Instance.MeterChannelOrdering)
+ {
+ case MeterChannelOrderingType.Standard:
+ case MeterChannelOrderingType.SeparateLFE: // L R | C | LS RS
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*3 + groupGap*2); // LS
+ offsets.Add(meterWidth*4 + groupGap*2); // RS
+ break;
+ case MeterChannelOrderingType.Positional: // LS | L C R | RS
+ offsets.Add(meterWidth*1 + groupGap); // L
+ offsets.Add(meterWidth*3 + groupGap); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(0); // LS
+ offsets.Add(meterWidth*4 + groupGap*2); // RS
+ break;
+ }
+ break;
+
+ case FMOD.SPEAKERMODE._5POINT1:
+ switch(Settings.Instance.MeterChannelOrdering)
+ {
+ case MeterChannelOrderingType.Standard: // L R | C | LFE | LS RS
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*3 + groupGap*2); // LFE
+ offsets.Add(meterWidth*4 + groupGap*3); // LS
+ offsets.Add(meterWidth*5 + groupGap*3); // RS
+ break;
+ case MeterChannelOrderingType.SeparateLFE: // L R | C | LS RS || LFE
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*5 + groupGap*2 + lfeGap); // LFE
+ offsets.Add(meterWidth*3 + groupGap*2); // LS
+ offsets.Add(meterWidth*4 + groupGap*2); // RS
+ break;
+ case MeterChannelOrderingType.Positional: // LS | L C R | RS || LFE
+ offsets.Add(meterWidth*1 + groupGap); // L
+ offsets.Add(meterWidth*3 + groupGap); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*5 + groupGap*2 + lfeGap); // LFE
+ offsets.Add(0); // LS
+ offsets.Add(meterWidth*4 + groupGap*2); // RS
+ break;
+ }
+ break;
+
+ case FMOD.SPEAKERMODE._7POINT1:
+ switch(Settings.Instance.MeterChannelOrdering)
+ {
+ case MeterChannelOrderingType.Standard: // L R | C | LFE | LS RS | LSR RSR
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*3 + groupGap*2); // LFE
+ offsets.Add(meterWidth*4 + groupGap*3); // LS
+ offsets.Add(meterWidth*5 + groupGap*3); // RS
+ offsets.Add(meterWidth*6 + groupGap*4); // LSR
+ offsets.Add(meterWidth*7 + groupGap*4); // RSR
+ break;
+ case MeterChannelOrderingType.SeparateLFE: // L R | C | LS RS | LSR RSR || LFE
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*7 + groupGap*3 + lfeGap); // LFE
+ offsets.Add(meterWidth*3 + groupGap*2); // LS
+ offsets.Add(meterWidth*4 + groupGap*2); // RS
+ offsets.Add(meterWidth*5 + groupGap*3); // LSR
+ offsets.Add(meterWidth*6 + groupGap*3); // RSR
+ break;
+ case MeterChannelOrderingType.Positional: // LSR LS | L C R | RS RSR || LFE
+ offsets.Add(meterWidth*2 + groupGap); // L
+ offsets.Add(meterWidth*4 + groupGap); // R
+ offsets.Add(meterWidth*3 + groupGap); // C
+ offsets.Add(meterWidth*7 + groupGap*2 + lfeGap); // LFE
+ offsets.Add(meterWidth*1); // LS
+ offsets.Add(meterWidth*5 + groupGap*2); // RS
+ offsets.Add(0); // LSR
+ offsets.Add(meterWidth*6 + groupGap*2); // RSR
+ break;
+ }
+ break;
+
+ case FMOD.SPEAKERMODE._7POINT1POINT4:
+ switch(Settings.Instance.MeterChannelOrdering)
+ {
+ case MeterChannelOrderingType.Standard: // L R | C | LFE | LS RS | LSR RSR | TFL TFR TBL TBR
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*3 + groupGap*2); // LFE
+ offsets.Add(meterWidth*4 + groupGap*3); // LS
+ offsets.Add(meterWidth*5 + groupGap*3); // RS
+ offsets.Add(meterWidth*6 + groupGap*4); // LSR
+ offsets.Add(meterWidth*7 + groupGap*4); // RSR
+ offsets.Add(meterWidth*8 + groupGap*5); // TFL
+ offsets.Add(meterWidth*9 + groupGap*5); // TFR
+ offsets.Add(meterWidth*10 + groupGap*5); // TBL
+ offsets.Add(meterWidth*11 + groupGap*5); // TBR
+ break;
+ case MeterChannelOrderingType.SeparateLFE: // L R | C | LS RS | LSR RSR | TFL TFR TBL TBR || LFE
+ offsets.Add(0); // L
+ offsets.Add(meterWidth*1); // R
+ offsets.Add(meterWidth*2 + groupGap); // C
+ offsets.Add(meterWidth*11 + groupGap*4 + lfeGap); // LFE
+ offsets.Add(meterWidth*3 + groupGap*2); // LS
+ offsets.Add(meterWidth*4 + groupGap*2); // RS
+ offsets.Add(meterWidth*5 + groupGap*3); // LSR
+ offsets.Add(meterWidth*6 + groupGap*3); // RSR
+ offsets.Add(meterWidth*7 + groupGap*4); // TFL
+ offsets.Add(meterWidth*8 + groupGap*4); // TFR
+ offsets.Add(meterWidth*9 + groupGap*4); // TBL
+ offsets.Add(meterWidth*10 + groupGap*4); // TBR
+ break;
+ case MeterChannelOrderingType.Positional: // LSR LS | L C R | RS RSR | TBL TFL TFR TBR || LFE
+ offsets.Add(meterWidth*2 + groupGap); // L
+ offsets.Add(meterWidth*4 + groupGap); // R
+ offsets.Add(meterWidth*3 + groupGap); // C
+ offsets.Add(meterWidth*11 + groupGap*3 + lfeGap); // LFE
+ offsets.Add(meterWidth*1); // LS
+ offsets.Add(meterWidth*5 + groupGap*2); // RS
+ offsets.Add(0); // LSR
+ offsets.Add(meterWidth*6 + groupGap*2); // RSR
+ offsets.Add(meterWidth*8 + groupGap*3); // TFL
+ offsets.Add(meterWidth*9 + groupGap*3); // TFR
+ offsets.Add(meterWidth*7 + groupGap*3); // TBL
+ offsets.Add(meterWidth*10 + groupGap*3); // TBR
+ break;
+ }
+ break;
+ }
+
+ return offsets;
+ }
+ }
+
+ [Flags]
+ private enum TypeFilter
+ {
+ Event = 1,
+ Bank = 2,
+ Parameter = 4,
+ All = Event | Bank | Parameter,
+ }
+
+ public void ChooseEvent(SerializedProperty property)
+ {
+ BeginInspectorPopup(property, TypeFilter.Event);
+
+ SerializedProperty pathProperty = property.FindPropertyRelative("Path");
+
+ if (!string.IsNullOrEmpty(pathProperty.stringValue))
+ {
+ treeView.JumpToEvent(pathProperty.stringValue);
+ }
+ }
+
+ public void ChooseBank(SerializedProperty property)
+ {
+ BeginInspectorPopup(property, TypeFilter.Bank);
+
+ if (!string.IsNullOrEmpty(property.stringValue))
+ {
+ treeView.JumpToBank(property.stringValue);
+ }
+ }
+
+ public void ChooseParameter(SerializedProperty property)
+ {
+ BeginInspectorPopup(property, TypeFilter.Parameter);
+ }
+
+ public void FrameEvent(string path)
+ {
+ treeView.JumpToEvent(path);
+ }
+
+ private void BeginInspectorPopup(SerializedProperty property, TypeFilter typeFilter)
+ {
+ treeView.TypeFilter = typeFilter;
+ outputProperty = property;
+ searchField.SetFocus();
+ treeView.DragEnabled = false;
+ ReadEventCache();
+ }
+
+ private void BeginStandaloneWindow()
+ {
+ treeView.TypeFilter = TypeFilter.All;
+ outputProperty = null;
+ searchField.SetFocus();
+ treeView.DragEnabled = true;
+ isStandaloneWindow = true;
+ }
+
+ public void OnEnable()
+ {
+ if (treeViewState == null)
+ {
+ treeViewState = new TreeView.State();
+ }
+
+ searchField = new SearchField();
+ treeView = new TreeView(treeViewState);
+
+ ReadEventCache();
+
+ searchField.downOrUpArrowKeyPressed += treeView.SetFocus;
+
+ SceneView.duringSceneGui += SceneUpdate;
+
+ EditorApplication.hierarchyWindowItemOnGUI += HierarchyUpdate;
+
+ if (isStandaloneWindow)
+ {
+ EditorUtils.LoadPreviewBanks();
+ }
+
+ IsOpen = true;
+ }
+
+ public void OnDestroy()
+ {
+ if (PreviewEventInstance.isValid())
+ {
+ EditorUtils.PreviewStop(PreviewEventInstance);
+ PreviewEventInstance.clearHandle();
+ }
+
+ if (isStandaloneWindow)
+ {
+ EditorUtils.UnloadPreviewBanks();
+ }
+
+ IsOpen = false;
+ }
+
+ private static bool IsDraggable(UnityEngine.Object data)
+ {
+ return data is EditorEventRef || data is EditorBankRef || data is EditorParamRef;
+ }
+
+ public static bool IsDroppable(UnityEngine.Object[] data)
+ {
+ return data.Length > 0 && IsDraggable(data[0]);
+ }
+
+ // This is an event handler on the hierachy view to handle dragging our objects from the browser
+ private void HierarchyUpdate(int instance, Rect rect)
+ {
+ if (Event.current.type == EventType.DragPerform && rect.Contains(Event.current.mousePosition))
+ {
+ if (IsDroppable(DragAndDrop.objectReferences))
+ {
+ UnityEngine.Object data = DragAndDrop.objectReferences[0];
+
+ GameObject target = EditorUtility.InstanceIDToObject(instance) as GameObject;
+
+ if (data is EditorEventRef)
+ {
+ Undo.SetCurrentGroupName("Add Studio Event Emitter");
+
+ StudioEventEmitter emitter = Undo.AddComponent(target);
+
+ EditorEventRef eventRef = data as EditorEventRef;
+ emitter.EventReference.Path = eventRef.Path;
+ emitter.EventReference.Guid = eventRef.Guid;
+ }
+ else if (data is EditorBankRef)
+ {
+ Undo.SetCurrentGroupName("Add Studio Bank Loader");
+
+ StudioBankLoader loader = Undo.AddComponent(target);
+ loader.Banks = new List();
+ loader.Banks.Add((data as EditorBankRef).Name);
+ }
+ else // data is EditorParamRef
+ {
+ Undo.SetCurrentGroupName("Add Studio Global Parameter Trigger");
+
+ StudioGlobalParameterTrigger trigger = Undo.AddComponent(target);
+ trigger.Parameter = (data as EditorParamRef).Name;
+ }
+
+ Selection.activeObject = target;
+
+ Event.current.Use();
+ }
+ }
+ }
+
+ // This is an event handler on the scene view to handle dragging our objects from the browser
+ // and creating new gameobjects
+ private void SceneUpdate(SceneView sceneView)
+ {
+ if (Event.current.type == EventType.DragPerform && IsDroppable(DragAndDrop.objectReferences))
+ {
+ UnityEngine.Object data = DragAndDrop.objectReferences[0];
+ GameObject newObject;
+
+ if (data is EditorEventRef)
+ {
+ EditorEventRef eventRef = data as EditorEventRef;
+
+ string path = eventRef.Path;
+
+ string name = path.Substring(path.LastIndexOf("/") + 1);
+ newObject = new GameObject(name + " Emitter");
+
+ StudioEventEmitter emitter = newObject.AddComponent();
+ emitter.EventReference.Path = path;
+ emitter.EventReference.Guid = eventRef.Guid;
+
+ Undo.RegisterCreatedObjectUndo(newObject, "Create Studio Event Emitter");
+ }
+ else if (data is EditorBankRef)
+ {
+ newObject = new GameObject("Studio Bank Loader");
+
+ StudioBankLoader loader = newObject.AddComponent();
+ loader.Banks = new List();
+ loader.Banks.Add((data as EditorBankRef).Name);
+
+ Undo.RegisterCreatedObjectUndo(newObject, "Create Studio Bank Loader");
+ }
+ else // data is EditorParamRef
+ {
+ string name = (data as EditorParamRef).Name;
+
+ newObject = new GameObject(name + " Trigger");
+
+ StudioGlobalParameterTrigger trigger = newObject.AddComponent();
+ trigger.Parameter = name;
+
+ Undo.RegisterCreatedObjectUndo(newObject, "Create Studio Global Parameter Trigger");
+ }
+
+ Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
+ object hit = HandleUtility.RaySnap(ray);
+
+ if (hit != null)
+ {
+ newObject.transform.position = ((RaycastHit)hit).point;
+ }
+ else
+ {
+ newObject.transform.position = ray.origin + ray.direction * 10.0f;
+ }
+
+ Selection.activeObject = newObject;
+ Event.current.Use();
+ }
+ else if (Event.current.type == EventType.DragUpdated && IsDroppable(DragAndDrop.objectReferences))
+ {
+ DragAndDrop.visualMode = DragAndDropVisualMode.Move;
+ DragAndDrop.AcceptDrag();
+ Event.current.Use();
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs.meta b/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs.meta
new file mode 100644
index 0000000..226f26d
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5332ad2baabb58844975479e906001c8
+timeCreated: 1432613753
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EventCache.cs b/Assets/Plugins/FMOD/src/Editor/EventCache.cs
new file mode 100644
index 0000000..79e6c14
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventCache.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace FMODUnity
+{
+ public class EventCache : ScriptableObject
+ {
+ [SerializeField]
+ public List EditorBanks;
+ [SerializeField]
+ public List EditorEvents;
+ [SerializeField]
+ public List EditorParameters;
+ [SerializeField]
+ public List MasterBanks;
+ [SerializeField]
+ public List StringsBanks;
+ [SerializeField]
+ private Int64 cacheTime;
+ [SerializeField]
+ public int cacheVersion;
+
+ public DateTime CacheTime
+ {
+ get { return new DateTime(cacheTime); }
+ set { cacheTime = value.Ticks; }
+ }
+
+ public EventCache()
+ {
+ EditorBanks = new List();
+ EditorEvents = new List();
+ EditorParameters = new List();
+ MasterBanks = new List();
+ StringsBanks = new List();
+ cacheTime = 0;
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EventCache.cs.meta b/Assets/Plugins/FMOD/src/Editor/EventCache.cs.meta
new file mode 100644
index 0000000..0ff88ac
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventCache.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d32cf7c32a3ed8347bac48ef5ed56d82
+timeCreated: 1432775088
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EventManager.cs b/Assets/Plugins/FMOD/src/Editor/EventManager.cs
new file mode 100644
index 0000000..b168c6f
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventManager.cs
@@ -0,0 +1,1365 @@
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using UnityEditor.Build;
+using System.Reflection;
+using UnityEditor.Build.Reporting;
+using UnityEngine.SceneManagement;
+
+namespace FMODUnity
+{
+ [InitializeOnLoad]
+ public class EventManager : MonoBehaviour
+ {
+ private const string FMODLabel = "FMOD";
+
+ private const string AssetsFolderName = "Assets";
+
+ private const string CacheAssetName = "FMODStudioCache";
+ public static string CacheAssetFullName =>
+ $"Assets/{RuntimeUtils.PluginBasePath}/Cache/Editor/{CacheAssetName}.asset";
+ private static EventCache eventCache;
+
+ private const string StringBankExtension = "strings.bank";
+ private const string BankExtension = "bank";
+
+#if UNITY_EDITOR
+ [MenuItem("FMOD/Refresh Banks", priority = 1)]
+ public static void RefreshBanks()
+ {
+ string result = UpdateCache();
+
+ if (eventCache != null)
+ {
+ OnCacheChange();
+ if (Settings.Instance.ImportType == ImportType.AssetBundle)
+ {
+ UpdateBankStubAssets(EditorUserBuildSettings.activeBuildTarget);
+ }
+ }
+
+ BankRefresher.HandleBankRefresh(result);
+ }
+#endif
+
+ private static void ClearCache()
+ {
+ eventCache.CacheTime = DateTime.MinValue;
+ eventCache.EditorBanks.Clear();
+ eventCache.EditorEvents.Clear();
+ eventCache.EditorParameters.Clear();
+ eventCache.StringsBanks.Clear();
+ eventCache.MasterBanks.Clear();
+ if (Settings.Instance && Settings.Instance.BanksToLoad != null)
+ Settings.Instance.BanksToLoad.Clear();
+ }
+
+ private static void AffirmEventCache()
+ {
+ if (eventCache == null)
+ {
+ UpdateCache();
+ }
+ }
+
+ private static string UpdateCache()
+ {
+ if (eventCache == null)
+ {
+ eventCache = AssetDatabase.LoadAssetAtPath(CacheAssetFullName, typeof(EventCache)) as EventCache;
+
+ // If new libraries need to be staged, or the staging process is in progress, clear the cache and exit.
+ if (StagingSystem.SourceLibsExist)
+ {
+ if (eventCache != null)
+ {
+ ClearCache();
+ }
+ return null;
+ }
+
+ if (eventCache == null || eventCache.cacheVersion != FMOD.VERSION.number)
+ {
+ RuntimeUtils.DebugLog("FMOD: Event cache is missing or in an old format; creating a new instance.");
+
+ eventCache = ScriptableObject.CreateInstance();
+ eventCache.cacheVersion = FMOD.VERSION.number;
+
+ Directory.CreateDirectory(Path.GetDirectoryName(CacheAssetFullName));
+ AssetDatabase.CreateAsset(eventCache, CacheAssetFullName);
+ }
+ }
+
+ var settings = Settings.Instance;
+ var editorSettings = EditorSettings.Instance;
+
+ if (string.IsNullOrEmpty(settings.SourceBankPath))
+ {
+ ClearCache();
+ return null;
+ }
+
+ string defaultBankFolder = null;
+
+ if (!settings.HasPlatforms)
+ {
+ defaultBankFolder = settings.SourceBankPath;
+ }
+ else
+ {
+ Platform platform = editorSettings.CurrentEditorPlatform;
+
+ if (platform == settings.DefaultPlatform)
+ {
+ platform = settings.PlayInEditorPlatform;
+ }
+
+ defaultBankFolder = RuntimeUtils.GetCommonPlatformPath(Path.Combine(settings.SourceBankPath, platform.BuildDirectory));
+ }
+
+ string[] bankPlatforms = EditorUtils.GetBankPlatforms();
+ string[] bankFolders = new string[bankPlatforms.Length];
+ for (int i = 0; i < bankPlatforms.Length; i++)
+ {
+ bankFolders[i] = RuntimeUtils.GetCommonPlatformPath(Path.Combine(settings.SourceBankPath, bankPlatforms[i]));
+ }
+
+ // Get all banks and set cache time to most recent write time
+ List bankFileNames = new List(Directory.GetFiles(defaultBankFolder, "*.bank", SearchOption.AllDirectories));
+ DateTime lastWriteTime = bankFileNames.Max(fileName => File.GetLastWriteTime(fileName));
+
+ // Exit early if cache is up to date
+ if (lastWriteTime == eventCache.CacheTime)
+ {
+ return null;
+ }
+
+ eventCache.CacheTime = lastWriteTime;
+
+ // Remove string banks from list
+ bankFileNames.RemoveAll(x => x.Contains(".strings"));
+
+ List stringBanks = new List(0);
+ try
+ {
+ var files = Directory.GetFiles(defaultBankFolder, "*." + StringBankExtension, SearchOption.AllDirectories);
+ stringBanks = new List(files);
+ }
+ catch
+ {
+ }
+
+ // Strip out OSX resource-fork files that appear on FAT32
+ stringBanks.RemoveAll((x) => Path.GetFileName(x).StartsWith("._"));
+
+ if (stringBanks.Count == 0)
+ {
+ ClearCache();
+ return string.Format("Directory {0} doesn't contain any banks.\nBuild the banks in Studio or check the path in the settings.", defaultBankFolder);
+ }
+
+ // Stop editor preview so no stale data being held
+ EditorUtils.StopAllPreviews();
+
+ bool reloadPreviewBanks = EditorUtils.PreviewBanksLoaded;
+ if (reloadPreviewBanks)
+ {
+ EditorUtils.UnloadPreviewBanks();
+ }
+
+ List reducedStringBanksList = new List();
+ HashSet stringBankGuids = new HashSet();
+
+ foreach (string stringBankPath in stringBanks)
+ {
+ FMOD.Studio.Bank stringBank;
+ EditorUtils.CheckResult(EditorUtils.System.loadBankFile(stringBankPath, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out stringBank));
+
+ if (!stringBank.isValid())
+ {
+ return string.Format("{0} is not a valid bank.", stringBankPath);
+ }
+ else
+ {
+ // Unload the strings bank
+ stringBank.unload();
+ }
+
+ FMOD.GUID stringBankGuid;
+ EditorUtils.CheckResult(stringBank.getID(out stringBankGuid));
+
+ if (!stringBankGuids.Add(stringBankGuid))
+ {
+ // If we encounter multiple string banks with the same GUID then only use the first. This handles the scenario where
+ // a Studio project is cloned and extended for DLC with a new master bank name.
+ continue;
+ }
+
+ reducedStringBanksList.Add(stringBankPath);
+ }
+
+ stringBanks = reducedStringBanksList;
+
+ // Reload the strings banks
+ List loadedStringsBanks = new List();
+
+ bool eventRenameOccurred = false;
+
+ try
+ {
+ AssetDatabase.StartAssetEditing();
+
+ eventCache.EditorBanks.ForEach((x) => x.Exists = false);
+ HashSet masterBankFileNames = new HashSet();
+
+ foreach (string stringBankPath in stringBanks)
+ {
+ FMOD.Studio.Bank stringBank;
+ EditorUtils.CheckResult(EditorUtils.System.loadBankFile(stringBankPath, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out stringBank));
+
+ if (!stringBank.isValid())
+ {
+ ClearCache();
+ return string.Format("{0} is not a valid bank.", stringBankPath);
+ }
+
+ loadedStringsBanks.Add(stringBank);
+
+ FileInfo stringBankFileInfo = new FileInfo(stringBankPath);
+
+ string masterBankFileName = Path.GetFileName(stringBankPath).Replace(StringBankExtension, BankExtension);
+ masterBankFileNames.Add(masterBankFileName);
+
+ EditorBankRef stringsBankRef = eventCache.StringsBanks.Find(x => RuntimeUtils.GetCommonPlatformPath(stringBankPath) == x.Path);
+
+ if (stringsBankRef == null)
+ {
+ stringsBankRef = ScriptableObject.CreateInstance();
+ stringsBankRef.FileSizes = new List();
+ AssetDatabase.AddObjectToAsset(stringsBankRef, eventCache);
+ AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(stringsBankRef));
+ eventCache.EditorBanks.Add(stringsBankRef);
+ eventCache.StringsBanks.Add(stringsBankRef);
+ }
+
+ stringsBankRef.SetPath(stringBankPath, defaultBankFolder);
+ string studioPath;
+ stringBank.getPath(out studioPath);
+ stringsBankRef.SetStudioPath(studioPath);
+ stringsBankRef.LastModified = stringBankFileInfo.LastWriteTime;
+ stringsBankRef.Exists = true;
+ stringsBankRef.FileSizes.Clear();
+
+ if (Settings.Instance.HasPlatforms)
+ {
+ for (int i = 0; i < bankPlatforms.Length; i++)
+ {
+ stringsBankRef.FileSizes.Add(new EditorBankRef.NameValuePair(bankPlatforms[i], stringBankFileInfo.Length));
+ }
+ }
+ else
+ {
+ stringsBankRef.FileSizes.Add(new EditorBankRef.NameValuePair("", stringBankFileInfo.Length));
+ }
+ }
+
+ eventCache.EditorParameters.ForEach((x) => x.Exists = false);
+
+ foreach (string bankFileName in bankFileNames)
+ {
+ EditorBankRef bankRef = eventCache.EditorBanks.Find((x) => RuntimeUtils.GetCommonPlatformPath(bankFileName) == x.Path);
+
+ // New bank we've never seen before
+ if (bankRef == null)
+ {
+ bankRef = ScriptableObject.CreateInstance();
+ AssetDatabase.AddObjectToAsset(bankRef, eventCache);
+ AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(bankRef));
+
+ bankRef.SetPath(bankFileName, defaultBankFolder);
+ bankRef.LastModified = DateTime.MinValue;
+ bankRef.FileSizes = new List();
+
+ eventCache.EditorBanks.Add(bankRef);
+ }
+
+ bankRef.Exists = true;
+
+ FileInfo bankFileInfo = new FileInfo(bankFileName);
+
+ // Update events from this bank if it has been modified,
+ // or it is a master bank (so that we get any global parameters)
+ if (bankRef.LastModified != bankFileInfo.LastWriteTime
+ || masterBankFileNames.Contains(Path.GetFileName(bankFileName)))
+ {
+ bankRef.LastModified = bankFileInfo.LastWriteTime;
+ UpdateCacheBank(bankRef, ref eventRenameOccurred);
+ }
+
+ // Update file sizes
+ bankRef.FileSizes.Clear();
+ if (Settings.Instance.HasPlatforms)
+ {
+ for (int i = 0; i < bankPlatforms.Length; i++)
+ {
+ string platformBankPath = RuntimeUtils.GetCommonPlatformPath(bankFolders[i] + bankFileName.Replace(defaultBankFolder, ""));
+ var fileInfo = new FileInfo(platformBankPath);
+ if (fileInfo.Exists)
+ {
+ bankRef.FileSizes.Add(new EditorBankRef.NameValuePair(bankPlatforms[i], fileInfo.Length));
+ }
+ }
+ }
+ else
+ {
+ string platformBankPath = RuntimeUtils.GetCommonPlatformPath(Path.Combine(Settings.Instance.SourceBankPath, bankFileName));
+ var fileInfo = new FileInfo(platformBankPath);
+ if (fileInfo.Exists)
+ {
+ bankRef.FileSizes.Add(new EditorBankRef.NameValuePair("", fileInfo.Length));
+ }
+ }
+
+ if (masterBankFileNames.Contains(bankFileInfo.Name))
+ {
+ if (!eventCache.MasterBanks.Exists(x => RuntimeUtils.GetCommonPlatformPath(bankFileName) == x.Path))
+ {
+ eventCache.MasterBanks.Add(bankRef);
+ }
+ }
+ }
+
+ // Remove any stale entries from bank, event and parameter lists
+ eventCache.EditorBanks.FindAll((bankRef) => !bankRef.Exists).ForEach((bankRef) =>
+ {
+ eventCache.EditorEvents.ForEach((eventRef) => eventRef.Banks.Remove(bankRef));
+ DestroyImmediate(bankRef, true);
+ });
+ eventCache.EditorBanks.RemoveAll((x) => x == null);
+ eventCache.MasterBanks.RemoveAll((x) => x == null);
+ eventCache.StringsBanks.RemoveAll((x) => x == null);
+
+ eventCache.EditorEvents.FindAll((eventRef) => eventRef.Banks.Count == 0).ForEach((eventRef) =>
+ {
+ eventRef.Parameters.ForEach((paramRef) => DestroyImmediate(paramRef, true));
+ DestroyImmediate(eventRef, true);
+ });
+ eventCache.EditorEvents.RemoveAll((x) => x == null);
+
+ eventCache.EditorParameters.FindAll((paramRef) => !paramRef.Exists).ForEach((paramRef) =>
+ {
+ DestroyImmediate(paramRef, true);
+ });
+ eventCache.EditorParameters.RemoveAll((x) => x == null);
+
+ AssetDatabase.SaveAssets();
+ }
+ finally
+ {
+ // Unload the strings banks
+ loadedStringsBanks.ForEach(x => x.unload());
+ AssetDatabase.StopAssetEditing();
+
+ if (reloadPreviewBanks)
+ {
+ EditorUtils.LoadPreviewBanks();
+ }
+
+ RuntimeUtils.DebugLog("FMOD: Cache updated.");
+ }
+
+ if (eventRenameOccurred)
+ {
+ EditorApplication.delayCall += ShowEventsRenamedDialog;
+ }
+
+ return null;
+ }
+
+ private static void ShowEventsRenamedDialog()
+ {
+ bool runUpdater = EditorUtility.DisplayDialog("Events Renamed",
+ string.Format("Some events have been renamed in FMOD Studio. Do you want to run {0} " +
+ "to find and update any references to them?", EventReferenceUpdater.MenuPath), "Yes", "No");
+
+ if (runUpdater)
+ {
+ EventReferenceUpdater.ShowWindow();
+ }
+ }
+
+ private static void UpdateCacheBank(EditorBankRef bankRef, ref bool renameOccurred)
+ {
+ // Clear out any cached events from this bank
+ eventCache.EditorEvents.ForEach((x) => x.Banks.Remove(bankRef));
+
+ FMOD.Studio.Bank bank;
+ FMOD.RESULT loadResult = EditorUtils.System.loadBankFile(bankRef.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out bank);
+
+ if (loadResult == FMOD.RESULT.OK)
+ {
+ // Get studio path
+ string studioPath;
+ bank.getPath(out studioPath);
+ bankRef.SetStudioPath(studioPath);
+
+ // Iterate all events in the bank and cache them
+ FMOD.Studio.EventDescription[] eventList;
+ var result = bank.getEventList(out eventList);
+ if (result == FMOD.RESULT.OK)
+ {
+ foreach (var eventDesc in eventList)
+ {
+ string path;
+ result = eventDesc.getPath(out path);
+
+ FMOD.GUID guid;
+ eventDesc.getID(out guid);
+
+ EditorEventRef eventRef = eventCache.EditorEvents.Find((x) => x.Path == path);
+ if (eventRef == null)
+ {
+ eventRef = ScriptableObject.CreateInstance();
+ AssetDatabase.AddObjectToAsset(eventRef, eventCache);
+ AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(eventRef));
+ eventRef.Banks = new List();
+ eventCache.EditorEvents.Add(eventRef);
+ eventRef.Parameters = new List();
+
+ if (!renameOccurred)
+ {
+ EditorEventRef eventRefByGuid = eventCache.EditorEvents.Find((x) => x.Guid == guid);
+
+ if (eventRefByGuid != null)
+ {
+ renameOccurred = true;
+ }
+ }
+ }
+ else if (eventRef.Guid != guid)
+ {
+ renameOccurred = true;
+ }
+
+ eventRef.Banks.Add(bankRef);
+ eventRef.Guid = guid;
+ eventRef.Path = eventRef.name = path;
+ eventDesc.is3D(out eventRef.Is3D);
+ eventDesc.isOneshot(out eventRef.IsOneShot);
+ eventDesc.isStream(out eventRef.IsStream);
+ eventDesc.getMinMaxDistance(out eventRef.MinDistance, out eventRef.MaxDistance);
+ eventDesc.getLength(out eventRef.Length);
+ int paramCount = 0;
+ eventDesc.getParameterDescriptionCount(out paramCount);
+ eventRef.Parameters.ForEach((x) => x.Exists = false);
+ for (int paramIndex = 0; paramIndex < paramCount; paramIndex++)
+ {
+ FMOD.Studio.PARAMETER_DESCRIPTION param;
+ eventDesc.getParameterDescriptionByIndex(paramIndex, out param);
+ // Skip if readonly and not global
+ if ((param.flags & FMOD.Studio.PARAMETER_FLAGS.READONLY) != 0 && (param.flags & FMOD.Studio.PARAMETER_FLAGS.GLOBAL) == 0)
+ {
+ continue;
+ }
+ EditorParamRef paramRef = eventRef.Parameters.Find((x) => x.ID.Equals(param.id));
+ if (paramRef == null)
+ {
+ paramRef = ScriptableObject.CreateInstance();
+ AssetDatabase.AddObjectToAsset(paramRef, eventCache);
+ AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(paramRef));
+ eventRef.Parameters.Add(paramRef);
+ }
+
+ InitializeParamRef(paramRef, param, (labelIndex) => {
+ string label;
+ eventDesc.getParameterLabelByIndex(paramIndex, labelIndex, out label);
+ return label;
+ });
+
+ paramRef.name = "parameter:/" + Path.GetFileName(path) + "/" + paramRef.Name;
+ paramRef.Exists = true;
+ }
+ eventRef.Parameters.FindAll((x) => !x.Exists).ForEach((x) => DestroyImmediate(x, true));
+ eventRef.Parameters.RemoveAll((x) => x == null);
+ }
+ }
+
+ // Update global parameter list for each bank
+ FMOD.Studio.PARAMETER_DESCRIPTION[] parameterDescriptions;
+ result = EditorUtils.System.getParameterDescriptionList(out parameterDescriptions);
+ if (result == FMOD.RESULT.OK)
+ {
+ for (int i = 0; i < parameterDescriptions.Length; i++)
+ {
+ FMOD.Studio.PARAMETER_DESCRIPTION param = parameterDescriptions[i];
+ if ((param.flags & FMOD.Studio.PARAMETER_FLAGS.GLOBAL) == FMOD.Studio.PARAMETER_FLAGS.GLOBAL)
+ {
+ EditorParamRef paramRef = eventCache.EditorParameters.Find((x) => x.ID.Equals(param.id));
+ if (paramRef == null)
+ {
+ paramRef = ScriptableObject.CreateInstance();
+ AssetDatabase.AddObjectToAsset(paramRef, eventCache);
+ AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(paramRef));
+ eventCache.EditorParameters.Add(paramRef);
+ }
+
+ InitializeParamRef(paramRef, param, (index) => {
+ string label;
+ EditorUtils.System.getParameterLabelByID(param.id, index, out label);
+ return label;
+ });
+
+ paramRef.name = "parameter:/" + param.name;
+ EditorUtils.System.lookupPath(param.guid, out paramRef.StudioPath);
+ paramRef.Exists = true;
+ }
+ }
+ }
+ bank.unload();
+ }
+ else
+ {
+ RuntimeUtils.DebugLogError(string.Format("FMOD Studio: Unable to load {0}: {1}", bankRef.Name, FMOD.Error.String(loadResult)));
+ eventCache.CacheTime = DateTime.MinValue;
+ }
+ }
+
+ private static void InitializeParamRef(EditorParamRef paramRef, FMOD.Studio.PARAMETER_DESCRIPTION description,
+ Func getLabel)
+ {
+ paramRef.Name = description.name;
+ paramRef.Min = description.minimum;
+ paramRef.Max = description.maximum;
+ paramRef.Default = description.defaultvalue;
+ paramRef.ID = description.id;
+ paramRef.IsGlobal = (description.flags & FMOD.Studio.PARAMETER_FLAGS.GLOBAL) != 0;
+
+ if ((description.flags & FMOD.Studio.PARAMETER_FLAGS.LABELED) != 0)
+ {
+ paramRef.Type = ParameterType.Labeled;
+ paramRef.Labels = GetParameterLabels(description, getLabel);
+ }
+ else if ((description.flags & FMOD.Studio.PARAMETER_FLAGS.DISCRETE) != 0)
+ {
+ paramRef.Type = ParameterType.Discrete;
+ }
+ else
+ {
+ paramRef.Type = ParameterType.Continuous;
+ }
+ }
+
+ private static string[] GetParameterLabels(FMOD.Studio.PARAMETER_DESCRIPTION parameterDescription,
+ Func getLabel)
+ {
+ string[] labels = new string[(int)parameterDescription.maximum + 1];
+
+ for (int i = 0; i <= parameterDescription.maximum; ++i)
+ {
+ labels[i] = getLabel(i);
+ }
+
+ return labels;
+ }
+
+ static EventManager()
+ {
+ BuildStatusWatcher.OnBuildStarted += () => {
+ BuildTargetChanged();
+ CopyToStreamingAssets(EditorUserBuildSettings.activeBuildTarget);
+ };
+ BuildStatusWatcher.OnBuildEnded += () => {
+ UpdateBankStubAssets(EditorUserBuildSettings.activeBuildTarget);
+ };
+ }
+
+ public static void Startup()
+ {
+ EventReference.GuidLookupDelegate = (path) => {
+ EditorEventRef editorEventRef = EventFromPath(path);
+
+ return (editorEventRef != null) ? editorEventRef.Guid : new FMOD.GUID();
+ };
+
+ // Avoid throwing exceptions so we don't stop other startup code from running
+ try
+ {
+ RefreshBanks();
+ }
+ catch (Exception e)
+ {
+ RuntimeUtils.DebugLogException(e);
+ }
+ }
+
+ public static void ValidateEventReferences(Scene scene)
+ {
+ foreach (GameObject gameObject in scene.GetRootGameObjects())
+ {
+ MonoBehaviour[] behaviours = gameObject.GetComponentsInChildren(true);
+
+ foreach (MonoBehaviour behaviour in behaviours)
+ {
+ if (behaviour != null)
+ {
+ if (behaviour is StudioEventEmitter)
+ {
+ ValidateEventEmitter(behaviour as StudioEventEmitter, scene);
+ }
+ else
+ {
+ ValidateEventReferenceFields(behaviour, scene);
+ }
+ }
+ }
+ }
+ }
+
+ private static readonly string UpdaterInstructions =
+ string.Format("Please run {0} to resolve this issue.", EventReferenceUpdater.MenuPath);
+
+ private static void ValidateEventEmitter(StudioEventEmitter emitter, Scene scene)
+ {
+#pragma warning disable 0618 // Suppress a warning about using the obsolete StudioEventEmitter.Event field
+ if (!string.IsNullOrEmpty(emitter.Event))
+#pragma warning restore 0618
+ {
+ RuntimeUtils.DebugLogWarningFormat("FMOD: A Studio Event Emitter in scene '{0}' on GameObject '{1}' is using the "
+ + "obsolete Event field. {2}",
+ scene.name, EditorUtils.GameObjectPath(emitter), UpdaterInstructions);
+ }
+
+ bool changed;
+ if (!ValidateEventReference(ref emitter.EventReference, emitter, scene, out changed))
+ {
+ RuntimeUtils.DebugLogWarningFormat(
+ "FMOD: A Studio Event Emitter in scene '{0}' on GameObject '{1}' has an invalid event reference: {2}",
+ scene.name, EditorUtils.GameObjectPath(emitter), emitter.EventReference);
+ }
+ }
+
+ private static void ValidateEventReferenceFields(MonoBehaviour behaviour, Scene scene)
+ {
+ Type type = behaviour.GetType();
+
+ FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+
+ foreach (FieldInfo field in fields)
+ {
+#pragma warning disable 0618 // Suppress a warning about using the obsolete EventRefAttribute class
+ if (EditorUtils.HasAttribute(field))
+#pragma warning restore 0618
+ {
+ RuntimeUtils.DebugLogWarningFormat("FMOD: A component of type {0} in scene '{1}' on GameObject '{2}' has an "
+ + "obsolete [EventRef] attribute on field {3}. {4}",
+ type.Name, scene.name, EditorUtils.GameObjectPath(behaviour), field.Name,
+ UpdaterInstructions);
+ }
+ else if (field.FieldType == typeof(EventReference))
+ {
+ EventReference eventReference = (EventReference)field.GetValue(behaviour);
+
+ bool changed;
+ if (!ValidateEventReference(ref eventReference, behaviour, scene, out changed))
+ {
+ RuntimeUtils.DebugLogWarningFormat(
+ "FMOD: A component of type {0} in scene '{1}' on GameObject '{2}' has an "
+ + "invalid event reference in field '{3}': {4}",
+ type.Name, scene.name, EditorUtils.GameObjectPath(behaviour), field.Name, eventReference);
+ }
+
+ if (changed)
+ {
+ field.SetValue(behaviour, eventReference);
+ }
+ }
+ }
+ }
+
+ // Returns true if eventReference is valid, sets changed if eventReference was changed
+ private static bool ValidateEventReference(ref EventReference eventReference,
+ Component parent, Scene scene, out bool changed)
+ {
+ changed = false;
+
+ if (eventReference.IsNull)
+ {
+ return true;
+ }
+
+ EditorEventRef editorEventRef;
+
+ EventLinkage eventLinkage = GetEventLinkage(eventReference);
+
+ if (eventLinkage == EventLinkage.GUID)
+ {
+ editorEventRef = EventFromGUID(eventReference.Guid);
+
+ if (editorEventRef == null)
+ {
+ return false;
+ }
+
+ if (eventReference.Path != editorEventRef.Path)
+ {
+ RuntimeUtils.DebugLogWarningFormat(
+ "FMOD: EventReference path '{0}' doesn't match GUID {1} on object '{2}' in scene '{3}'. {4}",
+ eventReference.Path, eventReference.Guid, EditorUtils.GameObjectPath(parent), scene.name,
+ UpdaterInstructions);
+ }
+
+ return true;
+ }
+ else if (eventLinkage == EventLinkage.Path)
+ {
+ editorEventRef = EventFromPath(eventReference.Path);
+
+ if (editorEventRef == null)
+ {
+ return false;
+ }
+
+ if (eventReference.Guid != editorEventRef.Guid)
+ {
+ RuntimeUtils.DebugLogWarningFormat(
+ "FMOD: Changing EventReference GUID to {0} to match path '{1}' on object '{2}' in scene '{3}'. {4}",
+ editorEventRef.Guid, eventReference.Path, EditorUtils.GameObjectPath(parent), scene.name,
+ UpdaterInstructions);
+
+ eventReference.Guid = editorEventRef.Guid;
+ EditorUtility.SetDirty(parent);
+
+ changed = true;
+ }
+
+ return true;
+ }
+ else
+ {
+ throw new NotSupportedException("Unrecognized EventLinkage: " + eventLinkage);
+ }
+ }
+
+ public static void CopyToStreamingAssets(BuildTarget buildTarget)
+ {
+ if (Settings.Instance.ImportType == ImportType.AssetBundle && BuildPipeline.isBuildingPlayer)
+ {
+ return;
+ }
+
+ if (string.IsNullOrEmpty(Settings.Instance.SourceBankPath))
+ return;
+
+ Platform platform = EditorSettings.Instance.GetPlatform(buildTarget);
+
+ if (platform == Settings.Instance.DefaultPlatform)
+ {
+ RuntimeUtils.DebugLogWarningFormat("FMOD Studio: copy banks for platform {0} : Unsupported platform", buildTarget);
+ return;
+ }
+
+ string bankTargetFolder =
+ Settings.Instance.ImportType == ImportType.StreamingAssets
+ ? Settings.Instance.TargetPath
+ : Application.dataPath + (string.IsNullOrEmpty(Settings.Instance.TargetAssetPath) ? "" : '/' + Settings.Instance.TargetAssetPath);
+ bankTargetFolder = RuntimeUtils.GetCommonPlatformPath(bankTargetFolder);
+ Directory.CreateDirectory(bankTargetFolder);
+
+ string bankTargetExtension =
+ Settings.Instance.ImportType == ImportType.StreamingAssets
+ ? ".bank"
+ : ".bytes";
+
+ string bankSourceFolder =
+ Settings.Instance.HasPlatforms
+ ? Settings.Instance.SourceBankPath + '/' + platform.BuildDirectory
+ : Settings.Instance.SourceBankPath;
+ bankSourceFolder = RuntimeUtils.GetCommonPlatformPath(bankSourceFolder);
+
+ if (Path.GetFullPath(bankTargetFolder).TrimEnd('/').ToUpperInvariant() ==
+ Path.GetFullPath(bankSourceFolder).TrimEnd('/').ToUpperInvariant())
+ {
+ return;
+ }
+
+ bool madeChanges = false;
+
+ try
+ {
+ // Clean out any stale .bank files
+ string[] existingBankFiles =
+ Directory.GetFiles(bankTargetFolder, "*" + bankTargetExtension, SearchOption.AllDirectories);
+
+ foreach (string bankFilePath in existingBankFiles)
+ {
+ string bankName = EditorBankRef.CalculateName(bankFilePath, bankTargetFolder);
+
+ if (!eventCache.EditorBanks.Exists(x => x.Name == bankName))
+ {
+ string assetPath = bankFilePath.Replace(Application.dataPath, AssetsFolderName);
+
+ if (AssetHasLabel(assetPath, FMODLabel))
+ {
+ AssetDatabase.MoveAssetToTrash(assetPath);
+ madeChanges = true;
+ }
+ }
+ }
+
+ // Copy over any files that don't match timestamp or size or don't exist
+ AssetDatabase.StartAssetEditing();
+ foreach (var bankRef in eventCache.EditorBanks)
+ {
+ string sourcePath = bankSourceFolder + "/" + bankRef.Name + ".bank";
+ string targetPathRelative = bankRef.Name + bankTargetExtension;
+ string targetPathFull = bankTargetFolder + "/" + targetPathRelative;
+
+ FileInfo sourceInfo = new FileInfo(sourcePath);
+ FileInfo targetInfo = new FileInfo(targetPathFull);
+
+ if (!targetInfo.Exists ||
+ sourceInfo.Length != targetInfo.Length ||
+ sourceInfo.LastWriteTime != targetInfo.LastWriteTime)
+ {
+ if (targetInfo.Exists)
+ {
+ targetInfo.IsReadOnly = false;
+ }
+ else
+ {
+ EnsureFoldersExist(targetPathRelative, bankTargetFolder);
+ }
+
+ File.Copy(sourcePath, targetPathFull, true);
+ targetInfo = new FileInfo(targetPathFull);
+ targetInfo.IsReadOnly = false;
+ targetInfo.LastWriteTime = sourceInfo.LastWriteTime;
+
+ madeChanges = true;
+
+ string assetString = targetPathFull.Replace(Application.dataPath, "Assets");
+ AssetDatabase.ImportAsset(assetString);
+ UnityEngine.Object obj = AssetDatabase.LoadAssetAtPath(assetString);
+ AssetDatabase.SetLabels(obj, new string[] { FMODLabel });
+ }
+ }
+
+ RemoveEmptyFMODFolders(bankTargetFolder);
+ }
+ catch (Exception exception)
+ {
+ RuntimeUtils.DebugLogErrorFormat("FMOD Studio: copy banks for platform {0} : copying banks from {1} to {2}",
+ platform.DisplayName, bankSourceFolder, bankTargetFolder);
+ RuntimeUtils.DebugLogException(exception);
+ return;
+ }
+ finally
+ {
+ AssetDatabase.StopAssetEditing();
+ }
+
+ if (madeChanges)
+ {
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ RuntimeUtils.DebugLogFormat("FMOD Studio: copy banks for platform {0} : copying banks from {1} to {2} succeeded",
+ platform.DisplayName, bankSourceFolder, bankTargetFolder);
+ }
+ }
+
+ public static void UpdateBankStubAssets(BuildTarget buildTarget)
+ {
+ if (Settings.Instance.ImportType != ImportType.AssetBundle
+ || string.IsNullOrEmpty(Settings.Instance.SourceBankPath))
+ {
+ return;
+ }
+
+ Platform platform = EditorSettings.Instance.GetPlatform(buildTarget);
+
+ if (platform == Settings.Instance.DefaultPlatform)
+ {
+ Debug.LogWarningFormat("FMOD: Updating bank stubs: Unsupported platform {0}", buildTarget);
+ return;
+ }
+
+ string bankTargetFolder = Application.dataPath;
+
+ if (!string.IsNullOrEmpty(Settings.Instance.TargetAssetPath))
+ {
+ bankTargetFolder += "/" + Settings.Instance.TargetAssetPath;
+ }
+
+ bankTargetFolder = RuntimeUtils.GetCommonPlatformPath(bankTargetFolder);
+
+ string bankSourceFolder = Settings.Instance.SourceBankPath;
+
+ if (Settings.Instance.HasPlatforms)
+ {
+ bankSourceFolder += "/" + platform.BuildDirectory;
+ }
+
+ bankSourceFolder = RuntimeUtils.GetCommonPlatformPath(bankSourceFolder);
+
+ if (Path.GetFullPath(bankTargetFolder).TrimEnd('/').ToUpperInvariant() ==
+ Path.GetFullPath(bankSourceFolder).TrimEnd('/').ToUpperInvariant())
+ {
+ return;
+ }
+
+ bool madeChanges = false;
+
+ Directory.CreateDirectory(bankTargetFolder);
+
+ try
+ {
+ const string BankAssetExtension = ".bytes";
+
+ // Clean out any stale stubs
+ string[] existingBankFiles =
+ Directory.GetFiles(bankTargetFolder, "*" + BankAssetExtension, SearchOption.AllDirectories);
+
+ foreach (string bankFilePath in existingBankFiles)
+ {
+ string bankName = EditorBankRef.CalculateName(bankFilePath, bankTargetFolder);
+
+ if (!eventCache.EditorBanks.Exists(x => x.Name == bankName))
+ {
+ string assetPath = bankFilePath.Replace(Application.dataPath, AssetsFolderName);
+
+ if (AssetHasLabel(assetPath, FMODLabel))
+ {
+ AssetDatabase.MoveAssetToTrash(assetPath);
+ madeChanges = true;
+ }
+ }
+ }
+
+ // Create any stubs that don't exist, and ensure any that do exist have the correct data
+ AssetDatabase.StartAssetEditing();
+ foreach (var bankRef in eventCache.EditorBanks)
+ {
+ string sourcePath = bankSourceFolder + "/" + bankRef.Name + ".bank";
+ string targetPathRelative = bankRef.Name + BankAssetExtension;
+ string targetPathFull = bankTargetFolder + "/" + targetPathRelative;
+
+ EnsureFoldersExist(targetPathRelative, bankTargetFolder);
+
+ FileInfo targetInfo = new FileInfo(targetPathFull);
+
+ string stubData = RuntimeManager.BankStubPrefix + bankRef.Name;
+
+ // Minimise asset database refreshing by only writing the stub if necessary
+ bool writeStub;
+
+ if (targetInfo.Exists && targetInfo.Length == stubData.Length)
+ {
+ using (StreamReader reader = targetInfo.OpenText())
+ {
+ string contents = reader.ReadToEnd();
+ writeStub = (contents != stubData);
+ }
+ }
+ else
+ {
+ writeStub = true;
+ }
+
+ if (writeStub)
+ {
+ // Create or update the stub
+ using (StreamWriter writer = targetInfo.CreateText())
+ {
+ writer.Write(stubData);
+ }
+
+ madeChanges = true;
+
+ if (!targetInfo.Exists)
+ {
+ string assetPath = targetPathFull.Replace(Application.dataPath, "Assets");
+ AssetDatabase.ImportAsset(assetPath);
+
+ UnityEngine.Object obj = AssetDatabase.LoadAssetAtPath(assetPath);
+ AssetDatabase.SetLabels(obj, new string[] { FMODLabel });
+ }
+ }
+ }
+ RemoveEmptyFMODFolders(bankTargetFolder);
+ }
+ catch (Exception exception)
+ {
+ Debug.LogErrorFormat("FMOD: Updating bank stubs in {0} to match {1}",
+ bankTargetFolder, bankSourceFolder);
+ Debug.LogException(exception);
+ return;
+ }
+ finally
+ {
+ AssetDatabase.StopAssetEditing();
+ }
+
+ if (madeChanges)
+ {
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ Debug.LogFormat("FMOD: Updated bank stubs in {0} to match {1}", bankTargetFolder, bankSourceFolder);
+ }
+ }
+
+ private static void EnsureFoldersExist(string filePath, string basePath)
+ {
+ string dataPath = Application.dataPath + "/";
+
+ if (!basePath.StartsWith(dataPath))
+ {
+ throw new ArgumentException(
+ string.Format("Base path {0} is not within the Assets folder", basePath), "basePath");
+ }
+
+ int lastSlash = filePath.LastIndexOf('/');
+
+ if (lastSlash == -1)
+ {
+ // No folders
+ return;
+ }
+
+ string assetString = filePath.Substring(0, lastSlash);
+
+ string[] folders = assetString.Split('/');
+ string parentFolder = "Assets/" + basePath.Substring(dataPath.Length);
+
+ for (int i = 0; i < folders.Length; ++i)
+ {
+ string folderPath = parentFolder + "/" + folders[i];
+
+ if (!AssetDatabase.IsValidFolder(folderPath))
+ {
+ AssetDatabase.CreateFolder(parentFolder, folders[i]);
+
+ var folder = AssetDatabase.LoadAssetAtPath(folderPath);
+ AssetDatabase.SetLabels(folder, new string[] { FMODLabel });
+ }
+
+ parentFolder = folderPath;
+ }
+ }
+
+ private static void BuildTargetChanged()
+ {
+ RefreshBanks();
+ #if UNITY_ANDROID
+ Settings.Instance.AndroidUseOBB = PlayerSettings.Android.useAPKExpansionFiles;
+ #endif
+ }
+
+ private static void OnCacheChange()
+ {
+ List masterBanks = new List();
+ List banks = new List();
+
+ var settings = Settings.Instance;
+ bool hasChanged = false;
+
+ foreach (EditorBankRef bankRef in eventCache.MasterBanks)
+ {
+ masterBanks.Add(bankRef.Name);
+ }
+
+ if (!CompareLists(masterBanks, settings.MasterBanks))
+ {
+ settings.MasterBanks.Clear();
+ settings.MasterBanks.AddRange(masterBanks);
+ hasChanged = true;
+ }
+
+ foreach (var bankRef in eventCache.EditorBanks)
+ {
+ if (!eventCache.MasterBanks.Contains(bankRef) &&
+ !eventCache.StringsBanks.Contains(bankRef))
+ {
+ banks.Add(bankRef.Name);
+ }
+ }
+ banks.Sort((a, b) => string.Compare(a, b, StringComparison.CurrentCultureIgnoreCase));
+
+ if (!CompareLists(banks, settings.Banks))
+ {
+ settings.Banks.Clear();
+ settings.Banks.AddRange(banks);
+ hasChanged = true;
+ }
+
+ if (hasChanged)
+ {
+ EditorUtility.SetDirty(settings);
+ }
+ }
+
+ public static DateTime CacheTime
+ {
+ get
+ {
+ if (eventCache != null)
+ {
+ return eventCache.CacheTime;
+ }
+ else
+ {
+ return DateTime.MinValue;
+ }
+ }
+ }
+
+ public static List Events
+ {
+ get
+ {
+ AffirmEventCache();
+ return eventCache.EditorEvents;
+ }
+ }
+
+ public static List Banks
+ {
+ get
+ {
+ AffirmEventCache();
+ return eventCache.EditorBanks;
+ }
+ }
+
+ public static List Parameters
+ {
+ get
+ {
+ AffirmEventCache();
+ return eventCache.EditorParameters;
+ }
+ }
+
+ public static List MasterBanks
+ {
+ get
+ {
+ AffirmEventCache();
+ return eventCache.MasterBanks;
+ }
+ }
+
+ public static bool IsLoaded
+ {
+ get
+ {
+ return Settings.Instance.SourceBankPath != null;
+ }
+ }
+
+ public static bool IsValid
+ {
+ get
+ {
+ AffirmEventCache();
+ return eventCache.CacheTime != DateTime.MinValue;
+ }
+ }
+
+ public static bool IsInitialized
+ {
+ get
+ {
+ return eventCache != null;
+ }
+ }
+
+ public static EventLinkage GetEventLinkage(EventReference eventReference)
+ {
+ if (Settings.Instance.EventLinkage == EventLinkage.Path)
+ {
+ if (string.IsNullOrEmpty(eventReference.Path) && !eventReference.Guid.IsNull)
+ {
+ return EventLinkage.GUID;
+ }
+ else
+ {
+ return EventLinkage.Path;
+ }
+ }
+ else // Assume EventLinkage.GUID
+ {
+ if (eventReference.Guid.IsNull && !string.IsNullOrEmpty(eventReference.Path))
+ {
+ return EventLinkage.Path;
+ }
+ else
+ {
+ return EventLinkage.GUID;
+ }
+ }
+ }
+
+ public static EditorEventRef EventFromPath(string pathOrGuid)
+ {
+ EditorEventRef eventRef;
+ if (pathOrGuid.StartsWith("{"))
+ {
+ eventRef = EventFromGUID(FMOD.GUID.Parse(pathOrGuid));
+ }
+ else
+ {
+ eventRef = EventFromString(pathOrGuid);
+ }
+ return eventRef;
+ }
+
+ public static EditorEventRef EventFromString(string path)
+ {
+ AffirmEventCache();
+ return eventCache.EditorEvents.Find((x) => x.Path.Equals(path, StringComparison.CurrentCultureIgnoreCase));
+ }
+
+ public static EditorEventRef EventFromGUID(FMOD.GUID guid)
+ {
+ AffirmEventCache();
+ return eventCache.EditorEvents.Find((x) => x.Guid == guid);
+ }
+
+ public static EditorParamRef ParamFromPath(string name)
+ {
+ AffirmEventCache();
+ return eventCache.EditorParameters.Find((x) => x.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
+ }
+
+ public class ActiveBuildTargetListener : IActiveBuildTargetChanged
+ {
+ public int callbackOrder{ get { return 0; } }
+ public void OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget newTarget)
+ {
+ BuildTargetChanged();
+ }
+ }
+
+ public class PreprocessScene : IProcessSceneWithReport
+ {
+ public int callbackOrder { get { return 0; } }
+
+ public void OnProcessScene(Scene scene, BuildReport report)
+ {
+ if (report == null) return;
+
+ ValidateEventReferences(scene);
+ }
+ }
+
+ private static bool CompareLists(List tempBanks, List banks)
+ {
+ if (tempBanks.Count != banks.Count)
+ return false;
+
+ for (int i = 0; i < tempBanks.Count; i++)
+ {
+ if (tempBanks[i] != banks[i])
+ return false;
+ }
+ return true;
+ }
+
+ private static bool AssetHasLabel(string assetPath, string label)
+ {
+ UnityEngine.Object asset = AssetDatabase.LoadAssetAtPath(assetPath);
+ string[] labels = AssetDatabase.GetLabels(asset);
+
+ return labels.Contains(label);
+ }
+
+ public static void RemoveBanks(string basePath)
+ {
+ if (!Directory.Exists(basePath))
+ {
+ return;
+ }
+
+ string[] filePaths = Directory.GetFiles(basePath, "*", SearchOption.AllDirectories);
+
+ foreach (string filePath in filePaths)
+ {
+ if (!filePath.EndsWith(".meta"))
+ {
+ string assetPath = filePath.Replace(Application.dataPath, AssetsFolderName);
+
+ if (AssetHasLabel(assetPath, FMODLabel))
+ {
+ AssetDatabase.MoveAssetToTrash(assetPath);
+ }
+ }
+ }
+
+ RemoveEmptyFMODFolders(basePath);
+
+ if (Directory.GetFileSystemEntries(basePath).Length == 0)
+ {
+ string baseFolder = basePath.Replace(Application.dataPath, AssetsFolderName);
+ AssetDatabase.MoveAssetToTrash(baseFolder);
+ }
+ }
+
+ public static void MoveBanks(string from, string to)
+ {
+ if (!Directory.Exists(from))
+ {
+ return;
+ }
+
+ if (!Directory.Exists(to))
+ {
+ Directory.CreateDirectory(to);
+ }
+
+ string[] oldBankFiles = Directory.GetFiles(from);
+
+ foreach (var oldBankFileName in oldBankFiles)
+ {
+ if (oldBankFileName.EndsWith(".meta"))
+ continue;
+ string assetString = oldBankFileName.Replace(Application.dataPath, "Assets");
+ AssetDatabase.ImportAsset(assetString);
+ UnityEngine.Object obj = AssetDatabase.LoadAssetAtPath(assetString);
+ string[] labels = AssetDatabase.GetLabels(obj);
+ foreach (string label in labels)
+ {
+ if (label.Equals("FMOD"))
+ {
+ AssetDatabase.MoveAsset(assetString, to);
+ break;
+ }
+ }
+ }
+ if (Directory.GetFiles(Path.GetDirectoryName(oldBankFiles[0])).Length == 0)
+ {
+ Directory.Delete(Path.GetDirectoryName(oldBankFiles[0]));
+ }
+ }
+
+ public static void RemoveEmptyFMODFolders(string basePath)
+ {
+ string[] folderPaths = Directory.GetDirectories(basePath, "*", SearchOption.AllDirectories);
+
+ // Process longest paths first so parent folders are cleared out when we get to them
+ Array.Sort(folderPaths, (a, b) => b.Length.CompareTo(a.Length));
+
+ foreach (string folderPath in folderPaths)
+ {
+ string assetPath = folderPath.Replace(Application.dataPath, AssetsFolderName);
+
+ if (AssetHasLabel(assetPath, FMODLabel) && Directory.GetFileSystemEntries(folderPath).Length == 0)
+ {
+ AssetDatabase.MoveAssetToTrash(assetPath);
+ }
+ }
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EventManager.cs.meta b/Assets/Plugins/FMOD/src/Editor/EventManager.cs.meta
new file mode 100644
index 0000000..8cd4d26
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 1fc38201a5edb994c874a4a61e96053b
+timeCreated: 1432600216
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs b/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs
new file mode 100644
index 0000000..fd475b9
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs
@@ -0,0 +1,512 @@
+using System;
+using System.Linq;
+using System.Text;
+using UnityEngine;
+using UnityEditor;
+
+namespace FMODUnity
+{
+ [CustomPropertyDrawer(typeof(EventReference))]
+ public class EventReferenceDrawer : PropertyDrawer
+ {
+ private static readonly Texture RepairIcon = EditorUtils.LoadImage("Wrench.png");
+ private static readonly Texture WarningIcon = EditorUtils.LoadImage("NotFound.png");
+ private static readonly GUIContent NotFoundWarning = new GUIContent("Event Not Found", WarningIcon);
+
+ private static GUIStyle buttonStyle;
+
+ private static Vector2 WarningSize()
+ {
+ return GUI.skin.label.CalcSize(NotFoundWarning);
+ }
+
+ private static float GetBaseHeight()
+ {
+ return GUI.skin.textField.CalcSize(GUIContent.none).y;
+ }
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ if (buttonStyle == null)
+ {
+ buttonStyle = new GUIStyle(GUI.skin.button);
+ buttonStyle.padding.top = 1;
+ buttonStyle.padding.bottom = 1;
+ }
+
+ Texture browseIcon = EditorUtils.LoadImage("SearchIconBlack.png");
+ Texture openIcon = EditorUtils.LoadImage("BrowserIcon.png");
+ Texture addIcon = EditorUtils.LoadImage("AddIcon.png");
+ Texture copyIcon = EditorUtils.LoadImage("CopyIcon.png");
+
+ using (new EditorGUI.PropertyScope(position, label, property))
+ {
+ HandleDragEvents(position, property);
+
+ EventReference eventReference = property.GetEventReference();
+ EditorEventRef editorEventRef = GetEditorEventRef(eventReference);
+
+ float baseHeight = GetBaseHeight();
+
+ Rect headerRect = position;
+ headerRect.width = EditorGUIUtility.labelWidth;
+ headerRect.height = baseHeight;
+
+ property.isExpanded = EditorGUI.Foldout(headerRect, property.isExpanded, label, true);
+
+ Rect addRect = new Rect(position.xMax - addIcon.width - 7, position.y, addIcon.width + 7, baseHeight);
+ Rect openRect = new Rect(addRect.x - openIcon.width - 7, position.y, openIcon.width + 6, baseHeight);
+ Rect searchRect = new Rect(openRect.x - browseIcon.width - 9, position.y, browseIcon.width + 8, baseHeight);
+ Rect pathRect = position;
+ pathRect.xMin = headerRect.xMax;
+ pathRect.xMax = searchRect.x - 3;
+ pathRect.height = baseHeight;
+
+ SerializedProperty pathProperty = GetPathProperty(property);
+
+ using (var scope = new EditorGUI.ChangeCheckScope())
+ {
+ EditorGUI.PropertyField(pathRect, pathProperty, GUIContent.none);
+
+ if (scope.changed)
+ {
+ SetEvent(property, pathProperty.stringValue);
+ }
+ }
+
+ if (GUI.Button(searchRect, new GUIContent(browseIcon, "Search"), buttonStyle))
+ {
+ var eventBrowser = ScriptableObject.CreateInstance();
+
+ eventBrowser.ChooseEvent(property);
+ var windowRect = position;
+ windowRect.xMin = pathRect.xMin;
+ windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position);
+ windowRect.height = openRect.height + 1;
+ windowRect.width = Mathf.Max(windowRect.width, 300f);
+ eventBrowser.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 400));
+
+ }
+ if (GUI.Button(addRect, new GUIContent(addIcon, "Create New Event in Studio"), buttonStyle))
+ {
+ var addDropdown = EditorWindow.CreateInstance();
+
+ addDropdown.SelectEvent(property);
+ var windowRect = position;
+ windowRect.xMin = pathRect.xMin;
+ windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position);
+ windowRect.height = openRect.height + 1;
+ windowRect.width = Mathf.Max(windowRect.width, 300f);
+ addDropdown.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 500));
+
+ }
+ if (GUI.Button(openRect, new GUIContent(openIcon, "Open In Browser"), buttonStyle))
+ {
+ EventBrowser.ShowWindow();
+ EventBrowser eventBrowser = EditorWindow.GetWindow();
+ eventBrowser.FrameEvent(pathProperty.stringValue);
+ }
+
+ if (editorEventRef != null)
+ {
+ float labelY = headerRect.y + baseHeight;
+
+ MismatchInfo mismatch = GetMismatch(eventReference, editorEventRef);
+
+ if (mismatch != null)
+ {
+ Rect warningRect = pathRect;
+ warningRect.xMax = position.xMax;
+ warningRect.y = labelY;
+ warningRect.height = WarningSize().y;
+
+ DrawMismatchUI(warningRect, openRect.x, openRect.width, mismatch, property);
+
+ labelY = warningRect.yMax;
+ }
+
+ if (property.isExpanded)
+ {
+ using (new EditorGUI.IndentLevelScope())
+ {
+ Rect labelRect = EditorGUI.IndentedRect(headerRect);
+ labelRect.y = labelY;
+
+ Rect valueRect = labelRect;
+ valueRect.xMin = labelRect.xMax;
+ valueRect.xMax = position.xMax - copyIcon.width - 7;
+
+ GUI.Label(labelRect, new GUIContent("GUID"));
+ GUI.Label(valueRect, eventReference.Guid.ToString());
+
+ Rect copyRect = valueRect;
+ copyRect.xMin = valueRect.xMax;
+ copyRect.xMax = position.xMax;
+
+ if (GUI.Button(copyRect, new GUIContent(copyIcon, "Copy To Clipboard")))
+ {
+ EditorGUIUtility.systemCopyBuffer = eventReference.Guid.ToString();
+ }
+
+ valueRect.xMax = position.xMax;
+
+ labelRect.y += baseHeight;
+ valueRect.y += baseHeight;
+
+ GUI.Label(labelRect, new GUIContent("Banks"));
+ GUI.Label(valueRect, string.Join(", ", editorEventRef.Banks.Select(x => x.Name).ToArray()));
+ labelRect.y += baseHeight;
+ valueRect.y += baseHeight;
+
+ GUI.Label(labelRect, new GUIContent("Panning"));
+ GUI.Label(valueRect, editorEventRef.Is3D ? "3D" : "2D");
+ labelRect.y += baseHeight;
+ valueRect.y += baseHeight;
+
+ GUI.Label(labelRect, new GUIContent("Stream"));
+ GUI.Label(valueRect, editorEventRef.IsStream.ToString());
+ labelRect.y += baseHeight;
+ valueRect.y += baseHeight;
+
+ GUI.Label(labelRect, new GUIContent("Oneshot"));
+ GUI.Label(valueRect, editorEventRef.IsOneShot.ToString());
+ labelRect.y += baseHeight;
+ valueRect.y += baseHeight;
+ }
+ }
+ }
+ else
+ {
+ EditorEventRef renamedEvent = GetRenamedEventRef(eventReference);
+
+ if (renamedEvent != null)
+ {
+ MismatchInfo mismatch = new MismatchInfo() {
+ Message = string.Format("Moved to {0}", renamedEvent.Path),
+ HelpText = string.Format(
+ "This event has been moved in FMOD Studio.\n" +
+ "You can click the repair button to update the path to the new location, or run " +
+ "the {0} command to scan your project for similar issues and fix them all.",
+ EventReferenceUpdater.MenuPath),
+ RepairTooltip = string.Format("Repair: set path to {0}", renamedEvent.Path),
+ RepairAction = (p) => {
+ p.FindPropertyRelative("Path").stringValue = renamedEvent.Path;
+ },
+ };
+
+ using (new EditorGUI.IndentLevelScope())
+ {
+ Rect mismatchRect = pathRect;
+
+ mismatchRect.xMin = position.xMin;
+ mismatchRect.xMax = position.xMax;
+ mismatchRect.y += baseHeight;
+ mismatchRect.height = baseHeight;
+
+ mismatchRect = EditorGUI.IndentedRect(mismatchRect);
+
+ DrawMismatchUI(mismatchRect, openRect.x, openRect.width, mismatch, property);
+ }
+ }
+ else
+ {
+ Rect labelRect = pathRect;
+ labelRect.xMax = position.xMax;
+ labelRect.y += baseHeight;
+ labelRect.height = WarningSize().y;
+
+ GUI.Label(labelRect, NotFoundWarning);
+ }
+ }
+ }
+ }
+
+ private static void HandleDragEvents(Rect position, SerializedProperty property)
+ {
+ Event e = Event.current;
+
+ if (e.type == EventType.DragPerform && position.Contains(e.mousePosition))
+ {
+ if (DragAndDrop.objectReferences.Length > 0 &&
+ DragAndDrop.objectReferences[0] != null &&
+ DragAndDrop.objectReferences[0].GetType() == typeof(EditorEventRef))
+ {
+ EditorEventRef eventRef = DragAndDrop.objectReferences[0] as EditorEventRef;
+
+ property.SetEventReference(eventRef.Guid, eventRef.Path);
+
+ GUI.changed = true;
+ e.Use();
+ }
+ }
+
+ if (e.type == EventType.DragUpdated && position.Contains(e.mousePosition))
+ {
+ if (DragAndDrop.objectReferences.Length > 0 &&
+ DragAndDrop.objectReferences[0] != null &&
+ DragAndDrop.objectReferences[0].GetType() == typeof(EditorEventRef))
+ {
+ DragAndDrop.visualMode = DragAndDropVisualMode.Move;
+ DragAndDrop.AcceptDrag();
+ e.Use();
+ }
+ }
+ }
+
+ private class MismatchInfo
+ {
+ public string Message;
+ public string HelpText;
+ public string RepairTooltip;
+ public Action RepairAction;
+ }
+
+ private static void DrawMismatchUI(Rect rect, float repairButtonX, float repairButtonWidth,
+ MismatchInfo mismatch, SerializedProperty property)
+ {
+ rect = EditorUtils.DrawHelpButton(rect, () => new SimpleHelp(mismatch.HelpText, 400));
+
+ Rect repairRect = new Rect(repairButtonX, rect.y, repairButtonWidth, GetBaseHeight());
+
+ if (GUI.Button(repairRect, new GUIContent(RepairIcon, mismatch.RepairTooltip), buttonStyle))
+ {
+ mismatch.RepairAction(property);
+ }
+
+ Rect labelRect = rect;
+ labelRect.xMax = repairRect.xMin;
+
+ GUI.Label(labelRect, new GUIContent(mismatch.Message, WarningIcon));
+ }
+
+ private static MismatchInfo GetMismatch(EventReference eventReference, EditorEventRef editorEventRef)
+ {
+ if (EventManager.GetEventLinkage(eventReference) == EventLinkage.Path)
+ {
+ if (eventReference.Guid != editorEventRef.Guid)
+ {
+ return new MismatchInfo() {
+ Message = "GUID doesn't match path",
+ HelpText = string.Format(
+ "The GUID on this EventReference doesn't match the path.\n" +
+ "You can click the repair button to update the GUID to match the path, or run the " +
+ "{0} command to scan your project for similar issues and fix them all.",
+ EventReferenceUpdater.MenuPath),
+ RepairTooltip = string.Format("Repair: set GUID to {0}", editorEventRef.Guid),
+ RepairAction = (property) => {
+ property.FindPropertyRelative("Guid").SetGuid(editorEventRef.Guid);
+ },
+ };
+ }
+ }
+ else // EventLinkage.GUID
+ {
+ if (eventReference.Path != editorEventRef.Path)
+ {
+ return new MismatchInfo() {
+ Message = "Path doesn't match GUID",
+ HelpText = string.Format(
+ "The path on this EventReference doesn't match the GUID.\n" +
+ "You can click the repair button to update the path to match the GUID, or run the " +
+ "{0} command to scan your project for similar issues and fix them all.",
+ EventReferenceUpdater.MenuPath),
+ RepairTooltip = string.Format("Repair: set path to '{0}'", editorEventRef.Path),
+ RepairAction = (property) => {
+ property.FindPropertyRelative("Path").stringValue = editorEventRef.Path;
+ },
+ };
+ }
+ }
+
+ return null;
+ }
+
+ private static void SetEvent(SerializedProperty property, string path)
+ {
+ EditorEventRef eventRef = EventManager.EventFromPath(path);
+
+ if (eventRef != null)
+ {
+ property.SetEventReference(eventRef.Guid, eventRef.Path);
+ }
+ else
+ {
+ property.SetEventReference(new FMOD.GUID(), path);
+ }
+ }
+
+ private static SerializedProperty GetGuidProperty(SerializedProperty property)
+ {
+ return property.FindPropertyRelative("Guid");
+ }
+
+ private static SerializedProperty GetPathProperty(SerializedProperty property)
+ {
+ return property.FindPropertyRelative("Path");
+ }
+
+ private static EditorEventRef GetEditorEventRef(EventReference eventReference)
+ {
+ if (EventManager.GetEventLinkage(eventReference) == EventLinkage.Path)
+ {
+ return EventManager.EventFromPath(eventReference.Path);
+ }
+ else // Assume EventLinkage.GUID
+ {
+ return EventManager.EventFromGUID(eventReference.Guid);
+ }
+ }
+
+ private static EditorEventRef GetRenamedEventRef(EventReference eventReference)
+ {
+ if (Settings.Instance.EventLinkage == EventLinkage.Path && !eventReference.Guid.IsNull)
+ {
+ EditorEventRef editorEventRef = EventManager.EventFromGUID(eventReference.Guid);
+
+ if (editorEventRef != null && editorEventRef.Path != eventReference.Path)
+ {
+ return editorEventRef;
+ }
+ }
+
+ return null;
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ float baseHeight = GetBaseHeight();
+
+ EventReference eventReference = property.GetEventReference();
+ EditorEventRef editorEventRef = GetEditorEventRef(eventReference);
+
+ if (editorEventRef == null)
+ {
+ return baseHeight + WarningSize().y;
+ }
+ else
+ {
+ float height;
+
+ if (property.isExpanded)
+ {
+ height = baseHeight * 6; // 5 lines of info
+ }
+ else
+ {
+ height = baseHeight;
+ }
+
+ if (GetMismatch(eventReference, editorEventRef) != null)
+ {
+ height += WarningSize().y;
+ }
+
+ return height;
+ }
+ }
+ }
+
+#pragma warning disable 0618 // Suppress the warning about using the obsolete EventRefAttribute class
+ [CustomPropertyDrawer(typeof(EventRefAttribute))]
+#pragma warning restore 0618
+ public class LegacyEventRefDrawer : PropertyDrawer
+ {
+ private GUIStyle RichTextStyle;
+
+ private const string HelpText =
+ "This field has the [EventRef] attribute, which is obsolete.\n" +
+ "To resolve this issue:\n" +
+ "* Add a field of type EventReference to this class\n" +
+ "* Set the MigrateTo property on the [EventRef] attribute: " +
+ "[EventRef(MigrateTo=\"\")]\n" +
+ "* Run the " + EventReferenceUpdater.MenuPath + " command to " +
+ "automatically migrate values from this field to the EventReference field";
+
+ private static readonly Texture InfoIcon = EditorGUIUtility.IconContent("console.infoicon.sml").image;
+ private static readonly Texture WarningIcon = EditorUtils.LoadImage("NotFound.png");
+
+ private void AffirmStyles()
+ {
+ if (RichTextStyle == null)
+ {
+ RichTextStyle = new GUIStyle(GUI.skin.label) { richText = true };
+ }
+ }
+
+ public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+ {
+ AffirmStyles();
+
+ label = EditorGUI.BeginProperty(position, label, property);
+
+ Rect pathRect = position;
+ pathRect.height = EditorGUIUtility.singleLineHeight;
+
+ pathRect = EditorGUI.PrefixLabel(pathRect, label);
+ EditorGUI.PropertyField(pathRect, property, GUIContent.none);
+
+ using (new EditorGUI.IndentLevelScope())
+ {
+ GUIContent content = StatusContent(property);
+
+ Rect infoRect = EditorGUI.IndentedRect(position);
+ infoRect.y = pathRect.yMax;
+ infoRect.height = StatusSize(content).y;
+
+ infoRect = EditorUtils.DrawHelpButton(infoRect, () => new SimpleHelp(HelpText, 400));
+
+ GUI.Label(infoRect, content, RichTextStyle);
+ }
+
+ EditorGUI.EndProperty();
+ }
+
+ private GUIContent StatusContent(SerializedProperty property)
+ {
+#pragma warning disable 0618 // Suppress the warning about using the obsolete EventRefAttribute class
+ string migrationTarget = (attribute as EventRefAttribute).MigrateTo;
+#pragma warning restore 0618
+
+ if (string.IsNullOrEmpty(migrationTarget))
+ {
+ return new GUIContent("[EventRef] is obsolete - use the EventReference type instead.",
+ WarningIcon);
+
+ }
+ else
+ {
+ int parentPathLength = property.propertyPath.LastIndexOf('.');
+
+ if (parentPathLength >= 0)
+ {
+ migrationTarget = string.Format("{0}.{1}", property.propertyPath.Remove(parentPathLength), migrationTarget);
+ }
+
+ SerializedProperty targetProperty = property.serializedObject.FindProperty(migrationTarget);
+
+ if (targetProperty != null)
+ {
+ return new GUIContent(string.Format("Will be migrated to {0}", targetProperty.displayName),
+ InfoIcon);
+ }
+ else
+ {
+ return new GUIContent(string.Format("Migration target {0} is missing", migrationTarget),
+ WarningIcon);
+ }
+ }
+ }
+
+ private Vector2 StatusSize(GUIContent content)
+ {
+ AffirmStyles();
+
+ return Vector2.Max(RichTextStyle.CalcSize(content), EditorUtils.GetHelpButtonSize());
+ }
+
+ public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+ {
+ return EditorGUIUtility.singleLineHeight + StatusSize(StatusContent(property)).y;
+ }
+ }
+}
diff --git a/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs.meta b/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs.meta
new file mode 100644
index 0000000..b5003e4
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 29a86a77bf7568e499243d9b47b7e88e
+timeCreated: 1432696197
+licenseType: Store
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Plugins/FMOD/src/Editor/EventReferenceUpdater.cs b/Assets/Plugins/FMOD/src/Editor/EventReferenceUpdater.cs
new file mode 100644
index 0000000..1dd76e6
--- /dev/null
+++ b/Assets/Plugins/FMOD/src/Editor/EventReferenceUpdater.cs
@@ -0,0 +1,2380 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using UnityEditor;
+using UnityEditor.IMGUI.Controls;
+using UnityEditor.Experimental.SceneManagement;
+using UnityEditor.SceneManagement;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+
+namespace FMODUnity
+{
+ public class EventReferenceUpdater : EditorWindow
+ {
+ public const string MenuPath = "FMOD/Update Event References";
+
+ private const string SearchButtonText = "Scan";
+
+ private const int EventReferenceTransitionVersion = 0x00020200;
+
+ private const BindingFlags DefaultBindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
+
+ private static readonly string HelpText =
+ string.Format("Click {0} to search your project for obsolete event references.", SearchButtonText);
+
+ private readonly string[] SearchFolders = {
+ "Assets",
+ };
+
+ private SceneSetup[] sceneSetup;
+
+ private IEnumerator processingState;
+
+ private SearchProgress prefabProgress;
+ private SearchProgress sceneProgress;
+ private SearchProgress scriptableObjectProgress;
+
+ [SerializeField]
+ private List assets = new List();
+
+ [SerializeField]
+ private List components = new List();
+
+ [SerializeField]
+ private List tasks = new List();
+
+ private int executableTaskCount = 0;
+
+ private TreeViewState taskViewState = new TreeViewState();
+
+ private TaskView taskView;
+
+ [NonSerialized]
+ private GUIContent status = GUIContent.none;
+
+ [NonSerialized]
+ private Task selectedTask;
+
+ [NonSerialized]
+ private Vector2 manualDescriptionScrollPosition;
+
+ [NonSerialized]
+ private static GUIContent AssetContent = new GUIContent("Asset");
+ private static GUIContent ComponentTypeContent = new GUIContent("Component Type");
+ private static GUIContent GameObjectContent = new GUIContent("Game Object");
+
+ private string ExecuteButtonText()
+ {
+ return string.Format("Execute {0} Selected Tasks", executableTaskCount);
+ }
+
+ [MenuItem(MenuPath)]
+ public static void ShowWindow()
+ {
+ EventReferenceUpdater updater = GetWindow("FMOD Event Reference Updater");
+ updater.minSize = new Vector2(800, 600);
+
+ updater.SetStatus(HelpText);
+
+ updater.Show();
+ }
+
+ public static bool IsUpToDate()
+ {
+ return Settings.Instance.LastEventReferenceScanVersion >= EventReferenceTransitionVersion;
+ }
+
+ private void BeginSearching()
+ {
+ if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
+ {
+ tasks.Clear();
+ executableTaskCount = 0;
+ taskView.SetSelection(new List(), TreeViewSelectionOptions.FireSelectionChanged);
+ taskView.Reload();
+
+ processingState = SearchProject();
+ }
+ }
+
+ private void StopProcessing(bool isComplete)
+ {
+ processingState = null;
+
+ if (isComplete)
+ {
+ if (tasks.Count == 0)
+ {
+ SetStatus("No required tasks found. Event references are up to date.");
+ Settings.Instance.LastEventReferenceScanVersion = FMOD.VERSION.number;
+ EditorUtility.SetDirty(Settings.Instance);
+
+ SetupWizardWindow.SetUpdateTaskComplete(SetupWizardWindow.UpdateTaskType.UpdateEventReferences);
+ }
+ else if (tasks.All(x => x.HasExecuted))
+ {
+ SetStatus("Finished executing tasks. New tasks may now be required. Please re-scan your project.");
+ }
+ else
+ {
+ SetStatus("Finished scanning. Please execute the tasks above.");
+ }
+ }
+ else
+ {
+ SetStatus("Cancelled.");
+ }
+ }
+
+ private void BeginExecuting()
+ {
+ Task[] enabledTasks = tasks.Where(t => t.CanExecute()).ToArray();
+
+ if (enabledTasks.Length == 0)
+ {
+ return;
+ }
+
+ Asset[] affectedAssets = enabledTasks.Select(t => assets[t.AssetIndex]).Distinct().ToArray();
+
+ int prefabCount = affectedAssets.Count(a => IsPrefab(a.Type));
+ int sceneCount = affectedAssets.Count(a => a.Type == AssetType.Scene);
+
+ string warningText = string.Format(
+ "Executing these {0} tasks will change {1} prefabs and {2} scenes on disk.\n\n" +
+ "Please ensure you have committed any outstanding changes to source control before continuing!",
+ enabledTasks.Length, prefabCount, sceneCount);
+
+ if (!EditorUtility.DisplayDialog("Confirm Bulk Changes", warningText, ExecuteButtonText(), "Cancel"))
+ {
+ return;
+ }
+
+ if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
+ {
+ processingState = ExecuteTasks(enabledTasks);
+ }
+ }
+
+ private void Cancel()
+ {
+ if (IsProcessing)
+ {
+ StopProcessing(false);
+ }
+ else
+ {
+ Close();
+ }
+ }
+
+ private bool IsProcessing { get { return processingState != null; } }
+
+ private struct SearchProgress
+ {
+ private int maximum;
+ private int current;
+
+ public float Fraction()
+ {
+ return (maximum > 0) ? (current / (float)maximum) : 1;
+ }
+
+ public void Increment()
+ {
+ if (current < maximum)
+ {
+ ++current;
+ }
+ }
+
+ public SearchProgress(int total)
+ {
+ this.maximum = total;
+ this.current = 0;
+ }
+ }
+
+ private IEnumerator SearchProject()
+ {
+ string[] prefabGuids = AssetDatabase.FindAssets("t:GameObject", SearchFolders);
+ string[] sceneGuids = AssetDatabase.FindAssets("t:Scene", SearchFolders);
+ string[] scriptableObjectGuids =
+ AssetDatabase.FindAssets("t:ScriptableObject", SearchFolders).Distinct().ToArray();
+
+ prefabProgress = new SearchProgress(prefabGuids.Length);
+ sceneProgress = new SearchProgress(sceneGuids.Length);
+ scriptableObjectProgress = new SearchProgress(scriptableObjectGuids.Length);
+
+ return SearchPrefabs(prefabGuids)
+ .Concat(SearchScriptableObjects(scriptableObjectGuids))
+ .Concat(SearchScenes(sceneGuids))
+ .GetEnumerator();
+ }
+
+ private IEnumerable SearchPrefabs(string[] guids)
+ {
+ foreach (string guid in guids)
+ {
+ string path = AssetDatabase.GUIDToAssetPath(guid);
+
+ yield return string.Format("Searching {0}", path);
+
+ GameObject prefab = AssetDatabase.LoadAssetAtPath(path);
+
+ int assetIndex = -1;
+
+ foreach (Task task in SearchGameObject(prefab, prefab))
+ {
+ if (assetIndex < 0)
+ {
+ assetIndex = AddAsset(GetAssetType(prefab), path);
+ }
+
+ task.AssetIndex = assetIndex;
+
+ AddTask(task);
+ }
+
+ prefabProgress.Increment();
+ }
+ }
+
+ private IEnumerable SearchScriptableObjects(string[] guids)
+ {
+ foreach (string guid in guids)
+ {
+ string path = AssetDatabase.GUIDToAssetPath(guid);
+
+ yield return string.Format("Searching {0}", path);
+
+ IEnumerable scriptableObjects =
+ AssetDatabase.LoadAllAssetsAtPath(path).OfType();
+
+ int assetIndex = -1;
+
+ foreach (ScriptableObject scriptableObject in scriptableObjects)
+ {
+ int componentIndex = -1;
+
+ foreach (Task task in GetUpdateTasks(scriptableObject))
+ {
+ if (assetIndex < 0)
+ {
+ assetIndex = AddAsset(AssetType.ScriptableObject, path);
+ }
+
+ if (componentIndex < 0)
+ {
+ componentIndex = AddComponent(scriptableObject);
+ }
+
+ task.AssetIndex = assetIndex;
+ task.ComponentIndex = componentIndex;
+
+ AddTask(task);
+ }
+ }
+
+ scriptableObjectProgress.Increment();
+ }
+ }
+
+ private IEnumerable SearchScenes(string[] guids)
+ {
+ sceneSetup = EditorSceneManager.GetSceneManagerSetup();
+
+ foreach (string guid in guids)
+ {
+ string path = AssetDatabase.GUIDToAssetPath(guid);
+
+ yield return string.Format("Searching {0}", path);
+
+ Scene scene = SceneManager.GetSceneByPath(path);
+
+ if (!scene.IsValid())
+ {
+ scene = EditorSceneManager.OpenScene(path, OpenSceneMode.Single);
+ }
+
+ int assetIndex = -1;
+
+ foreach (GameObject gameObject in scene.GetRootGameObjects())
+ {
+ foreach (Task task in SearchGameObject(gameObject, null))
+ {
+ if (assetIndex < 0)
+ {
+ assetIndex = AddAsset(AssetType.Scene, path);
+ }
+
+ task.AssetIndex = assetIndex;
+
+ AddTask(task);
+ }
+ }
+
+ sceneProgress.Increment();
+ }
+
+ if (sceneSetup.Length > 0)
+ {
+ EditorSceneManager.RestoreSceneManagerSetup(sceneSetup);
+ }
+ }
+
+ private IEnumerable SearchGameObject(GameObject gameObject, GameObject root)
+ {
+ MonoBehaviour[] behaviours = gameObject.GetComponentsInChildren(true);
+
+ foreach (MonoBehaviour behaviour in behaviours)
+ {
+ int componentIndex = -1;
+
+ foreach (Task task in GetUpdateTasks(behaviour))
+ {
+ if (componentIndex < 0)
+ {
+ componentIndex = AddComponent(behaviour, root);
+ }
+
+ task.ComponentIndex = componentIndex;
+
+ yield return task;
+ }
+ }
+ }
+
+ private static IEnumerable GetUpdateTasks(UnityEngine.Object target)
+ {
+ if (target == null)
+ {
+ return Enumerable.Empty();
+ }
+ else if (target is StudioEventEmitter)
+ {
+ return GetEmitterUpdateTasks(target as StudioEventEmitter);
+ }
+#if UNITY_TIMELINE_EXIST
+ else if (target is FMODEventPlayable)
+ {
+ return GetPlayableUpdateTasks(target as FMODEventPlayable);
+ }
+#endif
+ else
+ {
+ return GetGenericUpdateTasks(target);
+ }
+ }
+
+ private static IEnumerable GetEmitterUpdateTasks(StudioEventEmitter emitter)
+ {
+ bool hasOwnEvent = true;
+ bool hasOwnEventReference = true;
+
+ if (PrefabUtility.IsPartOfPrefabInstance(emitter))
+ {
+ StudioEventEmitter sourceEmitter = PrefabUtility.GetCorrespondingObjectFromSource(emitter);
+ PropertyModification[] modifications = PrefabUtility.GetPropertyModifications(emitter);
+
+ if (modifications != null) // GetPropertyModifications returns null if the prefab instance is disconnected
+ {
+ hasOwnEvent = modifications.Any(
+ m => m.target == sourceEmitter && m.propertyPath == "Event");
+
+ hasOwnEventReference = modifications.Any(
+ m => m.target == sourceEmitter && m.propertyPath.StartsWith("EventReference"));
+ }
+ }
+
+ if (hasOwnEventReference)
+ {
+ Task updateTask = GetUpdateEventReferenceTask(emitter.EventReference, "EventReference");
+ if (updateTask != null)
+ {
+ yield return updateTask;
+ }
+
+ if (hasOwnEvent)
+ {
+#pragma warning disable 0618 // Suppress warnings about using the obsolete StudioEventEmitter.Event field
+ if (!string.IsNullOrEmpty(emitter.Event))
+#pragma warning restore 0618
+ {
+ if (emitter.EventReference.IsNull)
+ {
+ yield return Task.MoveEventToEventReference(emitter);
+ }
+ else
+ {
+ yield return Task.ClearEvent(emitter);
+ }
+ }
+ }
+ }
+ else if (hasOwnEvent)
+ {
+ yield return Task.MoveEventOverrideToEventReference(emitter);
+ }
+ }
+
+ private static Task GetUpdateEventReferenceTask(EventReference eventReference, string fieldName,
+ string subObjectPath = null)
+ {
+ if (eventReference.IsNull)
+ {
+ return null;
+ }
+
+ if (Settings.Instance.EventLinkage == EventLinkage.GUID)
+ {
+ EditorEventRef editorEventRef = EventManager.EventFromGUID(eventReference.Guid);
+
+ if (editorEventRef == null)
+ {
+ return null;
+ }
+
+ if (eventReference.Path != editorEventRef.Path)
+ {
+ return Task.UpdateEventReferencePath(subObjectPath, fieldName, eventReference.Path,
+ editorEventRef.Path, eventReference.Guid);
+ }
+ }
+ else if (Settings.Instance.EventLinkage == EventLinkage.Path)
+ {
+ EditorEventRef editorEventRef = EventManager.EventFromPath(eventReference.Path);
+
+ if (editorEventRef != null)
+ {
+ if (eventReference.Guid != editorEventRef.Guid)
+ {
+ return Task.UpdateEventReferenceGuid(subObjectPath, fieldName, eventReference.Guid,
+ editorEventRef.Guid, eventReference.Path);
+ }
+ }
+ else if (!eventReference.Guid.IsNull)
+ {
+ editorEventRef = EventManager.EventFromGUID(eventReference.Guid);
+
+ if (editorEventRef != null)
+ {
+ return Task.UpdateEventReferencePath(subObjectPath, fieldName, eventReference.Path,
+ editorEventRef.Path, eventReference.Guid);
+ }
+ }
+ }
+ else
+ {
+ throw new NotSupportedException("Unrecognized EventLinkage: " + Settings.Instance.EventLinkage);
+ }
+
+ return null;
+ }
+
+#if UNITY_TIMELINE_EXIST
+ private static IEnumerable GetPlayableUpdateTasks(FMODEventPlayable playable)
+ {
+ Task updateTask = GetUpdateEventReferenceTask(playable.EventReference, "EventReference");
+ if (updateTask != null)
+ {
+ yield return updateTask;
+ }
+
+#pragma warning disable 0618 // Suppress warnings about using the obsolete FMODEventPlayable.eventName field
+ if (!string.IsNullOrEmpty(playable.eventName))
+#pragma warning restore 0618
+ {
+ if (playable.EventReference.IsNull)
+ {
+ yield return Task.MoveEventNameToEventReference(playable);
+ }
+ else
+ {
+ yield return Task.ClearEventName(playable);
+ }
+ }
+ }
+#endif
+
+#pragma warning disable 0618 // Suppress a warning about using the obsolete EventRefAttribute class
+ private static bool IsEventRef(FieldInfo field)
+ {
+ return field.FieldType == typeof(string) && EditorUtils.HasAttribute(field);
+ }
+#pragma warning restore 0618
+
+ private static T GetCustomAttribute(FieldInfo field)
+ where T : Attribute
+ {
+ return Attribute.GetCustomAttribute(field, typeof(T)) as T;
+ }
+
+ private static readonly Assembly SystemAssembly = typeof(object).Assembly;
+
+ private static IEnumerable GetGenericUpdateTasks(object target, string subObjectPath = null, IEnumerable