diff --git a/.gitattributes b/.gitattributes index e12a974..e76d1d2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -28,6 +28,8 @@ *.WAV filter=lfs diff=lfs merge=lfs -text *.mp3 filter=lfs diff=lfs merge=lfs -text *.MP3 filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +*.OGG filter=lfs diff=lfs merge=lfs -text # Unity *.terrainlayer filter=lfs diff=lfs merge=lfs -text # Video diff --git a/game/.gitignore b/game/.gitignore index 26c1e02..d609af2 100644 --- a/game/.gitignore +++ b/game/.gitignore @@ -88,4 +88,4 @@ config.txt # Generated dialogue files [Aa]ssets/Data/Dialogue/token* -[Aa]ssets/Data/Dialogue/dialogue.csv* +[Aa]ssets/Data/Dialogue/dialogue.data* diff --git a/game/Assets/Data/Dialogue/Dialogue Settings.asset b/game/Assets/Data/Dialogue/Dialogue Settings.asset new file mode 100644 index 0000000..2012420 --- /dev/null +++ b/game/Assets/Data/Dialogue/Dialogue Settings.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !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: a6a4c7f569d69ca4e8498fdcd96476ce, type: 3} + m_Name: Dialogue Settings + m_EditorClassIdentifier: + _hideAfter: 5 + _fmodKeyPrefix: event:/Character/ diff --git a/game/Assets/Data/Dialogue/Dialogue Settings.asset.meta b/game/Assets/Data/Dialogue/Dialogue Settings.asset.meta new file mode 100644 index 0000000..54c8002 --- /dev/null +++ b/game/Assets/Data/Dialogue/Dialogue Settings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67880aab3a7f5124999fcef662a147f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Data/Dialogue/Dialogue System.asset b/game/Assets/Data/Dialogue/Dialogue System.asset new file mode 100644 index 0000000..4cdc953 --- /dev/null +++ b/game/Assets/Data/Dialogue/Dialogue System.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !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: 5605190150fc9a046a68dd80708b5a7d, type: 3} + m_Name: Dialogue System + m_EditorClassIdentifier: + _settings: {fileID: 11400000, guid: 67880aab3a7f5124999fcef662a147f9, type: 2} diff --git a/game/Assets/Data/Dialogue/Dialogue System.asset.meta b/game/Assets/Data/Dialogue/Dialogue System.asset.meta new file mode 100644 index 0000000..0cb0e3c --- /dev/null +++ b/game/Assets/Data/Dialogue/Dialogue System.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56369c4e83cc59e44bf55cd16fafc4e8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Editor Default Resources.meta b/game/Assets/Editor Default Resources.meta new file mode 100644 index 0000000..87f4413 --- /dev/null +++ b/game/Assets/Editor Default Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 614a438657d532541a668347dba0ee0f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Editor Default Resources/FMOD.meta b/game/Assets/Editor Default Resources/FMOD.meta new file mode 100644 index 0000000..abce212 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0098ee476320b9141b1c92a2ddc5f9fa +folderAsset: yes +timeCreated: 1447698325 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Editor Default Resources/FMOD/AddIcon.png b/game/Assets/Editor Default Resources/FMOD/AddIcon.png new file mode 100644 index 0000000..62d6e58 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/AddIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:860e3a60f97b4f9961eda80617e922ceffeb67aa145077ba0599863ca306a467 +size 380 diff --git a/game/Assets/Editor Default Resources/FMOD/AddIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/AddIcon.png.meta new file mode 100644 index 0000000..f3f5a53 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/ArrowDown.png b/game/Assets/Editor Default Resources/FMOD/ArrowDown.png new file mode 100644 index 0000000..9dbaac7 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/ArrowDown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9e31ec900dc41ae904e18080e63cd3056c7a6fd1c2ce44d83e54155e06e6a4b +size 236 diff --git a/game/Assets/Editor Default Resources/FMOD/ArrowDown.png.meta b/game/Assets/Editor Default Resources/FMOD/ArrowDown.png.meta new file mode 100644 index 0000000..1445eac --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/ArrowDown.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: d5400a23002b107479debec613434ad6 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + 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: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: PS4 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + 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/game/Assets/Editor Default Resources/FMOD/ArrowIcon.png b/game/Assets/Editor Default Resources/FMOD/ArrowIcon.png new file mode 100644 index 0000000..d618441 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/ArrowIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ad41545295b579cf3d262f069c5b9ec48b03bd5a1f64a465b7af44272f66cb7 +size 292 diff --git a/game/Assets/Editor Default Resources/FMOD/ArrowIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/ArrowIcon.png.meta new file mode 100644 index 0000000..e0695f8 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/ArrowUp.png b/game/Assets/Editor Default Resources/FMOD/ArrowUp.png new file mode 100644 index 0000000..9b6c4a8 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/ArrowUp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fc5383250bed6ec513be8612f5fdad476dd10a78eac0b103b5d617682d63a30 +size 291 diff --git a/game/Assets/Editor Default Resources/FMOD/ArrowUp.png.meta b/game/Assets/Editor Default Resources/FMOD/ArrowUp.png.meta new file mode 100644 index 0000000..d60513b --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/ArrowUp.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 82ff72577988cdb4a95bd92f1d0bc129 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + 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: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: PS4 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + 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/game/Assets/Editor Default Resources/FMOD/BankIcon.png b/game/Assets/Editor Default Resources/FMOD/BankIcon.png new file mode 100644 index 0000000..2de820b --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/BankIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:057c16f44a3725bb4228401150c905b384ce1e1dfde6902ab074b8405c05b7c7 +size 3699 diff --git a/game/Assets/Editor Default Resources/FMOD/BankIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/BankIcon.png.meta new file mode 100644 index 0000000..1d669c5 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/Border.png b/game/Assets/Editor Default Resources/FMOD/Border.png new file mode 100644 index 0000000..4d9969e --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/Border.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe700034ded2e2586d707689971698310ce5964018d1a774fb6c6ed9f9060d27 +size 179 diff --git a/game/Assets/Editor Default Resources/FMOD/Border.png.meta b/game/Assets/Editor Default Resources/FMOD/Border.png.meta new file mode 100644 index 0000000..a61b1b0 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/BrowserIcon.png b/game/Assets/Editor Default Resources/FMOD/BrowserIcon.png new file mode 100644 index 0000000..6e0acd4 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/BrowserIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e45e42c47b7bf4214d50dcdca6ee7c7b47cce163eb948f8ffcdbf99837fe504c +size 3194 diff --git a/game/Assets/Editor Default Resources/FMOD/BrowserIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/BrowserIcon.png.meta new file mode 100644 index 0000000..7af4942 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/CopyIcon.png b/game/Assets/Editor Default Resources/FMOD/CopyIcon.png new file mode 100644 index 0000000..41013f2 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/CopyIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2b04ee62fd5d8072051bce97cf0edb1465ed43e71ac14485869297157ea05a9 +size 552 diff --git a/game/Assets/Editor Default Resources/FMOD/CopyIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/CopyIcon.png.meta new file mode 100644 index 0000000..67405ae --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/Delete.png b/game/Assets/Editor Default Resources/FMOD/Delete.png new file mode 100644 index 0000000..3bbc094 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/Delete.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ca01b263c0395dce602ba7ff5a836d7f461216d860427a0e3df55a7ab71efa6 +size 221 diff --git a/game/Assets/Editor Default Resources/FMOD/Delete.png.meta b/game/Assets/Editor Default Resources/FMOD/Delete.png.meta new file mode 100644 index 0000000..6a64cd2 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/EventIcon.png b/game/Assets/Editor Default Resources/FMOD/EventIcon.png new file mode 100644 index 0000000..639d035 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/EventIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:846f36969a9193bb47cde4c12d2b39c76d3eaa9db4d8ba8b16eb76d21225f24b +size 705 diff --git a/game/Assets/Editor Default Resources/FMOD/EventIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/EventIcon.png.meta new file mode 100644 index 0000000..1e4321f --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/FolderIconClosed.png b/game/Assets/Editor Default Resources/FMOD/FolderIconClosed.png new file mode 100644 index 0000000..014196b --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/FolderIconClosed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e0e2cfe75a26e20382f957b843f704ce604a0b24e5152470ebd28208cfac212 +size 2963 diff --git a/game/Assets/Editor Default Resources/FMOD/FolderIconClosed.png.meta b/game/Assets/Editor Default Resources/FMOD/FolderIconClosed.png.meta new file mode 100644 index 0000000..b1c8788 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/FolderIconOpen.png b/game/Assets/Editor Default Resources/FMOD/FolderIconOpen.png new file mode 100644 index 0000000..ffded31 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/FolderIconOpen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a5f22962370823cae68458fcc089dd0759636aff6d1e2f45bd701d740aa5598 +size 3221 diff --git a/game/Assets/Editor Default Resources/FMOD/FolderIconOpen.png.meta b/game/Assets/Editor Default Resources/FMOD/FolderIconOpen.png.meta new file mode 100644 index 0000000..7c23994 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/LevelMeter.png b/game/Assets/Editor Default Resources/FMOD/LevelMeter.png new file mode 100644 index 0000000..27ffcca --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/LevelMeter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf765236491fd508c50e16b64a19b8f27e79f2174d94c61dd2399dd39ebf8d88 +size 2685 diff --git a/game/Assets/Editor Default Resources/FMOD/LevelMeter.png.meta b/game/Assets/Editor Default Resources/FMOD/LevelMeter.png.meta new file mode 100644 index 0000000..88006b9 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/LevelMeterOff.png b/game/Assets/Editor Default Resources/FMOD/LevelMeterOff.png new file mode 100644 index 0000000..81068bd --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/LevelMeterOff.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e162e74d2e9c71d12514bd3199c46cb79046e2e2df315aa8bf5587f61bbd6cd +size 2194 diff --git a/game/Assets/Editor Default Resources/FMOD/LevelMeterOff.png.meta b/game/Assets/Editor Default Resources/FMOD/LevelMeterOff.png.meta new file mode 100644 index 0000000..dc84de4 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/NotFound.png b/game/Assets/Editor Default Resources/FMOD/NotFound.png new file mode 100644 index 0000000..ca6e7b5 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/NotFound.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ae518102dd2ae8fab1a9bd2f526c8897de491f55f28ceb72ac3a4e0365d330d +size 3139 diff --git a/game/Assets/Editor Default Resources/FMOD/NotFound.png.meta b/game/Assets/Editor Default Resources/FMOD/NotFound.png.meta new file mode 100644 index 0000000..8f92d9a --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/SearchIcon.png b/game/Assets/Editor Default Resources/FMOD/SearchIcon.png new file mode 100644 index 0000000..5136fc9 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/SearchIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39f685e06bcf2883c73bc080bbb167f0e898baa36e95e36d26be9aeb85438977 +size 2974 diff --git a/game/Assets/Editor Default Resources/FMOD/SearchIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/SearchIcon.png.meta new file mode 100644 index 0000000..0061bf1 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/SearchIcon.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 1b785acb38b002542a02d6c4cbb1fa6f +timeCreated: 1432696384 +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/game/Assets/Editor Default Resources/FMOD/SearchIconBlack.png b/game/Assets/Editor Default Resources/FMOD/SearchIconBlack.png new file mode 100644 index 0000000..4118e53 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/SearchIconBlack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a08ec9844a6c30a78346c21d4ea627645fa217d8e1e6ef8225885e80c663ef +size 3025 diff --git a/game/Assets/Editor Default Resources/FMOD/SearchIconBlack.png.meta b/game/Assets/Editor Default Resources/FMOD/SearchIconBlack.png.meta new file mode 100644 index 0000000..99b7987 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/Selected.png b/game/Assets/Editor Default Resources/FMOD/Selected.png new file mode 100644 index 0000000..8afface --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/Selected.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e516e263de4dfbb9a7f193fe9ac3e380b837bd28bacf300f6c29c0f7e3a535f7 +size 191 diff --git a/game/Assets/Editor Default Resources/FMOD/Selected.png.meta b/game/Assets/Editor Default Resources/FMOD/Selected.png.meta new file mode 100644 index 0000000..93d3393 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/Selected.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 38be8eaefa585de4aa1781acb0adc866 +timeCreated: 1432797507 +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/game/Assets/Editor Default Resources/FMOD/SelectedAlt.png b/game/Assets/Editor Default Resources/FMOD/SelectedAlt.png new file mode 100644 index 0000000..b39f163 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/SelectedAlt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9450a6d1836697cc7b196df8d9b829c66dc9e38400cd00e78abc0fa0d4290b84 +size 170 diff --git a/game/Assets/Editor Default Resources/FMOD/SelectedAlt.png.meta b/game/Assets/Editor Default Resources/FMOD/SelectedAlt.png.meta new file mode 100644 index 0000000..7de4e05 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/SnapshotIcon.png b/game/Assets/Editor Default Resources/FMOD/SnapshotIcon.png new file mode 100644 index 0000000..86ac78d --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/SnapshotIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a64f883f76eec0a308b9af0607394b4030b3c0b25e22afaae48779b7525c2ef9 +size 737 diff --git a/game/Assets/Editor Default Resources/FMOD/SnapshotIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/SnapshotIcon.png.meta new file mode 100644 index 0000000..4cad600 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/StudioIcon.png b/game/Assets/Editor Default Resources/FMOD/StudioIcon.png new file mode 100644 index 0000000..d5b631b --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/StudioIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:adb4854cc54817bc18bab8f51b6b9f5dd49220f7019877e596cb02fddf009dd8 +size 3581 diff --git a/game/Assets/Editor Default Resources/FMOD/StudioIcon.png.meta b/game/Assets/Editor Default Resources/FMOD/StudioIcon.png.meta new file mode 100644 index 0000000..5689d7b --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/TransportOpen.png b/game/Assets/Editor Default Resources/FMOD/TransportOpen.png new file mode 100644 index 0000000..cd382e1 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/TransportOpen.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09901dc10713d986ef1df3b28d6d637d978263f86eebd18fddb57b8d7d3cf472 +size 4234 diff --git a/game/Assets/Editor Default Resources/FMOD/TransportOpen.png.meta b/game/Assets/Editor Default Resources/FMOD/TransportOpen.png.meta new file mode 100644 index 0000000..ce8b9c9 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png b/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png new file mode 100644 index 0000000..382eaf7 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7235df4b7a8cc331595984bae5f2f11f18a2da8808a92cbc268454ad7836999d +size 3525 diff --git a/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png.meta b/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png.meta new file mode 100644 index 0000000..8bccd3a --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png b/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png new file mode 100644 index 0000000..71dc6f0 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b3ef1497d5583fc59777d3e32b7f0841a1b40cad462f6c7b76e02b600cbe7d2 +size 3715 diff --git a/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png.meta b/game/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png.meta new file mode 100644 index 0000000..507877f --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png b/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png new file mode 100644 index 0000000..7cb939f --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3813b737ddf9a4c4ccbad813498d029e168f5d2bdb55ac4940f380f0ef34b9b +size 3290 diff --git a/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png.meta b/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png.meta new file mode 100644 index 0000000..f287d40 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png b/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png new file mode 100644 index 0000000..d913100 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b575ed82986cacca2633358315b4ff642d81fd277825afd54f4ddc5d97880b32 +size 3463 diff --git a/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png.meta b/game/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png.meta new file mode 100644 index 0000000..d71b3f1 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/preview.png b/game/Assets/Editor Default Resources/FMOD/preview.png new file mode 100644 index 0000000..b4416d3 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/preview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5442882e67f6bd03f05d5cdaf38b12ab53099e2fc002c17ff9d75fe74d917ad1 +size 17576 diff --git a/game/Assets/Editor Default Resources/FMOD/preview.png.meta b/game/Assets/Editor Default Resources/FMOD/preview.png.meta new file mode 100644 index 0000000..2b0ddfe --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Editor Default Resources/FMOD/previewemitter.png b/game/Assets/Editor Default Resources/FMOD/previewemitter.png new file mode 100644 index 0000000..bbbbe10 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/previewemitter.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d555a49c7381486bc846b226dbaedf52ae4bf3206e7f150c07756641b3228e88 +size 278 diff --git a/game/Assets/Editor Default Resources/FMOD/previewemitter.png.meta b/game/Assets/Editor Default Resources/FMOD/previewemitter.png.meta new file mode 100644 index 0000000..51c50d1 --- /dev/null +++ b/game/Assets/Editor Default Resources/FMOD/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/game/Assets/Gizmos.meta b/game/Assets/Gizmos.meta new file mode 100644 index 0000000..ce13e8a --- /dev/null +++ b/game/Assets/Gizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 078cf2b5cfda79c4694d58eda75bf991 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Gizmos/FMOD.meta b/game/Assets/Gizmos/FMOD.meta new file mode 100644 index 0000000..9dedfec --- /dev/null +++ b/game/Assets/Gizmos/FMOD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 881adeaf3940d1446a394704635ef1d0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Gizmos/FMOD/FMODEmitter.tiff b/game/Assets/Gizmos/FMOD/FMODEmitter.tiff new file mode 100644 index 0000000..cac7d9c --- /dev/null +++ b/game/Assets/Gizmos/FMOD/FMODEmitter.tiff @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2434768b7999507c8e02877d5bfaf1d698fd60b166cc745840fe10f3b2737590 +size 2204 diff --git a/game/Assets/Gizmos/FMOD/FMODEmitter.tiff.meta b/game/Assets/Gizmos/FMOD/FMODEmitter.tiff.meta new file mode 100644 index 0000000..4ad82bb --- /dev/null +++ b/game/Assets/Gizmos/FMOD/FMODEmitter.tiff.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 392af304825cbe847bbf4e603852e4dd +timeCreated: 1433142042 +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/game/Assets/Plugins.meta b/game/Assets/Plugins.meta new file mode 100644 index 0000000..a426215 --- /dev/null +++ b/game/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e1ef26051e4e4a4f9f19e457070f8fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD.meta b/game/Assets/Plugins/FMOD.meta new file mode 100644 index 0000000..82ea5c9 --- /dev/null +++ b/game/Assets/Plugins/FMOD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05947bbfe2cdecb4fa9fc4b7d2f89d0c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/Cache.meta b/game/Assets/Plugins/FMOD/Cache.meta new file mode 100644 index 0000000..abd5030 --- /dev/null +++ b/game/Assets/Plugins/FMOD/Cache.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36d373a7202a51c4f93323a87832a9cf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/Cache/Editor.meta b/game/Assets/Plugins/FMOD/Cache/Editor.meta new file mode 100644 index 0000000..50946bf --- /dev/null +++ b/game/Assets/Plugins/FMOD/Cache/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 27b34f0051f845c458ad3a0129726e59 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/Cache/Editor/FMODStudioCache.asset b/game/Assets/Plugins/FMOD/Cache/Editor/FMODStudioCache.asset new file mode 100644 index 0000000..8067ac8 --- /dev/null +++ b/game/Assets/Plugins/FMOD/Cache/Editor/FMODStudioCache.asset @@ -0,0 +1,1926 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8940783032877342582 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Ride-on Mower/Load + m_EditorClassIdentifier: + Name: Load + Min: -1 + Max: 1 + Default: -1 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-8701470974084544447 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Country/Hour + m_EditorClassIdentifier: + Name: Hour + Min: 0 + Max: 3 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-8666466107650256711 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Radio Station/Spatializer + m_EditorClassIdentifier: + Name: Spatializer + Min: 0 + Max: 2 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-8122538359583372443 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/VO.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/VO.bank + Name: VO + StudioPath: bank:/VO + lastModified: 637495997991543739 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 38560 + Exists: 1 +--- !u!114 &-7803813789219444754 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Radio Station/Freq + m_EditorClassIdentifier: + Name: Freq + Min: 0 + Max: 3 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-7659359929436151892 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Character/Enemy Footsteps + m_EditorClassIdentifier: + Path: event:/Character/Enemy Footsteps + guid: 3f29b5149ef6e548a7aece02710ca3d9 + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: [] + MinDistance: 1 + MaxDistance: 20 + Length: 147 +--- !u!114 &-7625393254389082378 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/City/Walla + m_EditorClassIdentifier: + Name: Walla + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-7545483045301536161 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Music/Level 02 + m_EditorClassIdentifier: + Path: event:/Music/Level 02 + guid: fd46f9c795d69b49a820752799c4921d + Banks: + - {fileID: -5810968061649293014} + IsStream: 1 + Is3D: 0 + IsOneShot: 0 + Parameters: + - {fileID: 5677789806569608499} + MinDistance: 0 + MaxDistance: 0 + Length: 56888 +--- !u!114 &-7277886014121453884 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Wooden Collision/Speed + m_EditorClassIdentifier: + Name: Speed + Min: 0 + Max: 8 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-7248799967418030207 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Country/Hour + m_EditorClassIdentifier: + Name: Hour + Min: 0 + Max: 3 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-6992756556786915566 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/City/Traffic + m_EditorClassIdentifier: + Name: Traffic + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-6915515647060395114 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: snapshot:/Slow-Motion + m_EditorClassIdentifier: + Path: snapshot:/Slow-Motion + guid: 098d8d6ee012cf48b620f9cc3bc478a3 + Banks: + - {fileID: 8958818033594522944} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &-6866285365055665025 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Ambience/Forest + m_EditorClassIdentifier: + Path: event:/Ambience/Forest + guid: e51074476d4a2e46bd1e4d558ce488ec + Banks: + - {fileID: 1507566728776054511} + IsStream: 1 + Is3D: 0 + IsOneShot: 0 + Parameters: + - {fileID: 7910736127753344473} + - {fileID: 3066922598506942344} + - {fileID: 8637360193677881062} + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &-6735440347963001137 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Ambience/Country + m_EditorClassIdentifier: + Path: event:/Ambience/Country + guid: 4ec79a24a46e484681da206c4e22b801 + Banks: + - {fileID: 1507566728776054511} + IsStream: 1 + Is3D: 0 + IsOneShot: 0 + Parameters: + - {fileID: -7248799967418030207} + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &-6685531190126217038 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Interactables/Wooden Collision + m_EditorClassIdentifier: + Path: event:/Interactables/Wooden Collision + guid: d80362bed8c8c5418ce6bce0de95807b + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: + - {fileID: -7277886014121453884} + MinDistance: 1 + MaxDistance: 20 + Length: 0 +--- !u!114 &-6445015509329371517 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Ride-on Mower/RPM + m_EditorClassIdentifier: + Name: RPM + Min: 0 + Max: 2000 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-6112239449709538351 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Weapons/Machine Gun + m_EditorClassIdentifier: + Path: event:/Weapons/Machine Gun + guid: faaab7e9f02d9341b32ea74e5753cfa0 + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 0 + Parameters: + - {fileID: -3493712513132075446} + MinDistance: 1 + MaxDistance: 20 + Length: 78 +--- !u!114 &-5810968061649293014 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/Music.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/Music.bank + Name: Music + StudioPath: bank:/Music + lastModified: 637495997887820118 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 10454080 + Exists: 1 +--- !u!114 &-5652433192010764131 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Character/Door Close + m_EditorClassIdentifier: + Path: event:/Character/Door Close + guid: 448f10435c287748a7854ae97ed0fb3d + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: [] + MinDistance: 1 + MaxDistance: 20 + Length: 653 +--- !u!114 &-5637953553718496753 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Explosion/Size + m_EditorClassIdentifier: + Name: Size + Min: 0 + Max: 3 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-5503825205488334955 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Character/Player Footsteps + m_EditorClassIdentifier: + Path: event:/Character/Player Footsteps + guid: 01d405e9f5764147a885f7844b244671 + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: + - {fileID: 4367476332520521904} + MinDistance: 1 + MaxDistance: 20 + Length: 0 +--- !u!114 &-5460395653444570609 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Car Engine/RPM + m_EditorClassIdentifier: + Name: RPM + Min: 0 + Max: 10000 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-5220439912511036330 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 03/Stinger + m_EditorClassIdentifier: + Name: Stinger + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-5057676734624866493 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Ride-on Mower/RPM + m_EditorClassIdentifier: + Name: RPM + Min: 0 + Max: 2000 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-4794246568588122348 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 01/Progression + m_EditorClassIdentifier: + Name: Progression + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-4363186268740097967 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Car Engine/RPM + m_EditorClassIdentifier: + Name: RPM + Min: 0 + Max: 10000 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-3767169846847778110 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: snapshot:/Pause + m_EditorClassIdentifier: + Path: snapshot:/Pause + guid: 98a405e3182b1d46b35c6eaea45fafd6 + Banks: + - {fileID: 8958818033594522944} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &-3493712513132075446 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Machine Gun/Auto-Stop + m_EditorClassIdentifier: + Name: Auto-Stop + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &-2776990974051642223 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Music/Level 03 + m_EditorClassIdentifier: + Path: event:/Music/Level 03 + guid: 5a1416ec12371c4b9944ce26875a548b + Banks: + - {fileID: -5810968061649293014} + IsStream: 1 + Is3D: 0 + IsOneShot: 0 + Parameters: + - {fileID: -5220439912511036330} + - {fileID: -1949990878170830} + MinDistance: 0 + MaxDistance: 0 + Length: 150857 +--- !u!114 &-2475653733262150197 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Barrel Roll/Speed + m_EditorClassIdentifier: + Name: Speed + Min: 0 + Max: 8 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-2443445598607337504 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/Master.strings.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/Master.strings.bank + Name: Master.strings + StudioPath: bank:/Master.strings + lastModified: 637495997822260983 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 4002 + Exists: 1 +--- !u!114 &-2418253002641725948 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Interactables/Barrel Roll + m_EditorClassIdentifier: + Path: event:/Interactables/Barrel Roll + guid: 40222cc4b6c4ed42a4731a47f19945ea + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 0 + Parameters: + - {fileID: 1793265207329793385} + MinDistance: 1 + MaxDistance: 20 + Length: 0 +--- !u!114 &-2416858635841673902 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: snapshot:/Reverb/Sewer Reverb + m_EditorClassIdentifier: + Path: snapshot:/Reverb/Sewer Reverb + guid: 8ee207c13b87aa4c949268fe72210c48 + Banks: + - {fileID: 8958818033594522944} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &-2336971250494517570 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Vehicles/Car Engine + m_EditorClassIdentifier: + Path: event:/Vehicles/Car Engine + guid: b463830caf239c4faf4b0951bfd37d84 + Banks: + - {fileID: 5884682174564844121} + IsStream: 0 + Is3D: 1 + IsOneShot: 0 + Parameters: + - {fileID: -4363186268740097967} + - {fileID: 4398004947105728974} + MinDistance: 1 + MaxDistance: 20 + Length: 0 +--- !u!114 &-2236851028653657581 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Machine Gun/Auto-Stop + m_EditorClassIdentifier: + Name: Auto-Stop + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-1815433723513422642 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 02/Area + m_EditorClassIdentifier: + Name: Area + Min: 0 + Max: 80 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-1531617232923243339 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Forest/Rain + m_EditorClassIdentifier: + Name: Rain + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-1175729122596764943 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Character/Health + m_EditorClassIdentifier: + Path: event:/Character/Health + guid: d6fef322452bff4faa855351bc5fe9cd + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: + - {fileID: 6098634058503677813} + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &-1019254172909631810 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/UI/Cancel + m_EditorClassIdentifier: + Path: event:/UI/Cancel + guid: e6483e2afc946343946833d2dd4d7b00 + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 0 + IsOneShot: 1 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 1026 +--- !u!114 &-841976802405939055 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Forest/Wind + m_EditorClassIdentifier: + Name: Wind + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &-151957624795533979 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Weapons/Explosion + m_EditorClassIdentifier: + Path: event:/Weapons/Explosion + guid: 3871681f6ce0f5409bac57f84bbcedd3 + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: + - {fileID: -5637953553718496753} + MinDistance: 1 + MaxDistance: 100 + Length: 0 +--- !u!114 &-33449684302817851 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Character/Dialogue + m_EditorClassIdentifier: + Path: event:/Character/Dialogue + guid: c5eca29a4beabe4e85c3054b11b21dcd + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: [] + MinDistance: 1 + MaxDistance: 20 + Length: 1000 +--- !u!114 &-1949990878170830 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 03/Intensity + m_EditorClassIdentifier: + Name: Intensity + Min: 0 + Max: 4 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !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: d32cf7c32a3ed8347bac48ef5ed56d82, type: 3} + m_Name: FMODStudioCache + m_EditorClassIdentifier: + EditorBanks: + - {fileID: -2443445598607337504} + - {fileID: 1646827598670020794} + - {fileID: 631280102866359407} + - {fileID: 8999275565678618086} + - {fileID: 8958818033594522944} + - {fileID: -5810968061649293014} + - {fileID: 1507566728776054511} + - {fileID: 5884682174564844121} + - {fileID: -8122538359583372443} + EditorEvents: + - {fileID: -6915515647060395114} + - {fileID: 592172348792374910} + - {fileID: -2416858635841673902} + - {fileID: -3767169846847778110} + - {fileID: 5873076954187332606} + - {fileID: -2776990974051642223} + - {fileID: 430464285870570266} + - {fileID: 1425378673241245563} + - {fileID: -7545483045301536161} + - {fileID: -5503825205488334955} + - {fileID: 2439352594547126499} + - {fileID: -151957624795533979} + - {fileID: -7659359929436151892} + - {fileID: -2418253002641725948} + - {fileID: -5652433192010764131} + - {fileID: -6735440347963001137} + - {fileID: 8449763426890363780} + - {fileID: 1713486663294413426} + - {fileID: 1173496622369213996} + - {fileID: -33449684302817851} + - {fileID: 3860721197454420744} + - {fileID: -1175729122596764943} + - {fileID: -6685531190126217038} + - {fileID: -6866285365055665025} + - {fileID: -1019254172909631810} + - {fileID: -6112239449709538351} + - {fileID: -2336971250494517570} + - {fileID: 5233580542034508407} + - {fileID: 6896638216189553869} + - {fileID: 1922969843971877521} + EditorParameters: [] + MasterBanks: + - {fileID: 8958818033594522944} + StringsBanks: + - {fileID: -2443445598607337504} + stringsBankWriteTime: 637495997822260983 + cacheVersion: 6 +--- !u!114 &399717647629584186 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Car Engine/Load + m_EditorClassIdentifier: + Name: Load + Min: -1 + Max: 1 + Default: -1 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &430464285870570266 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Music/Level 01 + m_EditorClassIdentifier: + Path: event:/Music/Level 01 + guid: 7cbabb74e8768c489cf967f000df1ffd + Banks: + - {fileID: -5810968061649293014} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: + - {fileID: 6340825763965355649} + - {fileID: -4794246568588122348} + MinDistance: 0 + MaxDistance: 0 + Length: 54339 +--- !u!114 &534779890368919493 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Radio Station/Spatializer + m_EditorClassIdentifier: + Name: Spatializer + Min: 0 + Max: 2 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &592172348792374910 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: snapshot:/Health Low + m_EditorClassIdentifier: + Path: snapshot:/Health Low + guid: 3441ea87f1ff9d4e8f8b294a2b518223 + Banks: + - {fileID: 8958818033594522944} + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &631280102866359407 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/Dialogue_EN.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/Dialogue_EN.bank + Name: Dialogue_EN + StudioPath: bank:/Dialogue_EN + lastModified: 637495997820693512 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 61120 + Exists: 1 +--- !u!114 &1173496622369213996 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/UI/Okay + m_EditorClassIdentifier: + Path: event:/UI/Okay + guid: 979e4792c69464459e33efbeec59b34a + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 0 + IsOneShot: 1 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 917 +--- !u!114 &1425378673241245563 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Music/Radio Station + m_EditorClassIdentifier: + Path: event:/Music/Radio Station + guid: 9faf6ab3142f454c8cf0fc622a0ea38a + Banks: + - {fileID: -5810968061649293014} + IsStream: 1 + Is3D: 1 + IsOneShot: 0 + Parameters: + - {fileID: -8666466107650256711} + - {fileID: -7803813789219444754} + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &1507566728776054511 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/SFX.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/SFX.bank + Name: SFX + StudioPath: bank:/SFX + lastModified: 637495997987531090 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 21579328 + Exists: 1 +--- !u!114 &1646827598670020794 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/Dialogue_CN.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/Dialogue_CN.bank + Name: Dialogue_CN + StudioPath: bank:/Dialogue_CN + lastModified: 637495997819255101 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 52416 + Exists: 1 +--- !u!114 &1713486663294413426 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Character/Radio Dialogue + m_EditorClassIdentifier: + Path: event:/Character/Radio Dialogue + guid: 871fc4431f70254ca9a1c619ca106412 + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: + - {fileID: 3818681919422599891} + MinDistance: 0 + MaxDistance: 0 + Length: 999 +--- !u!114 &1793265207329793385 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Barrel Roll/Speed + m_EditorClassIdentifier: + Name: Speed + Min: 0 + Max: 8 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &1922969843971877521 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/VO/Welcome + m_EditorClassIdentifier: + Path: event:/VO/Welcome + guid: 29bbead7d9ab5740b408eef937d66f2a + Banks: + - {fileID: -8122538359583372443} + IsStream: 0 + Is3D: 0 + IsOneShot: 1 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 2182 +--- !u!114 &1996686930553492733 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Wooden Collision/Speed + m_EditorClassIdentifier: + Name: Speed + Min: 0 + Max: 8 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &2439352594547126499 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Character/Door Open + m_EditorClassIdentifier: + Path: event:/Character/Door Open + guid: 18528562f3a80f47ab7a8af8f7df77bb + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: [] + MinDistance: 1 + MaxDistance: 20 + Length: 1274 +--- !u!114 &3066922598506942344 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Forest/Cover + m_EditorClassIdentifier: + Name: Cover + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &3182253762112364102 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Health/Health + m_EditorClassIdentifier: + Name: Health + Min: 0 + Max: 100 + Default: 100 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &3204400816360588942 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 03/Intensity + m_EditorClassIdentifier: + Name: Intensity + Min: 0 + Max: 4 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &3314938271451333151 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 01/Progression + m_EditorClassIdentifier: + Name: Progression + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &3818681919422599891 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Radio Dialogue/VO Sidechain + m_EditorClassIdentifier: + Name: VO Sidechain + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 4135641038 + data2: 716951279 + Exists: 1 +--- !u!114 &3860721197454420744 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Weapons/Pistol + m_EditorClassIdentifier: + Path: event:/Weapons/Pistol + guid: cf5dc803ebc4944083c77839b5d058e8 + Banks: + - {fileID: 1507566728776054511} + IsStream: 0 + Is3D: 1 + IsOneShot: 1 + Parameters: [] + MinDistance: 1 + MaxDistance: 20 + Length: 345 +--- !u!114 &4247688449534627133 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Radio Station/Freq + m_EditorClassIdentifier: + Name: Freq + Min: 0 + Max: 3 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &4271178556030483234 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Player Footsteps/Surface + m_EditorClassIdentifier: + Name: Surface + Min: 0 + Max: 2 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &4291923855292995166 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/City/Traffic + m_EditorClassIdentifier: + Name: Traffic + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &4367476332520521904 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Player Footsteps/Surface + m_EditorClassIdentifier: + Name: Surface + Min: 0 + Max: 2 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &4398004947105728974 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Car Engine/Load + m_EditorClassIdentifier: + Name: Load + Min: -1 + Max: 1 + Default: -1 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &5233580542034508407 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Vehicles/Ride-on Mower + m_EditorClassIdentifier: + Path: event:/Vehicles/Ride-on Mower + guid: f1e8a57ac28ec642b4651241a603a055 + Banks: + - {fileID: 5884682174564844121} + IsStream: 0 + Is3D: 1 + IsOneShot: 0 + Parameters: + - {fileID: -8940783032877342582} + - {fileID: -6445015509329371517} + MinDistance: 1 + MaxDistance: 20 + Length: 0 +--- !u!114 &5677789806569608499 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 02/Area + m_EditorClassIdentifier: + Name: Area + Min: 0 + Max: 80 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &5873076954187332606 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: snapshot:/Reverb/Cave Reverb + m_EditorClassIdentifier: + Path: snapshot:/Reverb/Cave Reverb + guid: c0ee95b678fe5547b8069690c06dfc0b + Banks: + - {fileID: 8958818033594522944} + IsStream: 0 + Is3D: 0 + IsOneShot: 0 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &5884682174564844121 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/Vehicles.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/Vehicles.bank + Name: Vehicles + StudioPath: bank:/Vehicles + lastModified: 637495997990551817 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 222368 + Exists: 1 +--- !u!114 &6098634058503677813 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Health/Health + m_EditorClassIdentifier: + Name: Health + Min: 0 + Max: 100 + Default: 100 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &6100701414768045783 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 01/Stinger + m_EditorClassIdentifier: + Name: Stinger + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &6340825763965355649 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 01/Stinger + m_EditorClassIdentifier: + Name: Stinger + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &6438015783964613974 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Radio Dialogue/VO Sidechain + m_EditorClassIdentifier: + Name: VO Sidechain + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &6500579297605462009 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/City/Walla + m_EditorClassIdentifier: + Name: Walla + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &6896638216189553869 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/VO/Main Menu + m_EditorClassIdentifier: + Path: event:/VO/Main Menu + guid: 1612b8a70bfb9c4b9e7db897825d9821 + Banks: + - {fileID: -8122538359583372443} + IsStream: 0 + Is3D: 0 + IsOneShot: 1 + Parameters: [] + MinDistance: 0 + MaxDistance: 0 + Length: 1859 +--- !u!114 &7910736127753344473 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Forest/Wind + m_EditorClassIdentifier: + Name: Wind + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &8432126479874434312 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Ride-on Mower/Load + m_EditorClassIdentifier: + Name: Load + Min: -1 + Max: 1 + Default: -1 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &8449763426890363780 +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: ceb653cd98e289a4e8697a1af55201f2, type: 3} + m_Name: event:/Ambience/City + m_EditorClassIdentifier: + Path: event:/Ambience/City + guid: 7e9198bb5bd6f041a0cac50756da3f0e + Banks: + - {fileID: 1507566728776054511} + IsStream: 1 + Is3D: 1 + IsOneShot: 0 + Parameters: + - {fileID: -7625393254389082378} + - {fileID: -6992756556786915566} + MinDistance: 0 + MaxDistance: 0 + Length: 0 +--- !u!114 &8637360193677881062 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Forest/Rain + m_EditorClassIdentifier: + Name: Rain + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 1 +--- !u!114 &8958818033594522944 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/Master.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/Master.bank + Name: Master + StudioPath: bank:/Master + lastModified: 637495997822211266 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 15340 + Exists: 1 +--- !u!114 &8999275565678618086 +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: c18180ecb35941f4682ae60107b85b7c, type: 3} + m_Name: bank:/Dialogue_JP.bank + m_EditorClassIdentifier: + Path: D:/FMOD/FMOD Project/Build/Desktop/Dialogue_JP.bank + Name: Dialogue_JP + StudioPath: bank:/Dialogue_JP + lastModified: 637495997822047587 + LoadResult: 0 + FileSizes: + - Name: Desktop + Value: 66560 + Exists: 1 +--- !u!114 &9065371513961018699 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Forest/Cover + m_EditorClassIdentifier: + Name: Cover + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &9074340619853227715 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Explosion/Size + m_EditorClassIdentifier: + Name: Size + Min: 0 + Max: 3 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 +--- !u!114 &9095180307666411540 +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: fecb8ef7f94ca804a8ab72049b86782e, type: 3} + m_Name: parameter:/Level 03/Stinger + m_EditorClassIdentifier: + Name: Stinger + Min: 0 + Max: 1 + Default: 0 + ID: + data1: 0 + data2: 0 + Exists: 0 diff --git a/game/Assets/Plugins/FMOD/Cache/Editor/FMODStudioCache.asset.meta b/game/Assets/Plugins/FMOD/Cache/Editor/FMODStudioCache.asset.meta new file mode 100644 index 0000000..f05eb8d --- /dev/null +++ b/game/Assets/Plugins/FMOD/Cache/Editor/FMODStudioCache.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c89ac03cd2d3f984e901aee227e1a9f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/FMODUnity.asmdef b/game/Assets/Plugins/FMOD/FMODUnity.asmdef new file mode 100644 index 0000000..e5b6bf9 --- /dev/null +++ b/game/Assets/Plugins/FMOD/FMODUnity.asmdef @@ -0,0 +1,28 @@ +{ + "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" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/FMODUnity.asmdef.meta b/game/Assets/Plugins/FMOD/FMODUnity.asmdef.meta new file mode 100644 index 0000000..5f7fa24 --- /dev/null +++ b/game/Assets/Plugins/FMOD/FMODUnity.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0c752da273b17c547ae705acf0f2adf2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/Resources.meta b/game/Assets/Plugins/FMOD/Resources.meta new file mode 100644 index 0000000..dafeed9 --- /dev/null +++ b/game/Assets/Plugins/FMOD/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc74f97a5d2ef2e4c9b8bb38ecad159f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset b/game/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset new file mode 100644 index 0000000..6b81815 --- /dev/null +++ b/game/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset @@ -0,0 +1,748 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6738338196430870980 +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: + m_EditorClassIdentifier: + identifier: c88d16e5272a4e241b0ef0ac2e53b73d + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &-6089035914365326891 +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: + m_EditorClassIdentifier: + identifier: playInEditor + parentIdentifier: + displaySortOrder: 0 + active: 1 + Properties: + LiveUpdate: + Value: 1 + HasValue: 1 + LiveUpdatePort: + Value: 9264 + HasValue: 1 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &-5367635807832439698 +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: + m_EditorClassIdentifier: + identifier: 52eb9df5db46521439908db3a29a1bbb + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &-5193902579471118096 +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: + m_EditorClassIdentifier: + identifier: b7716510a1f36934c87976f3a81dbf3d + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &-4382424278142626766 +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: + m_EditorClassIdentifier: + identifier: 46fbfdf3fc43db0458918377fd40293e + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &-2630084199530954548 +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: + m_EditorClassIdentifier: + identifier: 0f8eb3f400726694eb47beb1a9f94ce8 + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &-2160379074185995061 +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: + m_EditorClassIdentifier: + identifier: fd7c55dab0fce234b8c25f6ffca523c1 + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &-743563915009714098 +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: + m_EditorClassIdentifier: + identifier: 2fea114e74ecf3c4f920e1d5cc1c4c40 + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + 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: D:/FMOD/FMOD Project/Examples.fspro + sourceBankPath: D:\FMOD\FMOD Project\Build + SourceBankPathUnformatted: + AutomaticEventLoading: 1 + BankLoadType: 0 + AutomaticSampleLoading: 0 + EncryptionKey: + ImportType: 0 + TargetAssetPath: FMODBanks + TargetBankFolder: + LoggingLevel: 2 + SpeakerModeSettings: [] + SampleRateSettings: [] + LiveUpdateSettings: [] + OverlaySettings: [] + LoggingSettings: [] + BankDirectorySettings: [] + VirtualChannelSettings: [] + RealChannelSettings: [] + Plugins: [] + MasterBanks: + - Master + Banks: + - Dialogue_CN + - Dialogue_EN + - Dialogue_JP + - Music + - SFX + - Vehicles + - VO + BanksToLoad: [] + LiveUpdatePort: 9264 + EnableMemoryTracking: 0 + AndroidUseOBB: 0 + MeterChannelOrdering: 0 + StopEventsOutsideMaxDistance: 0 + BoltUnitOptionsBuildPending: 0 + MigratedPlatforms: 0c000000150000000b0000000a00000009000000120000000800000005000000060000000200000001000000 +--- !u!114 &2690397799405039890 +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: + m_EditorClassIdentifier: + identifier: e7a046c753c3c3d4aacc91f6597f310d + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &2826020808402437411 +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: + m_EditorClassIdentifier: + identifier: default + parentIdentifier: + displaySortOrder: 0 + active: 1 + Properties: + LiveUpdate: + Value: 0 + HasValue: 1 + LiveUpdatePort: + Value: 9264 + HasValue: 1 + Overlay: + Value: 0 + HasValue: 1 + Logging: + Value: 0 + HasValue: 0 + SampleRate: + Value: 0 + HasValue: 1 + BuildDirectory: + Value: Desktop + HasValue: 1 + SpeakerMode: + Value: 3 + HasValue: 1 + VirtualChannelCount: + Value: 128 + HasValue: 1 + RealChannelCount: + Value: 32 + HasValue: 1 + DSPBufferLength: + Value: 0 + HasValue: 1 + DSPBufferCount: + Value: 0 + HasValue: 1 + Plugins: + Value: [] + HasValue: 1 + StaticPlugins: + Value: [] + HasValue: 1 + CallbackHandler: + Value: {fileID: 0} + HasValue: 1 + outputType: + threadAffinities: + Value: [] + HasValue: 0 +--- !u!114 &6786497496965212811 +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: + m_EditorClassIdentifier: + identifier: 2c5177b11d81d824dbb064f9ac8527da + parentIdentifier: default + displaySortOrder: 0 + 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 + outputType: + threadAffinities: + Value: [] + HasValue: 0 diff --git a/game/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset.meta b/game/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset.meta new file mode 100644 index 0000000..ce06c1f --- /dev/null +++ b/game/Assets/Plugins/FMOD/Resources/FMODStudioSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 453b9371970fbf84dac0ce3e7e762969 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/addons.meta b/game/Assets/Plugins/FMOD/addons.meta new file mode 100644 index 0000000..c3ad63a --- /dev/null +++ b/game/Assets/Plugins/FMOD/addons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8957835da6f738468b190d4f27720e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/addons/ResonanceAudio.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio.meta new file mode 100644 index 0000000..59a2969 --- /dev/null +++ b/game/Assets/Plugins/FMOD/addons/ResonanceAudio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e14e3d4d56b4e6641998f62e57f5d9e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor.meta new file mode 100644 index 0000000..19d91a0 --- /dev/null +++ b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ec157c6bf4f83342b0b9579db04a989 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef new file mode 100644 index 0000000..b2e23e0 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FMODUnityResonanceEditor.asmdef.meta new file mode 100644 index 0000000..8b6366f --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs new file mode 100644 index 0000000..abdb016 --- /dev/null +++ b/game/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."); + + 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); + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Editor/FmodResonanceAudioRoomEditor.cs.meta new file mode 100644 index 0000000..98b5365 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts.meta new file mode 100644 index 0000000..f528705 --- /dev/null +++ b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 849ef255466fffb408ef983f2ef9b478 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef new file mode 100644 index 0000000..168a1f3 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FMODUnityResonance.asmdef.meta new file mode 100644 index 0000000..25e9a50 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs new file mode 100644 index 0000000..bda2a0f --- /dev/null +++ b/game/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 + { + /// 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); + } + + /// 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; + + [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); + RuntimeManager.StudioSystem.flushCommands(); + 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]); + RuntimeManager.StudioSystem.flushCommands(); + FMOD.ChannelGroup channelGroup; + busses[currentBus].getChannelGroup(out channelGroup); + RuntimeManager.StudioSystem.flushCommands(); + 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; + } + } + } + } + } + Debug.LogError(listenerPluginName + " not found in the FMOD project."); + return dsp; + } + + // 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 = Marshal.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; + } +} diff --git a/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudio.cs.meta new file mode 100644 index 0000000..847a975 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs new file mode 100644 index 0000000..3d16c6b --- /dev/null +++ b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs @@ -0,0 +1,109 @@ +// 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.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. + public SurfaceMaterial leftWall = SurfaceMaterial.ConcreteBlockCoarse; + + /// Room surface material in positive x direction. + public SurfaceMaterial rightWall = SurfaceMaterial.ConcreteBlockCoarse; + + /// Room surface material in negative y direction. + public SurfaceMaterial floor = SurfaceMaterial.ParquetOnConcrete; + + /// Room surface material in positive y direction. + public SurfaceMaterial ceiling = SurfaceMaterial.PlasterRough; + + /// Room surface material in negative z direction. + public SurfaceMaterial backWall = SurfaceMaterial.ConcreteBlockCoarse; + + /// Room surface material in positive z direction. + public SurfaceMaterial frontWall = SurfaceMaterial.ConcreteBlockCoarse; + + /// Reflectivity scalar for each surface of the room. + public float reflectivity = 1.0f; + + /// Reverb gain modifier in decibels. + public float reverbGainDb = 0.0f; + + /// Reverb brightness modifier. + public float reverbBrightness = 0.0f; + + /// Reverb time modifier. + public float reverbTime = 1.0f; + + /// Size of the room (normalized with respect to scale of the game object). + public Vector3 size = Vector3.one; + + void OnEnable() + { + FmodResonanceAudio.UpdateAudioRoom(this, FmodResonanceAudio.IsListenerInsideRoom(this)); + } + + void OnDisable() + { + FmodResonanceAudio.UpdateAudioRoom(this, false); + } + + void Update() + { + FmodResonanceAudio.UpdateAudioRoom(this, FmodResonanceAudio.IsListenerInsideRoom(this)); + } + + void OnDrawGizmosSelected() + { + // Draw shoebox model wireframe of the room. + Gizmos.color = Color.yellow; + Gizmos.matrix = transform.localToWorldMatrix; + Gizmos.DrawWireCube(Vector3.zero, size); + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs.meta b/game/Assets/Plugins/FMOD/addons/ResonanceAudio/Scripts/FmodResonanceAudioRoom.cs.meta new file mode 100644 index 0000000..abc3eca --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/lib.meta b/game/Assets/Plugins/FMOD/lib.meta new file mode 100644 index 0000000..05093e5 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91a2b2b88d2c9e843b8c6001f861874d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/linux.meta b/game/Assets/Plugins/FMOD/lib/linux.meta new file mode 100644 index 0000000..035ed90 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11a196d577938ee4c8ad44a334432be8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86.meta b/game/Assets/Plugins/FMOD/lib/linux/x86.meta new file mode 100644 index 0000000..753d417 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0fbef78526b6ce24cbbdce3d26a6f9ac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudio.so b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudio.so new file mode 100644 index 0000000..3ce3fa0 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudio.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bf767fcab84b701e2b5623fa3cc34e17c3dc03325e1d33027b77ab7430cc235 +size 3228204 diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudio.so.meta b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudio.so.meta new file mode 100644 index 0000000..cb556be --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudio.so.meta @@ -0,0 +1,78 @@ +fileFormatVersion: 2 +guid: 4495168029c64a340a80fbfa8e0f1209 +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: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 1 + settings: + CPU: x86 + 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_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/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudioL.so b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudioL.so new file mode 100644 index 0000000..a29b82b --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudioL.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5eea85365344b1feee0863d95b343abee7355b50a741ae24149dfa7b65411c32 +size 4461612 diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudioL.so.meta b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudioL.so.meta new file mode 100644 index 0000000..64d7fb1 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86/libfmodstudioL.so.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: f97044b07bd9b4555b0669530d6ca6f2 +timeCreated: 1481780142 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: ARMv7 + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 1 + Exclude LinuxUniversal: 0 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude SamsungTV: 1 + Exclude Tizen: 1 + Exclude WebGL: 1 + Exclude Win: 0 + Exclude Win64: 0 + Exclude iOS: 1 + Editor: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 1 + settings: + CPU: x86 + 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: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 1 + settings: + CPU: None + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86_64.meta b/game/Assets/Plugins/FMOD/lib/linux/x86_64.meta new file mode 100644 index 0000000..31e9eab --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86_64.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0fb9fde041ee144fb5b8bd445080290 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudio.so b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudio.so new file mode 100644 index 0000000..4896cb2 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudio.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38522ee47041a23c3e71dbfd20968423fc6a83b26ea62ff2487afb4419973407 +size 3145056 diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudio.so.meta b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudio.so.meta new file mode 100644 index 0000000..67f8f9a --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/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/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudioL.so b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudioL.so new file mode 100644 index 0000000..8c365cf --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudioL.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1f5f08494591b782244a7d4427f587d316916a4ffa37cbc543c070c19529eda +size 4149632 diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudioL.so.meta b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudioL.so.meta new file mode 100644 index 0000000..7844dad --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libfmodstudioL.so.meta @@ -0,0 +1,65 @@ +fileFormatVersion: 2 +guid: ab75dd6bc4ee544bca23421ff8bff0f9 +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/game/Assets/Plugins/FMOD/lib/linux/x86_64/libresonanceaudio.so b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libresonanceaudio.so new file mode 100644 index 0000000..dc87eb5 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libresonanceaudio.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22d175f75d2a216af4bf114e04a24426065fed4e3bdd7227307dcb54cbcfc069 +size 939264 diff --git a/game/Assets/Plugins/FMOD/lib/linux/x86_64/libresonanceaudio.so.meta b/game/Assets/Plugins/FMOD/lib/linux/x86_64/libresonanceaudio.so.meta new file mode 100644 index 0000000..10a9902 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/linux/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/game/Assets/Plugins/FMOD/lib/mac.meta b/game/Assets/Plugins/FMOD/lib/mac.meta new file mode 100644 index 0000000..1edb14f --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c945a15e718b02d46beb162d9ab539f7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle.meta new file mode 100644 index 0000000..12f00c6 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents.meta new file mode 100644 index 0000000..d527a58 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/Info.plist b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/Info.plist new file mode 100644 index 0000000..98befae --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/Info.plist.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/Info.plist.meta new file mode 100644 index 0000000..5a015e7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/Info.plist.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d90bca931071b04f842310ac5cff3f6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS.meta new file mode 100644 index 0000000..8241efa --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS/fmodstudio b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS/fmodstudio new file mode 100644 index 0000000..28ef656 Binary files /dev/null and b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS/fmodstudio differ diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta new file mode 100644 index 0000000..c9f7db9 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: c5e926e235023354fb6b94bc154a8d2c +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature.meta new file mode 100644 index 0000000..63844e8 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad0a0ab23d521b543bf6f1e033c36638 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature/CodeResources b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature/CodeResources new file mode 100644 index 0000000..d5d0fd7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature/CodeResources.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature/CodeResources.meta new file mode 100644 index 0000000..ec7e108 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudio.bundle/Contents/_CodeSignature/CodeResources.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9707e782b3cd1664c96881dcb157bd8d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle.meta new file mode 100644 index 0000000..5434fee --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 17156b5dbba3da94e9d70a06add50376 +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/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents.meta new file mode 100644 index 0000000..0330bae --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3ee033c1fbe25354097a9e4f56806fd5 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/Info.plist b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/Info.plist new file mode 100644 index 0000000..2760ee7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/Info.plist.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/Info.plist.meta new file mode 100644 index 0000000..6af6100 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/Info.plist.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 83d055e7b3d34a843b4c1e007b38a904 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS.meta new file mode 100644 index 0000000..f76ad48 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d31dcfc39fb2ce943a0f3b1a5fe3d574 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS/fmodstudioL b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS/fmodstudioL new file mode 100644 index 0000000..88276df Binary files /dev/null and b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS/fmodstudioL differ diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta new file mode 100644 index 0000000..51d9db2 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ccbd5fd69ea0cd145a1b6ab7543f3b8d +timeCreated: 1429825705 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature.meta new file mode 100644 index 0000000..13f6f9e --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a53c5cbfd0167164ab8a1b2c8ca2dcb7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources new file mode 100644 index 0000000..d5d0fd7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources.meta b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources.meta new file mode 100644 index 0000000..23c0c52 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/fmodstudioL.bundle/Contents/_CodeSignature/CodeResources.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b2f76bc1549147a49b4343f708fc80b8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle.meta b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle.meta new file mode 100644 index 0000000..345a01c --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents.meta b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents.meta new file mode 100644 index 0000000..b7007ba --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/Info.plist b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/Info.plist new file mode 100644 index 0000000..95ee74a --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/Info.plist.meta b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/Info.plist.meta new file mode 100644 index 0000000..1a8aa93 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/Info.plist.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cc677a5a7dbbcc24b9bbc4478a199e60 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/MacOS.meta b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/MacOS.meta new file mode 100644 index 0000000..6039062 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/MacOS/resonanceaudio b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/MacOS/resonanceaudio new file mode 100644 index 0000000..db4c260 Binary files /dev/null and b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/MacOS/resonanceaudio differ diff --git a/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/MacOS/resonanceaudio.meta b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/MacOS/resonanceaudio.meta new file mode 100644 index 0000000..7d94aec --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature.meta b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature.meta new file mode 100644 index 0000000..8038726 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47b3d473c1da7484bbd286a8cb0edae4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources new file mode 100644 index 0000000..d5d0fd7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/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/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources.meta b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources.meta new file mode 100644 index 0000000..7ee7130 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/mac/resonanceaudio.bundle/Contents/_CodeSignature/CodeResources.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8c55df163243c7c4dab981d99a397939 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/win.meta b/game/Assets/Plugins/FMOD/lib/win.meta new file mode 100644 index 0000000..3dc3871 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0afb3e497e07d33418432d422b4d664a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/win/x86.meta b/game/Assets/Plugins/FMOD/lib/win/x86.meta new file mode 100644 index 0000000..7b87105 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 03f590b69e4afe14fa1c73f89a98a203 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudio.dll b/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudio.dll new file mode 100644 index 0000000..a19b31d --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudio.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24c5da7cdb9f927b76ada7da389fe11e07bacccc0cdce1b12568e4115de861a2 +size 2479616 diff --git a/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudio.dll.meta b/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudio.dll.meta new file mode 100644 index 0000000..a32046a --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/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/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudioL.dll b/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudioL.dll new file mode 100644 index 0000000..32cc2b4 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudioL.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5a73e05961cce8978504cf152ad13e208d0b16e6542aeef35e171a71379ad4d +size 3243520 diff --git a/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudioL.dll.meta b/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudioL.dll.meta new file mode 100644 index 0000000..df743d6 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86/fmodstudioL.dll.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 6e48bf6e640baa24f9e87619d1a61e8d +timeCreated: 1429083373 +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: 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/game/Assets/Plugins/FMOD/lib/win/x86/resonanceaudio.dll b/game/Assets/Plugins/FMOD/lib/win/x86/resonanceaudio.dll new file mode 100644 index 0000000..0f60b5f --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86/resonanceaudio.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3b5b27d0e8fa811882b5e86211dcfbdddc384ef4faecaa32f6a37cdb02a9647 +size 706560 diff --git a/game/Assets/Plugins/FMOD/lib/win/x86/resonanceaudio.dll.meta b/game/Assets/Plugins/FMOD/lib/win/x86/resonanceaudio.dll.meta new file mode 100644 index 0000000..b47d546 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/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/game/Assets/Plugins/FMOD/lib/win/x86_64.meta b/game/Assets/Plugins/FMOD/lib/win/x86_64.meta new file mode 100644 index 0000000..dfce3ea --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86_64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8105cca2fc4eb2e488e010278c3ea1bf +folderAsset: yes +timeCreated: 1432606678 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudio.dll b/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudio.dll new file mode 100644 index 0000000..0dea119 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudio.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24c80f8180fdae5a5dab3048f4997bb5f6aede0883dafad968fcbd5ac9d31084 +size 3061248 diff --git a/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudio.dll.meta b/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudio.dll.meta new file mode 100644 index 0000000..2059acb --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/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/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudioL.dll b/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudioL.dll new file mode 100644 index 0000000..ad8a0ee --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudioL.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d8ef3ffd457da565ebac83a2c537b2766ec9d54322f36dfe114719f36ee07cd +size 4029440 diff --git a/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudioL.dll.meta b/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudioL.dll.meta new file mode 100644 index 0000000..15dbbe6 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86_64/fmodstudioL.dll.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 8514ea8d6deab804895ec1cab6902681 +timeCreated: 1429083373 +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: 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/game/Assets/Plugins/FMOD/lib/win/x86_64/resonanceaudio.dll b/game/Assets/Plugins/FMOD/lib/win/x86_64/resonanceaudio.dll new file mode 100644 index 0000000..4a3b1a0 --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/x86_64/resonanceaudio.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fec74c93409d5a8b4b99fc98d0f5629bfdcdad48b170d672af41602bff19aab7 +size 860160 diff --git a/game/Assets/Plugins/FMOD/lib/win/x86_64/resonanceaudio.dll.meta b/game/Assets/Plugins/FMOD/lib/win/x86_64/resonanceaudio.dll.meta new file mode 100644 index 0000000..69301bb --- /dev/null +++ b/game/Assets/Plugins/FMOD/lib/win/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/game/Assets/Plugins/FMOD/platform_ios.mm b/game/Assets/Plugins/FMOD/platform_ios.mm new file mode 100644 index 0000000..05660bb --- /dev/null +++ b/game/Assets/Plugins/FMOD/platform_ios.mm @@ -0,0 +1,27 @@ +#import +#import + +void (*gSuspendCallback)(bool suspend); + +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) + { + [[AVAudioSession sharedInstance] setActive:TRUE error:nil]; + } + + if (gSuspendCallback) + { + gSuspendCallback(began); + } + }]; + } +} diff --git a/game/Assets/Plugins/FMOD/platform_ios.mm.meta b/game/Assets/Plugins/FMOD/platform_ios.mm.meta new file mode 100644 index 0000000..63eb170 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms.meta b/game/Assets/Plugins/FMOD/platforms.meta new file mode 100644 index 0000000..ada2d33 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a31f4ea9584df548ac536a0b6c19bdd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/android.meta b/game/Assets/Plugins/FMOD/platforms/android.meta new file mode 100644 index 0000000..67a97ad --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca9461535f8115a4fb8293c748bcd2e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/android/src.meta b/game/Assets/Plugins/FMOD/platforms/android/src.meta new file mode 100644 index 0000000..c06295c --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs b/game/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs new file mode 100644 index 0000000..641ebfd --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs @@ -0,0 +1,100 @@ +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"); + } + + public override string DisplayName { get { return "Android"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.Android, this); + +#if UNITY_EDITOR + settings.DeclareBuildTarget(BuildTarget.Android, this); +#endif + } + +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Android; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + yield return "android/fmod.jar"; + + foreach (string architecture in new[] { "arm64-v8a", "armeabi-v7a", "x86" }) + { + yield return string.Format("android/{0}/libfmod{1}.so", architecture, suffix); + yield return string.Format("android/{0}/libfmodstudio{1}.so", architecture, suffix); + } + } +#endif + + public override string GetBankFolder() + { + return StaticGetBankFolder(); + } + + public static string StaticGetBankFolder() + { + return Settings.Instance.AndroidUseOBB ? Application.streamingAssetsPath : "file:///android_asset"; + } + + public override string GetPluginPath(string pluginName) + { + return StaticGetPluginPath(pluginName); + } + + public static string StaticGetPluginPath(string pluginName) + { + return string.Format("lib{0}.so", pluginName); + } +#if UNITY_EDITOR + public 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 }, + }; + + public override int CoreCount { get { return MaximumCoreCount; } } +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs.meta b/game/Assets/Plugins/FMOD/platforms/android/src/PlatformAndroid.cs.meta new file mode 100644 index 0000000..ea89309 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/html5.meta b/game/Assets/Plugins/FMOD/platforms/html5.meta new file mode 100644 index 0000000..82517eb --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/html5.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e8b0cce3730fcf4e996e9cd562a9858 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/html5/src.meta b/game/Assets/Plugins/FMOD/platforms/html5/src.meta new file mode 100644 index 0000000..934cfff --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs b/game/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs new file mode 100644 index 0000000..cccdd80 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs @@ -0,0 +1,76 @@ +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"); + } + + public override string DisplayName { get { return "WebGL"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.WebGLPlayer, this); + +#if UNITY_EDITOR + settings.DeclareBuildTarget(BuildTarget.WebGL, this); +#endif + } + +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.WebGL; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + yield return string.Format("html5/libfmodstudiounityplugin{0}.bc", suffix); + } + + public override bool IsFMODStaticallyLinked { get { return true; } } +#endif + + public override string GetPluginPath(string pluginName) + { + return string.Format("{0}/{1}.bc", GetPluginBasePath(), pluginName); + } +#if UNITY_EDITOR + public override OutputType[] ValidOutputTypes + { + get + { + return sValidOutputTypes; + } + } + + private static OutputType[] sValidOutputTypes = { + new OutputType() { displayName = "JavaScript webaudio output", outputType = FMOD.OUTPUTTYPE.WEBAUDIO }, + }; +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs.meta b/game/Assets/Plugins/FMOD/platforms/html5/src/PlatformWebGL.cs.meta new file mode 100644 index 0000000..ff186e1 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/ios.meta b/game/Assets/Plugins/FMOD/platforms/ios.meta new file mode 100644 index 0000000..db1a7b9 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/ios.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56ef07f8e7caf5f4589a020791b532cd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/ios/src.meta b/game/Assets/Plugins/FMOD/platforms/ios/src.meta new file mode 100644 index 0000000..7dd91fd --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs b/game/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs new file mode 100644 index 0000000..8b525f6 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs @@ -0,0 +1,129 @@ +#if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR +#define USE_FMOD_NATIVE_PLUGIN_INIT +#endif + +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"); + } + + public override string DisplayName { get { return "iOS"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.IPhonePlayer, this); + +#if UNITY_EDITOR + settings.DeclareBuildTarget(BuildTarget.iOS, this); +#endif + } + +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.iOS; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK) + { + yield return string.Format("ios/libfmodstudiounityplugin{0}.a", suffix); + } + + if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.SimulatorSDK) + { + yield return string.Format("ios/libfmodstudiounitypluginsimulator{0}.a", suffix); + } + } + + protected override IEnumerable GetRelativeOptionalBinaryPaths(BuildTarget buildTarget, bool allVariants) + { + if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.DeviceSDK) + { + yield return "ios/libresonanceaudio.a"; + } + + if (allVariants || PlayerSettings.iOS.sdkVersion == iOSSdkVersion.SimulatorSDK) + { + yield return "ios/libresonanceaudiosimulator.a"; + } + } + + public override bool IsFMODStaticallyLinked { get { return true; } } + + public override bool SupportsAdditionalCPP(BuildTarget target) + { + return StaticSupportsAdditionalCpp(); + } + + public static bool StaticSupportsAdditionalCpp() + { + return false; + } +#endif + + public 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 USE_FMOD_NATIVE_PLUGIN_INIT + // Legacy static plugin system + FmodUnityNativePluginInit(coreSystem.handle); +#endif + } + +#if USE_FMOD_NATIVE_PLUGIN_INIT + [DllImport("__Internal")] + private static extern FMOD.RESULT FmodUnityNativePluginInit(IntPtr system); +#endif +#if UNITY_EDITOR + public override OutputType[] ValidOutputTypes + { + get + { + return sValidOutputTypes; + } + } + + private static OutputType[] sValidOutputTypes = { + new OutputType() { displayName = "Core Audio", outputType = FMOD.OUTPUTTYPE.COREAUDIO }, + }; +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs.meta b/game/Assets/Plugins/FMOD/platforms/ios/src/PlatformIOS.cs.meta new file mode 100644 index 0000000..41fa2df --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/linux.meta b/game/Assets/Plugins/FMOD/platforms/linux.meta new file mode 100644 index 0000000..1d182ec --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/linux.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 127a9ee57a2a27a439bf9e6b2d5731b6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/linux/src.meta b/game/Assets/Plugins/FMOD/platforms/linux/src.meta new file mode 100644 index 0000000..2625b93 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs b/game/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs new file mode 100644 index 0000000..62847bd --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs @@ -0,0 +1,107 @@ +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"); + } + + public override string DisplayName { get { return "Linux"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.LinuxPlayer, this); + +#if UNITY_EDITOR + settings.DeclareBuildTarget(BuildTarget.StandaloneLinux64, this); +#if !UNITY_2019_2_OR_NEWER + settings.DeclareBuildTarget(BuildTarget.StandaloneLinux, this); + settings.DeclareBuildTarget(BuildTarget.StandaloneLinuxUniversal, this); +#endif +#endif + } + +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Linux; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + switch (buildTarget) + { + case BuildTarget.StandaloneLinux64: + yield return string.Format("linux/x86_64/libfmodstudio{0}.so", suffix); + break; +#if !UNITY_2019_2_OR_NEWER + case BuildTarget.StandaloneLinux: + yield return string.Format("linux/x86/libfmodstudio{0}.so", suffix); + break; + case BuildTarget.StandaloneLinuxUniversal: + yield return string.Format("linux/x86/libfmodstudio{0}.so", suffix); + yield return string.Format("linux/x86_64/libfmodstudio{0}.so", suffix); + break; +#endif + default: + throw new System.NotSupportedException("Unrecognised Build Target"); + + } + } +#endif + + public override string GetPluginPath(string pluginName) + { +#if UNITY_2019_1_OR_NEWER + return string.Format("{0}/lib{1}.so", GetPluginBasePath(), pluginName); +#else + if (System.IntPtr.Size == 8) + { + return string.Format("{0}/x86_64/lib{1}.so", GetPluginBasePath(), pluginName); + } + else + { + return string.Format("{0}/x86/lib{1}.so", GetPluginBasePath(), pluginName); + } +#endif + } +#if UNITY_EDITOR + public 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 + } +} diff --git a/game/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs.meta b/game/Assets/Plugins/FMOD/platforms/linux/src/PlatformLinux.cs.meta new file mode 100644 index 0000000..f9b88e1 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/mac.meta b/game/Assets/Plugins/FMOD/platforms/mac.meta new file mode 100644 index 0000000..3bf1fba --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/mac.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5dd2bfa8b9eb6874b9e50b79490891a7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/mac/src.meta b/game/Assets/Plugins/FMOD/platforms/mac/src.meta new file mode 100644 index 0000000..d51d5c9 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs b/game/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs new file mode 100644 index 0000000..bb31313 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs @@ -0,0 +1,78 @@ +using System.Collections.Generic; +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"); + } + + public override string DisplayName { get { return "macOS"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.OSXPlayer, this); +#if UNITY_EDITOR + settings.DeclareBuildTarget(BuildTarget.StandaloneOSX, this); +#endif + } + +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Mac; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + yield return string.Format("mac/fmodstudio{0}.bundle", suffix); + } + + public override bool SupportsAdditionalCPP(BuildTarget target) + { + return false; + } +#endif + + public override string GetPluginPath(string pluginName) + { + return string.Format("{0}/{1}.bundle", GetPluginBasePath(), pluginName); + } +#if UNITY_EDITOR + public override OutputType[] ValidOutputTypes + { + get + { + return sValidOutputTypes; + } + } + + private static OutputType[] sValidOutputTypes = { + new OutputType() { displayName = "Core Audio", outputType = FMOD.OUTPUTTYPE.COREAUDIO }, + }; +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs.meta b/game/Assets/Plugins/FMOD/platforms/mac/src/PlatformMac.cs.meta new file mode 100644 index 0000000..68dbe88 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/tvos.meta b/game/Assets/Plugins/FMOD/platforms/tvos.meta new file mode 100644 index 0000000..7ddd670 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/tvos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b878fb13ea2d16a40b79b4400b5149ba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/tvos/src.meta b/game/Assets/Plugins/FMOD/platforms/tvos/src.meta new file mode 100644 index 0000000..88418f4 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs b/game/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs new file mode 100644 index 0000000..6a62069 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs @@ -0,0 +1,91 @@ +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"); + } + + public override string DisplayName { get { return "Apple TV"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.tvOS, this); + +#if UNITY_EDITOR + settings.DeclareBuildTarget(BuildTarget.tvOS, this); +#endif + } + +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.AppleTV; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + if (allVariants || PlayerSettings.tvOS.sdkVersion == tvOSSdkVersion.Device) + { + yield return string.Format("tvos/libfmodstudiounityplugin{0}.a", suffix); + } + + if (allVariants || PlayerSettings.tvOS.sdkVersion == tvOSSdkVersion.Simulator) + { + yield return string.Format("tvos/libfmodstudiounitypluginsimulator{0}.a", suffix); + } + } + + public override bool SupportsAdditionalCPP(BuildTarget target) + { + return PlatformIOS.StaticSupportsAdditionalCpp(); + } +#endif + +#if !UNITY_EDITOR + public override void LoadPlugins(FMOD.System coreSystem, Action reportResult) + { + PlatformIOS.StaticLoadPlugins(this, coreSystem, reportResult); + } +#endif + +#if UNITY_EDITOR + public override OutputType[] ValidOutputTypes + { + get + { + return sValidOutputTypes; + } + } + + private static OutputType[] sValidOutputTypes = { + new OutputType() { displayName = "Core Audio", outputType = FMOD.OUTPUTTYPE.COREAUDIO }, + }; +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs.meta b/game/Assets/Plugins/FMOD/platforms/tvos/src/PlatformAppleTV.cs.meta new file mode 100644 index 0000000..a49dadf --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/win.meta b/game/Assets/Plugins/FMOD/platforms/win.meta new file mode 100644 index 0000000..6414d98 --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/win.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c66754bc90bcdd74dbacaa9bc9adf48b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/platforms/win/src.meta b/game/Assets/Plugins/FMOD/platforms/win/src.meta new file mode 100644 index 0000000..14b32eb --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs b/game/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs new file mode 100644 index 0000000..20da43a --- /dev/null +++ b/game/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs @@ -0,0 +1,133 @@ +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"); + } + + public override string DisplayName { get { return "Windows"; } } + public override void DeclareUnityMappings(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 + settings.DeclareBuildTarget(BuildTarget.StandaloneWindows, this); + settings.DeclareBuildTarget(BuildTarget.StandaloneWindows64, this); + settings.DeclareBuildTarget(BuildTarget.WSAPlayer, this); +#endif + } + +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Windows; } } +#endif + +#if UNITY_WINRT_8_1 || UNITY_WSA_10_0 + public override string GetBankFolder() + { + return "ms-appx:///Data/StreamingAssets"; + } +#endif + +#if UNITY_EDITOR + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + string dllSuffix = suffix + ".dll"; + + switch (buildTarget) + { + case BuildTarget.StandaloneWindows: + yield return "win/x86/fmodstudio" + dllSuffix; + break; + case BuildTarget.StandaloneWindows64: + yield return "win/x86_64/fmodstudio" + dllSuffix; + break; + case BuildTarget.WSAPlayer: + foreach (string architecture in new[] { "arm", "x64", "x86" }) + { + yield return string.Format("uwp/{0}/fmod{1}", architecture, dllSuffix); + yield return string.Format("uwp/{0}/fmodstudio{1}", architecture, dllSuffix); + } + break; + default: + throw new System.NotSupportedException("Unrecognised Build Target"); + } + } + + public override bool SupportsAdditionalCPP(BuildTarget target) + { + return target != BuildTarget.WSAPlayer; + } +#endif + + public override string GetPluginPath(string pluginName) + { +#if UNITY_STANDALONE_WIN + #if UNITY_2019_1_OR_NEWER + #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 + return string.Format("{0}/{1}.dll", GetPluginBasePath(), pluginName); + #endif +#else // UNITY_WSA + return string.Format("{0}.dll", pluginName); +#endif + } +#if UNITY_EDITOR + public 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 }, + }; + + public override int CoreCount { get { return MaximumCoreCount; } } +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs.meta b/game/Assets/Plugins/FMOD/platforms/win/src/PlatformWindows.cs.meta new file mode 100644 index 0000000..ac31c99 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src.meta b/game/Assets/Plugins/FMOD/src.meta new file mode 100644 index 0000000..5693cd5 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e7fa442307ed54145b79a13c426eedf5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor.meta b/game/Assets/Plugins/FMOD/src/Editor.meta new file mode 100644 index 0000000..a0b44b8 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4166ff4e5919b2644a98332895224519 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs b/game/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs new file mode 100644 index 0000000..3200844 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs @@ -0,0 +1,66 @@ +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomPropertyDrawer(typeof(BankRefAttribute))] + class BankRefDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + Texture browseIcon = EditorGUIUtility.Load("FMOD/SearchIconBlack.png") as Texture; + + 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/game/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/BankRefDrawer.cs.meta new file mode 100644 index 0000000..f2f2c6a --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs b/game/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs new file mode 100644 index 0000000..2154ff7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using UnityEngine; +using UnityEditor; + +#if UNITY_BOLT_EXIST +using Ludiq; +using Bolt; +#endif + +namespace FMODUnity +{ + public class BoltIntegration : MonoBehaviour + { + [MenuItem("FMOD/Generate Bolt Unit Options")] + public static void GenerateBoltUnitOptions() + { +#if UNITY_BOLT_EXIST + BuildBoltUnitOptions(); +#else + TriggerBuild(); +#endif + } + +#if !UNITY_BOLT_EXIST + [MenuItem("FMOD/Generate Bolt Unit Options", 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 + [InitializeOnLoadMethod] + private static void RegisterCompleteBuild() + { + EditorApplication.delayCall += CompleteBuild; + } + + private static void CompleteBuild() + { + if (Settings.Instance.BoltUnitOptionsBuildPending) + { + Settings.Instance.BoltUnitOptionsBuildPending = false; + BuildBoltUnitOptions(); + } + } + + private static void BuildBoltUnitOptions() + { + DictionaryAsset projectSettings = AssetDatabase.LoadAssetAtPath(PathUtility.FromProject(LudiqCore.Paths.projectSettings), typeof(DictionaryAsset)) as DictionaryAsset; + + List assemblyOptions = projectSettings.dictionary["assemblyOptions"] as List; + + if (!assemblyOptions.Contains("FMODUnity")) + { + assemblyOptions.Add("FMODUnity"); + } + + if (!assemblyOptions.Contains("FMODUnityResonance")) + { + assemblyOptions.Add("FMODUnityResonance"); + } + + List typeOptions = projectSettings.dictionary["typeOptions"] as List; + Assembly fmodUnityAssembly = Assembly.Load("FMODUnity"); + Assembly fmodUnityResonanceAssembly = Assembly.Load("FMODUnityResonance"); + + List allTypes = new List(GetTypesForNamespace(fmodUnityAssembly, "FMOD")); + allTypes.AddRange(GetTypesForNamespace(fmodUnityAssembly, "FMOD.Studio")); + + foreach (Type type in allTypes) + { + if (!typeOptions.Contains(type)) + { + typeOptions.Add(type); + } + } + + UnitBase.Build(); + } + + private static IEnumerable GetTypesForNamespace(Assembly assembly, string requestedNamespace) + { + return assembly.GetTypes() + .Where(t => string.Equals(t.Namespace, requestedNamespace, StringComparison.Ordinal)); + } +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/BoltIntegration.cs.meta new file mode 100644 index 0000000..0ab100c --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs b/game/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs new file mode 100644 index 0000000..556a1da --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs @@ -0,0 +1,386 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor; + +namespace FMODUnity +{ + class CreateEventPopup : EditorWindow + { + class FolderEntry + { + public FolderEntry parent; + public string name; + public string guid; + public List entries = new List(); + public Rect rect; + } + + SerializedProperty outputProperty; + internal void SelectEvent(SerializedProperty property) + { + outputProperty = property; + } + + class BankEntry + { + public string name; + public string guid; + } + + FolderEntry rootFolder; + FolderEntry currentFolder; + List banks; + + 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(); + + EditorUtils.GetScriptOutput("children = \"\";"); + EditorUtils.GetScriptOutput("func = function(val) {{ children += \",\" + val.id + val.name; }};"); + EditorUtils.GetScriptOutput("studio.project.workspace.masterBankFolder.items.forEach(func, this); "); + string bankList = EditorUtils.GetScriptOutput("children;"); + 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); + } + + banks.Sort((a, b) => a.name.CompareTo(b.name)); + } + + 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); + } + } + + int lastHover = 0; + string eventFolder = "/"; + string eventName = ""; + string currentFilter = ""; + int selectedBank = 0; + bool resetCursor = true; + Vector2 scrollPos = new Vector2(); + Rect scrollRect = new Rect(); + bool isConnected = false; + + public void OnGUI() + { + var borderIcon = EditorGUIUtility.Load("FMOD/Border.png") as Texture2D; + 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 = EditorGUIUtility.Load("FMOD/ArrowIcon.png") as Texture; + var hoverIcon = EditorGUIUtility.Load("FMOD/SelectedAlt.png") as Texture2D; + var titleIcon = EditorGUIUtility.Load("IN BigTitle") as Texture2D; + + 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); + bg.normal.background = titleIcon; + 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 + 50; + labelRect.width -= arrowIcon.width + 50; + 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();"); + + string fullPath = "event:" + eventFolder + eventName; + outputProperty.stringValue = 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 = ""; + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/CreateEventPopup.cs.meta new file mode 100644 index 0000000..ddba85a --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs b/game/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs new file mode 100644 index 0000000..8083175 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +namespace FMODUnity +{ + public class EditorBankRef : ScriptableObject + { + 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; + } + } + + [SerializeField] + public string Path; + + [SerializeField] + public string Name; + + [SerializeField] + public string StudioPath; + + [SerializeField] + Int64 lastModified; + public DateTime LastModified + { + get { return new DateTime(lastModified); } + set { lastModified = value.Ticks; } + } + + [SerializeField] + public FMOD.RESULT LoadResult; + + [SerializeField] + public List FileSizes; + + public bool Exists; + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EditorBankRef.cs.meta new file mode 100644 index 0000000..f88385e --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs b/game/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs new file mode 100644 index 0000000..6666e6d --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace FMODUnity +{ + public class EditorEventRef : ScriptableObject + { + [SerializeField] + public string Path; + + [SerializeField] + byte[] guid = new byte[16]; + public Guid Guid + { + get { return new Guid(guid); } + set { Array.Copy(value.ToByteArray(), guid, 16); } + } + + [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; + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EditorEventRef.cs.meta new file mode 100644 index 0000000..6c6fd83 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs b/game/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs new file mode 100644 index 0000000..4cd8435 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + public class EditorParamRef : ScriptableObject + { + [SerializeField] + public string Name; + [SerializeField] + public float Min; + [SerializeField] + public float Max; + [SerializeField] + public float Default; + [SerializeField] + public ParameterID ID; + + [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 uint data1; + public uint data2; + } + + public bool Exists; + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EditorParamRef.cs.meta new file mode 100644 index 0000000..fef3bd7 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs b/game/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs new file mode 100644 index 0000000..5a73379 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs @@ -0,0 +1,953 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Text; +using System.Net.Sockets; + +namespace FMODUnity +{ + public enum PreviewState + { + Stopped, + Playing, + Paused, + } + + [InitializeOnLoad] + class EditorUtils : MonoBehaviour + { + public static void CheckResult(FMOD.RESULT result) + { + if (result != FMOD.RESULT.OK) + { + UnityEngine.Debug.LogError(string.Format("FMOD Studio: Encounterd Error: {0} {1}", result, FMOD.Error.String(result))); + } + } + + public const string BuildFolder = "Build"; + + public static string GetBankDirectory() + { + if (Settings.Instance.HasSourceProject && !String.IsNullOrEmpty(Settings.Instance.SourceProjectPath)) + { + string projectPath = Settings.Instance.SourceProjectPath; + string projectFolder = Path.GetDirectoryName(projectPath); + return Path.Combine(projectFolder, BuildFolder); + } + else if (!String.IsNullOrEmpty(Settings.Instance.SourceBankPath)) + { + return Path.GetFullPath(Settings.Instance.SourceBankPath); + } + return null; + } + + 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 = 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]; + } + + static string VerionNumberToString(uint version) + { + uint major = (version & 0x00FF0000) >> 16; + uint minor = (version & 0x0000FF00) >> 8; + uint patch = (version & 0x000000FF); + + return major.ToString("X1") + "." + minor.ToString("X2") + "." + patch.ToString("X2"); + } + + static EditorUtils() + { + EditorApplication.update += Update; + AssemblyReloadEvents.beforeAssemblyReload += HandleBeforeAssemblyReload; + EditorApplication.playModeStateChanged += HandleOnPlayModeChanged; + EditorApplication.pauseStateChanged += HandleOnPausedModeChanged; + } + + static void HandleBeforeAssemblyReload() + { + DestroySystem(); + } + + static void HandleOnPausedModeChanged(PauseState state) + { + if (RuntimeManager.IsInitialized && RuntimeManager.HasBanksLoaded) + { + RuntimeManager.GetBus("bus:/").setPaused(EditorApplication.isPaused); + RuntimeManager.StudioSystem.update(); + } + } + + 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(); + } + } + + static void Update() + { + // Update the editor system + if (system.isValid()) + { + CheckResult(system.update()); + + if (speakerMode != Settings.Instance.GetEditorSpeakerMode()) + { + PreviewStop(); + DestroySystem(); + CreateSystem(); + } + } + + if (previewEventInstance.isValid()) + { + FMOD.Studio.PLAYBACK_STATE state; + previewEventInstance.getPlaybackState(out state); + if (previewState == PreviewState.Playing && state == FMOD.Studio.PLAYBACK_STATE.STOPPED) + { + PreviewStop(); + } + } + } + + static FMOD.Studio.System system; + static FMOD.SPEAKERMODE speakerMode; + + static void DestroySystem() + { + if (system.isValid()) + { + UnityEngine.Debug.Log("FMOD Studio: Destroying editor system instance"); + system.release(); + system.clearHandle(); + } + } + + static void CreateSystem() + { + UnityEngine.Debug.Log("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) + { + UnityEngine.Debug.LogWarning("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.GetEditorSpeakerMode(); + CheckResult(lowlevel.setSoftwareFormat(0, speakerMode, 0)); + + 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.Parameters.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--; + } + } + } + + public static FMOD.Studio.System System + { + get + { + if (!system.isValid()) + { + CreateSystem(); + } + return system; + } + } + + [MenuItem("FMOD/Help/Integration Manual", priority = 3)] + static void OnlineManual() + { + Application.OpenURL("https://fmod.com/resources/documentation-unity"); + } + + [MenuItem("FMOD/Help/API Documentation", priority = 4)] + static void OnlineAPIDocs() + { + Application.OpenURL("https://fmod.com/resources/documentation-api"); + } + + [MenuItem("FMOD/Help/Support Forum", priority = 5)] + static void OnlineQA() + { + Application.OpenURL("https://qa.fmod.com/"); + } + + [MenuItem("FMOD/Help/Revision History", priority = 6)] + static void OnlineRevisions() + { + Application.OpenURL("https://fmod.com/resources/documentation-api?version=2.0&page=welcome-revision-history.html"); + } + + [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)); + + EditorUtility.DisplayDialog("FMOD Studio Unity Integration", "Version: " + VerionNumberToString(version) + "\n\nCopyright \u00A9 Firelight Technologies Pty, Ltd. 2014-2020 \n\nSee LICENSE.TXT for additional license information.", "OK"); + } + + [MenuItem("FMOD/Consolidate Plugin Files")] + public static void FolderMerge() + { + string root = "Assets/Plugins/FMOD"; + string lib = root + "/lib"; + string src = root + "/src"; + string runtime = src + "/Runtime"; + string editor = src + "/Editor"; + string addons = root + "/addons"; + + bool merge = EditorUtility.DisplayDialog("FMOD Plugin Consolidator", "This will consolidate most of the FMOD files into a single directory (Assets/Plugins/FMOD), only if the files have not been moved from their original location.\n\nThis should only need to be done if upgrading from before 2.0.", "OK", "Cancel"); + if (merge) + { + if (!Directory.Exists(addons)) + AssetDatabase.CreateFolder(root, "addons"); + if (!Directory.Exists(src)) + AssetDatabase.CreateFolder(root, "src"); + if (!Directory.Exists(runtime)) + AssetDatabase.CreateFolder(src, "Runtime"); + if (!Directory.Exists(lib)) + AssetDatabase.CreateFolder(root, "lib"); + if (!Directory.Exists(lib + "/mac")) + AssetDatabase.CreateFolder(lib, "mac"); + if (!Directory.Exists(lib + "/win")) + AssetDatabase.CreateFolder(lib, "win"); + if (!Directory.Exists(lib + "/linux")) + AssetDatabase.CreateFolder(lib, "linux"); + if (!Directory.Exists(lib + "/linux/x86")) + AssetDatabase.CreateFolder(lib + "/linux", "x86"); + if (!Directory.Exists(lib + "/linux/x86_64")) + AssetDatabase.CreateFolder(lib + "/linux", "x86_64"); + if (!Directory.Exists(lib + "/android")) + AssetDatabase.CreateFolder(lib, "android"); + + // Scripts + var files = Directory.GetFiles(root, "*.cs", SearchOption.TopDirectoryOnly); + foreach (var filePath in files) + { + MoveAsset(filePath, runtime + "/" + Path.GetFileName(filePath)); + } + MoveAsset(root + "/fmodplugins.cpp", runtime + "/fmodplugins.cpp"); + MoveAsset(root + "/Timeline", runtime + "/Timeline"); + MoveAsset("Assets/Plugins/FMOD/Wrapper", runtime + "/wrapper"); + MoveAsset("Assets/Plugins/Editor/FMOD", editor); + MoveAsset("Assets/Plugins/Editor/FMOD/Timeline", editor + "/Timeline"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/FMOD/Runtime") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/FMOD/Runtime" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/FMOD/Runtime"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/Editor/FMOD") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/Editor/FMOD" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/Editor/FMOD"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/Editor") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/Editor" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/Editor"); + // GoogleVR + if (AssetDatabase.IsValidFolder("Assets/GoogleVR")) + MoveAsset("Assets/GoogleVR", addons + "/GoogleVR"); + // ResonanceAudio + MoveAsset("Assets/ResonanceAudio", addons + "/ResonanceAudio"); + // GVR Audio + if (AssetDatabase.IsValidFolder("Assets/Plugins/gvraudio.bundle")) + MoveAsset("Assets/Plugins/gvraudio.bundle", lib + "/mac/gvraudio.bundle"); + // Cache files + MoveAsset("Assets/Resources/FMODStudioSettings.asset", root + "/Resources/FMODStudioSettings.asset"); + if (AssetDatabase.IsValidFolder("Assets/Resources") && AssetDatabase.FindAssets("", new string[] { "Assets/Resources" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Resources"); + MoveAsset("Assets/FMODStudioCache.asset", root + "/Resources/FMODStudioCache.asset"); + if (AssetDatabase.FindAssets("Assets/FMODStudioCache.asset").Length != 0) + AssetDatabase.MoveAssetToTrash("Assets/FMODStudioCache.asset"); + // Android libs + string[] archs = new string[] { "armeabi-v7a", "x86", "arm64-v8a" }; + foreach (string arch in archs) + { + MoveAsset("Assets/Plugins/Android/libs/" + arch + "/libfmod.so", lib + "/android/" + arch + "/libfmod.so"); + MoveAsset("Assets/Plugins/Android/libs/" + arch + "/libfmodL.so", lib + "/android/" + arch + "/libfmodL.so"); + MoveAsset("Assets/Plugins/Android/libs/" + arch + "/libfmodstudio.so", lib + "/android/" + arch + "/libfmodstudio.so"); + MoveAsset("Assets/Plugins/Android/libs/" + arch + "/libfmodstudioL.so", lib + "/android/" + arch + "/libfmodstudioL.so"); + MoveAsset("Assets/Plugins/Android/libs/" + arch + "/libresonanceaudio.so", lib + "/android/" + arch + "/libresonanceaudio.so"); + MoveAsset("Assets/Plugins/Android/libs/" + arch + "/libgvraudio.so", lib + "/android/" + arch + "/libgvraudio.so"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/Android/libs/" + arch) && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/Android/libs/" + arch }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/Android/libs/" + arch); + } + MoveAsset("Assets/Plugins/Android/fmod.jar", lib + "/android/fmod.jar"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/Android/libs") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/Android/libs" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/Android/libs"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/Android") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/Android" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/Android"); + AssetDatabase. + // Mac libs + MoveAsset("Assets/Plugins/fmodstudio.bundle", lib + "/mac/fmodstudio.bundle"); + MoveAsset("Assets/Plugins/fmodstudioL.bundle", lib + "/mac/fmodstudioL.bundle"); + MoveAsset("Assets/Plugins/resonanceaudio.bundle", lib + "/mac/resonanceaudio.bundle"); + // iOS libs + MoveAsset("Assets/Plugins/iOS/libfmodstudiounityplugin.a", lib + "/ios/libfmodstudiounityplugin.a"); + MoveAsset("Assets/Plugins/iOS/libfmodstudiounitypluginL.a", lib + "/ios/libfmodstudiounitypluginL.a"); + MoveAsset("Assets/Plugins/iOS/libgvraudio.a", lib + "/ios/libgvraudio.a"); + MoveAsset("Assets/Plugins/iOS/libresonanceaudio.a", lib + "/ios/libresonanceaudio.a"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/iOS") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/iOS" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/iOS"); + // tvOS libs + MoveAsset("Assets/Plugins/tvOS/libfmodstudiounityplugin.a", lib + "/tvos/libfmodstudiounityplugin.a"); + MoveAsset("Assets/Plugins/tvOS/libfmodstudiounitypluginL.a", lib + "/tvos/libfmodstudiounitypluginL.a"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/tvOS") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/tvOS" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/tvOS"); + // UWP libs + archs = new string[] { "arm", "x64", "x86" }; + foreach (string arch in archs) + { + MoveAsset("Assets/Plugins/UWP/" + arch + "/fmod.dll", lib + "/uwp/" + arch + "/fmod.dll"); + MoveAsset("Assets/Plugins/UWP/" + arch + "/fmodL.dll", lib + "/uwp/" + arch + "/fmodL.dll"); + MoveAsset("Assets/Plugins/UWP/" + arch + "/fmodstudio.dll", lib + "/uwp/" + arch + "/fmodstudio.dll"); + MoveAsset("Assets/Plugins/UWP/" + arch + "/fmodstudioL.dll", lib + "/uwp/" + arch + "/fmodstudioL.dll"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/UWP/" + arch) && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/UWP/" + arch }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/UWP/" + arch); + } + if (AssetDatabase.IsValidFolder("Assets/Plugins/UWP") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/UWP" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/UWP"); + // HTML5 libs + MoveAsset("Assets/Plugins/WebGL/libfmodstudiounityplugin.bc", lib + "/html5/libfmodstudiounityplugin.bc"); + MoveAsset("Assets/Plugins/WebGL/libfmodstudiounitypluginL.bc", lib + "/html5/libfmodstudiounitypluginL.bc"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/WebGL") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/WebGL" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/WebGL"); + // PS4 libs (optional) + if (AssetDatabase.IsValidFolder("Assets/Plugins/PS4")) + { + MoveAsset("Assets/Plugins/PS4/libfmod.prx", lib + "/ps4/libfmod.prx"); + MoveAsset("Assets/Plugins/PS4/libfmodL.prx", lib + "/ps4/libfmodL.prx"); + MoveAsset("Assets/Plugins/PS4/libfmodstudio.prx", lib + "/ps4/libfmodstudio.prx"); + MoveAsset("Assets/Plugins/PS4/libfmodstudioL.prx", lib + "/ps4/libfmodstudioL.prx"); + MoveAsset("Assets/Plugins/PS4/resonanceaudio.prx", lib + "/ps4/resonanceaudio.prx"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/PS4") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/PS4" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/PS4"); + } + // Switch libs (optional) + if (AssetDatabase.IsValidFolder("Assets/Plugins/Switch")) + { + MoveAsset("Assets/Plugins/Switch/libfmodstudiounityplugin.a", lib + "/switch/libfmodstudiounityplugin.a"); + MoveAsset("Assets/Plugins/Switch/libfmodstudiounitypluginL.a", lib + "/switch/libfmodstudiounitypluginL.a"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/Switch") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/Switch" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/Switch"); + } + // Xbox One libs (optional) + if (AssetDatabase.IsValidFolder("Assets/Plugins/XboxOne")) + { + MoveAsset("Assets/Plugins/XboxOne/fmod.dll", lib + "/xboxone/fmod.dll"); + MoveAsset("Assets/Plugins/XboxOne/fmodL.dll", lib + "/xboxone/fmodL.dll"); + MoveAsset("Assets/Plugins/XboxOne/fmodstudio.dll", lib + "/xboxone/fmodstudio.dll"); + MoveAsset("Assets/Plugins/XboxOne/fmodstudioL.dll", lib + "/xboxone/fmodstudioL.dll"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/XboxOne") && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/XboxOne" }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/XboxOne"); + } + // Linux libs + archs = new string[] { "x86", "x86_64" }; + foreach (string arch in archs) + { + MoveAsset("Assets/Plugins/" + arch + "/libfmod.so", lib + "/linux/" + arch + "/libfmod.so"); + MoveAsset("Assets/Plugins/" + arch + "/libfmodL.so", lib + "/linux/" + arch + "/libfmodL.so"); + MoveAsset("Assets/Plugins/" + arch + "/libfmodstudio.so", lib + "/linux/" + arch + "/libfmodstudio.so"); + MoveAsset("Assets/Plugins/" + arch + "/libfmodstudioL.so", lib + "/linux/" + arch + "/libfmodstudio.so"); + MoveAsset("Assets/Plugins/" + arch + "/libgvraudio.so", lib + "/linux/" + arch + "/libgvraudio.so"); + MoveAsset("Assets/Plugins/" + arch + "/libresonanceaudio.so", lib + "/linux/" + arch + "/libresonanceaudio.so"); + // The folders will be deleted after the windows libs are moved. + } + // Windows libs + foreach (string arch in archs) + { + MoveAsset("Assets/Plugins/" + arch + "/fmodstudio.dll", lib + "/win/" + arch + "/fmodstudio.dll"); + MoveAsset("Assets/Plugins/" + arch + "/fmodstudioL.dll", lib + "/win/" + arch + "/fmodstudioL.dll"); + MoveAsset("Assets/Plugins/" + arch + "/gvraudio.dll", lib + "/win/" + arch + "/gvraudio.dll"); + MoveAsset("Assets/Plugins/" + arch + "/resonanceaudio.dll", lib + "/win/" + arch + "/resonanceaudio.dll"); + if (AssetDatabase.IsValidFolder("Assets/Plugins/" + arch) && AssetDatabase.FindAssets("", new string[] { "Assets/Plugins/" + arch }).Length == 0) + AssetDatabase.MoveAssetToTrash("Assets/Plugins/" + arch); + } + + Debug.Log("Folder merge finished!"); + } + } + + static void MoveAsset(string from, string to) + { + if (AssetDatabase.IsValidFolder(to)) + { + // Need to move all sub files/folders manually + string[] files = Directory.GetFiles(from, "*", SearchOption.TopDirectoryOnly); + foreach (string fileName in files) + { + AssetDatabase.MoveAsset(fileName, to + '/' + Path.GetFileName(fileName)); + } + string[] directories = Directory.GetDirectories(from, "*", SearchOption.AllDirectories); + foreach (string dir in directories) + { + string subDir = dir.Replace(from, ""); + files = Directory.GetFiles(dir, "*", SearchOption.TopDirectoryOnly); + foreach (string fileName in files) + { + AssetDatabase.MoveAsset(fileName, to + '/' + subDir + '/' + Path.GetFileName(fileName)); + } + } + } + else + { + string result = AssetDatabase.MoveAsset(from, to); + if (!string.IsNullOrEmpty(result)) + { + Debug.LogWarning("[FMOD] Failed to move " + from + " : " + result); + } + } + } + + static List masterBanks = new List(); + static List previewBanks = new List(); + static FMOD.Studio.EventDescription previewEventDesc; + static FMOD.Studio.EventInstance previewEventInstance; + + static PreviewState previewState; + public static PreviewState PreviewState + { + get { return previewState; } + } + + public static void PreviewEvent(EditorEventRef eventRef, Dictionary previewParamValues) + { + bool load = true; + if (previewEventDesc.isValid()) + { + Guid guid; + previewEventDesc.getID(out guid); + if (guid == eventRef.Guid) + { + load = false; + } + else + { + PreviewStop(); + } + } + + if (load) + { + masterBanks.Clear(); + previewBanks.Clear(); + + foreach (EditorBankRef masterBankRef in EventManager.MasterBanks) + { + FMOD.Studio.Bank masterBank; + CheckResult(System.loadBankFile(masterBankRef.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out masterBank)); + masterBanks.Add(masterBank); + } + + if (!EventManager.MasterBanks.Exists(x => eventRef.Banks.Contains(x))) + { + string bankName = eventRef.Banks[0].Name; + var banks = EventManager.Banks.FindAll(x => x.Name.Contains(bankName)); + foreach (var bank in banks) + { + FMOD.Studio.Bank previewBank; + CheckResult(System.loadBankFile(bank.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out previewBank)); + previewBanks.Add(previewBank); + } + } + else + { + foreach (var previewBank in previewBanks) + { + previewBank.clearHandle(); + } + } + + CheckResult(System.getEventByID(eventRef.Guid, out previewEventDesc)); + CheckResult(previewEventDesc.createInstance(out previewEventInstance)); + } + + foreach (EditorParamRef param in eventRef.Parameters) + { + FMOD.Studio.PARAMETER_DESCRIPTION paramDesc; + CheckResult(previewEventDesc.getParameterDescriptionByName(param.Name, out paramDesc)); + param.ID = paramDesc.id; + PreviewUpdateParameter(param.ID, previewParamValues[param.Name]); + } + + CheckResult(previewEventInstance.start()); + previewState = PreviewState.Playing; + } + + public static void PreviewUpdateParameter(FMOD.Studio.PARAMETER_ID id, float paramValue) + { + if (previewEventInstance.isValid()) + { + CheckResult(previewEventInstance.setParameterByID(id, paramValue)); + } + } + + public static void PreviewUpdatePosition(float distance, float orientation) + { + if (previewEventInstance.isValid()) + { + // Listener at origin + FMOD.ATTRIBUTES_3D pos = new FMOD.ATTRIBUTES_3D(); + pos.position.x = (float)Math.Sin(orientation) * distance; + pos.position.y = (float)Math.Cos(orientation) * distance; + pos.forward.x = 1.0f; + pos.up.z = 1.0f; + CheckResult(previewEventInstance.set3DAttributes(pos)); + } + } + + public static void PreviewPause() + { + if (previewEventInstance.isValid()) + { + bool paused; + CheckResult(previewEventInstance.getPaused(out paused)); + CheckResult(previewEventInstance.setPaused(!paused)); + previewState = paused ? PreviewState.Playing : PreviewState.Paused; + } + } + + public static void PreviewStop() + { + if (previewEventInstance.isValid()) + { + previewEventInstance.stop(FMOD.Studio.STOP_MODE.IMMEDIATE); + previewEventInstance.release(); + previewEventInstance.clearHandle(); + previewEventDesc.clearHandle(); + previewBanks.ForEach(x => { x.unload(); x.clearHandle(); }); + masterBanks.ForEach(x => { x.unload(); x.clearHandle(); }); + previewState = PreviewState.Stopped; + } + } + + 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; + } + + + const int StudioScriptPort = 3663; + static NetworkStream networkStream = null; + static Socket socket = null; + static IAsyncResult socketConnection = null; + + 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():")) + { + UnityEngine.Debug.Log("FMOD Studio: Script Client returned " + header.Substring(6)); + } + } + catch (Exception e) + { + UnityEngine.Debug.Log("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) + { + Debug.LogException(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; + } + } + + public static bool IsFileOpenByStudio(string path) + { + bool open = true; + try + { + using (var file = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None)) + { + open = false; + } + } + catch (Exception) + { + Debug.LogWarning("[FMOD] File used by another application. Failed to open " + path); + } + return open; + } + + 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) + { + GetScriptOutput(string.Format("nameConflict = false;")); + GetScriptOutput(string.Format("checkFunction = function(val) {{ nameConflict |= val.name == \"{0}\"; }};", eventName)); + GetScriptOutput(string.Format("studio.project.lookup(\"{0}\").items.forEach(checkFunction, this); ", folderGuid)); + string conflictBool = GetScriptOutput(string.Format("nameConflict;")); + return conflictBool == "1"; + } + + public static string CreateStudioEvent(string eventPath, string eventName) + { + var folders = eventPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + + string folderGuid = EditorUtils.GetScriptOutput("studio.project.workspace.masterEventFolder.id;"); + for (int i = 0; i < folders.Length; i++) + { + string parentGuid = folderGuid; + GetScriptOutput(string.Format("guid = \"\";")); + GetScriptOutput(string.Format("findFunc = function(val) {{ guid = val.isOfType(\"EventFolder\") && val.name == \"{0}\" ? val.id : guid; }};", folders[i])); + GetScriptOutput(string.Format("studio.project.lookup(\"{0}\").items.forEach(findFunc, this);", folderGuid)); + folderGuid = GetScriptOutput(string.Format("guid;")); + if (folderGuid == "") + { + GetScriptOutput(string.Format("folder = studio.project.create(\"EventFolder\");")); + GetScriptOutput(string.Format("folder.name = \"{0}\"", folders[i])); + GetScriptOutput(string.Format("folder.folder = studio.project.lookup(\"{0}\");", parentGuid)); + folderGuid = GetScriptOutput(string.Format("folder.id;")); + } + } + + if (CheckForNameConflict(folderGuid, eventName)) + { + EditorUtility.DisplayDialog("Name Conflict", string.Format("The event {0} already exists under {1}", eventName, eventPath), "OK"); + return null; + } + + GetScriptOutput("event = studio.project.create(\"Event\");"); + GetScriptOutput("event.note = \"Placeholder created via Unity\";"); + GetScriptOutput(string.Format("event.name = \"{0}\"", eventName)); + GetScriptOutput(string.Format("event.folder = studio.project.lookup(\"{0}\");", folderGuid)); + + // Add a group track + GetScriptOutput("track = studio.project.create(\"GroupTrack\");"); + GetScriptOutput("track.mixerGroup.output = event.mixer.masterBus;"); + GetScriptOutput("track.mixerGroup.name = \"Audio 1\";"); + GetScriptOutput("event.relationships.groupTracks.add(track);"); + + // Add tags + GetScriptOutput("tag = studio.project.create(\"Tag\");"); + GetScriptOutput("tag.name = \"placeholder\";"); + GetScriptOutput("tag.folder = studio.project.workspace.masterTagFolder;"); + GetScriptOutput("event.relationships.tags.add(tag);"); + + string eventGuid = GetScriptOutput(string.Format("event.id;")); + return eventGuid; + } + + [InitializeOnLoadMethod] + private static void CleanObsoleteFiles() + { + if (EditorApplication.isPlayingOrWillChangePlaymode) + { + // Messing with the asset database while entering play mode causes a NullReferenceException + return; + } + if (AssetDatabase.IsValidFolder("Assets/Plugins/FMOD/obsolete")) + { + EditorApplication.LockReloadAssemblies(); + + string[] guids = AssetDatabase.FindAssets(string.Empty, new string[] { "Assets/Plugins/FMOD/obsolete" }); + foreach (string guid in guids) + { + string path = AssetDatabase.GUIDToAssetPath(guid); + if (AssetDatabase.DeleteAsset(path)) + { + Debug.LogFormat("FMOD: Removed obsolete file {0}", path); + } + } + if(AssetDatabase.MoveAssetToTrash("Assets/Plugins/FMOD/obsolete")) + { + Debug.LogFormat("FMOD: Removed obsolete folder Assets/Plugins/FMOD/obsolete"); + } + EditorApplication.UnlockReloadAssemblies(); + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EditorUtils.cs.meta new file mode 100644 index 0000000..9463687 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs b/game/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs new file mode 100644 index 0000000..bf3f533 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs @@ -0,0 +1,1647 @@ +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 +{ + class EventBrowser : EditorWindow, ISerializationCallbackReceiver + { + [MenuItem("FMOD/Event Browser", priority = 2)] + public static void ShowWindow() + { + EventBrowser eventBrowser = GetWindow("FMOD Events"); + eventBrowser.minSize = new Vector2(380, 600); + + eventBrowser.BeginStandaloneWindow(); + eventBrowser.Show(); + } + + public static bool IsOpen + { + get; private set; + } + + public void OnBeforeSerialize() + { + treeViewState = treeView.state; + } + + public void OnAfterDeserialize() + { + } + + [NonSerialized] + float nextRepaintTime; + + [NonSerialized] + float[] cachedMetering; + + const float RepaintInterval = 1/30.0f; + + 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; + } + } + + void ReadEventCache() + { + LastKnownCacheTime = EventManager.CacheTime; + treeView.Reload(); + } + + class TreeView : UnityEditor.IMGUI.Controls.TreeView + { + 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 static readonly Texture2D folderOpenIcon = EditorGUIUtility.Load("FMOD/FolderIconOpen.png") as Texture2D; + private static readonly Texture2D folderClosedIcon = EditorGUIUtility.Load("FMOD/FolderIconClosed.png") as Texture2D; + private static readonly Texture2D eventIcon = EditorGUIUtility.Load("FMOD/EventIcon.png") as Texture2D; + private static readonly Texture2D snapshotIcon = EditorGUIUtility.Load("FMOD/SnapshotIcon.png") as Texture2D; + private static readonly Texture2D bankIcon = EditorGUIUtility.Load("FMOD/BankIcon.png") as Texture2D; + private static readonly Texture2D parameterIcon = EditorGUIUtility.Load("FMOD/EventIcon.png") as Texture2D; + + private class LeafItem : TreeViewItem + { + public LeafItem(int id, int depth, ScriptableObject data) + : base(id, depth) + { + Data = data; + } + + public ScriptableObject Data; + } + + 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 Dictionary itemIDs = new Dictionary(); + + private int AffirmItemID(string path) + { + int id; + + if (!itemIDs.TryGetValue(path, out id)) + { + id = itemIDs.Count; + itemIDs.Add(path, id); + } + + return id; + } + + 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; + + 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, eventIcon); + + CreateSubTree("Snapshots", SnapshotPrefix, + EventManager.Events.Where(e => e.Path.StartsWith(SnapshotPrefix)), s => s.Path, snapshotIcon); + } + + if ((TypeFilter & TypeFilter.Bank) != 0) + { + CreateSubTree("Banks", BankPrefix, EventManager.Banks, b => b.StudioPath, bankIcon); + } + + if ((TypeFilter & TypeFilter.Parameter) != 0) + { + CreateSubTree("Global Parameters", ParameterPrefix, + EventManager.Parameters, p => ParameterPrefix + p.Name, parameterIcon, + (path, p) => string.Format("{0}:{1:x}:{2:x}", path, p.ID.data1, p.ID.data2)); + } + + List rows = new List(); + + AddChildrenInOrder(rows, rootItem); + + SetupDepthsFromParentsAndChildren(rootItem); + + expandNextFolderSet = false; + nextFramedItemPath = null; + + return rows; + } + + private class NaturalComparer : IComparer + { + public int Compare(string a, string b) + { + return EditorUtility.NaturalCompare(a, b); + } + } + + private static NaturalComparer naturalComparer = new NaturalComparer(); + + private void CreateSubTree(string rootName, string rootPath, + IEnumerable sourceRecords, Func GetPath, + Texture2D icon, 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 = icon; + + parent.AddChild(leafItem); + } + } + } + + 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; + } + + IList noSearchExpandState; + + 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; + } + } + + float oldBaseIndent; + + 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 State() : this(new TreeViewState()) + { + } + + public State(TreeViewState baseState) + { + this.baseState = baseState; + } + + 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; + } + + 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 Texture2D borderIcon; + private GUIStyle borderStyle; + + private void AffirmResources() + { + if (borderIcon == null) + { + borderIcon = EditorGUIUtility.Load("FMOD/Border.png") as Texture2D; + + borderStyle = new GUIStyle(GUI.skin.box); + borderStyle.normal.background = borderIcon; + borderStyle.margin = new RectOffset(); + } + } + + [NonSerialized] + TreeView treeView; + + [NonSerialized] + SearchField searchField; + + [SerializeField] + PreviewArea previewArea = new PreviewArea(); + + [SerializeField] + TreeView.State treeViewState; + + [NonSerialized] + DateTime LastKnownCacheTime; + + private SerializedProperty outputProperty; + + bool InChooserMode { get { return outputProperty != null; } } + + 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(cachedMetering != null ? cachedMetering : EditorUtils.GetMetering()); + } + } + + 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) + { + string path = (data as EditorEventRef).Path; + outputProperty.stringValue = path; + EditorUtils.UpdateParamsOnEmitter(outputProperty.serializedObject, 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] + class PreviewArea + { + [NonSerialized] + public TreeView treeView; + + public bool forceRepaint { get { return transportControls.forceRepaint; } } + + [NonSerialized] + private EditorEventRef currentEvent; + + void SetEvent(EditorEventRef eventRef) + { + if (eventRef != currentEvent) + { + currentEvent = eventRef; + + EditorUtils.PreviewStop(); + transportControls.Reset(); + event3DPreview.Reset(); + parameterControls.Reset(); + } + } + + [SerializeField] + DetailsView detailsView = new DetailsView(); + + [SerializeField] + TransportControls transportControls = new TransportControls(); + + [SerializeField] + Event3DPreview event3DPreview = new Event3DPreview(); + + [SerializeField] + PreviewMeters meters = new PreviewMeters(); + + [SerializeField] + EventParameterControls parameterControls = new EventParameterControls(); + + private GUIStyle mainStyle; + + private void AffirmResources() + { + if (mainStyle == null) + { + mainStyle = new GUIStyle(GUI.skin.box); + mainStyle.margin = new RectOffset(); + } + } + + public void OnGUI(float[] metering) + { + 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(); + + if (Event.current.type == EventType.Repaint) + { + Rect rect = GUILayoutUtility.GetLastRect(); + isNarrow = rect.width < 600; + } + } + } + + private void DrawSeparatorLine() + { + GUILayout.Box(GUIContent.none, GUILayout.Height(1), GUILayout.ExpandWidth(true)); + } + + private bool isNarrow; + + 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] + class DetailsView + { + private Texture copyIcon; + private GUIStyle textFieldNameStyle; + + private void AffirmResources() + { + if (copyIcon == null) + { + copyIcon = EditorGUIUtility.Load("FMOD/CopyIcon.png") as Texture; + + 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] + class TransportControls + { + public bool forceRepaint { get; private set; } + + public void Reset() + { + forceRepaint = false; + } + + private Texture playOff; + private Texture playOn; + private Texture stopOff; + private Texture stopOn; + private Texture openIcon; + private GUIStyle buttonStyle; + + private void AffirmResources() + { + if (playOff == null) + { + playOff = EditorGUIUtility.Load("FMOD/TransportPlayButtonOff.png") as Texture; + playOn = EditorGUIUtility.Load("FMOD/TransportPlayButtonOn.png") as Texture; + stopOff = EditorGUIUtility.Load("FMOD/TransportStopButtonOff.png") as Texture; + stopOn = EditorGUIUtility.Load("FMOD/TransportStopButtonOn.png") as Texture; + openIcon = EditorGUIUtility.Load("FMOD/transportOpen.png") as Texture; + + buttonStyle = new GUIStyle(); + buttonStyle.padding.left = 4; + buttonStyle.padding.top = 10; + } + } + + public void OnGUI(EditorEventRef selectedEvent, Dictionary parameterValues) + { + AffirmResources(); + + var previewState = EditorUtils.PreviewState; + bool playing = previewState == PreviewState.Playing; + bool paused = previewState == PreviewState.Paused; + bool stopped = previewState == PreviewState.Stopped; + + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button(stopped || paused ? stopOn : stopOff, buttonStyle, GUILayout.ExpandWidth(false))) + { + forceRepaint = false; + + if (paused) + { + EditorUtils.PreviewStop(); + } + if (playing) + { + EditorUtils.PreviewPause(); + } + } + if (GUILayout.Button(playing ? playOn : playOff, buttonStyle, GUILayout.ExpandWidth(false))) + { + if (playing || stopped) + { + EditorUtils.PreviewEvent(selectedEvent, parameterValues); + } + else + { + EditorUtils.PreviewPause(); + } + + 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.ToString("b")); + EditorUtils.SendScriptCommand(cmd); + } + + EditorGUILayout.EndHorizontal(); + } + } + + [Serializable] + class Event3DPreview + { + private bool isDragging; + private Rect arenaRect; + + private Vector2 eventPosition; + private float eventDistance = 0; + private float eventOrientation = 0; + + public void Reset() + { + eventPosition = new Vector2(0, 0); + eventDistance = 0; + eventOrientation = 0; + } + + private Texture arena; + private Texture emitter; + + private void AffirmResources() + { + if (arena == null) + { + arena = EditorGUIUtility.Load("FMOD/preview.png") as Texture; + emitter = EditorGUIUtility.Load("FMOD/previewemitter.png") as Texture; + } + } + + 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(); + } + } + + EditorUtils.PreviewUpdatePosition(eventDistance, eventOrientation); + } + } + + [Serializable] + class EventParameterControls + { + [NonSerialized] + private Dictionary parameterValues = new Dictionary(); + + public Dictionary ParameterValues { get { return parameterValues; } } + + [NonSerialized] + private Vector2 scrollPosition; + + public void Reset() + { + parameterValues.Clear(); + } + + public void OnGUI(EditorEventRef selectedEvent) + { + scrollPosition = GUILayout.BeginScrollView(scrollPosition, + GUILayout.Height(EditorGUIUtility.singleLineHeight * 3.5f)); + + foreach (EditorParamRef paramRef in selectedEvent.Parameters) + { + if (!parameterValues.ContainsKey(paramRef.Name)) + { + parameterValues[paramRef.Name] = paramRef.Default; + } + + parameterValues[paramRef.Name] = EditorGUILayout.Slider(paramRef.Name, parameterValues[paramRef.Name], paramRef.Min, paramRef.Max); + + EditorUtils.PreviewUpdateParameter(paramRef.ID, parameterValues[paramRef.Name]); + } + + GUILayout.EndScrollView(); + } + } + + [Serializable] + class PreviewMeters + { + private Texture meterOn; + private Texture meterOff; + + private void AffirmResources() + { + if (meterOn == null) + { + meterOn = EditorGUIUtility.Load("FMOD/LevelMeter.png") as Texture; + meterOff = EditorGUIUtility.Load("FMOD/LevelMeterOff.png") as Texture; + } + } + + 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] + enum TypeFilter + { + Event = 1, + Bank = 2, + Parameter = 4, + All = Event | Bank | Parameter, + } + + public void ChooseEvent(SerializedProperty property) + { + BeginInspectorPopup(property, TypeFilter.Event); + + if (!string.IsNullOrEmpty(property.stringValue)) + { + treeView.JumpToEvent(property.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; + } + + private void BeginStandaloneWindow() + { + treeView.TypeFilter = TypeFilter.All; + outputProperty = null; + searchField.SetFocus(); + treeView.DragEnabled = true; + } + + public void OnEnable() + { + if (treeViewState == null) + { + treeViewState = new TreeView.State(); + } + + searchField = new SearchField(); + treeView = new TreeView(treeViewState); + + ReadEventCache(); + + searchField.downOrUpArrowKeyPressed += treeView.SetFocus; + +#if UNITY_2019_1_OR_NEWER + SceneView.duringSceneGui += SceneUpdate; +#else + SceneView.onSceneGUIDelegate += SceneUpdate; +#endif + + EditorApplication.hierarchyWindowItemOnGUI += HierarchyUpdate; + + IsOpen = true; + } + + public void OnDestroy() + { + EditorUtils.PreviewStop(); + + 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 + 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); + emitter.Event = (data as EditorEventRef).Path; + } + 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 + 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) + { + string path = (data as EditorEventRef).Path; + + string name = path.Substring(path.LastIndexOf("/") + 1); + newObject = new GameObject(name + " Emitter"); + + StudioEventEmitter emitter = newObject.AddComponent(); + emitter.Event = path; + + 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(); + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EventBrowser.cs.meta new file mode 100644 index 0000000..d79c574 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EventCache.cs b/game/Assets/Plugins/FMOD/src/Editor/EventCache.cs new file mode 100644 index 0000000..813ece1 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EventCache.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FMODUnity +{ + class EventCache : ScriptableObject + { + public static int CurrentCacheVersion = 6; + + [SerializeField] + public List EditorBanks; + [SerializeField] + public List EditorEvents; + [SerializeField] + public List EditorParameters; + [SerializeField] + public List MasterBanks; + [SerializeField] + public List StringsBanks; + [SerializeField] + Int64 stringsBankWriteTime; + [SerializeField] + public int cacheVersion; + + public DateTime StringsBankWriteTime + { + get { return new DateTime(stringsBankWriteTime); } + set { stringsBankWriteTime = value.Ticks; } + } + + public EventCache() + { + EditorBanks = new List(); + EditorEvents = new List(); + EditorParameters = new List(); + MasterBanks = new List(); + StringsBanks = new List(); + stringsBankWriteTime = 0; + } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/EventCache.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EventCache.cs.meta new file mode 100644 index 0000000..f1c0245 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EventManager.cs b/game/Assets/Plugins/FMOD/src/Editor/EventManager.cs new file mode 100644 index 0000000..4c52665 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EventManager.cs @@ -0,0 +1,1088 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor.Build; +using System.Reflection; +using System.Collections; +#if UNITY_2018_1_OR_NEWER +using UnityEditor.Build.Reporting; +#endif + +namespace FMODUnity +{ + [InitializeOnLoad] + public class EventManager : MonoBehaviour + { + const string CacheAssetName = "FMODStudioCache"; + const string CacheAssetFullName = "Assets/Plugins/FMOD/Cache/Editor/" + CacheAssetName + ".asset"; + static EventCache eventCache; + + const string StringBankExtension = "strings.bank"; + const string BankExtension = "bank"; + + const int FilePollTimeSeconds = 5; + + // How many seconds to wait since last file activity to start the import + const int CountdownTimerReset = 15 / FilePollTimeSeconds; + + static int countdownTimer; + +#if UNITY_EDITOR + [MenuItem("FMOD/Refresh Banks", priority = 1)] + public static void ForceRefresh() + { + countdownTimer = 0; + RefreshBanks(); + } + + public static void RefreshBanks() + { + UpdateCache(); + OnCacheChange(); + if (Settings.Instance.ImportType == ImportType.AssetBundle) + { + CopyToStreamingAssets(); + } + } +#endif + + static void ClearCache() + { + countdownTimer = CountdownTimerReset; + eventCache.StringsBankWriteTime = 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(); + } + + static public void UpdateCache() + { + // Deserialize the cache from the unity resources + if (eventCache == null) + { + eventCache = AssetDatabase.LoadAssetAtPath(CacheAssetFullName, typeof(EventCache)) as EventCache; + if (eventCache == null || eventCache.cacheVersion != EventCache.CurrentCacheVersion) + { + UnityEngine.Debug.Log("FMOD Studio: Cannot find serialized event cache or cache in old format, creating new instance"); + eventCache = ScriptableObject.CreateInstance(); + eventCache.cacheVersion = EventCache.CurrentCacheVersion; + + Directory.CreateDirectory(Path.GetDirectoryName(CacheAssetFullName)); + AssetDatabase.CreateAsset(eventCache, CacheAssetFullName); + } + } + + var settings = Settings.Instance; + + if (string.IsNullOrEmpty(settings.SourceBankPath)) + { + ClearCache(); + return; + } + + string defaultBankFolder = null; + + if (!settings.HasPlatforms) + { + defaultBankFolder = settings.SourceBankPath; + } + else + { + Platform platform = settings.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])); + } + + 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) + { + bool wasValid = eventCache.StringsBankWriteTime != DateTime.MinValue; + ClearCache(); + if (wasValid) + { + UnityEngine.Debug.LogError(string.Format("FMOD Studio: Directory {0} doesn't contain any banks. Build the banks in Studio or check the path in the settings.", defaultBankFolder)); + } + return; + } + + // If we have multiple .strings.bank files find the most recent + stringBanks.Sort((a, b) => File.GetLastWriteTime(b).CompareTo(File.GetLastWriteTime(a))); + + // Use the most recent string bank timestamp as a marker for the most recent build of any bank because it gets exported every time + DateTime lastWriteTime = File.GetLastWriteTime(stringBanks[0]); + + if (lastWriteTime == eventCache.StringsBankWriteTime) + { + countdownTimer = CountdownTimerReset; + return; + } + + if (EditorUtils.IsFileOpenByStudio(stringBanks[0])) + { + countdownTimer = CountdownTimerReset; + return; + } + + // Most recent strings bank is newer than last cache update time, recache. + + // Get a list of all banks + List bankFileNames = new List(); + 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()) + { + countdownTimer = CountdownTimerReset; + return; + } + else + { + // Unload the strings bank + stringBank.unload(); + } + 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); + } + + bankFileNames = new List(Directory.GetFiles(defaultBankFolder, "*.bank", SearchOption.AllDirectories)); + bankFileNames.RemoveAll(x => x.Contains(".strings")); + + stringBanks = reducedStringBanksList; + + if (!UnityEditorInternal.InternalEditorUtility.inBatchMode) + { + // Check if any of the files are still being written by studio + foreach (string bankFileName in bankFileNames) + { + EditorBankRef bankRef = eventCache.EditorBanks.Find((x) => RuntimeUtils.GetCommonPlatformPath(bankFileName) == x.Path); + if (bankRef == null) + { + if (EditorUtils.IsFileOpenByStudio(bankFileName)) + { + countdownTimer = CountdownTimerReset; + return; + } + continue; + } + + if (bankRef.LastModified != File.GetLastWriteTime(bankFileName)) + { + if (EditorUtils.IsFileOpenByStudio(bankFileName)) + { + countdownTimer = CountdownTimerReset; + return; + } + } + } + + // Count down the timer in case we catch studio in-between updating two files. + if (countdownTimer-- > 0) + { + return; + } + } + + eventCache.StringsBankWriteTime = lastWriteTime; + + // All files are finished being modified by studio so update the cache + + // Stop editor preview so no stale data being held + EditorUtils.PreviewStop(); + + // Reload the strings banks + List loadedStringsBanks = new List(); + + 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; + } + + 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); + + // Timestamp check - if it doesn't match update events from that bank + if (bankRef.LastModified != bankFileInfo.LastWriteTime) + { + bankRef.LastModified = bankFileInfo.LastWriteTime; + UpdateCacheBank(bankRef); + } + + // Update file sizes + bankRef.FileSizes.Clear(); + if (Settings.Instance.HasPlatforms) + { + for (int i = 0; i < bankPlatforms.Length; i++) + { + string platformBankPath = RuntimeUtils.GetCommonPlatformPath(Path.Combine(bankFolders[i], bankFileName)); + 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((x) => !x.Exists).ForEach(RemoveCacheBank); + eventCache.EditorBanks.RemoveAll((x) => !x.Exists); + eventCache.EditorEvents.RemoveAll((x) => x.Banks.Count == 0); + eventCache.EditorParameters.RemoveAll((x) => !x.Exists); + eventCache.MasterBanks.RemoveAll((x) => !x.Exists); + eventCache.StringsBanks.RemoveAll((x) => !x.Exists); + } + finally + { + // Unload the strings banks + loadedStringsBanks.ForEach(x => x.unload()); + AssetDatabase.StopAssetEditing(); + Debug.Log("[FMOD] Cache Updated."); + } + } + + static void UpdateCacheBank(EditorBankRef bankRef) + { + // Clear out any cached events from this bank + eventCache.EditorEvents.ForEach((x) => x.Banks.Remove(bankRef)); + + FMOD.Studio.Bank bank; + bankRef.LoadResult = EditorUtils.System.loadBankFile(bankRef.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out bank); + + if (bankRef.LoadResult == FMOD.RESULT.ERR_EVENT_ALREADY_LOADED) + { + EditorUtils.System.getBank(bankRef.Name, out bank); + bank.unload(); + bankRef.LoadResult = EditorUtils.System.loadBankFile(bankRef.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out bank); + } + + if (bankRef.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); + 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(); + } + + eventRef.Banks.Add(bankRef); + Guid guid; + eventDesc.getID(out guid); + eventRef.Guid = guid; + eventRef.Path = eventRef.name = path; + eventDesc.is3D(out eventRef.Is3D); + eventDesc.isOneshot(out eventRef.IsOneShot); + eventDesc.isStream(out eventRef.IsStream); + eventDesc.getMaximumDistance(out eventRef.MaxDistance); + eventDesc.getMinimumDistance(out eventRef.MinDistance); + 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); + if ((param.flags & FMOD.Studio.PARAMETER_FLAGS.READONLY) != 0) + { + continue; + } + EditorParamRef paramRef = eventRef.Parameters.Find((x) => x.name == param.name); + if (paramRef == null) + { + paramRef = ScriptableObject.CreateInstance(); + AssetDatabase.AddObjectToAsset(paramRef, eventCache); + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(paramRef)); + eventRef.Parameters.Add(paramRef); + } + paramRef.Name = param.name; + paramRef.name = "parameter:/" + Path.GetFileName(path) + "/" + paramRef.Name; + paramRef.Min = param.minimum; + paramRef.Max = param.maximum; + paramRef.Default = param.defaultvalue; + paramRef.Exists = true; + } + eventRef.Parameters.RemoveAll((x) => !x.Exists); + } + } + + // 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) + { + EditorParamRef paramRef = eventCache.EditorParameters.Find((x) => + (param.id.data1 == x.ID.data1 && param.id.data2 == x.ID.data2)); + if (paramRef == null) + { + paramRef = ScriptableObject.CreateInstance(); + AssetDatabase.AddObjectToAsset(paramRef, eventCache); + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(paramRef)); + eventCache.EditorParameters.Add(paramRef); + paramRef.ID = param.id; + } + paramRef.Name = param.name; + paramRef.name = "parameter:/" + param.name; + paramRef.Min = param.minimum; + paramRef.Max = param.maximum; + paramRef.Default = param.defaultvalue; + paramRef.Exists = true; + } + } + } + bank.unload(); + } + else + { + Debug.LogError(string.Format("FMOD Studio: Unable to load {0}: {1}", bankRef.Name, FMOD.Error.String(bankRef.LoadResult))); + eventCache.StringsBankWriteTime = DateTime.MinValue; + } + } + + static void RemoveCacheBank(EditorBankRef bankRef) + { + eventCache.EditorEvents.ForEach((x) => x.Banks.Remove(bankRef)); + } + + static EventManager() + { + countdownTimer = CountdownTimerReset; + EditorApplication.update += Update; + } + + public static void CheckValidEventRefs(UnityEngine.SceneManagement.Scene scene) + { + foreach (var gameObject in scene.GetRootGameObjects()) + { + MonoBehaviour[] allBehaviours = gameObject.GetComponentsInChildren(); + + foreach (MonoBehaviour behaviour in allBehaviours) + { + if (behaviour != null) + { + Type componentType = behaviour.GetType(); + + FieldInfo[] fields = componentType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + + foreach (FieldInfo item in fields) + { + if (HasAttribute(item, typeof(EventRefAttribute))) + { + if (item.FieldType == typeof(string)) + { + string output = item.GetValue(behaviour) as string; + + if (!IsValidEventRef(output)) + { + Debug.LogWarningFormat("FMOD Studio: Unable to find FMOD Event \"{0}\" in scene \"{1}\" at path \"{2}\" \n- check the FMOD Studio event paths are set correctly in the Unity editor", output, scene.name, GetGameObjectPath(behaviour.transform)); + } + } + else if (typeof(IEnumerable).IsAssignableFrom(item.FieldType)) + { + foreach (var listItem in (IEnumerable)item.GetValue(behaviour)) + { + if (listItem.GetType() == typeof(string)) + { + string listOutput = listItem as string; + if (!IsValidEventRef(listOutput)) + { + Debug.LogWarningFormat("FMOD Studio: Unable to find FMOD Event \"{0}\" in scene \"{1}\" at path \"{2}\" \n- check the FMOD Studio event paths are set correctly in the Unity editor", listOutput, scene.name, GetGameObjectPath(behaviour.transform)); + } + } + } + } + } + } + } + } + } + } + + private static string GetGameObjectPath(Transform transform) + { + string objectPath = "/" + transform.name; + while(transform.parent != null) + { + transform = transform.parent; + objectPath = "/" + transform.name + objectPath; + } + return objectPath; + } + + private static bool HasAttribute(MemberInfo provider, params Type[] attributeTypes) + { + Attribute[] allAttributes = Attribute.GetCustomAttributes(provider, typeof(Attribute), true); + + if (allAttributes.Length == 0) + { + return false; + } + return allAttributes.Where(a => attributeTypes.Any(x => a.GetType() == x || x.IsAssignableFrom(a.GetType()))).Any(); + } + + private static bool IsValidEventRef(string reference) + { + if (string.IsNullOrEmpty(reference)) + { + return true; + } + EditorEventRef eventRef = EventManager.EventFromPath(reference); + return eventRef != null; + } + + private const string FMODLabel = "FMOD"; + + public static void CopyToStreamingAssets() + { + if (string.IsNullOrEmpty(Settings.Instance.SourceBankPath)) + return; + + Platform platform = Settings.Instance.CurrentEditorPlatform; + + if (platform == Settings.Instance.DefaultPlatform) + { + Debug.LogWarningFormat("FMOD Studio: copy banks for platform {0} : Unsupported platform", EditorUserBuildSettings.activeBuildTarget); + 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 + 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) + { + Debug.LogErrorFormat("FMOD Studio: copy banks for platform {0} : copying banks from {1} to {2}", + platform.DisplayName, bankSourceFolder, bankTargetFolder); + Debug.LogException(exception); + return; + } + + if (madeChanges) + { + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + Debug.LogFormat("FMOD Studio: copy banks for platform {0} : copying banks from {1} to {2} succeeded", + platform.DisplayName, bankSourceFolder, bankTargetFolder); + } + } + + 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 + } + + 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); + } + } + + static bool firstUpdate = true; + static float lastCheckTime; + static void Update() + { + if (firstUpdate) + { + RefreshBanks(); + bool isValid; + string validateMessage; + EditorUtils.ValidateSource(out isValid, out validateMessage); + if (!isValid) + { + Debug.LogError("FMOD Studio: " + validateMessage); + } + firstUpdate = false; + lastCheckTime = Time.realtimeSinceStartup; + } + + if (lastCheckTime + FilePollTimeSeconds < Time.realtimeSinceStartup) + { + RefreshBanks(); + lastCheckTime = Time.realtimeSinceStartup; + } + } + + public static DateTime CacheTime + { + get + { + if (eventCache != null) + { + return eventCache.StringsBankWriteTime; + } + else + { + return DateTime.MinValue; + } + } + } + + public static List Events + { + get + { + UpdateCache(); + return eventCache.EditorEvents; + } + } + + public static List Banks + { + get + { + UpdateCache(); + return eventCache.EditorBanks; + } + } + + public static List Parameters + { + get + { + UpdateCache(); + return eventCache.EditorParameters; + } + } + + public static List MasterBanks + { + get + { + UpdateCache(); + return eventCache.MasterBanks; + } + } + + public static bool IsLoaded + { + get + { + return Settings.Instance.SourceBankPath != null; + } + } + + public static bool IsValid + { + get + { + UpdateCache(); + return eventCache.StringsBankWriteTime != DateTime.MinValue; + } + } + + public static EditorEventRef EventFromPath(string pathOrGuid) + { + EditorEventRef eventRef; + if (pathOrGuid.StartsWith("{")) + { + Guid guid = new Guid(pathOrGuid); + eventRef = EventFromGUID(guid); + } + else + { + eventRef = EventFromString(pathOrGuid); + } + return eventRef; + } + + public static EditorEventRef EventFromString(string path) + { + UpdateCache(); + return eventCache.EditorEvents.Find((x) => x.Path.Equals(path, StringComparison.CurrentCultureIgnoreCase)); + } + + public static EditorEventRef EventFromGUID(Guid guid) + { + UpdateCache(); + return eventCache.EditorEvents.Find((x) => x.Guid == guid); + } + + public static EditorParamRef ParamFromPath(string name) + { + UpdateCache(); + 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(); + } + } + +#if UNITY_2018_1_OR_NEWER + public class PreprocessBuild : IPreprocessBuildWithReport + { + public int callbackOrder { get { return 0; } } + public void OnPreprocessBuild(BuildReport report) + { + BuildTargetChanged(); + CopyToStreamingAssets(); + } + } + + public class PreprocessScene : IProcessSceneWithReport + { + public int callbackOrder { get { return 0; } } + + public void OnProcessScene(UnityEngine.SceneManagement.Scene scene, BuildReport report) + { + if (report == null) return; + + CheckValidEventRefs(scene); + } + } +#else + public class PreprocessBuild : IPreprocessBuild + { + public int callbackOrder { get { return 0; } } + public void OnPreprocessBuild(BuildTarget target, string path) + { + BuildTargetChanged(); + CopyToStreamingAssets(); + } + } + + public class PreprocessScene : IProcessScene + { + public int callbackOrder { get { return 0; } } + + public void OnProcessScene(UnityEngine.SceneManagement.Scene scene) + { + CheckValidEventRefs(scene); + } + } +#endif + + 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) + { + AssetDatabase.ImportAsset(assetPath); + UnityEngine.Object asset = AssetDatabase.LoadAssetAtPath(assetPath); + string[] labels = AssetDatabase.GetLabels(asset); + + return labels.Contains(label); + } + + const string AssetsFolderName = "Assets"; + + 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/game/Assets/Plugins/FMOD/src/Editor/EventManager.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EventManager.cs.meta new file mode 100644 index 0000000..7739bf7 --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs b/game/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs new file mode 100644 index 0000000..5f7c672 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs @@ -0,0 +1,156 @@ +using System; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEditor; +using System.IO; + +namespace FMODUnity +{ + [CustomPropertyDrawer(typeof(EventRefAttribute))] + class EventRefDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + Texture browseIcon = EditorGUIUtility.Load("FMOD/SearchIconBlack.png") as Texture; + Texture openIcon = EditorGUIUtility.Load("FMOD/BrowserIcon.png") as Texture; + Texture addIcon = EditorGUIUtility.Load("FMOD/AddIcon.png") as Texture; + + label = EditorGUI.BeginProperty(position, label, property); + SerializedProperty pathProperty = 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)) + { + pathProperty.stringValue = ((EditorEventRef)DragAndDrop.objectReferences[0]).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(); + } + } + + float baseHeight = GUI.skin.textField.CalcSize(new GUIContent()).y; + + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); + + GUIStyle buttonStyle = new GUIStyle(GUI.skin.button); + buttonStyle.padding.top = 1; + buttonStyle.padding.bottom = 1; + + Rect addRect = new Rect(position.x + position.width - 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 = new Rect(position.x, position.y, searchRect.x - position.x - 3, baseHeight); + + EditorGUI.PropertyField(pathRect, pathProperty, GUIContent.none); + + if (GUI.Button(searchRect, new GUIContent(browseIcon, "Search"), buttonStyle)) + { + var eventBrowser = ScriptableObject.CreateInstance(); + + eventBrowser.ChooseEvent(property); + var windowRect = position; + windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position); + windowRect.height = openRect.height + 1; + 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.position = GUIUtility.GUIToScreenPoint(windowRect.position); + windowRect.height = openRect.height + 1; + addDropdown.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 500)); + + } + if (GUI.Button(openRect, new GUIContent(openIcon, "Open In Browser"), buttonStyle) && + !string.IsNullOrEmpty(pathProperty.stringValue) && + EventManager.EventFromPath(pathProperty.stringValue) != null + ) + { + EventBrowser.ShowWindow(); + EventBrowser eventBrowser = EditorWindow.GetWindow(); + eventBrowser.FrameEvent(pathProperty.stringValue); + } + + if (!string.IsNullOrEmpty(pathProperty.stringValue) && EventManager.EventFromPath(pathProperty.stringValue) != null) + { + Rect foldoutRect = new Rect(position.x + 10, position.y + baseHeight, position.width, baseHeight); + property.isExpanded = EditorGUI.Foldout(foldoutRect, property.isExpanded, "Event Properties"); + if (property.isExpanded) + { + var style = new GUIStyle(GUI.skin.label); + style.richText = true; + EditorEventRef eventRef = EventManager.EventFromPath(pathProperty.stringValue); + float width = style.CalcSize(new GUIContent("Oneshot")).x; + Rect labelRect = new Rect(position.x, position.y + baseHeight * 2, width, baseHeight); + Rect valueRect = new Rect(position.x + width + 10, position.y + baseHeight * 2, pathRect.width, baseHeight); + + if (pathProperty.stringValue.StartsWith("{")) + { + GUI.Label(labelRect, new GUIContent("Path"), style); + EditorGUI.SelectableLabel(valueRect, eventRef.Path); + } + else + { + GUI.Label(labelRect, new GUIContent("GUID"), style); + EditorGUI.SelectableLabel(valueRect, eventRef.Guid.ToString("b")); + } + labelRect.y += baseHeight; + valueRect.y += baseHeight; + + GUI.Label(labelRect, new GUIContent("Banks"), style); + GUI.Label(valueRect, string.Join(", ", eventRef.Banks.Select(x => x.Name).ToArray())); + labelRect.y += baseHeight; + valueRect.y += baseHeight; + + GUI.Label(labelRect, new GUIContent("Panning"), style); + GUI.Label(valueRect, eventRef.Is3D ? "3D" : "2D"); + labelRect.y += baseHeight; + valueRect.y += baseHeight; + + GUI.Label(labelRect, new GUIContent("Stream"), style); + GUI.Label(valueRect, eventRef.IsStream.ToString()); + labelRect.y += baseHeight; + valueRect.y += baseHeight; + + GUI.Label(labelRect, new GUIContent("Oneshot"), style); + GUI.Label(valueRect, eventRef.IsOneShot.ToString()); + labelRect.y += baseHeight; + valueRect.y += baseHeight; + } + } + else + { + Rect labelRect = new Rect(position.x, position.y + baseHeight, position.width, baseHeight); + GUI.Label(labelRect, new GUIContent("Event Not Found", EditorGUIUtility.Load("FMOD/NotFound.png") as Texture2D)); + } + + EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + bool expanded = property.isExpanded && !string.IsNullOrEmpty(property.stringValue) && EventManager.EventFromPath(property.stringValue) != null; + float baseHeight = GUI.skin.textField.CalcSize(new GUIContent()).y; + return baseHeight * (expanded ? 7 : 2); // 6 lines of info + } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/EventRefDrawer.cs.meta new file mode 100644 index 0000000..7db087d --- /dev/null +++ b/game/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/game/Assets/Plugins/FMOD/src/Editor/FMODUnityEditor.asmdef b/game/Assets/Plugins/FMOD/src/Editor/FMODUnityEditor.asmdef new file mode 100644 index 0000000..f36b208 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/FMODUnityEditor.asmdef @@ -0,0 +1,28 @@ +{ + "name": "FMODUnityEditor", + "references": [ + "FMODUnity" + ], + "includePlatforms": [ + "Editor" + ], + "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" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/FMODUnityEditor.asmdef.meta b/game/Assets/Plugins/FMOD/src/Editor/FMODUnityEditor.asmdef.meta new file mode 100644 index 0000000..ceb2e40 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/FMODUnityEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aab3caaf43456d6449a3e035348ff798 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/FindAndReplace.cs b/game/Assets/Plugins/FMOD/src/Editor/FindAndReplace.cs new file mode 100644 index 0000000..1bc366d --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/FindAndReplace.cs @@ -0,0 +1,199 @@ +using System; +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace FMODUnity +{ + class FindAndReplace : EditorWindow + { + [MenuItem("FMOD/Find and Replace", priority = 2)] + static void ShowFindAndReplace() + { + var window = CreateInstance(); + window.titleContent = new GUIContent("FMOD Find and Replace"); + window.OnHierarchyChange(); + var position = window.position; + window.maxSize = window.minSize = position.size = new Vector2(400, 170); + window.position = position; + window.ShowUtility(); + } + + bool levelScope = true; + bool prefabScope; + string findText; + string replaceText; + string message = ""; + MessageType messageType = MessageType.None; + int lastMatch = -1; + List emitters; + + void OnHierarchyChange() + { + emitters = new List(Resources.FindObjectsOfTypeAll()); + + if (!levelScope) + { + #if UNITY_2018_3_OR_NEWER + emitters.RemoveAll(x => PrefabUtility.GetPrefabAssetType(x) == PrefabAssetType.NotAPrefab); + #else + emitters.RemoveAll(x => PrefabUtility.GetPrefabType(x) != PrefabType.Prefab); + #endif + } + + if (!prefabScope) + { + #if UNITY_2018_3_OR_NEWER + emitters.RemoveAll(x => PrefabUtility.GetPrefabAssetType(x) == PrefabAssetType.NotAPrefab); + #else + emitters.RemoveAll(x => PrefabUtility.GetPrefabType(x) != PrefabType.Prefab); + #endif + } + } + + bool first = true; + + void OnGUI() + { + bool doFind = false; + if ((Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return)) + { + Event.current.Use(); + doFind = true; + } + + GUI.SetNextControlName("find"); + EditorGUILayout.PrefixLabel("Find:"); + EditorGUI.BeginChangeCheck(); + findText = EditorGUILayout.TextField(findText); + if (EditorGUI.EndChangeCheck()) + { + lastMatch = -1; + message = null; + } + EditorGUILayout.PrefixLabel("Replace:"); + replaceText = EditorGUILayout.TextField(replaceText); + + EditorGUILayout.BeginHorizontal(); + EditorGUI.BeginChangeCheck(); + levelScope = EditorGUILayout.ToggleLeft("Current Level", levelScope, GUILayout.ExpandWidth(false)); + prefabScope = EditorGUILayout.ToggleLeft("Prefabs", prefabScope, GUILayout.ExpandWidth(false)); + if (EditorGUI.EndChangeCheck()) + { + OnHierarchyChange(); + } + EditorGUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Find") || doFind) + { + message = ""; + { + FindNext(); + } + if (lastMatch == -1) + { + message = "Finished Search"; + messageType = MessageType.Warning; + } + } + if (GUILayout.Button("Replace")) + { + message = ""; + if (lastMatch == -1) + { + FindNext(); + } + else + { + Replace(); + } + if (lastMatch == -1) + { + message = "Finished Search"; + messageType = MessageType.Warning; + } + } + if (GUILayout.Button("Replace All")) + { + if (EditorUtility.DisplayDialog("Replace All", "Are you sure you wish to replace all in the current hierachy?", "yes", "no")) + { + ReplaceAll(); + } + } + GUILayout.EndHorizontal(); + if (!string.IsNullOrEmpty(message)) + { + EditorGUILayout.HelpBox(message, messageType); + } + else + { + EditorGUILayout.HelpBox("\n\n", MessageType.None); + } + + if (first) + { + first = false; + EditorGUI.FocusTextInControl("find"); + } + } + + void FindNext() + { + for (int i = lastMatch + 1; i < emitters.Count; i++) + { + if (emitters[i].Event.IndexOf(findText, 0, StringComparison.CurrentCultureIgnoreCase) >= 0) + { + lastMatch = i; + EditorGUIUtility.PingObject(emitters[i]); + Selection.activeGameObject = emitters[i].gameObject; + message = "Found object"; + messageType = MessageType.Info; + return; + } + } + lastMatch = -1; + } + + void ReplaceAll() + { + int replaced = 0; + for (int i = 0; i < emitters.Count; i++) + { + if (ReplaceText(emitters[i])) + { + replaced++; + } + } + + message = string.Format("{0} replaced", replaced); + messageType = MessageType.Info; + } + + bool ReplaceText(StudioEventEmitter emitter) + { + int findLength = findText.Length; + int replaceLength = replaceText.Length; + int position = 0; + var serializedObject = new SerializedObject(emitter); + var pathProperty = serializedObject.FindProperty("Event"); + string path = pathProperty.stringValue; + position = path.IndexOf(findText, position, StringComparison.CurrentCultureIgnoreCase); + while (position >= 0) + { + path = path.Remove(position, findLength).Insert(position, replaceText); + position += replaceLength; + position = path.IndexOf(findText, position, StringComparison.CurrentCultureIgnoreCase); + } + pathProperty.stringValue = path; + return serializedObject.ApplyModifiedProperties(); + } + + void Replace() + { + ReplaceText(emitters[lastMatch]); + FindNext(); + } + + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/FindAndReplace.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/FindAndReplace.cs.meta new file mode 100644 index 0000000..97e7e31 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/FindAndReplace.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a3d0ed60438564241a4e62b152836893 +timeCreated: 1453876443 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/LogViewer.cs b/game/Assets/Plugins/FMOD/src/Editor/LogViewer.cs new file mode 100644 index 0000000..afb6c60 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/LogViewer.cs @@ -0,0 +1,6 @@ +/* This class is now legacy. Keep the definition here for the migration to work */ +using UnityEditor; + +public class LogViewer : EditorWindow +{ +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/LogViewer.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/LogViewer.cs.meta new file mode 100644 index 0000000..72c7cc3 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/LogViewer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 255133e2dd4fbd9449ba729ddbb2f77f +timeCreated: 1433383105 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/ParamRefDrawer.cs b/game/Assets/Plugins/FMOD/src/Editor/ParamRefDrawer.cs new file mode 100644 index 0000000..c3017b6 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/ParamRefDrawer.cs @@ -0,0 +1,81 @@ +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomPropertyDrawer(typeof(ParamRefAttribute))] + class ParamRefDrawer : PropertyDrawer + { + public bool MouseDrag(Event e) + { + bool isDragging = false; + + if (e.type == EventType.DragPerform) + { + isDragging = true; + } + + return isDragging; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + Texture browseIcon = EditorGUIUtility.Load("FMOD/SearchIconBlack.png") as Texture; + Texture openIcon = EditorGUIUtility.Load("FMOD/BrowserIcon.png") as Texture; + Texture addIcon = EditorGUIUtility.Load("FMOD/AddIcon.png") as Texture; + + EditorGUI.BeginProperty(position, label, property); + SerializedProperty pathProperty = property; + + Event e = Event.current; + if (MouseDrag(e) && position.Contains(e.mousePosition)) + { + if (DragAndDrop.objectReferences.Length > 0 && + DragAndDrop.objectReferences[0] != null && + DragAndDrop.objectReferences[0].GetType() == typeof(EditorParamRef)) + { + pathProperty.stringValue = ((EditorParamRef)DragAndDrop.objectReferences[0]).Name; + 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(EditorParamRef)) + { + 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); + + GUIStyle buttonStyle = new GUIStyle(GUI.skin.button); + buttonStyle.padding.top = 1; + buttonStyle.padding.bottom = 1; + + Rect addRect = new Rect(position.x + position.width - 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 = new Rect(position.x, position.y, searchRect.x - position.x - 3, baseHeight); + + EditorGUI.PropertyField(pathRect, pathProperty, GUIContent.none); + + if (GUI.Button(searchRect, new GUIContent(browseIcon, "Search"), buttonStyle)) + { + var eventBrowser = ScriptableObject.CreateInstance(); + + eventBrowser.ChooseParameter(property); + var windowRect = position; + windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position); + windowRect.height = openRect.height + 1; + eventBrowser.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 400)); + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/ParamRefDrawer.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/ParamRefDrawer.cs.meta new file mode 100644 index 0000000..cdb3d99 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/ParamRefDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ea88808aa26cd614db1c5c1dcbb14d4e +timeCreated: 1444197074 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/SettingsEditor.cs b/game/Assets/Plugins/FMOD/src/Editor/SettingsEditor.cs new file mode 100644 index 0000000..395dea3 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/SettingsEditor.cs @@ -0,0 +1,1764 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEditor; +using System.IO; +using System; +using System.Linq; + +namespace FMODUnity +{ + [CustomEditor(typeof(Settings))] + public class SettingsEditor : Editor + { + string[] ToggleParent = new string[] { "Disabled", "Enabled", "Development Build Only", }; + + string[] ToggleEditor = new string[] { "Enabled", "Disabled", }; + + string[] FrequencyDisplay = new string[] { "Platform Default", "22050", "24000", "32000", "44100", "48000"}; + int[] FrequencyValues = new int[] { 0, 22050, 24000, 32000, 44100, 48000 }; + + string[] SpeakerModeDisplay = new string[] { + "Stereo", + "5.1", + "7.1" }; + + FMOD.SPEAKERMODE[] SpeakerModeValues = new FMOD.SPEAKERMODE[] { + FMOD.SPEAKERMODE.STEREO, + FMOD.SPEAKERMODE._5POINT1, + FMOD.SPEAKERMODE._7POINT1}; + + bool hasBankSourceChanged = false; + string targetSubFolder; + bool focused = false; + bool bankFoldOutState = true; + + enum SourceType : uint + { + Project = 0, + Single, + Multi + } + + void DisplayTriStateBool(string label, Platform platform, Platform.PropertyAccessor property) + { + TriStateBool current = property.Get(platform); + + if (platform.Parent != null) + { + bool overriden = property.HasValue(platform); + TriStateBool parent = property.Get(platform.Parent); + + string[] toggleChild = new string[ToggleParent.Length + 1]; + Array.Copy(ToggleParent, 0, toggleChild, 1, ToggleParent.Length); + toggleChild[0] = string.Format("Inherit ({0})", ToggleParent[(int)parent]); + + int next = EditorGUILayout.Popup(label, overriden ? (int)current + 1 : 0, toggleChild); + + if (next == 0) + { + property.Clear(platform); + } + else + { + property.Set(platform, (TriStateBool)(next-1)); + } + } + else if (platform is PlatformPlayInEditor) + { + int next = EditorGUILayout.Popup(label, (current != TriStateBool.Disabled) ? 0 : 1, ToggleEditor); + property.Set(platform, next == 0 ? TriStateBool.Enabled : TriStateBool.Disabled); + } + else + { + int next = EditorGUILayout.Popup(label, (int)current, ToggleParent); + property.Set(platform, (TriStateBool)next); + } + } + + void DisplayOutputMode(string label, Platform platform) + { + if (platform.ValidOutputTypes != null) + { + string[] valuesChild = new string[platform.ValidOutputTypes.Length + 3]; + string[] valuesChildEnum = new string[platform.ValidOutputTypes.Length + 3]; + valuesChild[0] = string.Format("Auto"); + valuesChild[1] = string.Format("No Sound"); + valuesChild[2] = string.Format("Wav Writer"); + valuesChildEnum[0] = Enum.GetName(typeof(FMOD.OUTPUTTYPE), FMOD.OUTPUTTYPE.AUTODETECT); + valuesChildEnum[1] = Enum.GetName(typeof(FMOD.OUTPUTTYPE), FMOD.OUTPUTTYPE.NOSOUND); + valuesChildEnum[2] = Enum.GetName(typeof(FMOD.OUTPUTTYPE), FMOD.OUTPUTTYPE.WAVWRITER); + for (int i = 0; i < platform.ValidOutputTypes.Length; i++) + { + valuesChild[i + 3] = platform.ValidOutputTypes[i].displayName; + valuesChildEnum[i + 3] = Enum.GetName(typeof(FMOD.OUTPUTTYPE), platform.ValidOutputTypes[i].outputType); + } + int currentIndex = Array.IndexOf(valuesChildEnum, platform.outputType); + if (currentIndex == -1) + { + currentIndex = 0; + platform.outputType = Enum.GetName(typeof(FMOD.OUTPUTTYPE), FMOD.OUTPUTTYPE.AUTODETECT); + } + int next = EditorGUILayout.Popup(label, currentIndex, valuesChild); + platform.outputType = valuesChildEnum[next]; + } + } + + Dictionary expandThreadAffinity = new Dictionary(); + + void DisplayThreadAffinity(string label, Platform platform) + { + if (platform.CoreCount > 0 && DisplayThreadAffinityFoldout(label, platform)) + { + EditorGUI.indentLevel++; + + DisplayThreadAffinityGroups(platform); + + EditorGUI.indentLevel--; + } + } + + bool DisplayThreadAffinityFoldout(string label, Platform platform) + { + Rect headerRect = EditorGUILayout.GetControlRect(); + + Rect labelRect = headerRect; + labelRect.width = EditorGUIUtility.labelWidth; + + bool expand; + + if (!expandThreadAffinity.TryGetValue(platform.Identifier, out expand)) + { + expand = false; + } + + EditorGUI.BeginChangeCheck(); + + expand = EditorGUI.Foldout(labelRect, expand, label); + + if (EditorGUI.EndChangeCheck()) + { + expandThreadAffinity[platform.Identifier] = expand; + } + + bool useDefaults = !platform.ThreadAffinitiesProperty.HasValue; + + EditorGUI.BeginChangeCheck(); + + Rect toggleRect = headerRect; + toggleRect.xMin = labelRect.xMax; + + useDefaults = GUI.Toggle(toggleRect, useDefaults, "Use Defaults"); + + if (EditorGUI.EndChangeCheck()) + { + if (useDefaults) + { + platform.ThreadAffinitiesProperty.Value.Clear(); + platform.ThreadAffinitiesProperty.HasValue = false; + } + else + { + platform.ThreadAffinitiesProperty.Value = new List(); + platform.ThreadAffinitiesProperty.HasValue = true; + + foreach (ThreadAffinityGroup group in platform.DefaultThreadAffinities) + { + platform.ThreadAffinitiesProperty.Value.Add(new ThreadAffinityGroup(group)); + } + } + } + + return expand; + } + + const int THREAD_AFFINITY_CORES_PER_ROW = 8; + + void DisplayThreadAffinityGroups(Platform platform) + { + GUIStyle affinityStyle = EditorStyles.miniButton; + float affinityWidth = affinityStyle.CalcSize(new GUIContent("00")).x; + + GUIContent anyButtonContent = new GUIContent("Any"); + float anyButtonWidth = affinityStyle.CalcSize(anyButtonContent).x; + + float threadsWidth = EditorGUIUtility.labelWidth; + float affinitiesWidth = affinityWidth * THREAD_AFFINITY_CORES_PER_ROW + anyButtonWidth; + + bool editable = platform.ThreadAffinitiesProperty.HasValue; + + if (platform.ThreadAffinities.Any()) + { + DisplayThreadAffinitiesHeader(threadsWidth, affinitiesWidth); + + ThreadAffinityGroup groupToDelete = null; + + EditorGUI.BeginDisabledGroup(!editable); + + foreach (ThreadAffinityGroup group in platform.ThreadAffinities) + { + bool delete; + DisplayThreadAffinityGroup(group, platform, threadsWidth, affinitiesWidth, + anyButtonWidth, anyButtonContent, affinityStyle, affinityWidth, out delete); + + if (delete) + { + groupToDelete = group; + } + } + + if (groupToDelete != null) + { + platform.ThreadAffinitiesProperty.Value.Remove(groupToDelete); + } + + EditorGUI.EndDisabledGroup(); + } + else + { + Rect messageRect = EditorGUILayout.GetControlRect(); + messageRect.width = threadsWidth + affinitiesWidth; + messageRect = EditorGUI.IndentedRect(messageRect); + + GUI.Label(messageRect, "List is Empty"); + } + + if (editable) + { + Rect addButtonRect = EditorGUILayout.GetControlRect(); + addButtonRect.width = threadsWidth + affinitiesWidth; + addButtonRect = EditorGUI.IndentedRect(addButtonRect); + + if (GUI.Button(addButtonRect, "Add")) + { + platform.ThreadAffinitiesProperty.Value.Add(new ThreadAffinityGroup()); + } + } + } + + void DisplayThreadAffinitiesHeader(float threadsWidth, float affinitiesWidth) + { + Rect controlRect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); + + Rect threadsRect = controlRect; + threadsRect.width = threadsWidth; + + threadsRect = EditorGUI.IndentedRect(threadsRect); + + GUI.Label(threadsRect, "Threads"); + + Rect coresRect = controlRect; + coresRect.x = threadsRect.xMax; + coresRect.width = affinitiesWidth; + + GUI.Label(coresRect, "Cores"); + } + + void DisplayThreadAffinityGroup(ThreadAffinityGroup group, Platform platform, + float threadsWidth, float affinitiesWidth, float anyButtonWidth, GUIContent anyButtonContent, + GUIStyle affinityStyle, float affinityWidth, out bool delete) + { + delete = false; + + GUIStyle editButtonStyle = EditorStyles.popup; + + GUIContent editButtonContent = new GUIContent("Edit"); + Rect editButtonRect = new Rect(Vector2.zero, editButtonStyle.CalcSize(editButtonContent)); + + float threadsHeight = group.threads.Count * EditorGUIUtility.singleLineHeight; + + bool editable = platform.ThreadAffinitiesProperty.HasValue; + + if (editable) + { + threadsHeight += EditorGUIUtility.standardVerticalSpacing + editButtonRect.height; + } + + float affinitiesHeight = + Mathf.Ceil(platform.CoreCount / (float)THREAD_AFFINITY_CORES_PER_ROW) * EditorGUIUtility.singleLineHeight; + + Rect controlRect = EditorGUILayout.GetControlRect(false, Math.Max(threadsHeight, affinitiesHeight)); + + Rect threadsRect = controlRect; + threadsRect.width = threadsWidth; + + threadsRect = EditorGUI.IndentedRect(threadsRect); + + GUIStyle boxStyle = EditorStyles.textArea; + + GUI.Box(threadsRect, string.Empty, boxStyle); + + Rect threadRect = threadsRect; + threadRect.height = EditorGUIUtility.singleLineHeight; + + foreach (ThreadType thread in group.threads) + { + GUI.Label(threadRect, thread.DisplayName()); + threadRect.y += threadRect.height; + } + + if (editable) + { + editButtonRect.y = threadsRect.yMax - editButtonRect.height - editButtonStyle.margin.bottom; + editButtonRect.center = new Vector2(threadsRect.center.x, editButtonRect.center.y); + + if (EditorGUI.DropdownButton(editButtonRect, editButtonContent, FocusType.Passive, editButtonStyle)) + { + ThreadListEditor.Show(editButtonRect, group, platform.ThreadAffinities, this); + } + } + + Rect affinitiesRect = controlRect; + affinitiesRect.xMin = threadsRect.xMax; + affinitiesRect.width = affinitiesWidth; + + GUI.Box(affinitiesRect, string.Empty, boxStyle); + + Rect anyButtonRect = affinitiesRect; + anyButtonRect.height = affinitiesHeight; + anyButtonRect.width = anyButtonWidth; + + if (GUI.Toggle(anyButtonRect, group.affinity == ThreadAffinity.Any, anyButtonContent, affinityStyle)) + { + group.affinity = ThreadAffinity.Any; + } + + Rect affinityRect = affinitiesRect; + affinityRect.x = anyButtonRect.xMax; + affinityRect.height = EditorGUIUtility.singleLineHeight; + affinityRect.width = affinityWidth; + + for (int i = 0; i < platform.CoreCount; ++i) + { + ThreadAffinity mask = (ThreadAffinity)(1U << i); + + if (GUI.Toggle(affinityRect, (group.affinity & mask) == mask, i.ToString(), affinityStyle)) + { + group.affinity |= mask; + } + else + { + group.affinity &= ~mask; + } + + if (i % THREAD_AFFINITY_CORES_PER_ROW == THREAD_AFFINITY_CORES_PER_ROW - 1) + { + affinityRect.x = anyButtonRect.xMax; + affinityRect.y += affinityRect.height; + } + else + { + affinityRect.x += affinityRect.width; + } + } + + if (editable) + { + GUIStyle deleteButtonStyle = GUI.skin.button; + GUIContent deleteButtonContent = new GUIContent("Delete"); + + Rect deleteButtonRect = controlRect; + deleteButtonRect.x = affinitiesRect.xMax; + deleteButtonRect.width = deleteButtonStyle.CalcSize(deleteButtonContent).x; + + if (GUI.Button(deleteButtonRect, deleteButtonContent, deleteButtonStyle)) + { + delete = true; + } + } + } + + class ThreadListEditor : EditorWindow + { + ThreadAffinityGroup group; + IEnumerable groups; + Editor parent; + + public static void Show(Rect buttonRect, ThreadAffinityGroup group, IEnumerable groups, + Editor parent) + { + ThreadListEditor editor = CreateInstance(); + editor.group = group; + editor.groups = groups; + editor.parent = parent; + + Rect rect = new Rect(GUIUtility.GUIToScreenPoint(buttonRect.position), buttonRect.size); + + editor.ShowAsDropDown(rect, CalculateSize()); + } + + private static GUIStyle FrameStyle { get { return GUI.skin.box; } } + private static GUIStyle ThreadStyle { get { return EditorStyles.toggle; } } + + private static Vector2 CalculateSize() + { + Vector2 result = Vector2.zero; + + Array enumValues = Enum.GetValues(typeof(ThreadType)); + + foreach (ThreadType thread in enumValues) + { + Vector2 size = ThreadStyle.CalcSize(new GUIContent(thread.DisplayName())); + result.x = Mathf.Max(result.x, size.x); + } + + result.y = enumValues.Length * EditorGUIUtility.singleLineHeight + + (enumValues.Length - 1) * EditorGUIUtility.standardVerticalSpacing; + + result.x += FrameStyle.padding.horizontal; + result.y += FrameStyle.padding.vertical; + + return result; + } + + private void OnGUI() + { + Rect frameRect = new Rect(0, 0, position.width, position.height); + + GUI.Box(frameRect, string.Empty, FrameStyle); + + Rect threadRect = FrameStyle.padding.Remove(frameRect); + threadRect.height = EditorGUIUtility.singleLineHeight; + + foreach (ThreadType thread in Enum.GetValues(typeof(ThreadType))) + { + EditorGUI.BeginChangeCheck(); + + bool include = EditorGUI.ToggleLeft(threadRect, thread.DisplayName(), group.threads.Contains(thread)); + + if (EditorGUI.EndChangeCheck()) + { + if (include) + { + // Make sure each thread is only in one group + foreach (ThreadAffinityGroup other in groups) + { + other.threads.Remove(thread); + } + + group.threads.Add(thread); + group.threads.Sort(); + } + else + { + group.threads.Remove(thread); + } + + parent.Repaint(); + } + + threadRect.y = threadRect.yMax + EditorGUIUtility.standardVerticalSpacing; + } + } + } + + void DisplaySampleRate(string label, Platform platform) + { + int currentValue = platform.SampleRate; + int currentIndex = Array.IndexOf(FrequencyValues, currentValue); + + if (platform.Parent != null) + { + int parentValue = platform.Parent.SampleRate; + int parentIndex = Array.IndexOf(FrequencyValues, parentValue); + + string[] valuesChild = new string[FrequencyDisplay.Length + 1]; + Array.Copy(FrequencyDisplay, 0, valuesChild, 1, FrequencyDisplay.Length); + valuesChild[0] = string.Format("Inherit ({0})", FrequencyDisplay[parentIndex]); + + bool overriden = Platform.PropertyAccessors.SampleRate.HasValue(platform); + + int next = EditorGUILayout.Popup(label, overriden ? currentIndex + 1 : 0, valuesChild); + if (next == 0) + { + Platform.PropertyAccessors.SampleRate.Clear(platform); + } + else + { + Platform.PropertyAccessors.SampleRate.Set(platform, FrequencyValues[next - 1]); + } + } + else + { + int next = EditorGUILayout.Popup(label, currentIndex, FrequencyDisplay); + Platform.PropertyAccessors.SampleRate.Set(platform, FrequencyValues[next]); + } + } + + void DisplayBuildDirectory(string label, Platform platform) + { + string[] buildDirectories = EditorUtils.GetBankPlatforms(); + + string currentValue = platform.BuildDirectory; + int currentIndex = Math.Max(Array.IndexOf(buildDirectories, currentValue), 0); + + if (platform.Parent != null || platform is PlatformPlayInEditor) + { + string[] values = new string[buildDirectories.Length + 1]; + Array.Copy(buildDirectories, 0, values, 1, buildDirectories.Length); + + if (platform is PlatformPlayInEditor) + { + Settings settings = target as Settings; + values[0] = string.Format("Current Unity Platform ({0})", settings.CurrentEditorPlatform.BuildDirectory); + } + else + { + values[0] = string.Format("Inherit ({0})", platform.Parent.BuildDirectory); + } + + bool overriden = Platform.PropertyAccessors.BuildDirectory.HasValue(platform); + int next = EditorGUILayout.Popup(label, overriden ? currentIndex + 1 : 0, values); + + if (next == 0) + { + Platform.PropertyAccessors.BuildDirectory.Clear(platform); + Platform.PropertyAccessors.SpeakerMode.Clear(platform); + } + else + { + Platform.PropertyAccessors.BuildDirectory.Set(platform, buildDirectories[next - 1]); + } + } + else + { + int next = EditorGUILayout.Popup(label, currentIndex, buildDirectories); + Platform.PropertyAccessors.BuildDirectory.Set(platform, buildDirectories[next]); + } + } + + void DisplaySpeakerMode(string label, Platform platform, string helpText) + { + FMOD.SPEAKERMODE currentValue = platform.SpeakerMode; + int currentIndex = Math.Max(Array.IndexOf(SpeakerModeValues, currentValue), 0); + + if (platform.Parent != null || platform is PlatformPlayInEditor) + { + bool overriden = Platform.PropertyAccessors.SpeakerMode.HasValue(platform); + + string[] values = new string[SpeakerModeDisplay.Length + 1]; + Array.Copy(SpeakerModeDisplay, 0, values, 1, SpeakerModeDisplay.Length); + + if (platform is PlatformPlayInEditor) + { + Settings settings = target as Settings; + FMOD.SPEAKERMODE currentPlatformValue = settings.CurrentEditorPlatform.SpeakerMode; + int index = Array.IndexOf(SpeakerModeValues, currentPlatformValue); + values[0] = string.Format("Current Unity Platform ({0})", SpeakerModeDisplay[index]); + } + else + { + FMOD.SPEAKERMODE parentValue = platform.Parent.SpeakerMode; + int index = Array.IndexOf(SpeakerModeValues, parentValue); + values[0] = string.Format("Inherit ({0})", SpeakerModeDisplay[index]); + } + + bool hasBuildDirectory = Platform.PropertyAccessors.BuildDirectory.HasValue(platform); + + if (!hasBuildDirectory) + { + EditorGUI.BeginDisabledGroup(true); + } + + int next = EditorGUILayout.Popup(label, overriden ? currentIndex + 1 : 0, values); + if (next == 0) + { + Platform.PropertyAccessors.SpeakerMode.Clear(platform); + } + else + { + Platform.PropertyAccessors.SpeakerMode.Set(platform, SpeakerModeValues[next - 1]); + } + + if (hasBuildDirectory) + { + EditorGUILayout.HelpBox(helpText, MessageType.Info, false); + } + else + { + EditorGUI.EndDisabledGroup(); + } + } + else + { + int next = EditorGUILayout.Popup(label, currentIndex, SpeakerModeDisplay); + Platform.PropertyAccessors.SpeakerMode.Set(platform, SpeakerModeValues[next]); + EditorGUILayout.HelpBox(helpText, MessageType.Info, false); + } + } + + void DisplayCallbackHandler(string label, Platform platform) + { + Platform.PropertyAccessor property = Platform.PropertyAccessors.CallbackHandler; + + if (platform.Parent != null || platform is PlatformPlayInEditor) + { + EditorGUILayout.BeginHorizontal(); + + EditorGUILayout.PrefixLabel(label); + + bool inherit = !property.HasValue(platform); + + EditorGUI.BeginChangeCheck(); + + if (platform is PlatformPlayInEditor) + { + inherit = GUILayout.Toggle(inherit, "Current Unity Platform", GUILayout.ExpandWidth(false)); + } + else + { + inherit = GUILayout.Toggle(inherit, "Inherit", GUILayout.ExpandWidth(false)); + } + + if (EditorGUI.EndChangeCheck()) + { + if (inherit) + { + property.Clear(platform); + } + else + { + property.Set(platform, property.Get(platform)); + } + } + + EditorGUI.BeginDisabledGroup(inherit); + + PlatformCallbackHandler next = EditorGUILayout.ObjectField( + property.Get(platform), typeof(PlatformCallbackHandler), false) as PlatformCallbackHandler; + + if (!inherit) + { + property.Set(platform, next); + } + + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.EndHorizontal(); + } + else + { + PlatformCallbackHandler next = EditorGUILayout.ObjectField(label, property.Get(platform), + typeof(PlatformCallbackHandler), false) as PlatformCallbackHandler; + property.Set(platform, next); + } + } + + void DisplayInt(string label, Platform platform, Platform.PropertyAccessor property, int min, int max) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel(label); + + int currentValue = property.Get(platform); + + if (platform.Parent != null) + { + bool inherit = !property.HasValue(platform); + + inherit = GUILayout.Toggle(inherit, "Inherit"); + + EditorGUI.BeginDisabledGroup(inherit); + int next = EditorGUILayout.IntSlider(currentValue, min, max); + EditorGUI.EndDisabledGroup(); + + if (inherit) + { + property.Clear(platform); + } + else + { + property.Set(platform, next); + } + } + else + { + int next = EditorGUILayout.IntSlider(currentValue, min, max); + property.Set(platform, next); + } + + EditorGUILayout.EndHorizontal(); + } + + void DisplayLiveUpdatePort(string label, Platform platform, Platform.PropertyAccessor property) + { + EditorGUILayout.BeginHorizontal(); + + int currentValue = property.Get(platform); + + if (platform.Parent != null) + { + EditorGUILayout.PrefixLabel(label); + + bool inherit = !property.HasValue(platform); + + inherit = GUILayout.Toggle(inherit, "Inherit"); + + EditorGUI.BeginDisabledGroup(inherit); + int next = int.Parse(EditorGUILayout.TextField("", currentValue.ToString(), GUILayout.MinWidth(50))); + if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false))) + { + next = 9264; + } + EditorGUI.EndDisabledGroup(); + + if (inherit) + { + property.Clear(platform); + } + else + { + property.Set(platform, next); + } + } + else + { + int next = int.Parse(EditorGUILayout.TextField(label, currentValue.ToString())); + if (GUILayout.Button("Reset", GUILayout.ExpandWidth(false))) + { + next = 9264; + } + property.Set(platform, next); + } + + EditorGUILayout.EndHorizontal(); + } + + private bool DrawLinks() + { + string color = EditorGUIUtility.isProSkin ? "#fa4d14" : "#0000FF"; + // Docs link + UnityEditor.EditorGUILayout.BeginHorizontal(); + { + var linkStyle = GUI.skin.button; + linkStyle.richText = true; + string caption = "Open FMOD Getting Started Guide"; + caption = String.Format("{1}", color, caption); + bool bClicked = GUILayout.Button(caption, linkStyle, GUILayout.ExpandWidth(false), GUILayout.Height(30), GUILayout.MaxWidth(300)); + + var rect = GUILayoutUtility.GetLastRect(); + rect.width = linkStyle.CalcSize(new GUIContent(caption)).x; + EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link); + + if (bClicked) + { + Application.OpenURL("https://fmod.com/resources/documentation-unity?version=2.0&page=user-guide.html"); + } + } + GUILayout.FlexibleSpace(); + // Support Link + { + var linkStyle = GUI.skin.button; + linkStyle.richText = true; + string caption = "Open FMOD Q&A"; + caption = String.Format("{1}", color, caption); + bool bClicked = GUILayout.Button(caption, linkStyle, GUILayout.ExpandWidth(false), GUILayout.Height(30), GUILayout.MaxWidth(200)); + + var rect = GUILayoutUtility.GetLastRect(); + rect.width = linkStyle.CalcSize(new GUIContent(caption)).x; + EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link); + + if (bClicked) + { + Application.OpenURL("https://qa.fmod.com/"); + } + } + UnityEditor.EditorGUILayout.EndHorizontal(); + + return true; + } + + Dictionary expandPlatform = new Dictionary(); + + private void DisplayPlatform(Platform platform) + { + if (!platform.Active) + { + return; + } + + var label = new System.Text.StringBuilder(); + label.AppendFormat("{0}", platform.DisplayName); + + if (!platform.IsIntrinsic && platform.Children.Count > 0) + { + IEnumerable children = platform.Children + .Where(child => child.Active) + .Select(child => child.DisplayName); + + if (children.Any()) + { + label.Append(" ("); + label.Append(string.Join(", ", children.ToArray())); + label.Append(")"); + } + } + + EditorGUILayout.BeginHorizontal(); + + bool expand = true; + + if (platform.IsIntrinsic) + { + GUIStyle style = new GUIStyle(GUI.skin.label); + style.richText = true; + + EditorGUILayout.LabelField(label.ToString(), style); + } + else + { + expand = false; + + if (expandPlatform.ContainsKey(platform.Identifier)) + { + expand = expandPlatform[platform.Identifier]; + } + + GUIStyle style = new GUIStyle(GUI.skin.FindStyle("Foldout")); + style.richText = true; + + expand = EditorGUILayout.Foldout(expand, new GUIContent(label.ToString()), style); + + expandPlatform[platform.Identifier] = expand; + + if (GUILayout.Button("Delete", GUILayout.ExpandWidth(false))) + { + // This avoids modifying the parent platform's children list while we're iterating over it + pendingPlatformDelete = platform; + } + } + + EditorGUILayout.EndHorizontal(); + + if (expand) + { + Settings settings = target as Settings; + + EditorGUI.indentLevel++; + + PlatformGroup group = platform as PlatformGroup; + + if (group != null) + { + group.displayName = EditorGUILayout.DelayedTextField("Name", group.displayName); + } + DisplayPlatformParent(platform); + + DisplayTriStateBool("Live Update", platform, Platform.PropertyAccessors.LiveUpdate); + + if (platform.IsLiveUpdateEnabled) + { + DisplayLiveUpdatePort("Live Update Port", platform, Platform.PropertyAccessors.LiveUpdatePort); + } + + DisplayTriStateBool("Debug Overlay", platform, Platform.PropertyAccessors.Overlay); + DisplayOutputMode("Output Mode", platform); + DisplaySampleRate("Sample Rate", platform); + + if (settings.HasPlatforms) + { + bool prevChanged = GUI.changed; + DisplayBuildDirectory("Bank Platform", platform); + hasBankSourceChanged |= !prevChanged && GUI.changed; + + string helpText = string.Format( + "Match the speaker mode to the setting of the platform {0} inside FMOD Studio", + platform.BuildDirectory); + + DisplaySpeakerMode("Speaker Mode", platform, helpText); + } + else if (platform is PlatformDefault) + { + DisplaySpeakerMode("Speaker Mode", platform, + "Match the speaker mode to the setting inside FMOD Studio"); + } + + DisplayCallbackHandler("Callback Handler", platform); + + if (!(platform is PlatformPlayInEditor)) + { + DisplayInt("Virtual Channel Count", platform, Platform.PropertyAccessors.VirtualChannelCount, 1, 2048); + DisplayInt("Real Channel Count", platform, Platform.PropertyAccessors.RealChannelCount, 1, 256); + DisplayDSPBufferSettings(platform); + + string warning = null; + + BuildTargetGroup buildTargetGroup = + BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget); + ScriptingImplementation scriptingBackend = PlayerSettings.GetScriptingBackend(buildTargetGroup); + + if (scriptingBackend != ScriptingImplementation.IL2CPP) + { + warning = "Only supported on the IL2CPP scripting backend"; + } + + DisplayPlugins("Static Plugins", platform, Platform.PropertyAccessors.StaticPlugins, + expandStaticPlugins, warning); + } + + DisplayPlugins("Dynamic Plugins", platform, Platform.PropertyAccessors.Plugins, expandDynamicPlugins); + + DisplayThreadAffinity("Thread Affinity", platform); + + if (!platform.IsIntrinsic) + { + foreach (Platform child in platform.Children) + { + DisplayPlatform(child); + } + } + + EditorGUI.indentLevel--; + } + } + + Dictionary expandDynamicPlugins = new Dictionary(); + Dictionary expandStaticPlugins = new Dictionary(); + + private void DisplayDSPBufferSettings(Platform platform) + { + Platform.PropertyAccessor lengthProperty = Platform.PropertyAccessors.DSPBufferLength; + Platform.PropertyAccessor countProperty = Platform.PropertyAccessors.DSPBufferCount; + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("DSP Buffer Settings"); + + int nextLength = 0; + int nextCount = 0; + + if (platform.Parent != null) + { + bool inherit = !lengthProperty.HasValue(platform) && !countProperty.HasValue(platform); + + inherit = GUILayout.Toggle(inherit, "Inherit"); + + GUILayout.Space(30); + + EditorGUI.BeginDisabledGroup(inherit); + + bool useAutoDSPBufferSettings = UsingAutoDSPBufferSettings(platform, lengthProperty, countProperty); + + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + + if (!useAutoDSPBufferSettings) + { + DisplayDSPBufferFields(platform, lengthProperty, countProperty, out nextLength, out nextCount); + } + + EditorGUI.EndDisabledGroup(); + + if (inherit) + { + lengthProperty.Clear(platform); + countProperty.Clear(platform); + } + else + { + lengthProperty.Set(platform, nextLength); + countProperty.Set(platform, nextCount); + } + } + else + { + bool useAutoDSPBufferSettings = UsingAutoDSPBufferSettings(platform, lengthProperty, countProperty); + + EditorGUILayout.EndHorizontal(); + + if (!useAutoDSPBufferSettings) + { + DisplayDSPBufferFields(platform, lengthProperty, countProperty, out nextLength, out nextCount); + } + + lengthProperty.Set(platform, nextLength); + countProperty.Set(platform, nextCount); + } + } + + private bool UsingAutoDSPBufferSettings(Platform platform, Platform.PropertyAccessor lengthProperty, Platform.PropertyAccessor countProperty) + { + bool useAutoDSPBufferSettings = lengthProperty.Get(platform) == 0 && countProperty.Get(platform) == 0; + + EditorGUI.BeginChangeCheck(); + useAutoDSPBufferSettings = GUILayout.Toggle(useAutoDSPBufferSettings, "Auto"); + if (EditorGUI.EndChangeCheck()) + { + if (useAutoDSPBufferSettings) + { + lengthProperty.Set(platform, 0); + countProperty.Set(platform, 0); + + } + else + { + // set a helpful default value (real default is 0 for auto behaviour) + lengthProperty.Set(platform, 512); + countProperty.Set(platform, 4); + } + } + + return useAutoDSPBufferSettings; + } + + private void DisplayDSPBufferFields(Platform platform, Platform.PropertyAccessor lengthProperty, Platform.PropertyAccessor countProperty, out int nextLength, out int nextCount) + { + EditorGUI.indentLevel++; + nextLength = Mathf.Max(EditorGUILayout.IntField("DSP Buffer Length", lengthProperty.Get(platform)), 8); + nextCount = Mathf.Max(EditorGUILayout.IntField("DSP Buffer Count", countProperty.Get(platform)), 2); + EditorGUI.indentLevel--; + } + + private void DisplayPlugins(string title, Platform platform, + Platform.PropertyAccessor> property, Dictionary expandState, + string warning = null) + { + List plugins = property.Get(platform); + + bool expand; + expandState.TryGetValue(platform.Identifier, out expand); + + Rect controlRect = EditorGUILayout.GetControlRect(); + + Rect titleRect = controlRect; + titleRect.width = EditorGUIUtility.labelWidth; + + GUIContent buttonContent = new GUIContent("Add Plugin"); + + Rect buttonRect = controlRect; + buttonRect.xMin = buttonRect.xMax - GUI.skin.button.CalcSize(buttonContent).x; + + string fullTitle = string.Format("{0}: {1}", title, plugins.Count); + + expand = EditorGUI.Foldout(titleRect, expand, new GUIContent(fullTitle), true); + + bool inherit = false; + + if (platform.Parent != null || platform is PlatformPlayInEditor) + { + inherit = !property.HasValue(platform); + + EditorGUI.BeginChangeCheck(); + + Rect toggleRect = controlRect; + toggleRect.xMin = titleRect.xMax; + toggleRect.xMax = buttonRect.xMin; + + if (platform is PlatformPlayInEditor) + { + inherit = GUI.Toggle(toggleRect, inherit, "Current Unity Platform"); + } + else + { + inherit = GUI.Toggle(toggleRect, inherit, "Inherit"); + } + + if (EditorGUI.EndChangeCheck()) + { + if (inherit) + { + property.Clear(platform); + } + else + { + plugins = new List(property.Get(platform.Parent)); + property.Set(platform, plugins); + + if (plugins.Count > 0) + { + expand = true; + } + } + } + } + + EditorGUI.BeginDisabledGroup(inherit); + + if (GUI.Button(buttonRect, buttonContent)) + { + plugins.Add(string.Empty); + expand = true; + } + + if (expand) + { + EditorGUI.indentLevel++; + + if (warning != null) + { + EditorGUILayout.HelpBox(warning, MessageType.Warning); + } + + for (int i = 0; i < plugins.Count; i++) + { + bool delete; + plugins[i] = DrawPlugin(i, plugins[i], out delete); + + if (delete) + { + plugins.RemoveAt(i); + + if (plugins.Count == 0) + { + expand = false; + } + } + } + + EditorGUI.indentLevel--; + } + + EditorGUI.EndDisabledGroup(); + + expandState[platform.Identifier] = expand; + } + + private string DrawPlugin(int index, string name, out bool delete) + { + Rect controlRect = EditorGUILayout.GetControlRect(); + + GUIContent deleteText = new GUIContent("Delete"); + + GUIStyle buttonStyle = GUI.skin.button; + + Rect deleteButtonRect = controlRect; + deleteButtonRect.xMin = controlRect.xMax - buttonStyle.CalcSize(deleteText).x; + + Rect nameRect = controlRect; + nameRect.xMax = deleteButtonRect.xMin - buttonStyle.margin.left; + + string label = string.Format("Plugin {0}:", index + 1); + + string newName = EditorGUI.TextField(nameRect, label, name); + + delete = GUI.Button(deleteButtonRect, deleteText, EditorStyles.miniButton); + + return newName; + } + + private Platform pendingPlatformDelete; + + public override void OnInspectorGUI() + { + Settings settings = target as Settings; + + DrawLinks(); + + EditorGUI.BeginChangeCheck(); + + hasBankSourceChanged = false; + bool hasBankTargetChanged = false; + + GUIStyle style = new GUIStyle(GUI.skin.label); + style.richText = true; + + GUI.skin.FindStyle("HelpBox").richText = true; + + SourceType sourceType = settings.HasSourceProject ? SourceType.Project : (settings.HasPlatforms ? SourceType.Multi : SourceType.Single); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.BeginVertical(); + sourceType = GUILayout.Toggle(sourceType == SourceType.Project, "Project", "Button") ? 0 : sourceType; + sourceType = GUILayout.Toggle(sourceType == SourceType.Single, "Single Platform Build", "Button") ? SourceType.Single : sourceType; + sourceType = GUILayout.Toggle(sourceType == SourceType.Multi, "Multiple Platform Build", "Button") ? SourceType.Multi : sourceType; + EditorGUILayout.EndVertical(); + EditorGUILayout.BeginVertical(); + + EditorGUILayout.HelpBox( + "Select the way you wish to connect Unity to the FMOD Studio content:\n" + + "• Project\t\tIf you have the complete FMOD Studio project avaliable\n" + + "• Single Platform\tIf you have only the contents of the Build folder for a single platform\n" + + "• Multiple Platforms\tIf you have only the contents of the Build folder for multiple platforms, each platform in its own sub directory\n" + + "" + , MessageType.Info, true); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.Space(); + + if (sourceType == SourceType.Project) + { + EditorGUILayout.BeginHorizontal(); + string oldPath = settings.SourceProjectPath; + EditorGUILayout.PrefixLabel("Studio Project Path", GUI.skin.textField, style); + + EditorGUI.BeginChangeCheck(); + string newPath = EditorGUILayout.TextField(GUIContent.none, settings.SourceProjectPath); + if (EditorGUI.EndChangeCheck()) + { + if (newPath.EndsWith(".fspro")) + { + settings.SourceProjectPath = newPath; + } + } + + if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) + { + GUI.FocusControl(null); + EditorApplication.update += BrowseForSourceProjectPath; + } + EditorGUILayout.EndHorizontal(); + + // Cache in settings for runtime access in play-in-editor mode + string bankPath = EditorUtils.GetBankDirectory(); + settings.SourceBankPath = bankPath; + settings.HasPlatforms = true; + settings.HasSourceProject = true; + + // First time project path is set or changes, copy to streaming assets + if (settings.SourceProjectPath != oldPath) + { + hasBankSourceChanged = true; + } + } + else if (sourceType == SourceType.Single || sourceType == SourceType.Multi) + { + EditorGUILayout.BeginHorizontal(); + string oldPath = settings.SourceBankPath; + EditorGUILayout.PrefixLabel("Build Path", GUI.skin.textField, style); + + EditorGUI.BeginChangeCheck(); + string tempPath = EditorGUILayout.TextField(GUIContent.none, settings.SourceBankPath); + if (EditorGUI.EndChangeCheck()) + { + settings.SourceBankPath = tempPath; + } + + if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) + { + GUI.FocusControl(null); + EditorApplication.update += BrowseForSourceBankPath; + } + EditorGUILayout.EndHorizontal(); + + settings.HasPlatforms = (sourceType == SourceType.Multi); + settings.HasSourceProject = false; + + // First time project path is set or changes, copy to streaming assets + if (settings.SourceBankPath != oldPath) + { + hasBankSourceChanged = true; + } + } + + bool validBanks; + string failReason; + EditorUtils.ValidateSource(out validBanks, out failReason); + if (!validBanks) + { + failReason += "\n\nFor detailed setup instructions, please see the getting started guide linked above."; + EditorGUILayout.HelpBox(failReason, MessageType.Error, true); + if (EditorGUI.EndChangeCheck()) + { + EditorUtility.SetDirty(settings); + } + return; + } + + ImportType importType = (ImportType)EditorGUILayout.EnumPopup("Import Type", settings.ImportType); + if (importType != settings.ImportType) + { + bool deleteBanks = EditorUtility.DisplayDialog( + "FMOD Bank Import Type Changed", "Do you want to delete the " + settings.ImportType.ToString() + " banks in " + settings.TargetPath, + "Yes", "No"); + + if (deleteBanks) + { + // Delete the old banks + EventManager.RemoveBanks(settings.TargetPath); + } + hasBankTargetChanged = true; + settings.ImportType = importType; + } + + // ----- Asset Sub Directory ------------- + { + GUI.SetNextControlName("targetSubFolder"); + targetSubFolder = settings.ImportType == ImportType.AssetBundle + ? EditorGUILayout.TextField("FMOD Asset Sub Folder", string.IsNullOrEmpty(targetSubFolder) ? settings.TargetAssetPath : targetSubFolder) + : EditorGUILayout.TextField("FMOD Bank Sub Folder", string.IsNullOrEmpty(targetSubFolder) ? settings.TargetSubFolder : targetSubFolder); + if (GUI.GetNameOfFocusedControl() == "targetSubFolder") + { + focused = true; + if (Event.current.isKey) + { + switch (Event.current.keyCode) + { + case KeyCode.Return: + case KeyCode.KeypadEnter: + if (settings.TargetSubFolder != targetSubFolder) + { + EventManager.RemoveBanks(settings.TargetPath); + settings.TargetSubFolder = targetSubFolder; + hasBankTargetChanged = true; + } + targetSubFolder = ""; + break; + } + } + } + else if (focused) + { + if (settings.TargetSubFolder != targetSubFolder) + { + EventManager.RemoveBanks(settings.TargetPath); + settings.TargetSubFolder = targetSubFolder; + hasBankTargetChanged = true; + } + targetSubFolder = ""; + } + } + + // ----- Logging ----------------- + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Logging", style); + EditorGUI.indentLevel++; + settings.LoggingLevel = (FMOD.DEBUG_FLAGS)EditorGUILayout.EnumPopup("Logging Level", settings.LoggingLevel); + EditorGUI.indentLevel--; + + // ----- Audio ------------------- + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Audio", style); + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + settings.MeterChannelOrdering = (MeterChannelOrderingType)EditorGUILayout.EnumPopup("Meter Channel Ordering", settings.MeterChannelOrdering); + if (EditorGUI.EndChangeCheck() && EventBrowser.IsOpen) + { + EditorWindow.GetWindow("FMOD Events", false).Repaint(); + } + settings.StopEventsOutsideMaxDistance = EditorGUILayout.Toggle("Stop Events Outside Max Distance", settings.StopEventsOutsideMaxDistance); + EditorGUI.indentLevel--; + + // ----- Loading ----------------- + EditorGUI.BeginDisabledGroup(settings.ImportType == ImportType.AssetBundle); + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Initialization", style); + EditorGUI.indentLevel++; + + settings.EnableMemoryTracking = EditorGUILayout.Toggle("Enable Memory Tracking", settings.EnableMemoryTracking); + + settings.BankLoadType = (BankLoadType)EditorGUILayout.EnumPopup("Load Banks", settings.BankLoadType); + switch (settings.BankLoadType) + { + case BankLoadType.All: + break; + case BankLoadType.Specified: + settings.AutomaticEventLoading = false; + Texture upArrowTexture = EditorGUIUtility.Load("FMOD/ArrowUp.png") as Texture; + Texture downArrowTexture = EditorGUIUtility.Load("FMOD/ArrowDown.png") as Texture; + bankFoldOutState = EditorGUILayout.Foldout(bankFoldOutState, "Specified Banks", true); + if (bankFoldOutState) + { + for (int i = 0; i < settings.BanksToLoad.Count; i++) + { + EditorGUILayout.BeginHorizontal(); + EditorGUI.indentLevel++; + + var bankName = settings.BanksToLoad[i]; + EditorGUILayout.TextField(bankName.Replace(".bank", "")); + + if (GUILayout.Button(upArrowTexture, GUILayout.ExpandWidth(false))) + { + if (i > 0) + { + var temp = settings.BanksToLoad[i]; + settings.BanksToLoad[i] = settings.BanksToLoad[i - 1]; + settings.BanksToLoad[i - 1] = temp; + } + continue; + } + if (GUILayout.Button(downArrowTexture, GUILayout.ExpandWidth(false))) + { + if (i < settings.BanksToLoad.Count - 1) + { + var temp = settings.BanksToLoad[i]; + settings.BanksToLoad[i] = settings.BanksToLoad[i + 1]; + settings.BanksToLoad[i + 1] = temp; + } + continue; + } + + if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) + { + GUI.FocusControl(null); + string path = EditorUtility.OpenFilePanel("Locate Bank", settings.TargetPath, "bank"); + if (!string.IsNullOrEmpty(path)) + { + path = RuntimeUtils.GetCommonPlatformPath(path); + settings.BanksToLoad[i] = path.Replace(settings.TargetPath, ""); + Repaint(); + } + } + if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) + { + Settings.Instance.BanksToLoad.RemoveAt(i); + continue; + } + EditorGUILayout.EndHorizontal(); + EditorGUI.indentLevel--; + } + + GUILayout.BeginHorizontal(); + GUILayout.Space(30); + if (GUILayout.Button("Add Bank", GUILayout.ExpandWidth(false))) + { + settings.BanksToLoad.Add(""); + } + if (GUILayout.Button("Add All Banks", GUILayout.ExpandWidth(false))) + { + string sourceDir; + + if (settings.HasSourceProject) + { + sourceDir = string.Format("{0}/{1}/", settings.SourceBankPath, settings.CurrentEditorPlatform.BuildDirectory); + } + else + { + sourceDir = settings.SourceBankPath; + } + + sourceDir = RuntimeUtils.GetCommonPlatformPath(Path.GetFullPath(sourceDir)); + var banksFound = new List(Directory.GetFiles(sourceDir, "*.bank", SearchOption.AllDirectories)); + for (int i = 0; i < banksFound.Count; i++) + { + string bankLongName = RuntimeUtils.GetCommonPlatformPath(Path.GetFullPath(banksFound[i])); + string bankShortName = bankLongName.Replace(sourceDir, ""); + if (!settings.BanksToLoad.Contains(bankShortName)) + { + settings.BanksToLoad.Add(bankShortName); + } + } + + Repaint(); + } + if (GUILayout.Button("Clear", GUILayout.ExpandWidth(false))) + { + settings.BanksToLoad.Clear(); + } + GUILayout.EndHorizontal(); + } + break; + case BankLoadType.None: + settings.AutomaticEventLoading = false; + break; + default: + break; + } + + EditorGUI.BeginDisabledGroup(settings.BankLoadType == BankLoadType.None); + settings.AutomaticSampleLoading = EditorGUILayout.Toggle("Load Bank Sample Data", settings.AutomaticSampleLoading); + EditorGUI.EndDisabledGroup(); + + settings.EncryptionKey = EditorGUILayout.TextField("Bank Encryption Key", settings.EncryptionKey); + + EditorGUI.indentLevel--; + EditorGUI.EndDisabledGroup(); + + // ----- PIE ---------------------------------------------- + EditorGUILayout.Separator(); + DisplayPlatform(settings.PlayInEditorPlatform); + + // ----- Default ---------------------------------------------- + EditorGUILayout.Separator(); + DisplayPlatform(settings.DefaultPlatform); + + // Top-level platforms + EditorGUILayout.Separator(); + DisplayPlatformHeader(); + + EditorGUI.indentLevel++; + foreach (Platform platform in settings.DefaultPlatform.Children) + { + DisplayPlatform(platform); + } + EditorGUI.indentLevel--; + + if (EditorGUI.EndChangeCheck()) + { + EditorUtility.SetDirty(settings); + } + + if (hasBankSourceChanged) + { + EventManager.RefreshBanks(); + } + if (hasBankTargetChanged) + { + EventManager.RefreshBanks(); + } + if (pendingPlatformDelete != null) + { + settings.RemovePlatformProperties(pendingPlatformDelete); + + ParentCandidates.Remove(pendingPlatformDelete); + + if (!(pendingPlatformDelete is PlatformGroup)) + { + MissingPlatforms.Add(pendingPlatformDelete); + MissingPlatforms.Sort(CompareDisplayNames); + } + + pendingPlatformDelete = null; + } + } + + [NonSerialized] + private Rect AddPlatformButtonRect; + + [NonSerialized] + private List ParentCandidates; + + [NonSerialized] + private List MissingPlatforms; + + private static int CompareDisplayNames(Platform a, Platform b) + { + return EditorUtility.NaturalCompare(a.DisplayName, b.DisplayName); + } + + private void BuildPlatformLists() + { + if (MissingPlatforms == null) + { + MissingPlatforms = new List(); + ParentCandidates = new List(); + + Settings settings = target as Settings; + + settings.ForEachPlatform(platform => + { + if (!platform.Active) + { + MissingPlatforms.Add(platform); + } + else if (!platform.IsIntrinsic) + { + ParentCandidates.Add(platform); + } + }); + + MissingPlatforms.Sort(CompareDisplayNames); + ParentCandidates.Sort(CompareDisplayNames); + } + } + + private void AddPlatformProperties(object data) + { + string identifier = data as string; + + Settings settings = target as Settings; + Platform platform = settings.FindPlatform(identifier); + + settings.AddPlatformProperties(platform); + + MissingPlatforms.Remove(platform); + + ParentCandidates.Add(platform); + ParentCandidates.Sort(CompareDisplayNames); + } + + private void DisplayPlatformHeader() + { + GUIStyle labelStyle = new GUIStyle(GUI.skin.label); + labelStyle.richText = true; + + GUIStyle dropdownStyle = new GUIStyle(GUI.skin.FindStyle("dropdownButton")); + dropdownStyle.fixedHeight = 0; + + BuildPlatformLists(); + + EditorGUILayout.BeginHorizontal(); + + EditorGUILayout.PrefixLabel("Platforms", dropdownStyle, labelStyle); + + EditorGUI.BeginDisabledGroup(MissingPlatforms.Count == 0); + + bool showPlatforms = EditorGUILayout.DropdownButton(new GUIContent("Add Platform"), FocusType.Passive, dropdownStyle); + + EditorGUI.EndDisabledGroup(); + + if (Event.current.type == EventType.Repaint) + { + AddPlatformButtonRect = GUILayoutUtility.GetLastRect(); + } + + if (GUILayout.Button(new GUIContent("Add Group"))) + { + Settings settings = target as Settings; + settings.AddPlatformGroup("Group"); + MissingPlatforms = null; + } + + EditorGUILayout.EndHorizontal(); + + if (showPlatforms) + { + GenericMenu menu = new GenericMenu(); + + foreach (Platform platform in MissingPlatforms) + { + menu.AddItem(new GUIContent(platform.DisplayName), false, AddPlatformProperties, platform.Identifier); + } + + menu.DropDown(AddPlatformButtonRect); + } + } + + private Dictionary PlatformParentRect = new Dictionary(); + + private void DisplayPlatformParent(Platform platform) + { + if (!platform.IsIntrinsic) + { + BuildPlatformLists(); + + Settings settings = target as Settings; + + EditorGUILayout.BeginHorizontal(); + + EditorGUILayout.PrefixLabel("Inherit From"); + bool showList = EditorGUILayout.DropdownButton(new GUIContent(platform.Parent.DisplayName), FocusType.Passive); + + if (Event.current.type == EventType.Repaint) + { + PlatformParentRect[platform] = GUILayoutUtility.GetLastRect(); + } + + if (showList) + { + GenericMenu menu = new GenericMenu(); +#if UNITY_2018_2_OR_NEWER + menu.allowDuplicateNames = true; +#endif + + GenericMenu.MenuFunction2 setParent = (newParent) => + { + platform.Parent = newParent as Platform; + }; + + Action AddMenuItem = (candidate) => + { + bool isCurrent = platform.Parent == candidate; + menu.AddItem(new GUIContent(candidate.DisplayName), isCurrent, setParent, candidate); + }; + + AddMenuItem(settings.DefaultPlatform); + + bool separatorAdded = false; + + foreach (Platform candidate in ParentCandidates) + { + if (!candidate.InheritsFrom(platform)) + { + if (!separatorAdded) + { + menu.AddSeparator(string.Empty); + separatorAdded = true; + } + + AddMenuItem(candidate); + } + } + + menu.DropDown(PlatformParentRect[platform]); + } + + EditorGUILayout.EndHorizontal(); + } + } + + void BrowseForSourceProjectPath() + { + Settings settings = target as Settings; + + string newPath = EditorUtility.OpenFilePanel("Locate Studio Project", settings.SourceProjectPath, "fspro"); + + if (!string.IsNullOrEmpty(newPath)) + { + newPath = MakePathRelative(newPath); + + if (newPath != settings.SourceProjectPath) + { + settings.SourceProjectPath = newPath; + EventManager.RefreshBanks(); + Repaint(); + } + } + + EditorApplication.update -= BrowseForSourceProjectPath; + } + + void BrowseForSourceBankPath() + { + Settings settings = target as Settings; + + string newPath = EditorUtility.OpenFolderPanel("Locate Build Folder", settings.SourceBankPath, null); + + if (!string.IsNullOrEmpty(newPath)) + { + newPath = MakePathRelative(newPath); + + if (newPath != settings.SourceBankPath) + { + settings.SourceBankPath = newPath; + EventManager.RefreshBanks(); + Repaint(); + } + } + + EditorApplication.update -= BrowseForSourceBankPath; + } + + private string MakePathRelative(string path) + { + if (string.IsNullOrEmpty(path)) + return ""; + string fullPath = Path.GetFullPath(path); + string fullProjectPath = Path.GetFullPath(Environment.CurrentDirectory + Path.DirectorySeparatorChar); + + // If the path contains the Unity project path remove it and return the result + if (fullPath.Contains(fullProjectPath)) + { + fullPath = fullPath.Replace(fullProjectPath, ""); + } + // If not, attempt to find a relative path on the same drive + else if (Path.GetPathRoot(fullPath) == Path.GetPathRoot(fullProjectPath)) + { + // Remove trailing slash from project path for split count simplicity + if (fullProjectPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.CurrentCulture)) fullProjectPath = fullProjectPath.Substring(0, fullProjectPath.Length - 1); + + string[] fullPathSplit = fullPath.Split(Path.DirectorySeparatorChar); + string[] projectPathSplit = fullProjectPath.Split(Path.DirectorySeparatorChar); + int minNumSplits = Mathf.Min(fullPathSplit.Length, projectPathSplit.Length); + int numCommonElements = 0; + for (int i = 0; i < minNumSplits; i++) + { + if (fullPathSplit[i] == projectPathSplit[i]) + { + numCommonElements++; + } + else + { + break; + } + } + string result = ""; + int fullPathSplitLength = fullPathSplit.Length; + for (int i = numCommonElements; i < fullPathSplitLength; i++) + { + result += fullPathSplit[i]; + if (i < fullPathSplitLength - 1) + { + result += '/'; + } + } + + int numAdditionalElementsInProjectPath = projectPathSplit.Length - numCommonElements; + for (int i = 0; i < numAdditionalElementsInProjectPath; i++) + { + result = "../" + result; + } + + fullPath = result; + } + + return fullPath.Replace(Path.DirectorySeparatorChar, '/'); + } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/SettingsEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/SettingsEditor.cs.meta new file mode 100644 index 0000000..9dee342 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/SettingsEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 353a9c870c318f74fa5fdcd475129bae +timeCreated: 1432530253 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioBankLoaderEditor.cs b/game/Assets/Plugins/FMOD/src/Editor/StudioBankLoaderEditor.cs new file mode 100644 index 0000000..6ba40a7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioBankLoaderEditor.cs @@ -0,0 +1,101 @@ +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomEditor(typeof(StudioBankLoader))] + [CanEditMultipleObjects] + public class StudioBankLoaderEditor : Editor + { + public override void OnInspectorGUI() + { + var load = serializedObject.FindProperty("LoadEvent"); + var unload = serializedObject.FindProperty("UnloadEvent"); + var tag = serializedObject.FindProperty("CollisionTag"); + var banks = serializedObject.FindProperty("Banks"); + var preload = serializedObject.FindProperty("PreloadSamples"); + + EditorGUILayout.PropertyField(load, new GUIContent("Load")); + EditorGUILayout.PropertyField(unload, new GUIContent("Unload")); + + if ((load.enumValueIndex >= 3 && load.enumValueIndex <= 6) || + (unload.enumValueIndex >= 3 && unload.enumValueIndex <= 6)) + { + tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); + } + + EditorGUILayout.PropertyField(preload, new GUIContent("Preload Sample Data")); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Banks"); + EditorGUILayout.BeginVertical(); + if (GUILayout.Button("Add Bank", GUILayout.ExpandWidth(false))) + { + banks.InsertArrayElementAtIndex(banks.arraySize); + SerializedProperty newBank = banks.GetArrayElementAtIndex(banks.arraySize - 1); + newBank.stringValue = ""; + + EventBrowser browser = CreateInstance(); + + browser.titleContent = new GUIContent("Select FMOD Bank"); + + browser.ChooseBank(newBank); + browser.ShowUtility(); + } + + Texture deleteTexture = EditorGUIUtility.Load("FMOD/Delete.png") as Texture; + GUIContent deleteContent = new GUIContent(deleteTexture, "Delete Bank"); + + var buttonStyle = new GUIStyle(GUI.skin.button); + buttonStyle.padding.top = buttonStyle.padding.bottom = 1; + buttonStyle.margin.top = 2; + buttonStyle.padding.left = buttonStyle.padding.right = 4; + buttonStyle.fixedHeight = GUI.skin.textField.CalcSize(new GUIContent()).y; + + for (int i = 0; i < banks.arraySize; i++) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(banks.GetArrayElementAtIndex(i), GUIContent.none); + + if (GUILayout.Button(deleteContent, buttonStyle, GUILayout.ExpandWidth(false))) + { + banks.DeleteArrayElementAtIndex(i); + } + EditorGUILayout.EndHorizontal(); + } + EditorGUILayout.EndVertical(); + + EditorGUILayout.EndHorizontal(); + + Event e = Event.current; + if (e.type == EventType.DragPerform) + { + if (DragAndDrop.objectReferences.Length > 0 && + DragAndDrop.objectReferences[0] != null && + DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef)) + { + int pos = banks.arraySize; + banks.InsertArrayElementAtIndex(pos); + var pathProperty = banks.GetArrayElementAtIndex(pos); + + pathProperty.stringValue = ((EditorBankRef)DragAndDrop.objectReferences[0]).Name; + + e.Use(); + } + } + if (e.type == EventType.DragUpdated) + { + if (DragAndDrop.objectReferences.Length > 0 && + DragAndDrop.objectReferences[0] != null && + DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef)) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Move; + DragAndDrop.AcceptDrag(); + e.Use(); + } + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioBankLoaderEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/StudioBankLoaderEditor.cs.meta new file mode 100644 index 0000000..1447d46 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioBankLoaderEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f7f61e03a350e1e428dba6c562f3d64a +timeCreated: 1434691856 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterEditor.cs b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterEditor.cs new file mode 100644 index 0000000..7048c9e --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterEditor.cs @@ -0,0 +1,483 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomEditor(typeof(StudioEventEmitter))] + [CanEditMultipleObjects] + public class StudioEventEmitterEditor : Editor + { + ParameterValueView parameterValueView; + + public void OnEnable() + { + parameterValueView = new ParameterValueView(serializedObject); + } + + public void OnSceneGUI() + { + var emitter = target as StudioEventEmitter; + + EditorEventRef editorEvent = EventManager.EventFromPath(emitter.Event); + if (editorEvent != null && editorEvent.Is3D) + { + EditorGUI.BeginChangeCheck(); + float minDistance = emitter.OverrideAttenuation ? emitter.OverrideMinDistance : editorEvent.MinDistance; + float maxDistance = emitter.OverrideAttenuation ? emitter.OverrideMaxDistance : editorEvent.MaxDistance; + minDistance = Handles.RadiusHandle(Quaternion.identity, emitter.transform.position, minDistance); + maxDistance = Handles.RadiusHandle(Quaternion.identity, emitter.transform.position, maxDistance); + if (EditorGUI.EndChangeCheck() && emitter.OverrideAttenuation) + { + Undo.RecordObject(emitter, "Change Emitter Bounds"); + emitter.OverrideMinDistance = Mathf.Clamp(minDistance, 0, emitter.OverrideMaxDistance); + emitter.OverrideMaxDistance = Mathf.Max(emitter.OverrideMinDistance, maxDistance); + } + } + } + + public override void OnInspectorGUI() + { + var begin = serializedObject.FindProperty("PlayEvent"); + var end = serializedObject.FindProperty("StopEvent"); + var tag = serializedObject.FindProperty("CollisionTag"); + var ev = serializedObject.FindProperty("Event"); + var fadeout = serializedObject.FindProperty("AllowFadeout"); + var once = serializedObject.FindProperty("TriggerOnce"); + var preload = serializedObject.FindProperty("Preload"); + var overrideAtt = serializedObject.FindProperty("OverrideAttenuation"); + var minDistance = serializedObject.FindProperty("OverrideMinDistance"); + var maxDistance = serializedObject.FindProperty("OverrideMaxDistance"); + + EditorGUILayout.PropertyField(begin, new GUIContent("Play Event")); + EditorGUILayout.PropertyField(end, new GUIContent("Stop Event")); + + if ((begin.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && begin.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D) || + (end.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && end.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D)) + { + tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); + } + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(ev, new GUIContent("Event")); + + EditorEventRef editorEvent = EventManager.EventFromPath(ev.stringValue); + + if (EditorGUI.EndChangeCheck()) + { + EditorUtils.UpdateParamsOnEmitter(serializedObject, ev.stringValue); + if (editorEvent != null) + { + overrideAtt.boolValue = false; + minDistance.floatValue = editorEvent.MinDistance; + maxDistance.floatValue = editorEvent.MaxDistance; + } + } + + // Attenuation + if (editorEvent != null) + { + { + EditorGUI.BeginDisabledGroup(editorEvent == null || !editorEvent.Is3D); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Override Attenuation"); + EditorGUI.BeginChangeCheck(); + overrideAtt.boolValue = EditorGUILayout.Toggle(overrideAtt.boolValue, GUILayout.Width(20)); + if (EditorGUI.EndChangeCheck() || + (minDistance.floatValue == -1 && maxDistance.floatValue == -1) // never been initialiased + ) + { + minDistance.floatValue = editorEvent.MinDistance; + maxDistance.floatValue = editorEvent.MaxDistance; + } + EditorGUI.BeginDisabledGroup(!overrideAtt.boolValue); + EditorGUIUtility.labelWidth = 30; + minDistance.floatValue = EditorGUILayout.FloatField("Min", minDistance.floatValue); + minDistance.floatValue = Mathf.Clamp(minDistance.floatValue, 0, maxDistance.floatValue); + maxDistance.floatValue = EditorGUILayout.FloatField("Max", maxDistance.floatValue); + maxDistance.floatValue = Mathf.Max(minDistance.floatValue, maxDistance.floatValue); + EditorGUIUtility.labelWidth = 0; + EditorGUI.EndDisabledGroup(); + EditorGUILayout.EndHorizontal(); + EditorGUI.EndDisabledGroup(); + } + + parameterValueView.OnGUI(editorEvent, !ev.hasMultipleDifferentValues); + + fadeout.isExpanded = EditorGUILayout.Foldout(fadeout.isExpanded, "Advanced Controls"); + if (fadeout.isExpanded) + { + EditorGUILayout.PropertyField(preload, new GUIContent("Preload Sample Data")); + EditorGUILayout.PropertyField(fadeout, new GUIContent("Allow Fadeout When Stopping")); + EditorGUILayout.PropertyField(once, new GUIContent("Trigger Once")); + } + } + + serializedObject.ApplyModifiedProperties(); + } + + private class ParameterValueView + { + // The "Params" property from the SerializedObject we're editing in the inspector, + // so we can expand/collapse it or revert to prefab. + private SerializedProperty paramsProperty; + + // This holds one SerializedObject for each object in the current selection. + private List serializedTargets = new List(); + + // A mapping from EditorParamRef to the initial parameter value properties in the + // current selection that have the same name. + // We need this because some objects may be missing some properties, and properties with + // the same name may be at different array indices in different objects. + private class PropertyRecord + { + public string name { get { return paramRef.Name; } } + public EditorParamRef paramRef; + public List valueProperties; + } + + // Mappings from EditorParamRef to initial parameter value property for all properties + // found in the current selection. + private List propertyRecords = new List(); + + // Any parameters that are in the current event but are missing from some objects in + // the current selection, so we can put them in the "Add" menu. + private List missingParameters = new List(); + + public ParameterValueView(SerializedObject serializedObject) + { + paramsProperty = serializedObject.FindProperty("Params"); + + foreach (UnityEngine.Object target in serializedObject.targetObjects) + { + serializedTargets.Add(new SerializedObject(target)); + } + } + + // Rebuilds the propertyRecords and missingParameters collections. + private void RefreshPropertyRecords(EditorEventRef eventRef) + { + propertyRecords.Clear(); + + foreach (SerializedObject serializedTarget in serializedTargets) + { + SerializedProperty paramsProperty = serializedTarget.FindProperty("Params"); + + foreach (SerializedProperty parameterProperty in paramsProperty) + { + string name = parameterProperty.FindPropertyRelative("Name").stringValue; + SerializedProperty valueProperty = parameterProperty.FindPropertyRelative("Value"); + + PropertyRecord record = propertyRecords.Find(r => r.name == name); + + if (record != null) + { + record.valueProperties.Add(valueProperty); + } + else + { + EditorParamRef paramRef = eventRef.Parameters.Find(p => p.Name == name); + + if (paramRef != null) + { + propertyRecords.Add( + new PropertyRecord() { + paramRef = paramRef, + valueProperties = new List() { valueProperty }, + }); + } + } + } + } + + // Only sort if there is a multi-selection. If there is only one object selected, + // the user can revert to prefab, and the behaviour depends on the array order, + // so it's helpful to show the true order. + if (serializedTargets.Count > 1) + { + propertyRecords.Sort((a, b) => EditorUtility.NaturalCompare(a.name, b.name)); + } + + missingParameters.Clear(); + missingParameters.AddRange(eventRef.Parameters.Where( + p => { + PropertyRecord record = propertyRecords.Find(r => r.name == p.Name); + return record == null || record.valueProperties.Count < serializedTargets.Count; + })); + } + + public void OnGUI(EditorEventRef eventRef, bool matchingEvents) + { + foreach (SerializedObject serializedTarget in serializedTargets) + { + serializedTarget.Update(); + } + + if (Event.current.type == EventType.Layout) + { + RefreshPropertyRecords(eventRef); + } + + DrawHeader(matchingEvents); + + if (paramsProperty.isExpanded) + { + if (matchingEvents) + { + DrawValues(); + } + else + { + GUILayout.Box("Cannot change parameters when different events are selected", GUILayout.ExpandWidth(true)); + } + } + + foreach (SerializedObject serializedTarget in serializedTargets) + { + serializedTarget.ApplyModifiedProperties(); + } + } + + private void DrawHeader(bool enableAddButton) + { + Rect controlRect = EditorGUILayout.GetControlRect(); + + Rect titleRect = controlRect; + titleRect.width = EditorGUIUtility.labelWidth; + + // Let the user revert the whole Params array to prefab by context-clicking the title. + EditorGUI.BeginProperty(titleRect, GUIContent.none, paramsProperty); + + paramsProperty.isExpanded = EditorGUI.Foldout(titleRect, paramsProperty.isExpanded, + "Initial Parameter Values"); + + EditorGUI.EndProperty(); + + Rect buttonRect = controlRect; + buttonRect.xMin = titleRect.xMax; + + EditorGUI.BeginDisabledGroup(!enableAddButton); + + DrawAddButton(buttonRect); + + EditorGUI.EndDisabledGroup(); + } + + private void DrawAddButton(Rect position) + { + EditorGUI.BeginDisabledGroup(missingParameters.Count == 0); + + if (EditorGUI.DropdownButton(position, new GUIContent("Add"), FocusType.Passive)) + { + GenericMenu menu = new GenericMenu(); + menu.AddItem(new GUIContent("All"), false, () => + { + foreach (EditorParamRef parameter in missingParameters) + { + AddParameter(parameter); + } + }); + + menu.AddSeparator(string.Empty); + + foreach (EditorParamRef parameter in missingParameters) + { + menu.AddItem(new GUIContent(parameter.Name), false, + (userData) => + { + AddParameter(userData as EditorParamRef); + }, + parameter); + } + + menu.DropDown(position); + } + + EditorGUI.EndDisabledGroup(); + } + + private void DrawValues() + { + // We use this to defer deletion so we don't mess with arrays while using + // SerializedProperties that refer to array elements, as this can throw exceptions. + string parameterToDelete = null; + + foreach (PropertyRecord record in propertyRecords) + { + if (record.valueProperties.Count == serializedTargets.Count) + { + bool delete; + DrawValue(record, out delete); + + if (delete) + { + parameterToDelete = record.name; + } + } + } + + if (parameterToDelete != null) + { + DeleteParameter(parameterToDelete); + } + } + + private void DrawValue(PropertyRecord record, out bool delete) + { + delete = false; + + GUIContent removeLabel = new GUIContent("Remove"); + + Rect position = EditorGUILayout.GetControlRect(); + + Rect nameLabelRect = position; + nameLabelRect.width = EditorGUIUtility.labelWidth; + + Rect removeButtonRect = position; + removeButtonRect.width = EditorStyles.miniButton.CalcSize(removeLabel).x; + removeButtonRect.x = position.xMax - removeButtonRect.width; + + Rect sliderRect = position; + sliderRect.xMin = nameLabelRect.xMax; + sliderRect.xMax = removeButtonRect.xMin - EditorStyles.miniButton.margin.left; + + GUIContent nameLabel = new GUIContent(record.name); + + float value = 0; + bool mixedValues = false; + + // We use EditorGUI.BeginProperty when there is a single object selected, so + // the user can revert the value to prefab by context-clicking the name. + // We handle multi-selections ourselves, so that we can deal with + // mismatched arrays nicely. + if (record.valueProperties.Count == 1) + { + value = record.valueProperties[0].floatValue; + EditorGUI.BeginProperty(position, nameLabel, record.valueProperties[0]); + } + else + { + bool first = true; + + foreach (SerializedProperty property in record.valueProperties) + { + if (first) + { + value = property.floatValue; + first = false; + } + else if (property.floatValue != value) + { + mixedValues = true; + break; + } + } + } + + EditorGUI.LabelField(nameLabelRect, nameLabel); + + EditorGUI.BeginChangeCheck(); + + EditorGUI.showMixedValue = mixedValues; + + float newValue = EditorGUI.Slider(sliderRect, value, record.paramRef.Min, record.paramRef.Max); + + EditorGUI.showMixedValue = false; + + if (EditorGUI.EndChangeCheck()) + { + foreach (SerializedProperty property in record.valueProperties) + { + property.floatValue = newValue; + } + } + + delete = GUI.Button(removeButtonRect, removeLabel, EditorStyles.miniButton); + + if (record.valueProperties.Count == 1) + { + EditorGUI.EndProperty(); + } + else + { + // Context menu to set all values from one object in the multi-selection. + if (mixedValues && Event.current.type == EventType.ContextClick + && nameLabelRect.Contains(Event.current.mousePosition)) + { + GenericMenu menu = new GenericMenu(); + + foreach (SerializedProperty sourceProperty in record.valueProperties) + { + UnityEngine.Object targetObject = sourceProperty.serializedObject.targetObject; + + menu.AddItem(new GUIContent(string.Format("Set to Value of '{0}'", targetObject.name)), false, + (userData) => CopyValueToAll(userData as SerializedProperty, record.valueProperties), + sourceProperty); + } + + menu.DropDown(position); + + } + } + } + + // Copy the value from the source property to all target properties. + private void CopyValueToAll(SerializedProperty sourceProperty, List targetProperties) + { + foreach (SerializedProperty targetProperty in targetProperties) + { + if (targetProperty != sourceProperty) + { + targetProperty.floatValue = sourceProperty.floatValue; + targetProperty.serializedObject.ApplyModifiedProperties(); + } + } + } + + // Add an initial value for the given parameter to all selected objects that don't have one. + private void AddParameter(EditorParamRef parameter) + { + foreach (SerializedObject serializedTarget in serializedTargets) + { + StudioEventEmitter emitter = serializedTarget.targetObject as StudioEventEmitter; + + if (Array.FindIndex(emitter.Params, p => p.Name == parameter.Name) < 0) + { + SerializedProperty paramsProperty = serializedTarget.FindProperty("Params"); + + int index = paramsProperty.arraySize; + paramsProperty.InsertArrayElementAtIndex(index); + + SerializedProperty arrayElement = paramsProperty.GetArrayElementAtIndex(index); + + arrayElement.FindPropertyRelative("Name").stringValue = parameter.Name; + arrayElement.FindPropertyRelative("Value").floatValue = parameter.Default; + + serializedTarget.ApplyModifiedProperties(); + } + } + } + + // Delete initial parameter values for the given name from all selected objects. + private void DeleteParameter(string name) + { + foreach (SerializedObject serializedTarget in serializedTargets) + { + SerializedProperty paramsProperty = serializedTarget.FindProperty("Params"); + + foreach (SerializedProperty child in paramsProperty) + { + if (child.FindPropertyRelative("Name").stringValue == name) + { + child.DeleteCommand(); + break; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterEditor.cs.meta new file mode 100644 index 0000000..af0b511 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2b044fd4ebf2c42468e1f41d5e2b879c +timeCreated: 1434696182 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterGizmoDrawer.cs b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterGizmoDrawer.cs new file mode 100644 index 0000000..bd24f8d --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterGizmoDrawer.cs @@ -0,0 +1,14 @@ +using UnityEngine; +using UnityEditor; + +namespace FMODUnity +{ + public class StudioEventEmitterGizoDrawer + { + [DrawGizmo(GizmoType.Selected | GizmoType.Active | GizmoType.NotInSelectionHierarchy | GizmoType.Pickable)] + static void DrawGizmo(StudioEventEmitter studioEmitter, GizmoType gizmoType) + { + Gizmos.DrawIcon(studioEmitter.transform.position, "FMOD/FMODEmitter.tiff", true); + } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterGizmoDrawer.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterGizmoDrawer.cs.meta new file mode 100644 index 0000000..ca5da8f --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioEventEmitterGizmoDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f09ba26caab55e048a2e596ff75b3eab +timeCreated: 1433142677 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioGlobalParameterTriggerEditor.cs b/game/Assets/Plugins/FMOD/src/Editor/StudioGlobalParameterTriggerEditor.cs new file mode 100644 index 0000000..fa94f40 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioGlobalParameterTriggerEditor.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomEditor(typeof(StudioGlobalParameterTrigger))] + public class StudioGlobalParameterTriggerEditor : Editor + { + SerializedProperty param; + SerializedProperty trigger; + SerializedProperty tag; + SerializedProperty value; + + SerializedProperty data1, data2; + + [SerializeField] + EditorParamRef editorParamRef; + + void OnEnable() + { + param = serializedObject.FindProperty("parameter"); + trigger = serializedObject.FindProperty("TriggerEvent"); + tag = serializedObject.FindProperty("CollisionTag"); + value = serializedObject.FindProperty("value"); + } + + public override void OnInspectorGUI() + { + EditorGUILayout.PropertyField(trigger, new GUIContent("Trigger")); + if (trigger.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && trigger.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D) + { + tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); + } + + EditorGUI.BeginChangeCheck(); + + var oldParam = param.stringValue; + EditorGUILayout.PropertyField(param, new GUIContent("Parameter")); + + if (!String.IsNullOrEmpty(param.stringValue)) + { + if (!editorParamRef || param.stringValue != oldParam) + { + editorParamRef = EventManager.ParamFromPath(param.stringValue); + } + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Override Value"); + value.floatValue = EditorGUILayout.Slider(value.floatValue, editorParamRef.Min, editorParamRef.Max); + EditorGUILayout.EndHorizontal(); + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioGlobalParameterTriggerEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/StudioGlobalParameterTriggerEditor.cs.meta new file mode 100644 index 0000000..7728f87 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioGlobalParameterTriggerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a901681b5558f247b4c227fb425c010 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioListenerEditor.cs b/game/Assets/Plugins/FMOD/src/Editor/StudioListenerEditor.cs new file mode 100644 index 0000000..942df84 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioListenerEditor.cs @@ -0,0 +1,28 @@ +using UnityEditor; + +namespace FMODUnity +{ + [CustomEditor(typeof(StudioListener))] + [CanEditMultipleObjects] + public class StudioListenerEditor : Editor + { + public SerializedProperty attenuationObject; + + private void OnEnable() + { + attenuationObject = serializedObject.FindProperty("attenuationObject"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + EditorGUI.BeginDisabledGroup(true); + var index = serializedObject.FindProperty("ListenerNumber"); + EditorGUILayout.IntSlider(index, 0, FMOD.CONSTANTS.MAX_LISTENERS - 1, "Listener Index"); + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.PropertyField(attenuationObject); + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioListenerEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/StudioListenerEditor.cs.meta new file mode 100644 index 0000000..31b3e9a --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioListenerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 847f8505c25f5cf42adba68a26f2cda6 +timeCreated: 1445576758 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioParameterTriggerEditor.cs b/game/Assets/Plugins/FMOD/src/Editor/StudioParameterTriggerEditor.cs new file mode 100644 index 0000000..c48a52c --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioParameterTriggerEditor.cs @@ -0,0 +1,154 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomEditor(typeof(StudioParameterTrigger))] + public class StudioParameterTriggerEditor : Editor + { + StudioEventEmitter targetEmitter; + SerializedProperty emitters; + SerializedProperty trigger; + SerializedProperty tag; + + bool[] expanded; + + void OnEnable() + { + emitters = serializedObject.FindProperty("Emitters"); + trigger = serializedObject.FindProperty("TriggerEvent"); + tag = serializedObject.FindProperty("CollisionTag"); + targetEmitter = null; + for (int i = 0; i < emitters.arraySize; i++) + { + targetEmitter = emitters.GetArrayElementAtIndex(i).FindPropertyRelative("Target").objectReferenceValue as StudioEventEmitter; + if (targetEmitter != null) + { + expanded = new bool[targetEmitter.GetComponents().Length]; + break; + } + } + } + + public override void OnInspectorGUI() + { + var newTargetEmitter = EditorGUILayout.ObjectField("Target", targetEmitter, typeof(StudioEventEmitter), true) as StudioEventEmitter; + if (newTargetEmitter != targetEmitter) + { + emitters.ClearArray(); + targetEmitter = newTargetEmitter; + + if (targetEmitter == null) + { + serializedObject.ApplyModifiedProperties(); + return; + } + + List newEmitters = new List(); + targetEmitter.GetComponents(newEmitters); + expanded = new bool[newEmitters.Count]; + foreach (var emitter in newEmitters) + { + emitters.InsertArrayElementAtIndex(0); + emitters.GetArrayElementAtIndex(0).FindPropertyRelative("Target").objectReferenceValue = emitter; + } + } + + if (targetEmitter == null) + { + return; + } + + EditorGUILayout.PropertyField(trigger, new GUIContent("Trigger")); + + if (trigger.enumValueIndex >= (int)EmitterGameEvent.TriggerEnter && trigger.enumValueIndex <= (int)EmitterGameEvent.TriggerExit2D) + { + tag.stringValue = EditorGUILayout.TagField("Collision Tag", tag.stringValue); + } + + var localEmitters = new List(); + targetEmitter.GetComponents(localEmitters); + + int emitterIndex = 0; + foreach (var emitter in localEmitters) + { + SerializedProperty emitterProperty = null; + for(int i = 0; i < emitters.arraySize; i++) + { + if (emitters.GetArrayElementAtIndex(i).FindPropertyRelative("Target").objectReferenceValue == emitter) + { + emitterProperty = emitters.GetArrayElementAtIndex(i); + break; + } + } + + // New emitter component added to game object since we last looked + if (emitterProperty == null) + { + emitters.InsertArrayElementAtIndex(0); + emitterProperty = emitters.GetArrayElementAtIndex(0); + emitterProperty.FindPropertyRelative("Target").objectReferenceValue = emitter; + } + + if (!string.IsNullOrEmpty(emitter.Event)) + { + expanded[emitterIndex] = EditorGUILayout.Foldout(expanded[emitterIndex], emitter.Event); + if (expanded[emitterIndex]) + { + var eventRef = EventManager.EventFromPath(emitter.Event); + if (emitter.Event.StartsWith("{")) + { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.TextField("Path:", eventRef.Path); + EditorGUI.EndDisabledGroup(); + } + foreach (var paramRef in eventRef.Parameters) + { + bool set = false; + int index = -1; + for (int i = 0; i < emitterProperty.FindPropertyRelative("Params").arraySize; i++) + { + if (emitterProperty.FindPropertyRelative("Params").GetArrayElementAtIndex(i).FindPropertyRelative("Name").stringValue == paramRef.Name) + { + index = i; + set = true; + break; + } + } + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel(paramRef.Name); + bool newSet = GUILayout.Toggle(set, ""); + if (!set && newSet) + { + index = 0; + emitterProperty.FindPropertyRelative("Params").InsertArrayElementAtIndex(0); + emitterProperty.FindPropertyRelative("Params").GetArrayElementAtIndex(0).FindPropertyRelative("Name").stringValue = paramRef.Name; + emitterProperty.FindPropertyRelative("Params").GetArrayElementAtIndex(0).FindPropertyRelative("Value").floatValue = 0; + } + if (set && !newSet) + { + emitterProperty.FindPropertyRelative("Params").DeleteArrayElementAtIndex(index); + } + set = newSet; + EditorGUI.BeginDisabledGroup(!set); + if (set) + { + var valueProperty = emitterProperty.FindPropertyRelative("Params").GetArrayElementAtIndex(index).FindPropertyRelative("Value"); + valueProperty.floatValue = EditorGUILayout.Slider(valueProperty.floatValue, paramRef.Min, paramRef.Max); + } + else + { + EditorGUILayout.Slider(0, paramRef.Min, paramRef.Max); + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.EndHorizontal(); + } + } + } + emitterIndex++; + } + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/StudioParameterTriggerEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/StudioParameterTriggerEditor.cs.meta new file mode 100644 index 0000000..e54da36 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/StudioParameterTriggerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dc94d213814ef1a42b0ca8ee00dd4728 +timeCreated: 1451968823 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/Timeline.meta b/game/Assets/Plugins/FMOD/src/Editor/Timeline.meta new file mode 100644 index 0000000..3bdbbb0 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/Timeline.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e03eecb9c762874b9bdb393ee5d8db4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Editor/Timeline/FMODEventPlayableEditor.cs b/game/Assets/Plugins/FMOD/src/Editor/Timeline/FMODEventPlayableEditor.cs new file mode 100644 index 0000000..55e65a1 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/Timeline/FMODEventPlayableEditor.cs @@ -0,0 +1,150 @@ +#if (UNITY_TIMELINE_EXIST || !UNITY_2019_1_OR_NEWER) + +using UnityEditor; +using UnityEngine; +using FMODUnity; +using System; +using System.Linq; + +namespace FMODUnity +{ + [CustomEditor(typeof(FMODEventPlayable))] + public class FMODEventPlayableEditor : Editor + { + private FMODEventPlayable eventPlayable; + private EditorEventRef editorEventRef; + + public void OnEnable() + { + eventPlayable = target as FMODEventPlayable; + if (eventPlayable && !string.IsNullOrEmpty(eventPlayable.eventName)) + { + editorEventRef = EventManager.EventFromPath(eventPlayable.eventName); + eventPlayable.UpdateEventDuration(editorEventRef.IsOneShot ? editorEventRef.Length : float.PositiveInfinity); + } + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + var ev = serializedObject.FindProperty("eventName"); + var stopType = serializedObject.FindProperty("stopType"); + + EditorGUILayout.PropertyField(ev, new GUIContent("Event")); + + var eventRef = EventManager.EventFromPath(ev.stringValue); + + if (eventRef != null && eventRef.Parameters.Count > 0) + { + foreach (var paramRef in eventRef.Parameters) + { + bool set; + float value; + CheckParameter(paramRef.Name, out set, out value); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel(paramRef.Name); + EditorGUI.BeginChangeCheck(); + bool newSet = EditorGUILayout.Toggle(set, GUILayout.Width(20)); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObjects(new UnityEngine.Object[] { serializedObject.targetObject }, "Inspector"); + if (newSet) + { + AddParameterValue(serializedObject.targetObject, paramRef.Name, paramRef.Default); + } + else + { + DeleteParameterValue(serializedObject.targetObject, paramRef.Name); + } + set = newSet; + } + + if (set) + { + EditorGUI.BeginChangeCheck(); + value = EditorGUILayout.Slider(value, paramRef.Min, paramRef.Max); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObjects(new UnityEngine.Object[] { serializedObject.targetObject }, "Inspector"); + SetParameterValue(serializedObject.targetObject, paramRef.Name, value); + } + } + else + { + EditorGUILayout.Slider(paramRef.Default, paramRef.Min, paramRef.Max); + } + EditorGUILayout.EndHorizontal(); + } + } + + EditorGUILayout.PropertyField(stopType, new GUIContent("Stop Mode")); + + if (eventPlayable) + { + eventPlayable.OnValidate(); + } + serializedObject.ApplyModifiedProperties(); + } + + void CheckParameter(string name, out bool set, out float value) + { + value = 0; + set = false; + + var playable = serializedObject.targetObject as FMODEventPlayable; + var param = playable.parameters != null ? playable.parameters.FirstOrDefault((x) => x.Name == name) : null; + if (param != null) + { + set = true; + value = param.Value; + } + } + + void SetParameterValue(UnityEngine.Object obj, string name, float value) + { + var playable = obj as FMODEventPlayable; + var param = playable.parameters != null ? playable.parameters.FirstOrDefault((x) => x.Name == name) : null; + if (param != null) + { + param.Value = value; + } + } + + void AddParameterValue(UnityEngine.Object obj, string name, float value) + { + var playable = obj as FMODEventPlayable; + var param = playable.parameters != null ? playable.parameters.FirstOrDefault((x) => x.Name == name) : null; + if (param == null) + { + int end = playable.parameters.Length; + Array.Resize(ref playable.parameters, end + 1); + playable.parameters[end] = new ParamRef(); + playable.parameters[end].Name = name; + playable.parameters[end].Value = value; + } + } + + void DeleteParameterValue(UnityEngine.Object obj, string name) + { + var emitter = obj as FMODEventPlayable; + int found = -1; + for (int i = 0; i < emitter.parameters.Length; i++) + { + if (emitter.parameters[i].Name == name) + { + found = i; + } + } + if (found >= 0) + { + int end = emitter.parameters.Length - 1; + emitter.parameters[found] = emitter.parameters[end]; + Array.Resize(ref emitter.parameters, end); + } + } + } +} +#endif \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Editor/Timeline/FMODEventPlayableEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Editor/Timeline/FMODEventPlayableEditor.cs.meta new file mode 100644 index 0000000..25f5415 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Editor/Timeline/FMODEventPlayableEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fa325be8441506c4bb1462c8333ccce9 +timeCreated: 1523230773 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime.meta b/game/Assets/Plugins/FMOD/src/Runtime.meta new file mode 100644 index 0000000..8420a72 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3f04385e97e8cd4ca9ee07de2872ea2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/BankRefAttribute.cs b/game/Assets/Plugins/FMOD/src/Runtime/BankRefAttribute.cs new file mode 100644 index 0000000..d1329b2 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/BankRefAttribute.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace FMODUnity +{ + public class BankRefAttribute : PropertyAttribute + { + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/BankRefAttribute.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/BankRefAttribute.cs.meta new file mode 100644 index 0000000..e31fa65 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/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/game/Assets/Plugins/FMOD/src/Runtime/CodeGeneration.cs b/game/Assets/Plugins/FMOD/src/Runtime/CodeGeneration.cs new file mode 100644 index 0000000..55692bd --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/CodeGeneration.cs @@ -0,0 +1,123 @@ +#if UNITY_EDITOR +using System; +using System.Collections.Generic; +using System.IO; + +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("// This file was generated by FMOD for Unity from the Static Plugins list in the FMOD settings."); + file.WriteLine(); + + file.WriteLine("// These macros control the behaviour of {0}.", Settings.StaticPluginsSupportHeader); + + file.WriteLine("#define FMOD_LINKAGE_STATIC {0}", isFMODStaticallyLinked ? 1 : 0); + +#if UNITY_2020_1_OR_NEWER + file.WriteLine("#define UNITY_2020_1_OR_NEWER 1"); +#else + file.WriteLine("#define UNITY_2020_1_OR_NEWER 0"); +#endif + +#if UNITY_2019_1_OR_NEWER + file.WriteLine("#define UNITY_2019_1_OR_NEWER 1"); +#else + file.WriteLine("#define UNITY_2019_1_OR_NEWER 0"); +#endif + + file.WriteLine(); + file.WriteLine("#include \"{0}\"", Settings.StaticPluginsSupportHeader); + file.WriteLine(); + + // Declare the extern functions + foreach (string pluginFunction in pluginFunctions) + { + file.WriteLine("extern \"C\" FMOD_DSP_DESCRIPTION* DEFAULT_CALL {0}();", pluginFunction); + } + + file.WriteLine(); + + file.WriteLine("extern \"C\" unsigned int DEFAULT_CALL {0}(const char *coreLibraryName, FMOD_SYSTEM *system)", + Platform.RegisterStaticPluginsFunctionName); + file.WriteLine("{"); + file.WriteLine(" InitializeRegisterDSP(coreLibraryName);"); + file.WriteLine(); + file.WriteLine(" unsigned int result = 0;"); + + foreach (string pluginFunction in pluginFunctions) + { + file.WriteLine(" result = sRegisterDSP(system, {0}(), nullptr);", pluginFunction); + file.WriteLine(" if (result != 0)"); + file.WriteLine(" {"); + file.WriteLine(" return result;"); + file.WriteLine(" }"); + file.WriteLine(); + } + + file.WriteLine(" return result;"); + file.WriteLine("}"); + } + + 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/game/Assets/Plugins/FMOD/src/Runtime/CodeGeneration.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/CodeGeneration.cs.meta new file mode 100644 index 0000000..31bb1fd --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/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/game/Assets/Plugins/FMOD/src/Runtime/EventHandler.cs b/game/Assets/Plugins/FMOD/src/Runtime/EventHandler.cs new file mode 100644 index 0000000..6f4f915 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/EventHandler.cs @@ -0,0 +1,93 @@ +using UnityEngine; + +namespace FMODUnity +{ + public abstract class EventHandler : MonoBehaviour + { + public string CollisionTag = ""; + + void OnEnable() + { + HandleGameEvent(EmitterGameEvent.ObjectEnable); + } + + void OnDisable() + { + HandleGameEvent(EmitterGameEvent.ObjectDisable); + } + + void OnTriggerEnter(Collider other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag) || (other.attachedRigidbody && other.attachedRigidbody.CompareTag(CollisionTag))) + { + HandleGameEvent(EmitterGameEvent.TriggerEnter); + } + } + + void OnTriggerExit(Collider other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag) || (other.attachedRigidbody && other.attachedRigidbody.CompareTag(CollisionTag))) + { + HandleGameEvent(EmitterGameEvent.TriggerExit); + } + } + + void OnTriggerEnter2D(Collider2D other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(EmitterGameEvent.TriggerEnter2D); + } + } + + void OnTriggerExit2D(Collider2D other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(EmitterGameEvent.TriggerExit2D); + } + } + + void OnCollisionEnter() + { + HandleGameEvent(EmitterGameEvent.CollisionEnter); + } + + void OnCollisionExit() + { + HandleGameEvent(EmitterGameEvent.CollisionExit); + } + + void OnCollisionEnter2D() + { + HandleGameEvent(EmitterGameEvent.CollisionEnter2D); + } + + void OnCollisionExit2D() + { + HandleGameEvent(EmitterGameEvent.CollisionExit2D); + } + + void OnMouseEnter() + { + HandleGameEvent(EmitterGameEvent.MouseEnter); + } + + void OnMouseExit() + { + HandleGameEvent(EmitterGameEvent.MouseExit); + } + + void OnMouseDown() + { + HandleGameEvent(EmitterGameEvent.MouseDown); + } + + void OnMouseUp() + { + HandleGameEvent(EmitterGameEvent.MouseUp); + } + + protected abstract void HandleGameEvent(EmitterGameEvent gameEvent); + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/EventHandler.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/EventHandler.cs.meta new file mode 100644 index 0000000..5ceb10f --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/EventHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a28d1e1a42561ed4f8d44293dab99079 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/EventRefAttribute.cs b/game/Assets/Plugins/FMOD/src/Runtime/EventRefAttribute.cs new file mode 100644 index 0000000..78d188c --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/EventRefAttribute.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace FMODUnity +{ + public class EventRefAttribute : PropertyAttribute + { + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/EventRefAttribute.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/EventRefAttribute.cs.meta new file mode 100644 index 0000000..69907ee --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/EventRefAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1b29a1189268c3b47aa2ec4b96a9e7ef +timeCreated: 1445311748 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/FMODRuntimeManagerOnGUIHelper.cs b/game/Assets/Plugins/FMOD/src/Runtime/FMODRuntimeManagerOnGUIHelper.cs new file mode 100644 index 0000000..9c5b78a --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/FMODRuntimeManagerOnGUIHelper.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace FMODUnity +{ + public class FMODRuntimeManagerOnGUIHelper : MonoBehaviour + { + public RuntimeManager TargetRuntimeManager = null; + + private void OnGUI() + { + if (TargetRuntimeManager) + { + TargetRuntimeManager.ExecuteOnGUI(); + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/FMODRuntimeManagerOnGUIHelper.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/FMODRuntimeManagerOnGUIHelper.cs.meta new file mode 100644 index 0000000..f2b59e1 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/FMODRuntimeManagerOnGUIHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4417faacebce0de4fbde25ec23055cf4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/ParamRef.cs b/game/Assets/Plugins/FMOD/src/Runtime/ParamRef.cs new file mode 100644 index 0000000..9cc13c7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/ParamRef.cs @@ -0,0 +1,12 @@ +using System; + +namespace FMODUnity +{ + [Serializable] + public class ParamRef + { + public string Name; + public float Value; + public FMOD.Studio.PARAMETER_ID ID; + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/ParamRef.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/ParamRef.cs.meta new file mode 100644 index 0000000..11ab43e --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/ParamRef.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 00e1a9817a5d9844796d7c313b1ab197 +timeCreated: 1444192631 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/ParamRefAttribute.cs b/game/Assets/Plugins/FMOD/src/Runtime/ParamRefAttribute.cs new file mode 100644 index 0000000..2c61397 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/ParamRefAttribute.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace FMODUnity +{ + public class ParamRefAttribute : PropertyAttribute + { + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/ParamRefAttribute.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/ParamRefAttribute.cs.meta new file mode 100644 index 0000000..1704608 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/ParamRefAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ae6224668d1647429723f89e10d593f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Platform.cs b/game/Assets/Plugins/FMOD/src/Runtime/Platform.cs new file mode 100644 index 0000000..12d20db --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Platform.cs @@ -0,0 +1,730 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMOD +{ + public partial class VERSION + { +#if DEVELOPMENT_BUILD + public const string dllSuffix = "L"; +#else + public const string dllSuffix = ""; +#endif + } +} + +namespace FMOD.Studio +{ + public partial class STUDIO_VERSION + { +#if DEVELOPMENT_BUILD + public const string dllSuffix = "L"; +#else + public const string dllSuffix = ""; +#endif + } +} + +namespace FMODUnity +{ + public class PlatformCallbackHandler : ScriptableObject + { + // A hook for custom initialization logic. RuntimeManager.Initialize calls this + // just before calling system.Initialize. + // Call reportResult() with the result of each FMOD call to use FMOD's error handling logic. + public virtual void PreInitialize(FMOD.Studio.System system, Action reportResult) + { + } + } + + // This class holds per-platform settings and provides hooks for platform-specific behaviour. + // Each platform has a parent platform, forming a hierarchy that is rooted at PlatformDefault. + // By default a platform inherits all of its properties from its parent platform; this behaviour + // can be overridden for each property. + // + // There is at least one concrete derived class for each supported platform; these classes use + // [InitializeOnLoad] and a static constructor to register themselves as supported platforms by + // calling Settings.AddPlatformTemplate. The user can also create instances of the PlatformGroup + // class and use them to group platforms that have settings in common. + public abstract class Platform : ScriptableObject, IComparable + { + // This is a persistent identifier. It is used: + // * To link platforms together at load time + // * To avoid creating duplicate platforms from templates (in Settings.OnEnable) + // * As a key for SettingsEditor UI state + // It should be kept stable for concrete platforms (like PlatformWindows) to support + // settings migration in the future. + [SerializeField] + private string identifier; + + public string Identifier + { + get + { + return identifier; + } + + set + { + identifier = value; + } + } + + // The display name to show for this platform in the UI. + public abstract string DisplayName { get; } + + // Declares the Unity RuntimePlatforms and BuildTargets this platform implements. + public abstract void DeclareUnityMappings(Settings settings); + +#if UNITY_EDITOR + // The old FMOD platform identifier that this platform corresponds to, for settings migration. + public abstract Legacy.Platform LegacyIdentifier { get; } +#endif + + public const float DefaultPriority = 0; + + // The priority to use when finding a platform to support the current Unity runtime + // platform (higher priorities are tried first). + public virtual float Priority { get { return DefaultPriority; } } + + // Determines whether this platform matches the current environment. When more than one + // platform implements the current Unity runtime platform, FMOD for Unity will use the + // highest-priority platform that returns true from MatchesCurrentEnvironment. + public virtual bool MatchesCurrentEnvironment { get { return true; } } + + // Whether this platform is a fixed part of the FMOD for Unity settings, or can be + // added/removed by the user. + public virtual bool IsIntrinsic { get { return false; } } + + // A hook for platform-specific initialization logic. RuntimeManager.Initialize calls this + // before calling FMOD.Studio.System.create. + public virtual void PreSystemCreate(Action reportResult) + { + } + + // A hook for platform-specific initialization logic. RuntimeManager.Initialize calls this + // just before calling studioSystem.Initialize. + public virtual void PreInitialize(FMOD.Studio.System studioSystem) + { + } + + // The folder in which FMOD .bank files are stored. Used when loading banks. + public virtual string GetBankFolder() + { + return Application.streamingAssetsPath; + } + +#if UNITY_EDITOR + [Flags] + public enum BinaryType + { + Release = 1, + Logging = 2, + Optional = 4, + AllVariants = 8, + All = Release | Logging | Optional | AllVariants + } + + protected virtual IEnumerable GetBinaryPaths(BuildTarget buildTarget, BinaryType binaryType, string prefix) + { + string assetBasePath = GetBinaryAssetBasePath(); + bool allVariants = (binaryType & BinaryType.AllVariants) == BinaryType.AllVariants; + + if ((binaryType & BinaryType.Release) == BinaryType.Release) + { + foreach (string path in GetRelativeBinaryPaths(buildTarget, allVariants, "")) + { + yield return string.Format("{0}/{1}/{2}", prefix, assetBasePath, path); + } + } + + if ((binaryType & BinaryType.Logging) == BinaryType.Logging) + { + foreach (string path in GetRelativeBinaryPaths(buildTarget, allVariants, "L")) + { + yield return string.Format("{0}/{1}/{2}", prefix, assetBasePath, path); + } + } + + if ((binaryType & BinaryType.Optional) == BinaryType.Optional) + { + foreach (string path in GetRelativeOptionalBinaryPaths(buildTarget, allVariants)) + { + yield return string.Format("{0}/{1}/{2}", prefix, assetBasePath, path); + } + } + } + + // Called by Settings.CanBuildTarget to get the required binaries for the current + // build target and logging state. + public virtual IEnumerable GetBinaryFilePaths(BuildTarget buildTarget, BinaryType binaryType) + { + return GetBinaryPaths(buildTarget, binaryType, Application.dataPath); + } + + // Called by Settings.SelectBinaries to get: + // * The required and optional binaries for the current build target and logging state; + // these get enabled. + // * All binaries; any that weren't enabled in the previous step get disabled. + public virtual IEnumerable GetBinaryAssetPaths(BuildTarget buildTarget, BinaryType binaryType) + { + return GetBinaryPaths(buildTarget, binaryType, "Assets"); + } + + protected virtual string GetBinaryAssetBasePath() + { + return "Plugins/FMOD/lib"; + } + + protected abstract IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix); + + protected virtual IEnumerable GetRelativeOptionalBinaryPaths(BuildTarget buildTarget, bool allVariants) + { + yield break; + } + + public virtual bool IsFMODStaticallyLinked { get { return false; } } + + public virtual bool SupportsAdditionalCPP(BuildTarget target) + { + return true; + } +#endif + + // The base path for FMOD plugins when in a standalone player. + protected virtual string GetPluginBasePath() + { + return string.Format("{0}/Plugins", Application.dataPath); + } + + // The base path for FMOD plugins when in the Unity editor. + protected virtual string GetEditorPluginBasePath() + { + return string.Format("{0}/FMOD/lib", GetPluginBasePath()); + } + + // Returns the full path for an FMOD plugin. + public virtual string GetPluginPath(string pluginName) + { + throw new NotImplementedException(string.Format("Plugins are not implemented on platform {0}", Identifier)); + } + + // Loads static and dynamic FMOD plugins for this platform. + public virtual void LoadPlugins(FMOD.System coreSystem, Action reportResult) + { + LoadDynamicPlugins(coreSystem, reportResult); + LoadStaticPlugins(coreSystem, reportResult); + } + + // Loads dynamic FMOD plugins for this platform. + public virtual void LoadDynamicPlugins(FMOD.System coreSystem, Action reportResult) + { + List pluginNames = Plugins; + + if (pluginNames == null) + { + return; + } + + foreach (string pluginName in pluginNames) + { + if (string.IsNullOrEmpty(pluginName)) + { + continue; + } + + string pluginPath = GetPluginPath(pluginName); + uint handle; + + FMOD.RESULT result = coreSystem.loadPlugin(pluginPath, out handle); + +#if UNITY_64 || UNITY_EDITOR_64 + // Add a "64" suffix and try again + if (result == FMOD.RESULT.ERR_FILE_BAD || result == FMOD.RESULT.ERR_FILE_NOTFOUND) + { + string pluginPath64 = GetPluginPath(pluginName + "64"); + result = coreSystem.loadPlugin(pluginPath64, out handle); + } +#endif + + reportResult(result, string.Format("Loading plugin '{0}' from '{1}'", pluginName, pluginPath)); + } + } + + // Loads static FMOD plugins for this platform. +#if ENABLE_IL2CPP + public virtual void LoadStaticPlugins(FMOD.System coreSystem, Action reportResult) + { + if (StaticPlugins.Count > 0) + { + FMOD.RESULT result = FMOD_Unity_RegisterStaticPlugins(FMOD.VERSION.dll, coreSystem.handle); + reportResult(result, "Registering static plugins"); + } + } + + // This function's name needs to match the contents of RegisterStaticPluginsFunctionName below + [DllImport("__Internal")] + private static extern FMOD.RESULT FMOD_Unity_RegisterStaticPlugins(string coreLibraryName, IntPtr system); +#else + public virtual void LoadStaticPlugins(FMOD.System coreSystem, Action reportResult) + { + if (StaticPlugins.Count > 0) + { + Debug.LogWarningFormat( + "{0} static plugins specified, but static plugins are only supported on the IL2CPP scripting backend", + StaticPlugins.Count); + } + } +#endif + + // This needs to match the DllImport function called by LoadStaticPlugins above + public const string RegisterStaticPluginsFunctionName = "FMOD_Unity_RegisterStaticPlugins"; + + // Ensures that this platform has properties. + public void AffirmProperties() + { + if (!active) + { + Properties = new PropertyStorage(); + InitializeProperties(); + active = true; + } + } + + // Clears this platform's properties. + public void ClearProperties() + { + if (active) + { + Properties = new PropertyStorage(); + active = false; + } + } + + // Initializes this platform's properties to their default values. + public virtual void InitializeProperties() + { + if (!IsIntrinsic) + { + ParentIdentifier = PlatformDefault.ConstIdentifier; + } + } + + // Ensures that this platform's properties are valid after loading from file. + public virtual void EnsurePropertiesAreValid() + { + if (!IsIntrinsic && string.IsNullOrEmpty(ParentIdentifier)) + { + ParentIdentifier = PlatformDefault.ConstIdentifier; + } + } + + [SerializeField] + private string parentIdentifier; + + public string ParentIdentifier + { + get + { + return parentIdentifier; + } + + set + { + parentIdentifier = value; + } + } + + [SerializeField] + private float displaySortOrder; + + public float DisplaySortOrder + { + get + { + return displaySortOrder; + } + + set + { + if (displaySortOrder != value) + { + displaySortOrder = value; + + if (Parent != null) + { + Parent.children.Sort(); + } + } + } + } + + public bool IsLiveUpdateEnabled + { + get + { +#if DEVELOPMENT_BUILD || UNITY_EDITOR + return LiveUpdate != TriStateBool.Disabled; +#else + return LiveUpdate == TriStateBool.Enabled; +#endif + } + } + + public bool IsOverlayEnabled + { + get + { +#if DEVELOPMENT_BUILD || UNITY_EDITOR + return Overlay != TriStateBool.Disabled; +#else + return Overlay == TriStateBool.Enabled; +#endif + } + } + + public int CompareTo(Platform other) + { + if (other == null) + { + return 1; + } + else + { + return DisplaySortOrder.CompareTo(other.DisplaySortOrder); + } + } + + // A property value that can be inherited from the parent or overridden. + public class Property + { + public T Value; + public bool HasValue; + } + + // These stub classes are needed because Unity can't serialize generic classes + [Serializable] + public class PropertyBool : Property + { + } + + [Serializable] + public class PropertyInt : Property + { + } + + [Serializable] + public class PropertySpeakerMode : Property + { + } + + [Serializable] + public class PropertyString : Property + { + } + + [Serializable] + public class PropertyStringList : Property> + { + } + + [Serializable] + public class PropertyCallbackHandler : Property + { + } + + // This class provides access to a specific property on any Platform object; the property to + // operate on is determined by the Getter function. This allows client code to operate on + // platform properties in a generic manner. + public struct PropertyAccessor + { + private readonly Func> Getter; + private readonly T DefaultValue; + + public PropertyAccessor(Func> getter, T defaultValue) + { + Getter = getter; + DefaultValue = defaultValue; + } + + // Determine whether the property has a value in the given platform, or is inherited + // from the parent. + public bool HasValue(Platform platform) + { + return platform.Active && Getter(platform.Properties).HasValue; + } + + // Get the (possibly inherited) value of the property for the given platform. + public T Get(Platform platform) + { + for (Platform current = platform; current != null; current = current.Parent) + { + if (current.Active) + { + Property property = Getter(current.Properties); + + if (property.HasValue) + { + return property.Value; + } + } + } + +#if UNITY_EDITOR + if (platform is PlatformPlayInEditor) + { + return Get(Settings.Instance.CurrentEditorPlatform); + } +#endif + + return DefaultValue; + } + + // Set the value of the property in the given platform, so it is not inherited from the + // platform's parent. + public void Set(Platform platform, T value) + { + Property property = Getter(platform.Properties); + + property.Value = value; + property.HasValue = true; + } + + // Clear the value of the property in the given platform, so it is inherited from the + // platform's parent. + public void Clear(Platform platform) + { + Getter(platform.Properties).HasValue = false; + } + } + + // This class stores all of the inheritable properties for a platform. + [Serializable] + public class PropertyStorage + { + public PropertyBool LiveUpdate = new PropertyBool(); + public PropertyInt LiveUpdatePort = new PropertyInt(); + public PropertyBool Overlay = new PropertyBool(); + public PropertyBool Logging = new PropertyBool(); + public PropertyInt SampleRate = new PropertyInt(); + public PropertyString BuildDirectory = new PropertyString(); + public PropertySpeakerMode SpeakerMode = new PropertySpeakerMode(); + public PropertyInt VirtualChannelCount = new PropertyInt(); + public PropertyInt RealChannelCount = new PropertyInt(); + public PropertyInt DSPBufferLength = new PropertyInt(); + public PropertyInt DSPBufferCount = new PropertyInt(); + public PropertyStringList Plugins = new PropertyStringList(); + public PropertyStringList StaticPlugins = new PropertyStringList(); + public PropertyCallbackHandler CallbackHandler = new PropertyCallbackHandler(); + } + + [SerializeField] + private bool active = false; + + // Whether this platform is active in the settings UI. + public bool Active { get { return active; } } + + // Whether this platform has any properties that are not inherited from the parent. + public bool HasAnyOverriddenProperties + { + get + { + return active && + ( + Properties.LiveUpdate.HasValue + || Properties.LiveUpdatePort.HasValue + || Properties.Overlay.HasValue + || Properties.Logging.HasValue + || Properties.SampleRate.HasValue + || Properties.BuildDirectory.HasValue + || Properties.SpeakerMode.HasValue + || Properties.VirtualChannelCount.HasValue + || Properties.RealChannelCount.HasValue + || Properties.DSPBufferLength.HasValue + || Properties.DSPBufferCount.HasValue + || Properties.Plugins.HasValue + || Properties.StaticPlugins.HasValue + ); + } + } + + [SerializeField] + protected PropertyStorage Properties = new PropertyStorage(); + + // These accessors provide (possibly inherited) property values. + public TriStateBool LiveUpdate { get { return PropertyAccessors.LiveUpdate.Get(this); } } + public int LiveUpdatePort { get { return PropertyAccessors.LiveUpdatePort.Get(this); } } + public TriStateBool Overlay { get { return PropertyAccessors.Overlay.Get(this); } } + public TriStateBool Logging { get { return PropertyAccessors.Logging.Get(this); } } + public int SampleRate { get { return PropertyAccessors.SampleRate.Get(this); } } + public string BuildDirectory { get { return PropertyAccessors.BuildDirectory.Get(this); } } + public FMOD.SPEAKERMODE SpeakerMode { get { return PropertyAccessors.SpeakerMode.Get(this); } } + public int VirtualChannelCount { get { return PropertyAccessors.VirtualChannelCount.Get(this); } } + public int RealChannelCount { get { return PropertyAccessors.RealChannelCount.Get(this); } } + public int DSPBufferLength { get { return PropertyAccessors.DSPBufferLength.Get(this); } } + public int DSPBufferCount { get { return PropertyAccessors.DSPBufferCount.Get(this); } } + public List Plugins { get { return PropertyAccessors.Plugins.Get(this); } } + public List StaticPlugins { get { return PropertyAccessors.StaticPlugins.Get(this); } } + public PlatformCallbackHandler CallbackHandler { get { return PropertyAccessors.CallbackHandler.Get(this); } } + + // These accessors provide full access to properties. + public static class PropertyAccessors + { + public static readonly PropertyAccessor LiveUpdate + = new PropertyAccessor(properties => properties.LiveUpdate, TriStateBool.Disabled); + + public static readonly PropertyAccessor LiveUpdatePort + = new PropertyAccessor(properties => properties.LiveUpdatePort, 9264); + + public static readonly PropertyAccessor Overlay + = new PropertyAccessor(properties => properties.Overlay, TriStateBool.Disabled); + + public static readonly PropertyAccessor Logging + = new PropertyAccessor(properties => properties.Logging, TriStateBool.Disabled); + + public static readonly PropertyAccessor SampleRate + = new PropertyAccessor(properties => properties.SampleRate, 0); + + public static readonly PropertyAccessor BuildDirectory + = new PropertyAccessor(properties => properties.BuildDirectory, "Desktop"); + + public static readonly PropertyAccessor SpeakerMode + = new PropertyAccessor(properties => properties.SpeakerMode, FMOD.SPEAKERMODE.STEREO); + + public static readonly PropertyAccessor VirtualChannelCount + = new PropertyAccessor(properties => properties.VirtualChannelCount, 128); + + public static readonly PropertyAccessor RealChannelCount + = new PropertyAccessor(properties => properties.RealChannelCount, 32); + + public static readonly PropertyAccessor DSPBufferLength + = new PropertyAccessor(properties => properties.DSPBufferLength, 0); + + public static readonly PropertyAccessor DSPBufferCount + = new PropertyAccessor(properties => properties.DSPBufferCount, 0); + + public static readonly PropertyAccessor> Plugins + = new PropertyAccessor>(properties => properties.Plugins, null); + + public static readonly PropertyAccessor> StaticPlugins + = new PropertyAccessor>(properties => properties.StaticPlugins, null); + + public static readonly PropertyAccessor CallbackHandler + = new PropertyAccessor(properties => properties.CallbackHandler, null); + } + + [NonSerialized] + private Platform parent; + + // The parent platform from which this platform inherits its property values. + public Platform Parent + { + get { return parent; } + + set + { + if (value != parent) + { + if (parent != null) + { + parent.children.Remove(this); + } + + parent = value; + + if (parent != null) + { + parent.children.Add(this); + parent.children.Sort(); + } + + ParentIdentifier = (parent != null) ? parent.Identifier : null; + } + } + } + + [NonSerialized] + private readonly List children = new List(); + + // The platforms which inherit their property values from this platform. + public List Children { get { return children; } } + + // Checks whether this platform inherits from the given platform, so we can avoid creating + // inheritance loops. + public bool InheritsFrom(Platform platform) + { + if (platform == this) + { + return true; + } + else if (Parent != null) + { + return Parent.InheritsFrom(platform); + } + else + { + return false; + } + } + + [SerializeField] + public string outputType; + + public FMOD.OUTPUTTYPE GetOutputType() + { + if (Enum.IsDefined(typeof(FMOD.OUTPUTTYPE), outputType)) + { + return (FMOD.OUTPUTTYPE)Enum.Parse(typeof(FMOD.OUTPUTTYPE), outputType); + } + return FMOD.OUTPUTTYPE.AUTODETECT; + } +#if UNITY_EDITOR + public struct OutputType + { + public string displayName; + public FMOD.OUTPUTTYPE outputType; + } + + public abstract OutputType[] ValidOutputTypes { get; } + + public virtual int CoreCount { get { return 0; } } + + public const int MaximumCoreCount = 16; +#endif + + public virtual List DefaultThreadAffinities { get { return StaticThreadAffinities; } } + + private static List StaticThreadAffinities = new List(); + + [Serializable] + public class PropertyThreadAffinityList : Property> + { + } + + [SerializeField] + private PropertyThreadAffinityList threadAffinities = new PropertyThreadAffinityList(); + + public IEnumerable ThreadAffinities + { + get + { + if (threadAffinities.HasValue) + { + return threadAffinities.Value; + } + else + { + return DefaultThreadAffinities; + } + } + } + + public PropertyThreadAffinityList ThreadAffinitiesProperty { get { return threadAffinities; } } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Platform.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/Platform.cs.meta new file mode 100644 index 0000000..d3f401f --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Platform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7df340ba8041134888b271ea2124fcd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformDefault.cs b/game/Assets/Plugins/FMOD/src/Runtime/PlatformDefault.cs new file mode 100644 index 0000000..3a7ee74 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformDefault.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ + public class PlatformDefault : Platform + { + public PlatformDefault() + { + Identifier = ConstIdentifier; + } + + public const string ConstIdentifier = "default"; + + public override string DisplayName { get { return "Default Settings"; } } + public override void DeclareUnityMappings(Settings settings) { } +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.Default; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + yield break; + } +#endif + + public override bool IsIntrinsic { get { return true; } } + + public override void InitializeProperties() + { + base.InitializeProperties(); + + PropertyAccessors.Plugins.Set(this, new List()); + PropertyAccessors.StaticPlugins.Set(this, new List()); + } + + public override void EnsurePropertiesAreValid() + { + base.EnsurePropertiesAreValid(); + + if (StaticPlugins == null) + { + PropertyAccessors.StaticPlugins.Set(this, new List()); + } + } + + // null means no valid output types - don't display the field in the UI +#if UNITY_EDITOR + public override OutputType[] ValidOutputTypes { get { return null; } } +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformDefault.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/PlatformDefault.cs.meta new file mode 100644 index 0000000..e5e09f9 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformDefault.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9587379c972e4a54da1949613f11e1c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformGroup.cs b/game/Assets/Plugins/FMOD/src/Runtime/PlatformGroup.cs new file mode 100644 index 0000000..bcb6b6c --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformGroup.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ + public class PlatformGroup : Platform + { + [SerializeField] + public string displayName; + + [SerializeField] + private Legacy.Platform legacyIdentifier; + + public override string DisplayName { get { return displayName; } } + public override void DeclareUnityMappings(Settings settings) { } +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return legacyIdentifier; } } + + public static PlatformGroup Create(string displayName, Legacy.Platform legacyIdentifier) + { + PlatformGroup group = CreateInstance(); + group.Identifier = GUID.Generate().ToString(); + group.displayName = displayName; + group.legacyIdentifier = legacyIdentifier; + group.AffirmProperties(); + + return group; + } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + yield break; + } + + public override OutputType[] ValidOutputTypes { get { return null; } } +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformGroup.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/PlatformGroup.cs.meta new file mode 100644 index 0000000..c928a3b --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d049eb0281db9c4abd635ba1c79cb7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileHigh.cs b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileHigh.cs new file mode 100644 index 0000000..8b0d1a5 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileHigh.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ +#if UNITY_EDITOR + [InitializeOnLoad] +#endif + public class PlatformMobileHigh : PlatformMobileLow + { + static PlatformMobileHigh() + { + Settings.AddPlatformTemplate("fd7c55dab0fce234b8c25f6ffca523c1"); + } + + public override string DisplayName { get { return "High-End Mobile"; } } +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.MobileHigh; } } +#endif + + public override float Priority { get { return base.Priority + 1; } } + + public override bool MatchesCurrentEnvironment + { + get + { + if (!Active) + { + return false; + } + +#if UNITY_IOS + switch (UnityEngine.iOS.Device.generation) + { + case UnityEngine.iOS.DeviceGeneration.iPad1Gen: + case UnityEngine.iOS.DeviceGeneration.iPad2Gen: + case UnityEngine.iOS.DeviceGeneration.iPad3Gen: + case UnityEngine.iOS.DeviceGeneration.iPadMini1Gen: + case UnityEngine.iOS.DeviceGeneration.iPhone: + case UnityEngine.iOS.DeviceGeneration.iPhone3G: + case UnityEngine.iOS.DeviceGeneration.iPhone3GS: + case UnityEngine.iOS.DeviceGeneration.iPhone4: + case UnityEngine.iOS.DeviceGeneration.iPhone4S: + return false; + default: + return true; + } +#elif UNITY_ANDROID + if (SystemInfo.processorCount <= 2) + { + return false; + } + else if (SystemInfo.processorCount >= 8) + { + return true; + } + else + { + // check the clock rate on quad core systems + string freqinfo = "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"; + try + { + using (System.IO.TextReader reader = new System.IO.StreamReader(freqinfo)) + { + string line = reader.ReadLine(); + int khz = int.Parse(line) / 1000; + if (khz >= 1600) + { + return true; + } + else + { + return false; + } + } + } + catch + { + return false; + } + } +#else + return false; +#endif + } + } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileHigh.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileHigh.cs.meta new file mode 100644 index 0000000..b486913 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileHigh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93a382382f106584e8f8f62412fee177 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileLow.cs b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileLow.cs new file mode 100644 index 0000000..f1c1abc --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileLow.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ +#if UNITY_EDITOR + [InitializeOnLoad] +#endif + public class PlatformMobileLow : Platform + { + static PlatformMobileLow() + { + Settings.AddPlatformTemplate("c88d16e5272a4e241b0ef0ac2e53b73d"); + } + + public override string DisplayName { get { return "Low-End Mobile"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.IPhonePlayer, this); + settings.DeclareRuntimePlatform(RuntimePlatform.Android, this); + } +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.MobileLow; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + yield break; + } + + public override bool SupportsAdditionalCPP(BuildTarget target) + { + if (target == BuildTarget.iOS) + { + return PlatformIOS.StaticSupportsAdditionalCpp(); + } + else + { + return base.SupportsAdditionalCPP(target); + } + } +#endif + + public override float Priority { get { return DefaultPriority + 1; } } + + public override bool MatchesCurrentEnvironment + { + get + { + return Active; + } + } + +#if UNITY_IOS + public override void LoadPlugins(FMOD.System coreSystem, Action reportResult) + { + PlatformIOS.StaticLoadPlugins(this, coreSystem, reportResult); + } +#elif UNITY_ANDROID + public override string GetBankFolder() + { + return PlatformAndroid.StaticGetBankFolder(); + } + + public override string GetPluginPath(string pluginName) + { + return PlatformAndroid.StaticGetPluginPath(pluginName); + } +#endif + +#if UNITY_EDITOR + public override OutputType[] ValidOutputTypes { get { return null; } } +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileLow.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileLow.cs.meta new file mode 100644 index 0000000..717ce98 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformMobileLow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3abeb1429547a134480f4f2f1efc7e21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformPlayInEditor.cs b/game/Assets/Plugins/FMOD/src/Runtime/PlatformPlayInEditor.cs new file mode 100644 index 0000000..27ef32c --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformPlayInEditor.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +#if UNITY_EDITOR +namespace FMOD +{ + public partial class VERSION + { + public const string dll = "fmodstudioL"; + } +} + +namespace FMOD.Studio +{ + public partial class STUDIO_VERSION + { + public const string dll = "fmodstudioL"; + } +} +#endif + +namespace FMODUnity +{ + public class PlatformPlayInEditor : Platform + { + public PlatformPlayInEditor() + { + Identifier = "playInEditor"; + } + + public override string DisplayName { get { return "Play In Editor Settings"; } } + public override void DeclareUnityMappings(Settings settings) + { + settings.DeclareRuntimePlatform(RuntimePlatform.OSXEditor, this); + settings.DeclareRuntimePlatform(RuntimePlatform.WindowsEditor, this); + settings.DeclareRuntimePlatform(RuntimePlatform.LinuxEditor, this); + } +#if UNITY_EDITOR + public override Legacy.Platform LegacyIdentifier { get { return Legacy.Platform.PlayInEditor; } } + + protected override IEnumerable GetRelativeBinaryPaths(BuildTarget buildTarget, bool allVariants, string suffix) + { + yield break; + } +#endif + + public override bool IsIntrinsic { get { return true; } } + + public override string GetBankFolder() + { + // Use original asset location because streaming asset folder will contain platform specific banks + Settings globalSettings = Settings.Instance; + + string bankFolder = globalSettings.SourceBankPath; + if (globalSettings.HasPlatforms) + { + bankFolder = System.IO.Path.Combine(bankFolder, BuildDirectory); + } + + return bankFolder; + } + +#if UNITY_EDITOR + public override string GetPluginPath(string pluginName) + { +#if UNITY_EDITOR_WIN && UNITY_EDITOR_64 + return string.Format("{0}/win/X86_64/{1}.dll", GetEditorPluginBasePath(), pluginName); +#elif UNITY_EDITOR_WIN + return string.Format("{0}/win/X86/{1}.dll", GetEditorPluginBasePath(), pluginName); +#elif UNITY_EDITOR_OSX + return string.Format("{0}/mac/{1}.bundle", GetEditorPluginBasePath(), pluginName); +#elif UNITY_EDITOR_LINUX && UNITY_EDITOR_64 + return string.Format("{0}/linux/x86_64/lib{1}.so", GetEditorPluginBasePath(), pluginName); +#elif UNITY_EDITOR_LINUX + return string.Format("{0}/linux/x86/lib{1}.so", GetEditorPluginBasePath(), pluginName); +#endif + } +#endif + + public override void LoadStaticPlugins(FMOD.System coreSystem, Action reportResult) + { + // Ignore static plugins when playing in the editor + } + + public override void InitializeProperties() + { + base.InitializeProperties(); + + PropertyAccessors.LiveUpdate.Set(this, TriStateBool.Enabled); + PropertyAccessors.Overlay.Set(this, TriStateBool.Enabled); + PropertyAccessors.SampleRate.Set(this, 48000); + PropertyAccessors.RealChannelCount.Set(this, 256); + PropertyAccessors.VirtualChannelCount.Set(this, 1024); + } +#if UNITY_EDITOR + public override OutputType[] ValidOutputTypes { get { return null; } } +#endif + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/PlatformPlayInEditor.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/PlatformPlayInEditor.cs.meta new file mode 100644 index 0000000..692ee07 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/PlatformPlayInEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 335f0a4b26fb46942858ea029e030d2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/RuntimeManager.cs b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeManager.cs new file mode 100644 index 0000000..1fc936b --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeManager.cs @@ -0,0 +1,1282 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using UnityEngine; + +#if UNITY_ADDRESSABLES_EXIST +using UnityEngine.AddressableAssets; +#endif + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ + [AddComponentMenu("")] + public class RuntimeManager : MonoBehaviour + { + static SystemNotInitializedException initException = null; + static RuntimeManager instance; + + Platform currentPlatform; + + [AOT.MonoPInvokeCallback(typeof(FMOD.DEBUG_CALLBACK))] + static FMOD.RESULT DEBUG_CALLBACK(FMOD.DEBUG_FLAGS flags, IntPtr filePtr, int line, IntPtr funcPtr, IntPtr messagePtr) + { + FMOD.StringWrapper file = new FMOD.StringWrapper(filePtr); + FMOD.StringWrapper func = new FMOD.StringWrapper(funcPtr); + FMOD.StringWrapper message = new FMOD.StringWrapper(messagePtr); + + if (flags == FMOD.DEBUG_FLAGS.ERROR) + { + Debug.LogError(string.Format(("[FMOD] {0} : {1}"), (string)func, (string)message)); + } + else if (flags == FMOD.DEBUG_FLAGS.WARNING) + { + Debug.LogWarning(string.Format(("[FMOD] {0} : {1}"), (string)func, (string)message)); + } + else if (flags == FMOD.DEBUG_FLAGS.LOG) + { + Debug.Log(string.Format(("[FMOD] {0} : {1}"), (string)func, (string)message)); + } + return FMOD.RESULT.OK; + } + + static RuntimeManager Instance + { + get + { + if (initException != null) + { + throw initException; + } + + if (instance == null) + { + FMOD.RESULT initResult = FMOD.RESULT.OK; // Initialize can return an error code if it falls back to NO_SOUND, throw it as a non-cached exception + + // When reloading scripts the static instance pointer will be cleared, find the old manager and clean it up + foreach (RuntimeManager manager in Resources.FindObjectsOfTypeAll()) + { + DestroyImmediate(manager.gameObject); + } + + var gameObject = new GameObject("FMOD.UnityIntegration.RuntimeManager"); + instance = gameObject.AddComponent(); + + if (Application.isPlaying) // This class is used in edit mode by the Timeline auditioning system + { + DontDestroyOnLoad(gameObject); + } + gameObject.hideFlags = HideFlags.HideAndDontSave; + + try + { + #if UNITY_ANDROID && !UNITY_EDITOR + // First, obtain the current activity context + AndroidJavaObject activity = null; + using (var activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) + { + activity = activityClass.GetStatic("currentActivity"); + } + + using (var fmodJava = new AndroidJavaClass("org.fmod.FMOD")) + { + if (fmodJava != null) + { + fmodJava.CallStatic("init", activity); + } + else + { + UnityEngine.Debug.LogWarning("[FMOD] Cannot initialize Java wrapper"); + } + } + #endif + + RuntimeUtils.EnforceLibraryOrder(); + initResult = instance.Initialize(); + } + catch (Exception e) + { + initException = e as SystemNotInitializedException; + if (initException == null) + { + initException = new SystemNotInitializedException(e); + } + throw initException; + } + + if (initResult != FMOD.RESULT.OK) + { + throw new SystemNotInitializedException(initResult, "Output forced to NO SOUND mode"); + } + } + return instance; + } + } + + public static FMOD.Studio.System StudioSystem + { + get { return Instance.studioSystem; } + } + + public static FMOD.System CoreSystem + { + get { return Instance.coreSystem; } + } + + FMOD.Studio.System studioSystem; + FMOD.System coreSystem; + FMOD.DSP mixerHead; + + long cachedStudioSystemHandle; // Persists across script reload for cleanup purposes + + struct LoadedBank + { + public FMOD.Studio.Bank Bank; + public int RefCount; + } + + Dictionary loadedBanks = new Dictionary(); + + // Explicit comparer to avoid issues on platforms that don't support JIT compilation + class GuidComparer : IEqualityComparer + { + bool IEqualityComparer.Equals(Guid x, Guid y) + { + return x.Equals(y); + } + + int IEqualityComparer.GetHashCode(Guid obj) + { + return obj.GetHashCode(); + } + } + Dictionary cachedDescriptions = new Dictionary(new GuidComparer()); + + void CheckInitResult(FMOD.RESULT result, string cause) + { + if (result != FMOD.RESULT.OK) + { + if (studioSystem.isValid()) + { + studioSystem.release(); + studioSystem.clearHandle(); + } + throw new SystemNotInitializedException(result, cause); + } + } + + FMOD.RESULT Initialize() + { + #if UNITY_EDITOR + EditorApplication.playModeStateChanged += HandlePlayModeStateChange; + #endif // UNITY_EDITOR + + FMOD.RESULT result = FMOD.RESULT.OK; + FMOD.RESULT initResult = FMOD.RESULT.OK; + Settings fmodSettings = Settings.Instance; + currentPlatform = fmodSettings.FindCurrentPlatform(); + + int sampleRate = currentPlatform.SampleRate; + int realChannels = Math.Min(currentPlatform.RealChannelCount, 256); + int virtualChannels = currentPlatform.VirtualChannelCount; + uint dspBufferLength = (uint)currentPlatform.DSPBufferLength; + int dspBufferCount = currentPlatform.DSPBufferCount; + FMOD.SPEAKERMODE speakerMode = currentPlatform.SpeakerMode; + FMOD.OUTPUTTYPE outputType = currentPlatform.GetOutputType(); + + FMOD.ADVANCEDSETTINGS advancedSettings = new FMOD.ADVANCEDSETTINGS(); + advancedSettings.randomSeed = (uint)DateTime.UtcNow.Ticks; + #if UNITY_EDITOR || UNITY_STANDALONE + advancedSettings.maxVorbisCodecs = realChannels; + #elif UNITY_XBOXONE + advancedSettings.maxXMACodecs = realChannels; + #elif UNITY_PS4 + advancedSettings.maxAT9Codecs = realChannels; + #else + advancedSettings.maxFADPCMCodecs = realChannels; + #endif + + SetThreadAffinities(currentPlatform); + + currentPlatform.PreSystemCreate(CheckInitResult); + + #if UNITY_EDITOR || DEVELOPMENT_BUILD + result = FMOD.Debug.Initialize(fmodSettings.LoggingLevel, FMOD.DEBUG_MODE.CALLBACK, DEBUG_CALLBACK, null); + if(result == FMOD.RESULT.ERR_UNSUPPORTED) + { + Debug.LogWarning("[FMOD] Unable to initialize debug logging: Logging will be disabled.\nCheck the Import Settings of the FMOD libs to enable the logging library."); + } + else + { + CheckInitResult(result, "FMOD.Debug.Initialize"); + } + #endif + + FMOD.Studio.INITFLAGS studioInitFlags = FMOD.Studio.INITFLAGS.NORMAL | FMOD.Studio.INITFLAGS.DEFERRED_CALLBACKS; + if (currentPlatform.IsLiveUpdateEnabled) + { + studioInitFlags |= FMOD.Studio.INITFLAGS.LIVEUPDATE; + advancedSettings.profilePort = (ushort)currentPlatform.LiveUpdatePort; + } + +retry: + result = FMOD.Studio.System.create(out studioSystem); + CheckInitResult(result, "FMOD.Studio.System.create"); + cachedStudioSystemHandle = (long)studioSystem.handle; + + result = studioSystem.getCoreSystem(out coreSystem); + CheckInitResult(result, "FMOD.Studio.System.getCoreSystem"); + + result = coreSystem.setOutput(outputType); + CheckInitResult(result, "FMOD.System.setOutput"); + + result = coreSystem.setSoftwareChannels(realChannels); + CheckInitResult(result, "FMOD.System.setSoftwareChannels"); + + result = coreSystem.setSoftwareFormat(sampleRate, speakerMode, 0); + CheckInitResult(result, "FMOD.System.setSoftwareFormat"); + + if (dspBufferLength > 0 && dspBufferCount > 0) + { + result = coreSystem.setDSPBufferSize(dspBufferLength, dspBufferCount); + CheckInitResult(result, "FMOD.System.setDSPBufferSize"); + } + + result = coreSystem.setAdvancedSettings(ref advancedSettings); + CheckInitResult(result, "FMOD.System.setAdvancedSettings"); + + if (!string.IsNullOrEmpty(Settings.Instance.EncryptionKey)) + { + FMOD.Studio.ADVANCEDSETTINGS studioAdvancedSettings = new FMOD.Studio.ADVANCEDSETTINGS(); + result = studioSystem.setAdvancedSettings(studioAdvancedSettings, Settings.Instance.EncryptionKey); + CheckInitResult(result, "FMOD.Studio.System.setAdvancedSettings"); + } + + if (Settings.Instance.EnableMemoryTracking) + { + studioInitFlags |= FMOD.Studio.INITFLAGS.MEMORY_TRACKING; + } + + currentPlatform.PreInitialize(studioSystem); + + PlatformCallbackHandler callbackHandler = currentPlatform.CallbackHandler; + + if (callbackHandler != null) + { + callbackHandler.PreInitialize(studioSystem, CheckInitResult); + } + + result = studioSystem.initialize(virtualChannels, studioInitFlags, FMOD.INITFLAGS.NORMAL, IntPtr.Zero); + if (result != FMOD.RESULT.OK && initResult == FMOD.RESULT.OK) + { + initResult = result; // Save this to throw at the end (we'll attempt NO SOUND to shield ourselves from unexpected device failures) + outputType = FMOD.OUTPUTTYPE.NOSOUND; + UnityEngine.Debug.LogErrorFormat("[FMOD] Studio::System::initialize returned {0}, defaulting to no-sound mode.", result.ToString()); + + goto retry; + } + CheckInitResult(result, "Studio::System::initialize"); + + // Test network functionality triggered during System::update + if ((studioInitFlags & FMOD.Studio.INITFLAGS.LIVEUPDATE) != 0) + { + studioSystem.flushCommands(); // Any error will be returned through Studio.System.update + + result = studioSystem.update(); + if (result == FMOD.RESULT.ERR_NET_SOCKET_ERROR) + { + studioInitFlags &= ~FMOD.Studio.INITFLAGS.LIVEUPDATE; + UnityEngine.Debug.LogWarning("[FMOD] Cannot open network port for Live Update (in-use), restarting with Live Update disabled."); + + result = studioSystem.release(); + CheckInitResult(result, "FMOD.Studio.System.Release"); + + goto retry; + } + } + + currentPlatform.LoadPlugins(coreSystem, CheckInitResult); + LoadBanks(fmodSettings); + + #if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR + RegisterSuspendCallback(HandleInterrupt); + #endif + + return initResult; + } + + private static void SetThreadAffinities(Platform platform) + { + foreach (ThreadAffinityGroup group in platform.ThreadAffinities) + { + foreach (ThreadType thread in group.threads) + { + FMOD.THREAD_TYPE fmodThread = RuntimeUtils.ToFMODThreadType(thread); + FMOD.THREAD_AFFINITY fmodAffinity = RuntimeUtils.ToFMODThreadAffinity(group.affinity); + + FMOD.Thread.SetAttributes(fmodThread, fmodAffinity); + } + } + } + + List activeEmitters = new List(); + + class AttachedInstance + { + public FMOD.Studio.EventInstance instance; + public Transform transform; + public Rigidbody rigidBody; + public Rigidbody2D rigidBody2D; + } + + List attachedInstances = new List(128); + + #if UNITY_EDITOR + List eventPositionWarnings = new List(); + #endif + + public static int AddListener(StudioListener listener) + { + // Is the listener already in the list? + for (int i = 0; i < Listeners.Count; i++) + { + if (Listeners[i] != null && listener.gameObject == Listeners[i].gameObject) + { + Debug.LogWarning(string.Format(("[FMOD] Listener has already been added at index {0}."), i)); + return i; + } + } + // If already at the max numListeners + if (numListeners >= FMOD.CONSTANTS.MAX_LISTENERS) + { + Debug.LogWarning(string.Format(("[FMOD] Max number of listeners reached : {0}."), FMOD.CONSTANTS.MAX_LISTENERS)); + //return -1; + } + + // If not already in the list + // The next available spot in the list should be at `numListeners` + if (Listeners.Count <= numListeners) + { + Listeners.Add(listener); + } + else + { + Listeners[numListeners] = listener; + } + // Increment `numListeners` + numListeners++; + // setNumListeners (8 is the most that FMOD supports) + int numListenersClamped = Mathf.Min(numListeners, FMOD.CONSTANTS.MAX_LISTENERS); + StudioSystem.setNumListeners(numListenersClamped); + return numListeners - 1; + } + + public static bool RemoveListener(StudioListener listener) + { + int index = listener.ListenerNumber; + // Remove listener + if (index != -1) + { + Listeners[index] = null; + + // Are there more listeners above the index of the one we are removing? + if (numListeners - 1 > index) + { + // Move any higher index listeners down + for (int i = index; i < Listeners.Count; i++) + { + if (i == Listeners.Count - 1) + { + Listeners[i] = null; + } + else + { + Listeners[i] = Listeners[i + 1]; + if (Listeners[i]) + { + Listeners[i].ListenerNumber = i; + } + } + } + } + // Decriment numListeners + numListeners--; + // Always need at least 1 listener, otherwise "[FMOD] assert : assertion: 'numListeners >= 1 && numListeners <= 8' failed" + int numListenersClamped = Mathf.Min(Mathf.Max(numListeners, 1), FMOD.CONSTANTS.MAX_LISTENERS); + StudioSystem.setNumListeners(numListenersClamped); + // Listener attributes will be updated before the next update, due to the Script Execution Order. + return true; + } + else + { + return false; + } + } + + bool listenerWarningIssued = false; + + void Update() + { + if (studioSystem.isValid()) + { + if (numListeners <= 0 && !listenerWarningIssued) + { + listenerWarningIssued = true; + UnityEngine.Debug.LogWarning("[FMOD] Please add an 'FMOD Studio Listener' component to your a camera in the scene for correct 3D positioning of sounds."); + } + + for (int i = 0; i < activeEmitters.Count; i++) + { + UpdateActiveEmitter(activeEmitters[i]); + } + + for (int i = 0; i < attachedInstances.Count; i++) + { + FMOD.Studio.PLAYBACK_STATE playbackState = FMOD.Studio.PLAYBACK_STATE.STOPPED; + attachedInstances[i].instance.getPlaybackState(out playbackState); + if (!attachedInstances[i].instance.isValid() || + playbackState == FMOD.Studio.PLAYBACK_STATE.STOPPED || + attachedInstances[i].transform == null // destroyed game object + ) + { + attachedInstances.RemoveAt(i); + i--; + continue; + } + + if (attachedInstances[i].rigidBody) + { + attachedInstances[i].instance.set3DAttributes(RuntimeUtils.To3DAttributes(attachedInstances[i].transform, attachedInstances[i].rigidBody)); + } + else + { + attachedInstances[i].instance.set3DAttributes(RuntimeUtils.To3DAttributes(attachedInstances[i].transform, attachedInstances[i].rigidBody2D)); + } + } + + #if UNITY_EDITOR + MuteAllEvents(UnityEditor.EditorUtility.audioMasterMute); + + for (int i = eventPositionWarnings.Count - 1; i >= 0; i--) + { + if (eventPositionWarnings[i].isValid()) + { + FMOD.ATTRIBUTES_3D attribs; + eventPositionWarnings[i].get3DAttributes(out attribs); + if (attribs.position.x == 1e+18F && + attribs.position.y == 1e+18F && + attribs.position.z == 1e+18F) + { + string path; + FMOD.Studio.EventDescription desc; + eventPositionWarnings[i].getDescription(out desc); + desc.getPath(out path); + Debug.LogWarningFormat("[FMOD] Instance of Event {0} has not had EventInstance.set3DAttributes() called on it yet!", path); + } + } + eventPositionWarnings.RemoveAt(i); + } + + isOverlayEnabled = currentPlatform.IsOverlayEnabled; + #endif + + if (isOverlayEnabled) + { + if (!overlayDrawer) + { + overlayDrawer = Instance.gameObject.AddComponent(); + overlayDrawer.TargetRuntimeManager = this; + } + else + { + overlayDrawer.gameObject.SetActive(true); + } + } + else + { + if (overlayDrawer != null && overlayDrawer.gameObject.activeSelf) + { + overlayDrawer.gameObject.SetActive(false); + } + } + + studioSystem.update(); + } + } + + public static void RegisterActiveEmitter(StudioEventEmitter emitter) + { + if (!Instance.activeEmitters.Contains(emitter)) + { + Instance.activeEmitters.Add(emitter); + } + } + + public static void DeregisterActiveEmitter(StudioEventEmitter emitter) + { + Instance.activeEmitters.Remove(emitter); + } + + public static void UpdateActiveEmitter(StudioEventEmitter emitter, bool force = false) + { + // If at least once listener is within the max distance, ensure an event instance is playing + bool playInstance = false; + for (int i = 0; i < Listeners.Count; i++) + { + if (Vector3.Distance(emitter.transform.position, Listeners[i].transform.position) <= emitter.MaxDistance) + { + playInstance = true; + break; + } + } + + if (force || playInstance != emitter.IsPlaying()) + { + if (playInstance) + { + emitter.PlayInstance(); + } + else + { + emitter.StopInstance(); + } + } + } + + public static void AttachInstanceToGameObject(FMOD.Studio.EventInstance instance, Transform transform, Rigidbody rigidBody) + { + AttachedInstance attachedInstance = Instance.attachedInstances.Find(x => x.instance.handle == instance.handle); + if (attachedInstance == null) + { + attachedInstance = new AttachedInstance(); + Instance.attachedInstances.Add(attachedInstance); + } + + instance.set3DAttributes(RuntimeUtils.To3DAttributes(transform, rigidBody)); + attachedInstance.transform = transform; + attachedInstance.instance = instance; + attachedInstance.rigidBody = rigidBody; + } + + public static void AttachInstanceToGameObject(FMOD.Studio.EventInstance instance, Transform transform, Rigidbody2D rigidBody2D) + { + AttachedInstance attachedInstance = Instance.attachedInstances.Find(x => x.instance.handle == instance.handle); + if (attachedInstance == null) + { + attachedInstance = new AttachedInstance(); + Instance.attachedInstances.Add(attachedInstance); + } + + instance.set3DAttributes(RuntimeUtils.To3DAttributes(transform, rigidBody2D)); + attachedInstance.transform = transform; + attachedInstance.instance = instance; + attachedInstance.rigidBody2D = rigidBody2D; + attachedInstance.rigidBody = null; + } + + public static void DetachInstanceFromGameObject(FMOD.Studio.EventInstance instance) + { + var manager = Instance; + for (int i = 0; i < manager.attachedInstances.Count; i++) + { + if (manager.attachedInstances[i].instance.handle == instance.handle) + { + manager.attachedInstances.RemoveAt(i); + return; + } + } + } + + protected bool isOverlayEnabled = false; + FMODRuntimeManagerOnGUIHelper overlayDrawer = null; + Rect windowRect = new Rect(10, 10, 300, 100); + + public void ExecuteOnGUI() + { + if (studioSystem.isValid() && isOverlayEnabled) + { + windowRect = GUI.Window(GetInstanceID(), windowRect, DrawDebugOverlay, "FMOD Studio Debug"); + } + } + + #if !UNITY_EDITOR + private void Start() + { + isOverlayEnabled = currentPlatform.IsOverlayEnabled; + } + #endif + + string lastDebugText; + float lastDebugUpdate = 0; + void DrawDebugOverlay(int windowID) + { + if (lastDebugUpdate + 0.25f < Time.unscaledTime) + { + if (initException != null) + { + lastDebugText = initException.Message; + } + else + { + if (!mixerHead.hasHandle()) + { + FMOD.ChannelGroup master; + coreSystem.getMasterChannelGroup(out master); + master.getDSP(0, out mixerHead); + mixerHead.setMeteringEnabled(false, true); + } + + StringBuilder debug = new StringBuilder(); + + FMOD.Studio.CPU_USAGE cpuUsage; + studioSystem.getCPUUsage(out cpuUsage); + debug.AppendFormat("CPU: dsp = {0:F1}%, studio = {1:F1}%\n", cpuUsage.dspusage, cpuUsage.studiousage); + + int currentAlloc, maxAlloc; + FMOD.Memory.GetStats(out currentAlloc, out maxAlloc); + debug.AppendFormat("MEMORY: cur = {0}MB, max = {1}MB\n", currentAlloc >> 20, maxAlloc >> 20); + + int realchannels, channels; + coreSystem.getChannelsPlaying(out channels, out realchannels); + debug.AppendFormat("CHANNELS: real = {0}, total = {1}\n", realchannels, channels); + + FMOD.DSP_METERING_INFO outputMetering; + mixerHead.getMeteringInfo(IntPtr.Zero, out outputMetering); + float rms = 0; + for (int i = 0; i < outputMetering.numchannels; i++) + { + rms += outputMetering.rmslevel[i] * outputMetering.rmslevel[i]; + } + rms = Mathf.Sqrt(rms / (float)outputMetering.numchannels); + + float db = rms > 0 ? 20.0f * Mathf.Log10(rms * Mathf.Sqrt(2.0f)) : -80.0f; + if (db > 10.0f) db = 10.0f; + + debug.AppendFormat("VOLUME: RMS = {0:f2}db\n", db); + lastDebugText = debug.ToString(); + lastDebugUpdate = Time.unscaledTime; + } + } + + GUI.Label(new Rect(10, 20, 290, 100), lastDebugText); + GUI.DragWindow(); + } + + void OnDestroy() + { + if (!studioSystem.isValid()) + { + studioSystem.handle = (IntPtr)cachedStudioSystemHandle; + } + + if (studioSystem.isValid()) + { + studioSystem.release(); + } + + initException = null; + instance = null; + } + + #if UNITY_EDITOR + public static void Destroy() + { + if (instance) + { + DestroyImmediate(instance.gameObject); + } + } + + void HandlePlayModeStateChange(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingEditMode || state == PlayModeStateChange.EnteredEditMode) + { + Destroy(); + } + } + #endif + + #if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR + [AOT.MonoPInvokeCallback(typeof(Action))] + static void HandleInterrupt(bool began) + { + if (Instance.studioSystem.isValid()) + { + // Strings bank is always loaded + if (Instance.loadedBanks.Count > 1) + PauseAllEvents(began); + + if (began) + { + Instance.coreSystem.mixerSuspend(); + } + else + { + Instance.coreSystem.mixerResume(); + } + } + } + #else + void OnApplicationPause(bool pauseStatus) + { + if (studioSystem.isValid()) + { + PauseAllEvents(pauseStatus); + + if (pauseStatus) + { + coreSystem.mixerSuspend(); + } + else + { + coreSystem.mixerResume(); + } + } + } + #endif + + private void loadedBankRegister(LoadedBank loadedBank, string bankPath, string bankName, bool loadSamples, FMOD.RESULT loadResult) + { + if (loadResult == FMOD.RESULT.OK) + { + loadedBank.RefCount = 1; + + if (loadSamples) + { + loadedBank.Bank.loadSampleData(); + } + + Instance.loadedBanks.Add(bankName, loadedBank); + } + else if (loadResult == FMOD.RESULT.ERR_EVENT_ALREADY_LOADED) + { + // someone loaded this bank directly using the studio API + // TODO: will the null bank handle be an issue + loadedBank.RefCount = 2; + Instance.loadedBanks.Add(bankName, loadedBank); + } + else + { + throw new BankLoadException(bankPath, loadResult); + } + } + +#if UNITY_ANDROID || UNITY_WEBGL + IEnumerator loadFromWeb(string bankPath, string bankName, bool loadSamples) + { + byte[] loadWebResult; + FMOD.RESULT loadResult; + + UnityEngine.Networking.UnityWebRequest www = UnityEngine.Networking.UnityWebRequest.Get(bankPath); + yield return www.SendWebRequest(); + loadWebResult = www.downloadHandler.data; + + LoadedBank loadedBank = new LoadedBank(); + loadResult = Instance.studioSystem.loadBankMemory(loadWebResult, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out loadedBank.Bank); + if (loadResult != FMOD.RESULT.OK) + { + UnityEngine.Debug.LogWarningFormat("[FMOD] loadFromWeb. Path = {0}, result = {1}.", bankPath, loadResult); + } + loadedBankRegister(loadedBank, bankPath, bankName, loadSamples, loadResult); + + Debug.LogFormat("[FMOD] Finished loading {0}", bankPath); + } +#endif // UNITY_ANDROID || UNITY_WEBGL + + public static void LoadBank(string bankName, bool loadSamples = false) + { + if (Instance.loadedBanks.ContainsKey(bankName)) + { + LoadedBank loadedBank = Instance.loadedBanks[bankName]; + loadedBank.RefCount++; + + if (loadSamples) + { + loadedBank.Bank.loadSampleData(); + } + Instance.loadedBanks[bankName] = loadedBank; + } + else + { + string bankFolder = Instance.currentPlatform.GetBankFolder(); + +#if !UNITY_EDITOR + if (!string.IsNullOrEmpty(Settings.Instance.TargetSubFolder)) + { + bankFolder = Path.Combine(bankFolder, Settings.Instance.TargetSubFolder); + } +#endif + + const string BankExtension = ".bank"; + + string bankPath; + + if (System.IO.Path.GetExtension(bankName) != BankExtension) + { + bankPath = string.Format("{0}/{1}{2}", bankFolder, bankName, BankExtension); + } + else + { + bankPath = string.Format("{0}/{1}", bankFolder, bankName); + } + + #if UNITY_ANDROID && !UNITY_EDITOR + if (Settings.Instance.AndroidUseOBB) + { + #if UNITY_2018_1_OR_NEWER + Instance.StartCoroutine(Instance.loadFromWeb(bankPath, bankName, loadSamples)); + #else + using (var www = new WWW(bankPath)) + { + while (!www.isDone) { } + if (!String.IsNullOrEmpty(www.error)) + { + throw new BankLoadException(bankPath, www.error); + } + else + { + LoadedBank loadedBank = new LoadedBank(); + FMOD.RESULT loadResult = Instance.studioSystem.loadBankMemory(www.bytes, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out loadedBank.Bank); + Instance.loadedBankRegister(loadedBank, bankPath, bankName, loadSamples, loadResult); + } + } + #endif + } + else + #elif UNITY_WEBGL && !UNITY_EDITOR + if (true) + { + Instance.StartCoroutine(Instance.loadFromWeb(bankPath, bankName, loadSamples)); + } + else + #endif // (UNITY_ANDROID || UNITY_WEBGL) && !UNITY_EDITOR + { + LoadedBank loadedBank = new LoadedBank(); + FMOD.RESULT loadResult = Instance.studioSystem.loadBankFile(bankPath, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out loadedBank.Bank); + Instance.loadedBankRegister(loadedBank, bankPath, bankName, loadSamples, loadResult); + } + } + } + + public static void LoadBank(TextAsset asset, bool loadSamples = false) + { + string bankName = asset.name; + if (Instance.loadedBanks.ContainsKey(bankName)) + { + LoadedBank loadedBank = Instance.loadedBanks[bankName]; + loadedBank.RefCount++; + + if (loadSamples) + { + loadedBank.Bank.loadSampleData(); + } + } + else + { + LoadedBank loadedBank = new LoadedBank(); + FMOD.RESULT loadResult = Instance.studioSystem.loadBankMemory(asset.bytes, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out loadedBank.Bank); + + if (loadResult == FMOD.RESULT.OK) + { + loadedBank.RefCount = 1; + Instance.loadedBanks.Add(bankName, loadedBank); + + if (loadSamples) + { + loadedBank.Bank.loadSampleData(); + } + } + else if (loadResult == FMOD.RESULT.ERR_EVENT_ALREADY_LOADED) + { + // someone loaded this bank directly using the studio API + // TODO: will the null bank handle be an issue + loadedBank.RefCount = 2; + Instance.loadedBanks.Add(bankName, loadedBank); + } + else + { + throw new BankLoadException(bankName, loadResult); + } + } + } + + #if UNITY_ADDRESSABLES_EXIST + public static void LoadBank(AssetReference assetReference, bool loadSamples = false, System.Action completionCallback = null) + { + if (loadSamples || completionCallback != null) + { + assetReference.LoadAssetAsync().Completed += (result) => + { + Asset_Completed(result, loadSamples); + + if (completionCallback != null) + { + completionCallback(); + } + }; + } + else + { + assetReference.LoadAssetAsync().Completed += Asset_Completed; + } + } + + private static void Asset_Completed(UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle obj) + { + Asset_Completed(obj, false); + } + + private static void Asset_Completed(UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle obj, bool loadSamples) + { + if (!obj.IsValid()) + { + Debug.LogError("[FMOD] Unable to load AssetReference: " + obj.OperationException); + return; + } + + TextAsset bank = obj.Result; + LoadBank(bank, loadSamples); + } + #endif + + private void LoadBanks(Settings fmodSettings) + { + if (fmodSettings.ImportType == ImportType.StreamingAssets) + { + // Always load strings bank + try + { + switch (fmodSettings.BankLoadType) + { + case BankLoadType.All: + foreach (string masterBankFileName in fmodSettings.MasterBanks) + { + LoadBank(masterBankFileName + ".strings", fmodSettings.AutomaticSampleLoading); + LoadBank(masterBankFileName, fmodSettings.AutomaticSampleLoading); + } + + foreach (var bank in fmodSettings.Banks) + { + LoadBank(bank, fmodSettings.AutomaticSampleLoading); + } + + WaitForAllLoads(); + break; + case BankLoadType.Specified: + foreach (var bank in fmodSettings.BanksToLoad) + { + if (!string.IsNullOrEmpty(bank)) + { + LoadBank(bank, fmodSettings.AutomaticSampleLoading); + } + } + + WaitForAllLoads(); + break; + case BankLoadType.None: + break; + default: + break; + } + } + catch (BankLoadException e) + { + UnityEngine.Debug.LogException(e); + } + } + } + + public static void UnloadBank(string bankName) + { + LoadedBank loadedBank; + if (Instance.loadedBanks.TryGetValue(bankName, out loadedBank)) + { + loadedBank.RefCount--; + if (loadedBank.RefCount == 0) + { + loadedBank.Bank.unload(); + Instance.loadedBanks.Remove(bankName); + return; + } + Instance.loadedBanks[bankName] = loadedBank; + } + } + + public static bool AnyBankLoading() + { + bool loading = false; + foreach (LoadedBank bank in Instance.loadedBanks.Values) + { + FMOD.Studio.LOADING_STATE loadingState; + bank.Bank.getSampleLoadingState(out loadingState); + loading |= (loadingState == FMOD.Studio.LOADING_STATE.LOADING); + } + return loading; + } + + public static void WaitForAllLoads() + { + Instance.studioSystem.flushSampleLoading(); + } + + public static Guid PathToGUID(string path) + { + Guid guid = Guid.Empty; + if (path.StartsWith("{")) + { + FMOD.Studio.Util.parseID(path, out guid); + } + else + { + var result = Instance.studioSystem.lookupID(path, out guid); + if (result == FMOD.RESULT.ERR_EVENT_NOTFOUND) + { + throw new EventNotFoundException(path); + } + } + return guid; + } + + public static FMOD.Studio.EventInstance CreateInstance(string path) + { + try + { + return CreateInstance(PathToGUID(path)); + } + catch(EventNotFoundException) + { + // Switch from exception with GUID to exception with path + throw new EventNotFoundException(path); + } + } + + public static FMOD.Studio.EventInstance CreateInstance(Guid guid) + { + FMOD.Studio.EventDescription eventDesc = GetEventDescription(guid); + FMOD.Studio.EventInstance newInstance; + eventDesc.createInstance(out newInstance); + + #if UNITY_EDITOR + bool is3D = false; + eventDesc.is3D(out is3D); + if (is3D) + { + // Set position to 1e+18F, set3DAttributes should be called by the dev after this. + newInstance.set3DAttributes(RuntimeUtils.To3DAttributes(new Vector3(1e+18F, 1e+18F, 1e+18F))); + instance.eventPositionWarnings.Add(newInstance); + } + #endif + + return newInstance; + } + + public static void PlayOneShot(string path, Vector3 position = new Vector3()) + { + try + { + PlayOneShot(PathToGUID(path), position); + } + catch (EventNotFoundException) + { + Debug.LogWarning("[FMOD] Event not found: " + path); + } + } + + public static void PlayOneShot(Guid guid, Vector3 position = new Vector3()) + { + var instance = CreateInstance(guid); + instance.set3DAttributes(RuntimeUtils.To3DAttributes(position)); + instance.start(); + instance.release(); + } + + public static void PlayOneShotAttached(string path, GameObject gameObject) + { + try + { + PlayOneShotAttached(PathToGUID(path), gameObject); + } + catch (EventNotFoundException) + { + Debug.LogWarning("[FMOD] Event not found: " + path); + } + } + + public static void PlayOneShotAttached(Guid guid, GameObject gameObject) + { + var instance = CreateInstance(guid); + AttachInstanceToGameObject(instance, gameObject.transform, gameObject.GetComponent()); + instance.start(); + instance.release(); + } + + public static FMOD.Studio.EventDescription GetEventDescription(string path) + { + try + { + return GetEventDescription(PathToGUID(path)); + } + catch (EventNotFoundException) + { + throw new EventNotFoundException(path); + } + } + + public static FMOD.Studio.EventDescription GetEventDescription(Guid guid) + { + FMOD.Studio.EventDescription eventDesc; + if (Instance.cachedDescriptions.ContainsKey(guid) && Instance.cachedDescriptions[guid].isValid()) + { + eventDesc = Instance.cachedDescriptions[guid]; + } + else + { + var result = Instance.studioSystem.getEventByID(guid, out eventDesc); + + if (result != FMOD.RESULT.OK) + { + throw new EventNotFoundException(guid); + } + + if (eventDesc.isValid()) + { + Instance.cachedDescriptions[guid] = eventDesc; + } + } + return eventDesc; + } + + public static List Listeners = new List(); + private static int numListeners = 0; + + public static void SetListenerLocation(GameObject gameObject, Rigidbody rigidBody = null, GameObject attenuationObject = null) + { + SetListenerLocation3D(0, gameObject.transform, rigidBody, attenuationObject); + } + + public static void SetListenerLocation(GameObject gameObject, Rigidbody2D rigidBody2D, GameObject attenuationObject = null) + { + SetListenerLocation2D(0, gameObject.transform, rigidBody2D, attenuationObject); + } + + public static void SetListenerLocation(Transform transform, GameObject attenuationObject = null) + { + SetListenerLocation3D(0, transform, null, attenuationObject); + } + + public static void SetListenerLocation(int listenerIndex, GameObject gameObject, Rigidbody rigidBody = null, GameObject attenuationObject = null) + { + SetListenerLocation3D(listenerIndex, gameObject.transform, rigidBody, attenuationObject); + } + + public static void SetListenerLocation(int listenerIndex, GameObject gameObject, Rigidbody2D rigidBody2D, GameObject attenuationObject = null) + { + SetListenerLocation2D(listenerIndex, gameObject.transform, rigidBody2D, attenuationObject); + } + + public static void SetListenerLocation(int listenerIndex, Transform transform, GameObject attenuationObject = null) + { + SetListenerLocation3D(0, transform, null, attenuationObject); + } + + private static void SetListenerLocation3D(int listenerIndex, Transform transform, Rigidbody rigidBody = null, GameObject attenuationObject = null) + { + if (attenuationObject) + { + Instance.studioSystem.setListenerAttributes(0, RuntimeUtils.To3DAttributes(transform, rigidBody), RuntimeUtils.ToFMODVector(attenuationObject.transform.position)); + } + else + { + Instance.studioSystem.setListenerAttributes(0, RuntimeUtils.To3DAttributes(transform, rigidBody)); + } + } + + private static void SetListenerLocation2D(int listenerIndex, Transform transform, Rigidbody2D rigidBody = null, GameObject attenuationObject = null) + { + if (attenuationObject) + { + Instance.studioSystem.setListenerAttributes(0, RuntimeUtils.To3DAttributes(transform, rigidBody), RuntimeUtils.ToFMODVector(attenuationObject.transform.position)); + } + else + { + Instance.studioSystem.setListenerAttributes(0, RuntimeUtils.To3DAttributes(transform, rigidBody)); + } + } + + public static FMOD.Studio.Bus GetBus(string path) + { + FMOD.Studio.Bus bus; + if (StudioSystem.getBus(path, out bus) != FMOD.RESULT.OK) + { + throw new BusNotFoundException(path); + } + return bus; + } + + public static FMOD.Studio.VCA GetVCA(string path) + { + FMOD.Studio.VCA vca; + if (StudioSystem.getVCA(path, out vca) != FMOD.RESULT.OK) + { + throw new VCANotFoundException(path); + } + return vca; + } + + public static void PauseAllEvents(bool paused) + { + if (HasBanksLoaded) + { + FMOD.Studio.Bus masterBus; + if (StudioSystem.getBus("bus:/", out masterBus) == FMOD.RESULT.OK) + { + masterBus.setPaused(paused); + } + } + } + + public static void MuteAllEvents(bool muted) + { + if (HasBanksLoaded) + { + FMOD.Studio.Bus masterBus; + if (StudioSystem.getBus("bus:/", out masterBus) == FMOD.RESULT.OK) + { + masterBus.setMute(muted); + } + } + } + + public static bool IsInitialized + { + get + { + return instance != null && instance.studioSystem.isValid(); + } + } + + public static bool HasBanksLoaded + { + get + { + return Instance.loadedBanks.Count > 1; + } + } + + public static bool HasBankLoaded(string loadedBank) + { + return (Instance.loadedBanks.ContainsKey(loadedBank)); + } + + #if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR + [DllImport("__Internal")] + private static extern void RegisterSuspendCallback(Action func); + #endif + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/RuntimeManager.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeManager.cs.meta new file mode 100644 index 0000000..066d7c6 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5e5fb8ce07f0ce84b9d1852869527ea5 +timeCreated: 1444628977 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 100 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/RuntimeUtils.cs b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeUtils.cs new file mode 100644 index 0000000..81ff568 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeUtils.cs @@ -0,0 +1,371 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ + public class EventNotFoundException : Exception + { + public Guid Guid; + public string Path; + public EventNotFoundException(string path) + : base("[FMOD] Event not found '" + path + "'") + { + Path = path; + } + + public EventNotFoundException(Guid guid) + : base("[FMOD] Event not found " + guid.ToString("b") + "") + { + Guid = guid; + } + } + + public class BusNotFoundException : Exception + { + public string Path; + public BusNotFoundException(string path) + : base("[FMOD] Bus not found '" + path + "'") + { + Path = path; + } + } + + public class VCANotFoundException : Exception + { + public string Path; + public VCANotFoundException(string path) + : base("[FMOD] VCA not found '" + path + "'") + { + Path = path; + } + } + + public class BankLoadException : Exception + { + public string Path; + public FMOD.RESULT Result; + + public BankLoadException(string path, FMOD.RESULT result) + : base(string.Format("[FMOD] Could not load bank '{0}' : {1} : {2}", path, result.ToString(), FMOD.Error.String(result))) + { + Path = path; + Result = result; + } + public BankLoadException(string path, string error) + : base(string.Format("[FMOD] Could not load bank '{0}' : {1}", path, error)) + { + Path = path; + Result = FMOD.RESULT.ERR_INTERNAL; + } + } + + public class SystemNotInitializedException : Exception + { + public FMOD.RESULT Result; + public string Location; + + public SystemNotInitializedException(FMOD.RESULT result, string location) + : base(string.Format("[FMOD] Initialization failed : {2} : {0} : {1}", result.ToString(), FMOD.Error.String(result), location)) + { + Result = result; + Location = location; + } + + public SystemNotInitializedException(Exception inner) + : base("[FMOD] Initialization failed", inner) + { + } + } + + public enum EmitterGameEvent : int + { + None, + ObjectStart, + ObjectDestroy, + TriggerEnter, + TriggerExit, + TriggerEnter2D, + TriggerExit2D, + CollisionEnter, + CollisionExit, + CollisionEnter2D, + CollisionExit2D, + ObjectEnable, + ObjectDisable, + MouseEnter, + MouseExit, + MouseDown, + MouseUp, + } + + public enum LoaderGameEvent : int + { + None, + ObjectStart, + ObjectDestroy, + TriggerEnter, + TriggerExit, + TriggerEnter2D, + TriggerExit2D, + ObjectEnable, + ObjectDisable, + } + + // We use our own enum to avoid serialization issues if FMOD.THREAD_TYPE changes + public enum ThreadType + { + Mixer, + Feeder, + Stream, + File, + Nonblocking, + Record, + Geometry, + Profiler, + Studio_Update, + Studio_Load_Bank, + Studio_Load_Sample, + Convolution_1, + Convolution_2, + } + + // We use our own enum to avoid serialization issues if FMOD.THREAD_AFFINITY changes + [Flags] + public enum ThreadAffinity : uint + { + Any = 0, + Core0 = 1 << 0, + Core1 = 1 << 1, + Core2 = 1 << 2, + Core3 = 1 << 3, + Core4 = 1 << 4, + Core5 = 1 << 5, + Core6 = 1 << 6, + Core7 = 1 << 7, + Core8 = 1 << 8, + Core9 = 1 << 9, + Core10 = 1 << 10, + Core11 = 1 << 11, + Core12 = 1 << 12, + Core13 = 1 << 13, + Core14 = 1 << 14, + Core15 = 1 << 15, + } + + [Serializable] + public class ThreadAffinityGroup + { + public List threads = new List(); + public ThreadAffinity affinity = ThreadAffinity.Any; + + public ThreadAffinityGroup() + { + } + + public ThreadAffinityGroup(ThreadAffinityGroup other) + { + threads = new List(other.threads); + affinity = other.affinity; + } + + public ThreadAffinityGroup(ThreadAffinity affinity, params ThreadType[] threads) + { + this.threads = new List(threads); + this.affinity = affinity; + } + } + + public static class RuntimeUtils + { + public static string GetCommonPlatformPath(string path) + { + if (string.IsNullOrEmpty(path)) + { + return path; + } + + return path.Replace('\\', '/'); + } + + public static FMOD.VECTOR ToFMODVector(this Vector3 vec) + { + FMOD.VECTOR temp; + temp.x = vec.x; + temp.y = vec.y; + temp.z = vec.z; + + return temp; + } + + public static FMOD.ATTRIBUTES_3D To3DAttributes(this Vector3 pos) + { + FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); + attributes.forward = ToFMODVector(Vector3.forward); + attributes.up = ToFMODVector(Vector3.up); + attributes.position = ToFMODVector(pos); + + return attributes; + } + + public static FMOD.ATTRIBUTES_3D To3DAttributes(this Transform transform) + { + FMOD.ATTRIBUTES_3D attributes = new FMOD.ATTRIBUTES_3D(); + attributes.forward = transform.forward.ToFMODVector(); + attributes.up = transform.up.ToFMODVector(); + attributes.position = transform.position.ToFMODVector(); + + return attributes; + } + + public static FMOD.ATTRIBUTES_3D To3DAttributes(Transform transform, Rigidbody rigidbody = null) + { + FMOD.ATTRIBUTES_3D attributes = transform.To3DAttributes(); + + if (rigidbody) + { + attributes.velocity = rigidbody.velocity.ToFMODVector(); + } + + return attributes; + } + + public static FMOD.ATTRIBUTES_3D To3DAttributes(GameObject go, Rigidbody rigidbody = null) + { + FMOD.ATTRIBUTES_3D attributes = go.transform.To3DAttributes(); + + if (rigidbody) + { + attributes.velocity = rigidbody.velocity.ToFMODVector(); + } + + return attributes; + } + + public static FMOD.ATTRIBUTES_3D To3DAttributes(Transform transform, Rigidbody2D rigidbody) + { + FMOD.ATTRIBUTES_3D attributes = transform.To3DAttributes(); + + if (rigidbody) + { + FMOD.VECTOR vel; + vel.x = rigidbody.velocity.x; + vel.y = rigidbody.velocity.y; + vel.z = 0; + attributes.velocity = vel; + } + + return attributes; + } + + public static FMOD.ATTRIBUTES_3D To3DAttributes(GameObject go, Rigidbody2D rigidbody) + { + FMOD.ATTRIBUTES_3D attributes = go.transform.To3DAttributes(); + + if (rigidbody) + { + FMOD.VECTOR vel; + vel.x = rigidbody.velocity.x; + vel.y = rigidbody.velocity.y; + vel.z = 0; + attributes.velocity = vel; + } + + return attributes; + } + + public static FMOD.THREAD_TYPE ToFMODThreadType(ThreadType threadType) + { + switch (threadType) + { + case ThreadType.Mixer: + return FMOD.THREAD_TYPE.MIXER; + case ThreadType.Feeder: + return FMOD.THREAD_TYPE.FEEDER; + case ThreadType.Stream: + return FMOD.THREAD_TYPE.STREAM; + case ThreadType.File: + return FMOD.THREAD_TYPE.FILE; + case ThreadType.Nonblocking: + return FMOD.THREAD_TYPE.NONBLOCKING; + case ThreadType.Record: + return FMOD.THREAD_TYPE.RECORD; + case ThreadType.Geometry: + return FMOD.THREAD_TYPE.GEOMETRY; + case ThreadType.Profiler: + return FMOD.THREAD_TYPE.PROFILER; + case ThreadType.Studio_Update: + return FMOD.THREAD_TYPE.STUDIO_UPDATE; + case ThreadType.Studio_Load_Bank: + return FMOD.THREAD_TYPE.STUDIO_LOAD_BANK; + case ThreadType.Studio_Load_Sample: + return FMOD.THREAD_TYPE.STUDIO_LOAD_SAMPLE; + case ThreadType.Convolution_1: + return FMOD.THREAD_TYPE.CONVOLUTION1; + case ThreadType.Convolution_2: + return FMOD.THREAD_TYPE.CONVOLUTION2; + default: + throw new ArgumentException("Unrecognised thread type '" + threadType.ToString() + "'"); + } + } + + public static string DisplayName(this ThreadType thread) + { + return thread.ToString().Replace('_', ' '); + } + + public static FMOD.THREAD_AFFINITY ToFMODThreadAffinity(ThreadAffinity affinity) + { + FMOD.THREAD_AFFINITY fmodAffinity = FMOD.THREAD_AFFINITY.CORE_ALL; + + SetFMODAffinityBit(affinity, ThreadAffinity.Core0, FMOD.THREAD_AFFINITY.CORE_0, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core1, FMOD.THREAD_AFFINITY.CORE_1, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core2, FMOD.THREAD_AFFINITY.CORE_2, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core3, FMOD.THREAD_AFFINITY.CORE_3, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core4, FMOD.THREAD_AFFINITY.CORE_4, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core5, FMOD.THREAD_AFFINITY.CORE_5, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core6, FMOD.THREAD_AFFINITY.CORE_6, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core7, FMOD.THREAD_AFFINITY.CORE_7, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core8, FMOD.THREAD_AFFINITY.CORE_8, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core9, FMOD.THREAD_AFFINITY.CORE_9, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core10, FMOD.THREAD_AFFINITY.CORE_10, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core11, FMOD.THREAD_AFFINITY.CORE_11, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core12, FMOD.THREAD_AFFINITY.CORE_12, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core13, FMOD.THREAD_AFFINITY.CORE_13, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core14, FMOD.THREAD_AFFINITY.CORE_14, ref fmodAffinity); + SetFMODAffinityBit(affinity, ThreadAffinity.Core15, FMOD.THREAD_AFFINITY.CORE_15, ref fmodAffinity); + + return fmodAffinity; + } + + private static void SetFMODAffinityBit(ThreadAffinity affinity, ThreadAffinity mask, + FMOD.THREAD_AFFINITY fmodMask, ref FMOD.THREAD_AFFINITY fmodAffinity) + { + if ((affinity & mask) != 0) + { + fmodAffinity |= fmodMask; + } + } + + public static void EnforceLibraryOrder() + { + #if UNITY_ANDROID && !UNITY_EDITOR + + AndroidJavaClass jSystem = new AndroidJavaClass("java.lang.System"); + jSystem.CallStatic("loadLibrary", FMOD.VERSION.dll); + jSystem.CallStatic("loadLibrary", FMOD.Studio.STUDIO_VERSION.dll); + + #endif + + // Call a function in fmod.dll to make sure it's loaded before fmodstudio.dll + int temp1, temp2; + FMOD.Memory.GetStats(out temp1, out temp2); + + Guid temp3; + FMOD.Studio.Util.parseID("", out temp3); + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/RuntimeUtils.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeUtils.cs.meta new file mode 100644 index 0000000..95c7587 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/RuntimeUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6e349601408e423499e7b9f75216091d +timeCreated: 1433225261 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Settings.cs b/game/Assets/Plugins/FMOD/src/Runtime/Settings.cs new file mode 100644 index 0000000..2641e92 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Settings.cs @@ -0,0 +1,1448 @@ +using UnityEngine; +using System.Collections.Generic; +using System; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.Build; +#if UNITY_2018_1_OR_NEWER +using UnityEditor.Build.Reporting; +#endif +#endif + +namespace FMODUnity +{ + [Serializable] + public enum ImportType + { + StreamingAssets, + AssetBundle, + } + + [Serializable] + public enum BankLoadType + { + All, + Specified, + None + } + + [Serializable] + public enum MeterChannelOrderingType + { + Standard, + SeparateLFE, + Positional + } + + public enum TriStateBool + { + Disabled, + Enabled, + Development, + } + + // This class stores all of the FMOD for Unity cross-platform settings, as well as a collection + // of Platform objects that hold the platform-specific settings. The Platform objects are stored + // in the same asset as the Settings object using AssetDatabase.AddObjectToAsset. +#if UNITY_EDITOR + [InitializeOnLoad] +#endif + public class Settings : ScriptableObject + { +#if UNITY_EDITOR + [SerializeField] + bool SwitchSettingsMigration = false; +#endif + + const string SettingsAssetName = "FMODStudioSettings"; + + private static Settings instance = null; + private static bool isInitializing = false; + + public static Settings Instance + { + get + { + if (isInitializing) + { + return null; + } + + if (instance == null) + { + isInitializing = true; + instance = Resources.Load(SettingsAssetName) as Settings; + if (instance == null) + { + UnityEngine.Debug.Log("[FMOD] Cannot find integration settings, creating default settings"); + instance = CreateInstance(); + instance.name = "FMOD Studio Integration Settings"; + +#if UNITY_EDITOR + if (!Directory.Exists("Assets/Plugins/FMOD/Resources")) + { + AssetDatabase.CreateFolder("Assets/Plugins/FMOD", "Resources"); + } + AssetDatabase.CreateAsset(instance, "Assets/Plugins/FMOD/Resources/" + SettingsAssetName + ".asset"); + + instance.AddPlatformsToAsset(); +#endif + } + isInitializing = false; + } + return instance; + } + } + +#if UNITY_EDITOR + [MenuItem("FMOD/Edit Settings", priority = 0)] + public static void EditSettings() + { + Selection.activeObject = Instance; +#if UNITY_2018_2_OR_NEWER + EditorApplication.ExecuteMenuItem("Window/General/Inspector"); +#else + EditorApplication.ExecuteMenuItem("Window/Inspector"); +#endif + } +#endif + + [SerializeField] + public bool HasSourceProject = true; + + [SerializeField] + public bool HasPlatforms = true; + + [SerializeField] + private string sourceProjectPath; + + public string SourceProjectPath + { + get + { + return sourceProjectPath; + } + set + { + sourceProjectPath = value; + } + } + + [SerializeField] + private string sourceBankPath; + public string SourceBankPath + { + get + { + return sourceBankPath; + } + set + { + sourceBankPath = value; + } + } + + [SerializeField] + public string SourceBankPathUnformatted; // Kept as to not break existing projects + + [SerializeField] + public bool AutomaticEventLoading; + + [SerializeField] + public BankLoadType BankLoadType; + + [SerializeField] + public bool AutomaticSampleLoading; + + [SerializeField] + public string EncryptionKey; + + [SerializeField] + public ImportType ImportType; + + public string TargetPath + { + get + { + if (ImportType == ImportType.AssetBundle) + { + if (string.IsNullOrEmpty(TargetAssetPath)) + { + return Application.dataPath; + } + else + { + return Application.dataPath + "/" + TargetAssetPath; + } + } + else + { + if (string.IsNullOrEmpty(TargetBankFolder)) + { + return Application.streamingAssetsPath; + } + else + { + return Application.streamingAssetsPath + "/" + TargetBankFolder; + } + } + } + } + public string TargetSubFolder + { + get + { + if (ImportType == ImportType.AssetBundle) + { + return TargetAssetPath; + } + else + { + return TargetBankFolder; + } + } + set + { + if (ImportType == ImportType.AssetBundle) + { + TargetAssetPath = value; ; + } + else + { + TargetBankFolder = value; + } + } + } + + [SerializeField] + public string TargetAssetPath = "FMODBanks"; + + [SerializeField] + public string TargetBankFolder = ""; + + [SerializeField] + public FMOD.DEBUG_FLAGS LoggingLevel = FMOD.DEBUG_FLAGS.WARNING; + + [SerializeField] + public List SpeakerModeSettings; + + [SerializeField] + public List SampleRateSettings; + + [SerializeField] + public List LiveUpdateSettings; + + [SerializeField] + public List OverlaySettings; + + [SerializeField] + public List LoggingSettings; + + [SerializeField] + public List BankDirectorySettings; + + [SerializeField] + public List VirtualChannelSettings; + + [SerializeField] + public List RealChannelSettings; + + [SerializeField] + public List Plugins = new List(); + + [SerializeField] + public List MasterBanks; + + [SerializeField] + public List Banks; + + [SerializeField] + public List BanksToLoad; + + [SerializeField] + public ushort LiveUpdatePort = 9264; + + [SerializeField] + public bool EnableMemoryTracking; + + [SerializeField] + public bool AndroidUseOBB = false; + + [SerializeField] + public MeterChannelOrderingType MeterChannelOrdering; + + [SerializeField] + public bool StopEventsOutsideMaxDistance = false; + + [SerializeField] + public bool BoltUnitOptionsBuildPending = false; + + // This holds all known platforms, but only those that have settings are shown in the UI. + // It is populated at load time from the Platform objects in the settings asset. + private Dictionary Platforms = new Dictionary(); + + public Platform FindPlatform(string identifier) + { + Platform platform; + Platforms.TryGetValue(identifier, out platform); + + return platform; + } + + public void ForEachPlatform(Action action) + { + foreach (Platform platform in Platforms.Values) + { + action(platform); + } + } + +#if UNITY_EDITOR + // This is used to find the platform that implements the current Unity build target. + private Dictionary PlatformForBuildTarget = new Dictionary(); +#endif + + // This is used to find the platform that matches the current Unity runtime platform. + private Dictionary> PlatformForRuntimePlatform = new Dictionary>(); + + // Default platform settings. + [NonSerialized] + private Platform defaultPlatform; + + // Play In Editor platform settings. + [NonSerialized] + private Platform playInEditorPlatform; + + public Platform DefaultPlatform { get { return defaultPlatform; } } + public Platform PlayInEditorPlatform { get { return playInEditorPlatform; } } + +#if UNITY_EDITOR + // Adds a new platform group to the set of platforms. + public void AddPlatformGroup(string displayName) + { + PlatformGroup group = PlatformGroup.Create(displayName, Legacy.Platform.None); + + Platforms.Add(group.Identifier, group); + AssetDatabase.AddObjectToAsset(group, this); + + LinkPlatform(group); + } +#endif + + // Links the platform to its parent, and to the BuildTargets and RuntimePlatforms it implements. + private void LinkPlatform(Platform platform) + { + LinkPlatformToParent(platform); + + platform.DeclareUnityMappings(this); + } + +#if UNITY_EDITOR + public void DeclareBuildTarget(BuildTarget buildTarget, Platform platform) + { + PlatformForBuildTarget.Add(buildTarget, platform); + } +#endif + + public void DeclareRuntimePlatform(RuntimePlatform runtimePlatform, Platform platform) + { + List platforms; + + if (!PlatformForRuntimePlatform.TryGetValue(runtimePlatform, out platforms)) + { + platforms = new List(); + PlatformForRuntimePlatform.Add(runtimePlatform, platforms); + } + + platforms.Add(platform); + + // Highest priority goes first + platforms.Sort((a, b) => b.Priority.CompareTo(a.Priority)); + } + +#if UNITY_EDITOR + private void ClearPlatformSettings() + { + RemovePlatformFromAsset(defaultPlatform); + RemovePlatformFromAsset(playInEditorPlatform); + + ForEachPlatform(RemovePlatformFromAsset); + + foreach (Platform platform in Resources.LoadAll(SettingsAssetName)) + { + RemovePlatformFromAsset(platform); + } + + defaultPlatform = null; + playInEditorPlatform = null; + + Platforms.Clear(); + PlatformForBuildTarget.Clear(); + PlatformForRuntimePlatform.Clear(); + } + + // Testing function: Resets all platform settings. + public void ResetPlatformSettings() + { + ClearPlatformSettings(); + OnEnable(); + } + + // Testing function: Reimports legacy platform settings. + public void ReimportLegacyPlatforms() + { + ClearPlatformSettings(); + MigratedPlatforms.Clear(); + OnEnable(); + } + + // We store a persistent list so we don't try to re-migrate platforms if the user deletes them. + [SerializeField] + private List MigratedPlatforms = new List(); + + private void UpdateMigratedPlatforms() + { + ForEachPlatform(platform => + { + if (!MigratedPlatforms.Contains(platform.LegacyIdentifier)) + { + MigratedPlatforms.Add(platform.LegacyIdentifier); + } + }); + } + + // Adds any missing platforms: + // * From the template collection + // * From the legacy settings + private void AddMissingPlatforms() + { + var newPlatforms = new List(); + + foreach (PlatformTemplate template in platformTemplates) + { + if (!Platforms.ContainsKey(template.Identifier)) + { + newPlatforms.Add(template.CreateInstance()); + } + } + + // Ensure that the default platform exists + if (!defaultPlatform) + { + defaultPlatform = CreateInstance(); + newPlatforms.Add(defaultPlatform); + } + + // Ensure that the Play In Editor platform exists + if (!playInEditorPlatform) + { + playInEditorPlatform = CreateInstance(); + newPlatforms.Add(playInEditorPlatform); + } + + // Ensure that the default and Play In Editor platforms have properties + AffirmPlatformProperties(defaultPlatform); + AffirmPlatformProperties(playInEditorPlatform); + + // Migrate plugins if necessary + var PluginsProperty = Platform.PropertyAccessors.Plugins; + + if (!MigratedPlatforms.Contains(defaultPlatform.LegacyIdentifier)) + { + PluginsProperty.Set(defaultPlatform, Plugins); + } + else if (!PluginsProperty.HasValue(defaultPlatform)) + { + PluginsProperty.Set(defaultPlatform, new List()); + } + + // Migrate LiveUpdatePort + if (!Platform.PropertyAccessors.LiveUpdatePort.HasValue(defaultPlatform)) + { + Platform.PropertyAccessors.LiveUpdatePort.Set(defaultPlatform, LiveUpdatePort); + } + + // Create a map for migrating legacy settings + var platformMap = new Dictionary(); + + foreach (Platform platform in Platforms.Values.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 (MigratedPlatforms.Contains(legacyPlatform)) + { + // Already migrated + return null; + } + + return AffirmPlatform(legacyPlatform); + }; + + var speakerModeSettings = 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(SampleRateSettings, Platform.PropertyAccessors.SampleRate, getMigrationTarget); + MigrateLegacyPlatforms(LiveUpdateSettings, Platform.PropertyAccessors.LiveUpdate, getMigrationTarget); + MigrateLegacyPlatforms(OverlaySettings, Platform.PropertyAccessors.Overlay, getMigrationTarget); + MigrateLegacyPlatforms(BankDirectorySettings, Platform.PropertyAccessors.BuildDirectory, getMigrationTarget); + MigrateLegacyPlatforms(VirtualChannelSettings, Platform.PropertyAccessors.VirtualChannelCount, getMigrationTarget); + MigrateLegacyPlatforms(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 (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) + { + Platforms.Add(platform.Identifier, platform); + } + + UpdateMigratedPlatforms(); + } + + 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); + } + } + } +#endif + + // Links the given platform to its parent, if it has one. + private void LinkPlatformToParent(Platform platform) + { + if (!string.IsNullOrEmpty(platform.ParentIdentifier)) + { + platform.Parent = FindPlatform(platform.ParentIdentifier); + } + } + +#if UNITY_EDITOR + // The platform that implements the current Unity build target. + public Platform CurrentEditorPlatform + { + get + { + if (PlatformForBuildTarget.ContainsKey(EditorUserBuildSettings.activeBuildTarget)) + { + return PlatformForBuildTarget[EditorUserBuildSettings.activeBuildTarget]; + } + else + { + return defaultPlatform; + } + } + } +#endif + + // The highest-priority platform that matches the current environment. + public Platform FindCurrentPlatform() + { + List platforms; + + if (PlatformForRuntimePlatform.TryGetValue(Application.platform, out platforms)) + { + foreach (Platform platform in platforms) + { + if (platform.MatchesCurrentEnvironment) + { + return platform; + } + } + } + + return defaultPlatform; + } + + public FMOD.SPEAKERMODE GetEditorSpeakerMode() + { + return playInEditorPlatform.SpeakerMode; + } + + private Settings() + { + MasterBanks = new List(); + Banks = new List(); + BanksToLoad = new List(); + RealChannelSettings = new List(); + VirtualChannelSettings = new List(); + LoggingSettings = new List(); + LiveUpdateSettings = new List(); + OverlaySettings = new List(); + SampleRateSettings = new List(); + SpeakerModeSettings = new List(); + BankDirectorySettings = new List(); + + ImportType = ImportType.StreamingAssets; + AutomaticEventLoading = true; + AutomaticSampleLoading = false; + EnableMemoryTracking = false; + } + + // Adds properties to a platform, thus revealing it in the UI. + public void AddPlatformProperties(Platform platform) + { + platform.AffirmProperties(); + LinkPlatformToParent(platform); + } + +#if UNITY_EDITOR + // Removes a platform from the inheritance hierarchy and clears its properties, thus hiding + // it in the UI. Also destroys the platform if it is a group. + public void RemovePlatformProperties(Platform platform) + { + while (platform.Children.Count > 0) + { + platform.Children[platform.Children.Count - 1].Parent = platform.Parent; + } + + if (platform is PlatformGroup) + { + PlatformGroup group = platform as PlatformGroup; + + group.Parent = null; + Platforms.Remove(group.Identifier); + DestroyImmediate(group, true); + } + else + { + platform.ClearProperties(); + platform.Parent = defaultPlatform; + } + } + + // Ensures that the given platform has valid properties. + private void AffirmPlatformProperties(Platform platform) + { + if (!platform.Active) + { + Debug.LogFormat("[FMOD] Cannot find properties for platform {0}, creating default properties", platform.Identifier); + AddPlatformProperties(platform); + } + } +#endif + + // A template for constructing a platform from an identifier. + private struct PlatformTemplate + { + public string Identifier; + public Func CreateInstance; + }; + + // A collection of templates for constructing known platforms. + private static List platformTemplates = new List(); + + // Adds a platform to the collection of templates. Platforms register themselves by using + // [InitializeOnLoad] and calling this function from a static constructor. + public static void AddPlatformTemplate(string identifier) where T : Platform + { + platformTemplates.Add(new PlatformTemplate() { + Identifier = identifier, + CreateInstance = () => CreatePlatformInstance(identifier) + }); + } + + private static Platform CreatePlatformInstance(string identifier) where T : Platform + { + Platform platform = CreateInstance(); + platform.InitializeProperties(); + platform.Identifier = identifier; + + return platform; + } + + private void OnEnable() + { + PopulatePlatformsFromAsset(); + + defaultPlatform = Platforms.Values.FirstOrDefault(platform => platform is PlatformDefault); + playInEditorPlatform = Platforms.Values.FirstOrDefault(platform => platform is PlatformPlayInEditor); + +#if UNITY_EDITOR + if (SwitchSettingsMigration == false) + { + // Create Switch settings from the legacy Mobile settings, if they exist + Legacy.CopySetting(LoggingSettings, Legacy.Platform.Mobile, Legacy.Platform.Switch); + Legacy.CopySetting(LiveUpdateSettings, Legacy.Platform.Mobile, Legacy.Platform.Switch); + Legacy.CopySetting(OverlaySettings, Legacy.Platform.Mobile, Legacy.Platform.Switch); + + Legacy.CopySetting(RealChannelSettings, Legacy.Platform.Mobile, Legacy.Platform.Switch); + Legacy.CopySetting(VirtualChannelSettings, Legacy.Platform.Mobile, Legacy.Platform.Switch); + Legacy.CopySetting(SampleRateSettings, Legacy.Platform.Mobile, Legacy.Platform.Switch); + Legacy.CopySetting(SpeakerModeSettings, Legacy.Platform.Mobile, Legacy.Platform.Switch); + SwitchSettingsMigration = true; + } + + // Fix up slashes for old settings meta data. + sourceProjectPath = RuntimeUtils.GetCommonPlatformPath(sourceProjectPath); + SourceBankPathUnformatted = RuntimeUtils.GetCommonPlatformPath(SourceBankPathUnformatted); + + // Remove the FMODStudioCache if in the old location + string oldCache = "Assets/Plugins/FMOD/Resources/FMODStudioCache.asset"; + if (File.Exists(oldCache)) + { + AssetDatabase.DeleteAsset(oldCache); + } + + AddMissingPlatforms(); + + // Add all known platforms to the settings asset. We can only do this if the Settings + // object is already in the asset database, which won't be the case if we're inside the + // CreateInstance call in the Instance accessor above. + if (AssetDatabase.Contains(this)) + { + AddPlatformsToAsset(); + } +#endif + + // Link all known platforms + ForEachPlatform(LinkPlatform); + } + + private void PopulatePlatformsFromAsset() + { +#if UNITY_EDITOR + string assetPath = AssetDatabase.GetAssetPath(this); + UnityEngine.Object[] assets = AssetDatabase.LoadAllAssetsAtPath(assetPath); + Platform[] assetPlatforms = assets.OfType().ToArray(); +#else + Platform[] assetPlatforms = Resources.LoadAll(SettingsAssetName); +#endif + + foreach (Platform newPlatform in assetPlatforms) + { + Platform existingPlatform = FindPlatform(newPlatform.Identifier); + + if (existingPlatform != null) + { + // Duplicate platform; clean one of them up + Platform platformToDestroy; + + if (newPlatform.Active && !existingPlatform.Active) + { + Platforms.Remove(existingPlatform.Identifier); + + platformToDestroy = existingPlatform; + existingPlatform = null; + } + else + { + platformToDestroy = newPlatform; + } + + Debug.LogWarningFormat("FMOD: Cleaning up duplicate platform: ID = {0}, name = '{1}', type = {2}", + platformToDestroy.Identifier, platformToDestroy.DisplayName, platformToDestroy.GetType().Name); + + DestroyImmediate(platformToDestroy, true); + } + + if (existingPlatform == null) + { + newPlatform.EnsurePropertiesAreValid(); + Platforms.Add(newPlatform.Identifier, newPlatform); + } + } + +#if UNITY_EDITOR + UpdateMigratedPlatforms(); +#endif + } + +#if UNITY_EDITOR + // Adds all platforms to the settings asset, so they get stored in the same file as the main + // Settings object. + private void AddPlatformsToAsset() + { + ForEachPlatform(AddPlatformToAsset); + } + + private void AddPlatformToAsset(Platform platform) + { + if (!AssetDatabase.Contains(platform)) + { + AssetDatabase.AddObjectToAsset(platform, this); + } + } + + private void RemovePlatformFromAsset(Platform platform) + { + if (AssetDatabase.Contains(platform)) + { + DestroyImmediate(platform, true); + } + } + + private bool CanBuildTarget(BuildTarget target, Platform.BinaryType binaryType, out string error) + { + const string DownloadURL = "https://www.fmod.com/download"; + + Platform platform; + + if (!PlatformForBuildTarget.TryGetValue(target, out platform)) + { + error = string.Format("No FMOD platform found for build target {0}.\n" + + "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" + + "You may need to reinstall the relevant integration package from {2}.\n", + summary, string.Join("\n", missingPaths), DownloadURL); + return false; + } + + error = null; + return true; + } + + public const string StaticPluginsSupportHeader = "fmod_static_plugin_support.h"; + public const string RegisterStaticPluginsFile = "fmod_register_static_plugins.cpp"; + public const string RegisterStaticPluginsAssetRelativePath = "/Plugins/FMOD/Cache/" + RegisterStaticPluginsFile; + public const string RegisterStaticPluginsAssetFullPath = "Assets" + RegisterStaticPluginsAssetRelativePath; + + public static string RegisterStaticPluginsTempFilePath + { + get + { + return Application.dataPath + "/../Temp/" + RegisterStaticPluginsFile; + } + } + + + private void PreprocessBuild(BuildTarget target, Platform.BinaryType binaryType) + { + Platform platform = PlatformForBuildTarget[target]; + + PreprocessStaticPlugins(platform, target); +#if UNITY_2018_1_OR_NEWER + SelectBinaries(platform, target, binaryType); +#endif + } + + private static void PreprocessStaticPlugins(Platform platform, BuildTarget target) + { + BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(target); + ScriptingImplementation scriptingBackend = PlayerSettings.GetScriptingBackend(buildTargetGroup); + + if (scriptingBackend == ScriptingImplementation.IL2CPP) + { + Action reportError = message => { + Debug.LogWarningFormat("FMOD: Error processing static plugins for platform {0}: {1}", + platform.DisplayName, message); + }; + + if (platform.SupportsAdditionalCPP(target)) + { + // Ensure we don't have leftover temporary files in the Assets directory. + CleanTemporaryFiles(); + + // Generate code to a file outside the Assets directory and use IL2CPP arguments + // to include it in the build. + Debug.LogFormat("FMOD: Generating static plugin registration code in {0}", RegisterStaticPluginsTempFilePath); + CodeGeneration.GenerateStaticPluginRegistration(RegisterStaticPluginsTempFilePath, platform, reportError); + UpdateIl2CppArgs(); + } + else + { + // Generate code to a file within the Assets directory and import it so it's + // automatically included in the build. + Debug.LogFormat("FMOD: Generating static plugin registration code in {0}", RegisterStaticPluginsAssetFullPath); + string filePath = Application.dataPath + RegisterStaticPluginsAssetRelativePath; + CodeGeneration.GenerateStaticPluginRegistration(filePath, platform, reportError); + AssetDatabase.ImportAsset(RegisterStaticPluginsAssetFullPath); + } + } + else if (platform.StaticPlugins.Count > 0) + { + Debug.LogWarningFormat( + "FMOD: Platform {0} has {1} static plugins specified, " + + "but static plugins are only supported on the IL2CPP scripting backend", + platform.DisplayName, platform.StaticPlugins.Count); + } + } + +#if UNITY_2018_1_OR_NEWER + 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); + + HashSet enabledPaths = new HashSet(); + + foreach (string path in platform.GetBinaryAssetPaths(target, binaryType | Platform.BinaryType.Optional)) + { + AssetImporter importer = AssetImporter.GetAtPath(path); + + if (importer != null) + { + (importer as PluginImporter).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)) + { + AssetImporter importer = AssetImporter.GetAtPath(path); + + if (importer != null) + { + (importer as PluginImporter).SetCompatibleWithPlatform(target, false); + + message += string.Format("\n- Disabled {0}", path); + } + } + } + + Debug.Log(message); + } +#endif + + private const string Il2CppCommand_AdditionalCpp = "--additional-cpp"; + + private static void UpdateIl2CppArgs() + { + string[] filePaths = { + RegisterStaticPluginsTempFilePath, + Application.dataPath + "/Plugins/FMOD/src/Runtime/" + StaticPluginsSupportHeader, + }; + + string arguments = PlayerSettings.GetAdditionalIl2CppArgs(); + string newArguments = arguments; + + foreach (string path in filePaths) + { + // Match on basename only in case the temp file location has moved + string basename = Path.GetFileName(path); + Regex regex = new Regex(Il2CppCommand_AdditionalCpp + "=\"([^\"]*" + basename + ")\""); + + bool pathFound = false; + + for (int startIndex = 0; startIndex < newArguments.Length; ) + { + Match match = regex.Match(newArguments, startIndex); + + if (!match.Success) + { + break; + } + + int matchEnd = match.Index + match.Length; + + if (!pathFound && match.Groups[1].Value == path) + { + pathFound = true; + startIndex = matchEnd; + } + else + { + Debug.LogFormat("FMOD: Removing Il2CPP argument '{0}'", match.Value); + + int matchStart = match.Index; + + // Consume an adjacent space if there is one + if (matchStart > 0 && newArguments[matchStart - 1] == ' ') + { + --matchStart; + } + else if (matchEnd < newArguments.Length && newArguments[matchEnd] == ' ') + { + ++matchEnd; + } + + newArguments = newArguments.Substring(0, matchStart) + newArguments.Substring(matchEnd); + startIndex = matchStart; + } + } + + if (!pathFound) + { + string newArgument = string.Format("{0}=\"{1}\"", Il2CppCommand_AdditionalCpp, path); + + Debug.LogFormat("FMOD: Adding Il2CPP argument '{0}'", newArgument); + + if (string.IsNullOrEmpty(newArguments)) + { + newArguments = newArgument; + } + else + { + newArguments += " " + newArgument; + } + } + } + + if (newArguments != arguments) + { + PlayerSettings.SetAdditionalIl2CppArgs(newArguments); + } + } + + [InitializeOnLoadMethod] + private static void CleanTemporaryFiles() + { + if (EditorApplication.isPlayingOrWillChangePlaymode) + { + // Messing with the asset database while entering play mode causes a NullReferenceException + return; + } + + if (AssetDatabase.DeleteAsset(RegisterStaticPluginsAssetFullPath)) + { + Debug.LogFormat("FMOD: Removed temporary file {0}", RegisterStaticPluginsAssetFullPath); + } + } + +#if UNITY_2018_1_OR_NEWER + 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) + { + binaryType = Platform.BinaryType.Logging; + } + else + { + binaryType = Platform.BinaryType.Release; + } + + string error; + if (!Settings.Instance.CanBuildTarget(report.summary.platform, binaryType, out error)) + { + throw new BuildFailedException(error); + } + + Settings.Instance.PreprocessBuild(report.summary.platform, binaryType); + } + + public void OnPostprocessBuild(BuildReport report) + { + Settings.CleanTemporaryFiles(); + } + } +#else + public class BuildProcessor : IPreprocessBuild, IPostprocessBuild + { + public int callbackOrder { get { return 0; } } + + public void OnPreprocessBuild(BuildTarget target, string path) + { + Platform.BinaryType binaryType = Platform.BinaryType.Release | Platform.BinaryType.Logging; + + string error; + if (!Settings.Instance.CanBuildTarget(target, binaryType, out error)) + { + throw new BuildFailedException(error); + } + + Settings.Instance.PreprocessBuild(target, binaryType); + } + + public void OnPostprocessBuild(BuildTarget target, string path) + { + Settings.CleanTemporaryFiles(); + } + } +#endif + + public class BuildTargetChecker : IActiveBuildTargetChanged + { + public int callbackOrder { get { return 0; } } + + public void OnActiveBuildTargetChanged(BuildTarget previous, BuildTarget current) + { + Platform.BinaryType binaryType = EditorUserBuildSettings.development + ? Platform.BinaryType.Logging + : Platform.BinaryType.Release; + + string error; + if (!Settings.Instance.CanBuildTarget(current, binaryType, out error)) + { + Debug.LogWarning(error); + +#if UNITY_2019_3_OR_NEWER + if (EditorWindow.HasOpenInstances()) + { + GUIContent message = + new GUIContent("FMOD detected issues with this platform!\nSee the Console for details."); + EditorWindow.GetWindow().ShowNotification(message, 10); + } +#endif + } + } + } +#endif + } + + // This class stores data types and code used for migrating old settings. + public static class Legacy + { + [Serializable] + public enum Platform + { + None, + PlayInEditor, + Default, + Desktop, + Mobile, + MobileHigh, + MobileLow, + Console, + Windows, + Mac, + Linux, + iOS, + Android, + Deprecated_1, + XboxOne, + PS4, + Deprecated_2, + Deprecated_3, + AppleTV, + UWP, + Switch, + WebGL, + Stadia, + Reserved_1, + Reserved_2, + Reserved_3, + Count, + } + + public class PlatformSettingBase + { + public Platform Platform; + } + + public class PlatformSetting : PlatformSettingBase + { + public T Value; + } + + [Serializable] + public class PlatformIntSetting : PlatformSetting + { + } + + [Serializable] + public class PlatformStringSetting : PlatformSetting + { + } + + [Serializable] + public class PlatformBoolSetting : PlatformSetting + { + } + + // Copies a setting from one platform to another. + public static void CopySetting(List list, Platform fromPlatform, Platform toPlatform) + where T : PlatformSetting, new() + { + T fromSetting = list.Find((x) => x.Platform == fromPlatform); + T toSetting = list.Find((x) => x.Platform == toPlatform); + + if (fromSetting != null) + { + if (toSetting == null) + { + toSetting = new T() { Platform = toPlatform }; + list.Add(toSetting); + } + + toSetting.Value = fromSetting.Value; + } + else if (toSetting != null) + { + list.Remove(toSetting); + } + } + + public static void CopySetting(List list, Platform fromPlatform, Platform toPlatform) + { + CopySetting(list, fromPlatform, toPlatform); + } + + public static void CopySetting(List list, Platform fromPlatform, Platform toPlatform) + { + CopySetting(list, fromPlatform, toPlatform); + } + + // Returns the UI display name for the given platform. + public static string DisplayName(Platform platform) + { + switch (platform) + { + case Platform.Linux: + return "Linux"; + case Platform.Desktop: + return "Desktop"; + case Platform.Console: + return "Console"; + case Platform.iOS: + return "iOS"; + case Platform.Mac: + return "OSX"; + case Platform.Mobile: + return "Mobile"; + case Platform.PS4: + return "PS4"; + case Platform.Windows: + return "Windows"; + case Platform.UWP: + return "UWP"; + case Platform.XboxOne: + return "XBox One"; + case Platform.Android: + return "Android"; + case Platform.AppleTV: + return "Apple TV"; + case Platform.MobileHigh: + return "High-End Mobile"; + case Platform.MobileLow: + return "Low-End Mobile"; + case Platform.Stadia: + return "Stadia"; + case Platform.Switch: + return "Switch"; + } + return "Unknown"; + } + + // Returns the UI sort order for the given platform. + public static float SortOrder(Platform legacyPlatform) + { + switch (legacyPlatform) + { + case Platform.Desktop: + return 1; + case Platform.Windows: + return 1.1f; + case Platform.Mac: + return 1.2f; + case Platform.Linux: + return 1.3f; + case Platform.Mobile: + return 2; + case Platform.MobileHigh: + return 2.1f; + case Platform.MobileLow: + return 2.2f; + case Platform.AppleTV: + return 2.3f; + case Platform.Console: + return 3; + case Platform.XboxOne: + return 3.1f; + case Platform.PS4: + return 3.2f; + case Platform.Switch: + return 3.3f; + case Platform.Stadia: + return 3.4f; + default: + return 0; + } + } + + // Returns the parent for the given platform. + public static Platform Parent(Platform platform) + { + switch (platform) + { + case Platform.Windows: + case Platform.Linux: + case Platform.Mac: + case Platform.UWP: + return Platform.Desktop; + case Platform.MobileHigh: + case Platform.MobileLow: + case Platform.iOS: + case Platform.Android: + case Platform.AppleTV: + return Platform.Mobile; + case Platform.Switch: + case Platform.XboxOne: + case Platform.PS4: + case Platform.Stadia: + case Platform.Reserved_1: + case Platform.Reserved_2: + case Platform.Reserved_3: + return Platform.Console; + case Platform.Desktop: + case Platform.Console: + case Platform.Mobile: + return Platform.Default; + case Platform.PlayInEditor: + case Platform.Default: + default: + return Platform.None; + } + } + + // Determines whether the given platform is a group + public static bool IsGroup(Platform platform) + { + switch (platform) + { + case Platform.Desktop: + case Platform.Mobile: + case Platform.Console: + return true; + default: + return false; + } + } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Settings.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/Settings.cs.meta new file mode 100644 index 0000000..cdb4a83 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Settings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eef8d824ea7b63742966aaa0e94ac383 +timeCreated: 1435215721 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -400 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioBankLoader.cs b/game/Assets/Plugins/FMOD/src/Runtime/StudioBankLoader.cs new file mode 100644 index 0000000..5f5d9d9 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioBankLoader.cs @@ -0,0 +1,114 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace FMODUnity +{ + [AddComponentMenu("FMOD Studio/FMOD Studio Bank Loader")] + public class StudioBankLoader : MonoBehaviour + { + public LoaderGameEvent LoadEvent; + public LoaderGameEvent UnloadEvent; + [BankRef] + public List Banks; + public string CollisionTag; + public bool PreloadSamples; + private bool isQuitting; + + void HandleGameEvent(LoaderGameEvent gameEvent) + { + if (LoadEvent == gameEvent) + { + Load(); + } + if (UnloadEvent == gameEvent) + { + Unload(); + } + } + + void Start() + { + RuntimeUtils.EnforceLibraryOrder(); + HandleGameEvent(LoaderGameEvent.ObjectStart); + } + + void OnApplicationQuit() + { + isQuitting = true; + } + + void OnDestroy() + { + if (!isQuitting) + { + HandleGameEvent(LoaderGameEvent.ObjectDestroy); + } + } + + void OnTriggerEnter(Collider other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(LoaderGameEvent.TriggerEnter); + } + } + + void OnTriggerExit(Collider other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(LoaderGameEvent.TriggerExit); + } + } + + void OnTriggerEnter2D(Collider2D other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(LoaderGameEvent.TriggerEnter2D); + } + } + + void OnTriggerExit2D(Collider2D other) + { + if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(LoaderGameEvent.TriggerExit2D); + } + } + + void OnEnable() + { + HandleGameEvent(LoaderGameEvent.ObjectEnable); + } + + void OnDisable() + { + HandleGameEvent(LoaderGameEvent.ObjectDisable); + } + + public void Load() + { + foreach (var bankRef in Banks) + { + try + { + RuntimeManager.LoadBank(bankRef, PreloadSamples); + } + catch (BankLoadException e) + { + UnityEngine.Debug.LogException(e); + } + } + RuntimeManager.WaitForAllLoads(); + } + + public void Unload() + { + foreach (var bankRef in Banks) + { + RuntimeManager.UnloadBank(bankRef); + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioBankLoader.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/StudioBankLoader.cs.meta new file mode 100644 index 0000000..6649bdd --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioBankLoader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b9468c5f457ace64f8d4df6d642b107f +timeCreated: 1440562167 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -250 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioEventEmitter.cs b/game/Assets/Plugins/FMOD/src/Runtime/StudioEventEmitter.cs new file mode 100644 index 0000000..bf5ef3d --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioEventEmitter.cs @@ -0,0 +1,324 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FMODUnity +{ + [AddComponentMenu("FMOD Studio/FMOD Studio Event Emitter")] + public class StudioEventEmitter : EventHandler + { + [EventRef] + public string Event = ""; + public EmitterGameEvent PlayEvent = EmitterGameEvent.None; + public EmitterGameEvent StopEvent = EmitterGameEvent.None; + public bool AllowFadeout = true; + public bool TriggerOnce = false; + public bool Preload = false; + public ParamRef[] Params = new ParamRef[0]; + public bool OverrideAttenuation = false; + public float OverrideMinDistance = -1.0f; + public float OverrideMaxDistance = -1.0f; + + protected FMOD.Studio.EventDescription eventDescription; + public FMOD.Studio.EventDescription EventDescription { get { return eventDescription; } } + + protected FMOD.Studio.EventInstance instance; + public FMOD.Studio.EventInstance EventInstance { get { return instance; } } + + private bool hasTriggered = false; + private bool isQuitting = false; + private bool isOneshot = false; + private List cachedParams = new List(); + + private const string SnapshotString = "snapshot"; + + public bool IsActive { get; private set; } + + public float MaxDistance + { + get + { + if (OverrideAttenuation) + { + return OverrideMaxDistance; + } + + if (!eventDescription.isValid()) + { + Lookup(); + } + + float maxDistance; + eventDescription.getMaximumDistance(out maxDistance); + return maxDistance; + } + } + + void Start() + { + RuntimeUtils.EnforceLibraryOrder(); + if (Preload) + { + Lookup(); + eventDescription.loadSampleData(); + RuntimeManager.StudioSystem.update(); + FMOD.Studio.LOADING_STATE loadingState; + eventDescription.getSampleLoadingState(out loadingState); + while(loadingState == FMOD.Studio.LOADING_STATE.LOADING) + { + #if WINDOWS_UWP + System.Threading.Tasks.Task.Delay(1).Wait(); + #else + System.Threading.Thread.Sleep(1); + #endif + eventDescription.getSampleLoadingState(out loadingState); + } + } + HandleGameEvent(EmitterGameEvent.ObjectStart); + } + + void OnApplicationQuit() + { + isQuitting = true; + } + + void OnDestroy() + { + if (!isQuitting) + { + HandleGameEvent(EmitterGameEvent.ObjectDestroy); + + if (instance.isValid()) + { + RuntimeManager.DetachInstanceFromGameObject(instance); + if (eventDescription.isValid() && isOneshot) + { + instance.release(); + instance.clearHandle(); + } + } + + RuntimeManager.DeregisterActiveEmitter(this); + + if (Preload) + { + eventDescription.unloadSampleData(); + } + } + } + + protected override void HandleGameEvent(EmitterGameEvent gameEvent) + { + if (PlayEvent == gameEvent) + { + Play(); + } + if (StopEvent == gameEvent) + { + Stop(); + } + } + + void Lookup() + { + eventDescription = RuntimeManager.GetEventDescription(Event); + + if (eventDescription.isValid()) + { + for (int i = 0; i < Params.Length; i++) + { + FMOD.Studio.PARAMETER_DESCRIPTION param; + eventDescription.getParameterDescriptionByName(Params[i].Name, out param); + Params[i].ID = param.id; + } + } + } + + public void Play() + { + if (TriggerOnce && hasTriggered) + { + return; + } + + if (string.IsNullOrEmpty(Event)) + { + return; + } + + cachedParams.Clear(); + + if (!eventDescription.isValid()) + { + Lookup(); + } + + if (!Event.StartsWith(SnapshotString, StringComparison.CurrentCultureIgnoreCase)) + { + eventDescription.isOneshot(out isOneshot); + } + + bool is3D; + eventDescription.is3D(out is3D); + + IsActive = true; + + if (is3D && !isOneshot && Settings.Instance.StopEventsOutsideMaxDistance) + { + RuntimeManager.RegisterActiveEmitter(this); + RuntimeManager.UpdateActiveEmitter(this, true); + } + else + { + PlayInstance(); + } + } + + public void PlayInstance() + { + if (!instance.isValid()) + { + instance.clearHandle(); + } + + // Let previous oneshot instances play out + if (isOneshot && instance.isValid()) + { + instance.release(); + instance.clearHandle(); + } + + bool is3D; + eventDescription.is3D(out is3D); + + if (!instance.isValid()) + { + eventDescription.createInstance(out instance); + + // Only want to update if we need to set 3D attributes + if (is3D) + { + var rigidBody = GetComponent(); + var rigidBody2D = GetComponent(); + var transform = GetComponent(); + if (rigidBody) + { + instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody)); + RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody); + } + else + { + instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); + RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody2D); + } + } + } + + foreach (var param in Params) + { + instance.setParameterByID(param.ID, param.Value); + } + + foreach (var cachedParam in cachedParams) + { + instance.setParameterByID(cachedParam.ID, cachedParam.Value); + } + + if (is3D && OverrideAttenuation) + { + instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MINIMUM_DISTANCE, OverrideMinDistance); + instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, OverrideMaxDistance); + } + + instance.start(); + + hasTriggered = true; + } + + public void Stop() + { + RuntimeManager.DeregisterActiveEmitter(this); + IsActive = false; + cachedParams.Clear(); + StopInstance(); + } + + public void StopInstance() + { + if (TriggerOnce && hasTriggered) + { + RuntimeManager.DeregisterActiveEmitter(this); + } + + if (instance.isValid()) + { + instance.stop(AllowFadeout ? FMOD.Studio.STOP_MODE.ALLOWFADEOUT : FMOD.Studio.STOP_MODE.IMMEDIATE); + instance.release(); + instance.clearHandle(); + } + } + + public void SetParameter(string name, float value, bool ignoreseekspeed = false) + { + if (Settings.Instance.StopEventsOutsideMaxDistance && IsActive) + { + ParamRef cachedParam = cachedParams.Find(x => x.Name == name); + + if (cachedParam == null) + { + FMOD.Studio.PARAMETER_DESCRIPTION paramDesc; + eventDescription.getParameterDescriptionByName(name, out paramDesc); + + cachedParam = new ParamRef(); + cachedParam.ID = paramDesc.id; + cachedParam.Name = paramDesc.name; + cachedParams.Add(cachedParam); + } + + cachedParam.Value = value; + } + + if (instance.isValid()) + { + instance.setParameterByName(name, value, ignoreseekspeed); + } + } + + public void SetParameter(FMOD.Studio.PARAMETER_ID id, float value, bool ignoreseekspeed = false) + { + if (Settings.Instance.StopEventsOutsideMaxDistance && IsActive) + { + ParamRef cachedParam = cachedParams.Find(x => x.ID.Equals(id)); + + if (cachedParam == null) + { + FMOD.Studio.PARAMETER_DESCRIPTION paramDesc; + eventDescription.getParameterDescriptionByID(id, out paramDesc); + + cachedParam = new ParamRef(); + cachedParam.ID = paramDesc.id; + cachedParam.Name = paramDesc.name; + cachedParams.Add(cachedParam); + } + + cachedParam.Value = value; + } + + if (instance.isValid()) + { + instance.setParameterByID(id, value, ignoreseekspeed); + } + } + + public bool IsPlaying() + { + if (instance.isValid()) + { + FMOD.Studio.PLAYBACK_STATE playbackState; + instance.getPlaybackState(out playbackState); + return (playbackState != FMOD.Studio.PLAYBACK_STATE.STOPPED); + } + return false; + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioEventEmitter.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/StudioEventEmitter.cs.meta new file mode 100644 index 0000000..429f028 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioEventEmitter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9a6610d2e704f1648819acc8d7460285 +timeCreated: 1444629021 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -220 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioGlobalParameterTrigger.cs b/game/Assets/Plugins/FMOD/src/Runtime/StudioGlobalParameterTrigger.cs new file mode 100644 index 0000000..e878612 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioGlobalParameterTrigger.cs @@ -0,0 +1,51 @@ +using System; +using UnityEngine; + +namespace FMODUnity +{ + [AddComponentMenu("FMOD Studio/FMOD Studio Global Parameter Trigger")] + public class StudioGlobalParameterTrigger: EventHandler + { + [ParamRef] + public string parameter; + public EmitterGameEvent TriggerEvent; + public float value; + + private FMOD.Studio.PARAMETER_DESCRIPTION parameterDescription; + public FMOD.Studio.PARAMETER_DESCRIPTION ParameterDesctription { get { return parameterDescription; } } + + FMOD.RESULT Lookup() + { + FMOD.RESULT result = RuntimeManager.StudioSystem.getParameterDescriptionByName(parameter, out parameterDescription); + return result; + } + + void Awake() + { + if (string.IsNullOrEmpty(parameterDescription.name)) + { + Lookup(); + } + } + + protected override void HandleGameEvent(EmitterGameEvent gameEvent) + { + if (TriggerEvent == gameEvent) + { + TriggerParameters(); + } + } + + public void TriggerParameters() + { + if (!string.IsNullOrEmpty(parameter)) + { + FMOD.RESULT result = RuntimeManager.StudioSystem.setParameterByID(parameterDescription.id, value); + if (result != FMOD.RESULT.OK) + { + Debug.LogError(string.Format(("[FMOD] StudioGlobalParameterTrigger failed to set parameter {0} : result = {1}"), parameter, result)); + } + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioGlobalParameterTrigger.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/StudioGlobalParameterTrigger.cs.meta new file mode 100644 index 0000000..af31c44 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioGlobalParameterTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b0e04e2572f9a940a47465f6f3c2f00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioListener.cs b/game/Assets/Plugins/FMOD/src/Runtime/StudioListener.cs new file mode 100644 index 0000000..a2da7b0 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioListener.cs @@ -0,0 +1,48 @@ +using UnityEngine; + +namespace FMODUnity +{ + [AddComponentMenu("FMOD Studio/FMOD Studio Listener")] + public class StudioListener : MonoBehaviour + { + Rigidbody rigidBody; + Rigidbody2D rigidBody2D; + + public GameObject attenuationObject; + + public int ListenerNumber = -1; + + void OnEnable() + { + RuntimeUtils.EnforceLibraryOrder(); + rigidBody = gameObject.GetComponent(); + rigidBody2D = gameObject.GetComponent(); + ListenerNumber = RuntimeManager.AddListener(this); + } + + void OnDisable() + { + RuntimeManager.RemoveListener(this); + } + + void Update() + { + if (ListenerNumber >= 0 && ListenerNumber < FMOD.CONSTANTS.MAX_LISTENERS) + { + SetListenerLocation(); + } + } + + void SetListenerLocation() + { + if (rigidBody) + { + RuntimeManager.SetListenerLocation(ListenerNumber, gameObject, rigidBody, attenuationObject); + } + else + { + RuntimeManager.SetListenerLocation(ListenerNumber, gameObject, rigidBody2D, attenuationObject); + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioListener.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/StudioListener.cs.meta new file mode 100644 index 0000000..4cb2969 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 86c6556701af9e04380698b89f691b6e +timeCreated: 1449016511 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 80 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioParameterTrigger.cs b/game/Assets/Plugins/FMOD/src/Runtime/StudioParameterTrigger.cs new file mode 100644 index 0000000..6e06db0 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioParameterTrigger.cs @@ -0,0 +1,62 @@ +using System; +using UnityEngine; + +namespace FMODUnity +{ + [Serializable] + public class EmitterRef + { + public StudioEventEmitter Target; + public ParamRef[] Params; + } + + [AddComponentMenu("FMOD Studio/FMOD Studio Parameter Trigger")] + public class StudioParameterTrigger: EventHandler + { + public EmitterRef[] Emitters; + public EmitterGameEvent TriggerEvent; + + void Awake() + { + for (int i = 0; i < Emitters.Length; i++) + { + var emitterRef = Emitters[i]; + if (emitterRef.Target != null && !string.IsNullOrEmpty(emitterRef.Target.Event)) + { + FMOD.Studio.EventDescription eventDesc = FMODUnity.RuntimeManager.GetEventDescription(emitterRef.Target.Event); + if (eventDesc.isValid()) + { + for (int j = 0; j < Emitters[i].Params.Length; j++) + { + FMOD.Studio.PARAMETER_DESCRIPTION param; + eventDesc.getParameterDescriptionByName(emitterRef.Params[j].Name, out param); + emitterRef.Params[j].ID = param.id; + } + } + } + } + } + protected override void HandleGameEvent(EmitterGameEvent gameEvent) + { + if (TriggerEvent == gameEvent) + { + TriggerParameters(); + } + } + + public void TriggerParameters() + { + for (int i = 0; i < Emitters.Length; i++) + { + var emitterRef = Emitters[i]; + if (emitterRef.Target != null && emitterRef.Target.EventInstance.isValid()) + { + for (int j = 0; j < Emitters[i].Params.Length; j++) + { + emitterRef.Target.EventInstance.setParameterByID(Emitters[i].Params[j].ID, Emitters[i].Params[j].Value); + } + } + } + } + } +} \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/StudioParameterTrigger.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/StudioParameterTrigger.cs.meta new file mode 100644 index 0000000..be920b2 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/StudioParameterTrigger.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 744a208c85da6d04c861d81b992e4ead +timeCreated: 1451968823 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Timeline.meta b/game/Assets/Plugins/FMOD/src/Runtime/Timeline.meta new file mode 100644 index 0000000..e434034 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Timeline.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30aaa31bf04730941a12542740281e72 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventPlayable.cs b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventPlayable.cs new file mode 100644 index 0000000..4921eb7 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventPlayable.cs @@ -0,0 +1,203 @@ +#if (UNITY_TIMELINE_EXIST || !UNITY_2019_1_OR_NEWER) + +using System; +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +namespace FMODUnity +{ + [System.Serializable] + public class FMODEventPlayable : PlayableAsset, ITimelineClipAsset + { + public FMODEventPlayableBehavior template = new FMODEventPlayableBehavior(); + + public GameObject TrackTargetObject { get; set; } + public float eventLength; //In seconds. + + FMODEventPlayableBehavior behavior; + + [FMODUnity.EventRef] + [SerializeField] public string eventName; + [SerializeField] public STOP_MODE stopType; + + [SerializeField] public FMODUnity.ParamRef[] parameters = new FMODUnity.ParamRef[0]; + + [NonSerialized] public bool cachedParameters = false; + + public override double duration + { + get + { + if (eventName == null) + { + return base.duration; + } + else + { + return eventLength; + } + } + } + + public ClipCaps clipCaps + { + get { return ClipCaps.None; } + } + + public TimelineClip OwningClip { get; set; } + + public override Playable CreatePlayable(PlayableGraph graph, GameObject owner) + { +#if UNITY_EDITOR + if (!string.IsNullOrEmpty(eventName)) +#else + if (!cachedParameters && !string.IsNullOrEmpty(eventName)) +#endif + { + FMOD.Studio.EventDescription eventDescription; + FMODUnity.RuntimeManager.StudioSystem.getEvent(eventName, out eventDescription); + for (int i = 0; i < parameters.Length; i++) + { + FMOD.Studio.PARAMETER_DESCRIPTION parameterDescription; + eventDescription.getParameterDescriptionByName(parameters[i].Name, out parameterDescription); + parameters[i].ID = parameterDescription.id; + } + cachedParameters = true; + } + + var playable = ScriptPlayable.Create(graph, template); + behavior = playable.GetBehaviour(); + + behavior.TrackTargetObject = TrackTargetObject; + behavior.eventName = eventName; + behavior.stopType = stopType; + behavior.parameters = parameters; + behavior.OwningClip = OwningClip; + + return playable; + } + +#if UNITY_EDITOR + public void UpdateEventDuration(float duration) + { + eventLength = duration / 1000f; + } + + public void OnValidate() + { + if (OwningClip != null && !string.IsNullOrEmpty(eventName)) + { + int index = eventName.LastIndexOf("/"); + OwningClip.displayName = eventName.Substring(index + 1); + } + if (behavior != null && !string.IsNullOrEmpty(behavior.eventName)) + { + behavior.eventName = eventName; + } + } +#endif //UNITY_EDITOR + } + + public enum STOP_MODE : int + { + AllowFadeout, + Immediate, + None + } + + public class FMODEventPlayableBehavior : PlayableBehaviour + { + public string eventName; + public STOP_MODE stopType = STOP_MODE.AllowFadeout; + public FMODUnity.ParamRef[] parameters = new FMODUnity.ParamRef[0]; + + public GameObject TrackTargetObject; + public TimelineClip OwningClip; + + private bool isPlayheadInside = false; + + private FMOD.Studio.EventInstance eventInstance; + + protected void PlayEvent() + { + if (!string.IsNullOrEmpty(eventName)) + { + eventInstance = FMODUnity.RuntimeManager.CreateInstance(eventName); + // Only attach to object if the game is actually playing, not auditioning. + if (Application.isPlaying && TrackTargetObject) + { + Rigidbody rb = TrackTargetObject.GetComponent(); + if (rb) + { + FMODUnity.RuntimeManager.AttachInstanceToGameObject(eventInstance, TrackTargetObject.transform, rb); + } + else + { + FMODUnity.RuntimeManager.AttachInstanceToGameObject(eventInstance, TrackTargetObject.transform, TrackTargetObject.GetComponent()); + } + } + else + { + eventInstance.set3DAttributes(FMODUnity.RuntimeUtils.To3DAttributes(Vector3.zero)); + } + + foreach (var param in parameters) + { + eventInstance.setParameterByID(param.ID, param.Value); + } + + eventInstance.start(); + } + } + + public void OnEnter() + { + if (!isPlayheadInside) + { + PlayEvent(); + isPlayheadInside = true; + } + } + + public void OnExit() + { + if (isPlayheadInside) + { + if (eventInstance.isValid()) + { + if (stopType != STOP_MODE.None) + { + eventInstance.stop(stopType == STOP_MODE.Immediate ? FMOD.Studio.STOP_MODE.IMMEDIATE : FMOD.Studio.STOP_MODE.ALLOWFADEOUT); + } + eventInstance.release(); + } + isPlayheadInside = false; + } + } + + public void UpdateBehaviour(float time) + { + if ((time >= OwningClip.start) && (time < OwningClip.end)) + { + OnEnter(); + } + else + { + OnExit(); + } + } + + public override void OnGraphStop(Playable playable) + { + isPlayheadInside = false; + if (eventInstance.isValid()) + { + eventInstance.stop(FMOD.Studio.STOP_MODE.IMMEDIATE); + eventInstance.release(); + FMODUnity.RuntimeManager.StudioSystem.update(); + } + } + } +} +#endif \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventPlayable.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventPlayable.cs.meta new file mode 100644 index 0000000..2886889 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventPlayable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 987a467495df9d942b56b1b51381d095 +timeCreated: 1523230466 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 392af304825cbe847bbf4e603852e4dd, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventTrack.cs b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventTrack.cs new file mode 100644 index 0000000..7a0e431 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventTrack.cs @@ -0,0 +1,74 @@ +#if (UNITY_TIMELINE_EXIST || !UNITY_2019_1_OR_NEWER) + +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ + [TrackColor(0.066f, 0.134f, 0.244f)] + [TrackClipType(typeof(FMODEventPlayable))] + [TrackBindingType(typeof(GameObject))] + public class FMODEventTrack : TrackAsset + { + public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount) + { + var director = go.GetComponent(); + var trackTargetObject = director.GetGenericBinding(this) as GameObject; + + foreach (var clip in GetClips()) + { + var playableAsset = clip.asset as FMODEventPlayable; + + if (playableAsset) + { + playableAsset.TrackTargetObject = trackTargetObject; + playableAsset.OwningClip = clip; + } + } + + var scriptPlayable = ScriptPlayable.Create(graph, inputCount); + return scriptPlayable; + } + } + + public class FMODEventMixerBehaviour : PlayableBehaviour + { + public override void ProcessFrame(Playable playable, FrameData info, object playerData) + { +#if UNITY_EDITOR + /* + * Process frame is called from OnGUI() when auditioning. + * Check playing to avoid retriggering sounds while scrubbing or repainting. + * Check IsQuitting to avoid accessing the RuntimeManager during the Play-In-Editor to Editor transition. + */ + bool playing = playable.GetGraph().IsPlaying(); + if (!playing) + { + return; + } + /* When auditioning manually update the StudioSystem in place of the RuntimeManager. */ + if (!Application.isPlaying) + { + FMODUnity.RuntimeManager.StudioSystem.update(); + } +#endif //UNITY_EDITOR + + int inputCount = playable.GetInputCount(); + float time = (float)playable.GetGraph().GetRootPlayable(0).GetTime(); + + for (int i = 0; i < inputCount; i++) + { + ScriptPlayable inputPlayable = (ScriptPlayable)playable.GetInput(i); + FMODEventPlayableBehavior input = inputPlayable.GetBehaviour(); + + input.UpdateBehaviour(time); + } + } + } +} +#endif \ No newline at end of file diff --git a/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventTrack.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventTrack.cs.meta new file mode 100644 index 0000000..74e0546 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/Timeline/FMODEventTrack.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 133253f56854570409c222a87786b263 +timeCreated: 1523230466 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a4edfa5854cdec34b98b1c55f0562bdd, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/fmod_static_plugin_support.h b/game/Assets/Plugins/FMOD/src/Runtime/fmod_static_plugin_support.h new file mode 100644 index 0000000..f0e7bbc --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/fmod_static_plugin_support.h @@ -0,0 +1,61 @@ +// Support code for static plugin registration code in generated file fmod_register_static_plugins.cpp +// Needs the following macros defined before inclusion to select the correct behaviour: +// * FMOD_LINKAGE_STATIC +// * UNITY_2019_1_OR_NEWER + +#include "il2cpp-class-internals.h" // So that il2cpp-codegen.h compiles +#include "codegen/il2cpp-codegen.h" // For DEFAULT_CALL definition + +struct FMOD_SYSTEM; +struct FMOD_DSP_DESCRIPTION; + +typedef unsigned int (DEFAULT_CALL *RegisterDSPFunction)(FMOD_SYSTEM *, const FMOD_DSP_DESCRIPTION *, void *); + +static RegisterDSPFunction sRegisterDSP = nullptr; + +#if FMOD_LINKAGE_STATIC + +extern "C" unsigned int FMOD5_System_RegisterDSP(FMOD_SYSTEM *system, const FMOD_DSP_DESCRIPTION *description, void *handle); + +void InitializeRegisterDSP(const char *) +{ + sRegisterDSP = FMOD5_System_RegisterDSP; +} + +#else + +#include "utils/StringUtils.h" +#include "os/LibraryLoader.h" +#if !UNITY_2020_1_OR_NEWER + #include "vm/LibraryLoader.h" +#endif + +#if UNITY_2019_1_OR_NEWER + #include "utils/StringViewUtils.h" +#endif + +void InitializeRegisterDSP(const char *coreLibraryName) +{ + using il2cpp::utils::StringUtils; +#if UNITY_2019_1_OR_NEWER + using il2cpp::utils::StringViewUtils; +#endif + + Il2CppNativeString libraryName(StringUtils::Utf8ToNativeString(coreLibraryName)); + +#if UNITY_2020_1_OR_NEWER + // il2cpp::vm::LibraryLoader functionality has been merged into il2cpp::os::LibraryLoader + void *library = il2cpp::os::LibraryLoader::LoadDynamicLibrary(StringViewUtils::StringToStringView(libraryName)); +#elif UNITY_2019_1_OR_NEWER + // il2cpp::vm::LibraryLoader::LoadLibrary has been renamed to LoadDynamicLibrary + void *library = il2cpp::vm::LibraryLoader::LoadDynamicLibrary(StringViewUtils::StringToStringView(libraryName)); +#else + // il2cpp::vm::LibraryLoader::LoadLibrary makes the library path absolute if necessary + void *library = il2cpp::vm::LibraryLoader::LoadLibrary(libraryName); +#endif + + sRegisterDSP = (RegisterDSPFunction)il2cpp::os::LibraryLoader::GetFunctionPointer(library, "FMOD_System_RegisterDSP"); +} + +#endif + diff --git a/game/Assets/Plugins/FMOD/src/Runtime/fmod_static_plugin_support.h.meta b/game/Assets/Plugins/FMOD/src/Runtime/fmod_static_plugin_support.h.meta new file mode 100644 index 0000000..581dde5 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/fmod_static_plugin_support.h.meta @@ -0,0 +1,125 @@ +fileFormatVersion: 2 +guid: f8a3d4f9470d7ad40b876135404b3bbd +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 0 + Exclude PS4: 1 + Exclude Switch: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + Exclude XboxOne: 1 + Exclude iOS: 0 + Exclude tvOS: 0 + - 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: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 1 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: Il2Cpp + - 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/game/Assets/Plugins/FMOD/src/Runtime/fmodplugins.cpp b/game/Assets/Plugins/FMOD/src/Runtime/fmodplugins.cpp new file mode 100644 index 0000000..ef055cf --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/fmodplugins.cpp @@ -0,0 +1,58 @@ +struct FMOD_SYSTEM; +struct FMOD_DSP_DESCRIPTION; + +extern "C" unsigned int FMOD5_System_RegisterDSP(FMOD_SYSTEM *system, const FMOD_DSP_DESCRIPTION *description, void *handle); + +extern FMOD_DSP_DESCRIPTION* FMOD_Google_GVRListener_GetDSPDescription(); +extern FMOD_DSP_DESCRIPTION* FMOD_Google_GVRSoundfield_GetDSPDescription(); +extern FMOD_DSP_DESCRIPTION* FMOD_Google_GVRSource_GetDSPDescription(); + +extern FMOD_DSP_DESCRIPTION* FMOD_ResonanceAudioListener_GetDSPDescription(); +extern FMOD_DSP_DESCRIPTION* FMOD_ResonanceAudioSoundfield_GetDSPDescription(); +extern FMOD_DSP_DESCRIPTION* FMOD_ResonanceAudioSource_GetDSPDescription(); + +extern "C" unsigned int FmodUnityNativePluginInit(FMOD_SYSTEM *system) +{ + unsigned int result = 0; + + /* + + This function is invoked on iOS and tvOS after the system has been + initialized and before any banks are loaded. It can be used to manually + register plugins that have been statically linked into the executable. + + Each plugin will require a separate call to FMOD_System_RegisterDSP. + The DSP_DESCRIPTION argument is the same as what is returned by + FMODGetDSPDescription when building a dynamic plugin. + + */ + + /* + result = FMOD5_System_RegisterDSP(system, GetMyDSPDescription(), nullptr); + if (result != 0) + { + return result; + } + */ + + /* Uncomment this next section to use the Resonance Audio plugin on iOS */ + /* + result = FMOD5_System_RegisterDSP(system, FMOD_ResonanceAudioListener_GetDSPDescription(), nullptr); + if (result != 0) + { + return result; + } + result = FMOD5_System_RegisterDSP(system, FMOD_ResonanceAudioSoundfield_GetDSPDescription(), nullptr); + if (result != 0) + { + return result; + } + result = FMOD5_System_RegisterDSP(system, FMOD_ResonanceAudioSource_GetDSPDescription(), nullptr); + if (result != 0) + { + return result; + } + */ + + return result; +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/fmodplugins.cpp.meta b/game/Assets/Plugins/FMOD/src/Runtime/fmodplugins.cpp.meta new file mode 100644 index 0000000..748402e --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/fmodplugins.cpp.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: b609b2636c3bd40b6baa2df2e77d015e +timeCreated: 1466052174 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + 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 + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: {} + Switch: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper.meta b/game/Assets/Plugins/FMOD/src/Runtime/wrapper.meta new file mode 100644 index 0000000..4ea31ab --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bfaed09c888d2a24096887e3996f48a0 +folderAsset: yes +timeCreated: 1432600460 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod.cs b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod.cs new file mode 100644 index 0000000..19be055 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod.cs @@ -0,0 +1,3936 @@ +/* ======================================================================================== */ +/* FMOD Core API - C# wrapper. */ +/* Copyright (c), Firelight Technologies Pty, Ltd. 2004-2020. */ +/* */ +/* For more detail visit: */ +/* https://fmod.com/resources/documentation-api?version=2.0&page=core-api.html */ +/* ======================================================================================== */ + +using System; +using System.Text; +using System.Runtime.InteropServices; +using System.Collections.Generic; + +namespace FMOD +{ + /* + FMOD version number. Check this against FMOD::System::getVersion / System_GetVersion + 0xaaaabbcc -> aaaa = major version number. bb = minor version number. cc = development version number. + */ + public partial class VERSION + { + public const int number = 0x00020107; +#if !UNITY_2017_4_OR_NEWER + public const string dll = "fmod"; +#endif + } + + public class CONSTANTS + { + public const int MAX_CHANNEL_WIDTH = 32; + public const int MAX_LISTENERS = 8; + public const int REVERB_MAXINSTANCES = 4; + public const int MAX_SYSTEMS = 8; + } + + /* + FMOD core types + */ + public enum RESULT : int + { + OK, + ERR_BADCOMMAND, + ERR_CHANNEL_ALLOC, + ERR_CHANNEL_STOLEN, + ERR_DMA, + ERR_DSP_CONNECTION, + ERR_DSP_DONTPROCESS, + ERR_DSP_FORMAT, + ERR_DSP_INUSE, + ERR_DSP_NOTFOUND, + ERR_DSP_RESERVED, + ERR_DSP_SILENCE, + ERR_DSP_TYPE, + ERR_FILE_BAD, + ERR_FILE_COULDNOTSEEK, + ERR_FILE_DISKEJECTED, + ERR_FILE_EOF, + ERR_FILE_ENDOFDATA, + ERR_FILE_NOTFOUND, + ERR_FORMAT, + ERR_HEADER_MISMATCH, + ERR_HTTP, + ERR_HTTP_ACCESS, + ERR_HTTP_PROXY_AUTH, + ERR_HTTP_SERVER_ERROR, + ERR_HTTP_TIMEOUT, + ERR_INITIALIZATION, + ERR_INITIALIZED, + ERR_INTERNAL, + ERR_INVALID_FLOAT, + ERR_INVALID_HANDLE, + ERR_INVALID_PARAM, + ERR_INVALID_POSITION, + ERR_INVALID_SPEAKER, + ERR_INVALID_SYNCPOINT, + ERR_INVALID_THREAD, + ERR_INVALID_VECTOR, + ERR_MAXAUDIBLE, + ERR_MEMORY, + ERR_MEMORY_CANTPOINT, + ERR_NEEDS3D, + ERR_NEEDSHARDWARE, + ERR_NET_CONNECT, + ERR_NET_SOCKET_ERROR, + ERR_NET_URL, + ERR_NET_WOULD_BLOCK, + ERR_NOTREADY, + ERR_OUTPUT_ALLOCATED, + ERR_OUTPUT_CREATEBUFFER, + ERR_OUTPUT_DRIVERCALL, + ERR_OUTPUT_FORMAT, + ERR_OUTPUT_INIT, + ERR_OUTPUT_NODRIVERS, + ERR_PLUGIN, + ERR_PLUGIN_MISSING, + ERR_PLUGIN_RESOURCE, + ERR_PLUGIN_VERSION, + ERR_RECORD, + ERR_REVERB_CHANNELGROUP, + ERR_REVERB_INSTANCE, + ERR_SUBSOUNDS, + ERR_SUBSOUND_ALLOCATED, + ERR_SUBSOUND_CANTMOVE, + ERR_TAGNOTFOUND, + ERR_TOOMANYCHANNELS, + ERR_TRUNCATED, + ERR_UNIMPLEMENTED, + ERR_UNINITIALIZED, + ERR_UNSUPPORTED, + ERR_VERSION, + ERR_EVENT_ALREADY_LOADED, + ERR_EVENT_LIVEUPDATE_BUSY, + ERR_EVENT_LIVEUPDATE_MISMATCH, + ERR_EVENT_LIVEUPDATE_TIMEOUT, + ERR_EVENT_NOTFOUND, + ERR_STUDIO_UNINITIALIZED, + ERR_STUDIO_NOT_LOADED, + ERR_INVALID_STRING, + ERR_ALREADY_LOCKED, + ERR_NOT_LOCKED, + ERR_RECORD_DISCONNECTED, + ERR_TOOMANYSAMPLES, + } + + public enum CHANNELCONTROL_TYPE : int + { + CHANNEL, + CHANNELGROUP, + MAX + } + + [StructLayout(LayoutKind.Sequential)] + public struct VECTOR + { + public float x; + public float y; + public float z; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ATTRIBUTES_3D + { + public VECTOR position; + public VECTOR velocity; + public VECTOR forward; + public VECTOR up; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ASYNCREADINFO + { + public IntPtr handle; + public uint offset; + public uint sizebytes; + public int priority; + + public IntPtr userdata; + public IntPtr buffer; + public uint bytesread; + public FILE_ASYNCDONE_FUNC done; + } + + public enum OUTPUTTYPE : int + { + AUTODETECT, + + UNKNOWN, + NOSOUND, + WAVWRITER, + NOSOUND_NRT, + WAVWRITER_NRT, + + WASAPI, + ASIO, + PULSEAUDIO, + ALSA, + COREAUDIO, + AUDIOTRACK, + OPENSL, + AUDIOOUT, + AUDIO3D, + WEBAUDIO, + NNAUDIO, + WINSONIC, + AAUDIO, + + MAX, + } + + public enum DEBUG_MODE : int + { + TTY, + FILE, + CALLBACK, + } + + [Flags] + public enum DEBUG_FLAGS : uint + { + NONE = 0x00000000, + ERROR = 0x00000001, + WARNING = 0x00000002, + LOG = 0x00000004, + + TYPE_MEMORY = 0x00000100, + TYPE_FILE = 0x00000200, + TYPE_CODEC = 0x00000400, + TYPE_TRACE = 0x00000800, + + DISPLAY_TIMESTAMPS = 0x00010000, + DISPLAY_LINENUMBERS = 0x00020000, + DISPLAY_THREAD = 0x00040000, + } + + [Flags] + public enum MEMORY_TYPE : uint + { + NORMAL = 0x00000000, + STREAM_FILE = 0x00000001, + STREAM_DECODE = 0x00000002, + SAMPLEDATA = 0x00000004, + DSP_BUFFER = 0x00000008, + PLUGIN = 0x00000010, + PERSISTENT = 0x00200000, + ALL = 0xFFFFFFFF + } + + public enum SPEAKERMODE : int + { + DEFAULT, + RAW, + MONO, + STEREO, + QUAD, + SURROUND, + _5POINT1, + _7POINT1, + _7POINT1POINT4, + + MAX, + } + + public enum SPEAKER : int + { + NONE = -1, + FRONT_LEFT, + FRONT_RIGHT, + FRONT_CENTER, + LOW_FREQUENCY, + SURROUND_LEFT, + SURROUND_RIGHT, + BACK_LEFT, + BACK_RIGHT, + TOP_FRONT_LEFT, + TOP_FRONT_RIGHT, + TOP_BACK_LEFT, + TOP_BACK_RIGHT, + + MAX, + } + + [Flags] + public enum CHANNELMASK : uint + { + FRONT_LEFT = 0x00000001, + FRONT_RIGHT = 0x00000002, + FRONT_CENTER = 0x00000004, + LOW_FREQUENCY = 0x00000008, + SURROUND_LEFT = 0x00000010, + SURROUND_RIGHT = 0x00000020, + BACK_LEFT = 0x00000040, + BACK_RIGHT = 0x00000080, + BACK_CENTER = 0x00000100, + + MONO = (FRONT_LEFT), + STEREO = (FRONT_LEFT | FRONT_RIGHT), + LRC = (FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER), + QUAD = (FRONT_LEFT | FRONT_RIGHT | SURROUND_LEFT | SURROUND_RIGHT), + SURROUND = (FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER | SURROUND_LEFT | SURROUND_RIGHT), + _5POINT1 = (FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER | LOW_FREQUENCY | SURROUND_LEFT | SURROUND_RIGHT), + _5POINT1_REARS = (FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER | LOW_FREQUENCY | BACK_LEFT | BACK_RIGHT), + _7POINT0 = (FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER | SURROUND_LEFT | SURROUND_RIGHT | BACK_LEFT | BACK_RIGHT), + _7POINT1 = (FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER | LOW_FREQUENCY | SURROUND_LEFT | SURROUND_RIGHT | BACK_LEFT | BACK_RIGHT) + } + + public enum CHANNELORDER : int + { + DEFAULT, + WAVEFORMAT, + PROTOOLS, + ALLMONO, + ALLSTEREO, + ALSA, + + MAX, + } + + public enum PLUGINTYPE : int + { + OUTPUT, + CODEC, + DSP, + + MAX, + } + + [StructLayout(LayoutKind.Sequential)] + public struct PLUGINLIST + { + PLUGINTYPE type; + IntPtr description; + } + + [Flags] + public enum INITFLAGS : uint + { + NORMAL = 0x00000000, + STREAM_FROM_UPDATE = 0x00000001, + MIX_FROM_UPDATE = 0x00000002, + _3D_RIGHTHANDED = 0x00000004, + CHANNEL_LOWPASS = 0x00000100, + CHANNEL_DISTANCEFILTER = 0x00000200, + PROFILE_ENABLE = 0x00010000, + VOL0_BECOMES_VIRTUAL = 0x00020000, + GEOMETRY_USECLOSEST = 0x00040000, + PREFER_DOLBY_DOWNMIX = 0x00080000, + THREAD_UNSAFE = 0x00100000, + PROFILE_METER_ALL = 0x00200000, + MEMORY_TRACKING = 0x00400000, + } + + public enum SOUND_TYPE : int + { + UNKNOWN, + AIFF, + ASF, + DLS, + FLAC, + FSB, + IT, + MIDI, + MOD, + MPEG, + OGGVORBIS, + PLAYLIST, + RAW, + S3M, + USER, + WAV, + XM, + XMA, + AUDIOQUEUE, + AT9, + VORBIS, + MEDIA_FOUNDATION, + MEDIACODEC, + FADPCM, + OPUS, + + MAX, + } + + public enum SOUND_FORMAT : int + { + NONE, + PCM8, + PCM16, + PCM24, + PCM32, + PCMFLOAT, + BITSTREAM, + + MAX + } + + [Flags] + public enum MODE : uint + { + DEFAULT = 0x00000000, + LOOP_OFF = 0x00000001, + LOOP_NORMAL = 0x00000002, + LOOP_BIDI = 0x00000004, + _2D = 0x00000008, + _3D = 0x00000010, + CREATESTREAM = 0x00000080, + CREATESAMPLE = 0x00000100, + CREATECOMPRESSEDSAMPLE = 0x00000200, + OPENUSER = 0x00000400, + OPENMEMORY = 0x00000800, + OPENMEMORY_POINT = 0x10000000, + OPENRAW = 0x00001000, + OPENONLY = 0x00002000, + ACCURATETIME = 0x00004000, + MPEGSEARCH = 0x00008000, + NONBLOCKING = 0x00010000, + UNIQUE = 0x00020000, + _3D_HEADRELATIVE = 0x00040000, + _3D_WORLDRELATIVE = 0x00080000, + _3D_INVERSEROLLOFF = 0x00100000, + _3D_LINEARROLLOFF = 0x00200000, + _3D_LINEARSQUAREROLLOFF = 0x00400000, + _3D_INVERSETAPEREDROLLOFF = 0x00800000, + _3D_CUSTOMROLLOFF = 0x04000000, + _3D_IGNOREGEOMETRY = 0x40000000, + IGNORETAGS = 0x02000000, + LOWMEM = 0x08000000, + VIRTUAL_PLAYFROMSTART = 0x80000000 + } + + public enum OPENSTATE : int + { + READY = 0, + LOADING, + ERROR, + CONNECTING, + BUFFERING, + SEEKING, + PLAYING, + SETPOSITION, + + MAX, + } + + public enum SOUNDGROUP_BEHAVIOR : int + { + BEHAVIOR_FAIL, + BEHAVIOR_MUTE, + BEHAVIOR_STEALLOWEST, + + MAX, + } + + public enum CHANNELCONTROL_CALLBACK_TYPE : int + { + END, + VIRTUALVOICE, + SYNCPOINT, + OCCLUSION, + + MAX, + } + + public struct CHANNELCONTROL_DSP_INDEX + { + public const int HEAD = -1; + public const int FADER = -2; + public const int TAIL = -3; + } + + public enum ERRORCALLBACK_INSTANCETYPE : int + { + NONE, + SYSTEM, + CHANNEL, + CHANNELGROUP, + CHANNELCONTROL, + SOUND, + SOUNDGROUP, + DSP, + DSPCONNECTION, + GEOMETRY, + REVERB3D, + STUDIO_SYSTEM, + STUDIO_EVENTDESCRIPTION, + STUDIO_EVENTINSTANCE, + STUDIO_PARAMETERINSTANCE, + STUDIO_BUS, + STUDIO_VCA, + STUDIO_BANK, + STUDIO_COMMANDREPLAY + } + + [StructLayout(LayoutKind.Sequential)] + public struct ERRORCALLBACK_INFO + { + public RESULT result; + public ERRORCALLBACK_INSTANCETYPE instancetype; + public IntPtr instance; + public StringWrapper functionname; + public StringWrapper functionparams; + } + + [Flags] + public enum SYSTEM_CALLBACK_TYPE : uint + { + DEVICELISTCHANGED = 0x00000001, + DEVICELOST = 0x00000002, + MEMORYALLOCATIONFAILED = 0x00000004, + THREADCREATED = 0x00000008, + BADDSPCONNECTION = 0x00000010, + PREMIX = 0x00000020, + POSTMIX = 0x00000040, + ERROR = 0x00000080, + MIDMIX = 0x00000100, + THREADDESTROYED = 0x00000200, + PREUPDATE = 0x00000400, + POSTUPDATE = 0x00000800, + RECORDLISTCHANGED = 0x00001000, + BUFFEREDNOMIX = 0x00002000, + DEVICEREINITIALIZE = 0x00004000, + ALL = 0xFFFFFFFF, + } + + /* + FMOD Callbacks + */ + public delegate RESULT DEBUG_CALLBACK (DEBUG_FLAGS flags, IntPtr file, int line, IntPtr func, IntPtr message); + public delegate RESULT SYSTEM_CALLBACK (IntPtr system, SYSTEM_CALLBACK_TYPE type, IntPtr commanddata1, IntPtr commanddata2, IntPtr userdata); + public delegate RESULT CHANNELCONTROL_CALLBACK (IntPtr channelcontrol, CHANNELCONTROL_TYPE controltype, CHANNELCONTROL_CALLBACK_TYPE callbacktype, IntPtr commanddata1, IntPtr commanddata2); + public delegate RESULT SOUND_NONBLOCK_CALLBACK (IntPtr sound, RESULT result); + public delegate RESULT SOUND_PCMREAD_CALLBACK (IntPtr sound, IntPtr data, uint datalen); + public delegate RESULT SOUND_PCMSETPOS_CALLBACK (IntPtr sound, int subsound, uint position, TIMEUNIT postype); + public delegate RESULT FILE_OPEN_CALLBACK (IntPtr name, ref uint filesize, ref IntPtr handle, IntPtr userdata); + public delegate RESULT FILE_CLOSE_CALLBACK (IntPtr handle, IntPtr userdata); + public delegate RESULT FILE_READ_CALLBACK (IntPtr handle, IntPtr buffer, uint sizebytes, ref uint bytesread, IntPtr userdata); + public delegate RESULT FILE_SEEK_CALLBACK (IntPtr handle, uint pos, IntPtr userdata); + public delegate RESULT FILE_ASYNCREAD_CALLBACK (IntPtr info, IntPtr userdata); + public delegate RESULT FILE_ASYNCCANCEL_CALLBACK(IntPtr info, IntPtr userdata); + public delegate RESULT FILE_ASYNCDONE_FUNC (IntPtr info, RESULT result); + public delegate IntPtr MEMORY_ALLOC_CALLBACK (uint size, MEMORY_TYPE type, IntPtr sourcestr); + public delegate IntPtr MEMORY_REALLOC_CALLBACK (IntPtr ptr, uint size, MEMORY_TYPE type, IntPtr sourcestr); + public delegate void MEMORY_FREE_CALLBACK (IntPtr ptr, MEMORY_TYPE type, IntPtr sourcestr); + public delegate float CB_3D_ROLLOFF_CALLBACK (IntPtr channelcontrol, float distance); + + public enum DSP_RESAMPLER : int + { + DEFAULT, + NOINTERP, + LINEAR, + CUBIC, + SPLINE, + + MAX, + } + + public enum DSPCONNECTION_TYPE : int + { + STANDARD, + SIDECHAIN, + SEND, + SEND_SIDECHAIN, + + MAX, + } + + public enum TAGTYPE : int + { + UNKNOWN = 0, + ID3V1, + ID3V2, + VORBISCOMMENT, + SHOUTCAST, + ICECAST, + ASF, + MIDI, + PLAYLIST, + FMOD, + USER, + + MAX + } + + public enum TAGDATATYPE : int + { + BINARY = 0, + INT, + FLOAT, + STRING, + STRING_UTF16, + STRING_UTF16BE, + STRING_UTF8, + + MAX + } + + [StructLayout(LayoutKind.Sequential)] + public struct TAG + { + public TAGTYPE type; + public TAGDATATYPE datatype; + public StringWrapper name; + public IntPtr data; + public uint datalen; + public bool updated; + } + + [Flags] + public enum TIMEUNIT : uint + { + MS = 0x00000001, + PCM = 0x00000002, + PCMBYTES = 0x00000004, + RAWBYTES = 0x00000008, + PCMFRACTION = 0x00000010, + MODORDER = 0x00000100, + MODROW = 0x00000200, + MODPATTERN = 0x00000400, + } + + public struct PORT_INDEX + { + public const ulong NONE = 0xFFFFFFFFFFFFFFFF; + } + + [StructLayout(LayoutKind.Sequential)] + public struct CREATESOUNDEXINFO + { + public int cbsize; + public uint length; + public uint fileoffset; + public int numchannels; + public int defaultfrequency; + public SOUND_FORMAT format; + public uint decodebuffersize; + public int initialsubsound; + public int numsubsounds; + public IntPtr inclusionlist; + public int inclusionlistnum; + public SOUND_PCMREAD_CALLBACK pcmreadcallback; + public SOUND_PCMSETPOS_CALLBACK pcmsetposcallback; + public SOUND_NONBLOCK_CALLBACK nonblockcallback; + public IntPtr dlsname; + public IntPtr encryptionkey; + public int maxpolyphony; + public IntPtr userdata; + public SOUND_TYPE suggestedsoundtype; + public FILE_OPEN_CALLBACK fileuseropen; + public FILE_CLOSE_CALLBACK fileuserclose; + public FILE_READ_CALLBACK fileuserread; + public FILE_SEEK_CALLBACK fileuserseek; + public FILE_ASYNCREAD_CALLBACK fileuserasyncread; + public FILE_ASYNCCANCEL_CALLBACK fileuserasynccancel; + public IntPtr fileuserdata; + public int filebuffersize; + public CHANNELORDER channelorder; + public IntPtr initialsoundgroup; + public uint initialseekposition; + public TIMEUNIT initialseekpostype; + public int ignoresetfilesystem; + public uint audioqueuepolicy; + public uint minmidigranularity; + public int nonblockthreadid; + public IntPtr fsbguid; + } + +#pragma warning disable 414 + [StructLayout(LayoutKind.Sequential)] + public struct REVERB_PROPERTIES + { + public float DecayTime; + public float EarlyDelay; + public float LateDelay; + public float HFReference; + public float HFDecayRatio; + public float Diffusion; + public float Density; + public float LowShelfFrequency; + public float LowShelfGain; + public float HighCut; + public float EarlyLateMix; + public float WetLevel; + + #region wrapperinternal + public REVERB_PROPERTIES(float decayTime, float earlyDelay, float lateDelay, float hfReference, + float hfDecayRatio, float diffusion, float density, float lowShelfFrequency, float lowShelfGain, + float highCut, float earlyLateMix, float wetLevel) + { + DecayTime = decayTime; + EarlyDelay = earlyDelay; + LateDelay = lateDelay; + HFReference = hfReference; + HFDecayRatio = hfDecayRatio; + Diffusion = diffusion; + Density = density; + LowShelfFrequency = lowShelfFrequency; + LowShelfGain = lowShelfGain; + HighCut = highCut; + EarlyLateMix = earlyLateMix; + WetLevel = wetLevel; + } + #endregion + } +#pragma warning restore 414 + + public class PRESET + { + /* Instance Env Diffus Room RoomHF RmLF DecTm DecHF DecLF Refl RefDel Revb RevDel ModTm ModDp HFRef LFRef Diffus Densty FLAGS */ + public static REVERB_PROPERTIES OFF() { return new REVERB_PROPERTIES( 1000, 7, 11, 5000, 100, 100, 100, 250, 0, 20, 96, -80.0f );} + public static REVERB_PROPERTIES GENERIC() { return new REVERB_PROPERTIES( 1500, 7, 11, 5000, 83, 100, 100, 250, 0, 14500, 96, -8.0f );} + public static REVERB_PROPERTIES PADDEDCELL() { return new REVERB_PROPERTIES( 170, 1, 2, 5000, 10, 100, 100, 250, 0, 160, 84, -7.8f );} + public static REVERB_PROPERTIES ROOM() { return new REVERB_PROPERTIES( 400, 2, 3, 5000, 83, 100, 100, 250, 0, 6050, 88, -9.4f );} + public static REVERB_PROPERTIES BATHROOM() { return new REVERB_PROPERTIES( 1500, 7, 11, 5000, 54, 100, 60, 250, 0, 2900, 83, 0.5f );} + public static REVERB_PROPERTIES LIVINGROOM() { return new REVERB_PROPERTIES( 500, 3, 4, 5000, 10, 100, 100, 250, 0, 160, 58, -19.0f );} + public static REVERB_PROPERTIES STONEROOM() { return new REVERB_PROPERTIES( 2300, 12, 17, 5000, 64, 100, 100, 250, 0, 7800, 71, -8.5f );} + public static REVERB_PROPERTIES AUDITORIUM() { return new REVERB_PROPERTIES( 4300, 20, 30, 5000, 59, 100, 100, 250, 0, 5850, 64, -11.7f );} + public static REVERB_PROPERTIES CONCERTHALL() { return new REVERB_PROPERTIES( 3900, 20, 29, 5000, 70, 100, 100, 250, 0, 5650, 80, -9.8f );} + public static REVERB_PROPERTIES CAVE() { return new REVERB_PROPERTIES( 2900, 15, 22, 5000, 100, 100, 100, 250, 0, 20000, 59, -11.3f );} + public static REVERB_PROPERTIES ARENA() { return new REVERB_PROPERTIES( 7200, 20, 30, 5000, 33, 100, 100, 250, 0, 4500, 80, -9.6f );} + public static REVERB_PROPERTIES HANGAR() { return new REVERB_PROPERTIES( 10000, 20, 30, 5000, 23, 100, 100, 250, 0, 3400, 72, -7.4f );} + public static REVERB_PROPERTIES CARPETTEDHALLWAY() { return new REVERB_PROPERTIES( 300, 2, 30, 5000, 10, 100, 100, 250, 0, 500, 56, -24.0f );} + public static REVERB_PROPERTIES HALLWAY() { return new REVERB_PROPERTIES( 1500, 7, 11, 5000, 59, 100, 100, 250, 0, 7800, 87, -5.5f );} + public static REVERB_PROPERTIES STONECORRIDOR() { return new REVERB_PROPERTIES( 270, 13, 20, 5000, 79, 100, 100, 250, 0, 9000, 86, -6.0f );} + public static REVERB_PROPERTIES ALLEY() { return new REVERB_PROPERTIES( 1500, 7, 11, 5000, 86, 100, 100, 250, 0, 8300, 80, -9.8f );} + public static REVERB_PROPERTIES FOREST() { return new REVERB_PROPERTIES( 1500, 162, 88, 5000, 54, 79, 100, 250, 0, 760, 94, -12.3f );} + public static REVERB_PROPERTIES CITY() { return new REVERB_PROPERTIES( 1500, 7, 11, 5000, 67, 50, 100, 250, 0, 4050, 66, -26.0f );} + public static REVERB_PROPERTIES MOUNTAINS() { return new REVERB_PROPERTIES( 1500, 300, 100, 5000, 21, 27, 100, 250, 0, 1220, 82, -24.0f );} + public static REVERB_PROPERTIES QUARRY() { return new REVERB_PROPERTIES( 1500, 61, 25, 5000, 83, 100, 100, 250, 0, 3400, 100, -5.0f );} + public static REVERB_PROPERTIES PLAIN() { return new REVERB_PROPERTIES( 1500, 179, 100, 5000, 50, 21, 100, 250, 0, 1670, 65, -28.0f );} + public static REVERB_PROPERTIES PARKINGLOT() { return new REVERB_PROPERTIES( 1700, 8, 12, 5000, 100, 100, 100, 250, 0, 20000, 56, -19.5f );} + public static REVERB_PROPERTIES SEWERPIPE() { return new REVERB_PROPERTIES( 2800, 14, 21, 5000, 14, 80, 60, 250, 0, 3400, 66, 1.2f );} + public static REVERB_PROPERTIES UNDERWATER() { return new REVERB_PROPERTIES( 1500, 7, 11, 5000, 10, 100, 100, 250, 0, 500, 92, 7.0f );} + } + + [StructLayout(LayoutKind.Sequential)] + public struct ADVANCEDSETTINGS + { + public int cbSize; + public int maxMPEGCodecs; + public int maxADPCMCodecs; + public int maxXMACodecs; + public int maxVorbisCodecs; + public int maxAT9Codecs; + public int maxFADPCMCodecs; + public int maxPCMCodecs; + public int ASIONumChannels; + public IntPtr ASIOChannelList; + public IntPtr ASIOSpeakerList; + public float vol0virtualvol; + public uint defaultDecodeBufferSize; + public ushort profilePort; + public uint geometryMaxFadeTime; + public float distanceFilterCenterFreq; + public int reverb3Dinstance; + public int DSPBufferPoolSize; + public DSP_RESAMPLER resamplerMethod; + public uint randomSeed; + public int maxConvolutionThreads; + } + + [Flags] + public enum DRIVER_STATE : uint + { + CONNECTED = 0x00000001, + DEFAULT = 0x00000002, + } + + public enum THREAD_PRIORITY : int + { + /* Platform specific priority range */ + PLATFORM_MIN = -32 * 1024, + PLATFORM_MAX = 32 * 1024, + + /* Platform agnostic priorities, maps internally to platform specific value */ + DEFAULT = PLATFORM_MIN - 1, + LOW = PLATFORM_MIN - 2, + MEDIUM = PLATFORM_MIN - 3, + HIGH = PLATFORM_MIN - 4, + VERY_HIGH = PLATFORM_MIN - 5, + EXTREME = PLATFORM_MIN - 6, + CRITICAL = PLATFORM_MIN - 7, + + /* Thread defaults */ + MIXER = EXTREME, + FEEDER = CRITICAL, + STREAM = VERY_HIGH, + FILE = HIGH, + NONBLOCKING = HIGH, + RECORD = HIGH, + GEOMETRY = LOW, + PROFILER = MEDIUM, + STUDIO_UPDATE = MEDIUM, + STUDIO_LOAD_BANK = MEDIUM, + STUDIO_LOAD_SAMPLE = MEDIUM, + CONVOLUTION1 = VERY_HIGH, + CONVOLUTION2 = VERY_HIGH + + } + + public enum THREAD_STACK_SIZE : uint + { + DEFAULT = 0, + MIXER = 80 * 1024, + FEEDER = 16 * 1024, + STREAM = 96 * 1024, + FILE = 48 * 1024, + NONBLOCKING = 112 * 1024, + RECORD = 16 * 1024, + GEOMETRY = 48 * 1024, + PROFILER = 128 * 1024, + STUDIO_UPDATE = 96 * 1024, + STUDIO_LOAD_BANK = 96 * 1024, + STUDIO_LOAD_SAMPLE = 96 * 1024, + CONVOLUTION1 = 16 * 1024, + CONVOLUTION2 = 16 * 1024 + } + + [Flags] + public enum THREAD_AFFINITY : long // avoid ulong for Bolt compatibility + { + /* Platform agnostic thread groupings */ + GROUP_DEFAULT = 0x4000000000000000, + GROUP_A = 0x4000000000000001, + GROUP_B = 0x4000000000000002, + GROUP_C = 0x4000000000000003, + + /* Thread defaults */ + MIXER = GROUP_A, + FEEDER = GROUP_C, + STREAM = GROUP_C, + FILE = GROUP_C, + NONBLOCKING = GROUP_C, + RECORD = GROUP_C, + GEOMETRY = GROUP_C, + PROFILER = GROUP_C, + STUDIO_UPDATE = GROUP_B, + STUDIO_LOAD_BANK = GROUP_C, + STUDIO_LOAD_SAMPLE = GROUP_C, + CONVOLUTION1 = GROUP_C, + CONVOLUTION2 = GROUP_C, + + /* Core mask, valid up to 1 << 61 */ + CORE_ALL = 0, + CORE_0 = 1 << 0, + CORE_1 = 1 << 1, + CORE_2 = 1 << 2, + CORE_3 = 1 << 3, + CORE_4 = 1 << 4, + CORE_5 = 1 << 5, + CORE_6 = 1 << 6, + CORE_7 = 1 << 7, + CORE_8 = 1 << 8, + CORE_9 = 1 << 9, + CORE_10 = 1 << 10, + CORE_11 = 1 << 11, + CORE_12 = 1 << 12, + CORE_13 = 1 << 13, + CORE_14 = 1 << 14, + CORE_15 = 1 << 15 + } + + public enum THREAD_TYPE : int + { + MIXER, + FEEDER, + STREAM, + FILE, + NONBLOCKING, + RECORD, + GEOMETRY, + PROFILER, + STUDIO_UPDATE, + STUDIO_LOAD_BANK, + STUDIO_LOAD_SAMPLE, + CONVOLUTION1, + CONVOLUTION2, + + MAX + } + + /* + FMOD System factory functions. Use this to create an FMOD System Instance. below you will see System init/close to get started. + */ + public struct Factory + { + public static RESULT System_Create(out System system) + { + return FMOD5_System_Create(out system.handle); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Create(out IntPtr system); + + #endregion + } + + /* + FMOD global system functions (optional). + */ + public struct Memory + { + public static RESULT Initialize(IntPtr poolmem, int poollen, MEMORY_ALLOC_CALLBACK useralloc, MEMORY_REALLOC_CALLBACK userrealloc, MEMORY_FREE_CALLBACK userfree, MEMORY_TYPE memtypeflags = MEMORY_TYPE.ALL) + { + return FMOD5_Memory_Initialize(poolmem, poollen, useralloc, userrealloc, userfree, memtypeflags); + } + + public static RESULT GetStats(out int currentalloced, out int maxalloced, bool blocking = true) + { + return FMOD5_Memory_GetStats(out currentalloced, out maxalloced, blocking); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Memory_Initialize(IntPtr poolmem, int poollen, MEMORY_ALLOC_CALLBACK useralloc, MEMORY_REALLOC_CALLBACK userrealloc, MEMORY_FREE_CALLBACK userfree, MEMORY_TYPE memtypeflags); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Memory_GetStats (out int currentalloced, out int maxalloced, bool blocking); + + #endregion + } + + public struct Debug + { + public static RESULT Initialize(DEBUG_FLAGS flags, DEBUG_MODE mode = DEBUG_MODE.TTY, DEBUG_CALLBACK callback = null, string filename = null) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_Debug_Initialize(flags, mode, callback, encoder.byteFromStringUTF8(filename)); + } + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Debug_Initialize(DEBUG_FLAGS flags, DEBUG_MODE mode, DEBUG_CALLBACK callback, byte[] filename); + + #endregion + } + + public struct Thread + { + public static RESULT SetAttributes(THREAD_TYPE type, THREAD_AFFINITY affinity = THREAD_AFFINITY.GROUP_DEFAULT, THREAD_PRIORITY priority = THREAD_PRIORITY.DEFAULT, THREAD_STACK_SIZE stacksize = THREAD_STACK_SIZE.DEFAULT) + { + if ((affinity & THREAD_AFFINITY.GROUP_DEFAULT) != 0) + { + affinity &= ~THREAD_AFFINITY.GROUP_DEFAULT; + affinity = (THREAD_AFFINITY)(((ulong)affinity) | 0x8000000000000000); + } + return FMOD5_Thread_SetAttributes(type, affinity, priority, stacksize); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Thread_SetAttributes(THREAD_TYPE type, THREAD_AFFINITY affinity, THREAD_PRIORITY priority, THREAD_STACK_SIZE stacksize); + #endregion + } + + /* + 'System' API. + */ + public struct System + { + public RESULT release() + { + return FMOD5_System_Release(this.handle); + } + + // Setup functions. + public RESULT setOutput(OUTPUTTYPE output) + { + return FMOD5_System_SetOutput(this.handle, output); + } + public RESULT getOutput(out OUTPUTTYPE output) + { + return FMOD5_System_GetOutput(this.handle, out output); + } + public RESULT getNumDrivers(out int numdrivers) + { + return FMOD5_System_GetNumDrivers(this.handle, out numdrivers); + } + public RESULT getDriverInfo(int id, out string name, int namelen, out Guid guid, out int systemrate, out SPEAKERMODE speakermode, out int speakermodechannels) + { + IntPtr stringMem = Marshal.AllocHGlobal(namelen); + + RESULT result = FMOD5_System_GetDriverInfo(this.handle, id, stringMem, namelen, out guid, out systemrate, out speakermode, out speakermodechannels); + using (StringHelper.ThreadSafeEncoding encoding = StringHelper.GetFreeHelper()) + { + name = encoding.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT getDriverInfo(int id, out Guid guid, out int systemrate, out SPEAKERMODE speakermode, out int speakermodechannels) + { + return FMOD5_System_GetDriverInfo(this.handle, id, IntPtr.Zero, 0, out guid, out systemrate, out speakermode, out speakermodechannels); + } + public RESULT setDriver(int driver) + { + return FMOD5_System_SetDriver(this.handle, driver); + } + public RESULT getDriver(out int driver) + { + return FMOD5_System_GetDriver(this.handle, out driver); + } + public RESULT setSoftwareChannels(int numsoftwarechannels) + { + return FMOD5_System_SetSoftwareChannels(this.handle, numsoftwarechannels); + } + public RESULT getSoftwareChannels(out int numsoftwarechannels) + { + return FMOD5_System_GetSoftwareChannels(this.handle, out numsoftwarechannels); + } + public RESULT setSoftwareFormat(int samplerate, SPEAKERMODE speakermode, int numrawspeakers) + { + return FMOD5_System_SetSoftwareFormat(this.handle, samplerate, speakermode, numrawspeakers); + } + public RESULT getSoftwareFormat(out int samplerate, out SPEAKERMODE speakermode, out int numrawspeakers) + { + return FMOD5_System_GetSoftwareFormat(this.handle, out samplerate, out speakermode, out numrawspeakers); + } + public RESULT setDSPBufferSize(uint bufferlength, int numbuffers) + { + return FMOD5_System_SetDSPBufferSize(this.handle, bufferlength, numbuffers); + } + public RESULT getDSPBufferSize(out uint bufferlength, out int numbuffers) + { + return FMOD5_System_GetDSPBufferSize(this.handle, out bufferlength, out numbuffers); + } + public RESULT setFileSystem(FILE_OPEN_CALLBACK useropen, FILE_CLOSE_CALLBACK userclose, FILE_READ_CALLBACK userread, FILE_SEEK_CALLBACK userseek, FILE_ASYNCREAD_CALLBACK userasyncread, FILE_ASYNCCANCEL_CALLBACK userasynccancel, int blockalign) + { + return FMOD5_System_SetFileSystem(this.handle, useropen, userclose, userread, userseek, userasyncread, userasynccancel, blockalign); + } + public RESULT attachFileSystem(FILE_OPEN_CALLBACK useropen, FILE_CLOSE_CALLBACK userclose, FILE_READ_CALLBACK userread, FILE_SEEK_CALLBACK userseek) + { + return FMOD5_System_AttachFileSystem(this.handle, useropen, userclose, userread, userseek); + } + public RESULT setAdvancedSettings(ref ADVANCEDSETTINGS settings) + { + settings.cbSize = Marshal.SizeOf(settings); + return FMOD5_System_SetAdvancedSettings(this.handle, ref settings); + } + public RESULT getAdvancedSettings(ref ADVANCEDSETTINGS settings) + { + settings.cbSize = Marshal.SizeOf(settings); + return FMOD5_System_GetAdvancedSettings(this.handle, ref settings); + } + public RESULT setCallback(SYSTEM_CALLBACK callback, SYSTEM_CALLBACK_TYPE callbackmask = SYSTEM_CALLBACK_TYPE.ALL) + { + return FMOD5_System_SetCallback(this.handle, callback, callbackmask); + } + + // Plug-in support. + public RESULT setPluginPath(string path) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_SetPluginPath(this.handle, encoder.byteFromStringUTF8(path)); + } + } + public RESULT loadPlugin(string filename, out uint handle, uint priority = 0) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_LoadPlugin(this.handle, encoder.byteFromStringUTF8(filename), out handle, priority); + } + } + public RESULT unloadPlugin(uint handle) + { + return FMOD5_System_UnloadPlugin(this.handle, handle); + } + public RESULT getNumNestedPlugins(uint handle, out int count) + { + return FMOD5_System_GetNumNestedPlugins(this.handle, handle, out count); + } + public RESULT getNestedPlugin(uint handle, int index, out uint nestedhandle) + { + return FMOD5_System_GetNestedPlugin(this.handle, handle, index, out nestedhandle); + } + public RESULT getNumPlugins(PLUGINTYPE plugintype, out int numplugins) + { + return FMOD5_System_GetNumPlugins(this.handle, plugintype, out numplugins); + } + public RESULT getPluginHandle(PLUGINTYPE plugintype, int index, out uint handle) + { + return FMOD5_System_GetPluginHandle(this.handle, plugintype, index, out handle); + } + public RESULT getPluginInfo(uint handle, out PLUGINTYPE plugintype, out string name, int namelen, out uint version) + { + IntPtr stringMem = Marshal.AllocHGlobal(namelen); + + RESULT result = FMOD5_System_GetPluginInfo(this.handle, handle, out plugintype, stringMem, namelen, out version); + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + name = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT getPluginInfo(uint handle, out PLUGINTYPE plugintype, out uint version) + { + return FMOD5_System_GetPluginInfo(this.handle, handle, out plugintype, IntPtr.Zero, 0, out version); + } + public RESULT setOutputByPlugin(uint handle) + { + return FMOD5_System_SetOutputByPlugin(this.handle, handle); + } + public RESULT getOutputByPlugin(out uint handle) + { + return FMOD5_System_GetOutputByPlugin(this.handle, out handle); + } + public RESULT createDSPByPlugin(uint handle, out DSP dsp) + { + return FMOD5_System_CreateDSPByPlugin(this.handle, handle, out dsp.handle); + } + public RESULT getDSPInfoByPlugin(uint handle, out IntPtr description) + { + return FMOD5_System_GetDSPInfoByPlugin(this.handle, handle, out description); + } + /* + public RESULT registerCodec (ref CODEC_DESCRIPTION description, out uint handle, uint priority) + public RESULT registerCodec (ref CODEC_DESCRIPTION description, out uint handle, uint priority = 0) + public RESULT registerCodec(ref CODEC_DESCRIPTION description, out uint handle, uint priority) + { + return FMOD5_System_RegisterCodec(this.handle, ref description, out handle, priority); + } + */ + public RESULT registerDSP(ref DSP_DESCRIPTION description, out uint handle) + { + return FMOD5_System_RegisterDSP(this.handle, ref description, out handle); + } + /* + public RESULT registerOutput(ref OUTPUT_DESCRIPTION description, out uint handle) + { + return FMOD5_System_RegisterOutput(this.handle, ref description, out handle); + } + */ + + // Init/Close. + public RESULT init(int maxchannels, INITFLAGS flags, IntPtr extradriverdata) + { + return FMOD5_System_Init(this.handle, maxchannels, flags, extradriverdata); + } + public RESULT close() + { + return FMOD5_System_Close(this.handle); + } + + // General post-init system functions. + public RESULT update() + { + return FMOD5_System_Update(this.handle); + } + public RESULT setSpeakerPosition(SPEAKER speaker, float x, float y, bool active) + { + return FMOD5_System_SetSpeakerPosition(this.handle, speaker, x, y, active); + } + public RESULT getSpeakerPosition(SPEAKER speaker, out float x, out float y, out bool active) + { + return FMOD5_System_GetSpeakerPosition(this.handle, speaker, out x, out y, out active); + } + public RESULT setStreamBufferSize(uint filebuffersize, TIMEUNIT filebuffersizetype) + { + return FMOD5_System_SetStreamBufferSize(this.handle, filebuffersize, filebuffersizetype); + } + public RESULT getStreamBufferSize(out uint filebuffersize, out TIMEUNIT filebuffersizetype) + { + return FMOD5_System_GetStreamBufferSize(this.handle, out filebuffersize, out filebuffersizetype); + } + public RESULT set3DSettings(float dopplerscale, float distancefactor, float rolloffscale) + { + return FMOD5_System_Set3DSettings(this.handle, dopplerscale, distancefactor, rolloffscale); + } + public RESULT get3DSettings(out float dopplerscale, out float distancefactor, out float rolloffscale) + { + return FMOD5_System_Get3DSettings(this.handle, out dopplerscale, out distancefactor, out rolloffscale); + } + public RESULT set3DNumListeners(int numlisteners) + { + return FMOD5_System_Set3DNumListeners(this.handle, numlisteners); + } + public RESULT get3DNumListeners(out int numlisteners) + { + return FMOD5_System_Get3DNumListeners(this.handle, out numlisteners); + } + public RESULT set3DListenerAttributes(int listener, ref VECTOR pos, ref VECTOR vel, ref VECTOR forward, ref VECTOR up) + { + return FMOD5_System_Set3DListenerAttributes(this.handle, listener, ref pos, ref vel, ref forward, ref up); + } + public RESULT get3DListenerAttributes(int listener, out VECTOR pos, out VECTOR vel, out VECTOR forward, out VECTOR up) + { + return FMOD5_System_Get3DListenerAttributes(this.handle, listener, out pos, out vel, out forward, out up); + } + public RESULT set3DRolloffCallback(CB_3D_ROLLOFF_CALLBACK callback) + { + return FMOD5_System_Set3DRolloffCallback(this.handle, callback); + } + public RESULT mixerSuspend() + { + return FMOD5_System_MixerSuspend(this.handle); + } + public RESULT mixerResume() + { + return FMOD5_System_MixerResume(this.handle); + } + public RESULT getDefaultMixMatrix(SPEAKERMODE sourcespeakermode, SPEAKERMODE targetspeakermode, float[] matrix, int matrixhop) + { + return FMOD5_System_GetDefaultMixMatrix(this.handle, sourcespeakermode, targetspeakermode, matrix, matrixhop); + } + public RESULT getSpeakerModeChannels(SPEAKERMODE mode, out int channels) + { + return FMOD5_System_GetSpeakerModeChannels(this.handle, mode, out channels); + } + + // System information functions. + public RESULT getVersion(out uint version) + { + return FMOD5_System_GetVersion(this.handle, out version); + } + public RESULT getOutputHandle(out IntPtr handle) + { + return FMOD5_System_GetOutputHandle(this.handle, out handle); + } + public RESULT getChannelsPlaying(out int channels) + { + return FMOD5_System_GetChannelsPlaying(this.handle, out channels, IntPtr.Zero); + } + public RESULT getChannelsPlaying(out int channels, out int realchannels) + { + return FMOD5_System_GetChannelsPlaying(this.handle, out channels, out realchannels); + } + public RESULT getCPUUsage(out float dsp, out float stream, out float geometry, out float update, out float total) + { + return FMOD5_System_GetCPUUsage(this.handle, out dsp, out stream, out geometry, out update, out total); + } + public RESULT getCPUUsageEx(out float convolutionThread1, out float convolutionThread2) + { + return FMOD5_System_GetCPUUsageEx(this.handle, out convolutionThread1, out convolutionThread2); + } + public RESULT getFileUsage(out Int64 sampleBytesRead, out Int64 streamBytesRead, out Int64 otherBytesRead) + { + return FMOD5_System_GetFileUsage(this.handle, out sampleBytesRead, out streamBytesRead, out otherBytesRead); + } + + // Sound/DSP/Channel/FX creation and retrieval. + public RESULT createSound(string name, MODE mode, ref CREATESOUNDEXINFO exinfo, out Sound sound) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_CreateSound(this.handle, encoder.byteFromStringUTF8(name), mode, ref exinfo, out sound.handle); + } + } + public RESULT createSound(byte[] data, MODE mode, ref CREATESOUNDEXINFO exinfo, out Sound sound) + { + return FMOD5_System_CreateSound(this.handle, data, mode, ref exinfo, out sound.handle); + } + public RESULT createSound(IntPtr name_or_data, MODE mode, ref CREATESOUNDEXINFO exinfo, out Sound sound) + { + return FMOD5_System_CreateSound(this.handle, name_or_data, mode, ref exinfo, out sound.handle); + } + public RESULT createSound(string name, MODE mode, out Sound sound) + { + CREATESOUNDEXINFO exinfo = new CREATESOUNDEXINFO(); + exinfo.cbsize = Marshal.SizeOf(exinfo); + + return createSound(name, mode, ref exinfo, out sound); + } + public RESULT createStream(string name, MODE mode, ref CREATESOUNDEXINFO exinfo, out Sound sound) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_CreateStream(this.handle, encoder.byteFromStringUTF8(name), mode, ref exinfo, out sound.handle); + } + } + public RESULT createStream(byte[] data, MODE mode, ref CREATESOUNDEXINFO exinfo, out Sound sound) + { + return FMOD5_System_CreateStream(this.handle, data, mode, ref exinfo, out sound.handle); + } + public RESULT createStream(IntPtr name_or_data, MODE mode, ref CREATESOUNDEXINFO exinfo, out Sound sound) + { + return FMOD5_System_CreateStream(this.handle, name_or_data, mode, ref exinfo, out sound.handle); + } + public RESULT createStream(string name, MODE mode, out Sound sound) + { + CREATESOUNDEXINFO exinfo = new CREATESOUNDEXINFO(); + exinfo.cbsize = Marshal.SizeOf(exinfo); + + return createStream(name, mode, ref exinfo, out sound); + } + public RESULT createDSP(ref DSP_DESCRIPTION description, out DSP dsp) + { + return FMOD5_System_CreateDSP(this.handle, ref description, out dsp.handle); + } + public RESULT createDSPByType(DSP_TYPE type, out DSP dsp) + { + return FMOD5_System_CreateDSPByType(this.handle, type, out dsp.handle); + } + public RESULT createChannelGroup(string name, out ChannelGroup channelgroup) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_CreateChannelGroup(this.handle, encoder.byteFromStringUTF8(name), out channelgroup.handle); + } + } + public RESULT createSoundGroup(string name, out SoundGroup soundgroup) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_CreateSoundGroup(this.handle, encoder.byteFromStringUTF8(name), out soundgroup.handle); + } + } + public RESULT createReverb3D(out Reverb3D reverb) + { + return FMOD5_System_CreateReverb3D(this.handle, out reverb.handle); + } + public RESULT playSound(Sound sound, ChannelGroup channelgroup, bool paused, out Channel channel) + { + return FMOD5_System_PlaySound(this.handle, sound.handle, channelgroup.handle, paused, out channel.handle); + } + public RESULT playDSP(DSP dsp, ChannelGroup channelgroup, bool paused, out Channel channel) + { + return FMOD5_System_PlayDSP(this.handle, dsp.handle, channelgroup.handle, paused, out channel.handle); + } + public RESULT getChannel(int channelid, out Channel channel) + { + return FMOD5_System_GetChannel(this.handle, channelid, out channel.handle); + } + public RESULT getDSPInfoByType(DSP_TYPE type, out IntPtr description) + { + return FMOD5_System_GetDSPInfoByType(this.handle, type, out description); + } + public RESULT getMasterChannelGroup(out ChannelGroup channelgroup) + { + return FMOD5_System_GetMasterChannelGroup(this.handle, out channelgroup.handle); + } + public RESULT getMasterSoundGroup(out SoundGroup soundgroup) + { + return FMOD5_System_GetMasterSoundGroup(this.handle, out soundgroup.handle); + } + + // Routing to ports. + public RESULT attachChannelGroupToPort(uint portType, ulong portIndex, ChannelGroup channelgroup, bool passThru = false) + { + return FMOD5_System_AttachChannelGroupToPort(this.handle, portType, portIndex, channelgroup.handle, passThru); + } + public RESULT detachChannelGroupFromPort(ChannelGroup channelgroup) + { + return FMOD5_System_DetachChannelGroupFromPort(this.handle, channelgroup.handle); + } + + // Reverb api. + public RESULT setReverbProperties(int instance, ref REVERB_PROPERTIES prop) + { + return FMOD5_System_SetReverbProperties(this.handle, instance, ref prop); + } + public RESULT getReverbProperties(int instance, out REVERB_PROPERTIES prop) + { + return FMOD5_System_GetReverbProperties(this.handle, instance, out prop); + } + + // System level DSP functionality. + public RESULT lockDSP() + { + return FMOD5_System_LockDSP(this.handle); + } + public RESULT unlockDSP() + { + return FMOD5_System_UnlockDSP(this.handle); + } + + // Recording api + public RESULT getRecordNumDrivers(out int numdrivers, out int numconnected) + { + return FMOD5_System_GetRecordNumDrivers(this.handle, out numdrivers, out numconnected); + } + public RESULT getRecordDriverInfo(int id, out string name, int namelen, out Guid guid, out int systemrate, out SPEAKERMODE speakermode, out int speakermodechannels, out DRIVER_STATE state) + { + IntPtr stringMem = Marshal.AllocHGlobal(namelen); + + RESULT result = FMOD5_System_GetRecordDriverInfo(this.handle, id, stringMem, namelen, out guid, out systemrate, out speakermode, out speakermodechannels, out state); + + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + name = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT getRecordDriverInfo(int id, out Guid guid, out int systemrate, out SPEAKERMODE speakermode, out int speakermodechannels, out DRIVER_STATE state) + { + return FMOD5_System_GetRecordDriverInfo(this.handle, id, IntPtr.Zero, 0, out guid, out systemrate, out speakermode, out speakermodechannels, out state); + } + public RESULT getRecordPosition(int id, out uint position) + { + return FMOD5_System_GetRecordPosition(this.handle, id, out position); + } + public RESULT recordStart(int id, Sound sound, bool loop) + { + return FMOD5_System_RecordStart(this.handle, id, sound.handle, loop); + } + public RESULT recordStop(int id) + { + return FMOD5_System_RecordStop(this.handle, id); + } + public RESULT isRecording(int id, out bool recording) + { + return FMOD5_System_IsRecording(this.handle, id, out recording); + } + + // Geometry api + public RESULT createGeometry(int maxpolygons, int maxvertices, out Geometry geometry) + { + return FMOD5_System_CreateGeometry(this.handle, maxpolygons, maxvertices, out geometry.handle); + } + public RESULT setGeometrySettings(float maxworldsize) + { + return FMOD5_System_SetGeometrySettings(this.handle, maxworldsize); + } + public RESULT getGeometrySettings(out float maxworldsize) + { + return FMOD5_System_GetGeometrySettings(this.handle, out maxworldsize); + } + public RESULT loadGeometry(IntPtr data, int datasize, out Geometry geometry) + { + return FMOD5_System_LoadGeometry(this.handle, data, datasize, out geometry.handle); + } + public RESULT getGeometryOcclusion(ref VECTOR listener, ref VECTOR source, out float direct, out float reverb) + { + return FMOD5_System_GetGeometryOcclusion(this.handle, ref listener, ref source, out direct, out reverb); + } + + // Network functions + public RESULT setNetworkProxy(string proxy) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_SetNetworkProxy(this.handle, encoder.byteFromStringUTF8(proxy)); + } + } + public RESULT getNetworkProxy(out string proxy, int proxylen) + { + IntPtr stringMem = Marshal.AllocHGlobal(proxylen); + + RESULT result = FMOD5_System_GetNetworkProxy(this.handle, stringMem, proxylen); + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + proxy = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT setNetworkTimeout(int timeout) + { + return FMOD5_System_SetNetworkTimeout(this.handle, timeout); + } + public RESULT getNetworkTimeout(out int timeout) + { + return FMOD5_System_GetNetworkTimeout(this.handle, out timeout); + } + + // Userdata set/get + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_System_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_System_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Release (IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetOutput (IntPtr system, OUTPUTTYPE output); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetOutput (IntPtr system, out OUTPUTTYPE output); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetNumDrivers (IntPtr system, out int numdrivers); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetDriverInfo (IntPtr system, int id, IntPtr name, int namelen, out Guid guid, out int systemrate, out SPEAKERMODE speakermode, out int speakermodechannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetDriver (IntPtr system, int driver); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetDriver (IntPtr system, out int driver); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetSoftwareChannels (IntPtr system, int numsoftwarechannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetSoftwareChannels (IntPtr system, out int numsoftwarechannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetSoftwareFormat (IntPtr system, int samplerate, SPEAKERMODE speakermode, int numrawspeakers); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetSoftwareFormat (IntPtr system, out int samplerate, out SPEAKERMODE speakermode, out int numrawspeakers); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetDSPBufferSize (IntPtr system, uint bufferlength, int numbuffers); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetDSPBufferSize (IntPtr system, out uint bufferlength, out int numbuffers); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetFileSystem (IntPtr system, FILE_OPEN_CALLBACK useropen, FILE_CLOSE_CALLBACK userclose, FILE_READ_CALLBACK userread, FILE_SEEK_CALLBACK userseek, FILE_ASYNCREAD_CALLBACK userasyncread, FILE_ASYNCCANCEL_CALLBACK userasynccancel, int blockalign); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_AttachFileSystem (IntPtr system, FILE_OPEN_CALLBACK useropen, FILE_CLOSE_CALLBACK userclose, FILE_READ_CALLBACK userread, FILE_SEEK_CALLBACK userseek); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetAdvancedSettings (IntPtr system, ref ADVANCEDSETTINGS settings); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetAdvancedSettings (IntPtr system, ref ADVANCEDSETTINGS settings); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetCallback (IntPtr system, SYSTEM_CALLBACK callback, SYSTEM_CALLBACK_TYPE callbackmask); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetPluginPath (IntPtr system, byte[] path); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_LoadPlugin (IntPtr system, byte[] filename, out uint handle, uint priority); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_UnloadPlugin (IntPtr system, uint handle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetNumNestedPlugins (IntPtr system, uint handle, out int count); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetNestedPlugin (IntPtr system, uint handle, int index, out uint nestedhandle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetNumPlugins (IntPtr system, PLUGINTYPE plugintype, out int numplugins); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetPluginHandle (IntPtr system, PLUGINTYPE plugintype, int index, out uint handle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetPluginInfo (IntPtr system, uint handle, out PLUGINTYPE plugintype, IntPtr name, int namelen, out uint version); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetOutputByPlugin (IntPtr system, uint handle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetOutputByPlugin (IntPtr system, out uint handle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateDSPByPlugin (IntPtr system, uint handle, out IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetDSPInfoByPlugin (IntPtr system, uint handle, out IntPtr description); + //[DllImport(VERSION.dll)] + //private static extern RESULT FMOD5_System_RegisterCodec (IntPtr system, out CODEC_DESCRIPTION description, out uint handle, uint priority); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_RegisterDSP (IntPtr system, ref DSP_DESCRIPTION description, out uint handle); + //[DllImport(VERSION.dll)] + //private static extern RESULT FMOD5_System_RegisterOutput (IntPtr system, ref OUTPUT_DESCRIPTION description, out uint handle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Init (IntPtr system, int maxchannels, INITFLAGS flags, IntPtr extradriverdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Close (IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Update (IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetSpeakerPosition (IntPtr system, SPEAKER speaker, float x, float y, bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetSpeakerPosition (IntPtr system, SPEAKER speaker, out float x, out float y, out bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetStreamBufferSize (IntPtr system, uint filebuffersize, TIMEUNIT filebuffersizetype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetStreamBufferSize (IntPtr system, out uint filebuffersize, out TIMEUNIT filebuffersizetype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Set3DSettings (IntPtr system, float dopplerscale, float distancefactor, float rolloffscale); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Get3DSettings (IntPtr system, out float dopplerscale, out float distancefactor, out float rolloffscale); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Set3DNumListeners (IntPtr system, int numlisteners); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Get3DNumListeners (IntPtr system, out int numlisteners); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Set3DListenerAttributes (IntPtr system, int listener, ref VECTOR pos, ref VECTOR vel, ref VECTOR forward, ref VECTOR up); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Get3DListenerAttributes (IntPtr system, int listener, out VECTOR pos, out VECTOR vel, out VECTOR forward, out VECTOR up); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_Set3DRolloffCallback (IntPtr system, CB_3D_ROLLOFF_CALLBACK callback); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_MixerSuspend (IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_MixerResume (IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetDefaultMixMatrix (IntPtr system, SPEAKERMODE sourcespeakermode, SPEAKERMODE targetspeakermode, float[] matrix, int matrixhop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetSpeakerModeChannels (IntPtr system, SPEAKERMODE mode, out int channels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetVersion (IntPtr system, out uint version); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetOutputHandle (IntPtr system, out IntPtr handle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetChannelsPlaying (IntPtr system, out int channels, IntPtr zero); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetChannelsPlaying (IntPtr system, out int channels, out int realchannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetCPUUsage (IntPtr system, out float dsp, out float stream, out float geometry, out float update, out float total); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetCPUUsageEx (IntPtr system, out float convolutionThread1, out float convolutionThread2); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetFileUsage (IntPtr system, out Int64 sampleBytesRead, out Int64 streamBytesRead, out Int64 otherBytesRead); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateSound (IntPtr system, byte[] name_or_data, MODE mode, ref CREATESOUNDEXINFO exinfo, out IntPtr sound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateSound (IntPtr system, IntPtr name_or_data, MODE mode, ref CREATESOUNDEXINFO exinfo, out IntPtr sound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateStream (IntPtr system, byte[] name_or_data, MODE mode, ref CREATESOUNDEXINFO exinfo, out IntPtr sound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateStream (IntPtr system, IntPtr name_or_data, MODE mode, ref CREATESOUNDEXINFO exinfo, out IntPtr sound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateDSP (IntPtr system, ref DSP_DESCRIPTION description, out IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateDSPByType (IntPtr system, DSP_TYPE type, out IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateChannelGroup (IntPtr system, byte[] name, out IntPtr channelgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateSoundGroup (IntPtr system, byte[] name, out IntPtr soundgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateReverb3D (IntPtr system, out IntPtr reverb); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_PlaySound (IntPtr system, IntPtr sound, IntPtr channelgroup, bool paused, out IntPtr channel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_PlayDSP (IntPtr system, IntPtr dsp, IntPtr channelgroup, bool paused, out IntPtr channel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetChannel (IntPtr system, int channelid, out IntPtr channel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetDSPInfoByType (IntPtr system, DSP_TYPE type, out IntPtr description); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetMasterChannelGroup (IntPtr system, out IntPtr channelgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetMasterSoundGroup (IntPtr system, out IntPtr soundgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_AttachChannelGroupToPort (IntPtr system, uint portType, ulong portIndex, IntPtr channelgroup, bool passThru); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_DetachChannelGroupFromPort(IntPtr system, IntPtr channelgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetReverbProperties (IntPtr system, int instance, ref REVERB_PROPERTIES prop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetReverbProperties (IntPtr system, int instance, out REVERB_PROPERTIES prop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_LockDSP (IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_UnlockDSP (IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetRecordNumDrivers (IntPtr system, out int numdrivers, out int numconnected); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetRecordDriverInfo (IntPtr system, int id, IntPtr name, int namelen, out Guid guid, out int systemrate, out SPEAKERMODE speakermode, out int speakermodechannels, out DRIVER_STATE state); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetRecordPosition (IntPtr system, int id, out uint position); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_RecordStart (IntPtr system, int id, IntPtr sound, bool loop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_RecordStop (IntPtr system, int id); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_IsRecording (IntPtr system, int id, out bool recording); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_CreateGeometry (IntPtr system, int maxpolygons, int maxvertices, out IntPtr geometry); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetGeometrySettings (IntPtr system, float maxworldsize); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetGeometrySettings (IntPtr system, out float maxworldsize); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_LoadGeometry (IntPtr system, IntPtr data, int datasize, out IntPtr geometry); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetGeometryOcclusion (IntPtr system, ref VECTOR listener, ref VECTOR source, out float direct, out float reverb); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetNetworkProxy (IntPtr system, byte[] proxy); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetNetworkProxy (IntPtr system, IntPtr proxy, int proxylen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetNetworkTimeout (IntPtr system, int timeout); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetNetworkTimeout (IntPtr system, out int timeout); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_SetUserData (IntPtr system, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetUserData (IntPtr system, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public System(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + + /* + 'Sound' API. + */ + public struct Sound + { + public RESULT release() + { + return FMOD5_Sound_Release(this.handle); + } + public RESULT getSystemObject(out System system) + { + return FMOD5_Sound_GetSystemObject(this.handle, out system.handle); + } + + // Standard sound manipulation functions. + public RESULT @lock(uint offset, uint length, out IntPtr ptr1, out IntPtr ptr2, out uint len1, out uint len2) + { + return FMOD5_Sound_Lock(this.handle, offset, length, out ptr1, out ptr2, out len1, out len2); + } + public RESULT unlock(IntPtr ptr1, IntPtr ptr2, uint len1, uint len2) + { + return FMOD5_Sound_Unlock(this.handle, ptr1, ptr2, len1, len2); + } + public RESULT setDefaults(float frequency, int priority) + { + return FMOD5_Sound_SetDefaults(this.handle, frequency, priority); + } + public RESULT getDefaults(out float frequency, out int priority) + { + return FMOD5_Sound_GetDefaults(this.handle, out frequency, out priority); + } + public RESULT set3DMinMaxDistance(float min, float max) + { + return FMOD5_Sound_Set3DMinMaxDistance(this.handle, min, max); + } + public RESULT get3DMinMaxDistance(out float min, out float max) + { + return FMOD5_Sound_Get3DMinMaxDistance(this.handle, out min, out max); + } + public RESULT set3DConeSettings(float insideconeangle, float outsideconeangle, float outsidevolume) + { + return FMOD5_Sound_Set3DConeSettings(this.handle, insideconeangle, outsideconeangle, outsidevolume); + } + public RESULT get3DConeSettings(out float insideconeangle, out float outsideconeangle, out float outsidevolume) + { + return FMOD5_Sound_Get3DConeSettings(this.handle, out insideconeangle, out outsideconeangle, out outsidevolume); + } + public RESULT set3DCustomRolloff(ref VECTOR points, int numpoints) + { + return FMOD5_Sound_Set3DCustomRolloff(this.handle, ref points, numpoints); + } + public RESULT get3DCustomRolloff(out IntPtr points, out int numpoints) + { + return FMOD5_Sound_Get3DCustomRolloff(this.handle, out points, out numpoints); + } + + public RESULT getSubSound(int index, out Sound subsound) + { + return FMOD5_Sound_GetSubSound(this.handle, index, out subsound.handle); + } + public RESULT getSubSoundParent(out Sound parentsound) + { + return FMOD5_Sound_GetSubSoundParent(this.handle, out parentsound.handle); + } + public RESULT getName(out string name, int namelen) + { + IntPtr stringMem = Marshal.AllocHGlobal(namelen); + + RESULT result = FMOD5_Sound_GetName(this.handle, stringMem, namelen); + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + name = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT getLength(out uint length, TIMEUNIT lengthtype) + { + return FMOD5_Sound_GetLength(this.handle, out length, lengthtype); + } + public RESULT getFormat(out SOUND_TYPE type, out SOUND_FORMAT format, out int channels, out int bits) + { + return FMOD5_Sound_GetFormat(this.handle, out type, out format, out channels, out bits); + } + public RESULT getNumSubSounds(out int numsubsounds) + { + return FMOD5_Sound_GetNumSubSounds(this.handle, out numsubsounds); + } + public RESULT getNumTags(out int numtags, out int numtagsupdated) + { + return FMOD5_Sound_GetNumTags(this.handle, out numtags, out numtagsupdated); + } + public RESULT getTag(string name, int index, out TAG tag) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_Sound_GetTag(this.handle, encoder.byteFromStringUTF8(name), index, out tag); + } + } + public RESULT getOpenState(out OPENSTATE openstate, out uint percentbuffered, out bool starving, out bool diskbusy) + { + return FMOD5_Sound_GetOpenState(this.handle, out openstate, out percentbuffered, out starving, out diskbusy); + } + public RESULT readData(IntPtr buffer, uint length, out uint read) + { + return FMOD5_Sound_ReadData(this.handle, buffer, length, out read); + } + public RESULT seekData(uint pcm) + { + return FMOD5_Sound_SeekData(this.handle, pcm); + } + public RESULT setSoundGroup(SoundGroup soundgroup) + { + return FMOD5_Sound_SetSoundGroup(this.handle, soundgroup.handle); + } + public RESULT getSoundGroup(out SoundGroup soundgroup) + { + return FMOD5_Sound_GetSoundGroup(this.handle, out soundgroup.handle); + } + + // Synchronization point API. These points can come from markers embedded in wav files, and can also generate channel callbacks. + public RESULT getNumSyncPoints(out int numsyncpoints) + { + return FMOD5_Sound_GetNumSyncPoints(this.handle, out numsyncpoints); + } + public RESULT getSyncPoint(int index, out IntPtr point) + { + return FMOD5_Sound_GetSyncPoint(this.handle, index, out point); + } + public RESULT getSyncPointInfo(IntPtr point, out string name, int namelen, out uint offset, TIMEUNIT offsettype) + { + IntPtr stringMem = Marshal.AllocHGlobal(namelen); + + RESULT result = FMOD5_Sound_GetSyncPointInfo(this.handle, point, stringMem, namelen, out offset, offsettype); + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + name = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT getSyncPointInfo(IntPtr point, out uint offset, TIMEUNIT offsettype) + { + return FMOD5_Sound_GetSyncPointInfo(this.handle, point, IntPtr.Zero, 0, out offset, offsettype); + } + public RESULT addSyncPoint(uint offset, TIMEUNIT offsettype, string name, out IntPtr point) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_Sound_AddSyncPoint(this.handle, offset, offsettype, encoder.byteFromStringUTF8(name), out point); + } + } + public RESULT deleteSyncPoint(IntPtr point) + { + return FMOD5_Sound_DeleteSyncPoint(this.handle, point); + } + + // Functions also in Channel class but here they are the 'default' to save having to change it in Channel all the time. + public RESULT setMode(MODE mode) + { + return FMOD5_Sound_SetMode(this.handle, mode); + } + public RESULT getMode(out MODE mode) + { + return FMOD5_Sound_GetMode(this.handle, out mode); + } + public RESULT setLoopCount(int loopcount) + { + return FMOD5_Sound_SetLoopCount(this.handle, loopcount); + } + public RESULT getLoopCount(out int loopcount) + { + return FMOD5_Sound_GetLoopCount(this.handle, out loopcount); + } + public RESULT setLoopPoints(uint loopstart, TIMEUNIT loopstarttype, uint loopend, TIMEUNIT loopendtype) + { + return FMOD5_Sound_SetLoopPoints(this.handle, loopstart, loopstarttype, loopend, loopendtype); + } + public RESULT getLoopPoints(out uint loopstart, TIMEUNIT loopstarttype, out uint loopend, TIMEUNIT loopendtype) + { + return FMOD5_Sound_GetLoopPoints(this.handle, out loopstart, loopstarttype, out loopend, loopendtype); + } + + // For MOD/S3M/XM/IT/MID sequenced formats only. + public RESULT getMusicNumChannels(out int numchannels) + { + return FMOD5_Sound_GetMusicNumChannels(this.handle, out numchannels); + } + public RESULT setMusicChannelVolume(int channel, float volume) + { + return FMOD5_Sound_SetMusicChannelVolume(this.handle, channel, volume); + } + public RESULT getMusicChannelVolume(int channel, out float volume) + { + return FMOD5_Sound_GetMusicChannelVolume(this.handle, channel, out volume); + } + public RESULT setMusicSpeed(float speed) + { + return FMOD5_Sound_SetMusicSpeed(this.handle, speed); + } + public RESULT getMusicSpeed(out float speed) + { + return FMOD5_Sound_GetMusicSpeed(this.handle, out speed); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_Sound_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_Sound_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Release (IntPtr sound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetSystemObject (IntPtr sound, out IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Lock (IntPtr sound, uint offset, uint length, out IntPtr ptr1, out IntPtr ptr2, out uint len1, out uint len2); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Unlock (IntPtr sound, IntPtr ptr1, IntPtr ptr2, uint len1, uint len2); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetDefaults (IntPtr sound, float frequency, int priority); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetDefaults (IntPtr sound, out float frequency, out int priority); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Set3DMinMaxDistance (IntPtr sound, float min, float max); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Get3DMinMaxDistance (IntPtr sound, out float min, out float max); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Set3DConeSettings (IntPtr sound, float insideconeangle, float outsideconeangle, float outsidevolume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Get3DConeSettings (IntPtr sound, out float insideconeangle, out float outsideconeangle, out float outsidevolume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Set3DCustomRolloff (IntPtr sound, ref VECTOR points, int numpoints); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_Get3DCustomRolloff (IntPtr sound, out IntPtr points, out int numpoints); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetSubSound (IntPtr sound, int index, out IntPtr subsound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetSubSoundParent (IntPtr sound, out IntPtr parentsound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetName (IntPtr sound, IntPtr name, int namelen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetLength (IntPtr sound, out uint length, TIMEUNIT lengthtype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetFormat (IntPtr sound, out SOUND_TYPE type, out SOUND_FORMAT format, out int channels, out int bits); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetNumSubSounds (IntPtr sound, out int numsubsounds); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetNumTags (IntPtr sound, out int numtags, out int numtagsupdated); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetTag (IntPtr sound, byte[] name, int index, out TAG tag); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetOpenState (IntPtr sound, out OPENSTATE openstate, out uint percentbuffered, out bool starving, out bool diskbusy); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_ReadData (IntPtr sound, IntPtr buffer, uint length, out uint read); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SeekData (IntPtr sound, uint pcm); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetSoundGroup (IntPtr sound, IntPtr soundgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetSoundGroup (IntPtr sound, out IntPtr soundgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetNumSyncPoints (IntPtr sound, out int numsyncpoints); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetSyncPoint (IntPtr sound, int index, out IntPtr point); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetSyncPointInfo (IntPtr sound, IntPtr point, IntPtr name, int namelen, out uint offset, TIMEUNIT offsettype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_AddSyncPoint (IntPtr sound, uint offset, TIMEUNIT offsettype, byte[] name, out IntPtr point); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_DeleteSyncPoint (IntPtr sound, IntPtr point); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetMode (IntPtr sound, MODE mode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetMode (IntPtr sound, out MODE mode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetLoopCount (IntPtr sound, int loopcount); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetLoopCount (IntPtr sound, out int loopcount); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetLoopPoints (IntPtr sound, uint loopstart, TIMEUNIT loopstarttype, uint loopend, TIMEUNIT loopendtype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetLoopPoints (IntPtr sound, out uint loopstart, TIMEUNIT loopstarttype, out uint loopend, TIMEUNIT loopendtype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetMusicNumChannels (IntPtr sound, out int numchannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetMusicChannelVolume (IntPtr sound, int channel, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetMusicChannelVolume (IntPtr sound, int channel, out float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetMusicSpeed (IntPtr sound, float speed); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetMusicSpeed (IntPtr sound, out float speed); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_SetUserData (IntPtr sound, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Sound_GetUserData (IntPtr sound, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public Sound(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + /* + 'ChannelControl' API + */ + interface IChannelControl + { + RESULT getSystemObject (out System system); + + // General control functionality for Channels and ChannelGroups. + RESULT stop (); + RESULT setPaused (bool paused); + RESULT getPaused (out bool paused); + RESULT setVolume (float volume); + RESULT getVolume (out float volume); + RESULT setVolumeRamp (bool ramp); + RESULT getVolumeRamp (out bool ramp); + RESULT getAudibility (out float audibility); + RESULT setPitch (float pitch); + RESULT getPitch (out float pitch); + RESULT setMute (bool mute); + RESULT getMute (out bool mute); + RESULT setReverbProperties (int instance, float wet); + RESULT getReverbProperties (int instance, out float wet); + RESULT setLowPassGain (float gain); + RESULT getLowPassGain (out float gain); + RESULT setMode (MODE mode); + RESULT getMode (out MODE mode); + RESULT setCallback (CHANNELCONTROL_CALLBACK callback); + RESULT isPlaying (out bool isplaying); + + // Note all 'set' functions alter a final matrix, this is why the only get function is getMixMatrix, to avoid other get functions returning incorrect/obsolete values. + RESULT setPan (float pan); + RESULT setMixLevelsOutput (float frontleft, float frontright, float center, float lfe, float surroundleft, float surroundright, float backleft, float backright); + RESULT setMixLevelsInput (float[] levels, int numlevels); + RESULT setMixMatrix (float[] matrix, int outchannels, int inchannels, int inchannel_hop); + RESULT getMixMatrix (float[] matrix, out int outchannels, out int inchannels, int inchannel_hop); + + // Clock based functionality. + RESULT getDSPClock (out ulong dspclock, out ulong parentclock); + RESULT setDelay (ulong dspclock_start, ulong dspclock_end, bool stopchannels); + RESULT getDelay (out ulong dspclock_start, out ulong dspclock_end); + RESULT getDelay (out ulong dspclock_start, out ulong dspclock_end, out bool stopchannels); + RESULT addFadePoint (ulong dspclock, float volume); + RESULT setFadePointRamp (ulong dspclock, float volume); + RESULT removeFadePoints (ulong dspclock_start, ulong dspclock_end); + RESULT getFadePoints (ref uint numpoints, ulong[] point_dspclock, float[] point_volume); + + // DSP effects. + RESULT getDSP (int index, out DSP dsp); + RESULT addDSP (int index, DSP dsp); + RESULT removeDSP (DSP dsp); + RESULT getNumDSPs (out int numdsps); + RESULT setDSPIndex (DSP dsp, int index); + RESULT getDSPIndex (DSP dsp, out int index); + + // 3D functionality. + RESULT set3DAttributes (ref VECTOR pos, ref VECTOR vel); + RESULT get3DAttributes (out VECTOR pos, out VECTOR vel); + RESULT set3DMinMaxDistance (float mindistance, float maxdistance); + RESULT get3DMinMaxDistance (out float mindistance, out float maxdistance); + RESULT set3DConeSettings (float insideconeangle, float outsideconeangle, float outsidevolume); + RESULT get3DConeSettings (out float insideconeangle, out float outsideconeangle, out float outsidevolume); + RESULT set3DConeOrientation (ref VECTOR orientation); + RESULT get3DConeOrientation (out VECTOR orientation); + RESULT set3DCustomRolloff (ref VECTOR points, int numpoints); + RESULT get3DCustomRolloff (out IntPtr points, out int numpoints); + RESULT set3DOcclusion (float directocclusion, float reverbocclusion); + RESULT get3DOcclusion (out float directocclusion, out float reverbocclusion); + RESULT set3DSpread (float angle); + RESULT get3DSpread (out float angle); + RESULT set3DLevel (float level); + RESULT get3DLevel (out float level); + RESULT set3DDopplerLevel (float level); + RESULT get3DDopplerLevel (out float level); + RESULT set3DDistanceFilter (bool custom, float customLevel, float centerFreq); + RESULT get3DDistanceFilter (out bool custom, out float customLevel, out float centerFreq); + + // Userdata set/get. + RESULT setUserData (IntPtr userdata); + RESULT getUserData (out IntPtr userdata); + } + + /* + 'Channel' API + */ + public struct Channel : IChannelControl + { + // Channel specific control functionality. + public RESULT setFrequency(float frequency) + { + return FMOD5_Channel_SetFrequency(this.handle, frequency); + } + public RESULT getFrequency(out float frequency) + { + return FMOD5_Channel_GetFrequency(this.handle, out frequency); + } + public RESULT setPriority(int priority) + { + return FMOD5_Channel_SetPriority(this.handle, priority); + } + public RESULT getPriority(out int priority) + { + return FMOD5_Channel_GetPriority(this.handle, out priority); + } + public RESULT setPosition(uint position, TIMEUNIT postype) + { + return FMOD5_Channel_SetPosition(this.handle, position, postype); + } + public RESULT getPosition(out uint position, TIMEUNIT postype) + { + return FMOD5_Channel_GetPosition(this.handle, out position, postype); + } + public RESULT setChannelGroup(ChannelGroup channelgroup) + { + return FMOD5_Channel_SetChannelGroup(this.handle, channelgroup.handle); + } + public RESULT getChannelGroup(out ChannelGroup channelgroup) + { + return FMOD5_Channel_GetChannelGroup(this.handle, out channelgroup.handle); + } + public RESULT setLoopCount(int loopcount) + { + return FMOD5_Channel_SetLoopCount(this.handle, loopcount); + } + public RESULT getLoopCount(out int loopcount) + { + return FMOD5_Channel_GetLoopCount(this.handle, out loopcount); + } + public RESULT setLoopPoints(uint loopstart, TIMEUNIT loopstarttype, uint loopend, TIMEUNIT loopendtype) + { + return FMOD5_Channel_SetLoopPoints(this.handle, loopstart, loopstarttype, loopend, loopendtype); + } + public RESULT getLoopPoints(out uint loopstart, TIMEUNIT loopstarttype, out uint loopend, TIMEUNIT loopendtype) + { + return FMOD5_Channel_GetLoopPoints(this.handle, out loopstart, loopstarttype, out loopend, loopendtype); + } + + // Information only functions. + public RESULT isVirtual(out bool isvirtual) + { + return FMOD5_Channel_IsVirtual(this.handle, out isvirtual); + } + public RESULT getCurrentSound(out Sound sound) + { + return FMOD5_Channel_GetCurrentSound(this.handle, out sound.handle); + } + public RESULT getIndex(out int index) + { + return FMOD5_Channel_GetIndex(this.handle, out index); + } + + public RESULT getSystemObject(out System system) + { + return FMOD5_Channel_GetSystemObject(this.handle, out system.handle); + } + + // General control functionality for Channels and ChannelGroups. + public RESULT stop() + { + return FMOD5_Channel_Stop(this.handle); + } + public RESULT setPaused(bool paused) + { + return FMOD5_Channel_SetPaused(this.handle, paused); + } + public RESULT getPaused(out bool paused) + { + return FMOD5_Channel_GetPaused(this.handle, out paused); + } + public RESULT setVolume(float volume) + { + return FMOD5_Channel_SetVolume(this.handle, volume); + } + public RESULT getVolume(out float volume) + { + return FMOD5_Channel_GetVolume(this.handle, out volume); + } + public RESULT setVolumeRamp(bool ramp) + { + return FMOD5_Channel_SetVolumeRamp(this.handle, ramp); + } + public RESULT getVolumeRamp(out bool ramp) + { + return FMOD5_Channel_GetVolumeRamp(this.handle, out ramp); + } + public RESULT getAudibility(out float audibility) + { + return FMOD5_Channel_GetAudibility(this.handle, out audibility); + } + public RESULT setPitch(float pitch) + { + return FMOD5_Channel_SetPitch(this.handle, pitch); + } + public RESULT getPitch(out float pitch) + { + return FMOD5_Channel_GetPitch(this.handle, out pitch); + } + public RESULT setMute(bool mute) + { + return FMOD5_Channel_SetMute(this.handle, mute); + } + public RESULT getMute(out bool mute) + { + return FMOD5_Channel_GetMute(this.handle, out mute); + } + public RESULT setReverbProperties(int instance, float wet) + { + return FMOD5_Channel_SetReverbProperties(this.handle, instance, wet); + } + public RESULT getReverbProperties(int instance, out float wet) + { + return FMOD5_Channel_GetReverbProperties(this.handle, instance, out wet); + } + public RESULT setLowPassGain(float gain) + { + return FMOD5_Channel_SetLowPassGain(this.handle, gain); + } + public RESULT getLowPassGain(out float gain) + { + return FMOD5_Channel_GetLowPassGain(this.handle, out gain); + } + public RESULT setMode(MODE mode) + { + return FMOD5_Channel_SetMode(this.handle, mode); + } + public RESULT getMode(out MODE mode) + { + return FMOD5_Channel_GetMode(this.handle, out mode); + } + public RESULT setCallback(CHANNELCONTROL_CALLBACK callback) + { + return FMOD5_Channel_SetCallback(this.handle, callback); + } + public RESULT isPlaying(out bool isplaying) + { + return FMOD5_Channel_IsPlaying(this.handle, out isplaying); + } + + // Note all 'set' functions alter a final matrix, this is why the only get function is getMixMatrix, to avoid other get functions returning incorrect/obsolete values. + public RESULT setPan(float pan) + { + return FMOD5_Channel_SetPan(this.handle, pan); + } + public RESULT setMixLevelsOutput(float frontleft, float frontright, float center, float lfe, float surroundleft, float surroundright, float backleft, float backright) + { + return FMOD5_Channel_SetMixLevelsOutput(this.handle, frontleft, frontright, center, lfe, surroundleft, surroundright, backleft, backright); + } + public RESULT setMixLevelsInput(float[] levels, int numlevels) + { + return FMOD5_Channel_SetMixLevelsInput(this.handle, levels, numlevels); + } + public RESULT setMixMatrix(float[] matrix, int outchannels, int inchannels, int inchannel_hop = 0) + { + return FMOD5_Channel_SetMixMatrix(this.handle, matrix, outchannels, inchannels, inchannel_hop); + } + public RESULT getMixMatrix(float[] matrix, out int outchannels, out int inchannels, int inchannel_hop = 0) + { + return FMOD5_Channel_GetMixMatrix(this.handle, matrix, out outchannels, out inchannels, inchannel_hop); + } + + // Clock based functionality. + public RESULT getDSPClock(out ulong dspclock, out ulong parentclock) + { + return FMOD5_Channel_GetDSPClock(this.handle, out dspclock, out parentclock); + } + public RESULT setDelay(ulong dspclock_start, ulong dspclock_end, bool stopchannels = true) + { + return FMOD5_Channel_SetDelay(this.handle, dspclock_start, dspclock_end, stopchannels); + } + public RESULT getDelay(out ulong dspclock_start, out ulong dspclock_end) + { + return FMOD5_Channel_GetDelay(this.handle, out dspclock_start, out dspclock_end, IntPtr.Zero); + } + public RESULT getDelay(out ulong dspclock_start, out ulong dspclock_end, out bool stopchannels) + { + return FMOD5_Channel_GetDelay(this.handle, out dspclock_start, out dspclock_end, out stopchannels); + } + public RESULT addFadePoint(ulong dspclock, float volume) + { + return FMOD5_Channel_AddFadePoint(this.handle, dspclock, volume); + } + public RESULT setFadePointRamp(ulong dspclock, float volume) + { + return FMOD5_Channel_SetFadePointRamp(this.handle, dspclock, volume); + } + public RESULT removeFadePoints(ulong dspclock_start, ulong dspclock_end) + { + return FMOD5_Channel_RemoveFadePoints(this.handle, dspclock_start, dspclock_end); + } + public RESULT getFadePoints(ref uint numpoints, ulong[] point_dspclock, float[] point_volume) + { + return FMOD5_Channel_GetFadePoints(this.handle, ref numpoints, point_dspclock, point_volume); + } + + // DSP effects. + public RESULT getDSP(int index, out DSP dsp) + { + return FMOD5_Channel_GetDSP(this.handle, index, out dsp.handle); + } + public RESULT addDSP(int index, DSP dsp) + { + return FMOD5_Channel_AddDSP(this.handle, index, dsp.handle); + } + public RESULT removeDSP(DSP dsp) + { + return FMOD5_Channel_RemoveDSP(this.handle, dsp.handle); + } + public RESULT getNumDSPs(out int numdsps) + { + return FMOD5_Channel_GetNumDSPs(this.handle, out numdsps); + } + public RESULT setDSPIndex(DSP dsp, int index) + { + return FMOD5_Channel_SetDSPIndex(this.handle, dsp.handle, index); + } + public RESULT getDSPIndex(DSP dsp, out int index) + { + return FMOD5_Channel_GetDSPIndex(this.handle, dsp.handle, out index); + } + + // 3D functionality. + public RESULT set3DAttributes(ref VECTOR pos, ref VECTOR vel) + { + return FMOD5_Channel_Set3DAttributes(this.handle, ref pos, ref vel); + } + public RESULT get3DAttributes(out VECTOR pos, out VECTOR vel) + { + return FMOD5_Channel_Get3DAttributes(this.handle, out pos, out vel); + } + public RESULT set3DMinMaxDistance(float mindistance, float maxdistance) + { + return FMOD5_Channel_Set3DMinMaxDistance(this.handle, mindistance, maxdistance); + } + public RESULT get3DMinMaxDistance(out float mindistance, out float maxdistance) + { + return FMOD5_Channel_Get3DMinMaxDistance(this.handle, out mindistance, out maxdistance); + } + public RESULT set3DConeSettings(float insideconeangle, float outsideconeangle, float outsidevolume) + { + return FMOD5_Channel_Set3DConeSettings(this.handle, insideconeangle, outsideconeangle, outsidevolume); + } + public RESULT get3DConeSettings(out float insideconeangle, out float outsideconeangle, out float outsidevolume) + { + return FMOD5_Channel_Get3DConeSettings(this.handle, out insideconeangle, out outsideconeangle, out outsidevolume); + } + public RESULT set3DConeOrientation(ref VECTOR orientation) + { + return FMOD5_Channel_Set3DConeOrientation(this.handle, ref orientation); + } + public RESULT get3DConeOrientation(out VECTOR orientation) + { + return FMOD5_Channel_Get3DConeOrientation(this.handle, out orientation); + } + public RESULT set3DCustomRolloff(ref VECTOR points, int numpoints) + { + return FMOD5_Channel_Set3DCustomRolloff(this.handle, ref points, numpoints); + } + public RESULT get3DCustomRolloff(out IntPtr points, out int numpoints) + { + return FMOD5_Channel_Get3DCustomRolloff(this.handle, out points, out numpoints); + } + public RESULT set3DOcclusion(float directocclusion, float reverbocclusion) + { + return FMOD5_Channel_Set3DOcclusion(this.handle, directocclusion, reverbocclusion); + } + public RESULT get3DOcclusion(out float directocclusion, out float reverbocclusion) + { + return FMOD5_Channel_Get3DOcclusion(this.handle, out directocclusion, out reverbocclusion); + } + public RESULT set3DSpread(float angle) + { + return FMOD5_Channel_Set3DSpread(this.handle, angle); + } + public RESULT get3DSpread(out float angle) + { + return FMOD5_Channel_Get3DSpread(this.handle, out angle); + } + public RESULT set3DLevel(float level) + { + return FMOD5_Channel_Set3DLevel(this.handle, level); + } + public RESULT get3DLevel(out float level) + { + return FMOD5_Channel_Get3DLevel(this.handle, out level); + } + public RESULT set3DDopplerLevel(float level) + { + return FMOD5_Channel_Set3DDopplerLevel(this.handle, level); + } + public RESULT get3DDopplerLevel(out float level) + { + return FMOD5_Channel_Get3DDopplerLevel(this.handle, out level); + } + public RESULT set3DDistanceFilter(bool custom, float customLevel, float centerFreq) + { + return FMOD5_Channel_Set3DDistanceFilter(this.handle, custom, customLevel, centerFreq); + } + public RESULT get3DDistanceFilter(out bool custom, out float customLevel, out float centerFreq) + { + return FMOD5_Channel_Get3DDistanceFilter(this.handle, out custom, out customLevel, out centerFreq); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_Channel_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_Channel_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetFrequency (IntPtr channel, float frequency); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetFrequency (IntPtr channel, out float frequency); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetPriority (IntPtr channel, int priority); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetPriority (IntPtr channel, out int priority); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetPosition (IntPtr channel, uint position, TIMEUNIT postype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetPosition (IntPtr channel, out uint position, TIMEUNIT postype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetChannelGroup (IntPtr channel, IntPtr channelgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetChannelGroup (IntPtr channel, out IntPtr channelgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetLoopCount (IntPtr channel, int loopcount); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetLoopCount (IntPtr channel, out int loopcount); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetLoopPoints (IntPtr channel, uint loopstart, TIMEUNIT loopstarttype, uint loopend, TIMEUNIT loopendtype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetLoopPoints (IntPtr channel, out uint loopstart, TIMEUNIT loopstarttype, out uint loopend, TIMEUNIT loopendtype); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_IsVirtual (IntPtr channel, out bool isvirtual); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetCurrentSound (IntPtr channel, out IntPtr sound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetIndex (IntPtr channel, out int index); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetSystemObject (IntPtr channel, out IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Stop (IntPtr channel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetPaused (IntPtr channel, bool paused); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetPaused (IntPtr channel, out bool paused); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetVolume (IntPtr channel, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetVolume (IntPtr channel, out float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetVolumeRamp (IntPtr channel, bool ramp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetVolumeRamp (IntPtr channel, out bool ramp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetAudibility (IntPtr channel, out float audibility); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetPitch (IntPtr channel, float pitch); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetPitch (IntPtr channel, out float pitch); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetMute (IntPtr channel, bool mute); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetMute (IntPtr channel, out bool mute); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetReverbProperties (IntPtr channel, int instance, float wet); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetReverbProperties (IntPtr channel, int instance, out float wet); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetLowPassGain (IntPtr channel, float gain); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetLowPassGain (IntPtr channel, out float gain); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetMode (IntPtr channel, MODE mode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetMode (IntPtr channel, out MODE mode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetCallback (IntPtr channel, CHANNELCONTROL_CALLBACK callback); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_IsPlaying (IntPtr channel, out bool isplaying); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetPan (IntPtr channel, float pan); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetMixLevelsOutput (IntPtr channel, float frontleft, float frontright, float center, float lfe, float surroundleft, float surroundright, float backleft, float backright); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetMixLevelsInput (IntPtr channel, float[] levels, int numlevels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetMixMatrix (IntPtr channel, float[] matrix, int outchannels, int inchannels, int inchannel_hop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetMixMatrix (IntPtr channel, float[] matrix, out int outchannels, out int inchannels, int inchannel_hop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetDSPClock (IntPtr channel, out ulong dspclock, out ulong parentclock); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetDelay (IntPtr channel, ulong dspclock_start, ulong dspclock_end, bool stopchannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetDelay (IntPtr channel, out ulong dspclock_start, out ulong dspclock_end, IntPtr zero); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetDelay (IntPtr channel, out ulong dspclock_start, out ulong dspclock_end, out bool stopchannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_AddFadePoint (IntPtr channel, ulong dspclock, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetFadePointRamp (IntPtr channel, ulong dspclock, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_RemoveFadePoints (IntPtr channel, ulong dspclock_start, ulong dspclock_end); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetFadePoints (IntPtr channel, ref uint numpoints, ulong[] point_dspclock, float[] point_volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetDSP (IntPtr channel, int index, out IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_AddDSP (IntPtr channel, int index, IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_RemoveDSP (IntPtr channel, IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetNumDSPs (IntPtr channel, out int numdsps); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetDSPIndex (IntPtr channel, IntPtr dsp, int index); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetDSPIndex (IntPtr channel, IntPtr dsp, out int index); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DAttributes (IntPtr channel, ref VECTOR pos, ref VECTOR vel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DAttributes (IntPtr channel, out VECTOR pos, out VECTOR vel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DMinMaxDistance (IntPtr channel, float mindistance, float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DMinMaxDistance (IntPtr channel, out float mindistance, out float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DConeSettings (IntPtr channel, float insideconeangle, float outsideconeangle, float outsidevolume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DConeSettings (IntPtr channel, out float insideconeangle, out float outsideconeangle, out float outsidevolume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DConeOrientation (IntPtr channel, ref VECTOR orientation); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DConeOrientation (IntPtr channel, out VECTOR orientation); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DCustomRolloff (IntPtr channel, ref VECTOR points, int numpoints); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DCustomRolloff (IntPtr channel, out IntPtr points, out int numpoints); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DOcclusion (IntPtr channel, float directocclusion, float reverbocclusion); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DOcclusion (IntPtr channel, out float directocclusion, out float reverbocclusion); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DSpread (IntPtr channel, float angle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DSpread (IntPtr channel, out float angle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DLevel (IntPtr channel, float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DLevel (IntPtr channel, out float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DDopplerLevel (IntPtr channel, float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DDopplerLevel (IntPtr channel, out float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Set3DDistanceFilter (IntPtr channel, bool custom, float customLevel, float centerFreq); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DDistanceFilter (IntPtr channel, out bool custom, out float customLevel, out float centerFreq); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_SetUserData (IntPtr channel, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_GetUserData (IntPtr channel, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public Channel(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + /* + 'ChannelGroup' API + */ + public struct ChannelGroup : IChannelControl + { + public RESULT release() + { + return FMOD5_ChannelGroup_Release(this.handle); + } + + // Nested channel groups. + public RESULT addGroup(ChannelGroup group, bool propagatedspclock = true) + { + return FMOD5_ChannelGroup_AddGroup(this.handle, group.handle, propagatedspclock, IntPtr.Zero); + } + public RESULT addGroup(ChannelGroup group, bool propagatedspclock, out DSPConnection connection) + { + return FMOD5_ChannelGroup_AddGroup(this.handle, group.handle, propagatedspclock, out connection.handle); + } + public RESULT getNumGroups(out int numgroups) + { + return FMOD5_ChannelGroup_GetNumGroups(this.handle, out numgroups); + } + public RESULT getGroup(int index, out ChannelGroup group) + { + return FMOD5_ChannelGroup_GetGroup(this.handle, index, out group.handle); + } + public RESULT getParentGroup(out ChannelGroup group) + { + return FMOD5_ChannelGroup_GetParentGroup(this.handle, out group.handle); + } + + // Information only functions. + public RESULT getName(out string name, int namelen) + { + IntPtr stringMem = Marshal.AllocHGlobal(namelen); + + RESULT result = FMOD5_ChannelGroup_GetName(this.handle, stringMem, namelen); + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + name = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT getNumChannels(out int numchannels) + { + return FMOD5_ChannelGroup_GetNumChannels(this.handle, out numchannels); + } + public RESULT getChannel(int index, out Channel channel) + { + return FMOD5_ChannelGroup_GetChannel(this.handle, index, out channel.handle); + } + + public RESULT getSystemObject(out System system) + { + return FMOD5_ChannelGroup_GetSystemObject(this.handle, out system.handle); + } + + // General control functionality for Channels and ChannelGroups. + public RESULT stop() + { + return FMOD5_ChannelGroup_Stop(this.handle); + } + public RESULT setPaused(bool paused) + { + return FMOD5_ChannelGroup_SetPaused(this.handle, paused); + } + public RESULT getPaused(out bool paused) + { + return FMOD5_ChannelGroup_GetPaused(this.handle, out paused); + } + public RESULT setVolume(float volume) + { + return FMOD5_ChannelGroup_SetVolume(this.handle, volume); + } + public RESULT getVolume(out float volume) + { + return FMOD5_ChannelGroup_GetVolume(this.handle, out volume); + } + public RESULT setVolumeRamp(bool ramp) + { + return FMOD5_ChannelGroup_SetVolumeRamp(this.handle, ramp); + } + public RESULT getVolumeRamp(out bool ramp) + { + return FMOD5_ChannelGroup_GetVolumeRamp(this.handle, out ramp); + } + public RESULT getAudibility(out float audibility) + { + return FMOD5_ChannelGroup_GetAudibility(this.handle, out audibility); + } + public RESULT setPitch(float pitch) + { + return FMOD5_ChannelGroup_SetPitch(this.handle, pitch); + } + public RESULT getPitch(out float pitch) + { + return FMOD5_ChannelGroup_GetPitch(this.handle, out pitch); + } + public RESULT setMute(bool mute) + { + return FMOD5_ChannelGroup_SetMute(this.handle, mute); + } + public RESULT getMute(out bool mute) + { + return FMOD5_ChannelGroup_GetMute(this.handle, out mute); + } + public RESULT setReverbProperties(int instance, float wet) + { + return FMOD5_ChannelGroup_SetReverbProperties(this.handle, instance, wet); + } + public RESULT getReverbProperties(int instance, out float wet) + { + return FMOD5_ChannelGroup_GetReverbProperties(this.handle, instance, out wet); + } + public RESULT setLowPassGain(float gain) + { + return FMOD5_ChannelGroup_SetLowPassGain(this.handle, gain); + } + public RESULT getLowPassGain(out float gain) + { + return FMOD5_ChannelGroup_GetLowPassGain(this.handle, out gain); + } + public RESULT setMode(MODE mode) + { + return FMOD5_ChannelGroup_SetMode(this.handle, mode); + } + public RESULT getMode(out MODE mode) + { + return FMOD5_ChannelGroup_GetMode(this.handle, out mode); + } + public RESULT setCallback(CHANNELCONTROL_CALLBACK callback) + { + return FMOD5_ChannelGroup_SetCallback(this.handle, callback); + } + public RESULT isPlaying(out bool isplaying) + { + return FMOD5_ChannelGroup_IsPlaying(this.handle, out isplaying); + } + + // Note all 'set' functions alter a final matrix, this is why the only get function is getMixMatrix, to avoid other get functions returning incorrect/obsolete values. + public RESULT setPan(float pan) + { + return FMOD5_ChannelGroup_SetPan(this.handle, pan); + } + public RESULT setMixLevelsOutput(float frontleft, float frontright, float center, float lfe, float surroundleft, float surroundright, float backleft, float backright) + { + return FMOD5_ChannelGroup_SetMixLevelsOutput(this.handle, frontleft, frontright, center, lfe, surroundleft, surroundright, backleft, backright); + } + public RESULT setMixLevelsInput(float[] levels, int numlevels) + { + return FMOD5_ChannelGroup_SetMixLevelsInput(this.handle, levels, numlevels); + } + public RESULT setMixMatrix(float[] matrix, int outchannels, int inchannels, int inchannel_hop) + { + return FMOD5_ChannelGroup_SetMixMatrix(this.handle, matrix, outchannels, inchannels, inchannel_hop); + } + public RESULT getMixMatrix(float[] matrix, out int outchannels, out int inchannels, int inchannel_hop) + { + return FMOD5_ChannelGroup_GetMixMatrix(this.handle, matrix, out outchannels, out inchannels, inchannel_hop); + } + + // Clock based functionality. + public RESULT getDSPClock(out ulong dspclock, out ulong parentclock) + { + return FMOD5_ChannelGroup_GetDSPClock(this.handle, out dspclock, out parentclock); + } + public RESULT setDelay(ulong dspclock_start, ulong dspclock_end, bool stopchannels) + { + return FMOD5_ChannelGroup_SetDelay(this.handle, dspclock_start, dspclock_end, stopchannels); + } + public RESULT getDelay(out ulong dspclock_start, out ulong dspclock_end) + { + return FMOD5_ChannelGroup_GetDelay(this.handle, out dspclock_start, out dspclock_end, IntPtr.Zero); + } + public RESULT getDelay(out ulong dspclock_start, out ulong dspclock_end, out bool stopchannels) + { + return FMOD5_ChannelGroup_GetDelay(this.handle, out dspclock_start, out dspclock_end, out stopchannels); + } + public RESULT addFadePoint(ulong dspclock, float volume) + { + return FMOD5_ChannelGroup_AddFadePoint(this.handle, dspclock, volume); + } + public RESULT setFadePointRamp(ulong dspclock, float volume) + { + return FMOD5_ChannelGroup_SetFadePointRamp(this.handle, dspclock, volume); + } + public RESULT removeFadePoints(ulong dspclock_start, ulong dspclock_end) + { + return FMOD5_ChannelGroup_RemoveFadePoints(this.handle, dspclock_start, dspclock_end); + } + public RESULT getFadePoints(ref uint numpoints, ulong[] point_dspclock, float[] point_volume) + { + return FMOD5_ChannelGroup_GetFadePoints(this.handle, ref numpoints, point_dspclock, point_volume); + } + + // DSP effects. + public RESULT getDSP(int index, out DSP dsp) + { + return FMOD5_ChannelGroup_GetDSP(this.handle, index, out dsp.handle); + } + public RESULT addDSP(int index, DSP dsp) + { + return FMOD5_ChannelGroup_AddDSP(this.handle, index, dsp.handle); + } + public RESULT removeDSP(DSP dsp) + { + return FMOD5_ChannelGroup_RemoveDSP(this.handle, dsp.handle); + } + public RESULT getNumDSPs(out int numdsps) + { + return FMOD5_ChannelGroup_GetNumDSPs(this.handle, out numdsps); + } + public RESULT setDSPIndex(DSP dsp, int index) + { + return FMOD5_ChannelGroup_SetDSPIndex(this.handle, dsp.handle, index); + } + public RESULT getDSPIndex(DSP dsp, out int index) + { + return FMOD5_ChannelGroup_GetDSPIndex(this.handle, dsp.handle, out index); + } + + // 3D functionality. + public RESULT set3DAttributes(ref VECTOR pos, ref VECTOR vel) + { + return FMOD5_ChannelGroup_Set3DAttributes(this.handle, ref pos, ref vel); + } + public RESULT get3DAttributes(out VECTOR pos, out VECTOR vel) + { + return FMOD5_ChannelGroup_Get3DAttributes(this.handle, out pos, out vel); + } + public RESULT set3DMinMaxDistance(float mindistance, float maxdistance) + { + return FMOD5_ChannelGroup_Set3DMinMaxDistance(this.handle, mindistance, maxdistance); + } + public RESULT get3DMinMaxDistance(out float mindistance, out float maxdistance) + { + return FMOD5_ChannelGroup_Get3DMinMaxDistance(this.handle, out mindistance, out maxdistance); + } + public RESULT set3DConeSettings(float insideconeangle, float outsideconeangle, float outsidevolume) + { + return FMOD5_ChannelGroup_Set3DConeSettings(this.handle, insideconeangle, outsideconeangle, outsidevolume); + } + public RESULT get3DConeSettings(out float insideconeangle, out float outsideconeangle, out float outsidevolume) + { + return FMOD5_ChannelGroup_Get3DConeSettings(this.handle, out insideconeangle, out outsideconeangle, out outsidevolume); + } + public RESULT set3DConeOrientation(ref VECTOR orientation) + { + return FMOD5_ChannelGroup_Set3DConeOrientation(this.handle, ref orientation); + } + public RESULT get3DConeOrientation(out VECTOR orientation) + { + return FMOD5_ChannelGroup_Get3DConeOrientation(this.handle, out orientation); + } + public RESULT set3DCustomRolloff(ref VECTOR points, int numpoints) + { + return FMOD5_ChannelGroup_Set3DCustomRolloff(this.handle, ref points, numpoints); + } + public RESULT get3DCustomRolloff(out IntPtr points, out int numpoints) + { + return FMOD5_ChannelGroup_Get3DCustomRolloff(this.handle, out points, out numpoints); + } + public RESULT set3DOcclusion(float directocclusion, float reverbocclusion) + { + return FMOD5_ChannelGroup_Set3DOcclusion(this.handle, directocclusion, reverbocclusion); + } + public RESULT get3DOcclusion(out float directocclusion, out float reverbocclusion) + { + return FMOD5_ChannelGroup_Get3DOcclusion(this.handle, out directocclusion, out reverbocclusion); + } + public RESULT set3DSpread(float angle) + { + return FMOD5_ChannelGroup_Set3DSpread(this.handle, angle); + } + public RESULT get3DSpread(out float angle) + { + return FMOD5_ChannelGroup_Get3DSpread(this.handle, out angle); + } + public RESULT set3DLevel(float level) + { + return FMOD5_ChannelGroup_Set3DLevel(this.handle, level); + } + public RESULT get3DLevel(out float level) + { + return FMOD5_ChannelGroup_Get3DLevel(this.handle, out level); + } + public RESULT set3DDopplerLevel(float level) + { + return FMOD5_ChannelGroup_Set3DDopplerLevel(this.handle, level); + } + public RESULT get3DDopplerLevel(out float level) + { + return FMOD5_ChannelGroup_Get3DDopplerLevel(this.handle, out level); + } + public RESULT set3DDistanceFilter(bool custom, float customLevel, float centerFreq) + { + return FMOD5_ChannelGroup_Set3DDistanceFilter(this.handle, custom, customLevel, centerFreq); + } + public RESULT get3DDistanceFilter(out bool custom, out float customLevel, out float centerFreq) + { + return FMOD5_ChannelGroup_Get3DDistanceFilter(this.handle, out custom, out customLevel, out centerFreq); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_ChannelGroup_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_ChannelGroup_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Release (IntPtr channelgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_AddGroup (IntPtr channelgroup, IntPtr group, bool propagatedspclock, IntPtr zero); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_AddGroup (IntPtr channelgroup, IntPtr group, bool propagatedspclock, out IntPtr connection); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetNumGroups (IntPtr channelgroup, out int numgroups); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetGroup (IntPtr channelgroup, int index, out IntPtr group); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetParentGroup (IntPtr channelgroup, out IntPtr group); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetName (IntPtr channelgroup, IntPtr name, int namelen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetNumChannels (IntPtr channelgroup, out int numchannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetChannel (IntPtr channelgroup, int index, out IntPtr channel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetSystemObject (IntPtr channelgroup, out IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Stop (IntPtr channelgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetPaused (IntPtr channelgroup, bool paused); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetPaused (IntPtr channelgroup, out bool paused); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetVolume (IntPtr channelgroup, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetVolume (IntPtr channelgroup, out float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetVolumeRamp (IntPtr channelgroup, bool ramp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetVolumeRamp (IntPtr channelgroup, out bool ramp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetAudibility (IntPtr channelgroup, out float audibility); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetPitch (IntPtr channelgroup, float pitch); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetPitch (IntPtr channelgroup, out float pitch); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetMute (IntPtr channelgroup, bool mute); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetMute (IntPtr channelgroup, out bool mute); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetReverbProperties (IntPtr channelgroup, int instance, float wet); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetReverbProperties (IntPtr channelgroup, int instance, out float wet); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetLowPassGain (IntPtr channelgroup, float gain); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetLowPassGain (IntPtr channelgroup, out float gain); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetMode (IntPtr channelgroup, MODE mode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetMode (IntPtr channelgroup, out MODE mode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetCallback (IntPtr channelgroup, CHANNELCONTROL_CALLBACK callback); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_IsPlaying (IntPtr channelgroup, out bool isplaying); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetPan (IntPtr channelgroup, float pan); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetMixLevelsOutput (IntPtr channelgroup, float frontleft, float frontright, float center, float lfe, float surroundleft, float surroundright, float backleft, float backright); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetMixLevelsInput (IntPtr channelgroup, float[] levels, int numlevels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetMixMatrix (IntPtr channelgroup, float[] matrix, int outchannels, int inchannels, int inchannel_hop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetMixMatrix (IntPtr channelgroup, float[] matrix, out int outchannels, out int inchannels, int inchannel_hop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetDSPClock (IntPtr channelgroup, out ulong dspclock, out ulong parentclock); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetDelay (IntPtr channelgroup, ulong dspclock_start, ulong dspclock_end, bool stopchannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetDelay (IntPtr channelgroup, out ulong dspclock_start, out ulong dspclock_end, IntPtr zero); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetDelay (IntPtr channelgroup, out ulong dspclock_start, out ulong dspclock_end, out bool stopchannels); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_AddFadePoint (IntPtr channelgroup, ulong dspclock, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetFadePointRamp (IntPtr channelgroup, ulong dspclock, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_RemoveFadePoints (IntPtr channelgroup, ulong dspclock_start, ulong dspclock_end); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetFadePoints (IntPtr channelgroup, ref uint numpoints, ulong[] point_dspclock, float[] point_volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetDSP (IntPtr channelgroup, int index, out IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_AddDSP (IntPtr channelgroup, int index, IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_RemoveDSP (IntPtr channelgroup, IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetNumDSPs (IntPtr channelgroup, out int numdsps); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetDSPIndex (IntPtr channelgroup, IntPtr dsp, int index); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetDSPIndex (IntPtr channelgroup, IntPtr dsp, out int index); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DAttributes (IntPtr channelgroup, ref VECTOR pos, ref VECTOR vel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DAttributes (IntPtr channelgroup, out VECTOR pos, out VECTOR vel); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DMinMaxDistance (IntPtr channelgroup, float mindistance, float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DMinMaxDistance (IntPtr channelgroup, out float mindistance, out float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DConeSettings (IntPtr channelgroup, float insideconeangle, float outsideconeangle, float outsidevolume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DConeSettings (IntPtr channelgroup, out float insideconeangle, out float outsideconeangle, out float outsidevolume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DConeOrientation(IntPtr channelgroup, ref VECTOR orientation); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DConeOrientation(IntPtr channelgroup, out VECTOR orientation); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DCustomRolloff (IntPtr channelgroup, ref VECTOR points, int numpoints); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DCustomRolloff (IntPtr channelgroup, out IntPtr points, out int numpoints); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DOcclusion (IntPtr channelgroup, float directocclusion, float reverbocclusion); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DOcclusion (IntPtr channelgroup, out float directocclusion, out float reverbocclusion); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DSpread (IntPtr channelgroup, float angle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DSpread (IntPtr channelgroup, out float angle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DLevel (IntPtr channelgroup, float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DLevel (IntPtr channelgroup, out float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DDopplerLevel (IntPtr channelgroup, float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DDopplerLevel (IntPtr channelgroup, out float level); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Set3DDistanceFilter (IntPtr channelgroup, bool custom, float customLevel, float centerFreq); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DDistanceFilter (IntPtr channelgroup, out bool custom, out float customLevel, out float centerFreq); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_SetUserData (IntPtr channelgroup, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_GetUserData (IntPtr channelgroup, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public ChannelGroup(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + /* + 'SoundGroup' API + */ + public struct SoundGroup + { + public RESULT release() + { + return FMOD5_SoundGroup_Release(this.handle); + } + + public RESULT getSystemObject(out System system) + { + return FMOD5_SoundGroup_GetSystemObject(this.handle, out system.handle); + } + + // SoundGroup control functions. + public RESULT setMaxAudible(int maxaudible) + { + return FMOD5_SoundGroup_SetMaxAudible(this.handle, maxaudible); + } + public RESULT getMaxAudible(out int maxaudible) + { + return FMOD5_SoundGroup_GetMaxAudible(this.handle, out maxaudible); + } + public RESULT setMaxAudibleBehavior(SOUNDGROUP_BEHAVIOR behavior) + { + return FMOD5_SoundGroup_SetMaxAudibleBehavior(this.handle, behavior); + } + public RESULT getMaxAudibleBehavior(out SOUNDGROUP_BEHAVIOR behavior) + { + return FMOD5_SoundGroup_GetMaxAudibleBehavior(this.handle, out behavior); + } + public RESULT setMuteFadeSpeed(float speed) + { + return FMOD5_SoundGroup_SetMuteFadeSpeed(this.handle, speed); + } + public RESULT getMuteFadeSpeed(out float speed) + { + return FMOD5_SoundGroup_GetMuteFadeSpeed(this.handle, out speed); + } + public RESULT setVolume(float volume) + { + return FMOD5_SoundGroup_SetVolume(this.handle, volume); + } + public RESULT getVolume(out float volume) + { + return FMOD5_SoundGroup_GetVolume(this.handle, out volume); + } + public RESULT stop() + { + return FMOD5_SoundGroup_Stop(this.handle); + } + + // Information only functions. + public RESULT getName(out string name, int namelen) + { + IntPtr stringMem = Marshal.AllocHGlobal(namelen); + + RESULT result = FMOD5_SoundGroup_GetName(this.handle, stringMem, namelen); + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + name = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + + return result; + } + public RESULT getNumSounds(out int numsounds) + { + return FMOD5_SoundGroup_GetNumSounds(this.handle, out numsounds); + } + public RESULT getSound(int index, out Sound sound) + { + return FMOD5_SoundGroup_GetSound(this.handle, index, out sound.handle); + } + public RESULT getNumPlaying(out int numplaying) + { + return FMOD5_SoundGroup_GetNumPlaying(this.handle, out numplaying); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_SoundGroup_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_SoundGroup_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_Release (IntPtr soundgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetSystemObject (IntPtr soundgroup, out IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_SetMaxAudible (IntPtr soundgroup, int maxaudible); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetMaxAudible (IntPtr soundgroup, out int maxaudible); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_SetMaxAudibleBehavior (IntPtr soundgroup, SOUNDGROUP_BEHAVIOR behavior); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetMaxAudibleBehavior (IntPtr soundgroup, out SOUNDGROUP_BEHAVIOR behavior); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_SetMuteFadeSpeed (IntPtr soundgroup, float speed); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetMuteFadeSpeed (IntPtr soundgroup, out float speed); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_SetVolume (IntPtr soundgroup, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetVolume (IntPtr soundgroup, out float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_Stop (IntPtr soundgroup); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetName (IntPtr soundgroup, IntPtr name, int namelen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetNumSounds (IntPtr soundgroup, out int numsounds); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetSound (IntPtr soundgroup, int index, out IntPtr sound); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetNumPlaying (IntPtr soundgroup, out int numplaying); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_SetUserData (IntPtr soundgroup, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_SoundGroup_GetUserData (IntPtr soundgroup, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public SoundGroup(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + /* + 'DSP' API + */ + public struct DSP + { + public RESULT release() + { + return FMOD5_DSP_Release(this.handle); + } + public RESULT getSystemObject(out System system) + { + return FMOD5_DSP_GetSystemObject(this.handle, out system.handle); + } + + // Connection / disconnection / input and output enumeration. + public RESULT addInput(DSP input) + { + return FMOD5_DSP_AddInput(this.handle, input.handle, IntPtr.Zero, DSPCONNECTION_TYPE.STANDARD); + } + public RESULT addInput(DSP input, out DSPConnection connection, DSPCONNECTION_TYPE type = DSPCONNECTION_TYPE.STANDARD) + { + return FMOD5_DSP_AddInput(this.handle, input.handle, out connection.handle, type); + } + public RESULT disconnectFrom(DSP target, DSPConnection connection) + { + return FMOD5_DSP_DisconnectFrom(this.handle, target.handle, connection.handle); + } + public RESULT disconnectAll(bool inputs, bool outputs) + { + return FMOD5_DSP_DisconnectAll(this.handle, inputs, outputs); + } + public RESULT getNumInputs(out int numinputs) + { + return FMOD5_DSP_GetNumInputs(this.handle, out numinputs); + } + public RESULT getNumOutputs(out int numoutputs) + { + return FMOD5_DSP_GetNumOutputs(this.handle, out numoutputs); + } + public RESULT getInput(int index, out DSP input, out DSPConnection inputconnection) + { + return FMOD5_DSP_GetInput(this.handle, index, out input.handle, out inputconnection.handle); + } + public RESULT getOutput(int index, out DSP output, out DSPConnection outputconnection) + { + return FMOD5_DSP_GetOutput(this.handle, index, out output.handle, out outputconnection.handle); + } + + // DSP unit control. + public RESULT setActive(bool active) + { + return FMOD5_DSP_SetActive(this.handle, active); + } + public RESULT getActive(out bool active) + { + return FMOD5_DSP_GetActive(this.handle, out active); + } + public RESULT setBypass(bool bypass) + { + return FMOD5_DSP_SetBypass(this.handle, bypass); + } + public RESULT getBypass(out bool bypass) + { + return FMOD5_DSP_GetBypass(this.handle, out bypass); + } + public RESULT setWetDryMix(float prewet, float postwet, float dry) + { + return FMOD5_DSP_SetWetDryMix(this.handle, prewet, postwet, dry); + } + public RESULT getWetDryMix(out float prewet, out float postwet, out float dry) + { + return FMOD5_DSP_GetWetDryMix(this.handle, out prewet, out postwet, out dry); + } + public RESULT setChannelFormat(CHANNELMASK channelmask, int numchannels, SPEAKERMODE source_speakermode) + { + return FMOD5_DSP_SetChannelFormat(this.handle, channelmask, numchannels, source_speakermode); + } + public RESULT getChannelFormat(out CHANNELMASK channelmask, out int numchannels, out SPEAKERMODE source_speakermode) + { + return FMOD5_DSP_GetChannelFormat(this.handle, out channelmask, out numchannels, out source_speakermode); + } + public RESULT getOutputChannelFormat(CHANNELMASK inmask, int inchannels, SPEAKERMODE inspeakermode, out CHANNELMASK outmask, out int outchannels, out SPEAKERMODE outspeakermode) + { + return FMOD5_DSP_GetOutputChannelFormat(this.handle, inmask, inchannels, inspeakermode, out outmask, out outchannels, out outspeakermode); + } + public RESULT reset() + { + return FMOD5_DSP_Reset(this.handle); + } + + // DSP parameter control. + public RESULT setParameterFloat(int index, float value) + { + return FMOD5_DSP_SetParameterFloat(this.handle, index, value); + } + public RESULT setParameterInt(int index, int value) + { + return FMOD5_DSP_SetParameterInt(this.handle, index, value); + } + public RESULT setParameterBool(int index, bool value) + { + return FMOD5_DSP_SetParameterBool(this.handle, index, value); + } + public RESULT setParameterData(int index, byte[] data) + { + return FMOD5_DSP_SetParameterData(this.handle, index, Marshal.UnsafeAddrOfPinnedArrayElement(data, 0), (uint)data.Length); + } + public RESULT getParameterFloat(int index, out float value) + { + return FMOD5_DSP_GetParameterFloat(this.handle, index, out value, IntPtr.Zero, 0); + } + public RESULT getParameterInt(int index, out int value) + { + return FMOD5_DSP_GetParameterInt(this.handle, index, out value, IntPtr.Zero, 0); + } + public RESULT getParameterBool(int index, out bool value) + { + return FMOD5_DSP_GetParameterBool(this.handle, index, out value, IntPtr.Zero, 0); + } + public RESULT getParameterData(int index, out IntPtr data, out uint length) + { + return FMOD5_DSP_GetParameterData(this.handle, index, out data, out length, IntPtr.Zero, 0); + } + public RESULT getNumParameters(out int numparams) + { + return FMOD5_DSP_GetNumParameters(this.handle, out numparams); + } + public RESULT getParameterInfo(int index, out DSP_PARAMETER_DESC desc) + { + IntPtr descPtr; + RESULT result = FMOD5_DSP_GetParameterInfo(this.handle, index, out descPtr); + #if (UNITY_2017_4_OR_NEWER) && !NET_4_6 + desc = (DSP_PARAMETER_DESC)Marshal.PtrToStructure(descPtr, typeof(DSP_PARAMETER_DESC)); + #else + desc = Marshal.PtrToStructure(descPtr); + #endif // (UNITY_2017_4_OR_NEWER) && !NET_4_6 + return result; + } + public RESULT getDataParameterIndex(int datatype, out int index) + { + return FMOD5_DSP_GetDataParameterIndex(this.handle, datatype, out index); + } + public RESULT showConfigDialog(IntPtr hwnd, bool show) + { + return FMOD5_DSP_ShowConfigDialog(this.handle, hwnd, show); + } + + // DSP attributes. + public RESULT getInfo(out string name, out uint version, out int channels, out int configwidth, out int configheight) + { + IntPtr nameMem = Marshal.AllocHGlobal(32); + + RESULT result = FMOD5_DSP_GetInfo(this.handle, nameMem, out version, out channels, out configwidth, out configheight); + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + name = encoder.stringFromNative(nameMem); + } + Marshal.FreeHGlobal(nameMem); + return result; + } + public RESULT getInfo(out uint version, out int channels, out int configwidth, out int configheight) + { + return FMOD5_DSP_GetInfo(this.handle, IntPtr.Zero, out version, out channels, out configwidth, out configheight); ; + } + public RESULT getType(out DSP_TYPE type) + { + return FMOD5_DSP_GetType(this.handle, out type); + } + public RESULT getIdle(out bool idle) + { + return FMOD5_DSP_GetIdle(this.handle, out idle); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_DSP_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_DSP_GetUserData(this.handle, out userdata); + } + + // Metering. + public RESULT setMeteringEnabled(bool inputEnabled, bool outputEnabled) + { + return FMOD5_DSP_SetMeteringEnabled(this.handle, inputEnabled, outputEnabled); + } + public RESULT getMeteringEnabled(out bool inputEnabled, out bool outputEnabled) + { + return FMOD5_DSP_GetMeteringEnabled(this.handle, out inputEnabled, out outputEnabled); + } + + public RESULT getMeteringInfo(IntPtr zero, out DSP_METERING_INFO outputInfo) + { + return FMOD5_DSP_GetMeteringInfo(this.handle, zero, out outputInfo); + } + public RESULT getMeteringInfo(out DSP_METERING_INFO inputInfo, IntPtr zero) + { + return FMOD5_DSP_GetMeteringInfo(this.handle, out inputInfo, zero); + } + public RESULT getMeteringInfo(out DSP_METERING_INFO inputInfo, out DSP_METERING_INFO outputInfo) + { + return FMOD5_DSP_GetMeteringInfo(this.handle, out inputInfo, out outputInfo); + } + + public RESULT getCPUUsage(out uint exclusive, out uint inclusive) + { + return FMOD5_DSP_GetCPUUsage(this.handle, out exclusive, out inclusive); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_Release (IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetSystemObject (IntPtr dsp, out IntPtr system); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_AddInput (IntPtr dsp, IntPtr input, IntPtr zero, DSPCONNECTION_TYPE type); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_AddInput (IntPtr dsp, IntPtr input, out IntPtr connection, DSPCONNECTION_TYPE type); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_DisconnectFrom (IntPtr dsp, IntPtr target, IntPtr connection); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_DisconnectAll (IntPtr dsp, bool inputs, bool outputs); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetNumInputs (IntPtr dsp, out int numinputs); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetNumOutputs (IntPtr dsp, out int numoutputs); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetInput (IntPtr dsp, int index, out IntPtr input, out IntPtr inputconnection); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetOutput (IntPtr dsp, int index, out IntPtr output, out IntPtr outputconnection); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetActive (IntPtr dsp, bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetActive (IntPtr dsp, out bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetBypass (IntPtr dsp, bool bypass); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetBypass (IntPtr dsp, out bool bypass); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetWetDryMix (IntPtr dsp, float prewet, float postwet, float dry); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetWetDryMix (IntPtr dsp, out float prewet, out float postwet, out float dry); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetChannelFormat (IntPtr dsp, CHANNELMASK channelmask, int numchannels, SPEAKERMODE source_speakermode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetChannelFormat (IntPtr dsp, out CHANNELMASK channelmask, out int numchannels, out SPEAKERMODE source_speakermode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetOutputChannelFormat (IntPtr dsp, CHANNELMASK inmask, int inchannels, SPEAKERMODE inspeakermode, out CHANNELMASK outmask, out int outchannels, out SPEAKERMODE outspeakermode); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_Reset (IntPtr dsp); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetParameterFloat (IntPtr dsp, int index, float value); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetParameterInt (IntPtr dsp, int index, int value); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetParameterBool (IntPtr dsp, int index, bool value); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetParameterData (IntPtr dsp, int index, IntPtr data, uint length); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetParameterFloat (IntPtr dsp, int index, out float value, IntPtr valuestr, int valuestrlen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetParameterInt (IntPtr dsp, int index, out int value, IntPtr valuestr, int valuestrlen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetParameterBool (IntPtr dsp, int index, out bool value, IntPtr valuestr, int valuestrlen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetParameterData (IntPtr dsp, int index, out IntPtr data, out uint length, IntPtr valuestr, int valuestrlen); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetNumParameters (IntPtr dsp, out int numparams); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetParameterInfo (IntPtr dsp, int index, out IntPtr desc); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetDataParameterIndex (IntPtr dsp, int datatype, out int index); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_ShowConfigDialog (IntPtr dsp, IntPtr hwnd, bool show); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetInfo (IntPtr dsp, IntPtr name, out uint version, out int channels, out int configwidth, out int configheight); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetType (IntPtr dsp, out DSP_TYPE type); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetIdle (IntPtr dsp, out bool idle); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_SetUserData (IntPtr dsp, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSP_GetUserData (IntPtr dsp, out IntPtr userdata); + [DllImport(VERSION.dll)] + public static extern RESULT FMOD5_DSP_SetMeteringEnabled (IntPtr dsp, bool inputEnabled, bool outputEnabled); + [DllImport(VERSION.dll)] + public static extern RESULT FMOD5_DSP_GetMeteringEnabled (IntPtr dsp, out bool inputEnabled, out bool outputEnabled); + [DllImport(VERSION.dll)] + public static extern RESULT FMOD5_DSP_GetMeteringInfo (IntPtr dsp, IntPtr zero, out DSP_METERING_INFO outputInfo); + [DllImport(VERSION.dll)] + public static extern RESULT FMOD5_DSP_GetMeteringInfo (IntPtr dsp, out DSP_METERING_INFO inputInfo, IntPtr zero); + [DllImport(VERSION.dll)] + public static extern RESULT FMOD5_DSP_GetMeteringInfo (IntPtr dsp, out DSP_METERING_INFO inputInfo, out DSP_METERING_INFO outputInfo); + [DllImport(VERSION.dll)] + public static extern RESULT FMOD5_DSP_GetCPUUsage (IntPtr dsp, out uint exclusive, out uint inclusive); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public DSP(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + /* + 'DSPConnection' API + */ + public struct DSPConnection + { + public RESULT getInput(out DSP input) + { + return FMOD5_DSPConnection_GetInput(this.handle, out input.handle); + } + public RESULT getOutput(out DSP output) + { + return FMOD5_DSPConnection_GetOutput(this.handle, out output.handle); + } + public RESULT setMix(float volume) + { + return FMOD5_DSPConnection_SetMix(this.handle, volume); + } + public RESULT getMix(out float volume) + { + return FMOD5_DSPConnection_GetMix(this.handle, out volume); + } + public RESULT setMixMatrix(float[] matrix, int outchannels, int inchannels, int inchannel_hop = 0) + { + return FMOD5_DSPConnection_SetMixMatrix(this.handle, matrix, outchannels, inchannels, inchannel_hop); + } + public RESULT getMixMatrix(float[] matrix, out int outchannels, out int inchannels, int inchannel_hop = 0) + { + return FMOD5_DSPConnection_GetMixMatrix(this.handle, matrix, out outchannels, out inchannels, inchannel_hop); + } + public RESULT getType(out DSPCONNECTION_TYPE type) + { + return FMOD5_DSPConnection_GetType(this.handle, out type); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_DSPConnection_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_DSPConnection_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_GetInput (IntPtr dspconnection, out IntPtr input); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_GetOutput (IntPtr dspconnection, out IntPtr output); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_SetMix (IntPtr dspconnection, float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_GetMix (IntPtr dspconnection, out float volume); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_SetMixMatrix (IntPtr dspconnection, float[] matrix, int outchannels, int inchannels, int inchannel_hop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_GetMixMatrix (IntPtr dspconnection, float[] matrix, out int outchannels, out int inchannels, int inchannel_hop); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_GetType (IntPtr dspconnection, out DSPCONNECTION_TYPE type); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_SetUserData (IntPtr dspconnection, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_DSPConnection_GetUserData (IntPtr dspconnection, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public DSPConnection(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + /* + 'Geometry' API + */ + public struct Geometry + { + public RESULT release() + { + return FMOD5_Geometry_Release(this.handle); + } + + // Polygon manipulation. + public RESULT addPolygon(float directocclusion, float reverbocclusion, bool doublesided, int numvertices, VECTOR[] vertices, out int polygonindex) + { + return FMOD5_Geometry_AddPolygon(this.handle, directocclusion, reverbocclusion, doublesided, numvertices, vertices, out polygonindex); + } + public RESULT getNumPolygons(out int numpolygons) + { + return FMOD5_Geometry_GetNumPolygons(this.handle, out numpolygons); + } + public RESULT getMaxPolygons(out int maxpolygons, out int maxvertices) + { + return FMOD5_Geometry_GetMaxPolygons(this.handle, out maxpolygons, out maxvertices); + } + public RESULT getPolygonNumVertices(int index, out int numvertices) + { + return FMOD5_Geometry_GetPolygonNumVertices(this.handle, index, out numvertices); + } + public RESULT setPolygonVertex(int index, int vertexindex, ref VECTOR vertex) + { + return FMOD5_Geometry_SetPolygonVertex(this.handle, index, vertexindex, ref vertex); + } + public RESULT getPolygonVertex(int index, int vertexindex, out VECTOR vertex) + { + return FMOD5_Geometry_GetPolygonVertex(this.handle, index, vertexindex, out vertex); + } + public RESULT setPolygonAttributes(int index, float directocclusion, float reverbocclusion, bool doublesided) + { + return FMOD5_Geometry_SetPolygonAttributes(this.handle, index, directocclusion, reverbocclusion, doublesided); + } + public RESULT getPolygonAttributes(int index, out float directocclusion, out float reverbocclusion, out bool doublesided) + { + return FMOD5_Geometry_GetPolygonAttributes(this.handle, index, out directocclusion, out reverbocclusion, out doublesided); + } + + // Object manipulation. + public RESULT setActive(bool active) + { + return FMOD5_Geometry_SetActive(this.handle, active); + } + public RESULT getActive(out bool active) + { + return FMOD5_Geometry_GetActive(this.handle, out active); + } + public RESULT setRotation(ref VECTOR forward, ref VECTOR up) + { + return FMOD5_Geometry_SetRotation(this.handle, ref forward, ref up); + } + public RESULT getRotation(out VECTOR forward, out VECTOR up) + { + return FMOD5_Geometry_GetRotation(this.handle, out forward, out up); + } + public RESULT setPosition(ref VECTOR position) + { + return FMOD5_Geometry_SetPosition(this.handle, ref position); + } + public RESULT getPosition(out VECTOR position) + { + return FMOD5_Geometry_GetPosition(this.handle, out position); + } + public RESULT setScale(ref VECTOR scale) + { + return FMOD5_Geometry_SetScale(this.handle, ref scale); + } + public RESULT getScale(out VECTOR scale) + { + return FMOD5_Geometry_GetScale(this.handle, out scale); + } + public RESULT save(IntPtr data, out int datasize) + { + return FMOD5_Geometry_Save(this.handle, data, out datasize); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_Geometry_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_Geometry_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_Release (IntPtr geometry); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_AddPolygon (IntPtr geometry, float directocclusion, float reverbocclusion, bool doublesided, int numvertices, VECTOR[] vertices, out int polygonindex); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetNumPolygons (IntPtr geometry, out int numpolygons); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetMaxPolygons (IntPtr geometry, out int maxpolygons, out int maxvertices); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetPolygonNumVertices(IntPtr geometry, int index, out int numvertices); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_SetPolygonVertex (IntPtr geometry, int index, int vertexindex, ref VECTOR vertex); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetPolygonVertex (IntPtr geometry, int index, int vertexindex, out VECTOR vertex); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_SetPolygonAttributes (IntPtr geometry, int index, float directocclusion, float reverbocclusion, bool doublesided); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetPolygonAttributes (IntPtr geometry, int index, out float directocclusion, out float reverbocclusion, out bool doublesided); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_SetActive (IntPtr geometry, bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetActive (IntPtr geometry, out bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_SetRotation (IntPtr geometry, ref VECTOR forward, ref VECTOR up); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetRotation (IntPtr geometry, out VECTOR forward, out VECTOR up); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_SetPosition (IntPtr geometry, ref VECTOR position); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetPosition (IntPtr geometry, out VECTOR position); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_SetScale (IntPtr geometry, ref VECTOR scale); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetScale (IntPtr geometry, out VECTOR scale); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_Save (IntPtr geometry, IntPtr data, out int datasize); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_SetUserData (IntPtr geometry, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Geometry_GetUserData (IntPtr geometry, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public Geometry(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + /* + 'Reverb3D' API + */ + public struct Reverb3D + { + public RESULT release() + { + return FMOD5_Reverb3D_Release(this.handle); + } + + // Reverb manipulation. + public RESULT set3DAttributes(ref VECTOR position, float mindistance, float maxdistance) + { + return FMOD5_Reverb3D_Set3DAttributes(this.handle, ref position, mindistance, maxdistance); + } + public RESULT get3DAttributes(ref VECTOR position, ref float mindistance, ref float maxdistance) + { + return FMOD5_Reverb3D_Get3DAttributes(this.handle, ref position, ref mindistance, ref maxdistance); + } + public RESULT setProperties(ref REVERB_PROPERTIES properties) + { + return FMOD5_Reverb3D_SetProperties(this.handle, ref properties); + } + public RESULT getProperties(ref REVERB_PROPERTIES properties) + { + return FMOD5_Reverb3D_GetProperties(this.handle, ref properties); + } + public RESULT setActive(bool active) + { + return FMOD5_Reverb3D_SetActive(this.handle, active); + } + public RESULT getActive(out bool active) + { + return FMOD5_Reverb3D_GetActive(this.handle, out active); + } + + // Userdata set/get. + public RESULT setUserData(IntPtr userdata) + { + return FMOD5_Reverb3D_SetUserData(this.handle, userdata); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD5_Reverb3D_GetUserData(this.handle, out userdata); + } + + #region importfunctions + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_Release (IntPtr reverb3d); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_Set3DAttributes (IntPtr reverb3d, ref VECTOR position, float mindistance, float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_Get3DAttributes (IntPtr reverb3d, ref VECTOR position, ref float mindistance, ref float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_SetProperties (IntPtr reverb3d, ref REVERB_PROPERTIES properties); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_GetProperties (IntPtr reverb3d, ref REVERB_PROPERTIES properties); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_SetActive (IntPtr reverb3d, bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_GetActive (IntPtr reverb3d, out bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_SetUserData (IntPtr reverb3d, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_GetUserData (IntPtr reverb3d, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public Reverb3D(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + #endregion + } + + #region String Helper Functions + [StructLayout(LayoutKind.Sequential)] + public struct StringWrapper + { + IntPtr nativeUtf8Ptr; + + public StringWrapper(IntPtr ptr) + { + nativeUtf8Ptr = ptr; + } + + public static implicit operator string(StringWrapper fstring) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return encoder.stringFromNative(fstring.nativeUtf8Ptr); + } + } + } + + static class StringHelper + { + public class ThreadSafeEncoding : IDisposable + { + UTF8Encoding encoding = new UTF8Encoding(); + byte[] encodedBuffer = new byte[128]; + char[] decodedBuffer = new char[128]; + bool inUse; + GCHandle gcHandle; + + public bool InUse() { return inUse; } + public void SetInUse() { inUse = true; } + + private int roundUpPowerTwo(int number) + { + int newNumber = 1; + while (newNumber <= number) + { + newNumber *= 2; + } + + return newNumber; + } + + public byte[] byteFromStringUTF8(string s) + { + if (s == null) + { + return null; + } + + int maximumLength = encoding.GetMaxByteCount(s.Length) + 1; // +1 for null terminator + if (maximumLength > encodedBuffer.Length) + { + int encodedLength = encoding.GetByteCount(s) + 1; // +1 for null terminator + if (encodedLength > encodedBuffer.Length) + { + encodedBuffer = new byte[roundUpPowerTwo(encodedLength)]; + } + } + + int byteCount = encoding.GetBytes(s, 0, s.Length, encodedBuffer, 0); + encodedBuffer[byteCount] = 0; // Apply null terminator + + return encodedBuffer; + } + + public IntPtr intptrFromStringUTF8(string s) + { + if (s == null) + { + return IntPtr.Zero; + } + + gcHandle = GCHandle.Alloc(byteFromStringUTF8(s), GCHandleType.Pinned); + return gcHandle.AddrOfPinnedObject(); + } + + public string stringFromNative(IntPtr nativePtr) + { + if (nativePtr == IntPtr.Zero) + { + return ""; + } + + int nativeLen = 0; + while (Marshal.ReadByte(nativePtr, nativeLen) != 0) + { + nativeLen++; + } + + if (nativeLen == 0) + { + return ""; + } + + if (nativeLen > encodedBuffer.Length) + { + encodedBuffer = new byte[roundUpPowerTwo(nativeLen)]; + } + + Marshal.Copy(nativePtr, encodedBuffer, 0, nativeLen); + + int maximumLength = encoding.GetMaxCharCount(nativeLen); + if (maximumLength > decodedBuffer.Length) + { + int decodedLength = encoding.GetCharCount(encodedBuffer, 0, nativeLen); + if (decodedLength > decodedBuffer.Length) + { + decodedBuffer = new char[roundUpPowerTwo(decodedLength)]; + } + } + + int charCount = encoding.GetChars(encodedBuffer, 0, nativeLen, decodedBuffer, 0); + + return new String(decodedBuffer, 0, charCount); + } + + public void Dispose() + { + if (gcHandle.IsAllocated) + { + gcHandle.Free(); + } + lock (encoders) + { + inUse = false; + } + } + } + + static List encoders = new List(1); + + public static ThreadSafeEncoding GetFreeHelper() + { + lock (encoders) + { + ThreadSafeEncoding helper = null; + // Search for not in use helper + for (int i = 0; i < encoders.Count; i++) + { + if (!encoders[i].InUse()) + { + helper = encoders[i]; + break; + } + } + // Otherwise create another helper + if (helper == null) + { + helper = new ThreadSafeEncoding(); + encoders.Add(helper); + } + helper.SetInUse(); + return helper; + } + } + } + + #endregion +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod.cs.meta new file mode 100644 index 0000000..07641e1 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bd0d0c955caff8940ac1667ee36dd4c9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_dsp.cs b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_dsp.cs new file mode 100644 index 0000000..d65995a --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_dsp.cs @@ -0,0 +1,846 @@ +/* ======================================================================================== */ +/* FMOD Core API - DSP header file. */ +/* Copyright (c), Firelight Technologies Pty, Ltd. 2004-2020. */ +/* */ +/* Use this header if you are wanting to develop your own DSP plugin to use with FMODs */ +/* dsp system. With this header you can make your own DSP plugin that FMOD can */ +/* register and use. See the documentation and examples on how to make a working plugin. */ +/* */ +/* For more detail visit: */ +/* https://fmod.com/resources/documentation-api?version=2.0&page=plugin-api-dsp.html */ +/* =========================================================================================*/ + +using System; +using System.Text; +using System.Runtime.InteropServices; + +namespace FMOD +{ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_BUFFER_ARRAY + { + public int numbuffers; + public int[] buffernumchannels; + public CHANNELMASK[] bufferchannelmask; + public IntPtr[] buffers; + public SPEAKERMODE speakermode; + } + + public enum DSP_PROCESS_OPERATION + { + PROCESS_PERFORM = 0, + PROCESS_QUERY + } + + [StructLayout(LayoutKind.Sequential)] + public struct COMPLEX + { + public float real; + public float imag; + } + + public enum DSP_PAN_SURROUND_FLAGS + { + DEFAULT = 0, + ROTATION_NOT_BIASED = 1, + } + + + /* + DSP callbacks + */ + public delegate RESULT DSP_CREATECALLBACK (ref DSP_STATE dsp_state); + public delegate RESULT DSP_RELEASECALLBACK (ref DSP_STATE dsp_state); + public delegate RESULT DSP_RESETCALLBACK (ref DSP_STATE dsp_state); + public delegate RESULT DSP_SETPOSITIONCALLBACK (ref DSP_STATE dsp_state, uint pos); + public delegate RESULT DSP_READCALLBACK (ref DSP_STATE dsp_state, IntPtr inbuffer, IntPtr outbuffer, uint length, int inchannels, ref int outchannels); + public delegate RESULT DSP_SHOULDIPROCESS_CALLBACK (ref DSP_STATE dsp_state, bool inputsidle, uint length, CHANNELMASK inmask, int inchannels, SPEAKERMODE speakermode); + public delegate RESULT DSP_PROCESS_CALLBACK (ref DSP_STATE dsp_state, uint length, ref DSP_BUFFER_ARRAY inbufferarray, ref DSP_BUFFER_ARRAY outbufferarray, bool inputsidle, DSP_PROCESS_OPERATION op); + public delegate RESULT DSP_SETPARAM_FLOAT_CALLBACK (ref DSP_STATE dsp_state, int index, float value); + public delegate RESULT DSP_SETPARAM_INT_CALLBACK (ref DSP_STATE dsp_state, int index, int value); + public delegate RESULT DSP_SETPARAM_BOOL_CALLBACK (ref DSP_STATE dsp_state, int index, bool value); + public delegate RESULT DSP_SETPARAM_DATA_CALLBACK (ref DSP_STATE dsp_state, int index, IntPtr data, uint length); + public delegate RESULT DSP_GETPARAM_FLOAT_CALLBACK (ref DSP_STATE dsp_state, int index, ref float value, IntPtr valuestr); + public delegate RESULT DSP_GETPARAM_INT_CALLBACK (ref DSP_STATE dsp_state, int index, ref int value, IntPtr valuestr); + public delegate RESULT DSP_GETPARAM_BOOL_CALLBACK (ref DSP_STATE dsp_state, int index, ref bool value, IntPtr valuestr); + public delegate RESULT DSP_GETPARAM_DATA_CALLBACK (ref DSP_STATE dsp_state, int index, ref IntPtr data, ref uint length, IntPtr valuestr); + public delegate RESULT DSP_SYSTEM_REGISTER_CALLBACK (ref DSP_STATE dsp_state); + public delegate RESULT DSP_SYSTEM_DEREGISTER_CALLBACK (ref DSP_STATE dsp_state); + public delegate RESULT DSP_SYSTEM_MIX_CALLBACK (ref DSP_STATE dsp_state, int stage); + + + /* + DSP functions + */ + public delegate IntPtr DSP_ALLOC_FUNC (uint size, MEMORY_TYPE type, IntPtr sourcestr); + public delegate IntPtr DSP_REALLOC_FUNC (IntPtr ptr, uint size, MEMORY_TYPE type, IntPtr sourcestr); + public delegate void DSP_FREE_FUNC (IntPtr ptr, MEMORY_TYPE type, IntPtr sourcestr); + public delegate void DSP_LOG_FUNC (DEBUG_FLAGS level, IntPtr file, int line, IntPtr function, IntPtr format); + public delegate RESULT DSP_GETSAMPLERATE_FUNC (ref DSP_STATE dsp_state, ref int rate); + public delegate RESULT DSP_GETBLOCKSIZE_FUNC (ref DSP_STATE dsp_state, ref uint blocksize); + public delegate RESULT DSP_GETSPEAKERMODE_FUNC (ref DSP_STATE dsp_state, ref int speakermode_mixer, ref int speakermode_output); + public delegate RESULT DSP_GETCLOCK_FUNC (ref DSP_STATE dsp_state, out ulong clock, out uint offset, out uint length); + public delegate RESULT DSP_GETLISTENERATTRIBUTES_FUNC (ref DSP_STATE dsp_state, ref int numlisteners, IntPtr attributes); + public delegate RESULT DSP_GETUSERDATA_FUNC (ref DSP_STATE dsp_state, out IntPtr userdata); + public delegate RESULT DSP_DFT_FFTREAL_FUNC (ref DSP_STATE dsp_state, int size, IntPtr signal, IntPtr dft, IntPtr window, int signalhop); + public delegate RESULT DSP_DFT_IFFTREAL_FUNC (ref DSP_STATE dsp_state, int size, IntPtr dft, IntPtr signal, IntPtr window, int signalhop); + public delegate RESULT DSP_PAN_SUMMONOMATRIX_FUNC (ref DSP_STATE dsp_state, int sourceSpeakerMode, float lowFrequencyGain, float overallGain, IntPtr matrix); + public delegate RESULT DSP_PAN_SUMSTEREOMATRIX_FUNC (ref DSP_STATE dsp_state, int sourceSpeakerMode, float pan, float lowFrequencyGain, float overallGain, int matrixHop, IntPtr matrix); + public delegate RESULT DSP_PAN_SUMSURROUNDMATRIX_FUNC (ref DSP_STATE dsp_state, int sourceSpeakerMode, int targetSpeakerMode, float direction, float extent, float rotation, float lowFrequencyGain, float overallGain, int matrixHop, IntPtr matrix, DSP_PAN_SURROUND_FLAGS flags); + public delegate RESULT DSP_PAN_SUMMONOTOSURROUNDMATRIX_FUNC (ref DSP_STATE dsp_state, int targetSpeakerMode, float direction, float extent, float lowFrequencyGain, float overallGain, int matrixHop, IntPtr matrix); + public delegate RESULT DSP_PAN_SUMSTEREOTOSURROUNDMATRIX_FUNC (ref DSP_STATE dsp_state, int targetSpeakerMode, float direction, float extent, float rotation, float lowFrequencyGain, float overallGain, int matrixHop, IntPtr matrix); + public delegate RESULT DSP_PAN_GETROLLOFFGAIN_FUNC (ref DSP_STATE dsp_state, DSP_PAN_3D_ROLLOFF_TYPE rolloff, float distance, float mindistance, float maxdistance, out float gain); + + + public enum DSP_TYPE : int + { + UNKNOWN, + MIXER, + OSCILLATOR, + LOWPASS, + ITLOWPASS, + HIGHPASS, + ECHO, + FADER, + FLANGE, + DISTORTION, + NORMALIZE, + LIMITER, + PARAMEQ, + PITCHSHIFT, + CHORUS, + VSTPLUGIN, + WINAMPPLUGIN, + ITECHO, + COMPRESSOR, + SFXREVERB, + LOWPASS_SIMPLE, + DELAY, + TREMOLO, + LADSPAPLUGIN, + SEND, + RETURN, + HIGHPASS_SIMPLE, + PAN, + THREE_EQ, + FFT, + LOUDNESS_METER, + ENVELOPEFOLLOWER, + CONVOLUTIONREVERB, + CHANNELMIX, + TRANSCEIVER, + OBJECTPAN, + MULTIBAND_EQ, + MAX + } + + public enum DSP_PARAMETER_TYPE + { + FLOAT = 0, + INT, + BOOL, + DATA, + MAX + } + + public enum DSP_PARAMETER_FLOAT_MAPPING_TYPE + { + DSP_PARAMETER_FLOAT_MAPPING_TYPE_LINEAR = 0, + DSP_PARAMETER_FLOAT_MAPPING_TYPE_AUTO, + DSP_PARAMETER_FLOAT_MAPPING_TYPE_PIECEWISE_LINEAR, + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_FLOAT_MAPPING_PIECEWISE_LINEAR + { + public int numpoints; + public IntPtr pointparamvalues; + public IntPtr pointpositions; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_FLOAT_MAPPING + { + public DSP_PARAMETER_FLOAT_MAPPING_TYPE type; + public DSP_PARAMETER_FLOAT_MAPPING_PIECEWISE_LINEAR piecewiselinearmapping; + } + + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_FLOAT + { + public float min; + public float max; + public float defaultval; + public DSP_PARAMETER_FLOAT_MAPPING mapping; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_INT + { + public int min; + public int max; + public int defaultval; + public bool goestoinf; + public IntPtr valuenames; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_BOOL + { + public bool defaultval; + public IntPtr valuenames; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_DATA + { + public int datatype; + } + + [StructLayout(LayoutKind.Explicit)] + public struct DSP_PARAMETER_DESC_UNION + { + [FieldOffset(0)] + public DSP_PARAMETER_DESC_FLOAT floatdesc; + [FieldOffset(0)] + public DSP_PARAMETER_DESC_INT intdesc; + [FieldOffset(0)] + public DSP_PARAMETER_DESC_BOOL booldesc; + [FieldOffset(0)] + public DSP_PARAMETER_DESC_DATA datadesc; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC + { + public DSP_PARAMETER_TYPE type; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public byte[] name; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public byte[] label; + public string description; + + public DSP_PARAMETER_DESC_UNION desc; + } + + public enum DSP_PARAMETER_DATA_TYPE + { + DSP_PARAMETER_DATA_TYPE_USER = 0, + DSP_PARAMETER_DATA_TYPE_OVERALLGAIN = -1, + DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES = -2, + DSP_PARAMETER_DATA_TYPE_SIDECHAIN = -3, + DSP_PARAMETER_DATA_TYPE_FFT = -4, + DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES_MULTI = -5 + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_OVERALLGAIN + { + public float linear_gain; + public float linear_gain_additive; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_3DATTRIBUTES + { + public ATTRIBUTES_3D relative; + public ATTRIBUTES_3D absolute; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_3DATTRIBUTES_MULTI + { + public int numlisteners; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public ATTRIBUTES_3D[] relative; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public float[] weight; + public ATTRIBUTES_3D absolute; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_SIDECHAIN + { + public int sidechainenable; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_FFT + { + public int length; + public int numchannels; + + [MarshalAs(UnmanagedType.ByValArray,SizeConst=32)] + private IntPtr[] spectrum_internal; + + public float[][] spectrum + { + get + { + var buffer = new float[numchannels][]; + + for (int i = 0; i < numchannels; ++i) + { + buffer[i] = new float[length]; + Marshal.Copy(spectrum_internal[i], buffer[i], 0, length); + } + + return buffer; + } + } + + public void getSpectrum(ref float[][] buffer) + { + int bufferLength = Math.Min(buffer.Length, numchannels); + for (int i = 0; i < bufferLength; ++i) + { + getSpectrum(i, ref buffer[i]); + } + } + + public void getSpectrum(int channel, ref float[] buffer) + { + int bufferLength = Math.Min(buffer.Length, length); + Marshal.Copy(spectrum_internal[channel], buffer, 0, bufferLength); + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_DESCRIPTION + { + public uint pluginsdkversion; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public byte[] name; + public uint version; + public int numinputbuffers; + public int numoutputbuffers; + public DSP_CREATECALLBACK create; + public DSP_RELEASECALLBACK release; + public DSP_RESETCALLBACK reset; + public DSP_READCALLBACK read; + public DSP_PROCESS_CALLBACK process; + public DSP_SETPOSITIONCALLBACK setposition; + + public int numparameters; + public IntPtr paramdesc; + public DSP_SETPARAM_FLOAT_CALLBACK setparameterfloat; + public DSP_SETPARAM_INT_CALLBACK setparameterint; + public DSP_SETPARAM_BOOL_CALLBACK setparameterbool; + public DSP_SETPARAM_DATA_CALLBACK setparameterdata; + public DSP_GETPARAM_FLOAT_CALLBACK getparameterfloat; + public DSP_GETPARAM_INT_CALLBACK getparameterint; + public DSP_GETPARAM_BOOL_CALLBACK getparameterbool; + public DSP_GETPARAM_DATA_CALLBACK getparameterdata; + public DSP_SHOULDIPROCESS_CALLBACK shouldiprocess; + public IntPtr userdata; + + public DSP_SYSTEM_REGISTER_CALLBACK sys_register; + public DSP_SYSTEM_DEREGISTER_CALLBACK sys_deregister; + public DSP_SYSTEM_MIX_CALLBACK sys_mix; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE_DFT_FUNCTIONS + { + public DSP_DFT_FFTREAL_FUNC fftreal; + public DSP_DFT_IFFTREAL_FUNC inversefftreal; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE_PAN_FUNCTIONS + { + public DSP_PAN_SUMMONOMATRIX_FUNC summonomatrix; + public DSP_PAN_SUMSTEREOMATRIX_FUNC sumstereomatrix; + public DSP_PAN_SUMSURROUNDMATRIX_FUNC sumsurroundmatrix; + public DSP_PAN_SUMMONOTOSURROUNDMATRIX_FUNC summonotosurroundmatrix; + public DSP_PAN_SUMSTEREOTOSURROUNDMATRIX_FUNC sumstereotosurroundmatrix; + public DSP_PAN_GETROLLOFFGAIN_FUNC getrolloffgain; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE_FUNCTIONS + { + public DSP_ALLOC_FUNC alloc; + public DSP_REALLOC_FUNC realloc; + public DSP_FREE_FUNC free; + public DSP_GETSAMPLERATE_FUNC getsamplerate; + public DSP_GETBLOCKSIZE_FUNC getblocksize; + public IntPtr dft; + public IntPtr pan; + public DSP_GETSPEAKERMODE_FUNC getspeakermode; + public DSP_GETCLOCK_FUNC getclock; + public DSP_GETLISTENERATTRIBUTES_FUNC getlistenerattributes; + public DSP_LOG_FUNC log; + public DSP_GETUSERDATA_FUNC getuserdata; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE + { + public IntPtr instance; + public IntPtr plugindata; + public uint channelmask; + public int source_speakermode; + public IntPtr sidechaindata; + public int sidechainchannels; + public IntPtr functions; + public int systemobject; + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_METERING_INFO + { + public int numsamples; + [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)] + public float[] peaklevel; + [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)] + public float[] rmslevel; + public short numchannels; + } + + /* + ============================================================================================================== + + FMOD built in effect parameters. + Use DSP::setParameter with these enums for the 'index' parameter. + + ============================================================================================================== + */ + + public enum DSP_OSCILLATOR : int + { + TYPE, + RATE + } + + public enum DSP_LOWPASS : int + { + CUTOFF, + RESONANCE + } + + public enum DSP_ITLOWPASS : int + { + CUTOFF, + RESONANCE + } + + public enum DSP_HIGHPASS : int + { + CUTOFF, + RESONANCE + } + + public enum DSP_ECHO : int + { + DELAY, + FEEDBACK, + DRYLEVEL, + WETLEVEL + } + + public enum DSP_FADER : int + { + GAIN, + OVERALL_GAIN, + } + + public enum DSP_DELAY : int + { + CH0, + CH1, + CH2, + CH3, + CH4, + CH5, + CH6, + CH7, + CH8, + CH9, + CH10, + CH11, + CH12, + CH13, + CH14, + CH15, + MAXDELAY, + } + + public enum DSP_FLANGE : int + { + MIX, + DEPTH, + RATE + } + + public enum DSP_TREMOLO : int + { + FREQUENCY, + DEPTH, + SHAPE, + SKEW, + DUTY, + SQUARE, + PHASE, + SPREAD + } + + public enum DSP_DISTORTION : int + { + LEVEL + } + + public enum DSP_NORMALIZE : int + { + FADETIME, + THRESHHOLD, + MAXAMP + } + + public enum DSP_LIMITER : int + { + RELEASETIME, + CEILING, + MAXIMIZERGAIN, + MODE, + } + + public enum DSP_PARAMEQ : int + { + CENTER, + BANDWIDTH, + GAIN + } + + public enum DSP_MULTIBAND_EQ : int + { + A_FILTER, + A_FREQUENCY, + A_Q, + A_GAIN, + B_FILTER, + B_FREQUENCY, + B_Q, + B_GAIN, + C_FILTER, + C_FREQUENCY, + C_Q, + C_GAIN, + D_FILTER, + D_FREQUENCY, + D_Q, + D_GAIN, + E_FILTER, + E_FREQUENCY, + E_Q, + E_GAIN, + } + + public enum DSP_MULTIBAND_EQ_FILTER_TYPE : int + { + DISABLED, + LOWPASS_12DB, + LOWPASS_24DB, + LOWPASS_48DB, + HIGHPASS_12DB, + HIGHPASS_24DB, + HIGHPASS_48DB, + LOWSHELF, + HIGHSHELF, + PEAKING, + BANDPASS, + NOTCH, + ALLPASS, + } + + public enum DSP_PITCHSHIFT : int + { + PITCH, + FFTSIZE, + OVERLAP, + MAXCHANNELS + } + + public enum DSP_CHORUS : int + { + MIX, + RATE, + DEPTH, + } + + public enum DSP_ITECHO : int + { + WETDRYMIX, + FEEDBACK, + LEFTDELAY, + RIGHTDELAY, + PANDELAY + } + + public enum DSP_COMPRESSOR : int + { + THRESHOLD, + RATIO, + ATTACK, + RELEASE, + GAINMAKEUP, + USESIDECHAIN, + LINKED + } + + public enum DSP_SFXREVERB : int + { + DECAYTIME, + EARLYDELAY, + LATEDELAY, + HFREFERENCE, + HFDECAYRATIO, + DIFFUSION, + DENSITY, + LOWSHELFFREQUENCY, + LOWSHELFGAIN, + HIGHCUT, + EARLYLATEMIX, + WETLEVEL, + DRYLEVEL + } + + public enum DSP_LOWPASS_SIMPLE : int + { + CUTOFF + } + + public enum DSP_SEND : int + { + RETURNID, + LEVEL, + } + + public enum DSP_RETURN : int + { + ID, + INPUT_SPEAKER_MODE + } + + public enum DSP_HIGHPASS_SIMPLE : int + { + CUTOFF + } + + public enum DSP_PAN_2D_STEREO_MODE_TYPE : int + { + DISTRIBUTED, + DISCRETE + } + + public enum DSP_PAN_MODE_TYPE : int + { + MONO, + STEREO, + SURROUND + } + + public enum DSP_PAN_3D_ROLLOFF_TYPE : int + { + LINEARSQUARED, + LINEAR, + INVERSE, + INVERSETAPERED, + CUSTOM + } + + public enum DSP_PAN_3D_EXTENT_MODE_TYPE : int + { + AUTO, + USER, + OFF + } + + public enum DSP_PAN : int + { + MODE, + _2D_STEREO_POSITION, + _2D_DIRECTION, + _2D_EXTENT, + _2D_ROTATION, + _2D_LFE_LEVEL, + _2D_STEREO_MODE, + _2D_STEREO_SEPARATION, + _2D_STEREO_AXIS, + ENABLED_SPEAKERS, + _3D_POSITION, + _3D_ROLLOFF, + _3D_MIN_DISTANCE, + _3D_MAX_DISTANCE, + _3D_EXTENT_MODE, + _3D_SOUND_SIZE, + _3D_MIN_EXTENT, + _3D_PAN_BLEND, + LFE_UPMIX_ENABLED, + OVERALL_GAIN, + SURROUND_SPEAKER_MODE, + _2D_HEIGHT_BLEND, + } + + public enum DSP_THREE_EQ_CROSSOVERSLOPE_TYPE : int + { + _12DB, + _24DB, + _48DB + } + + public enum DSP_THREE_EQ : int + { + LOWGAIN, + MIDGAIN, + HIGHGAIN, + LOWCROSSOVER, + HIGHCROSSOVER, + CROSSOVERSLOPE + } + + public enum DSP_FFT_WINDOW : int + { + RECT, + TRIANGLE, + HAMMING, + HANNING, + BLACKMAN, + BLACKMANHARRIS + } + + public enum DSP_FFT : int + { + WINDOWSIZE, + WINDOWTYPE, + SPECTRUMDATA, + DOMINANT_FREQ + } + + public enum DSP_ENVELOPEFOLLOWER : int + { + ATTACK, + RELEASE, + ENVELOPE, + USESIDECHAIN + } + + public enum DSP_CONVOLUTION_REVERB : int + { + IR, + WET, + DRY, + LINKED + } + + public enum DSP_CHANNELMIX_OUTPUT : int + { + DEFAULT, + ALLMONO, + ALLSTEREO, + ALLQUAD, + ALL5POINT1, + ALL7POINT1, + ALLLFE, + ALL7POINT1POINT4 + } + + public enum DSP_CHANNELMIX : int + { + OUTPUTGROUPING, + GAIN_CH0, + GAIN_CH1, + GAIN_CH2, + GAIN_CH3, + GAIN_CH4, + GAIN_CH5, + GAIN_CH6, + GAIN_CH7, + GAIN_CH8, + GAIN_CH9, + GAIN_CH10, + GAIN_CH11, + GAIN_CH12, + GAIN_CH13, + GAIN_CH14, + GAIN_CH15, + GAIN_CH16, + GAIN_CH17, + GAIN_CH18, + GAIN_CH19, + GAIN_CH20, + GAIN_CH21, + GAIN_CH22, + GAIN_CH23, + GAIN_CH24, + GAIN_CH25, + GAIN_CH26, + GAIN_CH27, + GAIN_CH28, + GAIN_CH29, + GAIN_CH30, + GAIN_CH31, + OUTPUT_CH0, + OUTPUT_CH1, + OUTPUT_CH2, + OUTPUT_CH3, + OUTPUT_CH4, + OUTPUT_CH5, + OUTPUT_CH6, + OUTPUT_CH7, + OUTPUT_CH8, + OUTPUT_CH9, + OUTPUT_CH10, + OUTPUT_CH11, + OUTPUT_CH12, + OUTPUT_CH13, + OUTPUT_CH14, + OUTPUT_CH15, + OUTPUT_CH16, + OUTPUT_CH17, + OUTPUT_CH18, + OUTPUT_CH19, + OUTPUT_CH20, + OUTPUT_CH21, + OUTPUT_CH22, + OUTPUT_CH23, + OUTPUT_CH24, + OUTPUT_CH25, + OUTPUT_CH26, + OUTPUT_CH27, + OUTPUT_CH28, + OUTPUT_CH29, + OUTPUT_CH30, + OUTPUT_CH31, + } + + public enum DSP_TRANSCEIVER_SPEAKERMODE : int + { + AUTO = -1, + MONO = 0, + STEREO, + SURROUND, + } + + public enum DSP_TRANSCEIVER : int + { + TRANSMIT, + GAIN, + CHANNEL, + TRANSMITSPEAKERMODE + } + + public enum DSP_OBJECTPAN : int + { + _3D_POSITION, + _3D_ROLLOFF, + _3D_MIN_DISTANCE, + _3D_MAX_DISTANCE, + _3D_EXTENT_MODE, + _3D_SOUND_SIZE, + _3D_MIN_EXTENT, + OVERALL_GAIN, + OUTPUTGAIN + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_dsp.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_dsp.cs.meta new file mode 100644 index 0000000..5d5c6ab --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_dsp.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b7b10c26cf550794183b926ffae615a7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_errors.cs b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_errors.cs new file mode 100644 index 0000000..de05453 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_errors.cs @@ -0,0 +1,106 @@ +/* ============================================================================================== */ +/* FMOD Core / Studio API - Error string header file. */ +/* Copyright (c), Firelight Technologies Pty, Ltd. 2004-2020. */ +/* */ +/* Use this header if you want to store or display a string version / english explanation */ +/* of the FMOD error codes. */ +/* */ +/* For more detail visit: */ +/* https://fmod.com/resources/documentation-api?version=2.0&page=core-api-common.html#fmod_result */ +/* =============================================================================================== */ + +namespace FMOD +{ + public class Error + { + public static string String(FMOD.RESULT errcode) + { + switch (errcode) + { + case FMOD.RESULT.OK: return "No errors."; + case FMOD.RESULT.ERR_BADCOMMAND: return "Tried to call a function on a data type that does not allow this type of functionality (ie calling Sound::lock on a streaming sound)."; + case FMOD.RESULT.ERR_CHANNEL_ALLOC: return "Error trying to allocate a channel."; + case FMOD.RESULT.ERR_CHANNEL_STOLEN: return "The specified channel has been reused to play another sound."; + case FMOD.RESULT.ERR_DMA: return "DMA Failure. See debug output for more information."; + case FMOD.RESULT.ERR_DSP_CONNECTION: return "DSP connection error. Connection possibly caused a cyclic dependency or connected dsps with incompatible buffer counts."; + case FMOD.RESULT.ERR_DSP_DONTPROCESS: return "DSP return code from a DSP process query callback. Tells mixer not to call the process callback and therefore not consume CPU. Use this to optimize the DSP graph."; + case FMOD.RESULT.ERR_DSP_FORMAT: return "DSP Format error. A DSP unit may have attempted to connect to this network with the wrong format, or a matrix may have been set with the wrong size if the target unit has a specified channel map."; + case FMOD.RESULT.ERR_DSP_INUSE: return "DSP is already in the mixer's DSP network. It must be removed before being reinserted or released."; + case FMOD.RESULT.ERR_DSP_NOTFOUND: return "DSP connection error. Couldn't find the DSP unit specified."; + case FMOD.RESULT.ERR_DSP_RESERVED: return "DSP operation error. Cannot perform operation on this DSP as it is reserved by the system."; + case FMOD.RESULT.ERR_DSP_SILENCE: return "DSP return code from a DSP process query callback. Tells mixer silence would be produced from read, so go idle and not consume CPU. Use this to optimize the DSP graph."; + case FMOD.RESULT.ERR_DSP_TYPE: return "DSP operation cannot be performed on a DSP of this type."; + case FMOD.RESULT.ERR_FILE_BAD: return "Error loading file."; + case FMOD.RESULT.ERR_FILE_COULDNOTSEEK: return "Couldn't perform seek operation. This is a limitation of the medium (ie netstreams) or the file format."; + case FMOD.RESULT.ERR_FILE_DISKEJECTED: return "Media was ejected while reading."; + case FMOD.RESULT.ERR_FILE_EOF: return "End of file unexpectedly reached while trying to read essential data (truncated?)."; + case FMOD.RESULT.ERR_FILE_ENDOFDATA: return "End of current chunk reached while trying to read data."; + case FMOD.RESULT.ERR_FILE_NOTFOUND: return "File not found."; + case FMOD.RESULT.ERR_FORMAT: return "Unsupported file or audio format."; + case FMOD.RESULT.ERR_HEADER_MISMATCH: return "There is a version mismatch between the FMOD header and either the FMOD Studio library or the FMOD Low Level library."; + case FMOD.RESULT.ERR_HTTP: return "A HTTP error occurred. This is a catch-all for HTTP errors not listed elsewhere."; + case FMOD.RESULT.ERR_HTTP_ACCESS: return "The specified resource requires authentication or is forbidden."; + case FMOD.RESULT.ERR_HTTP_PROXY_AUTH: return "Proxy authentication is required to access the specified resource."; + case FMOD.RESULT.ERR_HTTP_SERVER_ERROR: return "A HTTP server error occurred."; + case FMOD.RESULT.ERR_HTTP_TIMEOUT: return "The HTTP request timed out."; + case FMOD.RESULT.ERR_INITIALIZATION: return "FMOD was not initialized correctly to support this function."; + case FMOD.RESULT.ERR_INITIALIZED: return "Cannot call this command after System::init."; + case FMOD.RESULT.ERR_INTERNAL: return "An error occurred that wasn't supposed to. Contact support."; + case FMOD.RESULT.ERR_INVALID_FLOAT: return "Value passed in was a NaN, Inf or denormalized float."; + case FMOD.RESULT.ERR_INVALID_HANDLE: return "An invalid object handle was used."; + case FMOD.RESULT.ERR_INVALID_PARAM: return "An invalid parameter was passed to this function."; + case FMOD.RESULT.ERR_INVALID_POSITION: return "An invalid seek position was passed to this function."; + case FMOD.RESULT.ERR_INVALID_SPEAKER: return "An invalid speaker was passed to this function based on the current speaker mode."; + case FMOD.RESULT.ERR_INVALID_SYNCPOINT: return "The syncpoint did not come from this sound handle."; + case FMOD.RESULT.ERR_INVALID_THREAD: return "Tried to call a function on a thread that is not supported."; + case FMOD.RESULT.ERR_INVALID_VECTOR: return "The vectors passed in are not unit length, or perpendicular."; + case FMOD.RESULT.ERR_MAXAUDIBLE: return "Reached maximum audible playback count for this sound's soundgroup."; + case FMOD.RESULT.ERR_MEMORY: return "Not enough memory or resources."; + case FMOD.RESULT.ERR_MEMORY_CANTPOINT: return "Can't use FMOD_OPENMEMORY_POINT on non PCM source data, or non mp3/xma/adpcm data if FMOD_CREATECOMPRESSEDSAMPLE was used."; + case FMOD.RESULT.ERR_NEEDS3D: return "Tried to call a command on a 2d sound when the command was meant for 3d sound."; + case FMOD.RESULT.ERR_NEEDSHARDWARE: return "Tried to use a feature that requires hardware support."; + case FMOD.RESULT.ERR_NET_CONNECT: return "Couldn't connect to the specified host."; + case FMOD.RESULT.ERR_NET_SOCKET_ERROR: return "A socket error occurred. This is a catch-all for socket-related errors not listed elsewhere."; + case FMOD.RESULT.ERR_NET_URL: return "The specified URL couldn't be resolved."; + case FMOD.RESULT.ERR_NET_WOULD_BLOCK: return "Operation on a non-blocking socket could not complete immediately."; + case FMOD.RESULT.ERR_NOTREADY: return "Operation could not be performed because specified sound/DSP connection is not ready."; + case FMOD.RESULT.ERR_OUTPUT_ALLOCATED: return "Error initializing output device, but more specifically, the output device is already in use and cannot be reused."; + case FMOD.RESULT.ERR_OUTPUT_CREATEBUFFER: return "Error creating hardware sound buffer."; + case FMOD.RESULT.ERR_OUTPUT_DRIVERCALL: return "A call to a standard soundcard driver failed, which could possibly mean a bug in the driver or resources were missing or exhausted."; + case FMOD.RESULT.ERR_OUTPUT_FORMAT: return "Soundcard does not support the specified format."; + case FMOD.RESULT.ERR_OUTPUT_INIT: return "Error initializing output device."; + case FMOD.RESULT.ERR_OUTPUT_NODRIVERS: return "The output device has no drivers installed. If pre-init, FMOD_OUTPUT_NOSOUND is selected as the output mode. If post-init, the function just fails."; + case FMOD.RESULT.ERR_PLUGIN: return "An unspecified error has been returned from a plugin."; + case FMOD.RESULT.ERR_PLUGIN_MISSING: return "A requested output, dsp unit type or codec was not available."; + case FMOD.RESULT.ERR_PLUGIN_RESOURCE: return "A resource that the plugin requires cannot be found. (ie the DLS file for MIDI playback)"; + case FMOD.RESULT.ERR_PLUGIN_VERSION: return "A plugin was built with an unsupported SDK version."; + case FMOD.RESULT.ERR_RECORD: return "An error occurred trying to initialize the recording device."; + case FMOD.RESULT.ERR_REVERB_CHANNELGROUP: return "Reverb properties cannot be set on this channel because a parent channelgroup owns the reverb connection."; + case FMOD.RESULT.ERR_REVERB_INSTANCE: return "Specified instance in FMOD_REVERB_PROPERTIES couldn't be set. Most likely because it is an invalid instance number or the reverb doesn't exist."; + case FMOD.RESULT.ERR_SUBSOUNDS: return "The error occurred because the sound referenced contains subsounds when it shouldn't have, or it doesn't contain subsounds when it should have. The operation may also not be able to be performed on a parent sound."; + case FMOD.RESULT.ERR_SUBSOUND_ALLOCATED: return "This subsound is already being used by another sound, you cannot have more than one parent to a sound. Null out the other parent's entry first."; + case FMOD.RESULT.ERR_SUBSOUND_CANTMOVE: return "Shared subsounds cannot be replaced or moved from their parent stream, such as when the parent stream is an FSB file."; + case FMOD.RESULT.ERR_TAGNOTFOUND: return "The specified tag could not be found or there are no tags."; + case FMOD.RESULT.ERR_TOOMANYCHANNELS: return "The sound created exceeds the allowable input channel count. This can be increased using the 'maxinputchannels' parameter in System::setSoftwareFormat."; + case FMOD.RESULT.ERR_TRUNCATED: return "The retrieved string is too long to fit in the supplied buffer and has been truncated."; + case FMOD.RESULT.ERR_UNIMPLEMENTED: return "Something in FMOD hasn't been implemented when it should be! contact support!"; + case FMOD.RESULT.ERR_UNINITIALIZED: return "This command failed because System::init or System::setDriver was not called."; + case FMOD.RESULT.ERR_UNSUPPORTED: return "A command issued was not supported by this object. Possibly a plugin without certain callbacks specified."; + case FMOD.RESULT.ERR_VERSION: return "The version number of this file format is not supported."; + case FMOD.RESULT.ERR_EVENT_ALREADY_LOADED: return "The specified bank has already been loaded."; + case FMOD.RESULT.ERR_EVENT_LIVEUPDATE_BUSY: return "The live update connection failed due to the game already being connected."; + case FMOD.RESULT.ERR_EVENT_LIVEUPDATE_MISMATCH: return "The live update connection failed due to the game data being out of sync with the tool."; + case FMOD.RESULT.ERR_EVENT_LIVEUPDATE_TIMEOUT: return "The live update connection timed out."; + case FMOD.RESULT.ERR_EVENT_NOTFOUND: return "The requested event, bus or vca could not be found."; + case FMOD.RESULT.ERR_STUDIO_UNINITIALIZED: return "The Studio::System object is not yet initialized."; + case FMOD.RESULT.ERR_STUDIO_NOT_LOADED: return "The specified resource is not loaded, so it can't be unloaded."; + case FMOD.RESULT.ERR_INVALID_STRING: return "An invalid string was passed to this function."; + case FMOD.RESULT.ERR_ALREADY_LOCKED: return "The specified resource is already locked."; + case FMOD.RESULT.ERR_NOT_LOCKED: return "The specified resource is not locked, so it can't be unlocked."; + case FMOD.RESULT.ERR_RECORD_DISCONNECTED: return "The specified recording driver has been disconnected."; + case FMOD.RESULT.ERR_TOOMANYSAMPLES: return "The length provided exceed the allowable limit."; + default: return "Unknown error."; + } + } + } +} diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_errors.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_errors.cs.meta new file mode 100644 index 0000000..2b15a75 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_errors.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6e0992509b0077e479d2da05c8f52eb0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_studio.cs b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_studio.cs new file mode 100644 index 0000000..f2f8207 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_studio.cs @@ -0,0 +1,2041 @@ +/* ======================================================================================== */ +/* FMOD Studio API - C# wrapper. */ +/* Copyright (c), Firelight Technologies Pty, Ltd. 2004-2020. */ +/* */ +/* For more detail visit: */ +/* https://fmod.com/resources/documentation-api?version=2.0&page=page=studio-api.html */ +/* ======================================================================================== */ + +using System; +using System.Text; +using System.Runtime.InteropServices; +using System.Collections; + +namespace FMOD.Studio +{ + public partial class STUDIO_VERSION + { +#if !UNITY_2017_4_OR_NEWER + public const string dll = "fmodstudio"; +#endif + } + + public enum STOP_MODE : int + { + ALLOWFADEOUT, + IMMEDIATE, + } + + public enum LOADING_STATE : int + { + UNLOADING, + UNLOADED, + LOADING, + LOADED, + ERROR, + } + + [StructLayout(LayoutKind.Sequential)] + public struct PROGRAMMER_SOUND_PROPERTIES + { + public StringWrapper name; + public IntPtr sound; + public int subsoundIndex; + } + + [StructLayout(LayoutKind.Sequential)] + public struct TIMELINE_MARKER_PROPERTIES + { + public StringWrapper name; + public int position; + } + + [StructLayout(LayoutKind.Sequential)] + public struct TIMELINE_BEAT_PROPERTIES + { + public int bar; + public int beat; + public int position; + public float tempo; + public int timesignatureupper; + public int timesignaturelower; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ADVANCEDSETTINGS + { + public int cbsize; + public int commandqueuesize; + public int handleinitialsize; + public int studioupdateperiod; + public int idlesampledatapoolsize; + public int streamingscheduledelay; + public IntPtr encryptionkey; + } + + [StructLayout(LayoutKind.Sequential)] + public struct CPU_USAGE + { + public float dspusage; + public float streamusage; + public float geometryusage; + public float updateusage; + public float studiousage; + } + + [StructLayout(LayoutKind.Sequential)] + public struct BUFFER_INFO + { + public int currentusage; + public int peakusage; + public int capacity; + public int stallcount; + public float stalltime; + } + + [StructLayout(LayoutKind.Sequential)] + public struct BUFFER_USAGE + { + public BUFFER_INFO studiocommandqueue; + public BUFFER_INFO studiohandle; + } + + [StructLayout(LayoutKind.Sequential)] + public struct BANK_INFO + { + public int size; + public IntPtr userdata; + public int userdatalength; + public FILE_OPEN_CALLBACK opencallback; + public FILE_CLOSE_CALLBACK closecallback; + public FILE_READ_CALLBACK readcallback; + public FILE_SEEK_CALLBACK seekcallback; + } + + [Flags] + public enum SYSTEM_CALLBACK_TYPE : uint + { + PREUPDATE = 0x00000001, + POSTUPDATE = 0x00000002, + BANK_UNLOAD = 0x00000004, + ALL = 0xFFFFFFFF, + } + + public delegate RESULT SYSTEM_CALLBACK(IntPtr system, SYSTEM_CALLBACK_TYPE type, IntPtr commanddata, IntPtr userdata); + + public enum PARAMETER_TYPE : int + { + GAME_CONTROLLED, + AUTOMATIC_DISTANCE, + AUTOMATIC_EVENT_CONE_ANGLE, + AUTOMATIC_EVENT_ORIENTATION, + AUTOMATIC_DIRECTION, + AUTOMATIC_ELEVATION, + AUTOMATIC_LISTENER_ORIENTATION, + AUTOMATIC_SPEED, + AUTOMATIC_SPEED_ABSOLUTE, + MAX + } + + [Flags] + public enum PARAMETER_FLAGS : uint + { + READONLY = 0x00000001, + AUTOMATIC = 0x00000002, + GLOBAL = 0x00000004, + DISCRETE = 0x00000008, + } + + [StructLayout(LayoutKind.Sequential)] + public struct PARAMETER_ID + { + public uint data1; + public uint data2; + } + + [StructLayout(LayoutKind.Sequential)] + public struct PARAMETER_DESCRIPTION + { + public StringWrapper name; + public PARAMETER_ID id; + public float minimum; + public float maximum; + public float defaultvalue; + public PARAMETER_TYPE type; + public PARAMETER_FLAGS flags; + } + + // This is only need for loading memory and given our C# wrapper LOAD_MEMORY_POINT isn't feasible anyway + enum LOAD_MEMORY_MODE : int + { + LOAD_MEMORY, + LOAD_MEMORY_POINT, + } + + enum LOAD_MEMORY_ALIGNMENT : int + { + VALUE = 32 + } + + [StructLayout(LayoutKind.Sequential)] + public struct SOUND_INFO + { + public IntPtr name_or_data; + public MODE mode; + public CREATESOUNDEXINFO exinfo; + public int subsoundindex; + + public string name + { + get + { + using (StringHelper.ThreadSafeEncoding encoding = StringHelper.GetFreeHelper()) + { + return ((mode & (MODE.OPENMEMORY | MODE.OPENMEMORY_POINT)) == 0) ? encoding.stringFromNative(name_or_data) : String.Empty; + } + } + } + } + + public enum USER_PROPERTY_TYPE : int + { + INTEGER, + BOOLEAN, + FLOAT, + STRING, + } + + [StructLayout(LayoutKind.Sequential)] + public struct USER_PROPERTY + { + public StringWrapper name; + public USER_PROPERTY_TYPE type; + private Union_IntBoolFloatString value; + + public int intValue() { return (type == USER_PROPERTY_TYPE.INTEGER) ? value.intvalue : -1; } + public bool boolValue() { return (type == USER_PROPERTY_TYPE.BOOLEAN) ? value.boolvalue : false; } + public float floatValue() { return (type == USER_PROPERTY_TYPE.FLOAT) ? value.floatvalue : -1; } + public string stringValue() { return (type == USER_PROPERTY_TYPE.STRING) ? value.stringvalue : ""; } + }; + + [StructLayout(LayoutKind.Explicit)] + struct Union_IntBoolFloatString + { + [FieldOffset(0)] + public int intvalue; + [FieldOffset(0)] + public bool boolvalue; + [FieldOffset(0)] + public float floatvalue; + [FieldOffset(0)] + public StringWrapper stringvalue; + } + + [Flags] + public enum INITFLAGS : uint + { + NORMAL = 0x00000000, + LIVEUPDATE = 0x00000001, + ALLOW_MISSING_PLUGINS = 0x00000002, + SYNCHRONOUS_UPDATE = 0x00000004, + DEFERRED_CALLBACKS = 0x00000008, + LOAD_FROM_UPDATE = 0x00000010, + MEMORY_TRACKING = 0x00000020, + } + + [Flags] + public enum LOAD_BANK_FLAGS : uint + { + NORMAL = 0x00000000, + NONBLOCKING = 0x00000001, + DECOMPRESS_SAMPLES = 0x00000002, + UNENCRYPTED = 0x00000004, + } + + [Flags] + public enum COMMANDCAPTURE_FLAGS : uint + { + NORMAL = 0x00000000, + FILEFLUSH = 0x00000001, + SKIP_INITIAL_STATE = 0x00000002, + } + + [Flags] + public enum COMMANDREPLAY_FLAGS : uint + { + NORMAL = 0x00000000, + SKIP_CLEANUP = 0x00000001, + FAST_FORWARD = 0x00000002, + SKIP_BANK_LOAD = 0x00000004, + } + + public enum PLAYBACK_STATE : int + { + PLAYING, + SUSTAINING, + STOPPED, + STARTING, + STOPPING, + } + + public enum EVENT_PROPERTY : int + { + CHANNELPRIORITY, + SCHEDULE_DELAY, + SCHEDULE_LOOKAHEAD, + MINIMUM_DISTANCE, + MAXIMUM_DISTANCE, + COOLDOWN, + MAX + }; + + [StructLayout(LayoutKind.Sequential)] + public struct PLUGIN_INSTANCE_PROPERTIES + { + public IntPtr name; + public IntPtr dsp; + } + + [Flags] + public enum EVENT_CALLBACK_TYPE : uint + { + CREATED = 0x00000001, + DESTROYED = 0x00000002, + STARTING = 0x00000004, + STARTED = 0x00000008, + RESTARTED = 0x00000010, + STOPPED = 0x00000020, + START_FAILED = 0x00000040, + CREATE_PROGRAMMER_SOUND = 0x00000080, + DESTROY_PROGRAMMER_SOUND = 0x00000100, + PLUGIN_CREATED = 0x00000200, + PLUGIN_DESTROYED = 0x00000400, + TIMELINE_MARKER = 0x00000800, + TIMELINE_BEAT = 0x00001000, + SOUND_PLAYED = 0x00002000, + SOUND_STOPPED = 0x00004000, + REAL_TO_VIRTUAL = 0x00008000, + VIRTUAL_TO_REAL = 0x00010000, + START_EVENT_COMMAND = 0x00020000, + + ALL = 0xFFFFFFFF, + } + + public delegate RESULT EVENT_CALLBACK(EVENT_CALLBACK_TYPE type, IntPtr _event, IntPtr parameters); + + public delegate RESULT COMMANDREPLAY_FRAME_CALLBACK(IntPtr replay, int commandindex, float currenttime, IntPtr userdata); + public delegate RESULT COMMANDREPLAY_LOAD_BANK_CALLBACK(IntPtr replay, int commandindex, Guid bankguid, IntPtr bankfilename, LOAD_BANK_FLAGS flags, out IntPtr bank, IntPtr userdata); + public delegate RESULT COMMANDREPLAY_CREATE_INSTANCE_CALLBACK(IntPtr replay, int commandindex, IntPtr eventdescription, out IntPtr instance, IntPtr userdata); + + public enum INSTANCETYPE : int + { + NONE, + SYSTEM, + EVENTDESCRIPTION, + EVENTINSTANCE, + PARAMETERINSTANCE, + BUS, + VCA, + BANK, + COMMANDREPLAY, + } + + [StructLayout(LayoutKind.Sequential)] + public struct COMMAND_INFO + { + public StringWrapper commandname; + public int parentcommandindex; + public int framenumber; + public float frametime; + public INSTANCETYPE instancetype; + public INSTANCETYPE outputtype; + public UInt32 instancehandle; + public UInt32 outputhandle; + } + + [StructLayout(LayoutKind.Sequential)] + public struct MEMORY_USAGE + { + public int exclusive; + public int inclusive; + public int sampledata; + } + + public struct Util + { + public static RESULT parseID(string idString, out Guid id) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_ParseID(encoder.byteFromStringUTF8(idString), out id); + } + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_ParseID(byte[] idString, out Guid id); + #endregion + } + + public struct System + { + // Initialization / system functions. + public static RESULT create(out System system) + { + return FMOD_Studio_System_Create(out system.handle, VERSION.number); + } + public RESULT setAdvancedSettings(ADVANCEDSETTINGS settings) + { + settings.cbsize = Marshal.SizeOf(typeof(ADVANCEDSETTINGS)); + return FMOD_Studio_System_SetAdvancedSettings(this.handle, ref settings); + } + public RESULT setAdvancedSettings(ADVANCEDSETTINGS settings, string encryptionKey) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + IntPtr userKey = settings.encryptionkey; + settings.encryptionkey = encoder.intptrFromStringUTF8(encryptionKey); + FMOD.RESULT result = setAdvancedSettings(settings); + settings.encryptionkey = userKey; + return result; + } + } + public RESULT getAdvancedSettings(out ADVANCEDSETTINGS settings) + { + settings.cbsize = Marshal.SizeOf(typeof(ADVANCEDSETTINGS)); + return FMOD_Studio_System_GetAdvancedSettings(this.handle, out settings); + } + public RESULT initialize(int maxchannels, INITFLAGS studioflags, FMOD.INITFLAGS flags, IntPtr extradriverdata) + { + return FMOD_Studio_System_Initialize(this.handle, maxchannels, studioflags, flags, extradriverdata); + } + public RESULT release() + { + return FMOD_Studio_System_Release(this.handle); + } + public RESULT update() + { + return FMOD_Studio_System_Update(this.handle); + } + public RESULT getCoreSystem(out FMOD.System coresystem) + { + return FMOD_Studio_System_GetCoreSystem(this.handle, out coresystem.handle); + } + public RESULT getEvent(string path, out EventDescription _event) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_GetEvent(this.handle, encoder.byteFromStringUTF8(path), out _event.handle); + } + } + public RESULT getBus(string path, out Bus bus) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_GetBus(this.handle, encoder.byteFromStringUTF8(path), out bus.handle); + } + } + public RESULT getVCA(string path, out VCA vca) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_GetVCA(this.handle, encoder.byteFromStringUTF8(path), out vca.handle); + } + } + public RESULT getBank(string path, out Bank bank) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_GetBank(this.handle, encoder.byteFromStringUTF8(path), out bank.handle); + } + } + + public RESULT getEventByID(Guid id, out EventDescription _event) + { + return FMOD_Studio_System_GetEventByID(this.handle, ref id, out _event.handle); + } + public RESULT getBusByID(Guid id, out Bus bus) + { + return FMOD_Studio_System_GetBusByID(this.handle, ref id, out bus.handle); + } + public RESULT getVCAByID(Guid id, out VCA vca) + { + return FMOD_Studio_System_GetVCAByID(this.handle, ref id, out vca.handle); + } + public RESULT getBankByID(Guid id, out Bank bank) + { + return FMOD_Studio_System_GetBankByID(this.handle, ref id, out bank.handle); + } + public RESULT getSoundInfo(string key, out SOUND_INFO info) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_GetSoundInfo(this.handle, encoder.byteFromStringUTF8(key), out info); + } + } + public RESULT getParameterDescriptionByName(string name, out PARAMETER_DESCRIPTION parameter) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_GetParameterDescriptionByName(this.handle, encoder.byteFromStringUTF8(name), out parameter); + } + } + public RESULT getParameterDescriptionByID(PARAMETER_ID id, out PARAMETER_DESCRIPTION parameter) + { + return FMOD_Studio_System_GetParameterDescriptionByID(this.handle, id, out parameter); + } + public RESULT getParameterByID(PARAMETER_ID id, out float value) + { + float finalValue; + return getParameterByID(id, out value, out finalValue); + } + public RESULT getParameterByID(PARAMETER_ID id, out float value, out float finalvalue) + { + return FMOD_Studio_System_GetParameterByID(this.handle, id, out value, out finalvalue); + } + public RESULT setParameterByID(PARAMETER_ID id, float value, bool ignoreseekspeed = false) + { + return FMOD_Studio_System_SetParameterByID(this.handle, id, value, ignoreseekspeed); + } + public RESULT setParametersByIDs(PARAMETER_ID[] ids, float[] values, int count, bool ignoreseekspeed = false) + { + return FMOD_Studio_System_SetParametersByIDs(this.handle, ids, values, count, ignoreseekspeed); + } + public RESULT getParameterByName(string name, out float value) + { + float finalValue; + return getParameterByName(name, out value, out finalValue); + } + public RESULT getParameterByName(string name, out float value, out float finalvalue) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_GetParameterByName(this.handle, encoder.byteFromStringUTF8(name), out value, out finalvalue); + } + } + public RESULT setParameterByName(string name, float value, bool ignoreseekspeed = false) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_SetParameterByName(this.handle, encoder.byteFromStringUTF8(name), value, ignoreseekspeed); + } + } + public RESULT lookupID(string path, out Guid id) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_LookupID(this.handle, encoder.byteFromStringUTF8(path), out id); + } + } + public RESULT lookupPath(Guid id, out string path) + { + path = null; + + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + IntPtr stringMem = Marshal.AllocHGlobal(256); + int retrieved = 0; + RESULT result = FMOD_Studio_System_LookupPath(this.handle, ref id, stringMem, 256, out retrieved); + + if (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringMem = Marshal.AllocHGlobal(retrieved); + result = FMOD_Studio_System_LookupPath(this.handle, ref id, stringMem, retrieved, out retrieved); + } + + if (result == RESULT.OK) + { + path = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + return result; + } + } + public RESULT getNumListeners(out int numlisteners) + { + return FMOD_Studio_System_GetNumListeners(this.handle, out numlisteners); + } + public RESULT setNumListeners(int numlisteners) + { + return FMOD_Studio_System_SetNumListeners(this.handle, numlisteners); + } + public RESULT getListenerAttributes(int listener, out ATTRIBUTES_3D attributes) + { + return FMOD_Studio_System_GetListenerAttributes(this.handle, listener, out attributes, IntPtr.Zero); + } + public RESULT getListenerAttributes(int listener, out ATTRIBUTES_3D attributes, out VECTOR attenuationposition) + { + return FMOD_Studio_System_GetListenerAttributes(this.handle, listener, out attributes, out attenuationposition); + } + public RESULT setListenerAttributes(int listener, ATTRIBUTES_3D attributes) + { + return FMOD_Studio_System_SetListenerAttributes(this.handle, listener, ref attributes, IntPtr.Zero); + } + public RESULT setListenerAttributes(int listener, ATTRIBUTES_3D attributes, VECTOR attenuationposition) + { + return FMOD_Studio_System_SetListenerAttributes(this.handle, listener, ref attributes, ref attenuationposition); + } + public RESULT getListenerWeight(int listener, out float weight) + { + return FMOD_Studio_System_GetListenerWeight(this.handle, listener, out weight); + } + public RESULT setListenerWeight(int listener, float weight) + { + return FMOD_Studio_System_SetListenerWeight(this.handle, listener, weight); + } + public RESULT loadBankFile(string filename, LOAD_BANK_FLAGS flags, out Bank bank) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_LoadBankFile(this.handle, encoder.byteFromStringUTF8(filename), flags, out bank.handle); + } + } + public RESULT loadBankMemory(byte[] buffer, LOAD_BANK_FLAGS flags, out Bank bank) + { + // Manually pin the byte array. It's what the marshaller should do anyway but don't leave it to chance. + GCHandle pinnedArray = GCHandle.Alloc(buffer, GCHandleType.Pinned); + IntPtr pointer = pinnedArray.AddrOfPinnedObject(); + RESULT result = FMOD_Studio_System_LoadBankMemory(this.handle, pointer, buffer.Length, LOAD_MEMORY_MODE.LOAD_MEMORY, flags, out bank.handle); + pinnedArray.Free(); + return result; + } + public RESULT loadBankCustom(BANK_INFO info, LOAD_BANK_FLAGS flags, out Bank bank) + { + info.size = Marshal.SizeOf(info); + return FMOD_Studio_System_LoadBankCustom(this.handle, ref info, flags, out bank.handle); + } + public RESULT unloadAll() + { + return FMOD_Studio_System_UnloadAll(this.handle); + } + public RESULT flushCommands() + { + return FMOD_Studio_System_FlushCommands(this.handle); + } + public RESULT flushSampleLoading() + { + return FMOD_Studio_System_FlushSampleLoading(this.handle); + } + public RESULT startCommandCapture(string filename, COMMANDCAPTURE_FLAGS flags) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_StartCommandCapture(this.handle, encoder.byteFromStringUTF8(filename), flags); + } + } + public RESULT stopCommandCapture() + { + return FMOD_Studio_System_StopCommandCapture(this.handle); + } + public RESULT loadCommandReplay(string filename, COMMANDREPLAY_FLAGS flags, out CommandReplay replay) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_LoadCommandReplay(this.handle, encoder.byteFromStringUTF8(filename), flags, out replay.handle); + } + } + public RESULT getBankCount(out int count) + { + return FMOD_Studio_System_GetBankCount(this.handle, out count); + } + public RESULT getBankList(out Bank[] array) + { + array = null; + + RESULT result; + int capacity; + result = FMOD_Studio_System_GetBankCount(this.handle, out capacity); + if (result != RESULT.OK) + { + return result; + } + if (capacity == 0) + { + array = new Bank[0]; + return result; + } + + IntPtr[] rawArray = new IntPtr[capacity]; + int actualCount; + result = FMOD_Studio_System_GetBankList(this.handle, rawArray, capacity, out actualCount); + if (result != RESULT.OK) + { + return result; + } + if (actualCount > capacity) // More items added since we queried just now? + { + actualCount = capacity; + } + array = new Bank[actualCount]; + for (int i = 0; i < actualCount; ++i) + { + array[i].handle = rawArray[i]; + } + return RESULT.OK; + } + public RESULT getParameterDescriptionCount(out int count) + { + return FMOD_Studio_System_GetParameterDescriptionCount(this.handle, out count); + } + public RESULT getParameterDescriptionList(out PARAMETER_DESCRIPTION[] array) + { + array = null; + + int capacity; + RESULT result = FMOD_Studio_System_GetParameterDescriptionCount(this.handle, out capacity); + if (result != RESULT.OK) + { + return result; + } + if (capacity == 0) + { + array = new PARAMETER_DESCRIPTION[0]; + return RESULT.OK; + } + + PARAMETER_DESCRIPTION[] tempArray = new PARAMETER_DESCRIPTION[capacity]; + int actualCount; + result = FMOD_Studio_System_GetParameterDescriptionList(this.handle, tempArray, capacity, out actualCount); + if (result != RESULT.OK) + { + return result; + } + + if (actualCount != capacity) + { + Array.Resize(ref tempArray, actualCount); + } + + array = tempArray; + + return RESULT.OK; + } + public RESULT getCPUUsage(out CPU_USAGE usage) + { + return FMOD_Studio_System_GetCPUUsage(this.handle, out usage); + } + public RESULT getBufferUsage(out BUFFER_USAGE usage) + { + return FMOD_Studio_System_GetBufferUsage(this.handle, out usage); + } + public RESULT resetBufferUsage() + { + return FMOD_Studio_System_ResetBufferUsage(this.handle); + } + + public RESULT setCallback(SYSTEM_CALLBACK callback, SYSTEM_CALLBACK_TYPE callbackmask = SYSTEM_CALLBACK_TYPE.ALL) + { + return FMOD_Studio_System_SetCallback(this.handle, callback, callbackmask); + } + + public RESULT getUserData(out IntPtr userdata) + { + return FMOD_Studio_System_GetUserData(this.handle, out userdata); + } + + public RESULT setUserData(IntPtr userdata) + { + return FMOD_Studio_System_SetUserData(this.handle, userdata); + } + + public RESULT getMemoryUsage(out MEMORY_USAGE memoryusage) + { + return FMOD_Studio_System_GetMemoryUsage(this.handle, out memoryusage); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Create (out IntPtr system, uint headerversion); + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_System_IsValid (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetAdvancedSettings (IntPtr system, ref ADVANCEDSETTINGS settings); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetAdvancedSettings (IntPtr system, out ADVANCEDSETTINGS settings); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Initialize (IntPtr system, int maxchannels, INITFLAGS studioflags, FMOD.INITFLAGS flags, IntPtr extradriverdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Release (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Update (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetCoreSystem (IntPtr system, out IntPtr coresystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetEvent (IntPtr system, byte[] path, out IntPtr _event); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBus (IntPtr system, byte[] path, out IntPtr bus); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetVCA (IntPtr system, byte[] path, out IntPtr vca); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBank (IntPtr system, byte[] path, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetEventByID (IntPtr system, ref Guid id, out IntPtr _event); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBusByID (IntPtr system, ref Guid id, out IntPtr bus); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetVCAByID (IntPtr system, ref Guid id, out IntPtr vca); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBankByID (IntPtr system, ref Guid id, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetSoundInfo (IntPtr system, byte[] key, out SOUND_INFO info); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetParameterDescriptionByName(IntPtr system, byte[] name, out PARAMETER_DESCRIPTION parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetParameterDescriptionByID(IntPtr system, PARAMETER_ID id, out PARAMETER_DESCRIPTION parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetParameterByID (IntPtr system, PARAMETER_ID id, out float value, out float finalvalue); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetParameterByID (IntPtr system, PARAMETER_ID id, float value, bool ignoreseekspeed); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetParametersByIDs (IntPtr system, PARAMETER_ID[] ids, float[] values, int count, bool ignoreseekspeed); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetParameterByName (IntPtr system, byte[] name, out float value, out float finalvalue); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetParameterByName (IntPtr system, byte[] name, float value, bool ignoreseekspeed); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LookupID (IntPtr system, byte[] path, out Guid id); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LookupPath (IntPtr system, ref Guid id, IntPtr path, int size, out int retrieved); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetNumListeners (IntPtr system, out int numlisteners); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetNumListeners (IntPtr system, int numlisteners); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetListenerAttributes (IntPtr system, int listener, out ATTRIBUTES_3D attributes, IntPtr zero); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetListenerAttributes (IntPtr system, int listener, out ATTRIBUTES_3D attributes, out VECTOR attenuationposition); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetListenerAttributes (IntPtr system, int listener, ref ATTRIBUTES_3D attributes, IntPtr zero); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetListenerAttributes (IntPtr system, int listener, ref ATTRIBUTES_3D attributes, ref VECTOR attenuationposition); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetListenerWeight (IntPtr system, int listener, out float weight); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetListenerWeight (IntPtr system, int listener, float weight); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LoadBankFile (IntPtr system, byte[] filename, LOAD_BANK_FLAGS flags, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LoadBankMemory (IntPtr system, IntPtr buffer, int length, LOAD_MEMORY_MODE mode, LOAD_BANK_FLAGS flags, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LoadBankCustom (IntPtr system, ref BANK_INFO info, LOAD_BANK_FLAGS flags, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_UnloadAll (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_FlushCommands (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_FlushSampleLoading (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_StartCommandCapture (IntPtr system, byte[] filename, COMMANDCAPTURE_FLAGS flags); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_StopCommandCapture (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LoadCommandReplay (IntPtr system, byte[] filename, COMMANDREPLAY_FLAGS flags, out IntPtr replay); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBankCount (IntPtr system, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBankList (IntPtr system, IntPtr[] array, int capacity, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetParameterDescriptionCount(IntPtr system, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetParameterDescriptionList(IntPtr system, [Out] PARAMETER_DESCRIPTION[] array, int capacity, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetCPUUsage (IntPtr system, out CPU_USAGE usage); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBufferUsage (IntPtr system, out BUFFER_USAGE usage); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_ResetBufferUsage (IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetCallback (IntPtr system, SYSTEM_CALLBACK callback, SYSTEM_CALLBACK_TYPE callbackmask); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetUserData (IntPtr system, out IntPtr userdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetUserData (IntPtr system, IntPtr userdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetMemoryUsage (IntPtr system, out MEMORY_USAGE memoryusage); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public System(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_System_IsValid(this.handle); + } + + #endregion + } + + public struct EventDescription + { + public RESULT getID(out Guid id) + { + return FMOD_Studio_EventDescription_GetID(this.handle, out id); + } + public RESULT getPath(out string path) + { + path = null; + + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + IntPtr stringMem = Marshal.AllocHGlobal(256); + int retrieved = 0; + RESULT result = FMOD_Studio_EventDescription_GetPath(this.handle, stringMem, 256, out retrieved); + + if (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringMem = Marshal.AllocHGlobal(retrieved); + result = FMOD_Studio_EventDescription_GetPath(this.handle, stringMem, retrieved, out retrieved); + } + + if (result == RESULT.OK) + { + path = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + return result; + } + } + public RESULT getParameterDescriptionCount(out int count) + { + return FMOD_Studio_EventDescription_GetParameterDescriptionCount(this.handle, out count); + } + public RESULT getParameterDescriptionByIndex(int index, out PARAMETER_DESCRIPTION parameter) + { + return FMOD_Studio_EventDescription_GetParameterDescriptionByIndex(this.handle, index, out parameter); + } + public RESULT getParameterDescriptionByName(string name, out PARAMETER_DESCRIPTION parameter) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventDescription_GetParameterDescriptionByName(this.handle, encoder.byteFromStringUTF8(name), out parameter); + } + } + public RESULT getParameterDescriptionByID(PARAMETER_ID id, out PARAMETER_DESCRIPTION parameter) + { + return FMOD_Studio_EventDescription_GetParameterDescriptionByID(this.handle, id, out parameter); + } + public RESULT getUserPropertyCount(out int count) + { + return FMOD_Studio_EventDescription_GetUserPropertyCount(this.handle, out count); + } + public RESULT getUserPropertyByIndex(int index, out USER_PROPERTY property) + { + return FMOD_Studio_EventDescription_GetUserPropertyByIndex(this.handle, index, out property); + } + public RESULT getUserProperty(string name, out USER_PROPERTY property) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventDescription_GetUserProperty(this.handle, encoder.byteFromStringUTF8(name), out property); + } + } + public RESULT getLength(out int length) + { + return FMOD_Studio_EventDescription_GetLength(this.handle, out length); + } + public RESULT getMinimumDistance(out float distance) + { + return FMOD_Studio_EventDescription_GetMinimumDistance(this.handle, out distance); + } + public RESULT getMaximumDistance(out float distance) + { + return FMOD_Studio_EventDescription_GetMaximumDistance(this.handle, out distance); + } + public RESULT getSoundSize(out float size) + { + return FMOD_Studio_EventDescription_GetSoundSize(this.handle, out size); + } + public RESULT isSnapshot(out bool snapshot) + { + return FMOD_Studio_EventDescription_IsSnapshot(this.handle, out snapshot); + } + public RESULT isOneshot(out bool oneshot) + { + return FMOD_Studio_EventDescription_IsOneshot(this.handle, out oneshot); + } + public RESULT isStream(out bool isStream) + { + return FMOD_Studio_EventDescription_IsStream(this.handle, out isStream); + } + public RESULT is3D(out bool is3D) + { + return FMOD_Studio_EventDescription_Is3D(this.handle, out is3D); + } + public RESULT hasCue(out bool cue) + { + return FMOD_Studio_EventDescription_HasCue(this.handle, out cue); + } + + public RESULT createInstance(out EventInstance instance) + { + return FMOD_Studio_EventDescription_CreateInstance(this.handle, out instance.handle); + } + + public RESULT getInstanceCount(out int count) + { + return FMOD_Studio_EventDescription_GetInstanceCount(this.handle, out count); + } + public RESULT getInstanceList(out EventInstance[] array) + { + array = null; + + RESULT result; + int capacity; + result = FMOD_Studio_EventDescription_GetInstanceCount(this.handle, out capacity); + if (result != RESULT.OK) + { + return result; + } + if (capacity == 0) + { + array = new EventInstance[0]; + return result; + } + + IntPtr[] rawArray = new IntPtr[capacity]; + int actualCount; + result = FMOD_Studio_EventDescription_GetInstanceList(this.handle, rawArray, capacity, out actualCount); + if (result != RESULT.OK) + { + return result; + } + if (actualCount > capacity) // More items added since we queried just now? + { + actualCount = capacity; + } + array = new EventInstance[actualCount]; + for (int i = 0; i < actualCount; ++i) + { + array[i].handle = rawArray[i]; + } + return RESULT.OK; + } + + public RESULT loadSampleData() + { + return FMOD_Studio_EventDescription_LoadSampleData(this.handle); + } + + public RESULT unloadSampleData() + { + return FMOD_Studio_EventDescription_UnloadSampleData(this.handle); + } + + public RESULT getSampleLoadingState(out LOADING_STATE state) + { + return FMOD_Studio_EventDescription_GetSampleLoadingState(this.handle, out state); + } + + public RESULT releaseAllInstances() + { + return FMOD_Studio_EventDescription_ReleaseAllInstances(this.handle); + } + public RESULT setCallback(EVENT_CALLBACK callback, EVENT_CALLBACK_TYPE callbackmask = EVENT_CALLBACK_TYPE.ALL) + { + return FMOD_Studio_EventDescription_SetCallback(this.handle, callback, callbackmask); + } + + public RESULT getUserData(out IntPtr userdata) + { + return FMOD_Studio_EventDescription_GetUserData(this.handle, out userdata); + } + + public RESULT setUserData(IntPtr userdata) + { + return FMOD_Studio_EventDescription_SetUserData(this.handle, userdata); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_EventDescription_IsValid (IntPtr eventdescription); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetID (IntPtr eventdescription, out Guid id); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetPath (IntPtr eventdescription, IntPtr path, int size, out int retrieved); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetParameterDescriptionCount(IntPtr eventdescription, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetParameterDescriptionByIndex(IntPtr eventdescription, int index, out PARAMETER_DESCRIPTION parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetParameterDescriptionByName(IntPtr eventdescription, byte[] name, out PARAMETER_DESCRIPTION parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetParameterDescriptionByID(IntPtr eventdescription, PARAMETER_ID id, out PARAMETER_DESCRIPTION parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetUserPropertyCount (IntPtr eventdescription, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetUserPropertyByIndex(IntPtr eventdescription, int index, out USER_PROPERTY property); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetUserProperty (IntPtr eventdescription, byte[] name, out USER_PROPERTY property); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetLength (IntPtr eventdescription, out int length); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetMinimumDistance (IntPtr eventdescription, out float distance); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetMaximumDistance (IntPtr eventdescription, out float distance); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetSoundSize (IntPtr eventdescription, out float size); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_IsSnapshot (IntPtr eventdescription, out bool snapshot); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_IsOneshot (IntPtr eventdescription, out bool oneshot); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_IsStream (IntPtr eventdescription, out bool isStream); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_Is3D (IntPtr eventdescription, out bool is3D); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_HasCue (IntPtr eventdescription, out bool cue); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_CreateInstance (IntPtr eventdescription, out IntPtr instance); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetInstanceCount (IntPtr eventdescription, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetInstanceList (IntPtr eventdescription, IntPtr[] array, int capacity, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_LoadSampleData (IntPtr eventdescription); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_UnloadSampleData (IntPtr eventdescription); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetSampleLoadingState (IntPtr eventdescription, out LOADING_STATE state); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_ReleaseAllInstances (IntPtr eventdescription); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_SetCallback (IntPtr eventdescription, EVENT_CALLBACK callback, EVENT_CALLBACK_TYPE callbackmask); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetUserData (IntPtr eventdescription, out IntPtr userdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_SetUserData (IntPtr eventdescription, IntPtr userdata); + #endregion + #region wrapperinternal + + public IntPtr handle; + + public EventDescription(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_EventDescription_IsValid(this.handle); + } + + #endregion + } + + public struct EventInstance + { + public RESULT getDescription(out EventDescription description) + { + return FMOD_Studio_EventInstance_GetDescription(this.handle, out description.handle); + } + public RESULT getVolume(out float volume) + { + float finalVolume; + return getVolume(out volume, out finalVolume); + } + public RESULT getVolume(out float volume, out float finalvolume) + { + return FMOD_Studio_EventInstance_GetVolume(this.handle, out volume, out finalvolume); + } + public RESULT setVolume(float volume) + { + return FMOD_Studio_EventInstance_SetVolume(this.handle, volume); + } + public RESULT getPitch(out float pitch) + { + float finalPitch; + return getPitch(out pitch, out finalPitch); + } + public RESULT getPitch(out float pitch, out float finalpitch) + { + return FMOD_Studio_EventInstance_GetPitch(this.handle, out pitch, out finalpitch); + } + public RESULT setPitch(float pitch) + { + return FMOD_Studio_EventInstance_SetPitch(this.handle, pitch); + } + public RESULT get3DAttributes(out ATTRIBUTES_3D attributes) + { + return FMOD_Studio_EventInstance_Get3DAttributes(this.handle, out attributes); + } + public RESULT set3DAttributes(ATTRIBUTES_3D attributes) + { + return FMOD_Studio_EventInstance_Set3DAttributes(this.handle, ref attributes); + } + public RESULT getListenerMask(out uint mask) + { + return FMOD_Studio_EventInstance_GetListenerMask(this.handle, out mask); + } + public RESULT setListenerMask(uint mask) + { + return FMOD_Studio_EventInstance_SetListenerMask(this.handle, mask); + } + public RESULT getProperty(EVENT_PROPERTY index, out float value) + { + return FMOD_Studio_EventInstance_GetProperty(this.handle, index, out value); + } + public RESULT setProperty(EVENT_PROPERTY index, float value) + { + return FMOD_Studio_EventInstance_SetProperty(this.handle, index, value); + } + public RESULT getReverbLevel(int index, out float level) + { + return FMOD_Studio_EventInstance_GetReverbLevel(this.handle, index, out level); + } + public RESULT setReverbLevel(int index, float level) + { + return FMOD_Studio_EventInstance_SetReverbLevel(this.handle, index, level); + } + public RESULT getPaused(out bool paused) + { + return FMOD_Studio_EventInstance_GetPaused(this.handle, out paused); + } + public RESULT setPaused(bool paused) + { + return FMOD_Studio_EventInstance_SetPaused(this.handle, paused); + } + public RESULT start() + { + return FMOD_Studio_EventInstance_Start(this.handle); + } + public RESULT stop(STOP_MODE mode) + { + return FMOD_Studio_EventInstance_Stop(this.handle, mode); + } + public RESULT getTimelinePosition(out int position) + { + return FMOD_Studio_EventInstance_GetTimelinePosition(this.handle, out position); + } + public RESULT setTimelinePosition(int position) + { + return FMOD_Studio_EventInstance_SetTimelinePosition(this.handle, position); + } + public RESULT getPlaybackState(out PLAYBACK_STATE state) + { + return FMOD_Studio_EventInstance_GetPlaybackState(this.handle, out state); + } + public RESULT getChannelGroup(out FMOD.ChannelGroup group) + { + return FMOD_Studio_EventInstance_GetChannelGroup(this.handle, out group.handle); + } + public RESULT release() + { + return FMOD_Studio_EventInstance_Release(this.handle); + } + public RESULT isVirtual(out bool virtualstate) + { + return FMOD_Studio_EventInstance_IsVirtual(this.handle, out virtualstate); + } + public RESULT getParameterByID(PARAMETER_ID id, out float value) + { + float finalvalue; + return getParameterByID(id, out value, out finalvalue); + } + public RESULT getParameterByID(PARAMETER_ID id, out float value, out float finalvalue) + { + return FMOD_Studio_EventInstance_GetParameterByID(this.handle, id, out value, out finalvalue); + } + public RESULT setParameterByID(PARAMETER_ID id, float value, bool ignoreseekspeed = false) + { + return FMOD_Studio_EventInstance_SetParameterByID(this.handle, id, value, ignoreseekspeed); + } + public RESULT setParametersByIDs(PARAMETER_ID[] ids, float[] values, int count, bool ignoreseekspeed = false) + { + return FMOD_Studio_EventInstance_SetParametersByIDs(this.handle, ids, values, count, ignoreseekspeed); + } + public RESULT getParameterByName(string name, out float value) + { + float finalValue; + return getParameterByName(name, out value, out finalValue); + } + public RESULT getParameterByName(string name, out float value, out float finalvalue) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventInstance_GetParameterByName(this.handle, encoder.byteFromStringUTF8(name), out value, out finalvalue); + } + } + public RESULT setParameterByName(string name, float value, bool ignoreseekspeed = false) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventInstance_SetParameterByName(this.handle, encoder.byteFromStringUTF8(name), value, ignoreseekspeed); + } + } + public RESULT triggerCue() + { + return FMOD_Studio_EventInstance_TriggerCue(this.handle); + } + public RESULT setCallback(EVENT_CALLBACK callback, EVENT_CALLBACK_TYPE callbackmask = EVENT_CALLBACK_TYPE.ALL) + { + return FMOD_Studio_EventInstance_SetCallback(this.handle, callback, callbackmask); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD_Studio_EventInstance_GetUserData(this.handle, out userdata); + } + public RESULT setUserData(IntPtr userdata) + { + return FMOD_Studio_EventInstance_SetUserData(this.handle, userdata); + } + public RESULT getCPUUsage(out uint exclusive, out uint inclusive) + { + return FMOD_Studio_EventInstance_GetCPUUsage(this.handle, out exclusive, out inclusive); + } + public RESULT getMemoryUsage(out MEMORY_USAGE memoryusage) + { + return FMOD_Studio_EventInstance_GetMemoryUsage(this.handle, out memoryusage); + } + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_EventInstance_IsValid (IntPtr _event); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetDescription (IntPtr _event, out IntPtr description); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetVolume (IntPtr _event, out float volume, out float finalvolume); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetVolume (IntPtr _event, float volume); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetPitch (IntPtr _event, out float pitch, out float finalpitch); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetPitch (IntPtr _event, float pitch); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_Get3DAttributes (IntPtr _event, out ATTRIBUTES_3D attributes); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_Set3DAttributes (IntPtr _event, ref ATTRIBUTES_3D attributes); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetListenerMask (IntPtr _event, out uint mask); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetListenerMask (IntPtr _event, uint mask); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetProperty (IntPtr _event, EVENT_PROPERTY index, out float value); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetProperty (IntPtr _event, EVENT_PROPERTY index, float value); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetReverbLevel (IntPtr _event, int index, out float level); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetReverbLevel (IntPtr _event, int index, float level); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetPaused (IntPtr _event, out bool paused); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetPaused (IntPtr _event, bool paused); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_Start (IntPtr _event); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_Stop (IntPtr _event, STOP_MODE mode); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetTimelinePosition (IntPtr _event, out int position); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetTimelinePosition (IntPtr _event, int position); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetPlaybackState (IntPtr _event, out PLAYBACK_STATE state); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetChannelGroup (IntPtr _event, out IntPtr group); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_Release (IntPtr _event); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_IsVirtual (IntPtr _event, out bool virtualstate); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetParameterByName (IntPtr _event, byte[] name, out float value, out float finalvalue); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetParameterByName (IntPtr _event, byte[] name, float value, bool ignoreseekspeed); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetParameterByID (IntPtr _event, PARAMETER_ID id, out float value, out float finalvalue); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetParameterByID (IntPtr _event, PARAMETER_ID id, float value, bool ignoreseekspeed); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetParametersByIDs (IntPtr _event, PARAMETER_ID[] ids, float[] values, int count, bool ignoreseekspeed); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_TriggerCue (IntPtr _event); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetCallback (IntPtr _event, EVENT_CALLBACK callback, EVENT_CALLBACK_TYPE callbackmask); + [DllImport (STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetUserData (IntPtr _event, out IntPtr userdata); + [DllImport (STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetUserData (IntPtr _event, IntPtr userdata); + [DllImport (STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetCPUUsage (IntPtr _event, out uint exclusive, out uint inclusive); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetMemoryUsage (IntPtr _event, out MEMORY_USAGE memoryusage); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public EventInstance(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_EventInstance_IsValid(this.handle); + } + + #endregion + } + + public struct Bus + { + public RESULT getID(out Guid id) + { + return FMOD_Studio_Bus_GetID(this.handle, out id); + } + public RESULT getPath(out string path) + { + path = null; + + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + IntPtr stringMem = Marshal.AllocHGlobal(256); + int retrieved = 0; + RESULT result = FMOD_Studio_Bus_GetPath(this.handle, stringMem, 256, out retrieved); + + if (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringMem = Marshal.AllocHGlobal(retrieved); + result = FMOD_Studio_Bus_GetPath(this.handle, stringMem, retrieved, out retrieved); + } + + if (result == RESULT.OK) + { + path = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + return result; + } + + } + public RESULT getVolume(out float volume) + { + float finalVolume; + return getVolume(out volume, out finalVolume); + } + public RESULT getVolume(out float volume, out float finalvolume) + { + return FMOD_Studio_Bus_GetVolume(this.handle, out volume, out finalvolume); + } + public RESULT setVolume(float volume) + { + return FMOD_Studio_Bus_SetVolume(this.handle, volume); + } + public RESULT getPaused(out bool paused) + { + return FMOD_Studio_Bus_GetPaused(this.handle, out paused); + } + public RESULT setPaused(bool paused) + { + return FMOD_Studio_Bus_SetPaused(this.handle, paused); + } + public RESULT getMute(out bool mute) + { + return FMOD_Studio_Bus_GetMute(this.handle, out mute); + } + public RESULT setMute(bool mute) + { + return FMOD_Studio_Bus_SetMute(this.handle, mute); + } + public RESULT stopAllEvents(STOP_MODE mode) + { + return FMOD_Studio_Bus_StopAllEvents(this.handle, mode); + } + public RESULT lockChannelGroup() + { + return FMOD_Studio_Bus_LockChannelGroup(this.handle); + } + public RESULT unlockChannelGroup() + { + return FMOD_Studio_Bus_UnlockChannelGroup(this.handle); + } + public RESULT getChannelGroup(out FMOD.ChannelGroup group) + { + return FMOD_Studio_Bus_GetChannelGroup(this.handle, out group.handle); + } + public RESULT getCPUUsage(out uint exclusive, out uint inclusive) + { + return FMOD_Studio_Bus_GetCPUUsage(this.handle, out exclusive, out inclusive); + } + public RESULT getMemoryUsage(out MEMORY_USAGE memoryusage) + { + return FMOD_Studio_Bus_GetMemoryUsage(this.handle, out memoryusage); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_Bus_IsValid (IntPtr bus); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetID (IntPtr bus, out Guid id); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetPath (IntPtr bus, IntPtr path, int size, out int retrieved); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetVolume (IntPtr bus, out float volume, out float finalvolume); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_SetVolume (IntPtr bus, float volume); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetPaused (IntPtr bus, out bool paused); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_SetPaused (IntPtr bus, bool paused); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetMute (IntPtr bus, out bool mute); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_SetMute (IntPtr bus, bool mute); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_StopAllEvents (IntPtr bus, STOP_MODE mode); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_LockChannelGroup (IntPtr bus); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_UnlockChannelGroup (IntPtr bus); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetChannelGroup (IntPtr bus, out IntPtr group); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetCPUUsage (IntPtr bus, out uint exclusive, out uint inclusive); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bus_GetMemoryUsage (IntPtr bus, out MEMORY_USAGE memoryusage); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public Bus(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_Bus_IsValid(this.handle); + } + + #endregion + } + + public struct VCA + { + public RESULT getID(out Guid id) + { + return FMOD_Studio_VCA_GetID(this.handle, out id); + } + public RESULT getPath(out string path) + { + path = null; + + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + IntPtr stringMem = Marshal.AllocHGlobal(256); + int retrieved = 0; + RESULT result = FMOD_Studio_VCA_GetPath(this.handle, stringMem, 256, out retrieved); + + if (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringMem = Marshal.AllocHGlobal(retrieved); + result = FMOD_Studio_VCA_GetPath(this.handle, stringMem, retrieved, out retrieved); + } + + if (result == RESULT.OK) + { + path = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + return result; + } + } + public RESULT getVolume(out float volume) + { + float finalVolume; + return getVolume(out volume, out finalVolume); + } + public RESULT getVolume(out float volume, out float finalvolume) + { + return FMOD_Studio_VCA_GetVolume(this.handle, out volume, out finalvolume); + } + public RESULT setVolume(float volume) + { + return FMOD_Studio_VCA_SetVolume(this.handle, volume); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_VCA_IsValid (IntPtr vca); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_VCA_GetID (IntPtr vca, out Guid id); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_VCA_GetPath (IntPtr vca, IntPtr path, int size, out int retrieved); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_VCA_GetVolume (IntPtr vca, out float volume, out float finalvolume); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_VCA_SetVolume (IntPtr vca, float volume); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public VCA(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_VCA_IsValid(this.handle); + } + + #endregion + } + + public struct Bank + { + // Property access + + public RESULT getID(out Guid id) + { + return FMOD_Studio_Bank_GetID(this.handle, out id); + } + public RESULT getPath(out string path) + { + path = null; + + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + IntPtr stringMem = Marshal.AllocHGlobal(256); + int retrieved = 0; + RESULT result = FMOD_Studio_Bank_GetPath(this.handle, stringMem, 256, out retrieved); + + if (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringMem = Marshal.AllocHGlobal(retrieved); + result = FMOD_Studio_Bank_GetPath(this.handle, stringMem, retrieved, out retrieved); + } + + if (result == RESULT.OK) + { + path = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + return result; + } + } + public RESULT unload() + { + return FMOD_Studio_Bank_Unload(this.handle); + } + public RESULT loadSampleData() + { + return FMOD_Studio_Bank_LoadSampleData(this.handle); + } + public RESULT unloadSampleData() + { + return FMOD_Studio_Bank_UnloadSampleData(this.handle); + } + public RESULT getLoadingState(out LOADING_STATE state) + { + return FMOD_Studio_Bank_GetLoadingState(this.handle, out state); + } + public RESULT getSampleLoadingState(out LOADING_STATE state) + { + return FMOD_Studio_Bank_GetSampleLoadingState(this.handle, out state); + } + + // Enumeration + public RESULT getStringCount(out int count) + { + return FMOD_Studio_Bank_GetStringCount(this.handle, out count); + } + public RESULT getStringInfo(int index, out Guid id, out string path) + { + path = null; + id = Guid.Empty; + + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + IntPtr stringMem = Marshal.AllocHGlobal(256); + int retrieved = 0; + RESULT result = FMOD_Studio_Bank_GetStringInfo(this.handle, index, out id, stringMem, 256, out retrieved); + + if (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringMem = Marshal.AllocHGlobal(retrieved); + result = FMOD_Studio_Bank_GetStringInfo(this.handle, index, out id, stringMem, retrieved, out retrieved); + } + + if (result == RESULT.OK) + { + path = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + return result; + } + } + + public RESULT getEventCount(out int count) + { + return FMOD_Studio_Bank_GetEventCount(this.handle, out count); + } + public RESULT getEventList(out EventDescription[] array) + { + array = null; + + RESULT result; + int capacity; + result = FMOD_Studio_Bank_GetEventCount(this.handle, out capacity); + if (result != RESULT.OK) + { + return result; + } + if (capacity == 0) + { + array = new EventDescription[0]; + return result; + } + + IntPtr[] rawArray = new IntPtr[capacity]; + int actualCount; + result = FMOD_Studio_Bank_GetEventList(this.handle, rawArray, capacity, out actualCount); + if (result != RESULT.OK) + { + return result; + } + if (actualCount > capacity) // More items added since we queried just now? + { + actualCount = capacity; + } + array = new EventDescription[actualCount]; + for (int i = 0; i < actualCount; ++i) + { + array[i].handle = rawArray[i]; + } + return RESULT.OK; + } + public RESULT getBusCount(out int count) + { + return FMOD_Studio_Bank_GetBusCount(this.handle, out count); + } + public RESULT getBusList(out Bus[] array) + { + array = null; + + RESULT result; + int capacity; + result = FMOD_Studio_Bank_GetBusCount(this.handle, out capacity); + if (result != RESULT.OK) + { + return result; + } + if (capacity == 0) + { + array = new Bus[0]; + return result; + } + + IntPtr[] rawArray = new IntPtr[capacity]; + int actualCount; + result = FMOD_Studio_Bank_GetBusList(this.handle, rawArray, capacity, out actualCount); + if (result != RESULT.OK) + { + return result; + } + if (actualCount > capacity) // More items added since we queried just now? + { + actualCount = capacity; + } + array = new Bus[actualCount]; + for (int i = 0; i < actualCount; ++i) + { + array[i].handle = rawArray[i]; + } + return RESULT.OK; + } + public RESULT getVCACount(out int count) + { + return FMOD_Studio_Bank_GetVCACount(this.handle, out count); + } + public RESULT getVCAList(out VCA[] array) + { + array = null; + + RESULT result; + int capacity; + result = FMOD_Studio_Bank_GetVCACount(this.handle, out capacity); + if (result != RESULT.OK) + { + return result; + } + if (capacity == 0) + { + array = new VCA[0]; + return result; + } + + IntPtr[] rawArray = new IntPtr[capacity]; + int actualCount; + result = FMOD_Studio_Bank_GetVCAList(this.handle, rawArray, capacity, out actualCount); + if (result != RESULT.OK) + { + return result; + } + if (actualCount > capacity) // More items added since we queried just now? + { + actualCount = capacity; + } + array = new VCA[actualCount]; + for (int i = 0; i < actualCount; ++i) + { + array[i].handle = rawArray[i]; + } + return RESULT.OK; + } + + public RESULT getUserData(out IntPtr userdata) + { + return FMOD_Studio_Bank_GetUserData(this.handle, out userdata); + } + + public RESULT setUserData(IntPtr userdata) + { + return FMOD_Studio_Bank_SetUserData(this.handle, userdata); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_Bank_IsValid (IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetID (IntPtr bank, out Guid id); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetPath (IntPtr bank, IntPtr path, int size, out int retrieved); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_Unload (IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_LoadSampleData (IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_UnloadSampleData (IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetLoadingState (IntPtr bank, out LOADING_STATE state); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetSampleLoadingState (IntPtr bank, out LOADING_STATE state); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetStringCount (IntPtr bank, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetStringInfo (IntPtr bank, int index, out Guid id, IntPtr path, int size, out int retrieved); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetEventCount (IntPtr bank, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetEventList (IntPtr bank, IntPtr[] array, int capacity, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetBusCount (IntPtr bank, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetBusList (IntPtr bank, IntPtr[] array, int capacity, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetVCACount (IntPtr bank, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetVCAList (IntPtr bank, IntPtr[] array, int capacity, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_GetUserData (IntPtr bank, out IntPtr userdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_Bank_SetUserData (IntPtr bank, IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public Bank(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_Bank_IsValid(this.handle); + } + + #endregion + } + + public struct CommandReplay + { + // Information query + public RESULT getSystem(out System system) + { + return FMOD_Studio_CommandReplay_GetSystem(this.handle, out system.handle); + } + + public RESULT getLength(out float length) + { + return FMOD_Studio_CommandReplay_GetLength(this.handle, out length); + } + public RESULT getCommandCount(out int count) + { + return FMOD_Studio_CommandReplay_GetCommandCount(this.handle, out count); + } + public RESULT getCommandInfo(int commandIndex, out COMMAND_INFO info) + { + return FMOD_Studio_CommandReplay_GetCommandInfo(this.handle, commandIndex, out info); + } + + public RESULT getCommandString(int commandIndex, out string buffer) + { + buffer = null; + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + int stringLength = 256; + IntPtr stringMem = Marshal.AllocHGlobal(256); + RESULT result = FMOD_Studio_CommandReplay_GetCommandString(this.handle, commandIndex, stringMem, stringLength); + + while (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringLength *= 2; + stringMem = Marshal.AllocHGlobal(stringLength); + result = FMOD_Studio_CommandReplay_GetCommandString(this.handle, commandIndex, stringMem, stringLength); + } + + if (result == RESULT.OK) + { + buffer = encoder.stringFromNative(stringMem); + } + Marshal.FreeHGlobal(stringMem); + return result; + } + } + public RESULT getCommandAtTime(float time, out int commandIndex) + { + return FMOD_Studio_CommandReplay_GetCommandAtTime(this.handle, time, out commandIndex); + } + // Playback + public RESULT setBankPath(string bankPath) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_CommandReplay_SetBankPath(this.handle, encoder.byteFromStringUTF8(bankPath)); + } + } + public RESULT start() + { + return FMOD_Studio_CommandReplay_Start(this.handle); + } + public RESULT stop() + { + return FMOD_Studio_CommandReplay_Stop(this.handle); + } + public RESULT seekToTime(float time) + { + return FMOD_Studio_CommandReplay_SeekToTime(this.handle, time); + } + public RESULT seekToCommand(int commandIndex) + { + return FMOD_Studio_CommandReplay_SeekToCommand(this.handle, commandIndex); + } + public RESULT getPaused(out bool paused) + { + return FMOD_Studio_CommandReplay_GetPaused(this.handle, out paused); + } + public RESULT setPaused(bool paused) + { + return FMOD_Studio_CommandReplay_SetPaused(this.handle, paused); + } + public RESULT getPlaybackState(out PLAYBACK_STATE state) + { + return FMOD_Studio_CommandReplay_GetPlaybackState(this.handle, out state); + } + public RESULT getCurrentCommand(out int commandIndex, out float currentTime) + { + return FMOD_Studio_CommandReplay_GetCurrentCommand(this.handle, out commandIndex, out currentTime); + } + // Release + public RESULT release() + { + return FMOD_Studio_CommandReplay_Release(this.handle); + } + // Callbacks + public RESULT setFrameCallback(COMMANDREPLAY_FRAME_CALLBACK callback) + { + return FMOD_Studio_CommandReplay_SetFrameCallback(this.handle, callback); + } + public RESULT setLoadBankCallback(COMMANDREPLAY_LOAD_BANK_CALLBACK callback) + { + return FMOD_Studio_CommandReplay_SetLoadBankCallback(this.handle, callback); + } + public RESULT setCreateInstanceCallback(COMMANDREPLAY_CREATE_INSTANCE_CALLBACK callback) + { + return FMOD_Studio_CommandReplay_SetCreateInstanceCallback(this.handle, callback); + } + public RESULT getUserData(out IntPtr userdata) + { + return FMOD_Studio_CommandReplay_GetUserData(this.handle, out userdata); + } + public RESULT setUserData(IntPtr userdata) + { + return FMOD_Studio_CommandReplay_SetUserData(this.handle, userdata); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_CommandReplay_IsValid (IntPtr replay); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetSystem (IntPtr replay, out IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetLength (IntPtr replay, out float length); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetCommandCount (IntPtr replay, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetCommandInfo (IntPtr replay, int commandindex, out COMMAND_INFO info); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetCommandString (IntPtr replay, int commandIndex, IntPtr buffer, int length); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetCommandAtTime (IntPtr replay, float time, out int commandIndex); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SetBankPath (IntPtr replay, byte[] bankPath); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_Start (IntPtr replay); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_Stop (IntPtr replay); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SeekToTime (IntPtr replay, float time); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SeekToCommand (IntPtr replay, int commandIndex); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetPaused (IntPtr replay, out bool paused); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SetPaused (IntPtr replay, bool paused); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetPlaybackState (IntPtr replay, out PLAYBACK_STATE state); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetCurrentCommand (IntPtr replay, out int commandIndex, out float currentTime); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_Release (IntPtr replay); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SetFrameCallback (IntPtr replay, COMMANDREPLAY_FRAME_CALLBACK callback); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SetLoadBankCallback (IntPtr replay, COMMANDREPLAY_LOAD_BANK_CALLBACK callback); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SetCreateInstanceCallback(IntPtr replay, COMMANDREPLAY_CREATE_INSTANCE_CALLBACK callback); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_GetUserData (IntPtr replay, out IntPtr userdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_CommandReplay_SetUserData (IntPtr replay, IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public CommandReplay(IntPtr ptr) { this.handle = ptr; } + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_CommandReplay_IsValid(this.handle); + } + + #endregion + } +} // FMOD diff --git a/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_studio.cs.meta b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_studio.cs.meta new file mode 100644 index 0000000..a6aac50 --- /dev/null +++ b/game/Assets/Plugins/FMOD/src/Runtime/wrapper/fmod_studio.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ae7eb0b6a2bff364b9c1fae52173e74c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Prefabs/Player.prefab b/game/Assets/Prefabs/Player.prefab index 32a15c8..25cbdd5 100644 --- a/game/Assets/Prefabs/Player.prefab +++ b/game/Assets/Prefabs/Player.prefab @@ -323,9 +323,9 @@ GameObject: m_Component: - component: {fileID: 13726837293638830} - component: {fileID: 13726837293638818} - - component: {fileID: 13726837293638819} - component: {fileID: 13726837293638816} - component: {fileID: 13726837293638817} + - component: {fileID: 9057303937983535475} m_Layer: 0 m_Name: Camera m_TagString: Untagged @@ -390,14 +390,6 @@ Camera: m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 ---- !u!81 &13726837293638819 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 13726837293638831} - m_Enabled: 1 --- !u!114 &13726837293638816 MonoBehaviour: m_ObjectHideFlags: 0 @@ -444,6 +436,20 @@ MonoBehaviour: m_EditorClassIdentifier: _settings: {fileID: 11400000, guid: 995f378ab762cd344b7a6d108f049191, type: 2} _inputHandler: {fileID: 13726836969441782} +--- !u!114 &9057303937983535475 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 13726837293638831} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86c6556701af9e04380698b89f691b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + attenuationObject: {fileID: 0} + ListenerNumber: -1 --- !u!1 &13726837642651461 GameObject: m_ObjectHideFlags: 0 diff --git a/game/Assets/Scenes/Dialogue HUD.unity b/game/Assets/Scenes/Dialogue HUD.unity new file mode 100644 index 0000000..c92f40a --- /dev/null +++ b/game/Assets/Scenes/Dialogue HUD.unity @@ -0,0 +1,738 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &500023684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 500023686} + - component: {fileID: 500023685} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &500023685 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500023684} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &500023686 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500023684} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &705310199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705310203} + - component: {fileID: 705310202} + - component: {fileID: 705310201} + - component: {fileID: 705310200} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &705310200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705310199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &705310201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705310199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &705310202 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705310199} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &705310203 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705310199} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1894783044} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1188807998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1188807999} + - component: {fileID: 1188808001} + - component: {fileID: 1188808000} + m_Layer: 5 + m_Name: Character Portrait + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1188807999 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1188807998} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1894783044} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1188808000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1188807998} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ca8073d6598434c478bfeab6c2f62bc5, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1188808001 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1188807998} + m_CullTransparentMesh: 1 +--- !u!1 &1350031227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1350031228} + - component: {fileID: 1350031230} + - component: {fileID: 1350031229} + m_Layer: 5 + m_Name: Subtitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1350031228 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1350031227} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1894783044} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 600, y: 100} + m_Pivot: {x: 0.5, y: 0} +--- !u!114 &1350031229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1350031227} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: '[SUBTITLE]' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 72 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1350031230 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1350031227} + m_CullTransparentMesh: 1 +--- !u!1 &1457238592 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1457238595} + - component: {fileID: 1457238594} + - component: {fileID: 1457238593} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1457238593 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457238592} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_PointAction: {fileID: 1054132383583890850, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MoveAction: {fileID: 3710738434707379630, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_SubmitAction: {fileID: 2064916234097673511, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_CancelAction: {fileID: -1967631576421560919, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_LeftClickAction: {fileID: 8056856818456041789, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MiddleClickAction: {fileID: 3279352641294131588, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_RightClickAction: {fileID: 3837173908680883260, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_ScrollWheelAction: {fileID: 4502412055082496612, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDevicePositionAction: {fileID: 4754684134866288074, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDeviceOrientationAction: {fileID: 1025543830046995696, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 +--- !u!114 &1457238594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457238592} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1457238595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457238592} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1703801735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1703801738} + - component: {fileID: 1703801737} + - component: {fileID: 1703801736} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1703801736 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1703801735} + m_Enabled: 1 +--- !u!20 &1703801737 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1703801735} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1703801738 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1703801735} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1894783043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1894783044} + - component: {fileID: 1894783045} + m_Layer: 5 + m_Name: Dialogue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1894783044 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894783043} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1350031228} + - {fileID: 1188807999} + m_Father: {fileID: 705310203} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1894783045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894783043} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1966f62234416094db802b000e90f048, type: 3} + m_Name: + m_EditorClassIdentifier: + _dialogue: {fileID: 11400000, guid: 56369c4e83cc59e44bf55cd16fafc4e8, type: 2} + _settings: {fileID: 11400000, guid: 67880aab3a7f5124999fcef662a147f9, type: 2} + _text: {fileID: 1350031229} + _portrait: {fileID: 1188808000} diff --git a/game/Assets/Scenes/Dialogue HUD.unity.meta b/game/Assets/Scenes/Dialogue HUD.unity.meta new file mode 100644 index 0000000..6e6ba6c --- /dev/null +++ b/game/Assets/Scenes/Dialogue HUD.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6e87180df2701b6419eff2bf814796bd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scripts/Dialogue/DialogueDatabase.cs b/game/Assets/Scripts/Dialogue/DialogueDatabase.cs index 4b3d504..b127959 100644 --- a/game/Assets/Scripts/Dialogue/DialogueDatabase.cs +++ b/game/Assets/Scripts/Dialogue/DialogueDatabase.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; @@ -16,6 +17,7 @@ using UnityEditor; public static partial class DialogueDatabase { + public static string EDITOR_DialogueFile => Path.Combine(Application.dataPath, "Data", "Dialogue", DIALOGUE_FILENAME); @@ -62,18 +64,16 @@ public static partial class DialogueDatabase } Debug.Log($":: importing dialogue"); - var sbFile = new StringBuilder(); - var sbLog = new StringBuilder(); + var sb = new StringBuilder(); var lines = 0; foreach (var row in values) { - sbLog.AppendLine($"{row[0]} {row[1]}"); - sbFile.AppendLine($"{row[0]},{row[1]},"); + sb.AppendLine($"{row[0]}{SPLIT_CHAR}{row[1]}"); lines++; } - Debug.Log($":: imported {lines} lines of dialogue\n{sbLog}"); + Debug.Log($":: imported {lines} lines of dialogue\n{sb}"); - File.WriteAllText(EDITOR_DialogueFile, sbFile.ToString()); + File.WriteAllText(EDITOR_DialogueFile, sb.ToString()); if (!File.Exists(EDITOR_DialogueFile)) { Debug.LogError($":: import failed: file doesn't exist: {EDITOR_DialogueFile}"); @@ -95,7 +95,9 @@ public static partial class DialogueDatabase public static partial class DialogueDatabase { - public const string DIALOGUE_FILENAME = "dialogue.csv"; + private const char SPLIT_CHAR = '|'; + + public const string DIALOGUE_FILENAME = "dialogue.data"; public static string DialogueFile { @@ -119,7 +121,7 @@ public static partial class DialogueDatabase int count = 0; foreach (var line in File.ReadLines(DialogueFile)) { - var parts = line.Split(','); + var parts = line.Split(SPLIT_CHAR); var key = parts[0]; var text = parts[1]; @@ -138,11 +140,12 @@ public static partial class DialogueDatabase private static readonly Dictionary _dict = new Dictionary(); + public static string[] Keys => _dict.Keys.ToArray(); + public static string ReadDialogue(string key) { return _dict.ContainsKey(key) ? _dict[key] : $"MISSING[{key}]"; } - } \ No newline at end of file diff --git a/game/Assets/Scripts/Dialogue/DialogueSettings.cs b/game/Assets/Scripts/Dialogue/DialogueSettings.cs new file mode 100644 index 0000000..0503f0a --- /dev/null +++ b/game/Assets/Scripts/Dialogue/DialogueSettings.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(menuName = "KernelPanic/Dialogue/Settings")] +public class DialogueSettings : ScriptableObject +{ + public float HideAfter => _hideAfter; + [SerializeField] private float _hideAfter; + + public string FMODPrefix => _fmodKeyPrefix; + [SerializeField] private string _fmodKeyPrefix; +} \ No newline at end of file diff --git a/game/Assets/Scripts/Dialogue/DialogueSettings.cs.meta b/game/Assets/Scripts/Dialogue/DialogueSettings.cs.meta new file mode 100644 index 0000000..5e87543 --- /dev/null +++ b/game/Assets/Scripts/Dialogue/DialogueSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6a4c7f569d69ca4e8498fdcd96476ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scripts/Dialogue/DialogueSystem.cs b/game/Assets/Scripts/Dialogue/DialogueSystem.cs new file mode 100644 index 0000000..c1ea9b2 --- /dev/null +++ b/game/Assets/Scripts/Dialogue/DialogueSystem.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; + +#endif + +[CreateAssetMenu(menuName = "KernelPanic/Dialogue/Dialogue System")] +public partial class DialogueSystem : ScriptableObject +{ + [SerializeField] private DialogueSettings _settings; + + // https://stackoverflow.com/questions/2282476/actiont-vs-delegate-event + public event EventHandler onDialogueLine; + + private readonly Dictionary _fmodKeyCache = new Dictionary(); + + private void OnEnable() + { + // cache all dialogue keys for FMOD at start to avoid allocations later + foreach (var key in DialogueDatabase.Keys) + { + _fmodKeyCache[key] = $"{_settings.FMODPrefix}{key}"; + } + } + + public void PlayLine(string key) + { + // retrieve cached key + var fmodKey = _fmodKeyCache[key]; + var eventDescription = FMODUnity.RuntimeManager.GetEventDescription(fmodKey); + + DialogueLine dl; + dl.text = DialogueDatabase.ReadDialogue(key); + // default duration to show ui elements for + dl.duration = _settings.HideAfter; + + // read audio data out of FMOD, check if event exists + if (eventDescription.isValid()) + { + // assign values and play audio + + // get dialogue line duration from FMOD + eventDescription.getLength(out int ms); + + // get length gives us a value in milliseconds so it needs to be converted to seconds + // before assignment + dl.duration = ms / 1000f; + + // event is valid + FMODUnity.RuntimeManager.PlayOneShot(fmodKey); + } + else + { + // no event available boooooooo + Debug.LogError($"FMOD event desc for key {fmodKey} is not valid", this); + } + + onDialogueLine?.Invoke(this, dl); + } +} + +public struct DialogueLine +{ + public string text; + public float duration; +} + +#region Editor + +#if UNITY_EDITOR + +[CustomEditor(typeof(DialogueSystem))] +public class DialogueSystemEditor : Editor +{ + private DialogueSystem _dialogue; + private string _key; + + private void OnEnable() + { + _dialogue = target as DialogueSystem; + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + _key = EditorGUILayout.TextField("key", _key); + + if (GUILayout.Button("Play Line")) + { + _dialogue.PlayLine(_key); + } + } +} + +#endif + +#endregion \ No newline at end of file diff --git a/game/Assets/Scripts/Dialogue/DialogueSystem.cs.meta b/game/Assets/Scripts/Dialogue/DialogueSystem.cs.meta new file mode 100644 index 0000000..19184f7 --- /dev/null +++ b/game/Assets/Scripts/Dialogue/DialogueSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5605190150fc9a046a68dd80708b5a7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Scripts/Dialogue/DialogueUI.cs b/game/Assets/Scripts/Dialogue/DialogueUI.cs new file mode 100644 index 0000000..4c79612 --- /dev/null +++ b/game/Assets/Scripts/Dialogue/DialogueUI.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +// updates visible subtitle text and a character portrait of the speaker +public class DialogueUI : MonoBehaviour +{ + [SerializeField] private DialogueSystem _dialogue; + [SerializeField] private TMP_Text _text; + [SerializeField] private Image _portrait; + + private bool _dismissed; + + private void OnEnable() + { + _dialogue.onDialogueLine += (_, dl) => ShowLine(dl); + + _text.text = string.Empty; + _portrait.enabled = false; + } + + public void Dismiss() + { + _dismissed = true; + } + + private IEnumerator _subtitleRoutine; + + private void ShowLine(DialogueLine line) + { + // there is a line currently being shown, abort its coroutine and hide ui elements + if (_subtitleRoutine != null && _text.text != null) + { + HideSubtitle(); + StopCoroutine(_subtitleRoutine); + } + + _subtitleRoutine = ShowLineCR(line.text, line.duration); + StartCoroutine(_subtitleRoutine); + } + + private IEnumerator ShowLineCR(string text, float duration) + { + // update text and show portrait + _text.text = text; + _portrait.enabled = true; + + // wait until timeout of dismissal + var timer = 0f; + while (!_dismissed && timer < duration) + { + timer += Time.deltaTime; + + // wait for next frame + yield return null; + } + + // hide ui elements + HideSubtitle(); + + _dismissed = false; + } + + private void HideSubtitle() + { + _text.text = string.Empty; + _portrait.enabled = false; + } +} + +#region Editor +#if UNITY_EDITOR + +[CustomEditor(typeof(DialogueUI))] +public class DialogueUIEditor : Editor +{ + private DialogueUI _dialogueUI; + + private void OnEnable() + { + _dialogueUI = target as DialogueUI; + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + if (!Application.isPlaying) return; + + if (GUILayout.Button("Dismiss")) + { + _dialogueUI.Dismiss(); + } + } +} + +#endif +#endregion \ No newline at end of file diff --git a/game/Assets/Scripts/Dialogue/DialogueUI.cs.meta b/game/Assets/Scripts/Dialogue/DialogueUI.cs.meta new file mode 100644 index 0000000..8402e2c --- /dev/null +++ b/game/Assets/Scripts/Dialogue/DialogueUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1966f62234416094db802b000e90f048 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Textures.meta b/game/Assets/Textures.meta new file mode 100644 index 0000000..1e4e7c1 --- /dev/null +++ b/game/Assets/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b3699a1d53586e141ae4d3669be35359 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/Assets/Textures/placeholder-xena-portrait.png b/game/Assets/Textures/placeholder-xena-portrait.png new file mode 100644 index 0000000..3a70d94 --- /dev/null +++ b/game/Assets/Textures/placeholder-xena-portrait.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b14d76d96887148177d1ee66e6d6d6e39c661a5e9989ad8108d9ec4f909477e +size 2133 diff --git a/game/Assets/Textures/placeholder-xena-portrait.png.meta b/game/Assets/Textures/placeholder-xena-portrait.png.meta new file mode 100644 index 0000000..c60e33e --- /dev/null +++ b/game/Assets/Textures/placeholder-xena-portrait.png.meta @@ -0,0 +1,144 @@ +fileFormatVersion: 2 +guid: ca8073d6598434c478bfeab6c2f62bc5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 2 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 8192 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Windows Store Apps + maxTextureSize: 8192 + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/game/FMOD Project/.gitignore b/game/FMOD Project/.gitignore new file mode 100644 index 0000000..eb73177 --- /dev/null +++ b/game/FMOD Project/.gitignore @@ -0,0 +1,5 @@ +.cache/ +.unsaved/ +.user/ + +Build/ \ No newline at end of file diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_1.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_1.ogg new file mode 100644 index 0000000..48d6e1a --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71fb572a51fa8fb098931e9c3aa738064334bd6550a574dadc8c3bc0c76aa22a +size 13506 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_2.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_2.ogg new file mode 100644 index 0000000..f84c61e --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1ac643898c0e7cd96fcf4d2a76b8522bdffe15289cfff2e82f3f04d5f97ebc1 +size 18930 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_3.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_3.ogg new file mode 100644 index 0000000..1ce8225 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ceb15c764ab0e3cd94f454f955b988230f0a104902b05abf9b441f34e3ceec2a +size 37439 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_4.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_4.ogg new file mode 100644 index 0000000..dfad53b --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b48fbb92968d258bd7fd3e02b71f8563e8bcd09fef8afdfd8deb091277e9f6d +size 27388 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_5.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_5.ogg new file mode 100644 index 0000000..4e409d5 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_horn_5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f08267723b5fc0ec31eeb5507ab4ea767b295535265d621bbaa4a5580ab0a6 +size 131687 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_pad.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_pad.ogg new file mode 100644 index 0000000..08d6811 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_pad.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b8b7ca2d2b13127479b8eae33f58b1024fd07c8c635f6d7a30109e6d316c4d8 +size 1774765 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_1.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_1.ogg new file mode 100644 index 0000000..8b053ab --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f70b6dca4a708aeae0a5328fb5b18172020015faa9bfcdac25c90ac0863de257 +size 78384 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_2.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_2.ogg new file mode 100644 index 0000000..cc2b96d --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a33edeca2ae3ad9cd4b0c0eae5500b5f764c8645c9ac58fe40f0f33dbf7a168a +size 128934 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_3.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_3.ogg new file mode 100644 index 0000000..d687f3e --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db670c0a1cfede83080092dcfe2d1ca9ceddf662514264ed068b1e7a2dee5c46 +size 129568 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_4.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_4.ogg new file mode 100644 index 0000000..cbd5194 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:391839f74041b1c972c3de975900fe328a44135d2cfd427addacd3af2de54a20 +size 140038 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_5.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_5.ogg new file mode 100644 index 0000000..9b8f5ba --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b17a3faa4186f7f8c34ebc4d0c813ffd989fe535c7062f852c8da35c412d42fe +size 152656 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_6.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_6.ogg new file mode 100644 index 0000000..5579913 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_6.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a060d969877434c822737c33f2c536669c76440c97b4fcd7b0dab7edcfaec42 +size 109594 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_7.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_7.ogg new file mode 100644 index 0000000..5f8be9c --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_passing_7.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2cd939cad5434348d83e2c748c2551fe8a944f3152297980b19e5c254a927ca +size 103659 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_siren.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_siren.ogg new file mode 100644 index 0000000..2402410 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_siren.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97c0224ca3c96335d0e7b3178563ef04444d30a4927e7c9fdb3da3a5cd3e9ea0 +size 86313 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_train_1.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_train_1.ogg new file mode 100644 index 0000000..c0c2380 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_train_1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:020e852560f576ef601047a9037d5a9250478e7576046becb555fa36080c2888 +size 127374 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_train_2.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_train_2.ogg new file mode 100644 index 0000000..4800383 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_traffic_train_2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28f28e111cbe82b101c41d2a31f36676168afa61ca776fa07cada7e71a789980 +size 124724 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_1.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_1.ogg new file mode 100644 index 0000000..384af50 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0567fcf18a7e4668b169b7e8473e1db3ec521aa64a3784fc381df7ee1d52d240 +size 20554 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_10.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_10.ogg new file mode 100644 index 0000000..c7168de --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_10.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c431c180d5c68532889e60cec282701cbd73ea2b4491a7c1829daa014051c79 +size 56889 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_11.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_11.ogg new file mode 100644 index 0000000..753c033 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_11.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77d4719e61ba16e344726d0ff6aa0e231baf3aaa857bb0ddc3a1bdd570b5c03b +size 33138 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_12.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_12.ogg new file mode 100644 index 0000000..1282b3a --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_12.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a7cf1e9f75e892802af0549c92ecdad54f487549b419c15edfeb33fb2b9c579 +size 71267 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_13.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_13.ogg new file mode 100644 index 0000000..c3698fe --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_13.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3b9cbfbbf37c93a0c8946c0dadc471f7b949c8f46ee5f43a91580875af7914d +size 32009 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_14.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_14.ogg new file mode 100644 index 0000000..cfa9862 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_14.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fafccc48a3924cf198f41f9a0ca88213d293e47589e3c74622772a30a6c0c16c +size 24344 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_15.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_15.ogg new file mode 100644 index 0000000..d665111 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_15.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52dea0bf9c30b7ba971974064214b35d0ac1ec38362a81f5b33bfa1c17dd78fb +size 26608 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_16.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_16.ogg new file mode 100644 index 0000000..0007cef --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_16.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b02087a11705fbd5e85c594ec0eb2c8067770d68cb7bef3626cb9dd159b8740d +size 27785 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_17.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_17.ogg new file mode 100644 index 0000000..0e87302 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_17.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0712946e924ecf5e9add7a1e9780ac603027f51fb24eb67684c7b37d6aa284c2 +size 41771 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_2.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_2.ogg new file mode 100644 index 0000000..a19c66e --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8867c22922d92b27cc09120385b76568e50b94b6a3febe0b84bbb6f40843c167 +size 48715 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_3.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_3.ogg new file mode 100644 index 0000000..ea5c977 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5e5f2454c722549a4213433bbb82274f3b811b7c27d02162f8e8a4558790b2f +size 24344 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_4.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_4.ogg new file mode 100644 index 0000000..073bfa6 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d90c6def9d546fff27ed458dd6b95bdbc44435475f57ca8986daa582c22ac4d4 +size 29952 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_5.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_5.ogg new file mode 100644 index 0000000..1e7f5cd --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b270ee4f65ccf9f5c6dccb43e645abe005aafbdc4376a2d797e5c98dc91cd8e +size 16897 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_6.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_6.ogg new file mode 100644 index 0000000..68b0896 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_6.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:483f5550ea985fcdc99fdbde82bc0d41f9bdd613290059ef7889b147b156e4aa +size 13843 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_7.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_7.ogg new file mode 100644 index 0000000..48eef97 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_7.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:accdc70995624e566eef2d02885e45d652e628212954807ba60e5484fc68dd01 +size 16261 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_8.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_8.ogg new file mode 100644 index 0000000..a0a5eb2 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_8.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fbc60fb182883219494827792a5759f89620790310b1ad29ba65334592f7337 +size 54670 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_9.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_9.ogg new file mode 100644 index 0000000..4349f3d --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_chatter_9.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:654276248759f7a5f3b9712ff1968b84ddab6f48eab11dccee905bd2d89af598 +size 96807 diff --git a/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_pad.ogg b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_pad.ogg new file mode 100644 index 0000000..ca3bd45 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/City/ambience_city_walla_pad.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:428a1dd2d857cf3939d22179569ab1d27e539b59e4651bbf892007b701f31f4e +size 1529630 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_1.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_1.ogg new file mode 100644 index 0000000..fda7227 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_1.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cce75d66ee95763481d19ed39b9948f7db843a696b819be30549a92018790c19 +size 10844 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_2.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_2.ogg new file mode 100644 index 0000000..1ada2e5 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07d1ddeebedd8152a0e7597a080e2435328d657d8b1037b0eea1e235e11f9dcf +size 11305 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_3.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_3.ogg new file mode 100644 index 0000000..b40e6bb --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_3.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18615cb75e691e11797181466eb7020fb18f084ef498769c290a12c36363be02 +size 10941 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_4.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_4.ogg new file mode 100644 index 0000000..dae9bad --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_4.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98086490b038e14398f5f4d9bdf1fbaaa84fe07745a059adadb4be388c8a6347 +size 10781 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_5.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_5.ogg new file mode 100644 index 0000000..b9d83c6 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_5.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1afe211f2d924cb6de3fbef360ab843997dfb99c8270d52d0631cfdc2c667739 +size 11425 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_6.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_6.ogg new file mode 100644 index 0000000..ac9b893 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_6.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b340d8b20de3fffc8aca9b50ccb62abb98897642bd739de6db877e18ec9a314a +size 12203 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_7.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_7.ogg new file mode 100644 index 0000000..20c53f6 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_7.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66385d08c40bbdda4fe44e12e5e5fd2cb9589a1217324c7e5f03b51c7e8b5ae3 +size 10850 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_8.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_8.ogg new file mode 100644 index 0000000..4e1e9c8 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_8.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f113f385780406030e6c6c2882c741639f6dbc567a024e45c1f2c97a10d89713 +size 9910 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_9.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_9.ogg new file mode 100644 index 0000000..5a1d5af --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_drop_9.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6d5122e1e2678cb0c4803d865cebffac049315ffce8aa1c5e07d602ce0ea1d4 +size 11490 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_big.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_big.ogg new file mode 100644 index 0000000..7a580f6 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_big.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:567edd0a1a54f3279bc6d5e74ff2f1dbddf761640412481bd7aa6e651f004353 +size 1622990 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_medium.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_medium.ogg new file mode 100644 index 0000000..7d8e744 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_medium.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51e10ae11ed22732c83cad048ed5e4fc06b70199e5cf1677ab7a6d342af3b866 +size 1513494 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_small.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_small.ogg new file mode 100644 index 0000000..8b2b299 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_rain_outside_small.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67fd437448072de6d13e68a0782457875424bec6dc37d68931a9bc5571a1fdc8 +size 1612786 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_01.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_01.ogg new file mode 100644 index 0000000..eeadee7 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db60c875c8d9736955b8e1228d835a212d5d8530efe1b124c9378c72c91242da +size 318771 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_02.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_02.ogg new file mode 100644 index 0000000..5063bd9 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a8f663575af1e7d5577c9df3b8272ff392d90cab9f8d0d2b7ab060af5573536 +size 338604 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_03.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_03.ogg new file mode 100644 index 0000000..b7b33f3 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_thunderstorm_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cad67eb1f15434d9c5c54e218302c0641e87e2f26376fa9f5340f4f23b953eb +size 231975 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_wind.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_wind.ogg new file mode 100644 index 0000000..e6f479f --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_wind.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c11f3e385fbbb94eef14ae6d71ece815a2b0ad7ed9f1be22a1c9ee091079693e +size 365081 diff --git a/game/FMOD Project/Assets/Ambience/Forest/amb_forest_wind_strong.ogg b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_wind_strong.ogg new file mode 100644 index 0000000..bfd2d61 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/Forest/amb_forest_wind_strong.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1a6c2283f7e8da93be005c09d7f912f2e5c6778f700e0d29b07ec90788c5834 +size 355613 diff --git a/game/FMOD Project/Assets/Ambience/amb_evening_loop.ogg b/game/FMOD Project/Assets/Ambience/amb_evening_loop.ogg new file mode 100644 index 0000000..283f011 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/amb_evening_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22bde479e71d4f7d96e2ae3cc2a995ccddb56f608fad521fa52975ba0d06bd97 +size 4957384 diff --git a/game/FMOD Project/Assets/Ambience/amb_morning_loop.ogg b/game/FMOD Project/Assets/Ambience/amb_morning_loop.ogg new file mode 100644 index 0000000..7349128 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/amb_morning_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e28f0786fbdcdab4f111408b912892c6bcec78e09e513817c6558d59e4411cc2 +size 6967903 diff --git a/game/FMOD Project/Assets/Ambience/amb_night_loop.ogg b/game/FMOD Project/Assets/Ambience/amb_night_loop.ogg new file mode 100644 index 0000000..afbe5d8 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/amb_night_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1eb23320eb65c925074c34099231747c3e993f98ad384bcbff28aaf2094f2a8 +size 6811935 diff --git a/game/FMOD Project/Assets/Ambience/amb_noon_loop.ogg b/game/FMOD Project/Assets/Ambience/amb_noon_loop.ogg new file mode 100644 index 0000000..156ba39 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/amb_noon_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f480f71091bf2eb39e0a9608e6fe17c7daa4362baf0139091aa7e6d64f73f22 +size 4670794 diff --git a/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_01.ogg b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_01.ogg new file mode 100644 index 0000000..7adc69c --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a294129092b7f57109006d4c507474d796c4f767fa9d04d59f088a6e75e02fd3 +size 49925 diff --git a/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_02.ogg b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_02.ogg new file mode 100644 index 0000000..f642af5 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a25cc666b351c95afde01c2f13e50aa7176ff145486f729fde16203c5fcf8d85 +size 37330 diff --git a/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_03.ogg b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_03.ogg new file mode 100644 index 0000000..7c22fc9 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02209db6ed8741b0ddd981683be95e7ea2805b3a6d36a48a3ea015e5070781c4 +size 46646 diff --git a/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_04.ogg b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_04.ogg new file mode 100644 index 0000000..da765a2 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_04.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4596cd9b5281b35bd09fe35d7660d6631b5efc55ec19bfde42cb3a0df6025519 +size 44742 diff --git a/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_05.ogg b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_05.ogg new file mode 100644 index 0000000..8325157 --- /dev/null +++ b/game/FMOD Project/Assets/Ambience/birds/amb_bird_call_05.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e749ca7897d89ddb56e5077c2193aacb44231974b499977eaf558cdb5c23f6b +size 50481 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_01.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_01.ogg new file mode 100644 index 0000000..30f399a --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df8c4f3533df21a344d48453bafd76aa46c96a911473ea092829b67bd7add46f +size 5856 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_02.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_02.ogg new file mode 100644 index 0000000..0bb6d75 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:222e8ac9d31163174849240be58b341e62bcb9fc89f72b413e33cff620c4cf7a +size 6767 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_03.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_03.ogg new file mode 100644 index 0000000..e76bdb1 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_enemy_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4481c0c71c79897ea8a6fc4ee2cc2b91ee0abf55ff821f605dce088b282b722 +size 6642 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_01.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_01.ogg new file mode 100644 index 0000000..74dda9a --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73414379cbeaa673f5c1255cd5330092e5136f2c7e8bb1bf64a6ab557ca964e9 +size 7643 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_02.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_02.ogg new file mode 100644 index 0000000..b66ff68 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:152688968ece5a4c5476fca523da50ccbad410f6b766a70494bb15f26465b8ac +size 7442 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_03.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_03.ogg new file mode 100644 index 0000000..f0daf2c --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_carpet_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ce0abc844d7ad44de5fb23d887f2de8a6285303f0309f5fd86c14721419cccc +size 7618 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_01.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_01.ogg new file mode 100644 index 0000000..d610eb7 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7ace433553f974fa2fd96cb17ab98613ce7b883d158a6481055b7a382107fe5 +size 10219 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_02.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_02.ogg new file mode 100644 index 0000000..36a503f --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb472c0cb817c2c98c7be06de7b8f9f38f284cca0bc116860bb1db16b5e6bdda +size 10453 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_03.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_03.ogg new file mode 100644 index 0000000..0fb25ec --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_grass_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c8909b84d96b12375a9f684c3a240bc58e82766dca0a9011bddc042b60fbb66 +size 10441 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_01.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_01.ogg new file mode 100644 index 0000000..5604650 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21037e46591699597ebda6182a057e496bc2ed1b881a3892cee3d4d975187861 +size 7101 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_02.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_02.ogg new file mode 100644 index 0000000..4c088ea --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dd8044d58a2b0cb4067a879b96151434a90861527572ab5ecade35655ef6e15 +size 7789 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_03.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_03.ogg new file mode 100644 index 0000000..18056c9 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:793e70654f12b5c42289e13f16c07a0c279b5ee4e1b3f25f3541a1d3564f3b0f +size 7432 diff --git a/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_04.ogg b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_04.ogg new file mode 100644 index 0000000..5517588 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Footsteps/footsteps_player_wood_04.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfce1f9a295736023b25b7d717040062ebad09a50a67fe60c76a2adc290517d4 +size 7734 diff --git a/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_01.ogg b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_01.ogg new file mode 100644 index 0000000..8fb9bdd --- /dev/null +++ b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:850ac67fd2611feda243e421330f657fd105f51aabdf1bd226c12fa057d67da5 +size 12310 diff --git a/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_02.ogg b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_02.ogg new file mode 100644 index 0000000..efd44b6 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98703252c31f8889c5bfcbce7ec949d805fcc96813a25dad6d520e318003ed02 +size 11092 diff --git a/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_03.ogg b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_03.ogg new file mode 100644 index 0000000..c370236 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_close_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95374f4e86a2a09738fa61a2fdbea995122642ab9fe75a4e46b9a9c97d5d88aa +size 12358 diff --git a/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_01.ogg b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_01.ogg new file mode 100644 index 0000000..37c307b --- /dev/null +++ b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bb08928069b009ec3d53aca6048e2d85b34e96a1f1af06df47919ea77f408c8 +size 19357 diff --git a/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_02.ogg b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_02.ogg new file mode 100644 index 0000000..7f2ddd0 --- /dev/null +++ b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab5499c161c02d21d675157ae00a8fab9571d25f3aa35c1b51fa7ee5c3336aa4 +size 14837 diff --git a/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_03.ogg b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_03.ogg new file mode 100644 index 0000000..dc0485e --- /dev/null +++ b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:258dc0492aae23cd612cdce9887ec24a43e587961940e4f9231012ff01ab2838 +size 17980 diff --git a/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_04.ogg b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_04.ogg new file mode 100644 index 0000000..84e352f --- /dev/null +++ b/game/FMOD Project/Assets/Character/Hand Foley/Door/foley_door_open_04.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e9d7682b023fd99eb2126bc767c9992d2e51af13b18ea40263ab2df56827489 +size 14086 diff --git a/game/FMOD Project/Assets/Character/Radio/placeholder_640166_main_meco.ogg b/game/FMOD Project/Assets/Character/Radio/placeholder_640166_main_meco.ogg new file mode 100644 index 0000000..ed1cf5f --- /dev/null +++ b/game/FMOD Project/Assets/Character/Radio/placeholder_640166_main_meco.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0da6fd7fec06d04874138a31ea44684bbdd545b97e16070303fbda34be08d81 +size 86754 diff --git a/game/FMOD Project/Assets/Character/heartbeat.ogg b/game/FMOD Project/Assets/Character/heartbeat.ogg new file mode 100644 index 0000000..1e31bc0 --- /dev/null +++ b/game/FMOD Project/Assets/Character/heartbeat.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2b014fcab12af7ce2bd84baa23587bed8c403715f1cea0994d06413bf00fb74 +size 92036 diff --git a/game/FMOD Project/Assets/Character/noise_short.ogg b/game/FMOD Project/Assets/Character/noise_short.ogg new file mode 100644 index 0000000..7909975 --- /dev/null +++ b/game/FMOD Project/Assets/Character/noise_short.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:276266f2b56dafedfeeb369d9618ecdee6a62f9ff13822847c9604946138733c +size 41431 diff --git a/game/FMOD Project/Assets/Interactables/barrel_rolling_loop.ogg b/game/FMOD Project/Assets/Interactables/barrel_rolling_loop.ogg new file mode 100644 index 0000000..5924a6f --- /dev/null +++ b/game/FMOD Project/Assets/Interactables/barrel_rolling_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:588a48023a19fed107e96fbae54a05f12a574e2d1f0ea9664444f1b83dab90f1 +size 53877 diff --git a/game/FMOD Project/Assets/Interactables/wooden_collision_1_dry_dull.ogg b/game/FMOD Project/Assets/Interactables/wooden_collision_1_dry_dull.ogg new file mode 100644 index 0000000..3c75057 --- /dev/null +++ b/game/FMOD Project/Assets/Interactables/wooden_collision_1_dry_dull.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7827be5977a586323f8d690777b459e669f623b791609269fba04fefb439990d +size 9038 diff --git a/game/FMOD Project/Assets/Interactables/wooden_collision_2_dry_dull.ogg b/game/FMOD Project/Assets/Interactables/wooden_collision_2_dry_dull.ogg new file mode 100644 index 0000000..3a6893d --- /dev/null +++ b/game/FMOD Project/Assets/Interactables/wooden_collision_2_dry_dull.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76e319a0c3d8f43c87256f5f62d7877967c2d53997d8615592d8cce60cc49be3 +size 9402 diff --git a/game/FMOD Project/Assets/Interactables/wooden_collision_3_dry_dull.ogg b/game/FMOD Project/Assets/Interactables/wooden_collision_3_dry_dull.ogg new file mode 100644 index 0000000..e123066 --- /dev/null +++ b/game/FMOD Project/Assets/Interactables/wooden_collision_3_dry_dull.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ef815f283e17ac453e07bc2a8516eacadae5f610976890f9f8c0ec781a2ca68 +size 11075 diff --git a/game/FMOD Project/Assets/Interactables/wooden_collision_small_dry_dull.ogg b/game/FMOD Project/Assets/Interactables/wooden_collision_small_dry_dull.ogg new file mode 100644 index 0000000..894cc0d --- /dev/null +++ b/game/FMOD Project/Assets/Interactables/wooden_collision_small_dry_dull.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff91456f51257c64b3cc55f0c67213879dbdaae4384d70bef805273fc6ade32c +size 9802 diff --git a/game/FMOD Project/Assets/Music/music_lvl_01_bleep_a.ogg b/game/FMOD Project/Assets/Music/music_lvl_01_bleep_a.ogg new file mode 100644 index 0000000..9f3f559 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_01_bleep_a.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de738529afecb76bd49b7b3342da024b951d1a6864e62f6cfd66f75685d8c01b +size 203195 diff --git a/game/FMOD Project/Assets/Music/music_lvl_01_bleep_c.ogg b/game/FMOD Project/Assets/Music/music_lvl_01_bleep_c.ogg new file mode 100644 index 0000000..1dc8a29 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_01_bleep_c.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec9bed32c888de2344636f119581682ac89d28b61f39a64467c16ecde46ba7da +size 213915 diff --git a/game/FMOD Project/Assets/Music/music_lvl_01_drone_loop.ogg b/game/FMOD Project/Assets/Music/music_lvl_01_drone_loop.ogg new file mode 100644 index 0000000..d0c70be --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_01_drone_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a92d9f93da73ee980038737f349f8e86657796cf36e42bafdbd9dc97e36e1f88 +size 113252 diff --git a/game/FMOD Project/Assets/Music/music_lvl_01_pad_chords.ogg b/game/FMOD Project/Assets/Music/music_lvl_01_pad_chords.ogg new file mode 100644 index 0000000..38704aa --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_01_pad_chords.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb66580fd4d7d39200f41eaacb7928694b740a57523f1310fea92c130942c5e9 +size 801716 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_01.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_01.ogg new file mode 100644 index 0000000..8989a75 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f8e13aebb8c555bfe79ce68b047dba411e7b28188ad5f9599ed3d9c48159f61 +size 928452 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_02.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_02.ogg new file mode 100644 index 0000000..3d0c90b --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db5f403cd8d3b78de86fcfbc9f5b1eadcf0e92acb73ff04e1300a6f9e5e74960 +size 1114967 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_03.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_03.ogg new file mode 100644 index 0000000..64fbc7a --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd19b5fc85211c9f75dc80a5da1e5b66be08fdaac07d44dcb6312982b4bb2acc +size 1270138 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_04.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_04.ogg new file mode 100644 index 0000000..49633d7 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_electronic_layer_04.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c90ef5dbe9b9cec34bf2da220313d67102cdc9a9b3553447bf7421610bdabcb +size 1371599 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_01.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_01.ogg new file mode 100644 index 0000000..f5ea184 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39f568470dc76b45acde20e5e7edc878194600d653b6a47f3ab440590d88467c +size 1331864 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_02.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_02.ogg new file mode 100644 index 0000000..66a23bc --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b716de6972804bd5860d9b8fe87dfcb6026fa685f14e339afe1fe95db27fb9d8 +size 1412488 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_03.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_03.ogg new file mode 100644 index 0000000..f6f92e8 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d2a99bcc4e23d1dd86a9c22e4e90c3ff89bbc56a1dd18bd2d67964b4699e768 +size 1329331 diff --git a/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_04.ogg b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_04.ogg new file mode 100644 index 0000000..1708331 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_02_orchestra_layer_04.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4819117168c09c9a4691a1151da44c4d3ff27ed7c0ff041e226abfe83f93c667 +size 1270623 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_doma_east_theme_bpm_140.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_doma_east_theme_bpm_140.ogg new file mode 100644 index 0000000..959ed66 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_doma_east_theme_bpm_140.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:decd8a35966709e00b2989ef975818eae32755041ae3527bf0fe924ebc85de5f +size 3701336 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_east_high_pre_rest_re.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_east_high_pre_rest_re.ogg new file mode 100644 index 0000000..edaf930 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_east_high_pre_rest_re.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fb2ed7dfbe7388e9cc93c00c139d23b75cfb995daaaf89f276f6df73bb2fdfc +size 51792 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_east_low_mid_re.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_east_low_mid_re.ogg new file mode 100644 index 0000000..64b96ed --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_east_low_mid_re.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d05089f8fd524e21452e35284dbec0fe2ed5bd2cd9670cd9d85d044f0294569e +size 83348 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_east_mid_high_re.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_east_mid_high_re.ogg new file mode 100644 index 0000000..871b36e --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_east_mid_high_re.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:223ab39318e498eb5472e789859d8447b7ba0f8034a8939d49515ff230f86bde +size 78693 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_east_pre_rest_re.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_east_pre_rest_re.ogg new file mode 100644 index 0000000..59529a0 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_east_pre_rest_re.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45bff16ceb8b9274eae7b6d68c13cdb62da306bfc3d505c186633e4f78f311e0 +size 81842 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_east_rest_low_re.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_east_rest_low_re.ogg new file mode 100644 index 0000000..e0008b8 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_east_rest_low_re.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73d1635e0c43b2eb9348d28a44c668ed793e8e2a007c84393baddbe6cf353ac6 +size 83375 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_sting_high_01.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_sting_high_01.ogg new file mode 100644 index 0000000..25da2b8 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_sting_high_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80b7c35baa073c3d07be0d3db029dab9d3caef334e6236bffcb4acfdbdcc4fa0 +size 64861 diff --git a/game/FMOD Project/Assets/Music/music_lvl_03_sting_high_02.ogg b/game/FMOD Project/Assets/Music/music_lvl_03_sting_high_02.ogg new file mode 100644 index 0000000..1fb0af2 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_lvl_03_sting_high_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d14348e1ccc5f9ac03914794153ffb9d611fd91284bfc12186cff9a7bf35b9f +size 101819 diff --git a/game/FMOD Project/Assets/Music/music_radio_station_hiphop_loop.ogg b/game/FMOD Project/Assets/Music/music_radio_station_hiphop_loop.ogg new file mode 100644 index 0000000..c24bcf4 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_radio_station_hiphop_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dba6fce37795cabd6b19069ee80515f38059666384286de1fe54dc239c4e0d6 +size 821712 diff --git a/game/FMOD Project/Assets/Music/music_radio_station_lofi_loop.ogg b/game/FMOD Project/Assets/Music/music_radio_station_lofi_loop.ogg new file mode 100644 index 0000000..7c5cca6 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_radio_station_lofi_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:637b78c942edd107b7a8c291229bad1a395f2553c5236641ab2fa1d01aed1707 +size 401078 diff --git a/game/FMOD Project/Assets/Music/music_radio_station_rock_loop.ogg b/game/FMOD Project/Assets/Music/music_radio_station_rock_loop.ogg new file mode 100644 index 0000000..7c66255 --- /dev/null +++ b/game/FMOD Project/Assets/Music/music_radio_station_rock_loop.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:972e78565c01763b91ff3cec99474e4812062664573a255084065b90dd876c8f +size 623583 diff --git a/game/FMOD Project/Assets/UI/ui_cancel.ogg b/game/FMOD Project/Assets/UI/ui_cancel.ogg new file mode 100644 index 0000000..3300306 --- /dev/null +++ b/game/FMOD Project/Assets/UI/ui_cancel.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0426593aa4f64248c9a35230506292bb4aba71568609929d04ab79bfda08d48b +size 24538 diff --git a/game/FMOD Project/Assets/UI/ui_okay.ogg b/game/FMOD Project/Assets/UI/ui_okay.ogg new file mode 100644 index 0000000..d404b07 --- /dev/null +++ b/game/FMOD Project/Assets/UI/ui_okay.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8638dd56f9c3f88beb12820db073afce0cae8ccac2d38f3263b8de737162709c +size 23696 diff --git a/game/FMOD Project/Assets/VO/English/vo_en_main_menu.ogg b/game/FMOD Project/Assets/VO/English/vo_en_main_menu.ogg new file mode 100644 index 0000000..1cfe2a0 --- /dev/null +++ b/game/FMOD Project/Assets/VO/English/vo_en_main_menu.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6bc6ae8da0c6658010bf28fc6662644a781971e9f539fa537ece215d2345cd9 +size 28053 diff --git a/game/FMOD Project/Assets/VO/English/vo_en_welcome.ogg b/game/FMOD Project/Assets/VO/English/vo_en_welcome.ogg new file mode 100644 index 0000000..6dc6dc2 --- /dev/null +++ b/game/FMOD Project/Assets/VO/English/vo_en_welcome.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:100109b230488e21059c652cabdb9b446eac62e59c8f39ac9c3144c9ff2d2554 +size 31193 diff --git a/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_0879_on_exh.ogg b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_0879_on_exh.ogg new file mode 100644 index 0000000..c0f8e00 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_0879_on_exh.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a86d4e21a04e22dc2cef22add43f0b64ff922d7e09b6fd80cb1a9fb2b6b9af4 +size 16957 diff --git a/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_0945_off_exh.ogg b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_0945_off_exh.ogg new file mode 100644 index 0000000..8798e52 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_0945_off_exh.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0eb760b217df81e1b93994fe1050e06fb2d6e53b9235cb52359301885c369e1 +size 18277 diff --git a/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1121_on_exh.ogg b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1121_on_exh.ogg new file mode 100644 index 0000000..3e92bbb --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1121_on_exh.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:868f9935c6e5b43abd98dc566fee378c1a5de20e5a3526671bc538f83841f6d8 +size 15695 diff --git a/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1406_off_exh.ogg b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1406_off_exh.ogg new file mode 100644 index 0000000..e8a5b15 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1406_off_exh.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:792fe56e5239eabc831d14ac0d9d71c0850fc6c7fa25ebadb4fd287d523db2b0 +size 18192 diff --git a/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1604_on_exh.ogg b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1604_on_exh.ogg new file mode 100644 index 0000000..57b319a --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1604_on_exh.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3934f52a853ea7bd6173c67cace956d23532b8c43d197232f53e82dd61bdb3fb +size 19977 diff --git a/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1648_off_exh.ogg b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1648_off_exh.ogg new file mode 100644 index 0000000..886aa9f --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_1648_off_exh.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef50193a65976a3bc9acaa0fb7dea918c458b072ab6ef6f31df651a2eee22651 +size 14249 diff --git a/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_idle_exh.ogg b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_idle_exh.ogg new file mode 100644 index 0000000..85ce9fb --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Basic Engine/veh_lawnmower_idle_exh.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7773c66dacbd96171726cd854466791d52ecf010f97b5946b7cd2a81090c559c +size 37472 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01104.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01104.ogg new file mode 100644 index 0000000..2527bbb --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01104.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6869cd4499de1fd8953cc68b62e552bb9d82480804b47009e6b72ba8a5f82aef +size 36241 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01560.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01560.ogg new file mode 100644 index 0000000..66778b8 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01560.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d97b4d7567522e8b5687480533c89bf009bde3acbac0091ae3e26c6d145c6833 +size 15674 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01999.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01999.ogg new file mode 100644 index 0000000..1c02069 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_01999.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2eaa5a6bfcb3d55d652a66e88c7df32e6af100fc05e18911439e5aee757f88e3 +size 15727 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_02549.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_02549.ogg new file mode 100644 index 0000000..73b9341 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_02549.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e992ccfcb1ff9e987034db98727062a0439005755382f47f731d54b17351cbce +size 16192 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_02900.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_02900.ogg new file mode 100644 index 0000000..6985df3 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_02900.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c9a0a31297039bae7a2da4e60df43f2bb040e6f0b6492f325e6a7aeab0b6580 +size 17689 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_03472.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_03472.ogg new file mode 100644 index 0000000..1543669 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_03472.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1ace3439f3150e4767dee3ca5b19594c6fdf96f81fee39581732fa30bf7e977 +size 15870 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_03845.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_03845.ogg new file mode 100644 index 0000000..64aff0b --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_03845.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22d3d974956a9d37bf929ef02e7aa8a2b44d8e7a678673c6438fa81775a8210a +size 16315 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_04329.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_04329.ogg new file mode 100644 index 0000000..c494ef2 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_04329.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51eee731910a6db3a3488c67cfb329287f120272bf06f938a674267c646f6790 +size 16892 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_04812.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_04812.ogg new file mode 100644 index 0000000..e3db473 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_04812.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6864d33824d47257cd9c09c7146815cf27f0f343666b7382deba8b899858e99 +size 15782 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_05845.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_05845.ogg new file mode 100644 index 0000000..b7e9938 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_05845.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c1072dbe91e3bbd04c07307246e1b63ef0ac800459e2e084a1464e8a80e9f8f +size 15361 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_06262.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_06262.ogg new file mode 100644 index 0000000..bb9eba1 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_06262.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15ef70a6c911e014aa5f7f5d1a6b6d4cff45f7b730ad8b94b95ec930e6e0ac8e +size 16349 diff --git a/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_06723.ogg b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_06723.ogg new file mode 100644 index 0000000..4b17860 --- /dev/null +++ b/game/FMOD Project/Assets/Vehicles/Car Engine/veh_car_engine_190E_06723.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbe30ea554f743d4e68143a10bde59e3caa81f2ac56a4cb31b33de1e22780c66 +size 10573 diff --git a/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_01.ogg b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_01.ogg new file mode 100644 index 0000000..9107c79 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7769257dd7f4fd3e9bf5f9c583a0d8b715124e3dda9a4f8351d8bc78ddd83d99 +size 20594 diff --git a/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_02.ogg b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_02.ogg new file mode 100644 index 0000000..f5449cb --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1c21a42379e41992471adfe3e8300649a15f36ef447b3a6e1c45535f4f9e8a1 +size 20259 diff --git a/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_03.ogg b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_03.ogg new file mode 100644 index 0000000..6ca5c7d --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5022e1805c496cce3417c010c435e870052cbb18f1111ecf4dc1d2ff5c1bc0e +size 18307 diff --git a/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_04.ogg b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_04.ogg new file mode 100644 index 0000000..c84efc2 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Bullet Casings/weapons_bullet_casing_04.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc3e3ec104f2b09ab5fdae7e8641d7c1c4b02cab816ccda76885074e8c7fb5ac +size 16637 diff --git a/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_large.ogg b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_large.ogg new file mode 100644 index 0000000..503b80f --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_large.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4eb5b2b4f5d968f35b132ca6dca88bc0e4df0367403726632ba8a523b297e8f +size 90109 diff --git a/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_medium.ogg b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_medium.ogg new file mode 100644 index 0000000..bc35a9c --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_medium.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9203b48222bc33b232263dd31e207d35e6dfb3d4214469e18162f224cef17c18 +size 72228 diff --git a/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_small.ogg b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_small.ogg new file mode 100644 index 0000000..8908b51 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_debris_small.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bee3fe00ec8a87853578ebfa9b5205cbdf6561878edf835760db3045bc8b3a3 +size 78498 diff --git a/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_distant.ogg b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_distant.ogg new file mode 100644 index 0000000..3835d0c --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_distant.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f0a0bc06d843f756e8bc5b1e407bb5fb893d463fca1db366b61c894496f36f4 +size 11075 diff --git a/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_large.ogg b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_large.ogg new file mode 100644 index 0000000..9de4092 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_large.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:747452234b758e33334fa808d563ce443da6c77e4f07953e0a71b2beb3c17bfa +size 73671 diff --git a/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_medium.ogg b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_medium.ogg new file mode 100644 index 0000000..d919890 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_medium.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72d3812582c5e479556303dabdb078cc60ae59d1d0a210e1199ad9452dccb497 +size 43114 diff --git a/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_small.ogg b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_small.ogg new file mode 100644 index 0000000..bceb45b --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/Explosion/weapons_explosion_small.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:605455b218880ad0096c9587776cabdb217fa3952fb38e6cec57c04ba922e438 +size 37808 diff --git a/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_01.ogg b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_01.ogg new file mode 100644 index 0000000..2304c5d --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d92d8e9b66fabc02f1817feabbc058004e5aa6e147c1769f9af1e4cb0e334e9f +size 5562 diff --git a/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_02.ogg b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_02.ogg new file mode 100644 index 0000000..36874a8 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b13db1cd6c92b8582436f9350dbf328273d3864faacf7d3d984e37bce8ca601e +size 5584 diff --git a/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_03.ogg b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_03.ogg new file mode 100644 index 0000000..0735a44 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_auto_03.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea610ef30759889773fd93164c55b0d21a0a30f1a6cab4875d965059e5bc4fc7 +size 5405 diff --git a/game/FMOD Project/Assets/Weapons/M4/weapons_m4_head_01.ogg b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_head_01.ogg new file mode 100644 index 0000000..fa8cf16 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_head_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:258b66e3ce10ae394368c1fea830b380015bf176f1d9dfd798c4f9ec1ed0fe5c +size 4839 diff --git a/game/FMOD Project/Assets/Weapons/M4/weapons_m4_head_02.ogg b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_head_02.ogg new file mode 100644 index 0000000..f3ec64c --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_head_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:966218e7309a39b5a0bcecb4bc9b603a9416f79f8219da0bf156f4087ac734e4 +size 4842 diff --git a/game/FMOD Project/Assets/Weapons/M4/weapons_m4_tail_01.ogg b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_tail_01.ogg new file mode 100644 index 0000000..64427d0 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_tail_01.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18e560f704866560f0a6386cd0c5e72bcbc60c47b6db0371aeff2254b7a01502 +size 8279 diff --git a/game/FMOD Project/Assets/Weapons/M4/weapons_m4_tail_02.ogg b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_tail_02.ogg new file mode 100644 index 0000000..4a1d5b6 --- /dev/null +++ b/game/FMOD Project/Assets/Weapons/M4/weapons_m4_tail_02.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd8f8c2f2b8c410f7953ac6d29a2dcc6ec2a1ecbf4d84b3f18b43f4af92a8124 +size 8887 diff --git a/game/FMOD Project/Dialogue/CN/cn_goodbye.ogg b/game/FMOD Project/Dialogue/CN/cn_goodbye.ogg new file mode 100644 index 0000000..d40b11a --- /dev/null +++ b/game/FMOD Project/Dialogue/CN/cn_goodbye.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a88332f9715017ba94e93a9f4d6c47cbd06308a2e783f5ad5697bd801a4a1c99 +size 21239 diff --git a/game/FMOD Project/Dialogue/CN/cn_main_menu.ogg b/game/FMOD Project/Dialogue/CN/cn_main_menu.ogg new file mode 100644 index 0000000..b79e9bd --- /dev/null +++ b/game/FMOD Project/Dialogue/CN/cn_main_menu.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4647184a9d27809dad5cba1efdbb0b7b57a295a49eba40bd63d0641ce6c1bdd +size 36176 diff --git a/game/FMOD Project/Dialogue/CN/cn_welcome.ogg b/game/FMOD Project/Dialogue/CN/cn_welcome.ogg new file mode 100644 index 0000000..099d862 --- /dev/null +++ b/game/FMOD Project/Dialogue/CN/cn_welcome.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43b0598bbde14129e7eb91ef98c3ab5f6d2b61a4993c9e0f3037e50dba6f81b8 +size 71967 diff --git a/game/FMOD Project/Dialogue/CN/keys.txt b/game/FMOD Project/Dialogue/CN/keys.txt new file mode 100644 index 0000000..b387154 --- /dev/null +++ b/game/FMOD Project/Dialogue/CN/keys.txt @@ -0,0 +1,3 @@ +welcome,cn_welcome.ogg +main menu,cn_main_menu.ogg +goodbye,cn_goodbye.ogg \ No newline at end of file diff --git a/game/FMOD Project/Dialogue/EN/en_goodbye.ogg b/game/FMOD Project/Dialogue/EN/en_goodbye.ogg new file mode 100644 index 0000000..9d94365 --- /dev/null +++ b/game/FMOD Project/Dialogue/EN/en_goodbye.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:015e821081f0a9dcef18dbc19f9a31efaedb02f90d1973946c963b9b9c8f56c0 +size 23773 diff --git a/game/FMOD Project/Dialogue/EN/en_main_menu.ogg b/game/FMOD Project/Dialogue/EN/en_main_menu.ogg new file mode 100644 index 0000000..4d4a50a --- /dev/null +++ b/game/FMOD Project/Dialogue/EN/en_main_menu.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94015002fefe1bef8033925b8b8b377afefba32a3fdf455bcb101b162dd7c6ae +size 47121 diff --git a/game/FMOD Project/Dialogue/EN/en_welcome.ogg b/game/FMOD Project/Dialogue/EN/en_welcome.ogg new file mode 100644 index 0000000..5bf22a8 --- /dev/null +++ b/game/FMOD Project/Dialogue/EN/en_welcome.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08c7787828a3d7635819977fee599f2fe5910a09b7fedb979845caa7fb0f81d7 +size 69563 diff --git a/game/FMOD Project/Dialogue/EN/keys.txt b/game/FMOD Project/Dialogue/EN/keys.txt new file mode 100644 index 0000000..6ca10da --- /dev/null +++ b/game/FMOD Project/Dialogue/EN/keys.txt @@ -0,0 +1,3 @@ +welcome,en_welcome.ogg +main menu,en_main_menu.ogg +goodbye,en_goodbye.ogg \ No newline at end of file diff --git a/game/FMOD Project/Dialogue/JP/jp_goodbye.ogg b/game/FMOD Project/Dialogue/JP/jp_goodbye.ogg new file mode 100644 index 0000000..1999790 --- /dev/null +++ b/game/FMOD Project/Dialogue/JP/jp_goodbye.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c3792f8af6c5ed60d905e1d7f57a033d7023d38de08647ee2fc3261f6f6a0ad +size 28869 diff --git a/game/FMOD Project/Dialogue/JP/jp_main_menu.ogg b/game/FMOD Project/Dialogue/JP/jp_main_menu.ogg new file mode 100644 index 0000000..ec329b0 --- /dev/null +++ b/game/FMOD Project/Dialogue/JP/jp_main_menu.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51baf86c9d6e852ab88f8daf21f9223860ade0014cbc765acaabfdfc91ff564a +size 43348 diff --git a/game/FMOD Project/Dialogue/JP/jp_welcome.ogg b/game/FMOD Project/Dialogue/JP/jp_welcome.ogg new file mode 100644 index 0000000..944ac84 --- /dev/null +++ b/game/FMOD Project/Dialogue/JP/jp_welcome.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d611f9eefd33c422babc03eaefacf8149cc4f16dbbe378fc1e82aae1773f99f +size 85418 diff --git a/game/FMOD Project/Dialogue/JP/keys.txt b/game/FMOD Project/Dialogue/JP/keys.txt new file mode 100644 index 0000000..0e8c138 --- /dev/null +++ b/game/FMOD Project/Dialogue/JP/keys.txt @@ -0,0 +1,3 @@ +welcome,jp_welcome.ogg +main menu,jp_main_menu.ogg +goodbye,jp_goodbye.ogg \ No newline at end of file diff --git a/game/FMOD Project/Examples.fspro b/game/FMOD Project/Examples.fspro new file mode 100644 index 0000000..a0a11fc --- /dev/null +++ b/game/FMOD Project/Examples.fspro @@ -0,0 +1,2 @@ + + diff --git a/game/FMOD Project/Metadata/Asset/{14ede0cb-cc07-44ba-a9c8-7fb447f25d80}.xml b/game/FMOD Project/Metadata/Asset/{14ede0cb-cc07-44ba-a9c8-7fb447f25d80}.xml new file mode 100644 index 0000000..c33d0e0 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{14ede0cb-cc07-44ba-a9c8-7fb447f25d80}.xml @@ -0,0 +1,11 @@ + + + + + Character/Hand Foley/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{18b7205f-1a94-42f0-b3d9-d8b7a389dcbc}.xml b/game/FMOD Project/Metadata/Asset/{18b7205f-1a94-42f0-b3d9-d8b7a389dcbc}.xml new file mode 100644 index 0000000..9fa4e91 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{18b7205f-1a94-42f0-b3d9-d8b7a389dcbc}.xml @@ -0,0 +1,11 @@ + + + + + Ambience/Forest/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{29f1df2a-aa46-4763-b720-9e73e24d0898}.xml b/game/FMOD Project/Metadata/Asset/{29f1df2a-aa46-4763-b720-9e73e24d0898}.xml new file mode 100644 index 0000000..eddd310 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{29f1df2a-aa46-4763-b720-9e73e24d0898}.xml @@ -0,0 +1,11 @@ + + + + + UI/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{3b2f385d-ef99-4d6e-8979-8c751a859f30}.xml b/game/FMOD Project/Metadata/Asset/{3b2f385d-ef99-4d6e-8979-8c751a859f30}.xml new file mode 100644 index 0000000..f2789c8 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{3b2f385d-ef99-4d6e-8979-8c751a859f30}.xml @@ -0,0 +1,11 @@ + + + + + Music/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{3f2ea02d-5854-4768-ba9b-8e95ce0c1e9c}.xml b/game/FMOD Project/Metadata/Asset/{3f2ea02d-5854-4768-ba9b-8e95ce0c1e9c}.xml new file mode 100644 index 0000000..be69e90 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{3f2ea02d-5854-4768-ba9b-8e95ce0c1e9c}.xml @@ -0,0 +1,11 @@ + + + + + Weapons/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{3f5379d4-c623-4beb-8923-f6fc80a22b93}.xml b/game/FMOD Project/Metadata/Asset/{3f5379d4-c623-4beb-8923-f6fc80a22b93}.xml new file mode 100644 index 0000000..0b827a6 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{3f5379d4-c623-4beb-8923-f6fc80a22b93}.xml @@ -0,0 +1,11 @@ + + + + + Character/Footsteps/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{4a774a53-ba6a-4bd1-85c6-52f5875bb0a4}.xml b/game/FMOD Project/Metadata/Asset/{4a774a53-ba6a-4bd1-85c6-52f5875bb0a4}.xml new file mode 100644 index 0000000..d4785ab --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{4a774a53-ba6a-4bd1-85c6-52f5875bb0a4}.xml @@ -0,0 +1,11 @@ + + + + + Interactables/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{4c43130b-9186-4fb6-9d65-a9acdac70927}.xml b/game/FMOD Project/Metadata/Asset/{4c43130b-9186-4fb6-9d65-a9acdac70927}.xml new file mode 100644 index 0000000..6f4d7ac --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{4c43130b-9186-4fb6-9d65-a9acdac70927}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/game/FMOD Project/Metadata/Asset/{55118964-dcb0-424c-bc2f-94a3cdd6ed0a}.xml b/game/FMOD Project/Metadata/Asset/{55118964-dcb0-424c-bc2f-94a3cdd6ed0a}.xml new file mode 100644 index 0000000..08885a1 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{55118964-dcb0-424c-bc2f-94a3cdd6ed0a}.xml @@ -0,0 +1,11 @@ + + + + + Character/Hand Foley/Door/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{57b9f742-65c7-4ec3-8417-725f307cb23f}.xml b/game/FMOD Project/Metadata/Asset/{57b9f742-65c7-4ec3-8417-725f307cb23f}.xml new file mode 100644 index 0000000..5a1199f --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{57b9f742-65c7-4ec3-8417-725f307cb23f}.xml @@ -0,0 +1,11 @@ + + + + + Character/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{62395ede-81d7-49c6-8545-5766955de0f8}.xml b/game/FMOD Project/Metadata/Asset/{62395ede-81d7-49c6-8545-5766955de0f8}.xml new file mode 100644 index 0000000..16d8d2c --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{62395ede-81d7-49c6-8545-5766955de0f8}.xml @@ -0,0 +1,11 @@ + + + + + Weapons/Bullet Casings/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{6d3fb1b8-d556-4d61-8a31-0dcf1a355bf9}.xml b/game/FMOD Project/Metadata/Asset/{6d3fb1b8-d556-4d61-8a31-0dcf1a355bf9}.xml new file mode 100644 index 0000000..355f280 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{6d3fb1b8-d556-4d61-8a31-0dcf1a355bf9}.xml @@ -0,0 +1,11 @@ + + + + + VO/English/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{779923a2-3850-4a03-a1f2-7b685b927955}.xml b/game/FMOD Project/Metadata/Asset/{779923a2-3850-4a03-a1f2-7b685b927955}.xml new file mode 100644 index 0000000..61fd8ca --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{779923a2-3850-4a03-a1f2-7b685b927955}.xml @@ -0,0 +1,11 @@ + + + + + VO/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{83a9681c-97b1-4348-afbd-156c4aa13231}.xml b/game/FMOD Project/Metadata/Asset/{83a9681c-97b1-4348-afbd-156c4aa13231}.xml new file mode 100644 index 0000000..5edcc62 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{83a9681c-97b1-4348-afbd-156c4aa13231}.xml @@ -0,0 +1,11 @@ + + + + + Weapons/Explosion/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{a036aae0-ec7e-43f1-8202-371bfea8becb}.xml b/game/FMOD Project/Metadata/Asset/{a036aae0-ec7e-43f1-8202-371bfea8becb}.xml new file mode 100644 index 0000000..5b5140e --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{a036aae0-ec7e-43f1-8202-371bfea8becb}.xml @@ -0,0 +1,11 @@ + + + + + Vehicles/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{b7300f77-6df3-42fc-a34e-5a83ddc719cb}.xml b/game/FMOD Project/Metadata/Asset/{b7300f77-6df3-42fc-a34e-5a83ddc719cb}.xml new file mode 100644 index 0000000..2b9ddb0 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{b7300f77-6df3-42fc-a34e-5a83ddc719cb}.xml @@ -0,0 +1,11 @@ + + + + + Weapons/M4/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{b9bc64f8-78ce-421e-ad9e-6381e8a209a9}.xml b/game/FMOD Project/Metadata/Asset/{b9bc64f8-78ce-421e-ad9e-6381e8a209a9}.xml new file mode 100644 index 0000000..6df9dfe --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{b9bc64f8-78ce-421e-ad9e-6381e8a209a9}.xml @@ -0,0 +1,11 @@ + + + + + Vehicles/Car Engine/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{bf34602c-0ae5-4228-8d94-dff0762e8ff6}.xml b/game/FMOD Project/Metadata/Asset/{bf34602c-0ae5-4228-8d94-dff0762e8ff6}.xml new file mode 100644 index 0000000..ebe2d39 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{bf34602c-0ae5-4228-8d94-dff0762e8ff6}.xml @@ -0,0 +1,11 @@ + + + + + Vehicles/Basic Engine/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{eaec0fa4-5482-43f7-88a1-24f1eea49126}.xml b/game/FMOD Project/Metadata/Asset/{eaec0fa4-5482-43f7-88a1-24f1eea49126}.xml new file mode 100644 index 0000000..2e462ac --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{eaec0fa4-5482-43f7-88a1-24f1eea49126}.xml @@ -0,0 +1,11 @@ + + + + + Character/Radio/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{f1a6234d-d2df-4fbd-ac2d-69a7e57c2d39}.xml b/game/FMOD Project/Metadata/Asset/{f1a6234d-d2df-4fbd-ac2d-69a7e57c2d39}.xml new file mode 100644 index 0000000..3fc6bbe --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{f1a6234d-d2df-4fbd-ac2d-69a7e57c2d39}.xml @@ -0,0 +1,11 @@ + + + + + Ambience/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{f756db9c-48e6-44ba-956d-613605c2276c}.xml b/game/FMOD Project/Metadata/Asset/{f756db9c-48e6-44ba-956d-613605c2276c}.xml new file mode 100644 index 0000000..04afb18 --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{f756db9c-48e6-44ba-956d-613605c2276c}.xml @@ -0,0 +1,11 @@ + + + + + Ambience/Birds/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Asset/{f8d2807a-28a9-426b-b9e5-cd73f6d6eab6}.xml b/game/FMOD Project/Metadata/Asset/{f8d2807a-28a9-426b-b9e5-cd73f6d6eab6}.xml new file mode 100644 index 0000000..b370d1a --- /dev/null +++ b/game/FMOD Project/Metadata/Asset/{f8d2807a-28a9-426b-b9e5-cd73f6d6eab6}.xml @@ -0,0 +1,11 @@ + + + + + Ambience/City/ + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{00f23ca7-103e-444c-924a-139cc3edf15f}.xml b/game/FMOD Project/Metadata/AudioFile/{00f23ca7-103e-444c-924a-139cc3edf15f}.xml new file mode 100644 index 0000000..75289c2 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{00f23ca7-103e-444c-924a-139cc3edf15f}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_orchestra_layer_01.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.8888888888889 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{054762ac-1677-4f3f-ba97-72ea701c4912}.xml b/game/FMOD Project/Metadata/AudioFile/{054762ac-1677-4f3f-ba97-72ea701c4912}.xml new file mode 100644 index 0000000..ae7d087 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{054762ac-1677-4f3f-ba97-72ea701c4912}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/City/ambience_city_traffic_pad.ogg + + + true + + + 48 + + + 2 + + + 62.5 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{0783756f-9d68-47cd-984c-b6e55e8bf6d8}.xml b/game/FMOD Project/Metadata/AudioFile/{0783756f-9d68-47cd-984c-b6e55e8bf6d8}.xml new file mode 100644 index 0000000..3ec23ec --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{0783756f-9d68-47cd-984c-b6e55e8bf6d8}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_4.ogg + + + 48 + + + 1 + + + 2.1797708333333334 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{08200423-a83d-43d7-8ca6-4e7bcf21464a}.xml b/game/FMOD Project/Metadata/AudioFile/{08200423-a83d-43d7-8ca6-4e7bcf21464a}.xml new file mode 100644 index 0000000..8dbad74 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{08200423-a83d-43d7-8ca6-4e7bcf21464a}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_06723.ogg + + + 48 + + + 1 + + + 0.51433300000000004 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{098ad948-0b1b-4602-9662-7c887441233f}.xml b/game/FMOD Project/Metadata/AudioFile/{098ad948-0b1b-4602-9662-7c887441233f}.xml new file mode 100644 index 0000000..429f5a4 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{098ad948-0b1b-4602-9662-7c887441233f}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Birds/amb_bird_call_01.ogg + + + 48 + + + 1 + + + 3 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{0b18b0c9-3c77-4063-b072-9d25963500c7}.xml b/game/FMOD Project/Metadata/AudioFile/{0b18b0c9-3c77-4063-b072-9d25963500c7}.xml new file mode 100644 index 0000000..9c49f75 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{0b18b0c9-3c77-4063-b072-9d25963500c7}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_03472.ogg + + + 48 + + + 1 + + + 1.05596 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{0c8d7083-5af3-421a-a806-7ec67e53cab6}.xml b/game/FMOD Project/Metadata/AudioFile/{0c8d7083-5af3-421a-a806-7ec67e53cab6}.xml new file mode 100644 index 0000000..9e94132 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{0c8d7083-5af3-421a-a806-7ec67e53cab6}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/M4/weapons_m4_tail_02.ogg + + + 48 + + + 1 + + + 0.30020799999999997 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{0ce2f99a-e7c1-45a8-9af6-524946c4af2a}.xml b/game/FMOD Project/Metadata/AudioFile/{0ce2f99a-e7c1-45a8-9af6-524946c4af2a}.xml new file mode 100644 index 0000000..3feb2bf --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{0ce2f99a-e7c1-45a8-9af6-524946c4af2a}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_16.ogg + + + 48 + + + 1 + + + 1.7124791666666668 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{0d1a2d03-68bb-4208-b28d-208303a0166e}.xml b/game/FMOD Project/Metadata/AudioFile/{0d1a2d03-68bb-4208-b28d-208303a0166e}.xml new file mode 100644 index 0000000..9ab1b43 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{0d1a2d03-68bb-4208-b28d-208303a0166e}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_grass_03.ogg + + + 48 + + + 1 + + + 0.50062499999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{0e612d6f-04e5-4ca9-be3f-d99e1a42e94f}.xml b/game/FMOD Project/Metadata/AudioFile/{0e612d6f-04e5-4ca9-be3f-d99e1a42e94f}.xml new file mode 100644 index 0000000..636d6b1 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{0e612d6f-04e5-4ca9-be3f-d99e1a42e94f}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_6.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{1108e948-0cf8-4a91-9a65-30e7b6a6b71f}.xml b/game/FMOD Project/Metadata/AudioFile/{1108e948-0cf8-4a91-9a65-30e7b6a6b71f}.xml new file mode 100644 index 0000000..64be800 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{1108e948-0cf8-4a91-9a65-30e7b6a6b71f}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_train_2.ogg + + + 48 + + + 1 + + + 9.5 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{1213e534-3cb4-4f98-9f92-9b7702d5ba09}.xml b/game/FMOD Project/Metadata/AudioFile/{1213e534-3cb4-4f98-9f92-9b7702d5ba09}.xml new file mode 100644 index 0000000..47f5a71 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{1213e534-3cb4-4f98-9f92-9b7702d5ba09}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_enemy_02.ogg + + + 48 + + + 1 + + + 0.14714583333333334 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{14378e12-c81b-4be1-a076-28089543a7d4}.xml b/game/FMOD Project/Metadata/AudioFile/{14378e12-c81b-4be1-a076-28089543a7d4}.xml new file mode 100644 index 0000000..a7f6398 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{14378e12-c81b-4be1-a076-28089543a7d4}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_carpet_02.ogg + + + 48 + + + 1 + + + 0.50131199999999998 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{155756cd-255d-469a-932b-2e2f489bad06}.xml b/game/FMOD Project/Metadata/AudioFile/{155756cd-255d-469a-932b-2e2f489bad06}.xml new file mode 100644 index 0000000..49dd218 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{155756cd-255d-469a-932b-2e2f489bad06}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_03_sting_high_02.ogg + + + 44.0999985 + + + 2 + + + 3.4286167800453513 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{1559c18e-61fd-406c-88c6-43a1c9d64784}.xml b/game/FMOD Project/Metadata/AudioFile/{1559c18e-61fd-406c-88c6-43a1c9d64784}.xml new file mode 100644 index 0000000..ebca224 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{1559c18e-61fd-406c-88c6-43a1c9d64784}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_01_bleep_c.ogg + + + 48 + + + 2 + + + 9.0565999999999995 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{174ac79a-ba45-4b2c-b177-899938586232}.xml b/game/FMOD Project/Metadata/AudioFile/{174ac79a-ba45-4b2c-b177-899938586232}.xml new file mode 100644 index 0000000..3bfe4cb --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{174ac79a-ba45-4b2c-b177-899938586232}.xml @@ -0,0 +1,20 @@ + + + + + Character/Hand Foley/Door/foley_door_open_01.ogg + + + 48 + + + 1 + + + 1.2746900000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{199bdd01-ff4e-4bbf-9160-2a3cfbbda734}.xml b/game/FMOD Project/Metadata/AudioFile/{199bdd01-ff4e-4bbf-9160-2a3cfbbda734}.xml new file mode 100644 index 0000000..f2edba6 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{199bdd01-ff4e-4bbf-9160-2a3cfbbda734}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_3.ogg + + + 48 + + + 1 + + + 1.3003125 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{1bfd3984-d98c-4d64-974b-96412cda7b78}.xml b/game/FMOD Project/Metadata/AudioFile/{1bfd3984-d98c-4d64-974b-96412cda7b78}.xml new file mode 100644 index 0000000..d2748b9 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{1bfd3984-d98c-4d64-974b-96412cda7b78}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/amb_evening_loop.ogg + + + true + + + 48 + + + 6 + + + 67.018562500000002 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{1e2a0507-d2c4-485f-8527-60381db4a812}.xml b/game/FMOD Project/Metadata/AudioFile/{1e2a0507-d2c4-485f-8527-60381db4a812}.xml new file mode 100644 index 0000000..3ebddf5 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{1e2a0507-d2c4-485f-8527-60381db4a812}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Bullet Casings/weapons_bullet_casing_04.ogg + + + 44.0999985 + + + 1 + + + 0.72428571428571431 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{1f47a277-6854-47dc-9072-9ca7e84a522a}.xml b/game/FMOD Project/Metadata/AudioFile/{1f47a277-6854-47dc-9072-9ca7e84a522a}.xml new file mode 100644 index 0000000..75dcd88 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{1f47a277-6854-47dc-9072-9ca7e84a522a}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_8.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{22b88e80-3684-43a2-87ab-35b42750d683}.xml b/game/FMOD Project/Metadata/AudioFile/{22b88e80-3684-43a2-87ab-35b42750d683}.xml new file mode 100644 index 0000000..a30d01e --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{22b88e80-3684-43a2-87ab-35b42750d683}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Basic Engine/veh_lawnmower_1604_on_exh.ogg + + + 48 + + + 1 + + + 1.4155599999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{2934eb11-26ef-4cd2-89d7-193ec90de972}.xml b/game/FMOD Project/Metadata/AudioFile/{2934eb11-26ef-4cd2-89d7-193ec90de972}.xml new file mode 100644 index 0000000..91c5da1 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{2934eb11-26ef-4cd2-89d7-193ec90de972}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_5.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{298eb873-1dfd-4722-8eb0-1b3a8abbe738}.xml b/game/FMOD Project/Metadata/AudioFile/{298eb873-1dfd-4722-8eb0-1b3a8abbe738}.xml new file mode 100644 index 0000000..84a654e --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{298eb873-1dfd-4722-8eb0-1b3a8abbe738}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_9.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{2b2caeb3-33cf-4497-af3a-85cf409f0c58}.xml b/game/FMOD Project/Metadata/AudioFile/{2b2caeb3-33cf-4497-af3a-85cf409f0c58}.xml new file mode 100644 index 0000000..c1fb240 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{2b2caeb3-33cf-4497-af3a-85cf409f0c58}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_8.ogg + + + 48 + + + 1 + + + 3.1091250000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{2d4e8ea1-1423-441a-92f4-2fa486e993db}.xml b/game/FMOD Project/Metadata/AudioFile/{2d4e8ea1-1423-441a-92f4-2fa486e993db}.xml new file mode 100644 index 0000000..1ce8016 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{2d4e8ea1-1423-441a-92f4-2fa486e993db}.xml @@ -0,0 +1,20 @@ + + + + + Character/Hand Foley/Door/foley_door_open_02.ogg + + + 48 + + + 1 + + + 0.77310400000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{2eca3cc5-75f9-4a18-a50d-4737a928eda1}.xml b/game/FMOD Project/Metadata/AudioFile/{2eca3cc5-75f9-4a18-a50d-4737a928eda1}.xml new file mode 100644 index 0000000..ae0f5d0 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{2eca3cc5-75f9-4a18-a50d-4737a928eda1}.xml @@ -0,0 +1,20 @@ + + + + + Character/Hand Foley/Door/foley_door_close_03.ogg + + + 48 + + + 1 + + + 0.65345799999999998 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{339915c8-2404-4404-b013-2480d786c2b5}.xml b/game/FMOD Project/Metadata/AudioFile/{339915c8-2404-4404-b013-2480d786c2b5}.xml new file mode 100644 index 0000000..662234a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{339915c8-2404-4404-b013-2480d786c2b5}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_4.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{339d1a83-2202-4a73-85ef-b987b61b496a}.xml b/game/FMOD Project/Metadata/AudioFile/{339d1a83-2202-4a73-85ef-b987b61b496a}.xml new file mode 100644 index 0000000..7097412 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{339d1a83-2202-4a73-85ef-b987b61b496a}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_03_east_low_mid_re.ogg + + + 44.0999985 + + + 2 + + + 3.4286394557823101 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{3681a54d-c7a2-4184-82a1-920e699082e9}.xml b/game/FMOD Project/Metadata/AudioFile/{3681a54d-c7a2-4184-82a1-920e699082e9}.xml new file mode 100644 index 0000000..657a1d5 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{3681a54d-c7a2-4184-82a1-920e699082e9}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_3.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{3788be09-5587-4e8e-bf3c-39db17025fa6}.xml b/game/FMOD Project/Metadata/AudioFile/{3788be09-5587-4e8e-bf3c-39db17025fa6}.xml new file mode 100644 index 0000000..5cfc86a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{3788be09-5587-4e8e-bf3c-39db17025fa6}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Basic Engine/veh_lawnmower_0945_off_exh.ogg + + + 48 + + + 1 + + + 1.1168499999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{399764f2-a39a-4c92-8849-ce934c0f6693}.xml b/game/FMOD Project/Metadata/AudioFile/{399764f2-a39a-4c92-8849-ce934c0f6693}.xml new file mode 100644 index 0000000..0c963c4 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{399764f2-a39a-4c92-8849-ce934c0f6693}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_03_east_high_pre_rest_re.ogg + + + 44.0999985 + + + 2 + + + 3.4286394557823101 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{3ab35a5b-de8a-4b98-a912-086bdae6c2de}.xml b/game/FMOD Project/Metadata/AudioFile/{3ab35a5b-de8a-4b98-a912-086bdae6c2de}.xml new file mode 100644 index 0000000..b36a1ef --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{3ab35a5b-de8a-4b98-a912-086bdae6c2de}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/Forest/amb_forest_rain_outside_medium.ogg + + + true + + + 48 + + + 2 + + + 37.5 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4347f7aa-87f5-4d92-8fd2-b5516b401a45}.xml b/game/FMOD Project/Metadata/AudioFile/{4347f7aa-87f5-4d92-8fd2-b5516b401a45}.xml new file mode 100644 index 0000000..54abdf0 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4347f7aa-87f5-4d92-8fd2-b5516b401a45}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Bullet Casings/weapons_bullet_casing_01.ogg + + + 44.0999985 + + + 1 + + + 1.1493877551020408 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{438c397a-d78f-4ed1-ad0f-d3d02b998861}.xml b/game/FMOD Project/Metadata/AudioFile/{438c397a-d78f-4ed1-ad0f-d3d02b998861}.xml new file mode 100644 index 0000000..5175dc2 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{438c397a-d78f-4ed1-ad0f-d3d02b998861}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_passing_4.ogg + + + 48 + + + 1 + + + 9.5 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{44b0667e-e115-4e5e-bff1-c92a2cd0276c}.xml b/game/FMOD Project/Metadata/AudioFile/{44b0667e-e115-4e5e-bff1-c92a2cd0276c}.xml new file mode 100644 index 0000000..482f116 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{44b0667e-e115-4e5e-bff1-c92a2cd0276c}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_passing_1.ogg + + + 48 + + + 1 + + + 6 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{44e584d1-9271-4504-b359-b34aaa1b8dca}.xml b/game/FMOD Project/Metadata/AudioFile/{44e584d1-9271-4504-b359-b34aaa1b8dca}.xml new file mode 100644 index 0000000..85c6f83 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{44e584d1-9271-4504-b359-b34aaa1b8dca}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Birds/amb_bird_call_02.ogg + + + 48 + + + 1 + + + 2.1578958333333333 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4516d375-e205-43b3-94bd-2a3ea63a5bb4}.xml b/game/FMOD Project/Metadata/AudioFile/{4516d375-e205-43b3-94bd-2a3ea63a5bb4}.xml new file mode 100644 index 0000000..e12d695 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4516d375-e205-43b3-94bd-2a3ea63a5bb4}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/M4/weapons_m4_auto_01.ogg + + + 48 + + + 1 + + + 0.084145800000000007 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{453a6dca-0051-4d34-98ea-212a00a8df52}.xml b/game/FMOD Project/Metadata/AudioFile/{453a6dca-0051-4d34-98ea-212a00a8df52}.xml new file mode 100644 index 0000000..275ea04 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{453a6dca-0051-4d34-98ea-212a00a8df52}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_04329.ogg + + + 48 + + + 1 + + + 1.09056 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{45b0d187-c6c7-4555-9a50-5c174b217d78}.xml b/game/FMOD Project/Metadata/AudioFile/{45b0d187-c6c7-4555-9a50-5c174b217d78}.xml new file mode 100644 index 0000000..fb0ac4e --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{45b0d187-c6c7-4555-9a50-5c174b217d78}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_01560.ogg + + + 48 + + + 1 + + + 1.0393699999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{45d8239f-3e43-410a-9fe9-ba2618b62dd7}.xml b/game/FMOD Project/Metadata/AudioFile/{45d8239f-3e43-410a-9fe9-ba2618b62dd7}.xml new file mode 100644 index 0000000..c3de239 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{45d8239f-3e43-410a-9fe9-ba2618b62dd7}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/Forest/amb_forest_wind.ogg + + + true + + + 48 + + + 2 + + + 12 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{46a096ae-9296-437e-86aa-47c6c5b17d03}.xml b/game/FMOD Project/Metadata/AudioFile/{46a096ae-9296-437e-86aa-47c6c5b17d03}.xml new file mode 100644 index 0000000..7b55f7d --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{46a096ae-9296-437e-86aa-47c6c5b17d03}.xml @@ -0,0 +1,20 @@ + + + + + Interactables/wooden_collision_small_dry_dull.ogg + + + 44.0999985 + + + 2 + + + 0.47664399092970522 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{47e0990e-33e8-49a9-ab47-a317cdb61c4e}.xml b/game/FMOD Project/Metadata/AudioFile/{47e0990e-33e8-49a9-ab47-a317cdb61c4e}.xml new file mode 100644 index 0000000..3f37789 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{47e0990e-33e8-49a9-ab47-a317cdb61c4e}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_wood_02.ogg + + + 48 + + + 1 + + + 0.499583 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{47fb8c28-3d1d-4c8e-9edd-8f12523ec8d8}.xml b/game/FMOD Project/Metadata/AudioFile/{47fb8c28-3d1d-4c8e-9edd-8f12523ec8d8}.xml new file mode 100644 index 0000000..e187a08 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{47fb8c28-3d1d-4c8e-9edd-8f12523ec8d8}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_passing_3.ogg + + + 48 + + + 1 + + + 10 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{486feac4-6764-49f7-bda0-fb2bf006dfd8}.xml b/game/FMOD Project/Metadata/AudioFile/{486feac4-6764-49f7-bda0-fb2bf006dfd8}.xml new file mode 100644 index 0000000..4b3fb0b --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{486feac4-6764-49f7-bda0-fb2bf006dfd8}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_02549.ogg + + + 48 + + + 1 + + + 1.0790200000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{492f9914-e7ca-402d-a1ec-f8714a4faa19}.xml b/game/FMOD Project/Metadata/AudioFile/{492f9914-e7ca-402d-a1ec-f8714a4faa19}.xml new file mode 100644 index 0000000..afa3c9b --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{492f9914-e7ca-402d-a1ec-f8714a4faa19}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_03_sting_high_01.ogg + + + 44.0999985 + + + 2 + + + 2.2114965986394557 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4abb9104-caee-4804-a54c-2bbcc5c65f30}.xml b/game/FMOD Project/Metadata/AudioFile/{4abb9104-caee-4804-a54c-2bbcc5c65f30}.xml new file mode 100644 index 0000000..e536802 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4abb9104-caee-4804-a54c-2bbcc5c65f30}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Explosion/weapons_explosion_debris_medium.ogg + + + 44.0999985 + + + 2 + + + 2.1092970521541949 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4b72fb96-7baf-45bd-9cfb-e35b3e7be84e}.xml b/game/FMOD Project/Metadata/AudioFile/{4b72fb96-7baf-45bd-9cfb-e35b3e7be84e}.xml new file mode 100644 index 0000000..d0eb0f3 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4b72fb96-7baf-45bd-9cfb-e35b3e7be84e}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_7.ogg + + + 48 + + + 1 + + + 0.87710416666666668 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4ca59036-2c6a-4f38-87d5-ae572b4db327}.xml b/game/FMOD Project/Metadata/AudioFile/{4ca59036-2c6a-4f38-87d5-ae572b4db327}.xml new file mode 100644 index 0000000..08dc6a6 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4ca59036-2c6a-4f38-87d5-ae572b4db327}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_03_east_pre_rest_re.ogg + + + 44.0999985 + + + 2 + + + 3.4286394557823101 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4d62d11f-d295-4367-8243-e48ff2051c15}.xml b/game/FMOD Project/Metadata/AudioFile/{4d62d11f-d295-4367-8243-e48ff2051c15}.xml new file mode 100644 index 0000000..ff88260 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4d62d11f-d295-4367-8243-e48ff2051c15}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_horn_1.ogg + + + 48 + + + 1 + + + 0.61441666666666672 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4d8a0d37-bf22-463e-96d7-f2f37a8f1489}.xml b/game/FMOD Project/Metadata/AudioFile/{4d8a0d37-bf22-463e-96d7-f2f37a8f1489}.xml new file mode 100644 index 0000000..c65b7e3 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4d8a0d37-bf22-463e-96d7-f2f37a8f1489}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_02900.ogg + + + 48 + + + 1 + + + 1.2114799999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{4eb68d39-b793-4777-8005-426d424c9562}.xml b/game/FMOD Project/Metadata/AudioFile/{4eb68d39-b793-4777-8005-426d424c9562}.xml new file mode 100644 index 0000000..0cc473b --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{4eb68d39-b793-4777-8005-426d424c9562}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_horn_5.ogg + + + 48 + + + 1 + + + 8.7083124999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{51d9ef16-1ecb-4a8d-b975-29afe0e53f5d}.xml b/game/FMOD Project/Metadata/AudioFile/{51d9ef16-1ecb-4a8d-b975-29afe0e53f5d}.xml new file mode 100644 index 0000000..8967f0e --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{51d9ef16-1ecb-4a8d-b975-29afe0e53f5d}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_03845.ogg + + + 48 + + + 1 + + + 1.07725 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{54ccd07f-e8dd-483a-bafc-d1773be934e2}.xml b/game/FMOD Project/Metadata/AudioFile/{54ccd07f-e8dd-483a-bafc-d1773be934e2}.xml new file mode 100644 index 0000000..1e6380f --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{54ccd07f-e8dd-483a-bafc-d1773be934e2}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_horn_2.ogg + + + 48 + + + 1 + + + 1 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{5617817b-fc07-4aee-9c56-3d6b04e9c776}.xml b/game/FMOD Project/Metadata/AudioFile/{5617817b-fc07-4aee-9c56-3d6b04e9c776}.xml new file mode 100644 index 0000000..1afd84f --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{5617817b-fc07-4aee-9c56-3d6b04e9c776}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Birds/amb_bird_call_05.ogg + + + 48 + + + 1 + + + 3.0806666666666667 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{59fd2c98-7484-4142-85e4-569f791ded73}.xml b/game/FMOD Project/Metadata/AudioFile/{59fd2c98-7484-4142-85e4-569f791ded73}.xml new file mode 100644 index 0000000..0914a98 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{59fd2c98-7484-4142-85e4-569f791ded73}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_orchestra_layer_02.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.8889115646259 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{5ae14b74-92e1-44f6-98f6-ec3733c7d99b}.xml b/game/FMOD Project/Metadata/AudioFile/{5ae14b74-92e1-44f6-98f6-ec3733c7d99b}.xml new file mode 100644 index 0000000..ab265c1 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{5ae14b74-92e1-44f6-98f6-ec3733c7d99b}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_6.ogg + + + 48 + + + 1 + + + 0.68110416666666662 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{5b0b1223-5dec-4608-a338-e875c6dac16a}.xml b/game/FMOD Project/Metadata/AudioFile/{5b0b1223-5dec-4608-a338-e875c6dac16a}.xml new file mode 100644 index 0000000..85c2226 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{5b0b1223-5dec-4608-a338-e875c6dac16a}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/Forest/amb_forest_rain_outside_small.ogg + + + true + + + 48 + + + 2 + + + 37.5 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{5c452e91-729a-4d56-aeef-9070612a12ae}.xml b/game/FMOD Project/Metadata/AudioFile/{5c452e91-729a-4d56-aeef-9070612a12ae}.xml new file mode 100644 index 0000000..16d7288 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{5c452e91-729a-4d56-aeef-9070612a12ae}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Explosion/weapons_explosion_medium.ogg + + + 44.0999985 + + + 2 + + + 1.3100000000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{5f328e09-2fa9-4419-a9f7-d05a01cc82c8}.xml b/game/FMOD Project/Metadata/AudioFile/{5f328e09-2fa9-4419-a9f7-d05a01cc82c8}.xml new file mode 100644 index 0000000..0a5b353 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{5f328e09-2fa9-4419-a9f7-d05a01cc82c8}.xml @@ -0,0 +1,20 @@ + + + + + Interactables/wooden_collision_2_dry_dull.ogg + + + 44.0999985 + + + 2 + + + 0.66358276643990932 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{606253a6-3a90-48bf-9f09-4a503cae568b}.xml b/game/FMOD Project/Metadata/AudioFile/{606253a6-3a90-48bf-9f09-4a503cae568b}.xml new file mode 100644 index 0000000..5e6fb02 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{606253a6-3a90-48bf-9f09-4a503cae568b}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/amb_noon_loop.ogg + + + true + + + 48 + + + 6 + + + 62.734375 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{608e6723-e496-41dd-af8e-53c6ffec238c}.xml b/game/FMOD Project/Metadata/AudioFile/{608e6723-e496-41dd-af8e-53c6ffec238c}.xml new file mode 100644 index 0000000..d12407e --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{608e6723-e496-41dd-af8e-53c6ffec238c}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_carpet_03.ogg + + + 48 + + + 1 + + + 0.49995800000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{60eb7ebd-aede-42be-ad30-1dd39f94a7ce}.xml b/game/FMOD Project/Metadata/AudioFile/{60eb7ebd-aede-42be-ad30-1dd39f94a7ce}.xml new file mode 100644 index 0000000..870ef73 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{60eb7ebd-aede-42be-ad30-1dd39f94a7ce}.xml @@ -0,0 +1,20 @@ + + + + + Character/Hand Foley/Door/foley_door_close_02.ogg + + + 48 + + + 1 + + + 0.57291700000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{615a0480-d320-429f-9459-f2a0223b0bd1}.xml b/game/FMOD Project/Metadata/AudioFile/{615a0480-d320-429f-9459-f2a0223b0bd1}.xml new file mode 100644 index 0000000..c6677d7 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{615a0480-d320-429f-9459-f2a0223b0bd1}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_9.ogg + + + 48 + + + 1 + + + 4.8164999999999996 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{61dcca4b-81f5-42fc-b902-ded5d1a5c34a}.xml b/game/FMOD Project/Metadata/AudioFile/{61dcca4b-81f5-42fc-b902-ded5d1a5c34a}.xml new file mode 100644 index 0000000..c43687d --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{61dcca4b-81f5-42fc-b902-ded5d1a5c34a}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_electronic_layer_01.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.888934240362801 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{626264b1-83ee-4dd5-a1ac-a989ded8ce0f}.xml b/game/FMOD Project/Metadata/AudioFile/{626264b1-83ee-4dd5-a1ac-a989ded8ce0f}.xml new file mode 100644 index 0000000..0354633 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{626264b1-83ee-4dd5-a1ac-a989ded8ce0f}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_01999.ogg + + + 48 + + + 1 + + + 1.02196 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{6b768c6e-b5c4-40e8-ba90-83000490dec4}.xml b/game/FMOD Project/Metadata/AudioFile/{6b768c6e-b5c4-40e8-ba90-83000490dec4}.xml new file mode 100644 index 0000000..fad3037 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{6b768c6e-b5c4-40e8-ba90-83000490dec4}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_03_east_mid_high_re.ogg + + + 44.0999985 + + + 2 + + + 3.4286621315192698 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{6bda59a1-d3c2-4179-8177-0d03e70bd9ed}.xml b/game/FMOD Project/Metadata/AudioFile/{6bda59a1-d3c2-4179-8177-0d03e70bd9ed}.xml new file mode 100644 index 0000000..6e34174 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{6bda59a1-d3c2-4179-8177-0d03e70bd9ed}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Birds/amb_bird_call_04.ogg + + + 48 + + + 1 + + + 2.6000000000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{6c57c270-56f9-4a8f-b829-94ad5c19e620}.xml b/game/FMOD Project/Metadata/AudioFile/{6c57c270-56f9-4a8f-b829-94ad5c19e620}.xml new file mode 100644 index 0000000..0e55eeb --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{6c57c270-56f9-4a8f-b829-94ad5c19e620}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/Forest/amb_forest_rain_outside_big.ogg + + + true + + + 48 + + + 2 + + + 37.5 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{6f1b5f4b-7591-4ec3-8056-5c8d6d43a344}.xml b/game/FMOD Project/Metadata/AudioFile/{6f1b5f4b-7591-4ec3-8056-5c8d6d43a344}.xml new file mode 100644 index 0000000..baa07c2 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{6f1b5f4b-7591-4ec3-8056-5c8d6d43a344}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_passing_2.ogg + + + 48 + + + 1 + + + 9 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{6f6f9109-31cb-4e95-9c99-c9e2a2e9de91}.xml b/game/FMOD Project/Metadata/AudioFile/{6f6f9109-31cb-4e95-9c99-c9e2a2e9de91}.xml new file mode 100644 index 0000000..0220dac --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{6f6f9109-31cb-4e95-9c99-c9e2a2e9de91}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_05845.ogg + + + 48 + + + 1 + + + 0.98472899999999997 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{70815f54-013c-44e7-a135-e5ede15097c2}.xml b/game/FMOD Project/Metadata/AudioFile/{70815f54-013c-44e7-a135-e5ede15097c2}.xml new file mode 100644 index 0000000..8eb5f8a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{70815f54-013c-44e7-a135-e5ede15097c2}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_06262.ogg + + + 48 + + + 1 + + + 1.0702499999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{72719323-515f-4907-b1cb-1ecaf003bb1b}.xml b/game/FMOD Project/Metadata/AudioFile/{72719323-515f-4907-b1cb-1ecaf003bb1b}.xml new file mode 100644 index 0000000..9ee2db6 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{72719323-515f-4907-b1cb-1ecaf003bb1b}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Explosion/weapons_explosion_large.ogg + + + 44.0999985 + + + 2 + + + 1.7233333333333334 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{777d44cf-7d87-461d-8c8b-c233f757cfdb}.xml b/game/FMOD Project/Metadata/AudioFile/{777d44cf-7d87-461d-8c8b-c233f757cfdb}.xml new file mode 100644 index 0000000..3765a4e --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{777d44cf-7d87-461d-8c8b-c233f757cfdb}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_5.ogg + + + 48 + + + 1 + + + 0.95679166666666671 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{79919899-b24c-4d40-86c6-1fb584a3e947}.xml b/game/FMOD Project/Metadata/AudioFile/{79919899-b24c-4d40-86c6-1fb584a3e947}.xml new file mode 100644 index 0000000..aac43cf --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{79919899-b24c-4d40-86c6-1fb584a3e947}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/M4/weapons_m4_head_01.ogg + + + 48 + + + 1 + + + 0.033937500000000002 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{7ade0af7-aec3-4cab-9a68-a69740878d96}.xml b/game/FMOD Project/Metadata/AudioFile/{7ade0af7-aec3-4cab-9a68-a69740878d96}.xml new file mode 100644 index 0000000..0af627f --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{7ade0af7-aec3-4cab-9a68-a69740878d96}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Explosion/weapons_explosion_small.ogg + + + 44.0999985 + + + 2 + + + 0.99160997732426304 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{7c12b411-6d4c-4ace-a525-ae147c49c1b1}.xml b/game/FMOD Project/Metadata/AudioFile/{7c12b411-6d4c-4ace-a525-ae147c49c1b1}.xml new file mode 100644 index 0000000..480e433 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{7c12b411-6d4c-4ace-a525-ae147c49c1b1}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Bullet Casings/weapons_bullet_casing_03.ogg + + + 44.0999985 + + + 1 + + + 0.82868480725623583 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{7f7944f3-bb00-4ecc-a5b4-8eae169cbe4d}.xml b/game/FMOD Project/Metadata/AudioFile/{7f7944f3-bb00-4ecc-a5b4-8eae169cbe4d}.xml new file mode 100644 index 0000000..088a66a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{7f7944f3-bb00-4ecc-a5b4-8eae169cbe4d}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_10.ogg + + + 48 + + + 1 + + + 3.9061249999999998 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{801e8274-ecbb-489f-8ca2-b31b9f2c27ff}.xml b/game/FMOD Project/Metadata/AudioFile/{801e8274-ecbb-489f-8ca2-b31b9f2c27ff}.xml new file mode 100644 index 0000000..2056c47 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{801e8274-ecbb-489f-8ca2-b31b9f2c27ff}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/M4/weapons_m4_auto_03.ogg + + + 48 + + + 1 + + + 0.081583299999999997 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{802a3b25-4ff5-4e45-ae80-42b1130bba91}.xml b/game/FMOD Project/Metadata/AudioFile/{802a3b25-4ff5-4e45-ae80-42b1130bba91}.xml new file mode 100644 index 0000000..24097fe --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{802a3b25-4ff5-4e45-ae80-42b1130bba91}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Explosion/weapons_explosion_distant.ogg + + + 44.0999985 + + + 2 + + + 1.1699999999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{80c3e75e-2678-4c9c-8cad-055cd658be66}.xml b/game/FMOD Project/Metadata/AudioFile/{80c3e75e-2678-4c9c-8cad-055cd658be66}.xml new file mode 100644 index 0000000..893d011 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{80c3e75e-2678-4c9c-8cad-055cd658be66}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_radio_station_lofi_loop.ogg + + + true + + + 44.0999985 + + + 2 + + + 21.573038548752834 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{835e0b94-6af4-471d-ac7f-56a72fc8035e}.xml b/game/FMOD Project/Metadata/AudioFile/{835e0b94-6af4-471d-ac7f-56a72fc8035e}.xml new file mode 100644 index 0000000..1df2de5 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{835e0b94-6af4-471d-ac7f-56a72fc8035e}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_orchestra_layer_03.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.8889115646259 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{84fa1aa7-e469-46f4-aeb5-b5343bf91c23}.xml b/game/FMOD Project/Metadata/AudioFile/{84fa1aa7-e469-46f4-aeb5-b5343bf91c23}.xml new file mode 100644 index 0000000..21fc916 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{84fa1aa7-e469-46f4-aeb5-b5343bf91c23}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/Forest/amb_forest_thunderstorm_01.ogg + + + true + + + 48 + + + 2 + + + 10.853520833333333 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{87b6ef88-09ae-49c5-af4c-ef96edc4d67c}.xml b/game/FMOD Project/Metadata/AudioFile/{87b6ef88-09ae-49c5-af4c-ef96edc4d67c}.xml new file mode 100644 index 0000000..edf2715 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{87b6ef88-09ae-49c5-af4c-ef96edc4d67c}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_wood_03.ogg + + + 48 + + + 1 + + + 0.49995800000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{880bde4b-f203-44a8-9a42-b1a97ddb2670}.xml b/game/FMOD Project/Metadata/AudioFile/{880bde4b-f203-44a8-9a42-b1a97ddb2670}.xml new file mode 100644 index 0000000..02cb095 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{880bde4b-f203-44a8-9a42-b1a97ddb2670}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Basic Engine/veh_lawnmower_idle_exh.ogg + + + 48 + + + 1 + + + 2.8361200000000002 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{8a80d319-7cc7-4d9f-ada0-d715e38def57}.xml b/game/FMOD Project/Metadata/AudioFile/{8a80d319-7cc7-4d9f-ada0-d715e38def57}.xml new file mode 100644 index 0000000..76f736d --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{8a80d319-7cc7-4d9f-ada0-d715e38def57}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_01_drone_loop.ogg + + + 48 + + + 2 + + + 9.0565999999999995 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{8b796aa0-a071-448f-9aae-00a19369d15d}.xml b/game/FMOD Project/Metadata/AudioFile/{8b796aa0-a071-448f-9aae-00a19369d15d}.xml new file mode 100644 index 0000000..28a90f5 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{8b796aa0-a071-448f-9aae-00a19369d15d}.xml @@ -0,0 +1,20 @@ + + + + + Interactables/wooden_collision_3_dry_dull.ogg + + + 44.0999985 + + + 2 + + + 0.46954648526077097 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{8c036229-6316-44e5-930d-dbe9448cc1d4}.xml b/game/FMOD Project/Metadata/AudioFile/{8c036229-6316-44e5-930d-dbe9448cc1d4}.xml new file mode 100644 index 0000000..fbe70de --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{8c036229-6316-44e5-930d-dbe9448cc1d4}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_grass_02.ogg + + + 48 + + + 1 + + + 0.49964599999999998 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{8c5a1855-2158-405d-8ae8-1514a5c73b68}.xml b/game/FMOD Project/Metadata/AudioFile/{8c5a1855-2158-405d-8ae8-1514a5c73b68}.xml new file mode 100644 index 0000000..5798ea1 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{8c5a1855-2158-405d-8ae8-1514a5c73b68}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_enemy_01.ogg + + + 48 + + + 1 + + + 0.14714583333333334 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{8c668482-c4e4-4abc-967b-4ee5bd208a2a}.xml b/game/FMOD Project/Metadata/AudioFile/{8c668482-c4e4-4abc-967b-4ee5bd208a2a}.xml new file mode 100644 index 0000000..d3d065a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{8c668482-c4e4-4abc-967b-4ee5bd208a2a}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Basic Engine/veh_lawnmower_1648_off_exh.ogg + + + 48 + + + 1 + + + 0.90974999999999995 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{917b5215-65d9-4942-92eb-69ed62676c32}.xml b/game/FMOD Project/Metadata/AudioFile/{917b5215-65d9-4942-92eb-69ed62676c32}.xml new file mode 100644 index 0000000..e496855 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{917b5215-65d9-4942-92eb-69ed62676c32}.xml @@ -0,0 +1,20 @@ + + + + + Character/Hand Foley/Door/foley_door_open_04.ogg + + + 48 + + + 1 + + + 0.72247899999999998 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{9181d009-e0c6-4195-bda2-6f0c48cd7d6c}.xml b/game/FMOD Project/Metadata/AudioFile/{9181d009-e0c6-4195-bda2-6f0c48cd7d6c}.xml new file mode 100644 index 0000000..a842a7d --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{9181d009-e0c6-4195-bda2-6f0c48cd7d6c}.xml @@ -0,0 +1,20 @@ + + + + + Character/Hand Foley/Door/foley_door_open_03.ogg + + + 48 + + + 1 + + + 1.0330999999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{94106a5a-92de-4da5-9542-368afa003311}.xml b/game/FMOD Project/Metadata/AudioFile/{94106a5a-92de-4da5-9542-368afa003311}.xml new file mode 100644 index 0000000..0eb1bcc --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{94106a5a-92de-4da5-9542-368afa003311}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Basic Engine/veh_lawnmower_1121_on_exh.ogg + + + 48 + + + 1 + + + 0.90245799999999998 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{96939ebf-e14f-467e-ad65-1e1c3ffa06c2}.xml b/game/FMOD Project/Metadata/AudioFile/{96939ebf-e14f-467e-ad65-1e1c3ffa06c2}.xml new file mode 100644 index 0000000..cd0e628 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{96939ebf-e14f-467e-ad65-1e1c3ffa06c2}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_passing_6.ogg + + + 48 + + + 1 + + + 7.7106041666666663 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{97098011-1a51-409c-b577-ec6c776b6d37}.xml b/game/FMOD Project/Metadata/AudioFile/{97098011-1a51-409c-b577-ec6c776b6d37}.xml new file mode 100644 index 0000000..58c0aea --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{97098011-1a51-409c-b577-ec6c776b6d37}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/Forest/amb_forest_thunderstorm_02.ogg + + + true + + + 48 + + + 2 + + + 15.391999999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{a069e4b4-8f78-410d-88e9-5f1a8b586733}.xml b/game/FMOD Project/Metadata/AudioFile/{a069e4b4-8f78-410d-88e9-5f1a8b586733}.xml new file mode 100644 index 0000000..7c17e21 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{a069e4b4-8f78-410d-88e9-5f1a8b586733}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_12.ogg + + + 48 + + + 1 + + + 5.2033333333333331 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{a13f6c8d-4928-42a2-80ec-131362bfac6d}.xml b/game/FMOD Project/Metadata/AudioFile/{a13f6c8d-4928-42a2-80ec-131362bfac6d}.xml new file mode 100644 index 0000000..1713dd7 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{a13f6c8d-4928-42a2-80ec-131362bfac6d}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_thunderstorm_03.ogg + + + 48 + + + 2 + + + 8.1959166666666672 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{a5a5d9ab-79f7-4e1e-a8da-52f7dc79e5e5}.xml b/game/FMOD Project/Metadata/AudioFile/{a5a5d9ab-79f7-4e1e-a8da-52f7dc79e5e5}.xml new file mode 100644 index 0000000..224ace0 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{a5a5d9ab-79f7-4e1e-a8da-52f7dc79e5e5}.xml @@ -0,0 +1,20 @@ + + + + + VO/English/vo_en_main_menu.ogg + + + 48 + + + 1 + + + 1.85917 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{a65f3df1-b332-4f0a-9a82-67fe78be7b76}.xml b/game/FMOD Project/Metadata/AudioFile/{a65f3df1-b332-4f0a-9a82-67fe78be7b76}.xml new file mode 100644 index 0000000..a55ed5b --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{a65f3df1-b332-4f0a-9a82-67fe78be7b76}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_electronic_layer_03.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.888934240362801 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{a6925868-56b6-4fa3-b118-5cefa17cff42}.xml b/game/FMOD Project/Metadata/AudioFile/{a6925868-56b6-4fa3-b118-5cefa17cff42}.xml new file mode 100644 index 0000000..51a0f30 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{a6925868-56b6-4fa3-b118-5cefa17cff42}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Basic Engine/veh_lawnmower_1406_off_exh.ogg + + + 48 + + + 1 + + + 1.2130799999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{a75f5f38-02e7-4a07-906a-01c8590a2aec}.xml b/game/FMOD Project/Metadata/AudioFile/{a75f5f38-02e7-4a07-906a-01c8590a2aec}.xml new file mode 100644 index 0000000..db99703 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{a75f5f38-02e7-4a07-906a-01c8590a2aec}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_2.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{aa01ab40-d8f4-4939-b178-d910e349396f}.xml b/game/FMOD Project/Metadata/AudioFile/{aa01ab40-d8f4-4939-b178-d910e349396f}.xml new file mode 100644 index 0000000..bcb981b --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{aa01ab40-d8f4-4939-b178-d910e349396f}.xml @@ -0,0 +1,20 @@ + + + + + Interactables/barrel_rolling_loop.ogg + + + 44.0999985 + + + 1 + + + 6.4164625850340133 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{aae18b55-2024-4e67-a552-98e6fb37f0c6}.xml b/game/FMOD Project/Metadata/AudioFile/{aae18b55-2024-4e67-a552-98e6fb37f0c6}.xml new file mode 100644 index 0000000..097ce12 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{aae18b55-2024-4e67-a552-98e6fb37f0c6}.xml @@ -0,0 +1,20 @@ + + + + + Character/noise_short.ogg + + + 48 + + + 1 + + + 3 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{add6bc41-6e0f-4fb6-8f01-6749a1436daa}.xml b/game/FMOD Project/Metadata/AudioFile/{add6bc41-6e0f-4fb6-8f01-6749a1436daa}.xml new file mode 100644 index 0000000..970a0c2 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{add6bc41-6e0f-4fb6-8f01-6749a1436daa}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Explosion/weapons_explosion_debris_large.ogg + + + 44.0999985 + + + 2 + + + 3.0098639455782314 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ae94dd74-b10a-4d96-b161-b0836620af9e}.xml b/game/FMOD Project/Metadata/AudioFile/{ae94dd74-b10a-4d96-b161-b0836620af9e}.xml new file mode 100644 index 0000000..15f21b7 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ae94dd74-b10a-4d96-b161-b0836620af9e}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_11.ogg + + + 48 + + + 1 + + + 2.2542083333333331 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{af7cac4a-1638-4b6d-8e75-2a29354fffaa}.xml b/game/FMOD Project/Metadata/AudioFile/{af7cac4a-1638-4b6d-8e75-2a29354fffaa}.xml new file mode 100644 index 0000000..240bcbd --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{af7cac4a-1638-4b6d-8e75-2a29354fffaa}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_electronic_layer_04.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.888934240362801 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{aff00be0-9f27-4540-909e-13818cb88c04}.xml b/game/FMOD Project/Metadata/AudioFile/{aff00be0-9f27-4540-909e-13818cb88c04}.xml new file mode 100644 index 0000000..54e2a18 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{aff00be0-9f27-4540-909e-13818cb88c04}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/City/ambience_city_walla_pad.ogg + + + true + + + 48 + + + 2 + + + 50 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{b1235fda-48b6-45f8-bad3-263aa4591114}.xml b/game/FMOD Project/Metadata/AudioFile/{b1235fda-48b6-45f8-bad3-263aa4591114}.xml new file mode 100644 index 0000000..f5e6f16 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{b1235fda-48b6-45f8-bad3-263aa4591114}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_horn_4.ogg + + + 48 + + + 1 + + + 1.4955208333333334 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{b3423add-7502-4a49-a52f-a82d76ed4fd8}.xml b/game/FMOD Project/Metadata/AudioFile/{b3423add-7502-4a49-a52f-a82d76ed4fd8}.xml new file mode 100644 index 0000000..5fc7373 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{b3423add-7502-4a49-a52f-a82d76ed4fd8}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_electronic_layer_02.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.888934240362801 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{b4dcd0d4-9d84-433b-abf4-77a4ce7e0071}.xml b/game/FMOD Project/Metadata/AudioFile/{b4dcd0d4-9d84-433b-abf4-77a4ce7e0071}.xml new file mode 100644 index 0000000..bc5b2c2 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{b4dcd0d4-9d84-433b-abf4-77a4ce7e0071}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Basic Engine/veh_lawnmower_0879_on_exh.ogg + + + 48 + + + 1 + + + 0.917292 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{b7953129-1502-42b5-ad98-5864ef420bd2}.xml b/game/FMOD Project/Metadata/AudioFile/{b7953129-1502-42b5-ad98-5864ef420bd2}.xml new file mode 100644 index 0000000..90676e3 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{b7953129-1502-42b5-ad98-5864ef420bd2}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_13.ogg + + + 48 + + + 1 + + + 1.4228541666666668 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{b7d461a4-4af4-45cb-970a-edbaf98e4bed}.xml b/game/FMOD Project/Metadata/AudioFile/{b7d461a4-4af4-45cb-970a-edbaf98e4bed}.xml new file mode 100644 index 0000000..6657ea0 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{b7d461a4-4af4-45cb-970a-edbaf98e4bed}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_02_orchestra_layer_04.ogg + + + true + + + 44.0999985 + + + 2 + + + 56.8888888888889 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{b8e5f4a0-30c2-46fe-ba97-a94a8ff5df41}.xml b/game/FMOD Project/Metadata/AudioFile/{b8e5f4a0-30c2-46fe-ba97-a94a8ff5df41}.xml new file mode 100644 index 0000000..92582aa --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{b8e5f4a0-30c2-46fe-ba97-a94a8ff5df41}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_passing_5.ogg + + + 48 + + + 1 + + + 8.3375208333333326 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ba5858ca-421c-4ca0-a006-d05536a11587}.xml b/game/FMOD Project/Metadata/AudioFile/{ba5858ca-421c-4ca0-a006-d05536a11587}.xml new file mode 100644 index 0000000..e3fcc83 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ba5858ca-421c-4ca0-a006-d05536a11587}.xml @@ -0,0 +1,20 @@ + + + + + UI/ui_cancel.ogg + + + 48 + + + 2 + + + 1.02623 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{bed6ead0-dc7e-4700-80d3-6ffa01173ed0}.xml b/game/FMOD Project/Metadata/AudioFile/{bed6ead0-dc7e-4700-80d3-6ffa01173ed0}.xml new file mode 100644 index 0000000..3905a6a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{bed6ead0-dc7e-4700-80d3-6ffa01173ed0}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_01_pad_chords.ogg + + + 48 + + + 2 + + + 36.226416666666665 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{c0af1436-9a98-44af-9e91-c2de750c2235}.xml b/game/FMOD Project/Metadata/AudioFile/{c0af1436-9a98-44af-9e91-c2de750c2235}.xml new file mode 100644 index 0000000..6dd1350 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{c0af1436-9a98-44af-9e91-c2de750c2235}.xml @@ -0,0 +1,20 @@ + + + + + VO/English/vo_en_welcome.ogg + + + 48 + + + 1 + + + 2.1829200000000002 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{c578feac-e90f-4dab-acd4-0730ff1efa4c}.xml b/game/FMOD Project/Metadata/AudioFile/{c578feac-e90f-4dab-acd4-0730ff1efa4c}.xml new file mode 100644 index 0000000..bc99070 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{c578feac-e90f-4dab-acd4-0730ff1efa4c}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_grass_01.ogg + + + 48 + + + 1 + + + 0.50049999999999994 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{c5a0e6df-f999-413e-a0c0-3e6352c80c68}.xml b/game/FMOD Project/Metadata/AudioFile/{c5a0e6df-f999-413e-a0c0-3e6352c80c68}.xml new file mode 100644 index 0000000..e350ca2 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{c5a0e6df-f999-413e-a0c0-3e6352c80c68}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_17.ogg + + + 48 + + + 1 + + + 2.4506041666666665 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{c853f504-2bc6-4d07-8030-e173a9b00c84}.xml b/game/FMOD Project/Metadata/AudioFile/{c853f504-2bc6-4d07-8030-e173a9b00c84}.xml new file mode 100644 index 0000000..e58eb76 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{c853f504-2bc6-4d07-8030-e173a9b00c84}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Explosion/weapons_explosion_debris_small.ogg + + + 44.0999985 + + + 2 + + + 1.7745124716553289 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{c8c93b0f-5548-47db-8e38-0b46a644024e}.xml b/game/FMOD Project/Metadata/AudioFile/{c8c93b0f-5548-47db-8e38-0b46a644024e}.xml new file mode 100644 index 0000000..3aa381d --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{c8c93b0f-5548-47db-8e38-0b46a644024e}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/Bullet Casings/weapons_bullet_casing_02.ogg + + + 44.0999985 + + + 1 + + + 0.83952380952380956 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ca2c223b-7eb7-4f09-abd0-e38b57ba6c09}.xml b/game/FMOD Project/Metadata/AudioFile/{ca2c223b-7eb7-4f09-abd0-e38b57ba6c09}.xml new file mode 100644 index 0000000..a09288b --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ca2c223b-7eb7-4f09-abd0-e38b57ba6c09}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_01104.ogg + + + 48 + + + 1 + + + 2.98062 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{cca9bd5a-6d12-4f84-a1eb-307dc2188fcd}.xml b/game/FMOD Project/Metadata/AudioFile/{cca9bd5a-6d12-4f84-a1eb-307dc2188fcd}.xml new file mode 100644 index 0000000..b7cb530 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{cca9bd5a-6d12-4f84-a1eb-307dc2188fcd}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_01_bleep_a.ogg + + + 48 + + + 2 + + + 9.0565999999999995 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{cf0f54ab-0031-4b2c-8064-2c368fe68a3f}.xml b/game/FMOD Project/Metadata/AudioFile/{cf0f54ab-0031-4b2c-8064-2c368fe68a3f}.xml new file mode 100644 index 0000000..8be27b5 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{cf0f54ab-0031-4b2c-8064-2c368fe68a3f}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_7.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{d0d0b206-f273-426a-9d88-6c753f62e47d}.xml b/game/FMOD Project/Metadata/AudioFile/{d0d0b206-f273-426a-9d88-6c753f62e47d}.xml new file mode 100644 index 0000000..41ae973 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{d0d0b206-f273-426a-9d88-6c753f62e47d}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_passing_7.ogg + + + 48 + + + 1 + + + 7 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{d190c941-7722-49de-a3d2-4eaf87525eeb}.xml b/game/FMOD Project/Metadata/AudioFile/{d190c941-7722-49de-a3d2-4eaf87525eeb}.xml new file mode 100644 index 0000000..94d123a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{d190c941-7722-49de-a3d2-4eaf87525eeb}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Birds/amb_bird_call_03.ogg + + + 48 + + + 1 + + + 2.6268750000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{d195eb01-f684-429b-a4ec-c58d7901d376}.xml b/game/FMOD Project/Metadata/AudioFile/{d195eb01-f684-429b-a4ec-c58d7901d376}.xml new file mode 100644 index 0000000..6f4b328 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{d195eb01-f684-429b-a4ec-c58d7901d376}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_train_1.ogg + + + 48 + + + 1 + + + 9.5 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{d25c747e-3581-4c2e-901c-286b39e96696}.xml b/game/FMOD Project/Metadata/AudioFile/{d25c747e-3581-4c2e-901c-286b39e96696}.xml new file mode 100644 index 0000000..dc1aaeb --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{d25c747e-3581-4c2e-901c-286b39e96696}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_14.ogg + + + 48 + + + 1 + + + 1.3003125 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{d7a083d4-a113-4291-8655-263448f4434a}.xml b/game/FMOD Project/Metadata/AudioFile/{d7a083d4-a113-4291-8655-263448f4434a}.xml new file mode 100644 index 0000000..ae193a4 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{d7a083d4-a113-4291-8655-263448f4434a}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_radio_station_rock_loop.ogg + + + true + + + 44.0999985 + + + 2 + + + 32 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{da18f860-f84e-4a59-83d8-38b576a4addc}.xml b/game/FMOD Project/Metadata/AudioFile/{da18f860-f84e-4a59-83d8-38b576a4addc}.xml new file mode 100644 index 0000000..1622dd8 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{da18f860-f84e-4a59-83d8-38b576a4addc}.xml @@ -0,0 +1,20 @@ + + + + + Interactables/wooden_collision_1_dry_dull.ogg + + + 44.0999985 + + + 2 + + + 0.66358276643990932 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{e07d32c9-4eb2-4111-82fd-e5a007fc7f51}.xml b/game/FMOD Project/Metadata/AudioFile/{e07d32c9-4eb2-4111-82fd-e5a007fc7f51}.xml new file mode 100644 index 0000000..c43b806 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{e07d32c9-4eb2-4111-82fd-e5a007fc7f51}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_enemy_03.ogg + + + 48 + + + 1 + + + 0.14714583333333334 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{e7569c8f-0dec-41e1-a1d2-7a1eaf173a95}.xml b/game/FMOD Project/Metadata/AudioFile/{e7569c8f-0dec-41e1-a1d2-7a1eaf173a95}.xml new file mode 100644 index 0000000..3333d75 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{e7569c8f-0dec-41e1-a1d2-7a1eaf173a95}.xml @@ -0,0 +1,20 @@ + + + + + Character/Hand Foley/Door/foley_door_close_01.ogg + + + 48 + + + 1 + + + 0.635042 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{e968a16c-0dda-4fb1-bec4-9e6653cb0c69}.xml b/game/FMOD Project/Metadata/AudioFile/{e968a16c-0dda-4fb1-bec4-9e6653cb0c69}.xml new file mode 100644 index 0000000..b04f7e6 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{e968a16c-0dda-4fb1-bec4-9e6653cb0c69}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_siren.ogg + + + 48 + + + 1 + + + 8 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ea1034e0-b73f-4b13-87e6-4bbf335a201f}.xml b/game/FMOD Project/Metadata/AudioFile/{ea1034e0-b73f-4b13-87e6-4bbf335a201f}.xml new file mode 100644 index 0000000..c3950ed --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ea1034e0-b73f-4b13-87e6-4bbf335a201f}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/M4/weapons_m4_tail_01.ogg + + + 48 + + + 1 + + + 0.30012499999999998 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{eaf9335d-bf65-45e4-9bf1-8da6faad8be2}.xml b/game/FMOD Project/Metadata/AudioFile/{eaf9335d-bf65-45e4-9bf1-8da6faad8be2}.xml new file mode 100644 index 0000000..312726e --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{eaf9335d-bf65-45e4-9bf1-8da6faad8be2}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/Forest/amb_forest_wind_strong.ogg + + + true + + + 48 + + + 2 + + + 12 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{eb9a6ecf-85d8-431c-8c07-fcc337bfdc66}.xml b/game/FMOD Project/Metadata/AudioFile/{eb9a6ecf-85d8-431c-8c07-fcc337bfdc66}.xml new file mode 100644 index 0000000..726113f --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{eb9a6ecf-85d8-431c-8c07-fcc337bfdc66}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/M4/weapons_m4_auto_02.ogg + + + 48 + + + 1 + + + 0.083208299999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ebd26610-c9bf-4a6b-9bff-328512f54359}.xml b/game/FMOD Project/Metadata/AudioFile/{ebd26610-c9bf-4a6b-9bff-328512f54359}.xml new file mode 100644 index 0000000..deb5236 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ebd26610-c9bf-4a6b-9bff-328512f54359}.xml @@ -0,0 +1,20 @@ + + + + + UI/ui_okay.ogg + + + 48 + + + 2 + + + 0.91754199999999997 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ec134d20-6674-411d-9de2-e17171a1c8b6}.xml b/game/FMOD Project/Metadata/AudioFile/{ec134d20-6674-411d-9de2-e17171a1c8b6}.xml new file mode 100644 index 0000000..df5821a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ec134d20-6674-411d-9de2-e17171a1c8b6}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/Forest/amb_forest_rain_drop_1.ogg + + + 44.0999985 + + + 2 + + + 0.16 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ed8e59a3-a77d-49be-90cb-016928a71e33}.xml b/game/FMOD Project/Metadata/AudioFile/{ed8e59a3-a77d-49be-90cb-016928a71e33}.xml new file mode 100644 index 0000000..7280820 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ed8e59a3-a77d-49be-90cb-016928a71e33}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_radio_station_hiphop_loop.ogg + + + true + + + 44.0999985 + + + 2 + + + 41.958049886621318 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{edc2b884-0605-41d1-b191-b5c703689865}.xml b/game/FMOD Project/Metadata/AudioFile/{edc2b884-0605-41d1-b191-b5c703689865}.xml new file mode 100644 index 0000000..613d477 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{edc2b884-0605-41d1-b191-b5c703689865}.xml @@ -0,0 +1,20 @@ + + + + + Weapons/M4/weapons_m4_head_02.ogg + + + 48 + + + 1 + + + 0.034041700000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{ee1a38af-7215-4e29-9e83-3be5fbc30239}.xml b/game/FMOD Project/Metadata/AudioFile/{ee1a38af-7215-4e29-9e83-3be5fbc30239}.xml new file mode 100644 index 0000000..8703299 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{ee1a38af-7215-4e29-9e83-3be5fbc30239}.xml @@ -0,0 +1,20 @@ + + + + + Character/heartbeat.ogg + + + 44.0999985 + + + 2 + + + 7.9921541950113379 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{f13d856d-91a9-4a5b-b645-f508432acb63}.xml b/game/FMOD Project/Metadata/AudioFile/{f13d856d-91a9-4a5b-b645-f508432acb63}.xml new file mode 100644 index 0000000..b136460 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{f13d856d-91a9-4a5b-b645-f508432acb63}.xml @@ -0,0 +1,20 @@ + + + + + Character/Radio/placeholder_640166_main_meco.ogg + + + 44.0999985 + + + 2 + + + 3.1608163265306124 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{f26961c9-b96c-4118-a178-4f59054cb945}.xml b/game/FMOD Project/Metadata/AudioFile/{f26961c9-b96c-4118-a178-4f59054cb945}.xml new file mode 100644 index 0000000..1d28cd1 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{f26961c9-b96c-4118-a178-4f59054cb945}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_wood_01.ogg + + + 48 + + + 1 + + + 0.50133300000000003 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{f4b72a37-fd88-43db-8129-25e969e0bc32}.xml b/game/FMOD Project/Metadata/AudioFile/{f4b72a37-fd88-43db-8129-25e969e0bc32}.xml new file mode 100644 index 0000000..4c6c25d --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{f4b72a37-fd88-43db-8129-25e969e0bc32}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_1.ogg + + + 48 + + + 1 + + + 1.0274791666666667 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{f63a80d4-0de0-484d-a924-359754d6a291}.xml b/game/FMOD Project/Metadata/AudioFile/{f63a80d4-0de0-484d-a924-359754d6a291}.xml new file mode 100644 index 0000000..4a3253a --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{f63a80d4-0de0-484d-a924-359754d6a291}.xml @@ -0,0 +1,23 @@ + + + + + Music/music_lvl_03_doma_east_theme_bpm_140.ogg + + + true + + + 44.0999985 + + + 2 + + + 150.85732426303855 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{f769328f-32d7-4c84-9315-e254bc6ecab1}.xml b/game/FMOD Project/Metadata/AudioFile/{f769328f-32d7-4c84-9315-e254bc6ecab1}.xml new file mode 100644 index 0000000..7336ee5 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{f769328f-32d7-4c84-9315-e254bc6ecab1}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_15.ogg + + + 48 + + + 1 + + + 1.5151041666666667 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{f8fe8df2-84c7-466b-87d3-fffe671bbe34}.xml b/game/FMOD Project/Metadata/AudioFile/{f8fe8df2-84c7-466b-87d3-fffe671bbe34}.xml new file mode 100644 index 0000000..2bce797 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{f8fe8df2-84c7-466b-87d3-fffe671bbe34}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_carpet_01.ogg + + + 48 + + + 1 + + + 0.49987500000000001 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{f976574f-4a3f-4226-ba7e-65548c337279}.xml b/game/FMOD Project/Metadata/AudioFile/{f976574f-4a3f-4226-ba7e-65548c337279}.xml new file mode 100644 index 0000000..a6995e4 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{f976574f-4a3f-4226-ba7e-65548c337279}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/amb_morning_loop.ogg + + + true + + + 48 + + + 6 + + + 97.77491666666667 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{fa1c37af-46d6-4d39-a096-4a36dba26ecd}.xml b/game/FMOD Project/Metadata/AudioFile/{fa1c37af-46d6-4d39-a096-4a36dba26ecd}.xml new file mode 100644 index 0000000..7689e69 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{fa1c37af-46d6-4d39-a096-4a36dba26ecd}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_traffic_horn_3.ogg + + + 48 + + + 1 + + + 2.1810416666666668 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{fa7e774a-b461-4367-bee7-f9f1cb94828a}.xml b/game/FMOD Project/Metadata/AudioFile/{fa7e774a-b461-4367-bee7-f9f1cb94828a}.xml new file mode 100644 index 0000000..5cff43d --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{fa7e774a-b461-4367-bee7-f9f1cb94828a}.xml @@ -0,0 +1,23 @@ + + + + + Ambience/amb_night_loop.ogg + + + true + + + 48 + + + 6 + + + 99.92720833333334 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{fcd9921a-2274-48ad-b734-dc3b15606131}.xml b/game/FMOD Project/Metadata/AudioFile/{fcd9921a-2274-48ad-b734-dc3b15606131}.xml new file mode 100644 index 0000000..7d905c8 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{fcd9921a-2274-48ad-b734-dc3b15606131}.xml @@ -0,0 +1,20 @@ + + + + + Character/Footsteps/footsteps_player_wood_04.ogg + + + 48 + + + 1 + + + 0.49181200000000003 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{fda6a917-19df-4aeb-9ac1-a053fe3c57d3}.xml b/game/FMOD Project/Metadata/AudioFile/{fda6a917-19df-4aeb-9ac1-a053fe3c57d3}.xml new file mode 100644 index 0000000..5ca79ac --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{fda6a917-19df-4aeb-9ac1-a053fe3c57d3}.xml @@ -0,0 +1,20 @@ + + + + + Music/music_lvl_03_east_rest_low_re.ogg + + + 44.0999985 + + + 2 + + + 3.4286394557823101 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{fe7f1c81-bf9d-4a1f-8431-130335bd8859}.xml b/game/FMOD Project/Metadata/AudioFile/{fe7f1c81-bf9d-4a1f-8431-130335bd8859}.xml new file mode 100644 index 0000000..8705f93 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{fe7f1c81-bf9d-4a1f-8431-130335bd8859}.xml @@ -0,0 +1,20 @@ + + + + + Ambience/City/ambience_city_walla_chatter_2.ogg + + + 48 + + + 1 + + + 4.1022291666666666 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/AudioFile/{fef892d1-12c4-42ac-b551-671952474594}.xml b/game/FMOD Project/Metadata/AudioFile/{fef892d1-12c4-42ac-b551-671952474594}.xml new file mode 100644 index 0000000..d63c738 --- /dev/null +++ b/game/FMOD Project/Metadata/AudioFile/{fef892d1-12c4-42ac-b551-671952474594}.xml @@ -0,0 +1,20 @@ + + + + + Vehicles/Car Engine/veh_car_engine_190E_04812.ogg + + + 48 + + + 1 + + + 1.0362899999999999 + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + diff --git a/game/FMOD Project/Metadata/Bank/{34f54f36-2a90-4a3c-a280-e09632cf8257}.xml b/game/FMOD Project/Metadata/Bank/{34f54f36-2a90-4a3c-a280-e09632cf8257}.xml new file mode 100644 index 0000000..6a146cc --- /dev/null +++ b/game/FMOD Project/Metadata/Bank/{34f54f36-2a90-4a3c-a280-e09632cf8257}.xml @@ -0,0 +1,11 @@ + + + + + Vehicles + + + {07fb52a7-88b7-4b50-aff5-5f9728462f36} + + + diff --git a/game/FMOD Project/Metadata/Bank/{561cd480-bd2b-4c2e-b919-d775f9c4f409}.xml b/game/FMOD Project/Metadata/Bank/{561cd480-bd2b-4c2e-b919-d775f9c4f409}.xml new file mode 100644 index 0000000..c4b16c7 --- /dev/null +++ b/game/FMOD Project/Metadata/Bank/{561cd480-bd2b-4c2e-b919-d775f9c4f409}.xml @@ -0,0 +1,11 @@ + + + + + SFX + + + {07fb52a7-88b7-4b50-aff5-5f9728462f36} + + + diff --git a/game/FMOD Project/Metadata/Bank/{816d4737-171a-41e7-a9f0-32996ece71cb}.xml b/game/FMOD Project/Metadata/Bank/{816d4737-171a-41e7-a9f0-32996ece71cb}.xml new file mode 100644 index 0000000..ef9b906 --- /dev/null +++ b/game/FMOD Project/Metadata/Bank/{816d4737-171a-41e7-a9f0-32996ece71cb}.xml @@ -0,0 +1,14 @@ + + + + + Master + + + true + + + {07fb52a7-88b7-4b50-aff5-5f9728462f36} + + + diff --git a/game/FMOD Project/Metadata/Bank/{9ad4be16-4f5a-4e4c-a013-f35de106f106}.xml b/game/FMOD Project/Metadata/Bank/{9ad4be16-4f5a-4e4c-a013-f35de106f106}.xml new file mode 100644 index 0000000..d8628d7 --- /dev/null +++ b/game/FMOD Project/Metadata/Bank/{9ad4be16-4f5a-4e4c-a013-f35de106f106}.xml @@ -0,0 +1,11 @@ + + + + + Music + + + {07fb52a7-88b7-4b50-aff5-5f9728462f36} + + + diff --git a/game/FMOD Project/Metadata/Bank/{d100ffc4-9718-41d7-b641-181373b55498}.xml b/game/FMOD Project/Metadata/Bank/{d100ffc4-9718-41d7-b641-181373b55498}.xml new file mode 100644 index 0000000..cb72009 --- /dev/null +++ b/game/FMOD Project/Metadata/Bank/{d100ffc4-9718-41d7-b641-181373b55498}.xml @@ -0,0 +1,25 @@ + + + + + Dialogue + + + {07fb52a7-88b7-4b50-aff5-5f9728462f36} + + + {0f057e27-fc47-462a-a5d6-6c6903263d34} + + + + + Audio Table + + + Dialogue + + + true + + + diff --git a/game/FMOD Project/Metadata/Bank/{d6e4340a-dfdb-4393-b4dc-b55091d858cd}.xml b/game/FMOD Project/Metadata/Bank/{d6e4340a-dfdb-4393-b4dc-b55091d858cd}.xml new file mode 100644 index 0000000..f58f4e4 --- /dev/null +++ b/game/FMOD Project/Metadata/Bank/{d6e4340a-dfdb-4393-b4dc-b55091d858cd}.xml @@ -0,0 +1,11 @@ + + + + + VO + + + {07fb52a7-88b7-4b50-aff5-5f9728462f36} + + + diff --git a/game/FMOD Project/Metadata/BankFolder/{07fb52a7-88b7-4b50-aff5-5f9728462f36}.xml b/game/FMOD Project/Metadata/BankFolder/{07fb52a7-88b7-4b50-aff5-5f9728462f36}.xml new file mode 100644 index 0000000..f49c068 --- /dev/null +++ b/game/FMOD Project/Metadata/BankFolder/{07fb52a7-88b7-4b50-aff5-5f9728462f36}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/game/FMOD Project/Metadata/EffectPreset/{028d38fd-417b-0bad-290b-a30ea50da357}.xml b/game/FMOD Project/Metadata/EffectPreset/{028d38fd-417b-0bad-290b-a30ea50da357}.xml new file mode 100644 index 0000000..8df8fb2 --- /dev/null +++ b/game/FMOD Project/Metadata/EffectPreset/{028d38fd-417b-0bad-290b-a30ea50da357}.xml @@ -0,0 +1,25 @@ + + + + + Reverb Send + + + {aca7fd17-4939-0ce5-284c-74c26c487e44} + + + {3debf704-4e5f-496e-a8db-a2f9a9917a58} + + + + + 0 + + + 2 + + + {524ae5a9-928c-4391-9635-34b41d4602af} + + + diff --git a/game/FMOD Project/Metadata/EffectPreset/{3eae0edd-4f73-005f-09e3-f727ff075640}.xml b/game/FMOD Project/Metadata/EffectPreset/{3eae0edd-4f73-005f-09e3-f727ff075640}.xml new file mode 100644 index 0000000..349d49f --- /dev/null +++ b/game/FMOD Project/Metadata/EffectPreset/{3eae0edd-4f73-005f-09e3-f727ff075640}.xml @@ -0,0 +1,19 @@ + + + + + FMOD Spatializer + + + {aca7fd17-4939-0ce5-284c-74c26c487e44} + + + {01c8c124-4057-429c-8833-f6d0f39b8f4f} + + + + + true + + + diff --git a/game/FMOD Project/Metadata/EffectPresetFolder/{aca7fd17-4939-0ce5-284c-74c26c487e44}.xml b/game/FMOD Project/Metadata/EffectPresetFolder/{aca7fd17-4939-0ce5-284c-74c26c487e44}.xml new file mode 100644 index 0000000..4460001 --- /dev/null +++ b/game/FMOD Project/Metadata/EffectPresetFolder/{aca7fd17-4939-0ce5-284c-74c26c487e44}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/game/FMOD Project/Metadata/EncodingSetting/{e8cf84fd-2b13-4cfe-82da-f09bd25d6f4f}.xml b/game/FMOD Project/Metadata/EncodingSetting/{e8cf84fd-2b13-4cfe-82da-f09bd25d6f4f}.xml new file mode 100644 index 0000000..f956177 --- /dev/null +++ b/game/FMOD Project/Metadata/EncodingSetting/{e8cf84fd-2b13-4cfe-82da-f09bd25d6f4f}.xml @@ -0,0 +1,17 @@ + + + + + 3 + + + 37 + + + {8d452eed-4519-4e5e-9f8d-5ab4c83b0c2a} + + + {8d452eed-4519-4e5e-9f8d-5ab4c83b0c2a} + + + diff --git a/game/FMOD Project/Metadata/EncodingSetting/{fa3463e9-0731-437c-8bee-4e68a4d3ffea}.xml b/game/FMOD Project/Metadata/EncodingSetting/{fa3463e9-0731-437c-8bee-4e68a4d3ffea}.xml new file mode 100644 index 0000000..461c057 --- /dev/null +++ b/game/FMOD Project/Metadata/EncodingSetting/{fa3463e9-0731-437c-8bee-4e68a4d3ffea}.xml @@ -0,0 +1,17 @@ + + + + + 3 + + + 37 + + + {c9f35dc9-139f-472b-8888-8ad9fad5168c} + + + {c9f35dc9-139f-472b-8888-8ad9fad5168c} + + + diff --git a/game/FMOD Project/Metadata/Event/{03c85dcf-c4eb-4094-83c7-7839b5d058e8}.xml b/game/FMOD Project/Metadata/Event/{03c85dcf-c4eb-4094-83c7-7839b5d058e8}.xml new file mode 100644 index 0000000..5ca3154 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{03c85dcf-c4eb-4094-83c7-7839b5d058e8}.xml @@ -0,0 +1,438 @@ + + + + + This is an example of an event using crossfades. + +There are two multi instruments on the single-shot track: One for the head and one for the tail of the gunshot sound. To smoothly blend the two sounds together there is a crossfade between these two multi instruments, created by dragging the tail multi instrument to overlap the head multi instrument. + +The head, tail, and casings multi instruments all make use of random modulators on their pitch and volume properties to produce variety in the output. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#multi-instruments + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#fade-in-and-fade-out + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#synchronous-and-asynchronous-instruments + +Weapon sounds courtesy of Frank Bry at The Recordist. + + + Pistol + + + 2 + + + {0f401ddc-9cc3-4650-9c24-1c43209ca85e} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {d3be993f-e341-4615-9b4d-72c12e847f2c} + + + {b53c110c-4b34-40a7-b861-97782e0ca503} + + + {8ebd69da-cab7-47d9-9560-4368ec343d03} + + + {d2ccc097-a7c4-49c1-9e4f-060719f89b83} + + + {b4d18545-70eb-42a9-8f28-0d7c457f451e} + + + {7cbf997c-8cf4-44e3-9498-c4541b560e89} + {c2d46bad-69f4-4e92-9a65-4406d24c11d3} + + + {1eba8222-099b-44e0-a656-54745500b38c} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {48946ba3-a2a8-4a24-bfd2-4f5adfa276af} + + + + + {48946ba3-a2a8-4a24-bfd2-4f5adfa276af} + + + + + {bf15a3f1-6824-492a-8cb1-db2383349f1b} + + + {c958a228-ff9a-4fe7-aff2-0f04022321b4} + + + {34831516-81ad-4ca9-b237-9572a8a92e43} + + + {dd124d8d-1ccd-4871-a160-5024e3e3f116} + + + + + + + {9ff99ef7-b94a-45b4-8092-1f4ebbd55450} + {68afee84-8b56-44a8-9a77-567f1e367348} + + + {bf761092-4a74-4897-9c3b-f0db578e6a4f} + + + + + {ed14d41a-a523-41fa-8cc6-a9a2560a24be} + + + {bbc1e350-d75b-4069-bea1-61fcb1fd7b74} + + + + + {9ff99ef7-b94a-45b4-8092-1f4ebbd55450} + {68afee84-8b56-44a8-9a77-567f1e367348} + {ed14d41a-a523-41fa-8cc6-a9a2560a24be} + + + + + {ed956981-94a8-40a1-a13f-db54938c35c0} + + + {2f216a83-104c-4adf-bcf6-0a74445ba758} + + + {d3be993f-e341-4615-9b4d-72c12e847f2c} + + + + + {7cd1fec1-505b-410f-950c-c72c582be0e3} + + + + + + true + + + 0.031295200000000002 + + + 0.31412499999999999 + + + 3 + + + {698149db-7022-4c9f-a811-957b7c6315ac} + {3a0bfede-7993-4aa4-a731-4b26c4f063af} + + + {320aab26-3bfb-4150-ac83-a646c546e1a4} + + + {751115c9-f751-4be2-b65f-1a5ae49de601} + {dd53a240-e88c-4d18-954b-df21a33a2ee8} + + + + + true + + + 0.034000000000000002 + + + 3 + + + {a16ae297-9acd-4ef1-bb3c-9c3c59f95a52} + {8d5d6c75-b3a3-4a1f-8a0e-0e7987678fff} + + + {94e2fc05-7c82-4386-a2c6-5c9c84d4153d} + + + {33c10426-9ffb-4eaf-ac81-bda2a5539247} + {90243a05-d821-45db-8513-67f60eab602b} + + + + + Single-Shot + + + {c2fed2c8-9710-42f6-b757-3fd9ce37b8e5} + + + {5cd606bf-c862-4a5a-b7db-c06e4fc1c80c} + + + {48946ba3-a2a8-4a24-bfd2-4f5adfa276af} + + + + + true + + + 0.26721185283018867 + + + 0.078208347169811315 + + + {ca015a1e-82cb-4e6e-888a-e9e88343e217} + {bcc67599-b1d2-4403-ae84-b3c7616a70b7} + + + {ce555fc9-8e05-418c-95ea-e241f17dc2c2} + {607b649d-389c-4094-aa0f-99e37c8508b2} + {09dfc056-15fb-4203-accd-72acad08248f} + {6dbfd53d-d9e4-47f8-8d4a-ce865ee883b5} + + + + + Casings + + + {92ef385e-42a2-431a-99cb-65a75c417cae} + + + {b810c140-4acd-478f-9af4-e4ea66b62750} + + + {48946ba3-a2a8-4a24-bfd2-4f5adfa276af} + + + + + {5b719b0f-5e40-4e2b-8fe6-3afa0b474966} + {5bc6dbf7-bdfc-48cb-84f4-e7eb179a136f} + {7391748e-fffe-4469-8d11-83f92f2e896c} + + + + + + + pitch + + + 4.16666698 + + + + + volume + + + 2 + + + + + {893c2ce2-ddc1-43b4-9c3a-6a557b6e634c} + + + {a99e1bc4-6198-4643-9b72-86ec47b38da0} + + + {68afee84-8b56-44a8-9a77-567f1e367348} + + + + + 0 + + + 3 + + + {ea1034e0-b73f-4b13-87e6-4bbf335a201f} + + + + + 0 + + + 3 + + + {0c8d7083-5af3-421a-a806-7ec67e53cab6} + + + + + volume + + + 2 + + + + + pitch + + + 4.16666698 + + + + + {c6959447-5c02-44b3-b93c-629051b12738} + + + {e9352867-bdf5-4bf6-9a78-12ba88b89c2a} + + + {9ff99ef7-b94a-45b4-8092-1f4ebbd55450} + + + + + 0 + + + 3 + + + {79919899-b24c-4d40-86c6-1fb584a3e947} + + + + + 0 + + + 3 + + + {edc2b884-0605-41d1-b191-b5c703689865} + + + + + {0010a4b3-d64d-45f6-b3a6-5059f0017473} + + + + + + pitch + + + 6.25 + + + + + volume + + + 4 + + + + + {4347f7aa-87f5-4d92-8fd2-b5516b401a45} + + + + + {c8c93b0f-5548-47db-8e38-0b46a644024e} + + + + + {7c12b411-6d4c-4ace-a525-ae147c49c1b1} + + + + + {1e2a0507-d2c4-485f-8527-60381db4a812} + + + + + {adf0df5e-cfdb-4abb-b76e-7ef2602826ed} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + + 0.031295200000000002 + + + 0 + + + -0.254718989 + + + + + 0.034000000000000002 + + + 1 + + + + + 0.031295200000000002 + + + 1 + + + 0.254718989 + + + + + 0.034000000000000002 + + + 0 + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{0c8363b4-23af-4f9c-af4b-0951bfd37d84}.xml b/game/FMOD Project/Metadata/Event/{0c8363b4-23af-4f9c-af4b-0951bfd37d84}.xml new file mode 100644 index 0000000..5156454 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{0c8363b4-23af-4f9c-af4b-0951bfd37d84}.xml @@ -0,0 +1,1511 @@ + + + + + A basic two-parameter engine where "RPM" is the rotations per minute of the engine and "Load" is the amount of load the engine is under, from -1.00 to 1.00. + +The timeline parameter sheet is not being used so it has been removed. + +The instruments on the "RPM" parameter use Autopitch modulators, which apply a pitch adjustment based on the fundamental frequency of each asset. The transition between on and off load is achieved through automation of a 3-EQ effect and a distortion effect. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#autopitch-modulator + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#automation-and-modulation + +Recordings by David Nichols of Track Time Audio. Engine is a 1985 Mercedes-Benz 190E-16V. + + + Car Engine + + + 2 + + + {24af3eef-4e1a-46c4-98e7-5211bb3a531c} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {1b2729a6-7abf-4220-9cbc-a415743f03d6} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {c993486d-84e1-468e-9f5a-d1b045016729} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {403a3d67-a131-4cc6-b4b5-b05b057f8023} + + + {a6622abc-18c8-4bf0-ac00-3f99fc5db1de} + + + {c387280a-7503-41fc-ad07-fa070e549e9c} + + + {5289d670-77be-452b-931e-634f840d54f3} + + + {386fff99-509e-4815-b358-a263e12c5501} + + + {53a8bc4d-e6d0-40d6-9aaf-8a2351cfddcc} + + + {8f749d33-0bf6-4724-ac6d-44aeea43e91a} + + + {8af5726b-306e-04d0-0f35-6a616bacbec1} + {56230565-9a8e-0f29-347c-5edd65d4db1e} + + + {34f54f36-2a90-4a3c-a280-e09632cf8257} + + + + + {8a846517-7e63-401c-b7d0-436564e94192} + + + + + {8a846517-7e63-401c-b7d0-436564e94192} + + + + + {c23c934c-d64f-47ea-a8e0-b66ada297eb0} + + + {011aec8c-f6a9-4c93-874d-fe02618c18ea} + + + {37ebea86-d649-4a7a-b7b5-25701bfce8e9} + + + + + true + + + + + + {7a5fe40b-8700-0b7f-07bb-83d98bfd740b} + {537a82f8-1524-0033-0189-d2fb6e15f6c6} + {39957b7f-9dec-079d-20fc-f5603c66b6ac} + {20f8778a-f21f-091f-250d-384d02298cc6} + {27c7b606-5ad8-0536-175d-d6260337c371} + + + {16f09569-eba0-424b-950e-1c892557a15b} + {139ba00d-72f8-4fd5-acde-a5749615ef0d} + {b0ef292f-2511-4683-bbc9-bcfd32e2af9b} + {7865e68c-f763-418f-9528-0a94bd587c9c} + {34a32b0d-aba0-40b1-9b00-0c8d69bfa61f} + {86494420-5b8c-4801-9a12-e99c87cf8c1d} + {bb8a856e-fc0b-478a-87e8-46be0cc51306} + {daa1ade2-7642-46df-b088-15a7a214567e} + {54c805bd-32cf-46fd-8531-5a19c82e7ef2} + {ad4c4a80-9cf7-4e47-a0c3-9f13f95a0ee8} + {604205a7-e4dc-47cc-af24-370b88f1860d} + {72c21999-38b0-41e4-bb6a-829d3297bfd5} + + + {d5a7b347-880f-4ee9-ac94-7331297152f2} + + + + + false + + + + + {16f09569-eba0-424b-950e-1c892557a15b} + {139ba00d-72f8-4fd5-acde-a5749615ef0d} + {b0ef292f-2511-4683-bbc9-bcfd32e2af9b} + {7865e68c-f763-418f-9528-0a94bd587c9c} + {34a32b0d-aba0-40b1-9b00-0c8d69bfa61f} + {86494420-5b8c-4801-9a12-e99c87cf8c1d} + {bb8a856e-fc0b-478a-87e8-46be0cc51306} + {daa1ade2-7642-46df-b088-15a7a214567e} + {54c805bd-32cf-46fd-8531-5a19c82e7ef2} + {604205a7-e4dc-47cc-af24-370b88f1860d} + {72c21999-38b0-41e4-bb6a-829d3297bfd5} + {ad4c4a80-9cf7-4e47-a0c3-9f13f95a0ee8} + + + {e25821f0-cab8-48f7-94c9-fef8b0f68286} + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + + + {0575ff31-40ca-44be-b0e4-998e40245e8a} + + + {038eac33-220e-451d-b5ac-863adc37e2c1} + + + {403a3d67-a131-4cc6-b4b5-b05b057f8023} + + + + + {f029d2da-6219-43fb-ba44-bb69d4783cc2} + + + + + + {4ab15f90-271d-4264-be74-458310e7ef8f} + + + + + {63943963-b539-4928-b846-14a1f50f6d42} + + + + + {097bc0e4-3df1-4e86-9933-333aa77c2d28} + + + + + {1016cc11-5202-4004-9cc2-fe1799331742} + + + + + {17290d9d-fac5-4c2d-ae92-107c982d58f5} + + + + + true + + + 3600 + + + 1000.00048828125 + + + 3 + + + -12 + + + true + + + {6e547144-848e-4e41-bd77-62134d375c99} + + + {34e82dc5-3156-44a9-bf6b-116d53be4767} + + + {0c295cce-2a66-480a-94f9-61e7478d9239} + + + {51d9ef16-1ecb-4a8d-b975-29afe0e53f5d} + + + + + true + + + 4600 + + + 1000.00048828125 + + + 3 + + + true + + + {e0f2fd5d-7013-4d93-9ed3-9e0b83d15495} + + + {9831d04d-6830-4af9-a226-077602d01c36} + + + {10fe30fe-eb1c-4750-a213-5995a3e880f3} + + + {fef892d1-12c4-42ac-b551-671952474594} + + + + + true + + + 3000 + + + 1000.000244140625 + + + 3 + + + -10 + + + true + + + {bcfd54fc-30ab-486c-99c5-e0f204afa87e} + + + {d861a916-d1ab-4a0f-8cb4-da3b98433b7e} + + + {b5dc3831-3afd-419f-81c5-62e9338ced6b} + + + {0b18b0c9-3c77-4063-b072-9d25963500c7} + + + + + true + + + 6600 + + + 3400 + + + 3 + + + true + + + {e62b97fc-7909-4d4d-8648-bfdceb539c73} + + + {d1ea801b-4975-4c89-a726-f2cfaf8b9ae5} + + + {08200423-a83d-43d7-8ca6-4e7bcf21464a} + + + + + true + + + 2600 + + + 1000.000244140625 + + + 3 + + + -10 + + + true + + + {f83b4fa1-8ee1-443f-8bca-3bd3cfb80dd3} + + + {6b8eb471-e19e-40b1-a865-a75fa890cde4} + + + {46a457fa-914a-4808-b3b3-0c29ced0d4ad} + + + {4d8a0d37-bf22-463e-96d7-f2f37a8f1489} + + + + + true + + + 1599.9999999999998 + + + 1000.0002441406252 + + + 3 + + + -6 + + + true + + + {33ef9b86-7f9e-4cb2-9e26-3a4fec30010e} + + + {8a42c6b7-b3f6-4059-acb3-6ed63712ada7} + + + {437715cc-01d8-4864-a9d7-a9d7fe369ff6} + + + {626264b1-83ee-4dd5-a1ac-a989ded8ce0f} + + + + + true + + + 5000 + + + 1600.00048828125 + + + 3 + + + true + + + {fd08e763-5fb7-42bb-90e8-2d04c5b1c173} + + + {7d2b24de-49ca-4f16-ab4c-742d52872afd} + + + {589efa0d-5816-4462-9074-e52a42bd1bae} + + + {6f6f9109-31cb-4e95-9c99-c9e2a2e9de91} + + + + + true + + + 6000 + + + 1000.00048828125 + + + 3 + + + true + + + {8d322243-517c-4ac2-83d4-c38819d1318d} + + + {3a501311-d2d2-49be-afab-5817a6daaf1b} + + + {f3ca2fe6-63c3-4afd-ab46-45356fc38a23} + + + {70815f54-013c-44e7-a135-e5ede15097c2} + + + + + true + + + 1400.0001220703125 + + + 3 + + + 8 + + + true + + + {c1794d17-c893-46ed-bece-007be2b83d45} + + + {484b7523-b93f-4714-8809-86c71a0c5e3d} + + + {ca2c223b-7eb7-4f09-abd0-e38b57ba6c09} + + + + + true + + + 4000 + + + 1000.00048828125 + + + 3 + + + -12 + + + true + + + {145bc4e2-b965-4ecf-a918-ffd891efe550} + + + {f8210301-2487-4f5f-b026-bcb8c5d2d87d} + + + {453a6dca-0051-4d34-98ea-212a00a8df52} + + + + + true + + + 2000.0000000000002 + + + 1000.0002441406248 + + + 3 + + + -8 + + + true + + + {81ccca17-58c4-451f-b30f-8714979b6831} + + + {f6665446-8cc5-4d3a-b6e3-2a70352fc9a0} + + + {0c3f2f51-f4bb-498e-b10d-6c21a2b36994} + + + {486feac4-6764-49f7-bda0-fb2bf006dfd8} + + + + + true + + + 999.99999999999977 + + + 1000.0001220703127 + + + 3 + + + -4 + + + true + + + {ab9d9b48-5730-46ea-9176-b21897dc0994} + + + {21cb727b-0f01-4e6d-8c73-8059fc6c29cb} + + + {90154ef1-5cc7-4148-8bdc-b4e043635afc} + + + {45b0d187-c6c7-4555-9a50-5c174b217d78} + + + + + 190E-16V + + + {17290d9d-fac5-4c2d-ae92-107c982d58f5} + + + {3c8a51b8-bfcf-487a-8928-af475922e045} + + + {5f11a552-ee58-4ff5-853a-e6a976b5a84a} + + + {8a846517-7e63-401c-b7d0-436564e94192} + + + + + {42cab93d-da01-41b9-be0e-79d9a25bd2f2} + {41cc0784-c8dd-019b-3f90-356a01104cee} + {7def31a4-c6d5-0a69-1f78-61435b1ab9f9} + + + + + + + pitch + + + 3845 + + + + + {a4cbfc2a-e9f0-40be-b510-bf8f308a99f2} + + + {ebeefda1-260d-4e43-86cb-47f2b423b3ec} + + + {b0ef292f-2511-4683-bbc9-bcfd32e2af9b} + + + + + {4880a5a0-160f-4550-a4e0-5f6c91356823} + + + {f4a768fb-f296-441a-8b6e-98fb53431729} + + + {ad4c4a80-9cf7-4e47-a0c3-9f13f95a0ee8} + + + + + pitch + + + 4812 + + + + + {321c127d-d191-4087-95d3-5b9c2ac0dce7} + + + {f5f043ed-0d1a-4841-824b-88a7f8c2cfdc} + + + + + {040f3b14-0d56-4cae-8dcc-f3afbdfad1c8} + + + {38c89236-0e9d-41ff-91e7-ed5d79efe7d5} + + + + + pitch + + + 3472 + + + + + {773a2859-c508-4f94-a906-d5047be38842} + + + {a322689c-2991-48fd-a4f1-eeef4badfad4} + + + {34a32b0d-aba0-40b1-9b00-0c8d69bfa61f} + + + + + {c0f02a88-c90d-40c0-9042-4a54b62b850e} + + + {427a2639-e9c6-495c-b11b-c51ddaaeaf06} + + + {16f09569-eba0-424b-950e-1c892557a15b} + + + + + pitch + + + 6723 + + + + + {5edbe965-133b-4346-b072-d6875d8d45fe} + + + {805d54a0-af0a-4b84-83f7-8d5ebc694824} + + + {daa1ade2-7642-46df-b088-15a7a214567e} + + + + + pitch + + + 2900 + + + + + {b656df82-94e9-4c71-8b86-3aaadfb79825} + + + {282d9436-910c-4ac0-9df1-4f42412df283} + + + {604205a7-e4dc-47cc-af24-370b88f1860d} + + + + + {c20c18e4-9416-42c8-8652-ce871c08f331} + + + {f2bbbb21-2f33-4ceb-a86a-628f6529ec71} + + + {b0ef292f-2511-4683-bbc9-bcfd32e2af9b} + + + + + pitch + + + 1999 + + + + + {2212f804-ce2c-48a9-87a4-e780df9ee047} + + + {2fd5cb32-249f-4832-9232-2ac5d0c1644b} + + + {72c21999-38b0-41e4-bb6a-829d3297bfd5} + + + + + {de9560c5-1bf5-4d87-96dc-c6e1ba2488ee} + + + {6cd98ed4-0c21-4c65-8c3c-f241318604dd} + + + {604205a7-e4dc-47cc-af24-370b88f1860d} + + + + + pitch + + + 5845 + + + + + {910c3ad3-5e95-405d-8469-526648219886} + + + {a5a78cbb-8914-468a-a640-55f692bd16c3} + + + + + {63a31739-ee65-49f2-8c95-64e5bbaaccea} + + + {0cba455b-78d8-4f60-982e-8ca57067be1e} + + + {daa1ade2-7642-46df-b088-15a7a214567e} + + + + + pitch + + + 6262 + + + + + {12b7600e-90b0-4690-bd1f-0aff25c9c7b9} + + + {2977a162-538e-4834-9ba3-05fdf9d161dc} + + + {bb8a856e-fc0b-478a-87e8-46be0cc51306} + + + + + {8c9a87f1-91b1-4530-af59-8caff6e2473c} + + + {241f3015-f758-4f4a-984a-6bf6321f4261} + + + {7865e68c-f763-418f-9528-0a94bd587c9c} + + + + + pitch + + + 1050 + + + + + {42728c3e-2e9c-450a-af92-728a3ce32901} + + + {f72991df-d15b-4045-81dd-4484d53d0a65} + + + {72c21999-38b0-41e4-bb6a-829d3297bfd5} + + + + + pitch + + + 4329 + + + + + {9ec288cf-a2b7-4a79-9f47-ffbd191df9f9} + + + {f6fec826-88a4-4b51-ac74-840cdbc5e283} + + + {16f09569-eba0-424b-950e-1c892557a15b} + + + + + pitch + + + 2549 + + + + + {97e5d3b1-98b7-45b8-a664-bd2443c0ceaa} + + + {a1364021-b805-4ca6-bec9-7603d3a67124} + + + {86494420-5b8c-4801-9a12-e99c87cf8c1d} + + + + + {f7ab8e85-8067-41d7-83a4-70fc60d92632} + + + {68eb53e8-b62e-48ea-8056-e8fe9ac7eed6} + + + {34a32b0d-aba0-40b1-9b00-0c8d69bfa61f} + + + + + pitch + + + 1560 + + + + + {b2e3446a-8068-420b-b2ba-d4f5870d8d8f} + + + {1d4fb83c-0337-4baf-9d22-354d3fea728b} + + + {54c805bd-32cf-46fd-8531-5a19c82e7ef2} + + + + + {75a66b67-4180-4491-9025-44235cf319e1} + + + {1bf4859b-1195-476f-80fc-37572d5a34ba} + + + {86494420-5b8c-4801-9a12-e99c87cf8c1d} + + + + + volume + + + {fc1659f6-781b-48aa-8951-5f2a5c1785ef} + + + + + {6eb004a8-3c26-4805-9990-6a81d472f4b8} + {349e3216-f987-45a8-9946-13dcb1e65d30} + {da6b2095-063c-489d-87b7-3acc091313ba} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + + 3600 + + + 0 + + + -0.2547189 + + + + + 4000 + + + 1 + + + + + 4000 + + + 1 + + + 0.25471893 + + + + + 4600 + + + 0 + + + + + 4600 + + + 0 + + + -0.2547189 + + + + + 5100 + + + 1 + + + + + 5000 + + + 1 + + + 0.25471893 + + + + + 5600 + + + 0 + + + + + 3000 + + + 0 + + + -0.2547189 + + + + + 3600 + + + 1 + + + + + 3600 + + + 1 + + + 0.25471893 + + + + + 4000 + + + 0 + + + + + 6600 + + + 0 + + + -0.2547189 + + + + + 7000 + + + 1 + + + + + 2600 + + + 0 + + + -0.2547189 + + + + + 3000 + + + 1 + + + + + 3000 + + + 1 + + + 0.25471893 + + + + + 3600 + + + 0 + + + + + 1599.9999999999998 + + + 0 + + + -0.2547189 + + + + + 1999.9999999999998 + + + 1 + + + + + 2000.0000000000002 + + + 1 + + + 0.25471893 + + + + + 2600 + + + 0 + + + + + 5000 + + + 0 + + + -0.2547189 + + + + + 5700 + + + 1 + + + + + 6000 + + + 1 + + + 0.254718989 + + + + + 6600 + + + 0 + + + + + 6000 + + + 0 + + + -0.254718989 + + + + + 6600 + + + 1 + + + + + 6600 + + + 1 + + + 0.25471893 + + + + + 7000 + + + 0 + + + + + 999.99999999999977 + + + 1 + + + 0.25471893 + + + + + 1400 + + + 0 + + + + + 4000 + + + 0 + + + -0.2547189 + + + + + 4600 + + + 1 + + + + + 2000.0000000000002 + + + 0 + + + -0.2547189 + + + + + 2600 + + + 1 + + + + + 2600 + + + 1 + + + 0.25471893 + + + + + 3000 + + + 0 + + + + + 999.99999999999977 + + + 0 + + + -0.2547189 + + + + + 1400 + + + 1 + + + + + 1599.9999999999998 + + + 1 + + + 0.25471893 + + + + + 1999.9999999999998 + + + 0 + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {5cc378bd-086b-4986-b2a0-3a73beb6e295} + {73fac367-d4e3-440f-830d-025fd54c1a91} + + + + + + 850 + + + 2800 + + + 0 + + + {097bc0e4-3df1-4e86-9933-333aa77c2d28} + {4ab15f90-271d-4264-be74-458310e7ef8f} + {63943963-b539-4928-b846-14a1f50f6d42} + + + + + 0.219999999 + + + {1016cc11-5202-4004-9cc2-fe1799331742} + + + + + 1 + + + -0.479999989 + + + + + -1 + + + -1.39999998 + + + + + highGain + + + {d9f41c52-823f-4a97-a4a5-cec2b1bc3598} + + + + + lowGain + + + {987f9f8b-f872-4d14-bdcf-89b2211858b0} + + + + + midGain + + + {260f6ef7-e0b6-4ad7-8569-0704cef11536} + + + + + level + + + {970a194a-038e-4089-83ad-be5b68b76b7e} + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {ba2aad41-762a-479b-ad88-256ec5b804b8} + {3704fc7d-15ff-40c4-b8c6-5d09bf6827b2} + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {c82e6cca-9fb8-4532-a963-627397f18ef2} + {a77f913a-c8ce-4dd7-8f1f-355dfac5c8e0} + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {d7ccc87d-9b4c-4e11-a8ca-2b9c232199c5} + {3e494174-e7b2-4c06-899e-ef84695f7fe3} + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {d75a9ee3-dd13-432d-aeb7-2036c7b203bb} + {77662350-9627-499d-8470-c4069938236d} + + + + + -1 + + + 2.03999996 + + + + + 1 + + + -1.60000002 + + + + + -1 + + + -3.48000002 + + + + + 1 + + + 2.55999994 + + + + + -1 + + + 0.519997001 + + + + + 1 + + + -0.599997997 + + + + + -1 + + + 0 + + + + + 1 + + + 0.360000014 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{14b5293f-f69e-48e5-a7ae-ce02710ca3d9}.xml b/game/FMOD Project/Metadata/Event/{14b5293f-f69e-48e5-a7ae-ce02710ca3d9}.xml new file mode 100644 index 0000000..5f1df2b --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{14b5293f-f69e-48e5-a7ae-ce02710ca3d9}.xml @@ -0,0 +1,196 @@ + + + + + A simple one-shot footstep event for enemies using a multi instrument. + +The pitch property on the multi instrument has a random modulator on it to provide further variations of the current playlist. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#multi-instruments + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#random-modulator + +All footsteps recorded by Oliver Richardson. + + + Enemy Footsteps + + + 2 + + + {33020bd4-6815-4ed7-b787-bc0035017be4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {aacf1aeb-9d84-4bc6-b6ea-a225a809370e} + + + {e7b040e3-f336-47c4-9093-e96f55721722} + + + {e759b9c2-3d8f-469d-b945-1d970da7f22e} + + + {8829f048-7f7a-4fb4-96b7-7e64651068f9} + + + {dcaf9231-79df-4760-8bdb-b580970ee7f2} + + + {8a474be8-619c-45f0-b1a6-80f35c12c44f} + + + {3df03656-77a9-4b0e-b515-b2d8556a64b3} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {d9e7022f-58e4-4205-9475-d69f87c31394} + + + + + {d9e7022f-58e4-4205-9475-d69f87c31394} + + + + + {3c00a22c-a8eb-4c77-8aba-e7d395d8e453} + + + {2b27b750-c0b4-49d1-adcb-e85b2aec2222} + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + + + {7e0e64d9-adc0-4762-9987-10ba3fa862fd} + + + {fe06da84-45a4-4cfc-b0da-05be44fa3bb9} + + + + + {7e0e64d9-adc0-4762-9987-10ba3fa862fd} + + + + + {3645fb74-6e81-4faf-9fdb-5f704cc24e3b} + + + {3402f50c-48e5-4ecd-a3a2-03c33efd6ad4} + + + {aacf1aeb-9d84-4bc6-b6ea-a225a809370e} + + + + + {bd562df9-040c-48c2-8e31-d14f1613a882} + + + + + + true + + + 0.14714583333333334 + + + {2159aee0-aab0-4dc3-beae-5c847757484d} + + + {d6c1ed7f-098e-4f19-bf39-d4ad7859beb8} + {3afa0315-5a3e-4cae-b0f4-2a90b0b9a53c} + {03f74f1d-9e33-4285-ba10-abf6b75cebfc} + + + + + Footstep + + + {44f607a6-a1dd-47b5-a77f-b8688055711a} + + + {5ba8eed6-e799-4e3f-b06d-ad8bdcd9ca4f} + + + {d9e7022f-58e4-4205-9475-d69f87c31394} + + + + + {8b949af3-1b8f-420b-82cc-2363e0b41dd3} + {eac5d09f-5b13-4be4-9d61-65389b948417} + {7f5bd426-26d9-41c3-976c-8d93cb7d7a64} + + + + + + + pitch + + + 5 + + + + + {8c5a1855-2158-405d-8ae8-1514a5c73b68} + + + + + {1213e534-3cb4-4f98-9f92-9b7702d5ba09} + + + + + {e07d32c9-4eb2-4111-82fd-e5a007fc7f51} + + + + + {8caeffcc-2e86-412b-b25d-a35bcf947b27} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{1f687138-e06c-40f5-9bac-57f84bbcedd3}.xml b/game/FMOD Project/Metadata/Event/{1f687138-e06c-40f5-9bac-57f84bbcedd3}.xml new file mode 100644 index 0000000..6763690 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{1f687138-e06c-40f5-9bac-57f84bbcedd3}.xml @@ -0,0 +1,802 @@ + + + + + This is an example of a one-shot event using custom distance attenuation and built-in parameters. + +The timeline parameter sheet is not being used so it has been removed. + +The "Distance" parameter is one of FMOD Studio's special built-in parameters. These parameters are updated automatically based on the spatial properties of their associated event instance, relative to the listener. It uses the same units of distance as the game engine. + +In this event, the "Distance" parameter is used to control the volumes of individual tracks, as well as to trigger instruments. If you move the event instance in the 3D preview, you can see the "Distance" parameter automatically update. The "Distance" parameter has been set to "Hold value during playback", which prevents the parameter value updating whilst the event instance is playing. This is to avoid situations where the player is around 50 meters from an explosion and moving back and forth could potentially retrigger the distant thud single instrument. + +There are three sizes of explosions, dictated by the "Size" parameter. 0 is a small size explosion, 1 is a medium sized explosion, and 2 is a large sized explosion. The "Size" parameter has the "Hold value during playback" setting enabled. This ensures that changes to the parameter value do not trigger other instruments after the event instance has started. The "Explosion" track's volume is automated to give a custom distance attenuation curve. The sound size property of the spatializer on the master track is automated to give the impression of larger explosions sounding wider. + +Along with manipulating the size of the explosion, the size of the debris is affected by the "Size" parameter. As with the explosions, 0 is for a small amount of debris, 1 is for a medium amount of debris, and 2 is for a large amount of debris. Each debris instrument utilizes the delay interval property to play 350ms after being triggered. This gives the impression of debris falling after the explosion and prevents both instruments playing at the same time. The "Debris" track's volume is automated on the "Distance" parameter to give a much harsher distance attenuation - you are less likely to hear debris falling at a distance. + +The "Explosion" and "Debris" tracks' outputs are routed into the "Explosion Submix" track. There is a multiband EQ effect on this track automated on the "Distance" parameter. This muffles the sound of the explosion and debris the further away the event instance is. + +The "Distant Thud" track has an instrument that only triggers at distances of 50 units or further. + +On the master track, there is a spatializer which has the distance attenuation turned off, meaning it only controls the panning of the event instance. There is automation on the volume to give the entire event a custom distance attenuation. This method allows the spatializer to pan the event instance automatically while giving control of the distance attenuation of individual tracks to the automation on the "Distance" parameter. + +A random modulator on the pitch property of the event macros gives more variety to the explosion sounds. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameter-type + +https://www.fmod.com/resources/documentation-studio?page=built-in-parameters-reference.html#distance + +https://www.fmod.com/resources/documentation-studio?page=welcome-to-fmod-studio.html#parameter-properties + +https://www.fmod.com/resources/documentation-studio?page=fmod-studio-concepts.html#effects + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#random-modulator + +Explosion samples by Michel Baradari available at https://opengameart.org/content/2-high-quality-explosions under the Creative Commons Attribution 3.0. Full terms at http://creativecommons.org/licenses/by/3.0. + + + Explosion + + + 2 + + + {0f401ddc-9cc3-4650-9c24-1c43209ca85e} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {a0007824-27a5-4949-ae54-4df20f35ea51} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {5e618944-886a-41d0-96a0-a08198069cb1} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {c993486d-84e1-468e-9f5a-d1b045016729} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {0d13036d-c221-49f6-a499-2c0ba4bc81c8} + + + {ab30ebf3-e56a-411e-a1d3-96b97b3bb5eb} + + + {ed0717cb-1c91-479a-b068-783a4a103bb3} + + + {233560cd-9ab8-497d-8a7b-b81b5ee40a10} + + + {4f47a8ae-e5da-40bf-b40f-6c75b9844a74} + + + {36fca5d3-2762-4508-8e35-78ae25e4146e} + {f7d10ccf-8424-4819-a0aa-a26f281dcb5d} + {81bf61dd-d68d-4dc4-902c-472508797565} + {23a076fb-1dc0-4892-8172-eb16c7f5abfa} + + + {a48df1a9-feee-4c60-959c-5afea6991e61} + + + {40cdc3a6-2873-03d1-1991-e3dbb51d9808} + {5c865f4d-9f06-4fd5-9ffb-2e4a359c6ebb} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {d01c45d3-78c8-4f31-b3a1-8d6606b29cd7} + + + + + {f7c0474b-e9e4-0393-35b0-e0756ed3ee04} + {19cc6d63-2436-425b-9396-009b2ebceb42} + + + {d01c45d3-78c8-4f31-b3a1-8d6606b29cd7} + + + + + {bf15a3f1-6824-492a-8cb1-db2383349f1b} + + + {b77e4de5-07fd-4efc-b864-542a219db1cb} + + + {2bd3fe07-c705-4271-bca4-5b8118a34b92} + + + {da23c66c-e512-4a93-98dc-02d6f58e4c5a} + + + + + + + {07a1a6cb-4f95-41aa-9474-609887901ce2} + + + {3d5d315d-42f4-426e-a313-7bed84e8833c} + {8a787309-4b9d-4de9-8b9a-ea4015ce51e7} + {9dd34737-f8f1-4abf-b18b-deed3cd6ec3e} + + + {59b91bea-c2e6-40fd-bc28-b8af0f259f6d} + + + + + {2106a7b1-87a3-4b2a-8072-b23fc9eea9c8} + + + {1a9dc6e0-aec9-47ce-85ff-6b386a99d2c6} + {811f3017-0fa8-4f48-9970-d29b391a6fdc} + {fdfca356-11ad-4ace-979b-eb1135b666af} + + + {126a3185-958a-49c2-9614-ed158654d81a} + + + + + {6e84b1be-0a4e-446e-8168-30b5c79b36f4} + + + {880844b1-2617-450b-9c9c-42357495c53a} + + + + + {7e4a24a1-5120-429f-b927-bc3f698fa63e} + + + {b16c05b9-fe95-46a3-8eee-0a1937c80343} + + + + + false + + + + + {811f3017-0fa8-4f48-9970-d29b391a6fdc} + {3d5d315d-42f4-426e-a313-7bed84e8833c} + {8a787309-4b9d-4de9-8b9a-ea4015ce51e7} + {9dd34737-f8f1-4abf-b18b-deed3cd6ec3e} + {1a9dc6e0-aec9-47ce-85ff-6b386a99d2c6} + {fdfca356-11ad-4ace-979b-eb1135b666af} + + + {2860903d-d2a5-4ff6-826d-77426e47a44f} + + + + + {7e4a24a1-5120-429f-b927-bc3f698fa63e} + + + {b53728c5-53bd-4679-bdb1-cd4395b4dbc9} + + + + + {6388db68-94b0-4ea4-a6be-5f6ef4f8cdac} + + + {50ddae08-bf55-443f-835f-5423596a8d55} + + + {cc7debd2-fbda-4439-ab9d-fd5ace90023b} + + + {81aefcc3-980e-4fda-8450-0849a15ea98c} + + + {0d13036d-c221-49f6-a499-2c0ba4bc81c8} + + + + + {c72efcd0-49f9-4a88-8c7f-262ff5c97580} + + + + + {6388db68-94b0-4ea4-a6be-5f6ef4f8cdac} + + + + + {e6ccbcdf-f872-4db7-8054-e30813f8b3c7} + + + + + + {5bf46cf0-2b9e-4091-b3b5-ab511b512ce7} + + + + + 0.80000007152557373 + + + 3 + + + {3f1c2e93-de42-4e23-bd11-9304de1836d9} + {fcdcdd0e-0684-406f-aac1-79d4e05185e0} + + + {7ade0af7-aec3-4cab-9a68-a69740878d96} + + + + + 2 + + + 3 + + + {461f4baf-bc58-4e95-9b14-ebd86d0f8bcc} + {4f45a9af-1b9b-4dad-a3b4-2f5d3558a2b4} + + + {72719323-515f-4907-b1cb-1ecaf003bb1b} + + + + + 1 + + + 0.80000007152557373 + + + 3 + + + {eab00dcc-8a77-4097-93c1-28af9a768f5c} + {e92ac12b-9723-4219-8ac9-f745fec7aa50} + + + {5c452e91-729a-4d56-aeef-9070612a12ae} + + + + + Red + + + Explosion + + + {5bf46cf0-2b9e-4091-b3b5-ab511b512ce7} + + + {ee1917ae-43af-4e5b-9450-dabf5badd7e6} + + + {c69f408b-0ab2-4ed1-b572-dd20ec6422fb} + + + {880844b1-2617-450b-9c9c-42357495c53a} + + + + + {730d7d95-bb0c-4664-8173-6719cd3ca986} + + + + + 2 + + + 0 + + + 350 + + + 350 + + + {8f0a1642-75d6-4af6-baee-e9ff6cf4590b} + {5e10247f-be6a-413a-96ec-a195da68b29c} + + + {add6bc41-6e0f-4fb6-8f01-6749a1436daa} + + + + + 1 + + + 0.80000007152557373 + + + 0 + + + 350 + + + 350 + + + {bbf20d76-8378-4ad5-8e26-2294b1988666} + {cc845fec-e755-4f83-831d-3a8dc245ca8d} + + + {4abb9104-caee-4804-a54c-2bbcc5c65f30} + + + + + 0.80000007152557373 + + + 0 + + + 350 + + + 350 + + + -10 + + + {3172dc37-9761-4b4f-a961-cb3bbdddeb49} + {fb1d8400-5ef9-48cf-8039-eb33eadcdb3e} + + + {c853f504-2bc6-4d07-8030-e173a9b00c84} + + + + + Red + + + -8 + + + Debris + + + {730d7d95-bb0c-4664-8173-6719cd3ca986} + + + {d72dc834-0eca-41bd-bd74-96526d9aa365} + + + {d97084f5-bc60-42ff-be5d-6f6c0146f478} + + + {880844b1-2617-450b-9c9c-42357495c53a} + + + + + {a991c5bf-13fd-4d99-9076-0a56726503ed} + + + + + Red + + + Explosion Submix + + + {c08c0277-d90b-4ed3-b69d-a13df227d48e} + + + {773d9b47-0bd1-4b0d-bd22-14ad528dd8d8} + + + {d01c45d3-78c8-4f31-b3a1-8d6606b29cd7} + + + + + 50 + + + 50 + + + 0 + + + {802a3b25-4ff5-4e45-ae80-42b1130bba91} + + + + + Yellow + + + Distant Thud + + + {c7f35877-e676-4fc5-98a0-95cd85c712e3} + + + {2e65d890-98d9-45db-ae81-b1d09a570f0e} + + + {d01c45d3-78c8-4f31-b3a1-8d6606b29cd7} + + + + + volume + + + {c199ec9b-65da-4455-96aa-663c3e9bef14} + + + + + pitch + + + 3.125 + + + + + {d6c948fd-73ab-4658-bf6d-dacfa0f14546} + {3fa4aa84-cec5-41df-9776-fb672e594588} + {0d823fb7-21c1-481e-99e1-cc7dd374dcfc} + + + + + + + pitch + + + 4.16666698 + + + + + volume + + + 2 + + + + + pitch + + + 4.16666698 + + + + + volume + + + 2 + + + + + volume + + + 2 + + + + + pitch + + + 4.16666698 + + + + + volume + + + {42fc82b1-cce6-4505-93e9-90424104cdb1} + + + + + {cd68ae7b-c6d0-491c-ae7d-c26a44ef501d} + + + + + + pitch + + + 2.08333349 + + + + + volume + + + 2 + + + + + pitch + + + 2.08333349 + + + + + volume + + + 2 + + + + + pitch + + + 2.08333349 + + + + + volume + + + 2 + + + + + volume + + + {8bc0febd-cae7-4ca7-a11a-32b8afd61c34} + + + + + {b130a7ee-db7c-45dd-8438-3d31c0c8a759} + + + + + + {78f6edd7-fbd1-493e-b843-b2974cdf3de9} + {8fd7a805-c643-400f-ae5c-3ab3989f6650} + + + + + + {5474fc38-10fa-40ec-a00a-6fe4f3334b6a} + + + + + + {b53728c5-53bd-4679-bdb1-cd4395b4dbc9} + + + {6d3af845-d414-420a-8381-391c0f87d0ec} + {a294f858-5400-4b2b-98c4-770270249778} + + + + + + 4 + + + 100 + + + 1 + + + true + + + {c72efcd0-49f9-4a88-8c7f-262ff5c97580} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + + {b53728c5-53bd-4679-bdb1-cd4395b4dbc9} + + + {b47c7cc2-eb1c-4d42-86e0-e925b61c0449} + {e7b616eb-0d89-438c-9e22-88d3c1e0cbfe} + + + + + + {b53728c5-53bd-4679-bdb1-cd4395b4dbc9} + + + {3e7f0630-654a-47a1-8a91-59fd99e6f903} + {a54f49ae-39e9-42d7-bc2b-fcdc0a38f4b0} + + + + + + + 22000 + + + {a991c5bf-13fd-4d99-9076-0a56726503ed} + + + + + + 100 + + + -80 + + + + + 60 + + + 0 + + + 1 + + + + + soundSize + + + {7259ef23-c45c-4743-85f9-efbefcbd2600} + + + + + 100 + + + -80 + + + + + 50 + + + 3.81469727e-06 + + + 0.208863854 + + + + + 0 + + + 0 + + + -1 + + + + + 100 + + + -80 + + + + + frequencyA + + + {2bad7976-e67d-481d-b65c-59e11ca83e95} + + + + + {2860903d-d2a5-4ff6-826d-77426e47a44f} + + + {6827876e-b0cb-465c-bde9-757571a8f365} + {2d746fc1-0da3-47e8-83e4-a433b494d8d2} + + + + + {b53728c5-53bd-4679-bdb1-cd4395b4dbc9} + + + {4ce10aaa-89a5-4d6a-a783-58feea8f169c} + {5e16416a-c4e0-4273-bf8f-7055ebb30f80} + + + + + 0 + + + 2.4000001 + + + 0.695007026 + + + + + 3 + + + 30.6667004 + + + + + 70 + + + 320 + + + + + 0.08203445447087776 + + + 22000 + + + 0.47888419 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{22f3fed6-2b45-4fff-aa85-5351bc5fe9cd}.xml b/game/FMOD Project/Metadata/Event/{22f3fed6-2b45-4fff-aa85-5351bc5fe9cd}.xml new file mode 100644 index 0000000..3c02191 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{22f3fed6-2b45-4fff-aa85-5351bc5fe9cd}.xml @@ -0,0 +1,235 @@ + + + + + This is an example of a persistent event and use of snapshot instruments. + +A persistent event will not automatically stop, even when there is no instrument being triggered. + +The "Health" parameter has an initial value of 100, representing 100% health in game. Once the player's health drops below 25%, the playback position on the "Health" parameter sheet will trigger the looping heartbeat single instrument and the "Health" snapshot instrument. Double click on the snapshot to open it in the mixer view. + +The snapshot instrument triggers the "Health Low" snapshot, which applies a lowpass filter to the Music group bus and reduces the volume of the Ambience and Weapons group buses. + +To hear the effects of this snapshot, play the "Weapons/Machine Gun" event and/or any "Music/Level" event in a new event editor tab while this event is playing with the "Health" parameter value at 25 or lower. + +The timeline parameter sheet is not being used so it has been removed. + +https://www.fmod.com/resources/documentation-studio?page=event-macro-controls-reference.html#persistent + +https://www.fmod.com/resources/documentation-studio?page=mixing.html#snapshots-and-the-tracks-view + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#snapshot-instruments + +Heartbeat recording is licensed under the Creative Commons Attribution 3.0 Unported license. + +https://commons.wikimedia.org/wiki/File:Heartbeat.ogg + + + Health + + + 1 + + + {33020bd4-6815-4ed7-b787-bc0035017be4} + + + {2e193f8d-92b5-4f55-a7d7-fbd073e56354} + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ee45eecc-e25a-493b-bdcd-66a33f7336a5} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {c993486d-84e1-468e-9f5a-d1b045016729} + {64ca6440-4faa-4d26-bdde-b75160430002} + + + {98ce4439-57a2-4f58-b2e7-9d2f43b849fe} + + + {3abf9dcc-93a9-4e08-9213-559f7200b582} + + + {7d1b400d-8398-47ff-98db-180d1d8e6856} + + + {69b89007-db17-4fb5-8157-a7131be9b2b0} + + + {e320a0d1-b969-46bb-a1ce-a07ba1f6dca2} + + + {e52a6a4c-3126-48f2-b39a-93f600640c21} + {997c903d-73f4-48cc-869a-ab9e6be66a96} + + + {2c69e85d-e2d2-4207-a5e6-7d749c80a439} + + + {27df63c2-d999-428a-adc9-60b610c58825} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {29ab778a-4c29-464c-b04e-a0ecf0d005bb} + + + + + {29ab778a-4c29-464c-b04e-a0ecf0d005bb} + + + + + {7a8ae349-af1f-4f59-b2d5-59b637e50d69} + + + {c6060973-aef3-4edd-bb2f-8538a3c93cbb} + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + true + + + + + + {5f333ad5-7ed8-433e-9499-bf039935ca03} + + + {e59b710f-c074-49b9-a304-d6ead3830971} + + + + + {f83484c3-887e-43cc-9798-c5e710b71880} + + + {ba8fce40-6b52-495d-aafb-a6c8e0bcc252} + + + + + false + + + + + {5f333ad5-7ed8-433e-9499-bf039935ca03} + {f83484c3-887e-43cc-9798-c5e710b71880} + + + {b1dc55b5-1863-4645-a918-a52d80cb9c65} + + + + + {881f0668-6a13-46c3-9dec-e3aac724c3df} + + + {79716332-7c36-4d14-8635-0cc90c0b33fd} + + + {98ce4439-57a2-4f58-b2e7-9d2f43b849fe} + + + + + {603aa62a-aa98-43c1-86ac-3508abc834a2} + + + + + + 25.000001907348633 + + + true + + + {91877568-b52d-4491-b88e-909cb484d4b7} + + + {ee1a38af-7215-4e29-9e83-3be5fbc30239} + + + + + Heartbeat + + + {12e4bef3-4ae7-4dc3-ab2c-918395142b07} + + + {fd85d064-0c12-413e-aa83-a8c915da2130} + + + {29ab778a-4c29-464c-b04e-a0ecf0d005bb} + + + + + 25.000001907348633 + + + {87ea4134-fff1-4e9d-8f8b-294a2b518223} + + + + + Snapshot + + + {32b266bc-9af7-4808-bfa1-506777cc2067} + + + {21cd1417-ba80-4d5d-a932-ba56e2d56823} + + + {29ab778a-4c29-464c-b04e-a0ecf0d005bb} + + + + + {b9fbc7ba-3d84-4890-ad7d-5421fd193617} + + + + + + + volume + + + -80 + + + 0 + + + -80 + + + + + {85ed5024-67b1-43cd-ba69-2e565f654728} + + + + + + {0cb9e02c-636b-4ef9-9c12-37a7db7afcaa} + + + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{249ac74e-6ea4-4648-81da-206c4e22b801}.xml b/game/FMOD Project/Metadata/Event/{249ac74e-6ea4-4648-81da-206c4e22b801}.xml new file mode 100644 index 0000000..c85c468 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{249ac74e-6ea4-4648-81da-206c4e22b801}.xml @@ -0,0 +1,335 @@ + + + + + This is an example of an ambient event using a parameter with 5.1 surround looped sources. + +The "Hour" parameter is a labeled parameter with four values: + + "Night" + "Morning" + "Noon" + "Evening" + +The "Hour" parameter has an asymmetrical seek speed - it slowly ascends when the value of the parameter is increasing but instantly snaps when decreasing. This is to allow for time to "tick over" from Evening to Night. + +All four single instruments have an AHDSR modulation on the volume property, which allows for a smooth cross-fade between the instruments as they are triggered by the parameter's playback position. You can adjust the cross-fading by setting the modulators' attack and release times. + +The timeline parameter sheet is not being used so it has been removed. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#ahdsr-modulator + +Recordings by David at Track Time Audio. + + + Country + + + 5 + + + {b6770cc5-a214-4b8e-bc5e-d7983fee345a} + + + {2e193f8d-92b5-4f55-a7d7-fbd073e56354} + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {032932ee-4178-4241-a136-2450347dcb6e} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {cf457cc2-8cc5-4b8a-a10b-3437fa75fb20} + + + {22165439-dd04-48a0-a34e-7175c43f3f94} + + + {0ac453ed-debd-46c0-903e-1a5fc72edbec} + + + {678af1de-f0c0-437b-9bd3-da438f6166ef} + + + {b9f8fec3-d093-490c-8ea2-d989960cb20a} + + + {842f7623-3c3b-4193-892a-d3f878d1602a} + + + {f2e247ea-2157-4d46-b015-ccb56d5d8c9c} + + + {f4ffe6ab-786a-49e1-bb13-fde3fceffa4b} + + + {ad58c3a7-2bc9-0263-14d6-c1fa1cb73367} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {4a2f7650-9955-416f-8699-24a4b475878b} + + + + + {4a2f7650-9955-416f-8699-24a4b475878b} + + + + + {6d7e66c2-ef82-4f99-8a2a-efb9085ccf13} + + + {bac17b5c-96b3-46d9-95d9-af91d0bd73e7} + + + {d9982c58-a056-4e6c-b8e3-883854b4bffb} + + + + + true + + + 1 + + + + + + true + + + {826af8c9-9f5c-43b4-bb44-1baf24d38710} + {2b55c42d-9a83-4425-bfcb-8c2d7b2f5908} + {90d816b5-c5d6-431d-872c-c07dc1226d51} + {eaee7c89-ba7d-4f7d-91b3-dc9ecb256e5a} + + + {d60f3f9a-8342-4a53-b205-f7fe3edd9daf} + + + + + false + + + + + {826af8c9-9f5c-43b4-bb44-1baf24d38710} + {2b55c42d-9a83-4425-bfcb-8c2d7b2f5908} + {90d816b5-c5d6-431d-872c-c07dc1226d51} + {eaee7c89-ba7d-4f7d-91b3-dc9ecb256e5a} + + + {c5f5903c-d11f-4e44-8f2a-5563c7ed0f20} + + + + + {efafb580-f54d-4001-baa6-4b49e9eaf918} + + + {b783e3e9-7999-4771-858f-19e71ca86c5b} + + + {22165439-dd04-48a0-a34e-7175c43f3f94} + + + + + {1ab13b2a-83e0-4731-8a4d-29a4ed81d834} + + + + + + true + + + 3 + + + true + + + {ed044f0a-195e-4a5e-99ee-93b642d9f0cc} + + + {fa7e774a-b461-4367-bee7-f9f1cb94828a} + + + + + true + + + 3 + + + 3 + + + true + + + {43c4a78e-dec3-4b48-96ce-a82147f12f14} + + + {1bfd3984-d98c-4d64-974b-96412cda7b78} + + + + + true + + + 2 + + + 3 + + + true + + + {19161b21-dd29-47b5-afb4-2be3362d1a05} + + + {606253a6-3a90-48bf-9f09-4a503cae568b} + + + + + true + + + 1 + + + 3 + + + true + + + {786edb00-1e3f-4af5-9271-838d2e4db0fe} + + + {f976574f-4a3f-4226-ba7e-65548c337279} + + + + + Ambience + + + {0815e8f4-923f-4a2c-8bc5-c42414b800fd} + + + {59821b2d-cdc4-47b7-99da-39fbe2542165} + + + {4a2f7650-9955-416f-8699-24a4b475878b} + + + + + {9e29f584-47ad-4f43-a8a6-25764fd7fb35} + + + + + + + volume + + + -80 + + + 1750 + + + 5000 + + + 0.179758996 + + + -80 + + + + + volume + + + -80 + + + 1750 + + + 5000 + + + 0.197350994 + + + -80 + + + + + volume + + + -80 + + + 1750 + + + 5000 + + + 0.197350994 + + + -80 + + + + + volume + + + -80 + + + 1750 + + + 5000 + + + 0.215306997 + + + -80 + + + + + {e1e40e43-5ce1-4b53-a8b8-3d80da59d768} + + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{2a3e48e6-94fc-4363-9468-33d2dd4d7b00}.xml b/game/FMOD Project/Metadata/Event/{2a3e48e6-94fc-4363-9468-33d2dd4d7b00}.xml new file mode 100644 index 0000000..a2f8494 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{2a3e48e6-94fc-4363-9468-33d2dd4d7b00}.xml @@ -0,0 +1,142 @@ + + + + + This is an example of a simple one-shot 2D event. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#single-instruments + +Recordings by David at Track Time Audio. + + + Cancel + + + 1 + + + {660d8cf9-5917-44af-b2f8-ac4ec0c98f0d} + + + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {c993486d-84e1-468e-9f5a-d1b045016729} + + + {87704a8c-7c5f-43a8-9979-19bcf07e610f} + + + {805439ef-cb7c-42f0-b19f-7b6688367930} + + + {0c34e5a5-cd8d-4a1d-83ef-f12ea882360f} + + + {22cdd995-e7d5-473e-b107-104520d3ef00} + + + {da9ca4ac-71a3-47f3-a147-ff93e8435dd5} + + + {6cdf86d6-05c6-4f32-8af2-41f53876cc79} + + + {3219e035-6970-4ea7-abf5-d0bb16664040} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {c9b020d6-3af8-4b78-b5a2-7bdb822d0deb} + + + + + {c9b020d6-3af8-4b78-b5a2-7bdb822d0deb} + + + + + {c637bd0e-ed3a-480b-a3b1-c8e10ea94a40} + + + {f3421fef-e1fb-4050-8c5f-ee2c04ab91fa} + + + {670390e5-527e-4f22-8654-b0326c9cc0c6} + + + + + + + {bfcbadd7-f0b2-4d78-80cb-d4d3dbe76e0f} + + + {ad121de6-f245-4123-b9a4-dcb56503ac70} + + + + + {bfcbadd7-f0b2-4d78-80cb-d4d3dbe76e0f} + + + + + {96c97a70-c2e7-46ad-921c-75ec3a3ce8ee} + + + {3b57af93-81b6-4735-8534-8f8ae642f2bf} + + + {87704a8c-7c5f-43a8-9979-19bcf07e610f} + + + + + {2beb8f53-2cb9-4c01-835e-2a8742865c13} + + + + + + 1.02623 + + + 3 + + + {ba5858ca-421c-4ca0-a006-d05536a11587} + + + + + Cancel + + + {5315c805-bddb-4fbb-b6ee-44601001b42f} + + + {899ef6ef-24e3-45c5-a2a0-970df1b6986b} + + + {c9b020d6-3af8-4b78-b5a2-7bdb822d0deb} + + + + + {fc08902d-9563-48a0-b3ad-eeec624ba967} + + + + + + + {58c42d57-b6e3-49cb-8399-7b2e633e9fd1} + + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{43108f44-285c-4877-a785-4ae97ed0fb3d}.xml b/game/FMOD Project/Metadata/Event/{43108f44-285c-4877-a785-4ae97ed0fb3d}.xml new file mode 100644 index 0000000..b24db7c --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{43108f44-285c-4877-a785-4ae97ed0fb3d}.xml @@ -0,0 +1,230 @@ + + + + + This is an example of a one-shot event. + +In this event, there is only one multi instrument, which contains multiple door closing assets in its playlist. The multi instrument's volume and pitch properties each have a random modulator that provides further variations of the current playlist. + +The multi instrument is set to play asynchronously. This allows for playlist entries of different lengths to be played in their entirety, even once the playback position has left the trigger region of the multi instrument. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#multi-instruments + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#synchronous-and-asynchronous-instruments + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#random-modulator + +Recordings by David at Track Time Audio. + + + Door Close + + + 2 + + + {33020bd4-6815-4ed7-b787-bc0035017be4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {82335e52-0cc3-49ce-a11a-3333876d25d7} + + + {b3fdf7c2-8527-4686-b25c-f0191d594afa} + + + {7168e7cb-dc9b-4069-b5f1-45c90f4025e8} + + + {00c77f5c-1dac-4abd-aa71-4847d7801f95} + + + {bf1f005a-c589-45a5-afe8-7bc5d48d61ae} + + + {74b7a2d0-1d08-4ce5-8c44-271830fc0e59} + + + {e86e176c-eeea-49fa-9647-f0d02fd503b5} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {bda5988d-a70a-4c11-ba1c-458bc2058412} + + + + + {bda5988d-a70a-4c11-ba1c-458bc2058412} + + + + + {a5a24f84-0b3f-45b0-b1bc-a3e992a5d519} + + + {3b5f825d-c419-4a05-90b7-658bde062719} + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + + + {ae00a923-5ba8-465a-84fc-ce3ad2069415} + + + {05890cd7-7aa1-4131-a188-98c96c828963} + + + + + {ae00a923-5ba8-465a-84fc-ce3ad2069415} + + + + + {bfd044e7-8180-4e39-b14f-b57593e9db49} + + + {57c9a136-66a2-4598-8192-d4370bb71a18} + + + {82335e52-0cc3-49ce-a11a-3333876d25d7} + + + + + {972b2336-cfc5-41a5-b54e-7d55d78ead21} + + + + + + true + + + 0.65345799999999998 + + + 3 + + + {e58ba205-0dd1-40fa-a39f-49c2701d9d68} + {67f060ad-1d81-401c-b773-5ac81a7874f4} + + + {d959d31f-0b0b-420d-abe8-4936c9eb55df} + {dce1ae0c-d554-42c5-a33a-f3ba7d938610} + {14536b2f-5b5c-4f0f-b660-7c2ef1ffab7f} + + + + + Door - Close + + + {93e2ce5e-96ed-4832-b9c5-b0c392f400ee} + + + {6e2ef41f-7c1d-4e4f-bafe-e4ebeb9b6474} + + + {bda5988d-a70a-4c11-ba1c-458bc2058412} + + + + + {9f0da3bd-de53-45b5-89d7-730811c990b9} + {ca42aacf-4cca-4f8d-9fb5-fcee7881a47b} + {99c66809-2245-4f81-9f52-cb174b798a44} + + + + + + + pitch + + + 6.25 + + + + + volume + + + 2 + + + + + 0 + + + 3 + + + {e7569c8f-0dec-41e1-a1d2-7a1eaf173a95} + + + + + 0 + + + 3 + + + {60eb7ebd-aede-42be-ad30-1dd39f94a7ce} + + + + + 0 + + + 3 + + + {2eca3cc5-75f9-4a18-a50d-4737a928eda1} + + + + + {47b58bfa-5af6-476e-8cee-cc0e5d9090ef} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{43c41f87-701f-4c25-a9a1-c619ca106412}.xml b/game/FMOD Project/Metadata/Event/{43c41f87-701f-4c25-a9a1-c619ca106412}.xml new file mode 100644 index 0000000..7647dcf --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{43c41f87-701f-4c25-a9a1-c619ca106412}.xml @@ -0,0 +1,342 @@ + + + + + In this example we have an event that recreates the static effect of RF radios. + +The event is designed to use VO supplied by the game via an asynchronous programmer instrument. You can audition your own VO by selecting the programmer instrument and dragging a new asset into the placeholder section. + +To handle VO of different lengths there is a conditional loop region to keep the playback position steady until the programmer instrument has finished playing. + +The loop region condition is based on the "VO Sidechain" parameter value which is driven by a sidechain modulator. The sidechain modulator's input signal comes from the sidechain effect on the "VO" track. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#programmer-instruments + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#synchronous-and-asynchronous-instruments + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#sidechain-modulator + +The placeholder VO is from NASA's public library of space mission sounds. + +https://soundcloud.com/nasa + + + Radio Dialogue + + + 1 + + + {33020bd4-6815-4ed7-b787-bc0035017be4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {95d562e5-0dc1-428c-9296-79fa91967a77} + {5e618944-886a-41d0-96a0-a08198069cb1} + {bdccd9d1-5ce9-49be-94c0-ba0a070cb181} + {d04b5409-a5d8-48c6-bd2b-4ed1630f88da} + {0561d714-637a-45af-bd52-33501f57b446} + {c993486d-84e1-468e-9f5a-d1b045016729} + + + {c4720f4d-8e90-440a-92b1-aca7f3f98e99} + + + {c9d7529e-b74d-4be4-955d-521a088479d5} + + + {44eb7ec3-5309-4584-a3d3-cf4d8dc7f583} + + + {5baecdfc-e00a-4f74-828e-ef7d3f0229a7} + + + {d346022f-f33a-4bde-b1ba-e06c97b4d83f} + + + {5264606d-f2d5-4292-88fe-ce8f526dbeed} + {7b6324ca-f6aa-4e47-9974-47b410f32a69} + + + {c09ccfa7-4bb6-45be-86fb-5dd0ef8db779} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {86663d17-7b6a-4a84-8600-57306ade70fb} + + + + + {86663d17-7b6a-4a84-8600-57306ade70fb} + + + + + {5a5fb423-91c4-47f2-bc77-e7cb501c0a81} + + + {eba72f1c-8d7f-4679-9e4f-45a66baa2810} + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + + + {499ced5a-fd1d-4bdf-8486-7a41a1150211} + + + {d556481e-938e-4f38-8dab-06f7be43216e} + + + + + {92071b50-ce5f-021c-3aad-ee12f30b17df} + + + {e50bfe86-19a1-4bb9-8b24-b6fcc6a47229} + + + {934f213e-f1a1-4c5e-9c35-54392800bf6a} + + + + + {e50bfe86-19a1-4bb9-8b24-b6fcc6a47229} + {499ced5a-fd1d-4bdf-8486-7a41a1150211} + + + {843e0827-55ef-4445-890a-67f6b480f5f6} + + + + + {280c9354-404e-495a-9473-08f897cd8443} + + + {fcd6eb00-8b2f-4004-9d26-32e8fc27b0ef} + + + {c4720f4d-8e90-440a-92b1-aca7f3f98e99} + + + + + {dda6bbc3-2949-4e20-b45e-d4422b0d2b81} + + + + + + true + + + 0.28586400000000001 + + + 0.31775368245585678 + + + 3 + + + {f13d856d-91a9-4a5b-b645-f508432acb63} + + + + + VO + + + {84cd0f51-2b01-4b94-ba40-3b5d187d95fd} + + + {2015c846-658b-4e3c-ac55-0b63586d8c3e} + + + {86663d17-7b6a-4a84-8600-57306ade70fb} + + + + + {a2e9a0cb-6e42-4b07-8362-284868118c5b} + + + + + true + + + true + + + 0.99953297048732748 + + + 3 + + + true + + + {aae18b55-2024-4e67-a552-98e6fb37f0c6} + + + + + -11 + + + Static + + + {a2e9a0cb-6e42-4b07-8362-284868118c5b} + + + {4e05ae72-a0a9-47d6-8d5e-a270af9e1e3a} + + + {25439dac-f5bd-4398-8997-232597eb625a} + + + {86663d17-7b6a-4a84-8600-57306ade70fb} + + + + + 0.46176644931831656 + + + 0.13916042463760309 + + + {c09ccfa7-4bb6-45be-86fb-5dd0ef8db779} + + + {d346022f-f33a-4bde-b1ba-e06c97b4d83f} + + + {4c84941f-9338-4039-8f02-acc5a617e3f7} + + + + + {932faed1-c72f-4bcc-b616-121f897b11fe} + {5b93a9f6-5128-4296-bc12-3a9013066a32} + {bb7231cc-053a-4201-af64-7278e94947d2} + + + + + + + {5f4416ee-bd11-47fa-81df-afe55b0d5550} + {ebf609a3-1683-4b21-9b12-d49b35315615} + + + + + + volume + + + {448bd0e8-1a2d-44e4-b8d9-de2990e728ba} + + + + + {61c7f89e-aa0e-4e74-9937-6dc7017f21e7} + + + + + + 0.10000000149011612 + + + 1 + + + {b7450daa-aea2-40e5-9aec-40ae4936a328} + + + + + 0.800000012 + + + + + -18.5 + + + -74 + + + + + + + + {c09ccfa7-4bb6-45be-86fb-5dd0ef8db779} + + + {95cada1c-d263-43ea-992b-1aa431d52faa} + {0e535cab-77db-4ded-b322-fac64590c903} + {3178433b-ba9b-4ab2-9ac7-6fb913e52357} + {c6abd634-cff9-421f-ad1b-cdcbb0482f8f} + {16fa31d8-2e53-4f2e-af11-bfa67d21f851} + + + + + + 0 + + + 0 + + + + + 0.14117499999999999 + + + -20 + + + + + 0.61576500000000001 + + + -20 + + + + + 0.61876900000000001 + + + 0 + + + + + 0.114893 + + + 0 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{477410e5-4a6d-462e-bd1e-4d558ce488ec}.xml b/game/FMOD Project/Metadata/Event/{477410e5-4a6d-462e-bd1e-4d558ce488ec}.xml new file mode 100644 index 0000000..69c53c4 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{477410e5-4a6d-462e-bd1e-4d558ce488ec}.xml @@ -0,0 +1,1406 @@ + + + + + This is an example of a multi-layered ambience event using parameters, scatterer instruments, sidechaining, and automation. + +There are three parameters in this event: "Rain", "Wind", and "Cover". The timeline parameter sheet is not being used so it has been removed. + +The "Rain" parameter controls the volume of the "Rain Small", "Rain Medium", and "Rain Large" tracks. From parameter value 0.00, the birds scatterer instrument is triggered. When the parameter value reaches 0.20, the birds scatterer instrument is untriggered and the rain drop scatterer instrument is triggered, giving the rain drops a heavier sound. + +As the "Rain" parameter's value increases it blends the volumes of the small, medium, and large rain tracks. Towards parameter value 1.00 all three rain tracks become full volume and layered to give the impression of a lot of rain falling. The rain drop scatterer instrument's spawn rate increases to give the sound of more heavy rain falling. + +When the "Rain" parameter's value is between 0.80 and 1.00 the thunder scatterer instrument is triggered. With the scatterer instrument's polyphony set to 1 and stealing set to "None", only 1 playlist item can be played at any given time. Its min & max spawn interval settings ensure that a playlist item is only played every 10 to 38 seconds. The "Thunder" track contains a sidechain effect, which is attached to the sidechain modulator on the volume fader of the "Weather Submix" track. This means when a playlist item is played it ducks the rain and wind submix by 3dB to make the thunder cut through the mix better. + +The bird scatterer instrument also has a parameter condition based on the "Wind" parameter where the instrument triggers if the "Wind" parameter value falls between 0.00 to 20.00. Therefore, the scatterer instrument on the "Birds" track is only triggered when both the specified "Rain" and "Wind" parameter conditions are met. + +The birds, rain drops, and thunderstorm scatterer instruments have their min & max scatter distance settings set to 0. This causes the spawned sounds to play in 2D, rather than spatializing them as discrete 3D point sources relative to the listener. + +The "Wind" parameter controls the volume of the "Wind Weak" and "Wind Strong" tracks. The higher the parameter value, the more it blends the two tracks together. A multiband EQ effect on the "Wind Weak" track is automated to boost the low end to give the impression of the wind being more gusty. + +The "Rain Small", "Rain Medium", "Rain Large", "Wind Weak", and "Wind Strong" tracks are all routed to the "Weather Submix" track. The "Cover" parameter automates a multiband EQ effect on this track to lowpass when the player goes under cover. This method allows all affected tracks (in this situation the rain and wind) to get lowpassed using only one effect while leaving tracks that should not be touched (such as thunder) unaffected by this. + +There is a 0.15/s seek speed set on the "Rain" and "Wind" parameters for them to smoothly ramp up and down, preventing sudden changes in weather. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#automation-and-modulation + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#routing + +https://www.fmod.com/resources/documentation-studio?page=glossary.html#sidechain-effect + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#scatterer-instruments + +Rain recordings provided by Xue Qiao of BB Studio, Chongqing Qiaoya Music and Culture Co. Ltd. + + + Forest + + + 5 + + + {b6770cc5-a214-4b8e-bc5e-d7983fee345a} + + + {2e193f8d-92b5-4f55-a7d7-fbd073e56354} + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4588ab2a-071d-4015-b568-407ac4472c7e} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {bac8db8b-2092-43f1-9eb2-6f233db2d7a7} + {cf457cc2-8cc5-4b8a-a10b-3437fa75fb20} + {d04b5409-a5d8-48c6-bd2b-4ed1630f88da} + {0561d714-637a-45af-bd52-33501f57b446} + {c993486d-84e1-468e-9f5a-d1b045016729} + {bd5bac35-9143-4797-8e85-b42cd8ec2a6c} + {236a8681-4e37-498c-a1ea-c0e3819e7267} + + + {cfd69cec-26ce-4d54-a0b7-04ee19c86a6b} + + + {2df7e3f4-5003-4479-9cdc-41d8624c62c4} + + + {7b0a71bb-c0f3-421c-8267-f8da3e67a1a8} + + + {1a9c4d09-face-4748-9208-8aba9019c4a6} + + + {2557fb05-3a45-4f95-a6a3-21d669f13136} + + + {dcc882a9-cfec-4945-a118-6af4b1fb348c} + {79d2c286-50a6-4238-9274-7afba8b8b49e} + {5f834fa4-d4b8-4553-8f5e-5d8b48a78481} + {59d959cf-0530-4302-bbca-8ea555face44} + {5b741990-1420-436b-8ab4-285ef93e857e} + {780136db-ed4d-4541-add8-3c55686922df} + {916226a2-020e-440d-b3ad-6e8bbca442e7} + {98267401-6ef3-4003-8e78-ef8dc747385e} + {4afdce61-a7c7-4fe9-9f1d-b0bf51d9195f} + + + {a751d120-f9bb-4e13-aa3e-80299c66d553} + + + {8689c2ed-b204-4bdd-8f2c-c5f2bd611611} + {1412b0f6-5c6b-4fda-a56b-77d4f1d18e64} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {77d4d62b-136c-4600-b647-d25bda527f38} + + + + + {77d4d62b-136c-4600-b647-d25bda527f38} + + + + + {514207b6-4a71-434e-9bc9-916d94386924} + + + {22dea9c4-dfb1-43dc-b3ca-fd93fd198955} + + + {d9982c58-a056-4e6c-b8e3-883854b4bffb} + + + + + true + + + 3 + + + + + + {5b2437c5-5308-41f3-a1de-82985bebc8cb} + + + {47055aef-0223-4aca-8c5b-0b32ef65a7b2} + + + {8d16a035-a456-46a7-810f-836863543fd3} + + + + + {b817e92b-42d4-435d-a5c1-95c592b5ea57} + + + {376518f8-b0da-442b-90a7-e5dcba378f17} + + + {1cf79740-6d51-409e-9cf2-efa3e5c674ad} + + + + + {a2ae5dc1-abd0-4412-9b4a-d92263db39a3} + + + {55be617d-fbbf-4b39-ba1a-39474d518c53} + + + {0499342d-fe15-4011-9308-859104871d28} + + + + + {f62138f3-9fb2-4ce0-84f1-97025ff54176} + + + {5f8a58b3-9270-4017-a708-a4f2680c57a6} + + + {17043aaf-90cc-4ecc-bff2-e8bfaa50e271} + + + + + {8009be57-5abd-4ebc-8b75-745871f8b210} + {4e08ab7c-fda4-4493-97ec-53d38dc7b02d} + + + {55dac587-e21f-42d7-aad9-b2e7b151e10a} + + + {3d1f80b3-422f-457e-9988-5cbfd374aa60} + + + + + {510426b9-2184-4869-ac47-1491747c0987} + + + {7d61c7d6-65d0-4341-877c-431750338b69} + + + {902572fc-2bf7-46e6-8653-6c4d2f450b86} + + + + + {d5c1fb02-a3c8-4ede-bede-7391942dbd9d} + + + {e5082527-46b5-4e09-97b0-1a9423300400} + + + + + {0f525ddb-e617-4f24-a24f-e07142be8b71} + + + {5d0021bd-1872-4208-b687-97f5867cc2a4} + + + {79dee71e-b3e8-40f5-a2aa-89296052fe13} + + + + + {ef82f0a2-c95c-48e4-9a80-f325e34e134c} + + + {56ff1c8a-8a3e-4cec-bb71-fc21399ac9d5} + + + + + false + + + + + {5d0021bd-1872-4208-b687-97f5867cc2a4} + {ef82f0a2-c95c-48e4-9a80-f325e34e134c} + {376518f8-b0da-442b-90a7-e5dcba378f17} + {47055aef-0223-4aca-8c5b-0b32ef65a7b2} + {55be617d-fbbf-4b39-ba1a-39474d518c53} + {5f8a58b3-9270-4017-a708-a4f2680c57a6} + + + {4ad59307-2c9a-498d-b318-3a35d01c3b9c} + + + + + {7d61c7d6-65d0-4341-877c-431750338b69} + {55dac587-e21f-42d7-aad9-b2e7b151e10a} + + + {aa37dcda-6161-459d-bdf5-9400828f7ed3} + + + + + {c0f6ee04-a781-403e-9db2-2d63fe5409f5} + + + {364dbf4a-5883-49b9-8a65-5b493df3ef44} + + + {74979798-4390-4720-853d-3c98ce5eec7e} + + + {cfd69cec-26ce-4d54-a0b7-04ee19c86a6b} + + + + + {9aeee8f9-ce66-451b-b1b5-44f01ccab4a4} + + + + + + {d758d36a-c0b6-46a5-b798-726aec1379a0} + + + + + true + + + 0.01 + + + 0.98999999999999999 + + + true + + + {5b0b1223-5dec-4608-a338-e875c6dac16a} + + + + + Blue + + + Rain Small + + + {d758d36a-c0b6-46a5-b798-726aec1379a0} + + + {75045fef-a37f-4e78-a39e-c97f7699ea5d} + + + {c431d258-5f51-40ba-abe1-190d78d6a0d7} + + + {e5082527-46b5-4e09-97b0-1a9423300400} + + + + + {0b930664-ddee-4b63-aa29-1b736d779ddb} + + + + + true + + + 0.29999999999999999 + + + 0.69999999999999996 + + + true + + + {3ab35a5b-de8a-4b98-a912-086bdae6c2de} + + + + + Blue + + + Rain Medium + + + {0b930664-ddee-4b63-aa29-1b736d779ddb} + + + {5ae5b9e3-5b8a-4d7e-944c-433102e21a48} + + + {89159bc1-a5d9-4fdc-8088-25d698a96bae} + + + {e5082527-46b5-4e09-97b0-1a9423300400} + + + + + {04bfc372-e260-476e-b088-4b8d1c5a0c7a} + + + + + true + + + 0.57999999999999996 + + + 0.42000000000000004 + + + true + + + {6c57c270-56f9-4a8f-b829-94ad5c19e620} + + + + + Blue + + + Rain Large + + + {04bfc372-e260-476e-b088-4b8d1c5a0c7a} + + + {2cde92ac-249c-432d-adf0-af728fb2e316} + + + {93dbc61f-7c05-4a0b-b085-f04e4f980405} + + + {e5082527-46b5-4e09-97b0-1a9423300400} + + + + + {a02a93d5-f553-45fd-bb2e-8cfb3d06e6e4} + + + + + 0.20000000000000001 + + + 0.80000000000000004 + + + 32 + + + 3 + + + 80 + + + 240 + + + 0 + + + 0 + + + -20 + + + 2.20000005 + + + {a02a93d5-f553-45fd-bb2e-8cfb3d06e6e4} + + + {63461c9a-f293-4328-8f35-5d08055d8885} + + + + + Blue + + + Rain Drops + + + {572270bc-5e40-48aa-bcb7-5b9515e5d365} + + + {e56e2c65-41bb-462f-9c79-1dd4f9cb3d58} + + + {77d4d62b-136c-4600-b647-d25bda527f38} + + + + + {f70ebeec-8ecf-4864-9906-7f38ab4a6c19} + + + + + {fa05863b-6b88-4f01-82bf-47921de8e34b} + + + + + true + + + 0.01 + + + 0.98999999999999999 + + + true + + + {45d8239f-3e43-410a-9fe9-ba2618b62dd7} + + + + + Green + + + Wind Weak + + + {fa05863b-6b88-4f01-82bf-47921de8e34b} + + + {00d3966d-33b2-4c15-bead-32952072a345} + + + {2ca4351f-1c0e-4e02-ac61-e4228db022d7} + + + {e5082527-46b5-4e09-97b0-1a9423300400} + + + + + {e2835259-bc51-49b4-9455-bcf7b1ce8960} + + + + + true + + + 0.45000000000000001 + + + 0.55000000000000004 + + + true + + + {eaf9335d-bf65-45e4-9bf1-8da6faad8be2} + + + + + Green + + + Wind Strong + + + {e2835259-bc51-49b4-9455-bcf7b1ce8960} + + + {a9fbfadf-8dc6-4710-ac8d-6dd35072aaa6} + + + {7d6eec76-60e7-4c56-bf9d-2dd4c14c9d8c} + + + {e5082527-46b5-4e09-97b0-1a9423300400} + + + + + {5a6d92dd-1daa-4650-aa6f-7f62735a9e7d} + + + + + Red + + + Weather Submix + + + {3c2b97bb-bf4f-4961-bb81-b725bb967458} + {ad81e880-a338-4fef-82d8-2ae6e17fffe7} + + + {7c5510a9-9aa0-4862-b308-5840bc44804a} + + + {ed196378-1896-44e8-a5c2-d7559dcd1cf2} + + + {77d4d62b-136c-4600-b647-d25bda527f38} + + + + + {c4028b17-0f8c-417e-a5c6-af73d331107b} + + + + + 0.80000000000000004 + + + 0.19999999999999996 + + + 1 + + + 3 + + + 10000 + + + 38000 + + + 0 + + + 0 + + + -3 + + + 3 + + + {acbf7d80-1666-4bb6-a5d0-e63fd992ae3c} + + + + + Yellow + + + Thunder + + + {c4028b17-0f8c-417e-a5c6-af73d331107b} + + + {7c1ff5a8-c118-4809-9dc0-4817cc083b23} + + + {55b22107-b658-420c-b226-a7f9bd473606} + + + {77d4d62b-136c-4600-b647-d25bda527f38} + + + + + 0.19900001585483551 + + + 3 + + + 3 + + + 4000 + + + 0 + + + 0 + + + -40 + + + 1.20000005 + + + {02594444-e671-4fd9-9019-e172decfe888} + + + {8ab3f8d3-be84-4717-a080-6fe1ed8b8851} + + + + + Magenta + + + Birds + + + {38836ba1-b43b-4e58-ad44-b2fbbfe9b0ea} + + + {ca7e2590-21d5-41b2-949c-6a6f983190c8} + + + {77d4d62b-136c-4600-b647-d25bda527f38} + + + + + volume + + + -80 + + + 3000 + + + -80 + + + + + {046b6c5b-6daa-4a2a-9afd-a0d603b0d18d} + + + + + + + volume + + + {1fe002fe-6759-41d7-a145-7af6c610d7f7} + + + + + {f2009205-1c6d-46ef-bf0b-23bfd1b3173d} + + + + + + volume + + + {1f125e2f-21a0-499f-9066-5caedb9f1a1d} + + + + + {dd96ce20-26a5-474b-ad14-30391e105745} + + + + + + volume + + + {1d327088-210a-48a9-8d90-39b13f99c4d6} + + + + + {f0bc0c6a-55c9-4296-b0ed-5ebfdcdecbb9} + + + + + + spawnRate + + + {dc762ab3-f646-409e-be7f-1f61764a8d90} + + + + + {8ff4e09b-386b-4f5f-8b7b-88ae002e0b80} + {9908f997-0a32-433c-bf3f-70baa8cd58eb} + {c57ceb82-7f02-47c1-aa3b-75e83ffa2172} + {7871117b-dc08-41f1-9160-73856793ad06} + {0e97f00d-94b7-40a5-b2c0-92a069e3e3bc} + {939c509c-efa1-4b07-8ae1-6d6fdcdc24b1} + {ad029fde-ec9d-40ce-aa0e-f3678be776e3} + {c6027afe-f8fc-4e6a-a7b7-3aaec44c617f} + {43972d2c-760f-4096-b46c-56905152e07d} + + + + + {96ff02a2-269c-4036-8832-badc52c7b4d6} + + + + + + volume + + + {5f6ca443-046a-4d99-b640-f9c9dab6c7dd} + + + + + {9c828c33-e44b-4d01-a9a9-5c2f767067a5} + {49dec616-58ce-40be-a542-edcc2d380ee2} + + + + + + volume + + + {f95b8f53-954b-4272-bfc0-55426a3f30c7} + + + + + {f8ad2cb0-ce7b-4f10-be2d-fcbb6414ba73} + + + + + + volume + + + 3 + + + 250 + + + 540 + + + -64 + + + -16 + + + {01fe3eb2-0059-411e-bb83-bd3a6c79db30} + + + + + volume + + + 6 + + + 3 + + + -100 + + + + + {bdfe44cd-9d35-42d6-b278-31c5ce4dcb33} + {f719bff4-5965-4032-8697-5476148ab471} + + + + + + {1fb966e6-17cd-497e-9bbc-aecb7957450b} + {02f8e75d-659a-432e-b4c3-80f5774ae095} + {09be77cc-285c-41a2-a9d6-6d6e4396efdf} + + + + + volume + + + {9fc678ca-9322-403f-adce-fe4a50994323} + + + + + {b277fe39-b4a4-4f40-afd4-3f1040930461} + {01fe3eb2-0059-411e-bb83-bd3a6c79db30} + + + + + + 0 + + + 0.20000000298023224 + + + {aa37dcda-6161-459d-bdf5-9400828f7ed3} + + + + + Blue + + + true + + + 0 + + + 3 + + + {10daf1fa-38ae-4fba-8ed5-ddfc3bc7f5ea} + {2c2720d9-77ef-4b73-b76c-fd911a018254} + {64141d32-2506-4f98-87cf-fb9ea27c65f0} + {7478cfaf-2284-4c65-b244-50c9a879fb7e} + {6db25dfa-6df4-469c-8eeb-676698bcd8bd} + + + + + {b323ee1f-efb9-4f46-88f3-f4d86662b210} + + + + + + + {4ad59307-2c9a-498d-b318-3a35d01c3b9c} + + + {5855513f-942c-4b30-89d2-54f86e729fa0} + {ca62ad3d-3f08-4448-a00d-44a11b3f7647} + {34c9950f-b65f-468e-8a16-2aa7d75104af} + {6b47ffcc-d1a0-4cfa-802a-3cdc68f2fc3c} + {327df0a6-0d5e-4ef7-8a5c-fca346a22a88} + + + + + + {4ad59307-2c9a-498d-b318-3a35d01c3b9c} + + + {03442da5-c6c4-46b3-b504-e0b9c5d31132} + {6e8c69c3-5607-4137-bfa2-303898a792ae} + {10be0adc-20b6-47a8-ae0b-2159d8d1e32e} + {9b76a41a-1fca-43b7-ac5a-a978bb95ae12} + {8050d4af-eddc-4b59-8b49-57c8fc08f896} + + + + + + {4ad59307-2c9a-498d-b318-3a35d01c3b9c} + + + {5c194fde-c35e-43b8-a7d8-4d61b0b6ea3e} + {0df05d83-ba9e-47ce-82bd-d17ed27d7a22} + + + + + + {4ad59307-2c9a-498d-b318-3a35d01c3b9c} + + + {9214663c-4813-43dd-8328-530f1241fa37} + {8b3ee9ce-83e9-4b30-a5bb-8fca5b17331c} + + + + + {ec134d20-6674-411d-9de2-e17171a1c8b6} + + + + + {a75f5f38-02e7-4a07-906a-01c8590a2aec} + + + + + {3681a54d-c7a2-4184-82a1-920e699082e9} + + + + + {339915c8-2404-4404-b013-2480d786c2b5} + + + + + {2934eb11-26ef-4cd2-89d7-193ec90de972} + + + + + {0e612d6f-04e5-4ca9-be3f-d99e1a42e94f} + + + + + {cf0f54ab-0031-4b2c-8064-2c368fe68a3f} + + + + + {1f47a277-6854-47dc-9072-9ca7e84a522a} + + + + + {298eb873-1dfd-4722-8eb0-1b3a8abbe738} + + + + + + {aa37dcda-6161-459d-bdf5-9400828f7ed3} + + + {c22b280e-1ed2-4707-a133-694384c7ea17} + {9a7dd47e-76be-446f-bf1e-8c0274828894} + {07ff0241-3b53-41d8-81a8-2dd8d2669bf0} + + + + + + 9 + + + 155.543579 + + + 7336.98682 + + + 0.246517241 + + + 0.581413805 + + + {f70ebeec-8ecf-4864-9906-7f38ab4a6c19} + + + + + {aa37dcda-6161-459d-bdf5-9400828f7ed3} + + + {2c81f7d6-049d-4cab-ab6c-c80e01967648} + {724b5202-2606-4432-8dc9-7c417f008cb5} + + + + + + + 22000 + + + 0.25999999 + + + {5a6d92dd-1daa-4650-aa6f-7f62735a9e7d} + + + + + {84fa1aa7-e469-46f4-aeb5-b5343bf91c23} + + + + + {97098011-1a51-409c-b577-ec6c776b6d37} + + + + + {a13f6c8d-4928-42a2-80ec-131362bfac6d} + + + + + {4ad59307-2c9a-498d-b318-3a35d01c3b9c} + + + {9a1612d3-ac34-4fef-9475-2b917c0c4021} + {3de40424-309e-465b-a03e-96546a7761fd} + + + + + + + 0 + + + 3 + + + {098ad948-0b1b-4602-9662-7c887441233f} + + + + + 0 + + + 3 + + + {44e584d1-9271-4504-b359-b34aaa1b8dca} + + + + + 0 + + + 3 + + + {d190c941-7722-49de-a3d2-4eaf87525eeb} + + + + + 0 + + + 3 + + + {6bda59a1-d3c2-4179-8177-0d03e70bd9ed} + + + + + 0 + + + 3 + + + {5617817b-fc07-4aee-9c56-3d6b04e9c776} + + + + + + 0.42986054142739943 + + + -18.0999985 + + + 1 + + + + + 0 + + + -80 + + + -0.32327196 + + + + + 0.1509433946513257 + + + 3.81469727e-06 + + + + + 1 + + + 0 + + + + + 0.3297785031578031 + + + 0 + + + 1 + + + + + 0.88597210828548001 + + + -17.9999981 + + + + + 0.69938922360636502 + + + -18 + + + + + 1 + + + 0 + + + + + 0.42821985233798188 + + + 0 + + + 1 + + + + + 0.26415094339622647 + + + -80 + + + 0.5 + + + true + + + + + 0.51927809680065629 + + + -80 + + + 0.5 + + + true + + + + + 0.70268554183485543 + + + 0 + + + + + 1 + + + 500 + + + + + 0.20180475799835931 + + + 100 + + + -0.2874026 + + + + + 0.45281456796539993 + + + 0 + + + 1 + + + + + 0 + + + -80 + + + -1 + + + + + 0.60264900662251653 + + + -18 + + + + + gainA + + + {403c79c2-6ea9-4a3a-a349-1818a3c1e571} + + + + + 0.59933774834437092 + + + 0 + + + + + 0.3725165562913908 + + + -80 + + + 1 + + + true + + + + + frequencyA + + + {9492184c-8909-4afd-abfa-e9f20ca78195} + + + + + 1 + + + 0 + + + + + 0.80049668874172186 + + + -14 + + + -1 + + + + + {aa37dcda-6161-459d-bdf5-9400828f7ed3} + + + {4ee531d0-ee2c-4398-8d2a-2e0da71c8001} + {fcf9ccff-5d6c-48ec-a8b5-a394f269c7f6} + + + + + {362127ac-a587-47da-868a-fc86d66a6677} + + + {213a9291-5141-4fc2-9490-99d11dbfbe9d} + {09652108-7cbf-4d2e-8c2d-212ebf31f011} + + + + + 1 + + + 12.0000029 + + + + + 0.5943708609271523 + + + -6.10344696 + + + + + 1 + + + 2200 + + + + + 0 + + + 22000 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{62855218-a8f3-470f-ab7a-8af8f7df77bb}.xml b/game/FMOD Project/Metadata/Event/{62855218-a8f3-470f-ab7a-8af8f7df77bb}.xml new file mode 100644 index 0000000..de2a400 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{62855218-a8f3-470f-ab7a-8af8f7df77bb}.xml @@ -0,0 +1,242 @@ + + + + + This is an example of a one-shot event. + +In this event, there is only one multi instrument, which contains multiple door opening assets in its playlist. The multi instrument's volume and pitch properties each have a random modulator that provides further variations of the current playlist. + +The multi instrument is set to play asynchronously. This allows for playlist entries of different lengths to be played in their entirety, even once the playback position has left the trigger region of the multi instrument. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#multi-instruments + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#synchronous-and-asynchronous-instruments + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#random-modulator + +Recordings by David at Track Time Audio. + + + Door Open + + + 2 + + + {33020bd4-6815-4ed7-b787-bc0035017be4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {1b63d684-87f4-4af0-a2f5-62ac60725f7a} + + + {bec5e104-2e85-4b15-ab87-74afd1d541d8} + + + {3dcfe8a8-9489-4cf5-9fc7-220627e1355d} + + + {26eaffa6-6da4-4ca8-a284-3d38805fe19b} + + + {cf041cdb-9195-47ae-a6d8-9df96b651a5a} + + + {77134956-6732-4222-8bdb-8a8a5baee097} + + + {66bac925-bc4e-481b-957e-f31b850099d3} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {57f3ed8e-937c-4452-8fc4-bfd97d61b828} + + + + + {57f3ed8e-937c-4452-8fc4-bfd97d61b828} + + + + + {b89838aa-080f-4a53-8f83-e81c7e362649} + + + {73049af4-fa8e-47c6-aea8-41a22dc63366} + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + + + {e818562b-1768-48d4-a67e-dcdba74467af} + + + {c0dae7f9-1dde-463f-b44d-4c9fd4cd4423} + + + + + {e818562b-1768-48d4-a67e-dcdba74467af} + + + + + {51668f34-e4ff-4c83-b016-c0d22ace5486} + + + {9a4ad4df-435d-4e24-a061-e5494f612dc6} + + + {1b63d684-87f4-4af0-a2f5-62ac60725f7a} + + + + + {2e16e60f-a084-42cf-b39b-f99fa9b3380b} + + + + + + true + + + 1.2746900000000001 + + + 3 + + + {0ca7dc92-f450-4f5a-bddc-3c89968b31c0} + {c62fc0a3-f38d-437a-8d8f-a1320c12b865} + + + {8b57f256-0b85-45ab-b079-c6a75d4c861b} + {9cef5621-7d34-4854-99f6-6ab3f06feebc} + {762b68e5-e655-40b9-9536-aab96c2d6ff4} + {9534339f-8346-4c67-ad52-ee85d03c870f} + + + + + Door - Open + + + {ad796357-23e8-4785-9440-7dacea6979d1} + + + {27eaeaf2-a72d-41ff-a289-6b1bc0556769} + + + {57f3ed8e-937c-4452-8fc4-bfd97d61b828} + + + + + {c08fbf7c-bb54-49e7-8be0-4e257b8aceb6} + {2fcb459a-d47a-479a-a38c-927b02c3f3ff} + {f450e8bb-9346-4a48-be0e-ec612c6dc63e} + + + + + + + pitch + + + 6.25 + + + + + volume + + + 2 + + + + + 0 + + + 3 + + + {174ac79a-ba45-4b2c-b177-899938586232} + + + + + 0 + + + 3 + + + {2d4e8ea1-1423-441a-92f4-2fa486e993db} + + + + + 0 + + + 3 + + + {9181d009-e0c6-4195-bda2-6f0c48cd7d6c} + + + + + 0 + + + 3 + + + {917b5215-65d9-4942-92eb-69ed62676c32} + + + + + {0f9e09e8-f9d8-422b-99ad-0a48c6f75899} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{74bbba7c-76e8-488c-9cf9-67f000df1ffd}.xml b/game/FMOD Project/Metadata/Event/{74bbba7c-76e8-488c-9cf9-67f000df1ffd}.xml new file mode 100644 index 0000000..bf0c305 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{74bbba7c-76e8-488c-9cf9-67f000df1ffd}.xml @@ -0,0 +1,601 @@ + + + + + This is an example of a horizontal re-sequencing music event with quantized stingers and transition regions. + +Near the beginning of the event is a named loop region called "Start". This loop region has a condition that keeps the playback position looping for as long as the "Progression" parameter's value is "Intro". Once the "Progression" parameter's value becomes "Main", the playback position can progress further than the loop region. If the "Progression" parameter's value goes back to "Intro" while the playback position is within the green "To Start" transition region, it returns back to the "Start" loop region. The transition region is quantized to every 2 bars, meaning it will only transition while all conditions are met when the playback position touches a second bar interval. + +There are two single instruments on the "Sting" track. These instruments have a parameter condition which states that the instrument can only be triggered when the "Stinger" parameter's value is 1.00. They are also quantized to every quarter note. This means that when the parameter condition is met, it triggers the instrument but defers playing until the next quarter note interval has been reached. Unlike the transition region quantization, a quantized instrument will always begin playing at the next quantized interval after its conditions are met, even if those conditions are no longer true once the playback position reaches the interval. + +The "Stinger" parameter has a negative velocity of -4.00/s, which means the parameter value will continuously reduce until it reaches its minimum value after a value has been set. In this setup, the parameter value can be set to 1 each time a stinger is needed with no need to reset the "Stinger" parameter. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=welcome-to-fmod-studio.html#parameter-properties + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#trigger-conditions + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#delay-and-quantization + + + Level 01 + + + 1 + + + {c2692448-301e-417a-8ade-796c6589bfa4} + + + {2e193f8d-92b5-4f55-a7d7-fbd073e56354} + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {106b1d43-b29e-4938-8809-4868fd036d2b} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {95d562e5-0dc1-428c-9296-79fa91967a77} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4588ab2a-071d-4015-b568-407ac4472c7e} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {33fbfe3e-0e7c-47e1-8aa2-f7a0e9f78857} + {c993486d-84e1-468e-9f5a-d1b045016729} + {d6ff7340-ab69-44ca-97c8-39118d6593a1} + {0e5da2a8-064a-46b3-8a8f-07f007eb3c91} + + + {b17df152-6801-46a0-84df-b6c596ba2619} + + + {2763dd44-5d75-4875-a536-338382f14cd2} + + + {1565a24b-eb74-4e63-a44d-6dbab9543581} + + + {e2fcc771-45b3-478f-bcc7-2172c2804424} + + + {9846293c-d891-4d7a-8f92-57345fdb0f33} + {acf06f29-ebfa-4436-ad2e-de0308d4e9c1} + + + {2fc36585-1968-4a3c-ae0a-55864c573f42} + {a701244d-96f6-4266-ab80-f899919ec4b0} + {e9f9806f-6588-4058-9c20-6d7617be10f1} + + + {175a2507-76ed-4565-a440-28ecd5d5f1be} + + + {9ad4be16-4f5a-4e4c-a013-f35de106f106} + + + + + {b4da85c9-17e6-4c93-8910-702044fa8738} + + + + + {b4da85c9-17e6-4c93-8910-702044fa8738} + + + + + {f566de87-b10a-4b7e-9d5f-b6fd381b2ff3} + + + {c2e0d3cb-442a-4684-a140-01ce2bc07d6f} + + + {7e33a2b3-db05-4b7a-ba1e-e862f2bfde36} + + + + + true + + + + + + + {5f142c9e-6967-4946-95ae-f94b2407319d} + + + {cb573308-96e6-4a1b-978f-ffd4beaedd20} + + + + + {1f6222a1-7f0c-018c-0a58-fe3beab1a120} + + + {3fadbdbd-925e-438d-9268-e12933eb5091} + {72c90f3b-1844-479b-994c-335ced088626} + + + {abc6d8c8-e5d5-4c77-8f38-f59e37ecf91f} + + + + + {f3973893-7c77-48ac-960f-1624ff377de1} + {ee62a129-489f-47b9-b05b-75af928f7d2d} + + + {cec738de-f99f-4566-83cb-42be8144e558} + + + + + {f3973893-7c77-48ac-960f-1624ff377de1} + {ee62a129-489f-47b9-b05b-75af928f7d2d} + {3fadbdbd-925e-438d-9268-e12933eb5091} + {5f142c9e-6967-4946-95ae-f94b2407319d} + {72c90f3b-1844-479b-994c-335ced088626} + + + {be6b7254-c32f-41c6-8dca-e3a0a25fe59b} + {8f35e631-4f49-4aae-95f7-05a0a9741d5c} + {a919a6ac-b148-423f-951d-abc17659ef1e} + {fa90166a-e210-43a9-9110-8038692aa45a} + + + + + {1dd8fea7-df05-4cf3-ac29-981196d57d21} + + + {3bde9944-4234-4c3a-8619-f433f4216c0f} + + + {7edd88ae-fd1a-4cb5-976c-ca3c0ce7deae} + + + {b17df152-6801-46a0-84df-b6c596ba2619} + + + + + {d3231bf3-7cb3-48bd-9022-3ad0ce2153eb} + + + + + + 54.339599999999997 + + + 3 + + + true + + + {bd5b85ff-911a-413c-8506-6c21afdd58e6} + + + {8a80d319-7cc7-4d9f-ada0-d715e38def57} + + + + + Drone + + + {5831a361-00f7-4a06-b0ee-1d2e1c92b1d0} + + + {48239a6a-5039-4f78-b857-f1f8a7a92e00} + + + {b4da85c9-17e6-4c93-8910-702044fa8738} + + + + + {2f8c993a-df11-4897-b397-386171ab3aa4} + + + + + 9.0565999999999995 + + + 14.150906510399414 + + + 3 + + + true + + + {79de56ea-d5ec-4d30-ae62-0ad921924a2e} + + + {bed6ead0-dc7e-4700-80d3-6ffa01173ed0} + + + + + 18.113199999999999 + + + 36.226416666666665 + + + 3 + + + true + + + {75c69320-cf79-42d6-a21a-b1afea532857} + + + {bed6ead0-dc7e-4700-80d3-6ffa01173ed0} + + + + + Chords + + + {2f8c993a-df11-4897-b397-386171ab3aa4} + + + {f1eb8281-ef8a-4789-8889-a5588088cd47} + + + {daa8b07f-bbf9-4f73-bb49-d5ab87289680} + + + {b4da85c9-17e6-4c93-8910-702044fa8738} + + + + + true + + + 18.113199999999999 + + + 18.113199999999999 + + + 5 + + + 3 + + + {3cd0a128-3161-4112-8f85-8bdf708ca793} + + + {1559c18e-61fd-406c-88c6-43a1c9d64784} + + + + + true + + + 36.226399999999998 + + + 18.113199999999996 + + + 5 + + + 3 + + + {00e80884-59b6-4650-aa6b-b4477e590cb8} + + + {cca9bd5a-6d12-4f84-a1eb-307dc2188fcd} + + + + + Sting + + + {2e1e0655-2f5c-43cb-9c11-77f630c6aafe} + + + {f4bea47b-a7d6-4ff7-8e50-61d3d2dd56d7} + + + {b4da85c9-17e6-4c93-8910-702044fa8738} + + + + + 18.113199999999999 + + + 36.226399999999998 + + + 1 + + + {175a2507-76ed-4565-a440-28ecd5d5f1be} + + + {acf06f29-ebfa-4436-ad2e-de0308d4e9c1} + + + {fa90166a-e210-43a9-9110-8038692aa45a} + + + {c12ff3f1-db41-48d8-be34-3c3097903fb1} + + + + + 0 + + + 106 + + + {175a2507-76ed-4565-a440-28ecd5d5f1be} + + + {9846293c-d891-4d7a-8f92-57345fdb0f33} + + + + + 27.169799999999995 + + + 27.169799999999999 + + + {175a2507-76ed-4565-a440-28ecd5d5f1be} + + + {9846293c-d891-4d7a-8f92-57345fdb0f33} + + + + + 2.2641509433962264 + + + 4.5283018867924536 + + + Start + + + {175a2507-76ed-4565-a440-28ecd5d5f1be} + + + {acf06f29-ebfa-4436-ad2e-de0308d4e9c1} + + + {05c2e4db-c26a-48e9-889e-e1bb40ee73fe} + + + + + volume + + + 0 + + + 2264 + + + -80 + + + + + {37fbbdb8-16d3-49f9-95c9-f7d2c22125b7} + + + + + + + {5af14911-0921-4d8c-acb5-3e06a92d024c} + + + {1ba52d06-a54f-40e5-8f11-4e24e29f91f7} + + + + + {096364d2-4987-44df-89fd-a6f8f78eaf8b} + {df6599aa-ab75-4bde-bc79-033274861f64} + + + + + + {17a8f947-9304-45be-b6db-11dc6e9cf460} + + + {89e09c40-c58c-4d3b-99fd-4426d051c920} + + + {72c90f3b-1844-479b-994c-335ced088626} + + + + + {41951268-65a0-4275-b0b6-ef1e3c9221a7} + + + {09d5e0b4-3576-4e20-88e9-7ca485ca7343} + + + {3fadbdbd-925e-438d-9268-e12933eb5091} + + + + + volume + + + {3fab6f43-94bd-4810-8b79-3e600459dbcf} + + + + + {cd8b9ef9-2d61-4a82-a0cb-76756d5f905e} + + + + + + 1 + + + 1 + + + {b045090a-b061-4c45-90d8-54a5c15e2188} + + + + + 1 + + + 1 + + + {b045090a-b061-4c45-90d8-54a5c15e2188} + + + + + {a7632091-1346-40ed-b4b7-21f0430f1eec} + + + + + + 0 + + + 0 + + + {25a540fc-fedb-48d6-8e2f-c51e3cbea5b0} + + + + + 0 + + + 0 + + + {25a540fc-fedb-48d6-8e2f-c51e3cbea5b0} + + + + + + 0 + + + 0 + + + -0.2547189 + + + + + 2.2641509433962264 + + + 1 + + + + + + + 18.113199999999999 + + + 1 + + + 0.254718989 + + + + + 23.207506510399412 + + + 0 + + + + + 18.113199999999999 + + + 0 + + + -0.254718989 + + + + + 23.207506510399412 + + + 1 + + + + + {175a2507-76ed-4565-a440-28ecd5d5f1be} + + + {e9d3bd89-91f3-47c1-9e85-8f4cc8ce7af9} + {80c2b598-ae3f-4ffe-95f8-7b0d3e7523b8} + + + + + + + 23.207499999999996 + + + -5.49999619 + + + + + 9.0565999999999995 + + + -80 + + + -0.442227989 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{7aa5e8f1-8ec2-42c6-b465-1241a603a055}.xml b/game/FMOD Project/Metadata/Event/{7aa5e8f1-8ec2-42c6-b465-1241a603a055}.xml new file mode 100644 index 0000000..0501a66 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{7aa5e8f1-8ec2-42c6-b465-1241a603a055}.xml @@ -0,0 +1,947 @@ + + + + + A basic two-parameter engine where "RPM" is the rotations per minute of the engine and "Load" is the amount of load the engine is under, from -1.00 to 1.00. + +The timeline parameter sheet is not being used so it has been removed. + +The instruments on the RPM track use Autopitch modulators, which use the fundamental frequencies of those loops. The transition between on and off load is achieved using volume automation. A distortion effect on the master track also adds some extra bite to the sound when the load approaches 1.00. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#autopitch-modulator + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#automation-and-modulation + +Recordings by David Nichols of Track Time Audio. Engine is a 1988 Craftsman II 16HP lawnmower. + + + Ride-on Mower + + + 2 + + + {24af3eef-4e1a-46c4-98e7-5211bb3a531c} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {1b2729a6-7abf-4220-9cbc-a415743f03d6} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {c993486d-84e1-468e-9f5a-d1b045016729} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {9aaf46f5-9be2-4e16-ab8a-63a688316adb} + + + {f17f59ec-069e-4b01-9100-e363ff965769} + + + {9c7e8a7b-f972-4178-b145-518d110d2f69} + + + {a025d556-71e6-46dc-8b15-29e8bf95dfec} + + + {b7966369-4c11-43d1-9ad0-7e7774c5c9ac} + + + {a79b361f-e88e-4aa0-aae9-aafdb4ad463c} + {00f8d28b-026a-4a3d-8c6a-4bad93b39037} + + + {6a524f5e-6e76-4c7b-b84b-f77a700051a5} + + + {4f3c2cf8-29c0-0361-0e5c-36e8f36584ea} + {89d0e20e-eb47-4891-83b1-65406223d5b5} + + + {34f54f36-2a90-4a3c-a280-e09632cf8257} + + + + + {1fac4b7c-c303-4771-af2a-0f31da764575} + + + + + {e931fc7a-7f6a-0f9e-3b5f-35bdc202f8f6} + + + {1fac4b7c-c303-4771-af2a-0f31da764575} + + + + + {13629fd2-f9c1-43a1-905a-07991fc2e5ae} + + + {444eaee5-b7d9-490d-ba5a-c70fa2dbbd0a} + + + {37ebea86-d649-4a7a-b7b5-25701bfce8e9} + + + + + true + + + + + + {855bcb1c-4309-0625-2e92-74263e4e2a2c} + + + {440f93b0-47ea-4930-915f-ee90dba53043} + {4850e341-4861-4d8e-8590-fb9d3653b1b6} + {a8d21446-73ea-4c12-92ef-2a80d7d09bdb} + + + {91240137-d929-4cb6-8fc8-0d4868376c40} + + + + + {3c3167e7-2250-014d-335a-1aef10e1e30f} + + + {cda5e2a2-f513-4193-83b6-a46c77172b6c} + {78b43e7b-8172-476e-893c-8e03e16c3584} + {cfdeb932-2637-45b5-9466-b46b8f233999} + {c77bf38f-3394-49f0-8902-0c009f42f270} + + + {fb5c4003-f776-4887-b16b-f0fc6458c48b} + + + + + false + + + + + {cda5e2a2-f513-4193-83b6-a46c77172b6c} + {440f93b0-47ea-4930-915f-ee90dba53043} + {4850e341-4861-4d8e-8590-fb9d3653b1b6} + {a8d21446-73ea-4c12-92ef-2a80d7d09bdb} + {78b43e7b-8172-476e-893c-8e03e16c3584} + {c77bf38f-3394-49f0-8902-0c009f42f270} + {cfdeb932-2637-45b5-9466-b46b8f233999} + + + {27917f63-d316-4f46-95a0-a271283fb8ad} + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + + + {e0819f7b-a358-475f-8b42-ea31a43be588} + + + {b491ed34-05cf-466d-82c2-9680fed87a84} + + + {9aaf46f5-9be2-4e16-ab8a-63a688316adb} + + + + + {d9df47e1-df77-4685-8290-f3e759186372} + + + + + {0ee98f85-7edd-417c-8d7c-4254b97fe3ee} + + + + + + {b5b57087-e314-4f3e-975d-b27ca554b1a8} + + + + + true + + + 1050 + + + 950 + + + 3 + + + true + + + {8d589e63-43f0-479f-b710-f55cf74d9ef6} + + + {0ffa4417-0d99-4801-b970-6e08a49e0c7a} + + + {22b88e80-3684-43a2-87ab-35b42750d683} + + + + + true + + + 250 + + + 650.00006103515625 + + + 3 + + + true + + + {3c6450f0-6e12-44dc-ae23-df73fadf9be7} + + + {a2ab8b5b-2d9d-4fb9-9005-2c689bd1f6a9} + + + {b4dcd0d4-9d84-433b-abf4-77a4ce7e0071} + + + + + true + + + 800 + + + 800.0001220703125 + + + 3 + + + true + + + {89cc6950-4212-42ee-8152-9e0ccb915c1a} + + + {d95c8bb6-d717-4823-906c-db03058b0e22} + + + {5b36f22e-8735-4ee2-9619-1740acb22807} + + + {94106a5a-92de-4da5-9542-368afa003311} + + + + + Exhaust_Onload + + + {b5b57087-e314-4f3e-975d-b27ca554b1a8} + + + {997de3a7-e06b-4777-9b84-b5d863f5cd6a} + + + {d93d7f85-2889-4fc8-b2d7-ad3c19b415f4} + + + {1fac4b7c-c303-4771-af2a-0f31da764575} + + + + + {0cdfdc7c-824d-4856-8a95-dcb58bfb788b} + + + + + true + + + 550.00006103515625 + + + 3 + + + true + + + {7e010226-e9f5-4f74-98c5-e2b976ca5434} + + + {5776e796-c494-4e02-8e80-e925846ca3a8} + + + {880bde4b-f203-44a8-9a42-b1a97ddb2670} + + + + + true + + + 800 + + + 850.0001220703125 + + + 3 + + + true + + + {eb780b76-052f-49c5-a187-875913291651} + + + {13464464-5b30-4fec-aee8-cfed50c30e50} + + + {2189e4d0-c0e4-4797-a3cc-f32c467c930c} + + + {a6925868-56b6-4fa3-b118-5cefa17cff42} + + + + + true + + + 400 + + + 900.0001220703125 + + + 3 + + + true + + + {19c03283-b2e3-4dc8-b815-c217f606f8e4} + + + {0aa58741-996e-433b-a52d-5b483fe3c52b} + + + {5404286b-ebd1-4300-b34f-c2a40a286f12} + + + {3788be09-5587-4e8e-bf3c-39db17025fa6} + + + + + true + + + 1350 + + + 650 + + + 3 + + + true + + + {eff10498-42d6-45de-91dc-e1fa69365942} + + + {3f29afe5-fe89-4e20-bd16-5f3e79ff590c} + + + {8c668482-c4e4-4abc-967b-4ee5bd208a2a} + + + + + Exhaust_Offload + + + {0cdfdc7c-824d-4856-8a95-dcb58bfb788b} + + + {ecf7960d-5fe3-466a-8a57-9606bba089c5} + + + {3558cbf5-3eba-45e1-a798-cc0a536276e3} + + + {1fac4b7c-c303-4771-af2a-0f31da764575} + + + + + {d9d404d4-3350-4450-a255-6dd24b5e0a63} + {5d92703a-c8ef-4426-9082-dcaaf7d770f4} + {54b7ebea-1067-4dbd-a180-6bba7a07d25b} + {8cadb2fc-3fc7-4b80-ac15-3a3c571b6638} + + + + + + + pitch + + + 1604 + + + + + {06ba7cb2-0e48-41ee-92f9-4ac02b300004} + + + {3423f124-a0d5-4a90-8f63-26ecc588e7ed} + + + {a8d21446-73ea-4c12-92ef-2a80d7d09bdb} + + + + + pitch + + + 879 + + + + + {64073a8c-c4cd-43b6-b113-3049ab15655d} + + + {5fbd0799-1a98-4194-91fc-6cffae88bbfa} + + + {a8d21446-73ea-4c12-92ef-2a80d7d09bdb} + + + + + pitch + + + 1121 + + + + + {5b1d9d0f-571c-4cec-9f1e-1eaab8ec81e6} + + + {78120228-e892-4dcd-a0e6-647a8a646907} + + + {4850e341-4861-4d8e-8590-fb9d3653b1b6} + + + + + {49f0aae1-74d0-43af-83cb-b644cf665b9c} + + + {c646dd8c-4735-4690-8a88-2ec14c53f9c0} + + + {440f93b0-47ea-4930-915f-ee90dba53043} + + + + + volume + + + {4eef3567-e501-47b3-8d09-466ac4562db1} + {649abbd1-7c3a-4230-89e0-0d9426fb6f41} + + + + + {3a2fc8b2-ae1f-441b-a50e-2c8bda059201} + + + + + + pitch + + + 400 + + + + + {e6e0492a-6229-42c4-98c6-887bd852e57d} + + + {d35a0a62-7c77-4dde-bfc8-15593d56a716} + + + {cfdeb932-2637-45b5-9466-b46b8f233999} + + + + + pitch + + + 1406 + + + + + {8290c304-5d92-407e-9e55-601f37725a08} + + + {f0a6e3b3-4db1-4c5e-93fd-96288275beba} + + + {cfdeb932-2637-45b5-9466-b46b8f233999} + + + + + {63f4c3a2-367b-49b5-aab7-c8b1defa5b6d} + + + {dd46dcba-c099-4542-9104-2c00aeb6a12b} + + + {c77bf38f-3394-49f0-8902-0c009f42f270} + + + + + pitch + + + 945 + + + + + {dd3eb169-3db4-47c1-b5e7-4568423a3d63} + + + {ae07c3e4-4492-4753-9b77-c28f0e3e8dbf} + + + {cda5e2a2-f513-4193-83b6-a46c77172b6c} + + + + + {e3e7e6c7-1af9-45dc-8210-c8cf7208001b} + + + {36e587b5-c5be-4dc4-9ff8-5f18db10ffe4} + + + {78b43e7b-8172-476e-893c-8e03e16c3584} + + + + + pitch + + + 1641 + + + + + {6cca5d17-ca0d-4d27-81d5-0c4c778d9792} + + + {199a04da-682d-4ead-a722-b00bb2a96a95} + + + {78b43e7b-8172-476e-893c-8e03e16c3584} + + + + + volume + + + {1d480c08-a136-4170-8d28-72b4688dcd8f} + + + + + {ba55062d-e3f2-447e-864e-0cb29d4bc022} + + + + + + 0.395000011 + + + {d9df47e1-df77-4685-8290-f3e759186372} + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + + 1050 + + + 0 + + + -0.254718989 + + + + + 1600 + + + 1 + + + + + 800 + + + 1 + + + 0.254718989 + + + + + 900 + + + 0 + + + + + 800 + + + 0 + + + -0.254718989 + + + + + 900 + + + 1 + + + + + 1050 + + + 1 + + + 0.254718989 + + + + + 1600 + + + 0 + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {5f92a7c0-b8b4-444c-8662-1ad09c707f83} + {5be09e9c-ea32-4501-aee5-d4b3416aae84} + + + + + {27917f63-d316-4f46-95a0-a271283fb8ad} + + + {62266c93-48d0-4e8a-9205-7e964f079ad3} + {093eb6a0-45ce-4473-9c36-c31bbb222473} + + + + + + 400 + + + 1 + + + 0.254718989 + + + + + 550 + + + 0 + + + + + 800 + + + 0 + + + -0.254718989 + + + + + 1300 + + + 1 + + + + + 1350 + + + 1 + + + 0.254718989 + + + + + 1650 + + + 0 + + + + + 400 + + + 0 + + + -0.254718989 + + + + + 550 + + + 1 + + + + + 800 + + + 1 + + + 0.254718989 + + + + + 1300 + + + 0 + + + + + 1350 + + + 0 + + + -0.254718989 + + + + + 1650 + + + 1 + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {152f2d42-7eec-469d-9e7a-7187749abfc8} + {23226d4d-31da-43e4-bd8f-1966e207fc62} + + + + + + level + + + {4ab9e2da-d86b-4c34-8a01-38b804dee18f} + + + + + -1 + + + -29.9713993 + + + -0.81002897 + + + + + 1 + + + 0 + + + + + 250 + + + -80 + + + -0.131187007 + + + + + 400 + + + -0.240002006 + + + + + -1 + + + 0 + + + 0.323011011 + + + + + 1 + + + -30 + + + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + {d7197947-02b2-4758-b0ea-d46ab63f62b7} + {db4f7cb6-1cc1-4d64-904b-67cc0d98da00} + + + + + 1 + + + 0.200000003 + + + + + -1 + + + 0 + + + 0.398808002 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{92479e97-94c6-4564-9e33-efbeec59b34a}.xml b/game/FMOD Project/Metadata/Event/{92479e97-94c6-4564-9e33-efbeec59b34a}.xml new file mode 100644 index 0000000..498644f --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{92479e97-94c6-4564-9e33-efbeec59b34a}.xml @@ -0,0 +1,142 @@ + + + + + This is an example of a simple one-shot 2D event. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#single-instruments + +Recordings by David at Track Time Audio. + + + Okay + + + 1 + + + {660d8cf9-5917-44af-b2f8-ac4ec0c98f0d} + + + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {c993486d-84e1-468e-9f5a-d1b045016729} + + + {f13973bb-f9d8-4748-be12-74bbb1dc6700} + + + {38fc55db-bdd7-42cd-a625-a9d982756d5e} + + + {ce06d280-498b-4587-880e-4e827f407680} + + + {2e0beb85-dc56-4cc2-b6b3-fbb66bea9fe0} + + + {fd57869f-42f6-44a1-b4e8-10ddaaf5d135} + + + {54401f12-69d3-42aa-9ac6-68d6710a1849} + + + {23ec186f-0a2d-4de9-b271-99a2fb18e50d} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {accda771-9c72-4199-8492-478631c3f921} + + + + + {accda771-9c72-4199-8492-478631c3f921} + + + + + {f10a3788-11f8-4ec5-985c-692afdcfdc59} + + + {913bf796-cdbf-422b-95a3-09ffbc272dfe} + + + {670390e5-527e-4f22-8654-b0326c9cc0c6} + + + + + + + {ba12f4d3-3c15-42ca-b2a9-af3a888f6060} + + + {4fd1c63b-08aa-4cf5-bdaa-64bd803b7d12} + + + + + {ba12f4d3-3c15-42ca-b2a9-af3a888f6060} + + + + + {ad18679f-d1de-4453-85cf-cfe4498abec6} + + + {ef8f9954-cb0d-4cb8-beb5-75b66f26ef8b} + + + {f13973bb-f9d8-4748-be12-74bbb1dc6700} + + + + + {ab4adc16-8c3f-4880-91c7-55107bbaab06} + + + + + + 0.91754199999999997 + + + 3 + + + {ebd26610-c9bf-4a6b-9bff-328512f54359} + + + + + Okay + + + {9ab20f29-6434-4fca-b99b-e519b2d70b30} + + + {be46f009-6b0f-437f-92c7-a6a3669282f6} + + + {accda771-9c72-4199-8492-478631c3f921} + + + + + {125fd0e0-12f8-440b-b559-3d453307bdd7} + + + + + + + {0b89d8d8-e82d-4dc3-871c-2e88a73b285c} + + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{9aa2ecc5-ea4b-4ebe-85c3-054b11b21dcd}.xml b/game/FMOD Project/Metadata/Event/{9aa2ecc5-ea4b-4ebe-85c3-054b11b21dcd}.xml new file mode 100644 index 0000000..9f51888 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{9aa2ecc5-ea4b-4ebe-85c3-054b11b21dcd}.xml @@ -0,0 +1,170 @@ + + + + + This is an example of a simple one-shot programmer instrument event. + +The programmer instrument is an instrument that generates callbacks when triggered and untriggered. These callbacks can be used to play any audio files the programmer chooses, including audio files not a part of the FMOD Studio project. + +This is especially useful for games that have a lot of dialogue. Rather than having an event for each line of dialogue, which can make a project very large, all loose dialogue files are bundled into an audio table. This audio table is built into a single bank file. The audio files in an audio table can be used by the programmer instrument when needed. + +Audio files (such as dialogue lines) can be of differing lengths, so in these situations it's important to set the programmer instrument to asynchronous to allow the audio file provided to play out in full. + +In the banks browser, you can find a folder named "Localization". This folder contains three banks ("Dialogue_CN", "Dialogue_EN", "Dialogue_JP"), each containing an audio table. Using a "keys.txt" file provided with each audio table, it is possible to customize what the key needed to call each audio file is. This is useful for localization where a single key can correspond to each language's required audio file. For example, setting the key to playback as "welcome" can mean "cn_welcome.ogg", "en_welcome.ogg", or "jp_welcome.ogg", depending on which bank is currently loaded. + +The loose audio files and keys.txt files can be found in the "Dialogue" folder found in the root folder of this project. + +You can see an example of how programmer instruments and audio tables work together in code in the "programmer_sound.cpp" example provided in the FMOD Studio API installation folder. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#programmer-instruments + +https://www.fmod.com/resources/documentation-studio?page=advanced-topics.html#audio-tables + +https://www.fmod.com/resources/documentation-studio?page=advanced-topics.html#keys-file + + + Dialogue + + + 2 + + + {33020bd4-6815-4ed7-b787-bc0035017be4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {bdccd9d1-5ce9-49be-94c0-ba0a070cb181} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {73b006c1-0dff-4c01-8383-8ab31c3f0b4c} + + + {9f584589-d8a3-4251-a0e2-dc3d5ac990c0} + + + {03f92815-b960-4318-aeca-8034c13ec3f2} + + + {6107d850-42ea-4834-9e99-dac880058b70} + + + {f33d8aa5-2f0f-460e-abce-745f42b3d638} + + + {a2c8c9e2-e8c4-4ad7-957d-7463089b62ed} + + + {deaf5049-0e49-4b1e-aae6-94f81db0b13b} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {30e63582-32fe-4cfc-bc0a-ddae1d2272d4} + + + + + {30e63582-32fe-4cfc-bc0a-ddae1d2272d4} + + + + + {62d29c9d-bd2f-46ac-8dea-c37c666f3cfd} + + + {c22e5355-cc4a-43b4-988c-d26d18e70f4a} + + + {7589b205-d939-45b9-876e-d919a3042e6f} + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + 3 + + + + + + {004144b0-8106-4783-b4f6-701edacbf497} + + + {de21aff8-f9ff-4c99-bec5-6e7387639aab} + + + + + {004144b0-8106-4783-b4f6-701edacbf497} + + + + + {ab56c049-fb9f-430f-bc6d-3f1ad15d42d5} + + + {e9190bba-df27-47a1-bf32-c00df66ca392} + + + {73b006c1-0dff-4c01-8383-8ab31c3f0b4c} + + + + + {742cf130-5307-4481-bd9f-8eb9768d50e4} + + + + + + true + + + {77ec3f05-d9fc-41af-8644-c371efdb068c} + + + + + Dialogue + + + {24a5f8e5-1241-4398-9034-5e95b557f9bc} + + + {c5657276-6879-4571-b34a-3fc198c978b0} + + + {30e63582-32fe-4cfc-bc0a-ddae1d2272d4} + + + + + {c74da000-473f-4416-85d3-85ecbcdf03a3} + {21ed8a7c-8342-4362-ab3b-3605160dc5e1} + + + + + + + {310ce75c-b1b8-4ff0-8063-2aafd6569528} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{a7b81216-fb0b-4b9c-9e7d-b897825d9821}.xml b/game/FMOD Project/Metadata/Event/{a7b81216-fb0b-4b9c-9e7d-b897825d9821}.xml new file mode 100644 index 0000000..147e467 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{a7b81216-fb0b-4b9c-9e7d-b897825d9821}.xml @@ -0,0 +1,158 @@ + + + + + This is an example of a simple one-shot 2D event and user properties. + +In the user properties, seen in the "Overview" section on the right hand side of the event, this event has a "subtitle" user property with a string containing subtitles associated with it. When using the FMOD Studio API, it is possible to retrieve the value of "subtitle" which can be used to display the associated text when the event is played. + +https://fmod.com/resources/documentation-api?page=content/generated/FMOD_Studio_EventDescription_GetUserProperty.html#/ + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#single-instruments + + + Main Menu + + + 0 + + + {f9405a0f-f7a4-4ff1-91bb-e954833f9503} + + + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {c993486d-84e1-468e-9f5a-d1b045016729} + + + {9acc4d73-673e-4eab-9d54-f66fe909c955} + + + {70f25c72-0b20-48d4-ac83-809f95454c4a} + + + {2bbee5b2-c9f8-47de-b142-a005ea04aa95} + + + {cf8e853d-5306-45ee-b8b2-037a1db5d3f3} + + + {75009a5f-32d8-4b2c-9b00-bb556ec077e1} + + + {a3f85c56-c23d-4e1c-aa55-9edd2f650ca8} + + + {cba6f8d4-cb22-4d3d-abaf-e3cca072df92} + + + {fc2f8128-c183-4ee5-b735-0a6ffc162a0d} + + + {d6e4340a-dfdb-4393-b4dc-b55091d858cd} + + + + + {69cd63f2-761d-4c36-9752-c45d634df801} + + + + + {69cd63f2-761d-4c36-9752-c45d634df801} + + + + + {fff1fc77-76c4-44e7-be2d-7f3ba53b2e0c} + + + {566b7cf8-848b-4739-a038-7f9eab1d28cc} + + + {69d0d47a-7f4b-4d6c-bfc3-bda91e9f7f1f} + + + + + + + {5f8ca9e5-7b3f-4ec0-937c-25e56113a2d9} + + + {76a0afc1-ad45-4b70-bfda-cc0061c992f9} + + + + + {5f8ca9e5-7b3f-4ec0-937c-25e56113a2d9} + + + + + subtitle + + + This is the main menu. + + + + + {18921439-e839-441f-9df3-40a0786ee6fd} + + + {bc848a87-5028-4f14-ac0a-27e9bb0dd8fc} + + + {9acc4d73-673e-4eab-9d54-f66fe909c955} + + + + + {c155aa54-1700-48e5-8f29-bda20b58c602} + + + + + + 1.85917 + + + 3 + + + 6 + + + {a5a5d9ab-79f7-4e1e-a8da-52f7dc79e5e5} + + + + + Main Menu + + + {8c82b84b-42f0-4805-9723-ce044c841e59} + + + {1c6f795f-5c31-4b8e-bd92-7cbb16395eed} + + + {69cd63f2-761d-4c36-9752-c45d634df801} + + + + + {33757baf-6ddb-49a3-89a0-2a0c0ae95fe2} + + + + + + + {f9714db0-7c7a-49f5-878f-66074a94c41d} + + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{b36aaf9f-2f14-4c45-8cf0-fc622a0ea38a}.xml b/game/FMOD Project/Metadata/Event/{b36aaf9f-2f14-4c45-8cf0-fc622a0ea38a}.xml new file mode 100644 index 0000000..e0c3328 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{b36aaf9f-2f14-4c45-8cf0-fc622a0ea38a}.xml @@ -0,0 +1,720 @@ + + + + + This is an example of an event that can use the FMOD Spatializer or the 3D Object Spatializer for spatialization. + +The timeline parameter sheet is not being used so it has been removed. + +On the "Freq" parameter sheet there are two tracks. On the "FM" track there are three instruments. When the "Freq" parameter value is between 0.00-0.60, the Rock instrument is triggered, between 1.00-1.80 the Lo-Fi instrument is triggered, and between 2.20-2.00 the Hip Hop instrument is triggered. On the "Static" track there are two single instruments both using a white noise asset. All instruments make use of fades to ensure not all instruments are playing at the same time. A quick seek speed is set on the "Freq" parameter, so when a new parameter value is set, it also triggers any instruments between the value it currently is and the set value. This is to give the impression of someone trying to tune a radio into a given station. + +The "Spatializer" parameter automates the send volume between two return tracks. The "Spatializer" return track utilizes the FMOD Spatializer. The "Object" track utilizes the 3D Object Spatializer. + +The FMOD Spatializer is the standard spatializer provided with FMOD Studio. + +The 3D Object Spatializer is a special type of panner that takes advantage of 3D Positional hardware, like Dolby Atmos, Sony VR audio and others. + +The advantage of positional object based audio is that you can achieve height effects for ceiling speakers, and more precise pinpointing of audio in the other speakers. + +Note that the audio does not continue through the bus - it is sent through the output hardware, and is played at that point. No bus effects are possible unless the signal chain uses a pre-panner send effect to send a dry signal to the bus. + + + Radio Station + + + 1 + + + {c2692448-301e-417a-8ade-796c6589bfa4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {5e618944-886a-41d0-96a0-a08198069cb1} + {cf457cc2-8cc5-4b8a-a10b-3437fa75fb20} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {7b943caa-24df-4250-8ec7-793d629bc185} + + + {75904834-4a94-451a-8d16-b1bc2158c3b8} + + + {cdd3b1bb-b9e4-4cff-8e1c-1ead5f043183} + + + {9e751806-0fc8-4bde-a83d-22445a3f3294} + + + {349544cc-0a66-4f37-af57-a6fe7895f203} + + + {82610bd3-5e0c-4b13-8136-847d81068378} + {4d9da5e7-2245-4775-a358-e9d44e342a82} + + + {6383fccb-0921-49ef-b568-648174cf21a8} + {1d3b4ba1-8d11-4494-8df5-1e53ef8aad47} + + + {272c8432-5f06-452e-aa27-acc3ac838eac} + + + {15a4d5e5-893e-434f-bb4c-d2e3cd2ca713} + + + {9ad4be16-4f5a-4e4c-a013-f35de106f106} + + + + + {055691f8-dcdd-434b-8279-a84d35ca0038} + + + + + {055691f8-dcdd-434b-8279-a84d35ca0038} + + + + + {379dac63-3644-40a3-9b4d-ed580a274d00} + + + {dd70aa02-4085-487e-ae6e-f9d314678cd2} + + + {009ebac0-e5a9-4e69-8d37-6bdc9d8c6f45} + + + + + + + {5df50cf0-4cd7-4756-98f0-9c4033d1f02e} + {a8183756-2707-4e38-9503-e7bf3187fc3e} + {8a96b5c3-089c-485e-bf31-696b538389b3} + + + {cbc9f740-e904-443e-9a1d-40dfff5632f0} + + + + + {88e51282-d2e5-48af-81db-d1c26708053e} + {9338a35d-3dfa-4f1b-b9f7-589fa817569f} + + + {446f73d5-a17f-4e24-ac0b-ebaccc0734d8} + + + + + {6db2a4db-80e2-4355-a3b4-54acd4ec6a59} + + + + + {f464d764-cd32-41db-a058-84193d1ebc61} + + + + + false + + + + + {88e51282-d2e5-48af-81db-d1c26708053e} + {9338a35d-3dfa-4f1b-b9f7-589fa817569f} + {8a96b5c3-089c-485e-bf31-696b538389b3} + {a8183756-2707-4e38-9503-e7bf3187fc3e} + {5df50cf0-4cd7-4756-98f0-9c4033d1f02e} + + + {07534c48-7d66-4b77-93a5-90f0821e092c} + + + + + {853bf530-bf0e-45b5-9ca5-9121446a1cdd} + + + {cbf1ebbb-ca13-45a5-a9d3-c97ce940d214} + + + {7b943caa-24df-4250-8ec7-793d629bc185} + + + + + {7efaa07d-84de-4507-9d04-5ec9c17b9535} + + + + + + true + + + 1 + + + 0.80000007152557373 + + + 1 + + + true + + + {989f93d3-bcb1-481d-9516-ba504928a66b} + + + {9fdf9082-798a-49e2-87f9-e33f8a19f78c} + + + {80c3e75e-2678-4c9c-8cad-055cd658be66} + + + + + true + + + 2.2000000000000002 + + + 0.79999999999999982 + + + 1 + + + true + + + {8f7e4071-45ec-4a43-90c9-3733fc3641a5} + + + {ed8e59a3-a77d-49be-90cb-016928a71e33} + + + + + true + + + 0.60000008344650269 + + + 1 + + + true + + + {e98e7d25-3974-40a9-a164-94a69046fdae} + + + {d7a083d4-a113-4291-8655-263448f4434a} + + + + + -80 + + + FM + + + {13e9099f-5707-417f-97e5-195db5a57079} + + + {39ad88a3-6eeb-4769-b036-89f11307ef4c} + + + {055691f8-dcdd-434b-8279-a84d35ca0038} + + + + + 0.40000000000000002 + + + 0.80000016689300535 + + + 1 + + + true + + + {7d8fa2cc-db29-47ff-9dc6-93cd9f7c5d8d} + + + {f037cf20-7ca7-46c0-850a-fb71c043196e} + + + {aae18b55-2024-4e67-a552-98e6fb37f0c6} + + + + + 1.6000000000000001 + + + 0.80000033378601065 + + + 1 + + + true + + + {972cb08a-8b44-4957-a8eb-cd62163c5598} + + + {499ae7d6-876c-46e0-856f-e9511988c688} + + + {aae18b55-2024-4e67-a552-98e6fb37f0c6} + + + + + Static + + + {c7eb9185-0239-402a-8f34-5733c61c79e2} + + + {0a4bbd8f-7b76-4ab2-b293-86b0b51ee195} + + + {cbc9f740-e904-443e-9a1d-40dfff5632f0} + + + + + Spatializer + + + {b42fabb8-0c6a-4d47-92e2-ecf8fe9077d3} + + + {a82093f6-492f-44ed-bd9d-1a32c7771c00} + + + {055691f8-dcdd-434b-8279-a84d35ca0038} + + + + + Object + + + {ab802e13-e972-47ed-8b10-8bb0f31e9263} + + + {13f560a3-c645-42f8-a69e-60c0dffb2203} + + + {055691f8-dcdd-434b-8279-a84d35ca0038} + + + + + {fe5f25a1-4d35-448b-aee9-c1b599a0c4bc} + + + + + + + {48943b60-9ec3-41db-9806-2dba6d819cc7} + + + {0fb9abb7-7645-423e-b16a-b433cccaa3aa} + + + + + {7d2615b1-b329-4c05-933b-a2882363fd5c} + + + {4112fdfd-e755-47d5-a559-8ffbf731f246} + + + + + {8e884303-3093-4d52-b500-12eeca1107b2} + + + {29726caf-a4bf-45f7-9a77-90a3234014e7} + + + + + {afb56de8-3407-43ce-9edb-b9ae2f7ca4a3} + + + {aa61901a-08db-485d-a853-127cd2794227} + + + + + {d406045a-ea28-4cb9-a0cf-c01bc9839950} + {b3b8cdd7-51a8-4124-9d61-e44e31e9f83c} + {b8510f13-01a5-4a0c-9ee5-ac4d2d3d1667} + + + + + + {76f7be2d-f126-47ac-bc29-81b6546f233e} + + + {75e6d636-ea30-48cc-b30c-9e598a165ecd} + + + + + {7b7fcfef-0568-42b7-b7ba-9605e4d57fcb} + + + {fdc5b345-f64a-4552-a769-192ab7778c45} + + + + + {f4cde9fe-269f-41e0-aaf8-4486475b91f6} + + + {23e324dd-f2ac-4381-b835-af17ff6a3248} + + + + + {3111665a-c2bd-41be-8eec-a26d2013aa2e} + + + {1073fa50-27f3-4e91-8be4-6e88e4caa629} + + + + + {87ece548-be9c-4fca-b27f-b9d521a8befb} + + + + + + {b89f6046-282a-4e52-a529-417b1e7ba106} + {2ce9f27c-f14b-4430-bf0a-f14919e40b9e} + + + + + 1 + + + + + {ef44e1ef-0205-4f26-a055-c88828847f42} + {31ef9ba8-6612-425f-9bfc-377f28ee2786} + + + + + + + 1 + + + 0 + + + -0.2547189 + + + + + 1.2000000000000002 + + + 1 + + + + + 1.6000000000000001 + + + 1 + + + 0.25471893 + + + + + 1.8 + + + 0 + + + + + 2.2000000000000002 + + + 0 + + + -0.2547189 + + + + + 2.4000000000000004 + + + 1 + + + + + 0.40000000000000002 + + + 1 + + + 0.25471893 + + + + + 0.60000000000000009 + + + 0 + + + + + 0 + + + 1 + + + {23a51f43-8b05-4a0e-8b14-6d1ed4532451} + + + {6db2a4db-80e2-4355-a3b4-54acd4ec6a59} + + + + + 1 + + + {3dd2ac6f-89b0-487c-a3a1-e8c04c037694} + + + {f464d764-cd32-41db-a058-84193d1ebc61} + + + + + + 0.40000000000000002 + + + 0 + + + -0.2547189 + + + + + 0.60000000000000009 + + + 1 + + + + + 1 + + + 1 + + + 0.25471893 + + + + + 1.2000000000000002 + + + 0 + + + + + 1.6000000000000001 + + + 0 + + + -0.2547189 + + + + + 1.8 + + + 1 + + + + + 2.2000000000000002 + + + 1 + + + 0.25471893 + + + + + 2.4000000000000004 + + + 0 + + + + + + + 1 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + + + level + + + {31888b04-506b-4d73-9cd1-23197a07005b} + + + + + level + + + {bfab05d3-4b30-4b4e-bfd1-40d4d848c9bd} + + + + + {e38d3ac3-5b68-4f54-94c8-0d4bfa3809c2} + + + {bf775459-9a08-4d7e-bdef-fb606d367e6f} + {728cb421-8fbd-4131-abf1-07eb960887a2} + {ddc1e24e-9c73-46ed-be6b-b693ca79fe45} + + + + + {e38d3ac3-5b68-4f54-94c8-0d4bfa3809c2} + + + {55d45793-b8cf-4067-844f-f8f1a1c92094} + {f5a1c0fe-1f55-41f6-a4b0-8ff747e40042} + {f9727d2f-4619-4a63-8c16-0fe07209c2ae} + {93535f3a-694b-4f74-94a3-4295a1897b9b} + + + + + 0.98999999999999999 + + + 3.81469727e-06 + + + + + 1 + + + -80 + + + + + 0 + + + 3.81469727e-06 + + + + + 1.8 + + + 0 + + + + + 0.98999999999999999 + + + -80 + + + + + 0 + + + -80 + + + + + 1 + + + 0 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{bb98917e-d65b-41f0-a0ca-c50756da3f0e}.xml b/game/FMOD Project/Metadata/Event/{bb98917e-d65b-41f0-a0ca-c50756da3f0e}.xml new file mode 100644 index 0000000..f918071 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{bb98917e-d65b-41f0-a0ca-c50756da3f0e}.xml @@ -0,0 +1,1134 @@ + + + + + This is an example of a multi-layered ambience event using parameters, scatterer instruments, modulation, and automation. + +There are three parameters in this event: "Traffic", "Walla", and "Event Orientation". The timeline parameter sheet is not being used so it has been removed. + +The "Traffic" parameter automates the volume of the "Traffic Pad", "Traffic Pass-By", and "Traffic Horns" tracks. From parameter value 0.20 the traffic pass-by scatterer instrument is triggered, giving the impression of heavier traffic surrounding the player. As the parameter value increases, the spawn rate of the traffic pass-by scatterer instrument increases causing more playlist items to spawn at a faster rate, giving the impression of even more heavy traffic surrounding the player. + +When the "Traffic" parameter value is between 0.50 and 1.00 the traffic horns scatterer instrument is triggered. In this scatterer instrument's playlist there is a play percentage placed on the "ambience_city_traffic_siren" playlist entry. This means there is only a 5% chance of this entry being triggered while the scatterer instrument is triggered. The grayed out percentages on the other entries mean that their play percentages are automatically calculated. + +The train scatterer instrument is set to always be triggered regardless of the "Traffic" parameter's value, giving the impression of trains running regularly regardless of the amount of traffic. With the scatterer instrument's polyphony set to 1 and stealing set to "None", only 1 playlist item can be played at any given time. Its min & max spawn interval settings ensure that a playlist item is only played every 23 to 85 seconds. Its mix & max scatter distance setting is set to 0.00-0.00, meaning the scatterer instrument operates in a 2D manner with no panning set. + +The "Walla" parameter automates the volume of the "Walla" and "Chatter" tracks. While the walla pad single instrument is triggered at all times, its track volume slowly rises until it reaches 0.00dB at parameter value 0.50. When the parameter value is between 0.50 and 1.00 the chatter scatterer instrument is triggered. With the scatterer instrument's polyphony set to 5 and stealing set to "None", only 5 playlist items can be played at any given time and currently playing items won't be stolen. Even with 17 playlist items, it's important not to have too many playlist items playing at once. Having the min & max scatter distance set to 1.5-5.00 ensures the chatter is still audible whilst being panned and distanced randomly. The volume of the scatterer instrument has an AHDSR modulator to fade out if it becomes untriggered. + +There is a 0.50/s seek speed set on the "Traffic" and "Walla" parameters for them to smoothly ramp up and down, preventing sudden changes in ambience. + +The "Event Orientation" parameter is a built-in parameter. It takes its parameter value from the game world, in this case based on the orientation of the event instance and listener. This built-in parameter is being used to automate a multiband EQ on the master track. This applies a very subtle low-pass based on which direction the listener is facing, adding to the sense of directionality as the listener rotates. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#automation-and-modulation + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=built-in-parameters-reference.html + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#scatterer-instruments + +Chatter recordings are licensed under the Creative Commons 0 License and sourced from: +Amitaro +http://www14.big.or.jp/~amiami/happy/ + +ユーフルカ +https://wingless-seraph.net + + + City + + + 5 + + + {b6770cc5-a214-4b8e-bc5e-d7983fee345a} + + + {2e193f8d-92b5-4f55-a7d7-fbd073e56354} + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {c482be52-b48f-4e91-9a41-4429de5e55b3} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {5e618944-886a-41d0-96a0-a08198069cb1} + {bac8db8b-2092-43f1-9eb2-6f233db2d7a7} + {cf457cc2-8cc5-4b8a-a10b-3437fa75fb20} + {c993486d-84e1-468e-9f5a-d1b045016729} + + + {16a95de8-f62f-4cd6-9828-a8e38e30de80} + + + {30584c69-0c11-4798-b39d-92a18311720c} + + + {3660a050-d966-4bf6-b910-7a02262308bd} + + + {704238b1-6d4d-45d1-8405-6072a459d2ac} + + + {d269b352-f7dd-4546-96ff-6ed5198e7505} + + + {39cbb0ff-4dab-40ea-9a56-a47bded2cf5f} + {cf10d147-3484-4550-a91d-7061dc9796c4} + {9dc30817-c499-4fea-9098-f3736e39b09b} + {3fe5f2b8-98d7-480f-937c-f111c263ea0b} + {1731796a-a361-4a75-8895-aff45dbcd984} + {68a35a97-f2de-497b-9994-69b7fc686a71} + + + {b7abf722-2d17-4a1e-8104-1063b87bfa43} + + + {02f0aff2-8730-4e15-b085-b1d4d7c7e444} + {281e7d99-d998-4f5a-95d7-73eeae93453b} + {25ef18c6-3733-4124-9e4b-779ec2f20d65} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + {37ea6c3e-dfe0-4442-9892-2e1d5fb90017} + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + {4e5bbd0b-aa51-4a13-881a-a0555f523307} + + + {db322273-be5e-4e2a-bd9d-bbb022dc4387} + + + {d9982c58-a056-4e6c-b8e3-883854b4bffb} + + + + + + + {dd77dd69-69ce-4057-bdd6-dfcc1e919ecc} + + + {35ef2d41-ca9c-43bf-a5d2-7cfde9bf4cb4} + + + {b66c94f7-9b98-4b03-a21b-67901c03c6cc} + + + + + {52af927a-e703-41a7-9a90-344e69d766f4} + {63af8e2d-85eb-4d8e-93ae-97bcc03ce619} + + + {21b32596-5af4-4064-b294-07f5479e2ad1} + + + {ec8bae32-5bd0-4c57-9397-5ee1039722c8} + + + + + {2719b2a7-50b8-489a-b3f3-369a1e2facc2} + + + {ee99ed9f-9ea2-4be0-942c-852881c23d31} + + + {483e5cb4-3460-4323-80dd-0abf90b2350d} + + + + + {d509d387-c2b9-42be-81f8-caf9658886f4} + + + {efe0a862-7cee-4d03-b348-a616b906c364} + + + + + {9a9ea017-ac8c-4ca7-a1f1-3762613af9e5} + + + {74e64522-ef3a-4b3c-852d-b9a20aeb069d} + + + {d529d8ab-15f0-499d-9f4f-831ba2804ec4} + + + + + {ff97bf51-2106-45ec-9e04-a12a5f624376} + + + {f95eddc1-fc97-4a2c-9d3a-f73f857b7e69} + + + {1d308569-0ef2-45a2-b01e-3c648382c68a} + + + + + false + + + + + {d509d387-c2b9-42be-81f8-caf9658886f4} + {21b32596-5af4-4064-b294-07f5479e2ad1} + {35ef2d41-ca9c-43bf-a5d2-7cfde9bf4cb4} + {ee99ed9f-9ea2-4be0-942c-852881c23d31} + + + {35dee4f7-9565-4215-8ca7-3eb446a2ab8c} + + + + + {f95eddc1-fc97-4a2c-9d3a-f73f857b7e69} + {74e64522-ef3a-4b3c-852d-b9a20aeb069d} + + + {95b9b67d-4a1e-45ab-806f-e46ce640bf5a} + + + + + {b8b3154f-b7b5-47d7-b7c6-a020b1f48e76} + + + + + {e48fca60-77ca-41e3-87c8-7b6beb4b4423} + + + {457f615c-3f56-4da5-b077-3d9f21531bfa} + + + {ce2e2adf-2aca-475f-bd0e-c9309c3b3ffa} + + + {16a95de8-f62f-4cd6-9828-a8e38e30de80} + + + + + {8331a06e-a971-4610-a576-5f093ce12bdb} + + + + + {3f52fa92-1a72-4364-a153-776dfcade07c} + + + + + + {e2f3149e-3ef6-4330-8bd9-d27417008c7a} + + + + + true + + + {054762ac-1677-4f3f-ba97-72ea701c4912} + + + + + Traffic Pad + + + {e2f3149e-3ef6-4330-8bd9-d27417008c7a} + + + {abfa5451-cbcd-4a87-9cf8-587f705107a9} + + + {6f0fb1e5-c576-40d9-882b-293445a6cf4d} + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + {0c4a6068-a020-40e9-bd5c-5ef4239e1351} + + + + + {e8d85109-08d7-48f7-9fbb-ade997990a4f} + + + + + 0.20000000000000001 + + + 0.80000000000000004 + + + 3 + + + 360 + + + 2500 + + + 10 + + + 2 + + + {0c4a6068-a020-40e9-bd5c-5ef4239e1351} + + + {56918417-d655-4241-beee-eb39371dd177} + + + {763d4a3d-38a6-475c-9cb1-b420ac94ffae} + + + + + Traffic Pass-By + + + {e8d85109-08d7-48f7-9fbb-ade997990a4f} + + + {d0db56c5-a0c2-4283-9e39-75c99c64b604} + + + {2f2cdf0b-12da-4e4e-a8ad-3e3707b75984} + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + {85b582cc-8ea6-4cf7-af9e-08e0fb44110f} + + + + + 0.5 + + + 0.5 + + + 32 + + + 3 + + + 255 + + + 9500 + + + 60 + + + 5 + + + 0.699999928 + + + {55422bfb-3620-468d-a61e-2120972ddd56} + + + {3040c0d5-c174-4e40-acdd-518495ad72d0} + + + + + Traffic Horns + + + {85b582cc-8ea6-4cf7-af9e-08e0fb44110f} + + + {02de5e94-2d53-42f9-acd4-f75ac1a9d058} + + + {b387e5d2-c3cd-4ff5-9b75-2753a6c698ed} + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + 1 + + + 3 + + + 23000 + + + 85000 + + + 0 + + + 0 + + + -3.5 + + + {a28a5eb8-5ff8-41d7-9eae-ea4e1a89b2b1} + + + + + Trains + + + {62c16c56-fed0-4ffb-9e40-1453e42531ea} + + + {3644515d-6d3c-4832-b5aa-30bc995ea705} + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + {16f9acc2-158b-481f-b701-b1440b38da8f} + + + + + true + + + {aff00be0-9f27-4540-909e-13818cb88c04} + + + + + Walla + + + {16f9acc2-158b-481f-b701-b1440b38da8f} + + + {18771a49-4968-4ed8-8ef8-77a6e6435a68} + + + {0d579d85-77e5-4f0a-a7b7-2f977096d637} + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + {149de5e1-b779-4d85-b14a-52ec7394d623} + + + + + 0.50000000000000022 + + + 0.49999999999999978 + + + 5 + + + 3 + + + 50 + + + 100 + + + 1.5 + + + 5 + + + -1 + + + 0.75 + + + {8c0a7a25-2702-4fa3-952f-a3196da1c3bc} + + + {1eb83283-911c-47e8-9fa4-8ec90b12761c} + + + + + Chatter + + + {149de5e1-b779-4d85-b14a-52ec7394d623} + + + {85246e11-0a3a-44f3-a5db-e7dbeacf2eb5} + + + {f439dd9d-118b-452d-a747-66ddb426c313} + + + {871985fe-9de0-4a22-8e2f-6dbf6ec4d178} + + + + + volume + + + -80 + + + -80 + + + + + {b0e13d63-05bc-4d2a-bd72-f51d0df2eb3f} + {1e1c2916-8a60-4345-8671-3ced82a43e14} + + + + + + + volume + + + {3761c33c-7c5a-414e-8afc-8ea9589100a6} + + + + + {f43e38cb-ca5e-4fbe-9c56-13ec0645da32} + + + + + + spawnRate + + + {2ec83a29-2a62-44d4-bd46-2e5e93dd93da} + + + + + volume + + + -80 + + + 0 + + + + + {7be74478-cbd6-4928-adbf-e7611ecf4d38} + {ade6e880-ce30-4699-b05a-37a76339776a} + {ad0aa0db-40f9-468a-b54c-1490022d71c3} + {fb6d3386-98d6-494f-a020-f0286ac303f7} + {e8fedf8a-0ed3-4c0c-b2e5-835702f94ae5} + {8b398cbc-77ea-4aff-a4f6-93ddb7c68d90} + {64a0456d-5f16-4140-bfbe-350f147cd7b1} + + + + + volume + + + {e1e2f97e-7406-42cc-9648-9a8f07caf7d5} + + + + + {2e95d540-a702-4c0f-acfe-8ab37e3d55fb} + + + + + + volume + + + -80 + + + 0 + + + + + {5fe400f2-e7a5-466b-be07-3e51319aed7d} + {d23d1aab-e534-4aef-ad86-766ccb601405} + {1efc0567-79f8-4ca7-ad0b-1fd26b1f1b37} + {ced3059f-cf8f-44ec-8e37-e778f3b196c9} + {2f79af3f-c5d9-4da1-acb7-4811a44b4bc0} + {179b613e-7ba7-44bf-94c3-905417a940f8} + + + {eb82b282-edb5-4d4a-b7e6-890252bee049} + + + + + volume + + + {efb133be-d13d-4ba5-a769-82af973a3190} + + + + + {2506f267-a56d-487c-a2be-95276084bc2a} + + + + + + {3849cae4-5893-45ad-8edd-a9868d4dad39} + {cd001920-9a10-4ca9-91c6-673800965d7e} + + + + + {ac994aa3-9012-4dcf-8280-923a8562ea61} + + + + + + volume + + + {a0f8f114-76ac-4082-a8c9-60e4fb87e1ec} + + + + + {32711e68-8501-4f40-8460-26b05baad567} + + + + + + volume + + + 0 + + + + + {11687158-592a-4283-9c18-9f14a51be8a2} + {57da0698-a53f-4a7f-8a09-0999f45df290} + {d5cc1f57-c59b-44de-b1da-982350b640ba} + {0eca2e34-69a0-4a7a-a3d3-5331630bf855} + {3c72694a-9aaa-4d7d-93cd-23a016ea35f3} + {926c88e1-3818-485d-b7a2-2cd90915ea7c} + {0c6c9b87-076a-4e1a-a364-31b040ad3020} + {d0379a84-57b9-46b7-bb87-e527f9c6bfad} + {c233b1f4-4f80-4033-a446-f447ce3ebe10} + {f080542f-f9a5-4d8d-b8a9-34890d1162ad} + {d44245a5-f28f-4373-a4ba-1d3753100247} + {c37cfce8-8b2f-45fb-87a6-5140103255c6} + {14018a6a-6421-4008-a094-738207bd931c} + {9aeda11e-0635-462b-b106-5e22bcdbaeff} + {4719e2c4-1d39-4daf-8657-a9ac4d07fe8f} + {5e16d030-e3d7-4abe-b6fd-e4720f8ef78a} + {40369bfa-3bde-44d8-b30a-e78fecdf352f} + + + + + volume + + + {8ae63186-00f4-4e90-83cc-0772f19a93b1} + + + + + {9fbced9d-c0e7-4ee8-8809-cb4eeec20034} + + + + + + 4200 + + + {8331a06e-a971-4610-a576-5f093ce12bdb} + + + + + + {35dee4f7-9565-4215-8ca7-3eb446a2ab8c} + + + {bc47ad9a-62eb-4971-b2a2-24387b879b02} + {e2664a61-f1bb-40a1-9812-9db7605274af} + + + + + + {35dee4f7-9565-4215-8ca7-3eb446a2ab8c} + + + {3a50e2a4-462f-47ed-acfa-40db50469c10} + {f4222d86-da6f-4d2d-a39c-517af06d5d8d} + + + + + {44b0667e-e115-4e5e-bff1-c92a2cd0276c} + + + + + {6f1b5f4b-7591-4ec3-8056-5c8d6d43a344} + + + + + {47fb8c28-3d1d-4c8e-9edd-8f12523ec8d8} + + + + + {438c397a-d78f-4ed1-ad0f-d3d02b998861} + + + + + {b8e5f4a0-30c2-46fe-ba97-a94a8ff5df41} + + + + + {96939ebf-e14f-467e-ad65-1e1c3ffa06c2} + + + + + {d0d0b206-f273-426a-9d88-6c753f62e47d} + + + + + {35dee4f7-9565-4215-8ca7-3eb446a2ab8c} + + + {35cd3543-6850-460d-a8b0-6f94818f3f57} + {069bb96d-2623-43d9-9c18-df2f2161b9b9} + + + + + + {e968a16c-0dda-4fb1-bec4-9e6653cb0c69} + + + + + {4d62d11f-d295-4367-8243-e48ff2051c15} + + + + + {54ccd07f-e8dd-483a-bafc-d1773be934e2} + + + + + {fa1c37af-46d6-4d39-a096-4a36dba26ecd} + + + + + {b1235fda-48b6-45f8-bad3-263aa4591114} + + + + + {4eb68d39-b793-4777-8005-426d424c9562} + + + + + 5 + + + {5fe400f2-e7a5-466b-be07-3e51319aed7d} + + + + + {35dee4f7-9565-4215-8ca7-3eb446a2ab8c} + + + {c700dd03-b643-4a8c-a869-9598f82e167a} + {77b248f2-bc58-44de-b574-b4517d285e56} + + + + + + {1108e948-0cf8-4a91-9a65-30e7b6a6b71f} + + + + + {d195eb01-f684-429b-a4ec-c58d7901d376} + + + + + + {95b9b67d-4a1e-45ab-806f-e46ce640bf5a} + + + {341dbf49-5c08-4da8-bf07-959bc7cc4a33} + {cc3fb3d9-237f-49a8-860a-b1033b3c25e0} + + + + + + {f4b72a37-fd88-43db-8129-25e969e0bc32} + + + + + {fe7f1c81-bf9d-4a1f-8431-130335bd8859} + + + + + {199bdd01-ff4e-4bbf-9160-2a3cfbbda734} + + + + + {0783756f-9d68-47cd-984c-b6e55e8bf6d8} + + + + + {777d44cf-7d87-461d-8c8b-c233f757cfdb} + + + + + {5ae14b74-92e1-44f6-98f6-ec3733c7d99b} + + + + + {4b72fb96-7baf-45bd-9cfb-e35b3e7be84e} + + + + + {2b2caeb3-33cf-4497-af3a-85cf409f0c58} + + + + + {615a0480-d320-429f-9459-f2a0223b0bd1} + + + + + {7f7944f3-bb00-4ecc-a5b4-8eae169cbe4d} + + + + + {ae94dd74-b10a-4d96-b161-b0836620af9e} + + + + + {a069e4b4-8f78-410d-88e9-5f1a8b586733} + + + + + {b7953129-1502-42b5-ad98-5864ef420bd2} + + + + + {d25c747e-3581-4c2e-901c-286b39e96696} + + + + + {f769328f-32d7-4c84-9315-e254bc6ecab1} + + + + + {0ce2f99a-e7c1-45a8-9af6-524946c4af2a} + + + + + {c5a0e6df-f999-413e-a0c0-3e6352c80c68} + + + + + {95b9b67d-4a1e-45ab-806f-e46ce640bf5a} + + + {8afa49fd-c69b-4cdc-9833-7a5a912be83e} + {70598f15-fa23-44d5-bbc1-befae83938cc} + + + + + + frequencyA + + + {77c5ef69-dde7-430d-9d3c-8eab48564c89} + + + + + 1 + + + 0 + + + + + 0 + + + -30 + + + 0.5 + + + true + + + + + 1 + + + 200 + + + + + 0.20000000000000001 + + + 100 + + + + + 0.20000000000000001 + + + -80 + + + -1 + + + + + 1 + + + 0 + + + + + 1 + + + 0 + + + + + 0.5 + + + -80 + + + -1 + + + + + 0.5 + + + 0 + + + + + 0 + + + -80 + + + 0.5 + + + true + + + + + 1 + + + 0 + + + + + 0.45000000000000001 + + + -80 + + + -1 + + + + + {b8b3154f-b7b5-47d7-b7c6-a020b1f48e76} + + + {f15cd947-a91f-4c57-ae2c-c7c5ee6a7416} + {a93b7c63-b1fc-4f71-8c23-be1f7b93e1a0} + {87dd62d9-4abd-4f27-a4cc-2d37bedbf247} + {582bac1f-87af-4a70-bae5-36d0edb9aba5} + {2b6b830e-1ea2-4253-9f29-59c571262cf8} + + + + + -180 + + + 22000 + + + 0.5 + + + true + + + + + 90 + + + 9499.99805 + + + 0.5 + + + true + + + + + -90 + + + 9500.00293 + + + 0.5 + + + true + + + + + 0 + + + 22000 + + + 0.5 + + + true + + + + + 180 + + + 22000 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{be6203d8-c8d8-41c5-8ce6-bce0de95807b}.xml b/game/FMOD Project/Metadata/Event/{be6203d8-c8d8-41c5-8ce6-bce0de95807b}.xml new file mode 100644 index 0000000..4557477 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{be6203d8-c8d8-41c5-8ce6-bce0de95807b}.xml @@ -0,0 +1,320 @@ + + + + + This is an example of a one-shot collision-based event that uses the physics of the game world to drive a parameter. + +The timeline parameter sheet is not being used so it has been removed. + +This event uses a single instrument and a multi-instrument on the "Collision" track on the "Speed" parameter sheet. A distortion effect is applied in small quantities and a slight lowpass is used to provide a duller, softer thud when a wooden object collides with something else within the game world. When starting the event with a parameter value between 0.00 and 2.50, a single instrument is triggered. With a parameter value between 2.50 and 8.00, a multi-instrument is triggered, more distortion is added, and the multiband EQ effect no longer lowpasses the track. + +This event functions by having game code assign a value to the "Speed" parameter, representing the speed that the wooden object is moving at when a collision occurs. Different game engines may present the physical speed differently, so it is important to tailor events driven by physics to match the engine being used. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#looping-instruments + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#fade-in-and-fade-out + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#multi-instruments + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#automation-and-modulation + + + Wooden Collision + + + 2 + + + {53fb91f9-f800-4355-b1b0-5a0d20e6cf91} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {5e618944-886a-41d0-96a0-a08198069cb1} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {c993486d-84e1-468e-9f5a-d1b045016729} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {2c28f1e3-2ca2-4359-b0c0-a59326adf9c9} + + + {58732e42-1da6-446b-b670-650f167aa19c} + + + {4c49d707-2ff4-406e-8689-d14bf5a4324f} + + + {2aaafa81-8609-45e1-9f84-808ecc34c8c1} + + + {9132fb5e-309c-415b-9db2-595e15e45dd4} + + + {3bd2cae4-7187-4e45-9083-67e4c0a98bfc} + + + {7ac432aa-2e86-4933-b096-5f61e7a1386a} + + + {05b83f1c-2689-426d-a7e3-995e1c66778f} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {0d76e087-5f0e-4a8c-94af-9d573577d483} + + + + + {0d76e087-5f0e-4a8c-94af-9d573577d483} + + + + + {7c3527a2-b0e1-4057-81db-fd383aa6ba10} + + + {288ce2f7-7f8d-453b-bebe-192b52c3f46f} + + + {009ebac0-e5a9-4e69-8d37-6bdc9d8c6f45} + + + + + + + {25c4243e-1a98-4ce4-862c-c1add93713ea} + {5ccf0d7b-2e57-4cac-91a7-b06ab02db3f1} + + + {4fb44967-b597-49b3-8033-5ae3cd5ca8cf} + {365b7f3b-aa1c-4ba4-aa8a-d0260a201fc3} + + + {caa21944-813d-4858-84f8-be557f3a15b1} + + + + + false + + + + + {4fb44967-b597-49b3-8033-5ae3cd5ca8cf} + {365b7f3b-aa1c-4ba4-aa8a-d0260a201fc3} + + + {6fbe4ad6-7ed5-43c8-94ac-fe278fcdbe03} + + + + + -3 + + + {0f31dfd9-8613-45ca-bff4-c7c02693889f} + + + {97e74e0b-78dc-4e75-9147-05b114e7c35f} + + + {855833f0-0dd9-4d21-b456-c99a7b9c49b3} + + + {2c28f1e3-2ca2-4359-b0c0-a59326adf9c9} + + + + + {54bf4690-d5c5-4422-93ba-f56056d9a12f} + + + + + + {80011bbf-8e1e-4c30-8ec1-130ff73332cc} + + + + + {6b9b3ff0-d908-457a-b0c4-ac26929e951f} + + + + + 2.5 + + + 5.5 + + + {83e5f2b1-089f-4a10-90c3-4ba9cdc6f7a6} + {7ab3da9d-7a2c-47bc-ab1b-3f52130c8f09} + {1616b94b-1afe-4530-985b-5a88af0be9c1} + + + + + 2.5 + + + {46a096ae-9296-437e-86aa-47c6c5b17d03} + + + + + Collision + + + {cbbadc60-1723-4848-adf3-07abaa41bd5f} + + + {b7a1d73a-db22-4f15-9231-61508a3e5f6d} + + + {0d76e087-5f0e-4a8c-94af-9d573577d483} + + + + + pitch + + + 4.16666698 + + + + + {be93d040-aaa5-494c-b622-b82a5af01cab} + {315ff30e-6d57-4312-a821-490ac414cd5b} + + + + + + + {da18f860-f84e-4a59-83d8-38b576a4addc} + + + + + {5f328e09-2fa9-4419-a9f7-d05a01cc82c8} + + + + + {8b796aa0-a071-448f-9aae-00a19369d15d} + + + + + {504cd9a5-b8b4-4601-9aae-8bd70972b7af} + {79c8d0e2-bf60-4115-a548-f1556fc23b38} + {8612cc58-ff40-419f-bceb-0230b8950c50} + + + + + + + 1 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + + {80011bbf-8e1e-4c30-8ec1-130ff73332cc} + + + + + 22000 + + + {6b9b3ff0-d908-457a-b0c4-ac26929e951f} + + + + + level + + + {db83710a-fc54-45b8-81f3-39c4d669bf27} + + + + + frequencyA + + + {20f6ef1f-1f60-4ef1-af43-21faa7decb43} + + + + + {6fbe4ad6-7ed5-43c8-94ac-fe278fcdbe03} + + + {b55e6cc9-ca84-4e2c-9da5-7a75da325bbd} + {618044d4-b5e4-4d41-b4c0-bf26f0a9f6f9} + + + + + {6fbe4ad6-7ed5-43c8-94ac-fe278fcdbe03} + + + {20ffb8ec-d2e2-4b40-b2ab-fb38f98e7c42} + {f0ed69b6-ecfc-4e2c-8a14-93639117a5c1} + + + + + 0 + + + 0 + + + + + 4 + + + 0.499000013 + + + + + 0 + + + 700 + + + -0.557812154 + + + + + 8 + + + 22000 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{c42c2240-c4b6-42ed-a473-1a47f19945ea}.xml b/game/FMOD Project/Metadata/Event/{c42c2240-c4b6-42ed-a473-1a47f19945ea}.xml new file mode 100644 index 0000000..d4378d0 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{c42c2240-c4b6-42ed-a473-1a47f19945ea}.xml @@ -0,0 +1,288 @@ + + + + + This is an example of a looping event that uses the physics of the game world to drive a parameter. + +The timeline parameter sheet is not being used so it has been removed. + +This event uses a single instrument on the "Rolling" track on the "Speed" parameter sheet. The single instrument uses a fade-in to control the volume. At parameter value 0.00 the volume of the instrument is muted. As the parameter value increases up to 8.00 there is a slight pitch increase. The single instrument has a random modulator placed on the "Start Offset" property in its "Trigger Behavior" drawer. The start offset setting defines where in the audio asset the instrument starts playing. Because this property is randomized, the single instrument will start playing from a random point in the audio asset each time the event instance starts playing. + +This event functions by having game code assign the speed that the barrel is moving in the game world to the "Speed" parameter. Different game engines may present the physical speed differently, so it is important to tailor events driven by physics to match the engine being used. + +This event should be triggered when the barrel is on the ground and its speed is more than 0 (i.e. when the barrel is moving). While the event instance is playing, the "Speed" parameter should be set each game update. When the "Speed" parameter drops to 0, the event instance can be stopped. + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#looping-instruments + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#fade-in-and-fade-out + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#automation-and-modulation + + + Barrel Roll + + + 2 + + + {53fb91f9-f800-4355-b1b0-5a0d20e6cf91} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {c993486d-84e1-468e-9f5a-d1b045016729} + {ab60ec81-d8f9-4132-9036-9780d027a8ed} + + + {eae6d28b-c6ae-4afe-bdbe-894c17400850} + + + {f62477ae-0c2b-4a81-8a56-904d0bc0b5c1} + + + {4fab3ea4-41a9-4220-96a9-f9a73429ea3d} + + + {e46bdd67-3c3c-4a6f-a9df-2ccd30d376b1} + + + {9faddeb2-4e1a-49c1-b28c-3ed45dece070} + + + {88a89a5b-2875-4ce8-a6d5-1a61254f040d} + + + {5bb17d6b-f172-4d02-955c-c7b5f409e3ad} + + + {568afb43-7097-4188-8673-09e5e9fba1bf} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {10af966e-5261-4534-af60-3b9d27a2cd28} + + + + + {10af966e-5261-4534-af60-3b9d27a2cd28} + + + + + {91fd17ef-f18b-407d-bf74-48a24118310c} + + + {5b3f6db7-37f4-40d1-8736-15ce7c380a77} + + + {009ebac0-e5a9-4e69-8d37-6bdc9d8c6f45} + + + + + true + + + true + + + + + + {67ee2a14-4449-4a8c-b693-26a8854ebe1b} + + + {1f2e7002-0b81-48a7-8a23-365c0e5666a1} + + + {21fbfee3-90eb-4aa3-85fc-62aa88a33775} + + + + + false + + + + + {1f2e7002-0b81-48a7-8a23-365c0e5666a1} + + + {6fbe4ad6-7ed5-43c8-94ac-fe278fcdbe03} + + + + + {bcee31aa-019e-4b27-8e7a-22f8d22a8585} + + + {d6b476c4-3846-42d5-b38d-d53c7c288332} + + + {eae6d28b-c6ae-4afe-bdbe-894c17400850} + + + + + {34bff1bf-68de-4219-a8f3-92b9e6cc2715} + + + + + + {b1b8b472-cc05-4e07-a529-ab04ec801da5} + + + + + true + + + 8 + + + 50.5 + + + true + + + {b1b8b472-cc05-4e07-a529-ab04ec801da5} + + + {3a765792-4ff6-431d-9b8d-2a84121b9e2e} + + + {910f12b7-59f4-4fcb-9047-b62ff5fbf0ab} + + + {aa01ab40-d8f4-4939-b178-d910e349396f} + + + + + Rolling + + + {6ff89641-5a3e-4627-b5e1-5023de29e8b8} + + + {d4036f46-5db2-40b3-a5b4-e4aea0632008} + + + {10af966e-5261-4534-af60-3b9d27a2cd28} + + + + + {1ce5e239-5771-41cd-b811-c29df25ed50f} + {0daf6802-c849-46e5-ac77-2c36b72edf9d} + {c8a90de1-6e6c-45fe-bf9a-e0fd57a931e8} + + + + + + + pitch + + + {797846cd-a8a3-4c40-aa5b-ae9ba33d58c2} + + + + + startOffset + + + 100 + + + + + {40e25a94-2203-49ab-9a59-9591dc987ce0} + + + {161da863-4b31-43be-8234-9a555ea7e0ab} + + + + + {451f52e8-0c84-40fe-b345-52644b2eebc9} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + + {6fbe4ad6-7ed5-43c8-94ac-fe278fcdbe03} + + + {02b36c2a-9f0b-411b-bdd7-40b52479299d} + {94a2dc6c-e69e-435e-836f-bb2ce93c9043} + + + + + 0 + + + 0 + + + -0.2547189 + + + + + 5 + + + 1 + + + + + + 0.5 + + + 0 + + + + + 8 + + + 2.5 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{c7f946fd-d695-499b-a820-752799c4921d}.xml b/game/FMOD Project/Metadata/Event/{c7f946fd-d695-499b-a820-752799c4921d}.xml new file mode 100644 index 0000000..71c7ff7 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{c7f946fd-d695-499b-a820-752799c4921d}.xml @@ -0,0 +1,751 @@ + + + + + This is an example of vertical layering for a dynamic music event. + +The event loops the entire music's length. The "Area" parameter automates the "Layer 2", "Layer 3", and "Layer 3-4" tracks' volume properties. As the parameter value increases, these tracks' volumes are adjusted to blend together to produce different variations of the music. + +Each layer has a multi-instrument that randomly plays one of two playlist entries, giving even more variations to the music. + +The following values make the following tracks audible. + + 0: Layer 1 + 25: Layer 1 & Layer 2 + 40: Layer 1 & Layer 2 & Layer 3 + 60: Layer 1 & Layer 4 + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#multi-instruments + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#automation-and-modulation + +Music courtesy of +Studio DOMA +Chief Music Composer. +Seung Hyuk YANG +음악감독. 양승혁 +#621-25, Yeoksam-dong, Ganggam-gu, Seoul, Korea +서울특별시 강남구 역삼동 621-25 + +www.studiodoma.com +www.yangseunghyuk.com + + + Level 02 + + + 1 + + + {c2692448-301e-417a-8ade-796c6589bfa4} + + + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {95d562e5-0dc1-428c-9296-79fa91967a77} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {d6ff7340-ab69-44ca-97c8-39118d6593a1} + + + {bd41f6df-9aaa-48a4-ad4f-e6090319de0f} + + + {99051e1c-7bdb-4173-8884-9302a13a0ea4} + + + {475ab434-a247-4eb9-a836-73f9ab0efc95} + + + {def2ec79-1d57-470a-83f6-180aba30cdba} + + + {5472f697-7709-48bc-a831-88d98b6867b1} + {814050d8-b1d6-4a70-acb9-40a2acebec7e} + + + {21a4d382-d6f5-489d-b3b4-d0ac3103c743} + {f8a0b37a-6a3a-445d-851f-92d92af0ae52} + {5d30530a-6569-45a9-b444-31c4e7444f81} + {a39854ca-3e76-4368-a730-856279df0063} + + + {1922627c-f046-45ab-81fe-ce4e2d622eba} + + + {fd38a5b1-b7eb-49fd-b2e7-6e6ec1631cbe} + + + {9ad4be16-4f5a-4e4c-a013-f35de106f106} + + + + + {7315e3ae-a090-4923-8d1d-e715e89336e0} + + + + + {7315e3ae-a090-4923-8d1d-e715e89336e0} + + + + + {fdd3db4d-9866-4b14-8323-d48abda16caa} + + + {7d65cc38-0d8c-43c7-b5a4-5ab0f4881947} + + + {7e33a2b3-db05-4b7a-ba1e-e862f2bfde36} + + + + + true + + + + + + + true + + + {2211c125-c488-0f3c-16c9-9622fc12914d} + + + {ae84f7f8-e0a1-4a32-9d55-7465c148e4db} + + + {db583d0a-a6d2-4b3d-a662-d2dd5b10a467} + + + + + true + + + {249c5e5e-34ac-0621-2495-c844b1142343} + + + {1bbc3166-7fdf-4126-96c4-a43607c17ae0} + + + {9e8d38ff-856e-49b5-8b1d-bf79103954e0} + + + + + true + + + {2895c44b-9ec7-08a7-134d-a92a8f01b3fe} + + + {94b4cd9e-c36e-4758-8220-4e94236a9961} + + + {9a34e02e-37f8-4dcb-b261-b7b2674c8117} + + + + + true + + + {19450e4d-295f-04d5-2f82-605ad428d728} + + + {41205119-b6c4-44b7-9f0c-1f3cfd821fce} + + + {50e1ce40-45bc-446b-b022-8f9ac199c080} + + + + + {185cb073-ae35-41dc-95c9-6158075c3b9d} + + + + + {94b4cd9e-c36e-4758-8220-4e94236a9961} + {41205119-b6c4-44b7-9f0c-1f3cfd821fce} + {1bbc3166-7fdf-4126-96c4-a43607c17ae0} + {ae84f7f8-e0a1-4a32-9d55-7465c148e4db} + + + {49952568-8ba8-46ee-9d90-b466c502b030} + {38a5c12e-5b06-4147-b438-c9f399a99dc3} + + + + + {3896a628-4e61-4b27-b461-4faee74a9ea3} + + + {9cc5c5a1-cb64-4095-b11f-998860fc7260} + + + {bd41f6df-9aaa-48a4-ad4f-e6090319de0f} + + + + + {d0b047a4-4ec1-401c-a541-18829324a432} + + + + + + {12ff7abe-6495-4627-af06-507867080ac9} + + + + + 56.8888888888889 + + + 3 + + + {e75aa2d9-8348-403e-889b-cd799681b2da} + {627ee773-844c-4496-8040-b8b6a827a658} + + + {8b14d25b-2955-4296-ada0-6b3b63f22e4c} + + + + + Layer 1 + + + {7d20d0eb-63de-47aa-a0a0-e3c7ef4e7e32} + + + {13d2655f-60e2-4a3a-b838-61a7f0079e46} + + + {7315e3ae-a090-4923-8d1d-e715e89336e0} + + + + + {1472e5c5-94b1-4f3a-9d5a-0e1e2a0eb8c7} + + + + + 56.8888888888889 + + + 3 + + + {a83cb91b-c922-4bad-92e7-dfeef85589eb} + {012bb485-e556-4558-9014-3f2a8861fc6a} + + + {976be9cd-4170-484d-b205-e4b6d7beebb9} + + + + + Layer 2 + + + {1472e5c5-94b1-4f3a-9d5a-0e1e2a0eb8c7} + + + {81dde825-6f30-4885-8dbe-9f7089c87f47} + + + {af7200c4-3ca5-410e-aacc-ef145622eb19} + + + {7315e3ae-a090-4923-8d1d-e715e89336e0} + + + + + {187b7fd0-3eda-41bc-aa82-6f70141b287a} + + + + + 56.8888888888889 + + + 3 + + + {6fea5752-2f52-4f6a-aaec-600aa11ecdcb} + {0be2f5e2-b56d-4f0f-adba-48a2f780c3c0} + + + {87e98f33-4edd-48af-83f6-9b6470a95d81} + + + + + Layer 3 + + + {187b7fd0-3eda-41bc-aa82-6f70141b287a} + + + {59515e74-ad8e-4090-9856-ad60939255ee} + + + {4464fedb-4888-4523-8ee4-089d13cb27db} + + + {7315e3ae-a090-4923-8d1d-e715e89336e0} + + + + + {29abb5d6-8942-4dce-964d-a6004f324cac} + + + + + 56.8888888888889 + + + 3 + + + {45382f88-b62f-437b-8fd9-e545d9193ed8} + {b9ad0079-672b-4c89-8d97-253494d5c705} + + + {5bb8e4fc-0393-431f-bcb3-57c9bc282c74} + + + + + Layer 4 + + + {29abb5d6-8942-4dce-964d-a6004f324cac} + + + {c0e69dce-bbd3-4df9-acbf-65e871c08710} + + + {21a01058-c4c7-463f-8b5d-0a1db860b0b0} + + + {7315e3ae-a090-4923-8d1d-e715e89336e0} + + + + + Reverb + + + {7e05e431-0eeb-409b-a8b7-f3664b8540e3} + + + {940eeb6f-cd38-4592-b3cc-b89f98b317b3} + + + {7315e3ae-a090-4923-8d1d-e715e89336e0} + + + + + 0 + + + 56.888909722222202 + + + {fd38a5b1-b7eb-49fd-b2e7-6e6ec1631cbe} + + + {814050d8-b1d6-4a70-acb9-40a2acebec7e} + + + + + 0 + + + 135 + + + {fd38a5b1-b7eb-49fd-b2e7-6e6ec1631cbe} + + + {5472f697-7709-48bc-a831-88d98b6867b1} + + + + + {eb57c107-ebf8-47fe-beeb-28c2871928d8} + + + + + + + 3 + + + 10 + + + {61dcca4b-81f5-42fc-b902-ded5d1a5c34a} + + + + + 3 + + + -4 + + + {00f23ca7-103e-444c-924a-139cc3edf15f} + + + + + 60 + + + {e75aa2d9-8348-403e-889b-cd799681b2da} + + + + + {74e9abb8-5538-4986-99b4-f32bad9cc697} + {deee0324-4313-46e7-98b9-c74568518de1} + + + + + + 3 + + + -4 + + + {b3423add-7502-4a49-a52f-a82d76ed4fd8} + + + + + 3 + + + {59fd2c98-7484-4142-85e4-569f791ded73} + + + + + 60 + + + {012bb485-e556-4558-9014-3f2a8861fc6a} + + + + + volume + + + {b40554a3-0798-4ba9-9ed2-4267a0f9cc76} + + + + + {b980265a-0c26-439f-a2a9-e7a5275c873b} + + + + + + 3 + + + {835e0b94-6af4-471d-ac7f-56a72fc8035e} + + + + + 3 + + + {a65f3df1-b332-4f0a-9a82-67fe78be7b76} + + + + + 60 + + + {6fea5752-2f52-4f6a-aaec-600aa11ecdcb} + + + + + volume + + + {eee3ec22-c9cf-4e3c-8485-2c6d90d21533} + + + + + {adcda90a-e996-4c43-ad9d-78b23917e138} + + + + + + {b7d461a4-4af4-45cb-970a-edbaf98e4bed} + + + + + {af7cac4a-1638-4b6d-8e75-2a29354fffaa} + + + + + 60 + + + {b9ad0079-672b-4c89-8d97-253494d5c705} + + + + + volume + + + {9671ce88-f791-4c52-a35e-95dc4427fe52} + + + + + {171daa82-b649-401b-8105-ff1c10484e8b} + + + + + + {e58b258f-c78f-4ef6-9f4f-884513f09a57} + {b58367c6-b9c4-4356-b2ed-ab0121e73b37} + + + + + + + + 1 + + + {12ff7abe-6495-4627-af06-507867080ac9} + + + {185cb073-ae35-41dc-95c9-6158075c3b9d} + + + + + {20a22b40-454b-4333-98b6-eee0b54cc783} + + + {96c0f19d-9a1a-49d1-827e-255c5826caf4} + {07437114-310b-42fc-847f-c3c224879d22} + {1cac2273-5437-4fe3-b3cd-0b9a08dd8d1d} + {ddde5f5e-d393-4125-9601-3dd8e02afce3} + + + + + + {20a22b40-454b-4333-98b6-eee0b54cc783} + + + {57795017-9078-45de-8812-24c9c160e8cc} + {6fabc976-d026-425d-a3c0-f7db811a2229} + {37aa3300-bc2e-4ab1-90f8-3de3cbafb0f0} + {b46183d1-eb28-4a41-bb96-e755edfbe7a5} + + + + + + {20a22b40-454b-4333-98b6-eee0b54cc783} + + + {fad7489d-12e7-49be-a441-7abf6876a3f9} + {c1391173-2766-4c22-844f-5a29d68819b2} + {bcc523a4-b5d7-4438-a261-62d6d9892066} + + + + + + + 2900 + + + 46 + + + -80 + + + + + level + + + {a8e667b2-b145-4338-9d1c-151e85bd521d} + + + + + 25 + + + -0.173912004 + + + + + 53.154400000000003 + + + -0.173914 + + + 0.698412001 + + + + + 60 + + + -80 + + + + + 10 + + + -80 + + + -0.393972009 + + + + + 60 + + + -80 + + + + + 30 + + + -80 + + + -0.375405997 + + + + + 55.033000000000001 + + + -0.173912004 + + + 0.534017026 + + + + + 40 + + + -0.173914 + + + + + 60 + + + 0 + + + + + 80 + + + 0 + + + + + 55 + + + -80 + + + -0.57318002 + + + + + {20a22b40-454b-4333-98b6-eee0b54cc783} + + + {4845c893-29df-4c68-be01-e175194519cc} + {8433c52f-9e54-43e9-a134-d2e03a4914e9} + + + + + 0 + + + -5.82608986 + + + 0.291016012 + + + + + 15 + + + -80 + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{d7eabb29-abd9-4057-b408-eef937d66f2a}.xml b/game/FMOD Project/Metadata/Event/{d7eabb29-abd9-4057-b408-eef937d66f2a}.xml new file mode 100644 index 0000000..2dc0458 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{d7eabb29-abd9-4057-b408-eef937d66f2a}.xml @@ -0,0 +1,155 @@ + + + + + This is an example of a simple one-shot 2D event and user properties. + +In the user properties, seen in the "Overview" section on the right hand side of the event, this event has a "subtitle" user property with a string containing subtitles associated with it. When using the FMOD Studio API, it is possible to retrieve the value of "subtitle" which can be used to display the associated text when the event is played. + +https://fmod.com/resources/documentation-api?page=content/generated/FMOD_Studio_EventDescription_GetUserProperty.html#/ + +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#single-instruments + + + Welcome + + + 0 + + + {f9405a0f-f7a4-4ff1-91bb-e954833f9503} + + + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {c993486d-84e1-468e-9f5a-d1b045016729} + + + {433976b6-565f-4c60-9c8f-19a8e74758f7} + + + {0ecd6741-38fd-4fd5-8c78-f94ef926703e} + + + {64ebcefb-2ef4-4711-a9fe-3e77409a4e26} + + + {9be4c177-2836-47c7-afa4-084973c36f08} + + + {0c62e0d4-eb99-48cf-a3f6-944ef77e21b0} + + + {21023f85-81e9-491e-b173-45447d0eb516} + + + {acbad2b6-5f1c-496b-8088-69fd4e773019} + + + {c9eb3bba-0751-4871-8b88-caf5796468cd} + + + {d6e4340a-dfdb-4393-b4dc-b55091d858cd} + + + + + {290f99fc-6f72-4a69-b133-f666b3a96ce2} + + + + + {290f99fc-6f72-4a69-b133-f666b3a96ce2} + + + + + {0500e6ad-ce94-4f5c-85be-318e9e2e9db9} + + + {346ff174-7386-40dd-b00e-5518e798185a} + + + {69d0d47a-7f4b-4d6c-bfc3-bda91e9f7f1f} + + + + + + + {c3402baf-f6de-4880-a774-e4a1179a2700} + + + {7ed3da6f-3f9c-4c73-ad84-0db015f0907d} + + + + + {c3402baf-f6de-4880-a774-e4a1179a2700} + + + + + subtitle + + + Welcome to the FMOD tutorial. + + + + + {d4c1d887-264e-44a2-a7e6-bc3fc10ecc69} + + + {4029b248-6fda-4c60-866f-b91ad37e4717} + + + {433976b6-565f-4c60-9c8f-19a8e74758f7} + + + + + {3e1d3419-ae07-497b-a530-9502cd7754af} + + + + + + 2.1829200000000002 + + + 3 + + + {c0af1436-9a98-44af-9e91-c2de750c2235} + + + + + Welcome + + + {ff494b6c-8c33-4b9d-9955-0da802fd7ae2} + + + {e5fb09ba-51ec-4300-99ee-fd264ca6cc39} + + + {290f99fc-6f72-4a69-b133-f666b3a96ce2} + + + + + {026d33c4-371e-4a27-8bc1-3df59a3b4381} + + + + + + + {f1d6ebd0-efbd-4462-b4ec-9bb818adbeb0} + + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{e905d401-76f5-4741-a885-f7844b244671}.xml b/game/FMOD Project/Metadata/Event/{e905d401-76f5-4741-a885-f7844b244671}.xml new file mode 100644 index 0000000..c8df7d4 --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{e905d401-76f5-4741-a885-f7844b244671}.xml @@ -0,0 +1,404 @@ + + + + + This is an example of a one-shot event using a parameter for different surfaces. + +The "Surface" parameter is designed to be used in three different states. + + 0: Berber carpet + 1: Short grass + 2: Wood floor + +The "Surface" parameter has the "Hold value during playback" property enabled, meaning the value of the parameter cannot be changed once the event instance has started playing. This prevents the event from accidentally playing another instrument if the value of the parameter changes while playing. + +The timeline parameter sheet is not being used so it has been removed. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters +https://www.fmod.com/resources/documentation-studio?page=working-with-instruments.html#multi-instruments + +Recordings by David at Track Time Audio. + + + Player Footsteps + + + 2 + + + {33020bd4-6815-4ed7-b787-bc0035017be4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {a0007824-27a5-4949-ae54-4df20f35ea51} + {032932ee-4178-4241-a136-2450347dcb6e} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {5e618944-886a-41d0-96a0-a08198069cb1} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {38eb3e9f-0cf4-4dc9-9e8d-0cab10a990a7} + + + {e896eeb4-7812-4864-817d-e999bf20981e} + + + {23bbdaf8-e6d7-41d5-8f7a-bbd854aa6a6c} + + + {1ad0cdda-ae5f-49e6-bb65-f54152669fc4} + + + {54dbb3de-3613-4a87-8da2-57a892ba1d2d} + + + {364bdf2d-8c1b-447d-a6b7-0c882337e03a} + + + {d372e12b-0db4-49f6-ac02-ebc5cb0fd144} + + + {3541a49a-849e-046f-2c6a-d5f71f548e2b} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {04ff217a-6838-4446-8254-6239c1ff7e14} + + + + + {04ff217a-6838-4446-8254-6239c1ff7e14} + + + + + {62d29c9d-bd2f-46ac-8dea-c37c666f3cfd} + + + {2ec4c27a-6772-4ae4-924c-86c827f5cda8} + + + {bb9c6e68-8990-41bf-8380-209255d19884} + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + + + {c20932ee-3f55-4a2d-9e19-360418e793b5} + {308d8aa2-9498-48bf-9c33-8de1f2fcad94} + {4d3a5bd5-f153-41bb-b698-c19027d564c9} + + + {cab8585f-4802-40ae-b8c8-8f822593975f} + + + + + false + + + + + {308d8aa2-9498-48bf-9c33-8de1f2fcad94} + {c20932ee-3f55-4a2d-9e19-360418e793b5} + {4d3a5bd5-f153-41bb-b698-c19027d564c9} + + + {5decf701-7e48-4848-b796-416ec40eb26c} + + + + + {098d2167-900f-4b62-909f-1a7c82abb11c} + + + {9602f0fc-a67c-4d68-af63-419d9c248976} + + + {38eb3e9f-0cf4-4dc9-9e8d-0cab10a990a7} + + + + + {41264584-ba33-4117-91eb-3de70a4229c8} + + + + + + true + + + 1 + + + 0 + + + 3 + + + {cd05ae94-c431-4dba-b16a-4facc0f57802} + {bbee94c0-039e-4699-97a9-e8aefd5df9eb} + + + {f1849734-0d5f-4a86-a43f-30d3e6d291a8} + {1ca06fe7-5ce1-40bb-bf01-2ca52b6df67c} + {c7b94ab4-9722-4c1b-8bd4-3fa5fff4039a} + + + + + true + + + 3 + + + {cf32ad36-a325-4c34-9991-3dd67db3a087} + {ebe92199-3690-4951-be30-3a03924190ea} + + + {7a94e635-fe59-475b-b5ec-763f64272d47} + {0c5cfaee-a761-4fb7-bc5d-4bea10b32f2a} + {8e0468cc-ba10-4940-8b83-a43fc39ee776} + + + + + true + + + 2 + + + 3 + + + {38713503-0836-4716-9138-89592d1ddb5c} + {8955f2c9-b5b7-4834-aa83-4bd1b466bb4d} + + + {d6603e01-9f78-417e-9404-e83930fd1edc} + {b26ffd01-bfa1-46f5-aefb-47f12ca60a0e} + {d06f3783-6231-477d-b065-7f6ff29bd302} + {1f355986-e89c-4512-9b7a-dda4aa1e3c1d} + + + + + Footsteps + + + {6f422bf3-41c8-482b-9618-6725466c9717} + + + {4e064594-4d56-49e7-a721-e5dba6f1d8fa} + + + {04ff217a-6838-4446-8254-6239c1ff7e14} + + + + + {339a915c-b6a1-4c50-a1b7-2c9119e467ee} + {4675e2ba-138a-48e6-9ace-2abd8552a89f} + {b3c64595-530c-4a9b-b655-d0c099501ab2} + + + + + + + pitch + + + 8.33333015 + + + + + volume + + + 3 + + + + + 0 + + + 3 + + + {c578feac-e90f-4dab-acd4-0730ff1efa4c} + + + + + 0 + + + 3 + + + {8c036229-6316-44e5-930d-dbe9448cc1d4} + + + + + 0 + + + 3 + + + {0d1a2d03-68bb-4208-b28d-208303a0166e} + + + + + pitch + + + 8.33333015 + + + + + volume + + + 3 + + + + + 0 + + + 3 + + + {f8fe8df2-84c7-466b-87d3-fffe671bbe34} + + + + + 0 + + + 3 + + + {14378e12-c81b-4be1-a076-28089543a7d4} + + + + + 0 + + + 3 + + + {608e6723-e496-41dd-af8e-53c6ffec238c} + + + + + volume + + + 3 + + + + + pitch + + + 8.33333015 + + + + + 0 + + + 3 + + + {f26961c9-b96c-4118-a178-4f59054cb945} + + + + + 0 + + + 3 + + + {47e0990e-33e8-49a9-ab47-a317cdb61c4e} + + + + + 0 + + + 3 + + + {87b6ef88-09ae-49c5-af4c-ef96edc4d67c} + + + + + 0 + + + 3 + + + {fcd9921a-2274-48ad-b734-dc3b15606131} + + + + + {968cff76-59b3-4cd1-b199-d797131da202} + + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{e9b7aafa-2df0-4193-b32e-a74e5753cfa0}.xml b/game/FMOD Project/Metadata/Event/{e9b7aafa-2df0-4193-b32e-a74e5753cfa0}.xml new file mode 100644 index 0000000..010dd2c --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{e9b7aafa-2df0-4193-b32e-a74e5753cfa0}.xml @@ -0,0 +1,358 @@ + + + + + This is an example of an event using modulated parameters and loop region conditions. + +The "Auto-Stop" parameter makes use of an AHDSR modulator. This modulator pushes the parameter's value to 100% (or 1.00) when the event instance starts. While the "Auto-Stop" parameter's value is 1.00 the playback position will remain within the loop region. Once the event instance is stopped, the release of the AHDSR modulator is applied. This reduces the parameter's value, which in turn disables the loop region by means of a parameter condition. Any already playing gunshots or casings sounds will play out as the playback position leaves the loop region. Because of the AHDSR modulator, the game never has to set the value of the parameter. + +Both the full auto and casings multi instruments use random modulators on their volume and pitch properties to produce variety in the output. They are both asynchronous, meaning they continue playing a triggered playlist entry even when the playback position leaves the instrument's trigger region. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#ahdsr-modulator + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#timeline-logic + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#trigger-conditions + +https://www.fmod.com/resources/documentation-studio?page=modulator-reference.html#random-modulator + +Weapon sounds courtesy of Frank Bry at The Recordist. + + + Machine Gun + + + 2 + + + {0f401ddc-9cc3-4650-9c24-1c43209ca85e} + + + {2e193f8d-92b5-4f55-a7d7-fbd073e56354} + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {95d562e5-0dc1-428c-9296-79fa91967a77} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {5e618944-886a-41d0-96a0-a08198069cb1} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + + + {32918aa0-62ea-4602-a8ed-2313aa64a55e} + + + {a6e74d85-afac-461c-8e55-8727d1d249af} + + + {f065d77c-9711-45c4-93a4-b17083db6c19} + + + {f91ec076-2dcf-408d-b9f6-b182f296d1db} + + + {d95f6b21-4ae6-486c-8ec0-e3695deb06bc} + + + {43f3379e-5632-4032-bdb2-0a3fb3981f88} + {d5c5d770-74e4-43f1-8603-c1da80d355ca} + + + {fd348e80-4a9b-4d16-980b-261d33724ab7} + + + {561cd480-bd2b-4c2e-b919-d775f9c4f409} + + + + + {fc18495c-fa0c-4dff-8fb5-92b727ed2bc9} + + + + + {fc18495c-fa0c-4dff-8fb5-92b727ed2bc9} + + + + + {bf15a3f1-6824-492a-8cb1-db2383349f1b} + + + {dc955c50-b36f-4589-8627-408c59249b53} + + + {f2f57250-d64e-49f6-a300-16bff9658cf3} + + + {dd124d8d-1ccd-4871-a160-5024e3e3f116} + + + + + + + {9d8062f8-eba5-4cc4-81d3-de11c976d710} + + + {ea9c197f-e18e-4658-b971-3fbfc0b272f9} + + + + + {f098657c-294f-4b3e-a071-654dbfdf70a6} + + + {d30a8be5-04c4-42f5-b5f9-c60b7f924b51} + + + + + {9d8062f8-eba5-4cc4-81d3-de11c976d710} + {f098657c-294f-4b3e-a071-654dbfdf70a6} + + + {07817edf-1446-4734-b864-5d967e48ffb1} + + + + + {cb1ca835-58e2-431a-a325-58a86b12ea48} + + + {bff9bf59-023a-4ca4-8dff-44d7d1e9e3a0} + + + {32918aa0-62ea-4602-a8ed-2313aa64a55e} + + + + + {56a8be3e-7042-4c81-8bca-517121783d94} + + + + + + true + + + 0.073777599999999999 + + + 3 + + + {85f8e27f-ca44-42c1-a994-ad4d5b8a3a4b} + {edec6b2e-1ccb-485b-b631-a9874588b917} + + + {e2923c9d-4533-4f5a-b16b-446f285078b3} + {ce965250-f3ff-4161-8fd9-21fd1986f118} + {9973714c-f314-4aaf-82d9-93de7ac3a365} + + + + + Full Auto + + + {39db7427-a2f3-4014-bfa4-4250245b3654} + + + {eda7e555-d35d-48a8-8f10-91f44299067a} + + + {fc18495c-fa0c-4dff-8fb5-92b727ed2bc9} + + + + + true + + + 0.058048349056603762 + + + 0.019985650943396244 + + + {ca906c98-951c-421c-8337-e9eba5153c98} + {d3af8259-939c-49c2-a5ea-d77c6c237711} + + + {0225e917-8a2c-44cf-854e-06d7ad565058} + {7726b5ae-f5ad-493e-a047-fc567f587665} + {1cf277dd-50e0-47e9-b9cd-8159a970c148} + {f6829ca7-4a23-47d2-9d1c-8878d4bdb8c2} + + + + + Casings + + + {f0bf9056-e834-4ee3-88f3-50b1129818d7} + + + {59e9bbca-ed51-4eee-84f4-01ca13a62915} + + + {fc18495c-fa0c-4dff-8fb5-92b727ed2bc9} + + + + + 0 + + + 0.078034000000000006 + + + {fd348e80-4a9b-4d16-980b-261d33724ab7} + + + {d95f6b21-4ae6-486c-8ec0-e3695deb06bc} + + + {1aed06f7-324c-4378-ba64-517bfbd3f85a} + + + + + {aaba4a35-b1d9-49a8-99a0-c630051bbdab} + {0902b178-f7ae-4760-a106-1a11d5047f7d} + {2d6fca5a-4ba1-4757-a68f-45d773c095a4} + + + + + + + pitch + + + 4.16666985 + + + + + volume + + + 2 + + + + + 0 + + + 3 + + + {4516d375-e205-43b3-94bd-2a3ea63a5bb4} + + + + + 0 + + + 3 + + + {eb9a6ecf-85d8-431c-8c07-fcc337bfdc66} + + + + + 0 + + + 3 + + + {801e8274-ecbb-489f-8ca2-b31b9f2c27ff} + + + + + {8d9bed40-adf7-4bad-92fe-a3643f9a3d42} + + + + + + pitch + + + 6.25 + + + + + volume + + + 4 + + + + + {4347f7aa-87f5-4d92-8fd2-b5516b401a45} + + + + + {c8c93b0f-5548-47db-8e38-0b46a644024e} + + + + + {7c12b411-6d4c-4ace-a525-ae147c49c1b1} + + + + + {1e2a0507-d2c4-485f-8527-60381db4a812} + + + + + {f9410e74-bb39-4698-8ed5-a4168081ce7d} + + + + + + 0.99000000953674316 + + + 1 + + + {aebab073-cbb9-4b10-a724-9daa6698a7cd} + + + + + + 0 + + + {3eae0edd-4f73-005f-09e3-f727ff075640} + + + + + 2 + + + {028d38fd-417b-0bad-290b-a30ea50da357} + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/Event/{ec16145a-3712-4b1c-9944-ce26875a548b}.xml b/game/FMOD Project/Metadata/Event/{ec16145a-3712-4b1c-9944-ce26875a548b}.xml new file mode 100644 index 0000000..59fedba --- /dev/null +++ b/game/FMOD Project/Metadata/Event/{ec16145a-3712-4b1c-9944-ce26875a548b}.xml @@ -0,0 +1,1452 @@ + + + + + This is an example of horizontal re-sequencing for a dynamic music event using musical demarcations. + +There is only one single instrument that the playback position loops within specific regions of, depending on the "Intensity" discrete parameter value. At the following value ranges, the playback position transitions to the corresponding named loop region. + + 0: "Rest" + 1: "Low" + 2: "Mid" + 3: "High" + 4: "End" + +When transitioning, this event makes use of the transition timeline - a special timeline that exists between transition markers or transition regions and their associated named loop regions. These transition timelines are useful for smoothly transitioning from one point in the track to the other. You can double-click on a transition marker or transition region to open a transition timeline. You can also play the event with "Follow Playback Position" enabled to see the transition timeline in action. + +In each transition timeline, the source region is crossfaded with the destination region. These crossfades, along with the single instruments on the Transition track, helps to smoothly transition from one state to another. + +On the "Stinger" parameter sheet is a multi instrument that triggers each time the parameter value is set to 0.5 or higher. There is a compressor on the "Music" track which follows the envelope of the signal from the "Stingers" track. When the multi instrument triggers and plays audio, it compresses the volume on the "Music" track. + +The "Stinger" parameter has a negative velocity of -4.00/s, which means the parameter value will continuously reduce until it reaches its minimum value after a value has been set. In this setup, the parameter value can be set to 1 each time a stinger is needed with no need to reset the "Stinger" parameter. + +The "Transition" track has its output set to the "Music" track. Since the "Music" track has a sidechain compressor set up already, this method allows for one compressor to compress the output two tracks which saves on resources. + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#parameters + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#timeline-logic + +https://www.fmod.com/resources/documentation-studio?page=authoring-events.html#transition-timelines + +Music courtesy of +Studio DOMA +Chief Music Composer. +Seung Hyuk YANG +음악감독. 양승혁 +#621-25, Yeoksam-dong, Ganggam-gu, Seoul, Korea +서울특별시 강남구 역삼동 621-25 + +www.studiodoma.com +www.yangseunghyuk.com + + + Level 03 + + + 1 + + + {c2692448-301e-417a-8ade-796c6589bfa4} + + + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {106b1d43-b29e-4938-8809-4868fd036d2b} + {b621cb49-ebca-45dd-85fd-9af87c1d5a40} + {95d562e5-0dc1-428c-9296-79fa91967a77} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4588ab2a-071d-4015-b568-407ac4472c7e} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {33fbfe3e-0e7c-47e1-8aa2-f7a0e9f78857} + {d04b5409-a5d8-48c6-bd2b-4ed1630f88da} + {c993486d-84e1-468e-9f5a-d1b045016729} + {d6ff7340-ab69-44ca-97c8-39118d6593a1} + {236a8681-4e37-498c-a1ea-c0e3819e7267} + {0e5da2a8-064a-46b3-8a8f-07f007eb3c91} + {e4a5d01c-e526-4acf-8985-7e898334379b} + + + {61bcfd5c-5ef5-494c-9ea4-bdfe2820245a} + + + {f05a7186-ad2e-407e-a9ab-874081493ef1} + + + {d3e331cd-9002-47d0-96fa-3732a46c2deb} + + + {bf95088e-43d0-4428-8335-431e7269274e} + + + {b9e57ccd-858b-42c4-a8f8-1337169337ac} + {7e532244-6d5c-4342-90bf-811be0a886fc} + {3b55da82-4f48-4e06-a664-0ce70879118b} + {234733ee-84e1-45c4-af75-0a98248505a9} + {e683ccee-5941-469e-a9c9-7e8e4f889eb4} + + + {6cdb5a95-d0f4-44e7-a6b9-994da9b08190} + {f35a8fea-6f1c-4c9b-9770-c473196c7244} + {92655cca-301a-4a48-b3f1-71a02a3e8976} + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {09718727-0afc-4204-865f-ebe1f1ab004f} + + + {9ad4be16-4f5a-4e4c-a013-f35de106f106} + + + + + {b721bd41-83f5-4d9a-b495-272057433e21} + + + + + {b721bd41-83f5-4d9a-b495-272057433e21} + + + + + {1943797b-7b65-48c4-8990-8390fde049a0} + + + {7f39a640-c904-4202-8a44-5dcfb3f06566} + + + {7e33a2b3-db05-4b7a-ba1e-e862f2bfde36} + + + + + true + + + + + + + + + + true + + + {187c4742-af68-4196-b0b5-f732e9e89f80} + {1e7a22ff-8532-495c-b963-8215639c9b32} + {695d673b-b191-47b8-94a6-fd1eac95c8ed} + {d4c989c9-b3ed-4c3c-8f49-4b022da93ff7} + {34a0671d-c7ec-4e8b-ae6e-a7fac78b3561} + {13ed8bc4-f975-4bb7-9851-a57d68d2019b} + {fe29b464-7ffa-4202-90eb-7ded116c2717} + {6551a24b-9fb6-4f57-9851-74e20e0a5a7f} + {2226a49f-6c02-48b3-9515-4ac41460c832} + {c8019ca7-a97f-48d9-8c3b-4b256de6b1ed} + {8d864d82-b4d7-4b5f-9d16-b3ce61398af6} + + + {b0e5d644-ba8a-4fe3-8cae-890615bf4b6c} + + + + + {a8cb5fb4-f09b-43d1-bbfa-85129faea8ef} + {3564424e-1dae-4694-8e52-cf9ad4e94c8e} + {f8f8ccc8-c4a8-4c39-8ff7-674afc0d4600} + {eb5a1d30-ed6d-4186-9b29-6a148e476bbb} + {1d310e16-0297-48b2-a5eb-56e107d315d4} + {4ef7bd88-8617-421f-b24e-7614a3f1f07e} + {6eb9ccca-2df5-4c87-9e54-7e9d8b9a8535} + {293d6056-c8d5-4ed3-bd13-9c09cc03c8d1} + {24595760-2b23-426a-81b8-8f363cefaf93} + {20ff2b5c-531d-4547-8670-5191ae2a40d0} + {7743e1f4-81bb-4541-a800-ea6a9c827c39} + {e1bbf39a-d100-439f-a08b-2017508a5d1f} + {9ec067eb-c1b7-487c-b406-4caf369338dc} + {6e8ce40b-a8e3-410c-a368-0ef3e4c016a6} + {ea01f339-0e49-4c3c-bee3-edfdbd40d7c7} + + + {45d29208-228a-4ba1-94f8-22e43f625d55} + + + + + {c0290db6-6b92-47eb-b085-04d9055e69fc} + {4f4c20cf-a893-425c-b92a-b95fb3e8eae0} + {986489f9-cba7-45cd-8ead-df4978089cde} + {42090352-ce48-4092-a4c6-27fca3a13ebd} + {44e105d4-9ebe-456d-920e-5ad3389488fb} + {6668d1cf-0376-4c7a-8c86-ca6471a74109} + {8d5efb2e-961c-4170-87c8-7d1c84d5c4cb} + {919d1cbd-93aa-426b-b70f-cec13c34e82d} + {f154063b-224a-4a8d-b8db-da0b882449ee} + {c926090a-2062-42ac-b74b-56e6563ef1e7} + {afa7e229-368d-4bbc-a5c7-b4567af0de9e} + + + {41c976a0-9a65-4989-beda-47465812be94} + + + + + {8d864d82-b4d7-4b5f-9d16-b3ce61398af6} + + + {a6da1958-2e2a-486a-91d3-5adca7be303e} + {14c6d303-b6f8-41fb-bace-79b4c640a70d} + {c164a812-b240-45cb-a2eb-c4434ac2d2a3} + {b27fe1fb-80f7-48d7-a5bd-dbc7972d7e89} + {50e52f07-d827-45a5-a164-f2b4ae692ea5} + {c9047f07-53f9-4159-a1b7-31df17776e71} + {b8a5cff2-d7b4-4fdb-b348-7e993ddd0013} + {72166c0a-6662-4474-8043-6fdabb5b732f} + {4685aa36-8394-4777-a75f-2feffa33448a} + {6fac1a12-fde3-41e3-9791-7d6c8b802e51} + {85a10464-2894-45ab-99e1-c5041071d394} + {acb12ceb-1805-4878-b6ae-b04b3159eefd} + + + + + {afa7e229-368d-4bbc-a5c7-b4567af0de9e} + + + {b045090a-b061-4c45-90d8-54a5c15e2188} + + + + + {9fdcf810-9740-4503-9834-6c948243e0a9} + + + {65990aaf-5d56-4d9a-abde-1ea08b7ad287} + + + {61bcfd5c-5ef5-494c-9ea4-bdfe2820245a} + + + + + {7fa530de-aebb-4cd6-b936-13989f468282} + + + + + + true + + + 3.4285714285714284 + + + 3 + + + {562b0d0b-3e00-47e6-9f8e-9aa059a33267} + + + + + true + + + 3.4285714285714284 + + + 3 + + + {7c15667b-4328-45ab-a3f5-4156386c191a} + + + + + true + + + 3.4285714285714284 + + + 3 + + + {ccf3bc6c-4d09-4e6d-bfa4-bbb38e05fd7b} + + + + + true + + + 3.4285714285714284 + + + 3 + + + {7d5024a7-02ba-49bf-8f3e-3c0524e916c4} + + + + + true + + + 3.4285714285714284 + + + 3 + + + {5f0b9a2a-8d4c-44b7-96a2-a8948116aa19} + + + + + true + + + 3.4285714285714279 + + + 3 + + + {00360aff-8a9c-4075-8957-5e866facf09c} + + + + + true + + + 3.4285714285714284 + + + 3 + + + {9eca6e1c-bb83-4013-84a9-de551758f4d6} + + + + + true + + + 3.4285714285714279 + + + 3 + + + {20310c0c-c388-4dee-9e7a-8aa3b3c68f99} + + + + + true + + + 3.4285714285714284 + + + 3 + + + {541db4fa-11b5-4af1-a590-d3c97c8b746e} + + + + + true + + + 3.4285714285714284 + + + 3 + + + {e5aa8fe2-eb04-43e3-8592-89c66126189e} + + + + + 150.85732426303855 + + + 3 + + + {f63a80d4-0de0-484d-a924-359754d6a291} + + + + + Music + + + {9e62ee34-bdc4-467a-b9e7-f273a89e98f8} + + + {f98ba389-0ec1-41e8-a9f4-f309f693c3fa} + + + {b721bd41-83f5-4d9a-b495-272057433e21} + + + + + true + + + 3.4285714285714284 + + + 0 + + + 3 + + + + + 3.4286394557823101 + + + 3 + + + true + + + {fda6a917-19df-4aeb-9ac1-a053fe3c57d3} + + + + + 3.4286394557823101 + + + 3 + + + true + + + {4ca59036-2c6a-4f38-87d5-ae572b4db327} + + + + + true + + + 0 + + + 3 + + + + + true + + + 3.4285714285714284 + + + 0 + + + 3 + + + + + 3.4285714285714284 + + + 3 + + + true + + + {399764f2-a39a-4c92-8849-ce934c0f6693} + + + + + true + + + 0 + + + 3 + + + + + true + + + 3.4285714285714279 + + + 0 + + + 3 + + + + + true + + + 3.4285714285714284 + + + 0 + + + 3 + + + + + true + + + 0 + + + 3 + + + + + true + + + 0 + + + 3 + + + + + true + + + 0 + + + 3 + + + + + true + + + 3.4285714285714284 + + + 0 + + + 3 + + + + + 3.4286394557823101 + + + 3 + + + true + + + {339d1a83-2202-4a73-85ef-b987b61b496a} + + + + + 3.4285714285714284 + + + 3 + + + true + + + {6b768c6e-b5c4-40e8-ba90-83000490dec4} + + + + + Transition + + + {9ab07a6e-52b8-4c61-a50b-3c6519304e81} + + + {bb07177e-915a-487d-aba9-997edcc2332b} + + + {b0e5d644-ba8a-4fe3-8cae-890615bf4b6c} + + + + + 3.4285714285714284 + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 3.4285714285714284 + + + 0 + + + + + 3.4285714285714279 + + + 0 + + + + + 3.4285714285714284 + + + 0 + + + + + 3.4285714285714284 + + + 0 + + + + + 0.5 + + + 0.5 + + + 3 + + + 1 + + + 2 + + + {36cc6166-3337-4a2c-a75c-a37c0ed35131} + {d2dfdbf1-b8f7-421f-b57c-ac42296a4f18} + + + + + Stingers + + + {7ede3f37-e60b-42f7-b2b2-7d11d4b0862d} + + + {0401b02e-c893-4d86-9639-b322a68d00ad} + + + {b721bd41-83f5-4d9a-b495-272057433e21} + + + + + 51.428571428571423 + + + 47.999999999999993 + + + 2 + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {234733ee-84e1-45c4-af75-0a98248505a9} + + + {a4e9f84c-80ae-4ee3-b9c3-0c1fc5afc1b8} + + + {b27fe1fb-80f7-48d7-a5bd-dbc7972d7e89} + + + {0d5839b6-bf01-4093-8549-4ce45a710748} + + + + + 99.428571428571416 + + + 44.571428571428584 + + + 2 + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {234733ee-84e1-45c4-af75-0a98248505a9} + + + {238d46cc-a00c-4840-b1fd-be05330d87be} + + + {85a10464-2894-45ab-99e1-c5041071d394} + + + {7d64c076-ae3b-46d8-b836-dd6766b02b95} + + + + + 51.428571428571423 + + + 96 + + + 2 + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {e683ccee-5941-469e-a9c9-7e8e4f889eb4} + + + {c9047f07-53f9-4159-a1b7-31df17776e71} + + + {9ea7fb60-af02-4422-8982-260ce2ad4fbd} + + + + + 99.428571428571416 + + + 48 + + + High + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {7e532244-6d5c-4342-90bf-811be0a886fc} + + + + + 0 + + + 140 + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {b9e57ccd-858b-42c4-a8f8-1337169337ac} + + + + + 147.42857142857142 + + + End + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {7e532244-6d5c-4342-90bf-811be0a886fc} + + + + + 0 + + + 12 + + + Rest + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {7e532244-6d5c-4342-90bf-811be0a886fc} + + + + + 12 + + + 39.428571428571423 + + + Low + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {7e532244-6d5c-4342-90bf-811be0a886fc} + + + + + 51.428571428571423 + + + 47.999999999999993 + + + 2 + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {3b55da82-4f48-4e06-a664-0ce70879118b} + + + {ddec4e3d-8bb7-4eb9-bc86-affafddd8196} + + + {72166c0a-6662-4474-8043-6fdabb5b732f} + + + {877d481e-1495-4763-90ef-7b2b3186f5f9} + + + + + 12 + + + 39.428571428571423 + + + 2 + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {3b55da82-4f48-4e06-a664-0ce70879118b} + + + {265a4b9b-68a8-4d6b-9ffe-5d8564c49235} + + + {85a10464-2894-45ab-99e1-c5041071d394} + + + {2249beab-232a-40e1-acc8-2f7c39841bf9} + + + + + 51.428571428571423 + + + 48 + + + Mid + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {7e532244-6d5c-4342-90bf-811be0a886fc} + + + + + 0 + + + 12 + + + 2 + + + {ccbc9be4-0428-47c8-a28f-df330739e1f8} + + + {3b55da82-4f48-4e06-a664-0ce70879118b} + + + {dfeb5bf7-7b63-497c-b3f1-fe0537831528} + + + {72166c0a-6662-4474-8043-6fdabb5b732f} + + + {b659e875-e120-4ed2-9ded-3399f8b5988a} + + + + + {12857f8e-5a4e-4a51-80e5-7943c2149fce} + + + + + + + {bd884cf9-e5b7-40f4-abdb-af47c32ddffe} + + + {723b19dc-3ae4-4d35-a8dd-e48cee84ca17} + + + {34a0671d-c7ec-4e8b-ae6e-a7fac78b3561} + + + + + {d9b3fc22-8b6d-4819-b5ec-651090887847} + + + {ba121c28-3e02-4443-9321-c307dbd0cdce} + + + {695d673b-b191-47b8-94a6-fd1eac95c8ed} + + + + + {4534f215-5e0c-4204-9220-6ccdb36d680c} + + + {55997eed-7474-49e9-8366-84fb90a59d87} + + + {1e7a22ff-8532-495c-b963-8215639c9b32} + + + + + {8be16508-82aa-43e0-8845-27ec1b157d53} + + + {41cc5716-649e-4931-a947-dd4390d64f3f} + + + {c8019ca7-a97f-48d9-8c3b-4b256de6b1ed} + + + + + {338d9f36-577a-4573-af19-47e4476fe015} + + + {ccfc9b42-40fb-483b-b1a2-d455824b5bd2} + + + {187c4742-af68-4196-b0b5-f732e9e89f80} + + + + + {fd7bfd7a-5356-488e-a16c-50aadc7ec852} + + + {00eba7d7-f3be-4607-9089-b297a0133612} + + + {6551a24b-9fb6-4f57-9851-74e20e0a5a7f} + + + + + {e7b5c436-3a51-4343-88d9-72e241084b59} + + + {58016e89-20cc-4172-b3ac-b2a7ca634053} + + + {2226a49f-6c02-48b3-9515-4ac41460c832} + + + + + {33a7c7e7-81db-4a28-aa48-261994b90cea} + + + {678991b6-5e81-480c-9b05-c78104e2d83f} + + + {13ed8bc4-f975-4bb7-9851-a57d68d2019b} + + + + + {ed84e92b-e76e-4ada-8277-2e32eeb03c97} + + + {d5f99a91-a4f8-499e-be77-0d20613b3390} + + + {fe29b464-7ffa-4202-90eb-7ded116c2717} + + + + + {f1dcd27d-8546-4afd-8317-c1a8fda43c60} + + + {ff51bff1-1a39-437e-a913-f92c74c775ea} + + + {d4c989c9-b3ed-4c3c-8f49-4b022da93ff7} + + + + + {076296c3-54b4-4a7d-828f-a5e95dc939c8} + {f0f46407-ea83-4dc2-b4bc-dcaa4f2bd260} + + + + + + {5b8b0d43-e184-4eda-9488-bd223ec9582d} + + + + + + {492f9914-e7ca-402d-a1ec-f8714a4faa19} + + + + + {155756cd-255d-469a-932b-2e2f489bad06} + + + + + {078dad93-6cb3-44bd-83c9-76d1bad41bbd} + {65402e72-bf1c-4f5c-bb69-e9461fd4463e} + + + + + + 3.4285714285714284 + + + {fe29b464-7ffa-4202-90eb-7ded116c2717} + {e1bbf39a-d100-439f-a08b-2017508a5d1f} + {2226a49f-6c02-48b3-9515-4ac41460c832} + {9ec067eb-c1b7-487c-b406-4caf369338dc} + {ea01f339-0e49-4c3c-bee3-edfdbd40d7c7} + {6668d1cf-0376-4c7a-8c86-ca6471a74109} + {f154063b-224a-4a8d-b8db-da0b882449ee} + + + + + 3 + + + 3 + + + {96d6cd3d-ea4f-4baa-b368-2f1d98940b31} + + + + + 3.4285714285714284 + + + {187c4742-af68-4196-b0b5-f732e9e89f80} + {34a0671d-c7ec-4e8b-ae6e-a7fac78b3561} + {44e105d4-9ebe-456d-920e-5ad3389488fb} + {24595760-2b23-426a-81b8-8f363cefaf93} + {4ef7bd88-8617-421f-b24e-7614a3f1f07e} + {7743e1f4-81bb-4541-a800-ea6a9c827c39} + {8d5efb2e-961c-4170-87c8-7d1c84d5c4cb} + + + + + 0 + + + 2 + + + {96d6cd3d-ea4f-4baa-b368-2f1d98940b31} + + + + + 4 + + + 4 + + + {96d6cd3d-ea4f-4baa-b368-2f1d98940b31} + + + + + 3.4285714285714279 + + + {f8f8ccc8-c4a8-4c39-8ff7-674afc0d4600} + {42090352-ce48-4092-a4c6-27fca3a13ebd} + {293d6056-c8d5-4ed3-bd13-9c09cc03c8d1} + {13ed8bc4-f975-4bb7-9851-a57d68d2019b} + {6551a24b-9fb6-4f57-9851-74e20e0a5a7f} + {6eb9ccca-2df5-4c87-9e54-7e9d8b9a8535} + {919d1cbd-93aa-426b-b70f-cec13c34e82d} + + + + + 0 + + + 1 + + + {96d6cd3d-ea4f-4baa-b368-2f1d98940b31} + + + + + 3.4285714285714284 + + + {c0290db6-6b92-47eb-b085-04d9055e69fc} + {a8cb5fb4-f09b-43d1-bbfa-85129faea8ef} + {1e7a22ff-8532-495c-b963-8215639c9b32} + {4f4c20cf-a893-425c-b92a-b95fb3e8eae0} + {695d673b-b191-47b8-94a6-fd1eac95c8ed} + {6e8ce40b-a8e3-410c-a368-0ef3e4c016a6} + {20ff2b5c-531d-4547-8670-5191ae2a40d0} + + + + + 2 + + + 4 + + + {96d6cd3d-ea4f-4baa-b368-2f1d98940b31} + + + + + 3.4285714285714284 + + + {3564424e-1dae-4694-8e52-cf9ad4e94c8e} + {eb5a1d30-ed6d-4186-9b29-6a148e476bbb} + {1d310e16-0297-48b2-a5eb-56e107d315d4} + {d4c989c9-b3ed-4c3c-8f49-4b022da93ff7} + {c926090a-2062-42ac-b74b-56e6563ef1e7} + {c8019ca7-a97f-48d9-8c3b-4b256de6b1ed} + {986489f9-cba7-45cd-8ead-df4978089cde} + + + + + 1 + + + 4 + + + {96d6cd3d-ea4f-4baa-b368-2f1d98940b31} + + + + + + 0 + + + 0 + + + -0.2547189 + + + + + 3.4285714285714284 + + + 1 + + + + + 0 + + + 0 + + + -0.2547189 + + + + + 3.4285714285714284 + + + 1 + + + + + 0 + + + 1 + + + 0.25471893 + + + + + 3.4285714285714284 + + + 0 + + + + + 0 + + + 1 + + + 0.25471893 + + + + + 3.4285714285714284 + + + 0 + + + + + 0 + + + 1 + + + 0.25471893 + + + + + 3.4285714285714284 + + + 0 + + + + + 0 + + + 0 + + + -0.2547189 + + + + + 3.4285714285714279 + + + 1 + + + + + 0 + + + 1 + + + 0.25471893 + + + + + 3.4285714285714284 + + + 0 + + + + + 0 + + + 1 + + + 0.25471893 + + + + + 3.4285714285714279 + + + 0 + + + + + 0 + + + 0 + + + -0.2547189 + + + + + 3.4285714285714284 + + + 1 + + + + + 0 + + + 0 + + + -0.2547189 + + + + + 3.4285714285714284 + + + 1 + + + + + + -30 + + + 100 + + + 500 + + + {65402e72-bf1c-4f5c-bb69-e9461fd4463e} + + + + + + \ No newline at end of file diff --git a/game/FMOD Project/Metadata/EventFolder/{0f401ddc-9cc3-4650-9c24-1c43209ca85e}.xml b/game/FMOD Project/Metadata/EventFolder/{0f401ddc-9cc3-4650-9c24-1c43209ca85e}.xml new file mode 100644 index 0000000..2ffb45f --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{0f401ddc-9cc3-4650-9c24-1c43209ca85e}.xml @@ -0,0 +1,11 @@ + + + + + Weapons + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{10626052-c98b-4665-b391-646f2512cecd}.xml b/game/FMOD Project/Metadata/EventFolder/{10626052-c98b-4665-b391-646f2512cecd}.xml new file mode 100644 index 0000000..8085ecf --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{10626052-c98b-4665-b391-646f2512cecd}.xml @@ -0,0 +1,8 @@ + + + + + Master + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{24af3eef-4e1a-46c4-98e7-5211bb3a531c}.xml b/game/FMOD Project/Metadata/EventFolder/{24af3eef-4e1a-46c4-98e7-5211bb3a531c}.xml new file mode 100644 index 0000000..b896f0e --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{24af3eef-4e1a-46c4-98e7-5211bb3a531c}.xml @@ -0,0 +1,11 @@ + + + + + Vehicles + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{33020bd4-6815-4ed7-b787-bc0035017be4}.xml b/game/FMOD Project/Metadata/EventFolder/{33020bd4-6815-4ed7-b787-bc0035017be4}.xml new file mode 100644 index 0000000..e1d79b5 --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{33020bd4-6815-4ed7-b787-bc0035017be4}.xml @@ -0,0 +1,11 @@ + + + + + Character + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{53fb91f9-f800-4355-b1b0-5a0d20e6cf91}.xml b/game/FMOD Project/Metadata/EventFolder/{53fb91f9-f800-4355-b1b0-5a0d20e6cf91}.xml new file mode 100644 index 0000000..e442998 --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{53fb91f9-f800-4355-b1b0-5a0d20e6cf91}.xml @@ -0,0 +1,11 @@ + + + + + Interactables + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{660d8cf9-5917-44af-b2f8-ac4ec0c98f0d}.xml b/game/FMOD Project/Metadata/EventFolder/{660d8cf9-5917-44af-b2f8-ac4ec0c98f0d}.xml new file mode 100644 index 0000000..cdb6e29 --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{660d8cf9-5917-44af-b2f8-ac4ec0c98f0d}.xml @@ -0,0 +1,11 @@ + + + + + UI + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{b6770cc5-a214-4b8e-bc5e-d7983fee345a}.xml b/game/FMOD Project/Metadata/EventFolder/{b6770cc5-a214-4b8e-bc5e-d7983fee345a}.xml new file mode 100644 index 0000000..1ee8cba --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{b6770cc5-a214-4b8e-bc5e-d7983fee345a}.xml @@ -0,0 +1,11 @@ + + + + + Ambience + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{c2692448-301e-417a-8ade-796c6589bfa4}.xml b/game/FMOD Project/Metadata/EventFolder/{c2692448-301e-417a-8ade-796c6589bfa4}.xml new file mode 100644 index 0000000..2e709c3 --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{c2692448-301e-417a-8ade-796c6589bfa4}.xml @@ -0,0 +1,11 @@ + + + + + Music + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/EventFolder/{f9405a0f-f7a4-4ff1-91bb-e954833f9503}.xml b/game/FMOD Project/Metadata/EventFolder/{f9405a0f-f7a4-4ff1-91bb-e954833f9503}.xml new file mode 100644 index 0000000..6b9aed6 --- /dev/null +++ b/game/FMOD Project/Metadata/EventFolder/{f9405a0f-f7a4-4ff1-91bb-e954833f9503}.xml @@ -0,0 +1,11 @@ + + + + + VO + + + {10626052-c98b-4665-b391-646f2512cecd} + + + diff --git a/game/FMOD Project/Metadata/Group/{009ebac0-e5a9-4e69-8d37-6bdc9d8c6f45}.xml b/game/FMOD Project/Metadata/Group/{009ebac0-e5a9-4e69-8d37-6bdc9d8c6f45}.xml new file mode 100644 index 0000000..a62b8f8 --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{009ebac0-e5a9-4e69-8d37-6bdc9d8c6f45}.xml @@ -0,0 +1,27 @@ + + + + + Objects + + + {3f0b7d64-e765-400e-ae74-c2d973ad4ca1} + + + {fc3f6a25-f8dc-47bd-bb63-44ffc97776f0} + + + {5d4f7768-c662-4a2d-b6bc-5f024f06b0eb} + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {45558549-ff0b-4cf0-a144-70646b49de71} + + + + + diff --git a/game/FMOD Project/Metadata/Group/{37ebea86-d649-4a7a-b7b5-25701bfce8e9}.xml b/game/FMOD Project/Metadata/Group/{37ebea86-d649-4a7a-b7b5-25701bfce8e9}.xml new file mode 100644 index 0000000..17d955d --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{37ebea86-d649-4a7a-b7b5-25701bfce8e9}.xml @@ -0,0 +1,27 @@ + + + + + Vehicles + + + {3f0b7d64-e765-400e-ae74-c2d973ad4ca1} + + + {9bc61712-6cbf-4086-b59e-c682a47f86db} + + + {ccb86b1a-3b3b-4f58-a1b4-98869af17198} + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {910f2a37-98b6-4bb5-907a-752477e78898} + + + + + diff --git a/game/FMOD Project/Metadata/Group/{3e1d1653-8bd5-4dbc-865e-cba8e8ded970}.xml b/game/FMOD Project/Metadata/Group/{3e1d1653-8bd5-4dbc-865e-cba8e8ded970}.xml new file mode 100644 index 0000000..ba799bf --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{3e1d1653-8bd5-4dbc-865e-cba8e8ded970}.xml @@ -0,0 +1,24 @@ + + + + + Character + + + {fee91a83-3f26-434e-b6b0-1edf6cf1db5e} + + + {8d0261b0-05e0-4755-bca1-8fb4ee7ea705} + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {b621545c-5235-4ee6-a556-f0856a19ae8b} + + + + + diff --git a/game/FMOD Project/Metadata/Group/{670390e5-527e-4f22-8654-b0326c9cc0c6}.xml b/game/FMOD Project/Metadata/Group/{670390e5-527e-4f22-8654-b0326c9cc0c6}.xml new file mode 100644 index 0000000..d5f12e7 --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{670390e5-527e-4f22-8654-b0326c9cc0c6}.xml @@ -0,0 +1,24 @@ + + + + + UI + + + {3fe8b833-ece6-4a31-a7a3-44ed0e82b1fc} + + + {3cc9c7e5-121a-481e-bc88-5e4148a54b99} + + + {af9d027a-3a1f-49a8-a9ef-4cbe20673632} + + + + + {6df3d979-3763-4daa-b919-9c8151640547} + + + + + diff --git a/game/FMOD Project/Metadata/Group/{69d0d47a-7f4b-4d6c-bfc3-bda91e9f7f1f}.xml b/game/FMOD Project/Metadata/Group/{69d0d47a-7f4b-4d6c-bfc3-bda91e9f7f1f}.xml new file mode 100644 index 0000000..7a3a747 --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{69d0d47a-7f4b-4d6c-bfc3-bda91e9f7f1f}.xml @@ -0,0 +1,33 @@ + + + + + VO + + + {b0f041e6-438e-47b5-b1b0-0ddaf314033a} + + + {d97cc1b6-d8f7-4971-b19e-18973d1ca2d5} + + + {af9d027a-3a1f-49a8-a9ef-4cbe20673632} + + + + + {623c72f2-91b0-441a-aaef-1b6108364a42} + {d89c162f-d43b-46b5-a5c2-36c22f6abaf8} + + + + + -0.0250957999 + + + 51 + + + + + diff --git a/game/FMOD Project/Metadata/Group/{7e33a2b3-db05-4b7a-ba1e-e862f2bfde36}.xml b/game/FMOD Project/Metadata/Group/{7e33a2b3-db05-4b7a-ba1e-e862f2bfde36}.xml new file mode 100644 index 0000000..836b757 --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{7e33a2b3-db05-4b7a-ba1e-e862f2bfde36}.xml @@ -0,0 +1,30 @@ + + + + + Music + + + {dbc14ad0-a58d-478c-9e10-5df229e206c3} + + + {bfbace69-aa45-4e7f-b2ca-ef8f4c761769} + + + {af9d027a-3a1f-49a8-a9ef-4cbe20673632} + + + + + {7fd423d2-f491-4d97-9ada-841c9377334e} + {c8b28687-4f38-43f8-ae3a-64c9dcfbfee0} + + + + + + + 22000 + + + diff --git a/game/FMOD Project/Metadata/Group/{d320eb98-3d4a-4cd9-a001-fdb4e071c58e}.xml b/game/FMOD Project/Metadata/Group/{d320eb98-3d4a-4cd9-a001-fdb4e071c58e}.xml new file mode 100644 index 0000000..239c828 --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{d320eb98-3d4a-4cd9-a001-fdb4e071c58e}.xml @@ -0,0 +1,39 @@ + + + + + SFX + + + {fd2b0385-e5e7-4c14-8348-7ada37283192} + + + {e0d8b0f4-1b05-4412-9cdd-9994818597ad} + + + {af9d027a-3a1f-49a8-a9ef-4cbe20673632} + + + + + {523cc29c-3057-4acc-97d7-dd82831adfed} + {a7a9dc9e-2051-44f7-8925-0ddb318ebacb} + + + + + + -20 + + + 2.9000001 + + + 6 + + + {623c72f2-91b0-441a-aaef-1b6108364a42} + + + + diff --git a/game/FMOD Project/Metadata/Group/{d9982c58-a056-4e6c-b8e3-883854b4bffb}.xml b/game/FMOD Project/Metadata/Group/{d9982c58-a056-4e6c-b8e3-883854b4bffb}.xml new file mode 100644 index 0000000..d25cfe2 --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{d9982c58-a056-4e6c-b8e3-883854b4bffb}.xml @@ -0,0 +1,27 @@ + + + + + Ambience + + + {3f0b7d64-e765-400e-ae74-c2d973ad4ca1} + + + {20931c8e-ccb7-46f7-823c-5087a2849e46} + + + {d3c42ad5-d43b-4793-951d-ff12618efd0d} + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {d66fb747-10a5-4233-ae48-31c49f513229} + + + + + diff --git a/game/FMOD Project/Metadata/Group/{da23c66c-e512-4a93-98dc-02d6f58e4c5a}.xml b/game/FMOD Project/Metadata/Group/{da23c66c-e512-4a93-98dc-02d6f58e4c5a}.xml new file mode 100644 index 0000000..d6773a2 --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{da23c66c-e512-4a93-98dc-02d6f58e4c5a}.xml @@ -0,0 +1,27 @@ + + + + + Explosions + + + {3f0b7d64-e765-400e-ae74-c2d973ad4ca1} + + + {30990ff2-375e-47f6-b140-60c0fa26843b} + + + {26f55d48-08a6-45ae-9a60-15b3c9c16846} + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {e94c3160-7164-4414-a843-feba3c67b6f4} + + + + + diff --git a/game/FMOD Project/Metadata/Group/{dd124d8d-1ccd-4871-a160-5024e3e3f116}.xml b/game/FMOD Project/Metadata/Group/{dd124d8d-1ccd-4871-a160-5024e3e3f116}.xml new file mode 100644 index 0000000..0b212dd --- /dev/null +++ b/game/FMOD Project/Metadata/Group/{dd124d8d-1ccd-4871-a160-5024e3e3f116}.xml @@ -0,0 +1,24 @@ + + + + + Weapons + + + {5b5e509e-fbb8-44d7-8e69-04ad2b4c76ce} + + + {b5f4dd6c-5a6c-4cb7-b72a-c2288933a691} + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {910b46f3-74d8-401e-bcdd-edbd28bb263b} + + + + + diff --git a/game/FMOD Project/Metadata/Locale/{257d5ec6-3b22-4b51-8f79-e9d463ab102a}.xml b/game/FMOD Project/Metadata/Locale/{257d5ec6-3b22-4b51-8f79-e9d463ab102a}.xml new file mode 100644 index 0000000..683fa59 --- /dev/null +++ b/game/FMOD Project/Metadata/Locale/{257d5ec6-3b22-4b51-8f79-e9d463ab102a}.xml @@ -0,0 +1,11 @@ + + + + + English + + + EN + + + diff --git a/game/FMOD Project/Metadata/Locale/{4c47f2c8-26a5-4542-b59e-7c28c629ba48}.xml b/game/FMOD Project/Metadata/Locale/{4c47f2c8-26a5-4542-b59e-7c28c629ba48}.xml new file mode 100644 index 0000000..6ae590c --- /dev/null +++ b/game/FMOD Project/Metadata/Locale/{4c47f2c8-26a5-4542-b59e-7c28c629ba48}.xml @@ -0,0 +1,11 @@ + + + + + Chinese + + + CN + + + diff --git a/game/FMOD Project/Metadata/Locale/{6c4f00a8-d2d3-431e-af63-1615148089df}.xml b/game/FMOD Project/Metadata/Locale/{6c4f00a8-d2d3-431e-af63-1615148089df}.xml new file mode 100644 index 0000000..90007fc --- /dev/null +++ b/game/FMOD Project/Metadata/Locale/{6c4f00a8-d2d3-431e-af63-1615148089df}.xml @@ -0,0 +1,11 @@ + + + + + Japanese + + + JP + + + diff --git a/game/FMOD Project/Metadata/Master.xml b/game/FMOD Project/Metadata/Master.xml new file mode 100644 index 0000000..65fc07d --- /dev/null +++ b/game/FMOD Project/Metadata/Master.xml @@ -0,0 +1,34 @@ + + + + + Master Bus + + + {92bdd82e-c037-4218-9180-212628eb7e62} + + + {f5190665-2c6e-4635-bf36-1e39c167ee36} + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + + + {93621478-1067-4bca-9c53-fc6d7d738a70} + {c527f825-da25-48fc-a12d-b86b12c3fc2e} + + + + + 2 + + + + + + {8d452eed-4519-4e5e-9f8d-5ab4c83b0c2a} + + + diff --git a/game/FMOD Project/Metadata/Mixer.xml b/game/FMOD Project/Metadata/Mixer.xml new file mode 100644 index 0000000..2f45a70 --- /dev/null +++ b/game/FMOD Project/Metadata/Mixer.xml @@ -0,0 +1,11 @@ + + + + + {af9d027a-3a1f-49a8-a9ef-4cbe20673632} + + + {2e15ae1f-9888-48d4-9994-adc998ae281e} + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{1de831a1-f6c2-0b4f-0035-82d4368571cd}.xml b/game/FMOD Project/Metadata/ParameterPreset/{1de831a1-f6c2-0b4f-0035-82d4368571cd}.xml new file mode 100644 index 0000000..1df819d --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{1de831a1-f6c2-0b4f-0035-82d4368571cd}.xml @@ -0,0 +1,36 @@ + + + + + Surface + + + {0c8bfb2a-0176-4c5c-93b8-21686ed85878} + + + {5decf701-7e48-4848-b796-416ec40eb26c} + + + + + 2 + + + 3 + + + Carpet + Grass + Wood Floor + + + true + + + 0 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{1fe5453b-62b3-49fa-a1a6-c02483b4c369}.xml b/game/FMOD Project/Metadata/ParameterPreset/{1fe5453b-62b3-49fa-a1a6-c02483b4c369}.xml new file mode 100644 index 0000000..ab73989 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{1fe5453b-62b3-49fa-a1a6-c02483b4c369}.xml @@ -0,0 +1,22 @@ + + + + + Wind + + + {36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc} + + + {aa37dcda-6161-459d-bdf5-9400828f7ed3} + + + + + 0 + + + 0.15000000596046448 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{43e6b6f0-1590-453f-8c94-967a53ed9125}.xml b/game/FMOD Project/Metadata/ParameterPreset/{43e6b6f0-1590-453f-8c94-967a53ed9125}.xml new file mode 100644 index 0000000..63ed269 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{43e6b6f0-1590-453f-8c94-967a53ed9125}.xml @@ -0,0 +1,22 @@ + + + + + Health + + + {0c8bfb2a-0176-4c5c-93b8-21686ed85878} + + + {b1dc55b5-1863-4645-a918-a52d80cb9c65} + + + + + 100 + + + 100 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{4980ac08-6064-4461-a69f-d6f80dac6d45}.xml b/game/FMOD Project/Metadata/ParameterPreset/{4980ac08-6064-4461-a69f-d6f80dac6d45}.xml new file mode 100644 index 0000000..bed4e4c --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{4980ac08-6064-4461-a69f-d6f80dac6d45}.xml @@ -0,0 +1,22 @@ + + + + + Stinger + + + {3e59dc97-b9c6-4910-89b6-66f75e53bb5c} + + + {b045090a-b061-4c45-90d8-54a5c15e2188} + + + + + 0 + + + -4 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{4a8030af-f56e-4fb8-8813-9ec2a0a955b3}.xml b/game/FMOD Project/Metadata/ParameterPreset/{4a8030af-f56e-4fb8-8813-9ec2a0a955b3}.xml new file mode 100644 index 0000000..aa6cbbd --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{4a8030af-f56e-4fb8-8813-9ec2a0a955b3}.xml @@ -0,0 +1,31 @@ + + + + + Distance + + + {a0bd4fb7-a8cc-49c1-adfc-c2037026f39f} + + + {b53728c5-53bd-4679-bdb1-cd4395b4dbc9} + + + + + 3 + + + 100 + + + true + + + 0 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{4c11a422-1753-4b5c-8861-a5e894e723a1}.xml b/game/FMOD Project/Metadata/ParameterPreset/{4c11a422-1753-4b5c-8861-a5e894e723a1}.xml new file mode 100644 index 0000000..fa7e060 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{4c11a422-1753-4b5c-8861-a5e894e723a1}.xml @@ -0,0 +1,22 @@ + + + + + Rain + + + {36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc} + + + {4ad59307-2c9a-498d-b318-3a35d01c3b9c} + + + + + 0 + + + 0.15000000596046448 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{4d06710e-a644-46ba-90a1-7572e64fa2eb}.xml b/game/FMOD Project/Metadata/ParameterPreset/{4d06710e-a644-46ba-90a1-7572e64fa2eb}.xml new file mode 100644 index 0000000..6bc81c9 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{4d06710e-a644-46ba-90a1-7572e64fa2eb}.xml @@ -0,0 +1,22 @@ + + + + + Speed + + + {8dddc191-0624-4dca-92d9-a7a0e6b865fc} + + + {6fbe4ad6-7ed5-43c8-94ac-fe278fcdbe03} + + + + + 8 + + + 0 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{56e45342-e996-4a60-9347-93333e72f544}.xml b/game/FMOD Project/Metadata/ParameterPreset/{56e45342-e996-4a60-9347-93333e72f544}.xml new file mode 100644 index 0000000..b8ec31d --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{56e45342-e996-4a60-9347-93333e72f544}.xml @@ -0,0 +1,22 @@ + + + + + Spatializer + + + {6328a2a2-e406-4252-bb10-b293c7a3cca4} + + + {e38d3ac3-5b68-4f54-94c8-0d4bfa3809c2} + + + + + 2 + + + 0 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{60a6ede0-cdc1-0034-2f15-2d5a47c70422}.xml b/game/FMOD Project/Metadata/ParameterPreset/{60a6ede0-cdc1-0034-2f15-2d5a47c70422}.xml new file mode 100644 index 0000000..c9330d7 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{60a6ede0-cdc1-0034-2f15-2d5a47c70422}.xml @@ -0,0 +1,25 @@ + + + + + Area + + + {3e59dc97-b9c6-4910-89b6-66f75e53bb5c} + + + {20a22b40-454b-4333-98b6-eee0b54cc783} + + + + + 80 + + + 0 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{65a1865c-7651-0bd1-398c-06a4ce356611}.xml b/game/FMOD Project/Metadata/ParameterPreset/{65a1865c-7651-0bd1-398c-06a4ce356611}.xml new file mode 100644 index 0000000..40bd2b5 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{65a1865c-7651-0bd1-398c-06a4ce356611}.xml @@ -0,0 +1,32 @@ + + + + + Progression + + + {3e59dc97-b9c6-4910-89b6-66f75e53bb5c} + + + {25a540fc-fedb-48d6-8e2f-c51e3cbea5b0} + + + + + 2 + + + 2 + + + Intro + Main + + + 0 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{6795b9c3-5b9c-0c41-2203-61cbdab47b0c}.xml b/game/FMOD Project/Metadata/ParameterPreset/{6795b9c3-5b9c-0c41-2203-61cbdab47b0c}.xml new file mode 100644 index 0000000..1e401ec --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{6795b9c3-5b9c-0c41-2203-61cbdab47b0c}.xml @@ -0,0 +1,22 @@ + + + + + RPM + + + {7544efd6-fc35-46fd-b410-7712d1266a1b} + + + {27917f63-d316-4f46-95a0-a271283fb8ad} + + + + + 2000 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{6864569d-5a2f-0cf1-35ce-b4f89ccc67ee}.xml b/game/FMOD Project/Metadata/ParameterPreset/{6864569d-5a2f-0cf1-35ce-b4f89ccc67ee}.xml new file mode 100644 index 0000000..08d03ec --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{6864569d-5a2f-0cf1-35ce-b4f89ccc67ee}.xml @@ -0,0 +1,28 @@ + + + + + Size + + + {a0bd4fb7-a8cc-49c1-adfc-c2037026f39f} + + + {2860903d-d2a5-4ff6-826d-77426e47a44f} + + + + + 3 + + + true + + + 0 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{6fe41471-e497-408a-8070-6c9d8fd6f9b4}.xml b/game/FMOD Project/Metadata/ParameterPreset/{6fe41471-e497-408a-8070-6c9d8fd6f9b4}.xml new file mode 100644 index 0000000..b109e37 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{6fe41471-e497-408a-8070-6c9d8fd6f9b4}.xml @@ -0,0 +1,39 @@ + + + + + Auto-Stop + + + {a0bd4fb7-a8cc-49c1-adfc-c2037026f39f} + + + {aebab073-cbb9-4b10-a724-9daa6698a7cd} + + + + + 0 + + + {86f5710c-d984-488e-8c3a-2ffab182732f} + + + + + cursorPosition + + + 100 + + + 100 + + + 100 + + + 2000 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{7e8a905e-e8d2-0009-1823-09fe4c0524f8}.xml b/game/FMOD Project/Metadata/ParameterPreset/{7e8a905e-e8d2-0009-1823-09fe4c0524f8}.xml new file mode 100644 index 0000000..71af39c --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{7e8a905e-e8d2-0009-1823-09fe4c0524f8}.xml @@ -0,0 +1,22 @@ + + + + + Load + + + {56cfd801-ed71-4002-8c3a-4b3e50db1794} + + + {3e8e56fe-6058-430e-af80-ca44be8ee759} + + + + + -1 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{85f1569c-5995-0d43-3889-96d93566cc81}.xml b/game/FMOD Project/Metadata/ParameterPreset/{85f1569c-5995-0d43-3889-96d93566cc81}.xml new file mode 100644 index 0000000..82423b8 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{85f1569c-5995-0d43-3889-96d93566cc81}.xml @@ -0,0 +1,40 @@ + + + + + Hour + + + {36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc} + + + {c5f5903c-d11f-4e44-8f2a-5563c7ed0f20} + + + + + 2 + + + 4 + + + Night + Morning + Noon + Evening + + + 0 + + + 0.33333333333333331 + + + true + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{a25ce750-4232-0bf0-236a-3d42427d4127}.xml b/game/FMOD Project/Metadata/ParameterPreset/{a25ce750-4232-0bf0-236a-3d42427d4127}.xml new file mode 100644 index 0000000..43a7aaa --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{a25ce750-4232-0bf0-236a-3d42427d4127}.xml @@ -0,0 +1,22 @@ + + + + + RPM + + + {f71d2adb-f510-4fd2-b57e-f52aaf73b77c} + + + {e25821f0-cab8-48f7-94c9-fef8b0f68286} + + + + + 10000 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{c68d36cc-59c9-4889-bf83-e841618b44a6}.xml b/game/FMOD Project/Metadata/ParameterPreset/{c68d36cc-59c9-4889-bf83-e841618b44a6}.xml new file mode 100644 index 0000000..461cefa --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{c68d36cc-59c9-4889-bf83-e841618b44a6}.xml @@ -0,0 +1,31 @@ + + + + + Event Orientation + + + {6aa8d7fb-2516-4568-a9b8-00b66d27f502} + + + {b8b3154f-b7b5-47d7-b7c6-a020b1f48e76} + + + + + 7 + + + -180 + + + 180 + + + 0 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{d5f87d58-cc0e-48aa-94e5-94c5a37619fa}.xml b/game/FMOD Project/Metadata/ParameterPreset/{d5f87d58-cc0e-48aa-94e5-94c5a37619fa}.xml new file mode 100644 index 0000000..10e7330 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{d5f87d58-cc0e-48aa-94e5-94c5a37619fa}.xml @@ -0,0 +1,25 @@ + + + + + Freq + + + {6328a2a2-e406-4252-bb10-b293c7a3cca4} + + + {07534c48-7d66-4b77-93a5-90f0821e092c} + + + + + 3 + + + 0 + + + 5.5 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{d6d20b9d-62c5-08ad-04cb-eca76a1fc890}.xml b/game/FMOD Project/Metadata/ParameterPreset/{d6d20b9d-62c5-08ad-04cb-eca76a1fc890}.xml new file mode 100644 index 0000000..b6b330e --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{d6d20b9d-62c5-08ad-04cb-eca76a1fc890}.xml @@ -0,0 +1,28 @@ + + + + + Intensity + + + {3e59dc97-b9c6-4910-89b6-66f75e53bb5c} + + + {96d6cd3d-ea4f-4baa-b368-2f1d98940b31} + + + + + 1 + + + 5 + + + 0 + + + false + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{e44dd81c-f2a4-4169-b421-213944693ca1}.xml b/game/FMOD Project/Metadata/ParameterPreset/{e44dd81c-f2a4-4169-b421-213944693ca1}.xml new file mode 100644 index 0000000..2d59648 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{e44dd81c-f2a4-4169-b421-213944693ca1}.xml @@ -0,0 +1,19 @@ + + + + + Cover + + + {36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc} + + + {362127ac-a587-47da-868a-fc86d66a6677} + + + + + 0 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{efb3e880-4715-4dfd-a4eb-eeebc6371fd4}.xml b/game/FMOD Project/Metadata/ParameterPreset/{efb3e880-4715-4dfd-a4eb-eeebc6371fd4}.xml new file mode 100644 index 0000000..74b4d90 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{efb3e880-4715-4dfd-a4eb-eeebc6371fd4}.xml @@ -0,0 +1,22 @@ + + + + + Walla + + + {6aa8d7fb-2516-4568-a9b8-00b66d27f502} + + + {95b9b67d-4a1e-45ab-806f-e46ce640bf5a} + + + + + 0 + + + 0.50000005960464478 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{f55d4aa0-3110-44aa-a32e-5d663119f98c}.xml b/game/FMOD Project/Metadata/ParameterPreset/{f55d4aa0-3110-44aa-a32e-5d663119f98c}.xml new file mode 100644 index 0000000..0d53814 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{f55d4aa0-3110-44aa-a32e-5d663119f98c}.xml @@ -0,0 +1,22 @@ + + + + + Traffic + + + {6aa8d7fb-2516-4568-a9b8-00b66d27f502} + + + {35dee4f7-9565-4215-8ca7-3eb446a2ab8c} + + + + + 0 + + + 0.5 + + + diff --git a/game/FMOD Project/Metadata/ParameterPreset/{f741cb0a-2628-03e2-2d4f-8314bbbd6089}.xml b/game/FMOD Project/Metadata/ParameterPreset/{f741cb0a-2628-03e2-2d4f-8314bbbd6089}.xml new file mode 100644 index 0000000..b38ec73 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPreset/{f741cb0a-2628-03e2-2d4f-8314bbbd6089}.xml @@ -0,0 +1,45 @@ + + + + + VO Sidechain + + + {0c8bfb2a-0176-4c5c-93b8-21686ed85878} + + + {b7450daa-aea2-40e5-9aec-40ae4936a328} + + + + + 0 + + + false + + + {81769f05-7404-46f1-8403-1151049f77f1} + + + + + cursorPosition + + + 100 + + + 1300 + + + -80 + + + 10 + + + {ebf609a3-1683-4b21-9b12-d49b35315615} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{0c8bfb2a-0176-4c5c-93b8-21686ed85878}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{0c8bfb2a-0176-4c5c-93b8-21686ed85878}.xml new file mode 100644 index 0000000..7e3f353 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{0c8bfb2a-0176-4c5c-93b8-21686ed85878}.xml @@ -0,0 +1,11 @@ + + + + + Character + + + {a418e0de-c7d0-05c9-280a-b529dc02e12e} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc}.xml new file mode 100644 index 0000000..a0805cd --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc}.xml @@ -0,0 +1,11 @@ + + + + + Ambience + + + {a418e0de-c7d0-05c9-280a-b529dc02e12e} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{3e59dc97-b9c6-4910-89b6-66f75e53bb5c}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{3e59dc97-b9c6-4910-89b6-66f75e53bb5c}.xml new file mode 100644 index 0000000..f35ea24 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{3e59dc97-b9c6-4910-89b6-66f75e53bb5c}.xml @@ -0,0 +1,11 @@ + + + + + Music + + + {a418e0de-c7d0-05c9-280a-b529dc02e12e} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{56cfd801-ed71-4002-8c3a-4b3e50db1794}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{56cfd801-ed71-4002-8c3a-4b3e50db1794}.xml new file mode 100644 index 0000000..463e547 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{56cfd801-ed71-4002-8c3a-4b3e50db1794}.xml @@ -0,0 +1,11 @@ + + + + + Vehicles + + + {a418e0de-c7d0-05c9-280a-b529dc02e12e} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{6328a2a2-e406-4252-bb10-b293c7a3cca4}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{6328a2a2-e406-4252-bb10-b293c7a3cca4}.xml new file mode 100644 index 0000000..77b8140 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{6328a2a2-e406-4252-bb10-b293c7a3cca4}.xml @@ -0,0 +1,11 @@ + + + + + Radio + + + {3e59dc97-b9c6-4910-89b6-66f75e53bb5c} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{6aa8d7fb-2516-4568-a9b8-00b66d27f502}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{6aa8d7fb-2516-4568-a9b8-00b66d27f502}.xml new file mode 100644 index 0000000..8fd02c9 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{6aa8d7fb-2516-4568-a9b8-00b66d27f502}.xml @@ -0,0 +1,11 @@ + + + + + City + + + {36ffec7a-fb1e-4c0e-b1bd-9a7608310fcc} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{7544efd6-fc35-46fd-b410-7712d1266a1b}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{7544efd6-fc35-46fd-b410-7712d1266a1b}.xml new file mode 100644 index 0000000..575f80a --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{7544efd6-fc35-46fd-b410-7712d1266a1b}.xml @@ -0,0 +1,11 @@ + + + + + Ride-on Mower + + + {56cfd801-ed71-4002-8c3a-4b3e50db1794} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{8dddc191-0624-4dca-92d9-a7a0e6b865fc}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{8dddc191-0624-4dca-92d9-a7a0e6b865fc}.xml new file mode 100644 index 0000000..8da8d01 --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{8dddc191-0624-4dca-92d9-a7a0e6b865fc}.xml @@ -0,0 +1,11 @@ + + + + + Interactables + + + {a418e0de-c7d0-05c9-280a-b529dc02e12e} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{a0bd4fb7-a8cc-49c1-adfc-c2037026f39f}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{a0bd4fb7-a8cc-49c1-adfc-c2037026f39f}.xml new file mode 100644 index 0000000..4f64dac --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{a0bd4fb7-a8cc-49c1-adfc-c2037026f39f}.xml @@ -0,0 +1,11 @@ + + + + + Weapons + + + {a418e0de-c7d0-05c9-280a-b529dc02e12e} + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{a418e0de-c7d0-05c9-280a-b529dc02e12e}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{a418e0de-c7d0-05c9-280a-b529dc02e12e}.xml new file mode 100644 index 0000000..fd8054d --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{a418e0de-c7d0-05c9-280a-b529dc02e12e}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/game/FMOD Project/Metadata/ParameterPresetFolder/{f71d2adb-f510-4fd2-b57e-f52aaf73b77c}.xml b/game/FMOD Project/Metadata/ParameterPresetFolder/{f71d2adb-f510-4fd2-b57e-f52aaf73b77c}.xml new file mode 100644 index 0000000..95b53ea --- /dev/null +++ b/game/FMOD Project/Metadata/ParameterPresetFolder/{f71d2adb-f510-4fd2-b57e-f52aaf73b77c}.xml @@ -0,0 +1,11 @@ + + + + + Car Engine + + + {56cfd801-ed71-4002-8c3a-4b3e50db1794} + + + diff --git a/game/FMOD Project/Metadata/Platform/{8d452eed-4519-4e5e-9f8d-5ab4c83b0c2a}.xml b/game/FMOD Project/Metadata/Platform/{8d452eed-4519-4e5e-9f8d-5ab4c83b0c2a}.xml new file mode 100644 index 0000000..ddbc59f --- /dev/null +++ b/game/FMOD Project/Metadata/Platform/{8d452eed-4519-4e5e-9f8d-5ab4c83b0c2a}.xml @@ -0,0 +1,17 @@ + + + + + 0 + + + HTML5 + + + HTML5 + + + 1 + + + diff --git a/game/FMOD Project/Metadata/Platform/{c9f35dc9-139f-472b-8888-8ad9fad5168c}.xml b/game/FMOD Project/Metadata/Platform/{c9f35dc9-139f-472b-8888-8ad9fad5168c}.xml new file mode 100644 index 0000000..a92532e --- /dev/null +++ b/game/FMOD Project/Metadata/Platform/{c9f35dc9-139f-472b-8888-8ad9fad5168c}.xml @@ -0,0 +1,17 @@ + + + + + 0 + + + Desktop + + + Desktop + + + 5 + + + diff --git a/game/FMOD Project/Metadata/ProfilerFolder/{26fc004a-e651-4c80-ac8f-6688d3221c0a}.xml b/game/FMOD Project/Metadata/ProfilerFolder/{26fc004a-e651-4c80-ac8f-6688d3221c0a}.xml new file mode 100644 index 0000000..265b518 --- /dev/null +++ b/game/FMOD Project/Metadata/ProfilerFolder/{26fc004a-e651-4c80-ac8f-6688d3221c0a}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/game/FMOD Project/Metadata/Return/{524ae5a9-928c-4391-9635-34b41d4602af}.xml b/game/FMOD Project/Metadata/Return/{524ae5a9-928c-4391-9635-34b41d4602af}.xml new file mode 100644 index 0000000..7cfd079 --- /dev/null +++ b/game/FMOD Project/Metadata/Return/{524ae5a9-928c-4391-9635-34b41d4602af}.xml @@ -0,0 +1,51 @@ + + + + + -80 + + + 2 + + + Reverb + + + {1f0635f2-27a8-440c-94fb-904339de554b} + + + {a9306774-d343-44b5-9f77-0de990d8a8ec} + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {c5330191-c0c9-4072-80ee-692def7df48b} + {5ab1dd2d-dcf1-4481-98d5-4fd81670e98c} + + + + + + 3400 + + + 13.5 + + + 52 + + + 49 + + + 0 + + + -80 + + + + diff --git a/game/FMOD Project/Metadata/SandboxFolder/{90f1921b-3a6d-4222-bafe-83641a15bccf}.xml b/game/FMOD Project/Metadata/SandboxFolder/{90f1921b-3a6d-4222-bafe-83641a15bccf}.xml new file mode 100644 index 0000000..f3cd608 --- /dev/null +++ b/game/FMOD Project/Metadata/SandboxFolder/{90f1921b-3a6d-4222-bafe-83641a15bccf}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/game/FMOD Project/Metadata/Snapshot/{6e8d8d09-12e0-48cf-b620-f9cc3bc478a3}.xml b/game/FMOD Project/Metadata/Snapshot/{6e8d8d09-12e0-48cf-b620-f9cc3bc478a3}.xml new file mode 100644 index 0000000..0aa4999 --- /dev/null +++ b/game/FMOD Project/Metadata/Snapshot/{6e8d8d09-12e0-48cf-b620-f9cc3bc478a3}.xml @@ -0,0 +1,64 @@ + + + + + Slow-Motion + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + {0e7ac5a4-c639-4a44-b6c4-d04a72841627} + + + {aa26c213-7c71-44a6-bfeb-8eb6dffaa1ad} + + + {7ff1a0e1-52a0-4694-be22-3c8f82d6b264} + + + {3fbd41b3-401b-420a-b6d2-c60f7f6dec6a} + + + {eb6e8165-8698-4f4e-a3fa-1c0e17adf017} + + + {13790f25-31fc-43e9-97ab-386514098aaa} + + + + + {f6c4fc63-7f89-48b7-ad83-2674cffb26eb} + + + + + + + + pitch + + + -24 + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + snapshotIntensity + + + 100 + + + 100 + + + diff --git a/game/FMOD Project/Metadata/Snapshot/{87ea4134-fff1-4e9d-8f8b-294a2b518223}.xml b/game/FMOD Project/Metadata/Snapshot/{87ea4134-fff1-4e9d-8f8b-294a2b518223}.xml new file mode 100644 index 0000000..1361ee8 --- /dev/null +++ b/game/FMOD Project/Metadata/Snapshot/{87ea4134-fff1-4e9d-8f8b-294a2b518223}.xml @@ -0,0 +1,106 @@ + + + + + Health Low + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + {4db04e93-6d43-4984-abda-e0a0f1d589da} + + + {325b0c6c-f021-4aee-8411-310da24b0ac3} + + + {9206f6d5-753d-4c04-9333-7da2230bdf39} + + + {79e9743b-9916-48bd-a22e-21abd842d113} + + + {e7a53c64-7f37-4694-96c1-9e0bf333f9ab} + {530d9144-c75d-426f-9f11-cd4ad2cb575e} + {62ea555b-cf83-4025-8acc-00166bb6da7b} + + + {f31d42fe-a3a3-4565-9422-71f7f41957cb} + {4f30c88c-9291-4e4b-916a-9dfd04515a34} + {f8397de9-67ed-4e0d-991b-e26e87e3f801} + + + + + {f9706402-9dc7-4082-b21a-37febd1d1dbb} + + + + + + + + frequencyA + + + 440 + + + {c8b28687-4f38-43f8-ae3a-64c9dcfbfee0} + + + + + volume + + + -10 + + + {d9982c58-a056-4e6c-b8e3-883854b4bffb} + + + + + volume + + + -10 + + + {dd124d8d-1ccd-4871-a160-5024e3e3f116} + + + + + {7e33a2b3-db05-4b7a-ba1e-e862f2bfde36} + + + + + {d9982c58-a056-4e6c-b8e3-883854b4bffb} + + + + + {dd124d8d-1ccd-4871-a160-5024e3e3f116} + + + + + snapshotIntensity + + + 3000 + + + 100 + + + 100 + + + 3000 + + + diff --git a/game/FMOD Project/Metadata/Snapshot/{b695eec0-fe78-4755-b806-9690c06dfc0b}.xml b/game/FMOD Project/Metadata/Snapshot/{b695eec0-fe78-4755-b806-9690c06dfc0b}.xml new file mode 100644 index 0000000..c010bef --- /dev/null +++ b/game/FMOD Project/Metadata/Snapshot/{b695eec0-fe78-4755-b806-9690c06dfc0b}.xml @@ -0,0 +1,208 @@ + + + + + Cave Reverb + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + {6a677dd6-6dc7-473e-a218-767b4130af51} + + + {6fee47b7-e02f-4fc9-b61c-c20634b5ca4f} + + + {c7eb85c4-2e63-45c2-8f14-1cd66f393fd3} + + + {a6eb4292-3e2c-457d-9483-cdc1b517139a} + + + {0c9ae422-f4fa-43d9-92ec-23c57ea38018} + {a9e9004c-c7b2-4334-ace7-2aac30f4abd1} + {3ececc42-0a6e-439c-82ae-bce0fbdb3970} + {c807549c-0786-45ce-82b8-1887f99009eb} + {24bf787b-bd40-4930-824c-74c7bf71ba48} + {08725b58-f9ed-45ee-8323-be87854a971a} + {82222237-c180-4dae-9844-668bca114a61} + {32882921-f891-4645-9008-16c2a3a817f3} + {c4384334-874d-4f2f-b4c0-dcf32e1fc86c} + {a1d58019-eb23-4ed9-8457-b12faf714209} + {c81d2d56-bd6f-430f-afbe-55096fa90170} + {195ebd2a-5252-4666-950e-29b12b5dead0} + {469aa081-86d7-4f46-b3fb-d9eb48fc3698} + + + {5078e726-0f0f-41ae-9f01-97b6b646ac29} + + + + + {b51a8f9e-1b77-4c37-a672-b626e33024f5} + + + + + + + + decayTime + + + 2900 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + earlyDelay + + + 15 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + lateDelay + + + 22 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + HFReference + + + 5000 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + HFDecayRatio + + + 100 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + diffusion + + + 100 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + density + + + 100 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + lowShelfFrequency + + + 250 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + lowShelfGain + + + 0 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + highCut + + + 20000 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + earlyLateMix + + + 59 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + wetLevel + + + 0 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + volume + + + -10 + + + {524ae5a9-928c-4391-9635-34b41d4602af} + + + + + {524ae5a9-928c-4391-9635-34b41d4602af} + + + + + snapshotIntensity + + + 100 + + + 100 + + + diff --git a/game/FMOD Project/Metadata/Snapshot/{c107e28e-873b-4caa-9492-68fe72210c48}.xml b/game/FMOD Project/Metadata/Snapshot/{c107e28e-873b-4caa-9492-68fe72210c48}.xml new file mode 100644 index 0000000..d7b8018 --- /dev/null +++ b/game/FMOD Project/Metadata/Snapshot/{c107e28e-873b-4caa-9492-68fe72210c48}.xml @@ -0,0 +1,208 @@ + + + + + Sewer Reverb + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + {c9ffd27b-66aa-4524-8d2b-8649d76d7853} + + + {25bbdf5f-5e3a-4a8b-a360-3c32ba71f4cf} + + + {6c3dbdbb-335e-48be-b08a-95d299ebf796} + + + {a112e256-b81f-4dcd-9964-55b8a9ced8a7} + + + {8c5080d9-f45a-4319-b41a-9034a70f2a88} + {f44893b7-97bc-4d51-9142-d5da8ce4df63} + {3afa2b9f-e6b2-44a6-99a2-05b05fca4761} + {8e38c283-1aaa-4383-99df-9a67bf9894ff} + {054fd8cf-6ada-4fd5-ac3c-acebe420726f} + {0bd38e01-d140-40a8-89b0-8fbb182178c2} + {d23171ae-3427-4e64-8867-ab58c5511d45} + {848b45b7-8e3d-47b1-a055-3032c6c414e9} + {a9f0759e-e616-468b-b63c-7fcac6b8329e} + {3e145751-712d-43e8-8ecc-83879c04b80b} + {de3559fb-57b7-4d29-b676-21558e6750ef} + {79a3b6e8-0f1f-4517-85a0-5a26a3898db3} + {60c3dbd7-58b7-4ee8-ba9c-7bb4dfbb7c66} + + + {e1cd8c93-db57-42b2-aea7-b160f09b015e} + + + + + {4cdd3c70-3af6-4036-871f-3c112c5aa33e} + + + + + + + + decayTime + + + 2800 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + earlyDelay + + + 14 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + lateDelay + + + 21 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + HFReference + + + 5000 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + HFDecayRatio + + + 14 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + diffusion + + + 80 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + density + + + 60 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + lowShelfFrequency + + + 250 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + lowShelfGain + + + 0 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + highCut + + + 3400 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + earlyLateMix + + + 66 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + wetLevel + + + 0 + + + {c5330191-c0c9-4072-80ee-692def7df48b} + + + + + volume + + + -10 + + + {524ae5a9-928c-4391-9635-34b41d4602af} + + + + + {524ae5a9-928c-4391-9635-34b41d4602af} + + + + + snapshotIntensity + + + 100 + + + 100 + + + diff --git a/game/FMOD Project/Metadata/Snapshot/{e305a498-2b18-461d-b35c-6eaea45fafd6}.xml b/game/FMOD Project/Metadata/Snapshot/{e305a498-2b18-461d-b35c-6eaea45fafd6}.xml new file mode 100644 index 0000000..68a3cda --- /dev/null +++ b/game/FMOD Project/Metadata/Snapshot/{e305a498-2b18-461d-b35c-6eaea45fafd6}.xml @@ -0,0 +1,742 @@ + + + + + Pause + + + 2 + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + {321349d7-3cc5-4861-a494-f3d321e7c801} + + + {3151d392-5be8-4afb-a45d-c63999b1ca44} + + + {e04349bb-b19a-4574-a91c-42a7bb37492a} + + + {7acab274-c344-46ab-9d88-8638d30a5ec6} + + + {606e5b47-d124-4e72-a08f-d8b4a3e2176c} + {d25c0ea3-d98f-4563-9ee7-978382284cb4} + {4d0a2275-da23-4181-b301-836cc2b97ebc} + {eda34ed5-3090-4b11-937f-c490730db0f3} + {3cb84e40-a0a7-4182-b55a-dbd9f4e0d01c} + {fe7595bb-0646-4e3a-af1c-1ee71aadad35} + {28a6b4cd-d9d1-49b0-8346-e8832b3d6a8b} + {0d10f5de-7f00-42f3-bab8-f712f40fa167} + {a2cd953a-6d0e-4363-9d87-bee1f6afa7d7} + {d1cf3d56-14be-464a-be31-32416338996d} + {9cd99ec7-c50f-46cf-808b-efc3445769c7} + {038b7f24-81c6-4fac-8e1e-e845c2bb6668} + {ec3b75b8-35ba-4a90-a1e0-a5173900be5b} + {698c603f-2e02-4306-a7f2-a1bf2c000e9c} + {0e84f1e8-58a6-4bb5-8c79-428d03f46499} + {004498b1-8752-42e5-bc96-9ccd2595e04d} + {89a09d1d-3bc6-49e9-8829-413db1203df8} + {07a1abb2-50cf-43af-a7fb-4bc434dd875d} + {726434fe-5223-482a-b90b-d79286016d6f} + {bc30f706-d6cd-4ace-8d91-1a79d2590d20} + {f87c5dc1-2262-4335-941f-be8d609c68cf} + {359df7b7-0aa7-4b74-825f-58a866480f61} + {4a4edebf-90a1-4adf-b9b3-3f423f105620} + {bb7e1018-bf69-478a-b70f-a26edb5976d5} + {9c06ba48-8adb-480c-acd4-daeb518db52f} + {33a027d0-8ace-4f00-845b-f6ed95cc1eb4} + {7dacf367-6f48-4676-b005-ef054686e85b} + {1f1c46a2-aa8d-4c6d-9f68-53adf51a8607} + {44c056eb-b1c5-4968-b2e3-2bf4c07a2542} + {d21cf869-374a-4406-a392-d7624f1e8258} + {f0acfc29-ec71-4f4c-bf23-77be63326f41} + {06f6df22-df23-4dc9-bb4d-388624c2c033} + {abc05edd-8312-45ed-a177-7056ebff3e35} + {4d5920b6-3cff-4d9e-bd1c-237fa79902f3} + {dd0b3bed-7df9-41ee-a818-74313c1cd7ae} + {9826dfde-04a3-481e-a5fd-d8912b0a6939} + {5bd54086-51ce-43b9-9b06-f009e8f2843e} + {e342aaf2-a80f-4354-8199-618b9978f825} + {c55bc56f-de9b-42e2-9663-8d01117d00a6} + {473f9071-8a94-4267-a227-24361bfdb13a} + {6f3e740b-4753-4c15-8a39-836eb37d5e25} + {1165a32d-24d3-462b-a859-a606a2ed5fde} + {80ed2222-829d-4234-b91f-511590b43478} + {cabb3330-6eaf-4226-b520-caabb130dd2d} + {d078997c-9b55-4348-8dfe-51d32d00ae4b} + {9722604b-5fa7-45db-a581-c86f062ba03d} + {6421b956-b60b-43d9-85cf-153d135fdce1} + {3b49ab42-9fce-4245-8514-59b997daed8b} + {22c1cc6d-e0bc-48c7-9309-28fb41d10182} + {beb4c560-b522-46c3-b3e9-0c6118acc57f} + {463ec8e2-f106-46b1-aa1e-cf692669e14e} + {4060b587-8c65-479b-8892-f8021f056ba0} + {63f78991-9366-4926-b142-30348c1bdcfb} + {f018c316-c79b-4bee-8a54-68cfbb7a2508} + + + {179da3d6-2483-4983-bd03-a348d439c4b0} + {ee8dd1b1-1dd4-4684-988f-9d9b576043bf} + {2d971589-8bbc-4555-8964-13a5f2599943} + {edae741e-739f-4ade-8360-c200cccd3bc4} + {4eb1b46b-8a25-4991-987f-6f8d19ca57df} + {0fc559ab-f6d7-418c-8a1f-5795ccc83027} + {05a0e7d5-ad1f-4741-a70e-8d1c25d7eb54} + + + + + 2 + + + {457ed9f0-eb14-4b21-bb1c-cd1734f6de8b} + + + + + + + + surroundStereoSeparation + + + 60 + + + {b5f4dd6c-5a6c-4cb7-b72a-c2288933a691} + + + + + surroundStereoAxis + + + 0 + + + {26f55d48-08a6-45ae-9a60-15b3c9c16846} + + + + + surroundPanDirection + + + 0 + + + {e0d8b0f4-1b05-4412-9cdd-9994818597ad} + + + + + volume + + + -30 + + + {da23c66c-e512-4a93-98dc-02d6f58e4c5a} + + + + + surroundPanDirection + + + 0 + + + {b5f4dd6c-5a6c-4cb7-b72a-c2288933a691} + + + + + surroundLFELevel + + + 0 + + + {26f55d48-08a6-45ae-9a60-15b3c9c16846} + + + + + surroundStereoAxis + + + 0 + + + {e0d8b0f4-1b05-4412-9cdd-9994818597ad} + + + + + surroundPanDirection + + + 0 + + + {26f55d48-08a6-45ae-9a60-15b3c9c16846} + + + + + surroundLFELevel + + + 0 + + + {ccb86b1a-3b3b-4f58-a1b4-98869af17198} + + + + + volume + + + 0 + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + surroundStereoSeparation + + + 60 + + + {e0d8b0f4-1b05-4412-9cdd-9994818597ad} + + + + + stereoPan + + + 0 + + + {bfbace69-aa45-4e7f-b2ca-ef8f4c761769} + + + + + surroundPanDirection + + + 0 + + + {d3c42ad5-d43b-4793-951d-ff12618efd0d} + + + + + surroundStereoSeparation + + + 60 + + + {ccb86b1a-3b3b-4f58-a1b4-98869af17198} + + + + + surroundPanDirection + + + 0 + + + {bfbace69-aa45-4e7f-b2ca-ef8f4c761769} + + + + + surroundLFELevel + + + 0 + + + {bfbace69-aa45-4e7f-b2ca-ef8f4c761769} + + + + + surroundLFELevel + + + 0 + + + {b5f4dd6c-5a6c-4cb7-b72a-c2288933a691} + + + + + surroundStereoSeparation + + + 60 + + + {8d0261b0-05e0-4755-bca1-8fb4ee7ea705} + + + + + surroundPanDirection + + + 0 + + + {8d0261b0-05e0-4755-bca1-8fb4ee7ea705} + + + + + volume + + + -12 + + + {7e33a2b3-db05-4b7a-ba1e-e862f2bfde36} + + + + + attackTime + + + 20 + + + {523cc29c-3057-4acc-97d7-dd82831adfed} + + + + + surroundStereoSeparation + + + 60 + + + {bfbace69-aa45-4e7f-b2ca-ef8f4c761769} + + + + + releaseTime + + + 200 + + + {523cc29c-3057-4acc-97d7-dd82831adfed} + + + + + stereoPan + + + 0 + + + {8d0261b0-05e0-4755-bca1-8fb4ee7ea705} + + + + + surroundStereoAxis + + + 0 + + + {b5f4dd6c-5a6c-4cb7-b72a-c2288933a691} + + + + + surroundStereoSeparation + + + 60 + + + {26f55d48-08a6-45ae-9a60-15b3c9c16846} + + + + + surroundPanExtent + + + 360 + + + {8d0261b0-05e0-4755-bca1-8fb4ee7ea705} + + + + + volume + + + -30 + + + {37ebea86-d649-4a7a-b7b5-25701bfce8e9} + + + + + surroundPanExtent + + + 360 + + + {26f55d48-08a6-45ae-9a60-15b3c9c16846} + + + + + volume + + + -30 + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + surroundStereoAxis + + + 0 + + + {bfbace69-aa45-4e7f-b2ca-ef8f4c761769} + + + + + volume + + + -30 + + + {dd124d8d-1ccd-4871-a160-5024e3e3f116} + + + + + ratio + + + 2.5 + + + {523cc29c-3057-4acc-97d7-dd82831adfed} + + + + + stereoPan + + + 0 + + + {d3c42ad5-d43b-4793-951d-ff12618efd0d} + + + + + stereoPan + + + 0 + + + {b5f4dd6c-5a6c-4cb7-b72a-c2288933a691} + + + + + surroundPanExtent + + + 360 + + + {b5f4dd6c-5a6c-4cb7-b72a-c2288933a691} + + + + + surroundPanExtent + + + 360 + + + {d3c42ad5-d43b-4793-951d-ff12618efd0d} + + + + + surroundPanExtent + + + 360 + + + {e0d8b0f4-1b05-4412-9cdd-9994818597ad} + + + + + surroundStereoSeparation + + + 60 + + + {d3c42ad5-d43b-4793-951d-ff12618efd0d} + + + + + surroundLFELevel + + + 0 + + + {d3c42ad5-d43b-4793-951d-ff12618efd0d} + + + + + volume + + + -30 + + + {d9982c58-a056-4e6c-b8e3-883854b4bffb} + + + + + surroundStereoAxis + + + 0 + + + {ccb86b1a-3b3b-4f58-a1b4-98869af17198} + + + + + surroundStereoAxis + + + 0 + + + {d3c42ad5-d43b-4793-951d-ff12618efd0d} + + + + + surroundLFELevel + + + 0 + + + {e0d8b0f4-1b05-4412-9cdd-9994818597ad} + + + + + surroundPanDirection + + + 0 + + + {ccb86b1a-3b3b-4f58-a1b4-98869af17198} + + + + + threshold + + + 0 + + + {523cc29c-3057-4acc-97d7-dd82831adfed} + + + + + stereoPan + + + 0 + + + {e0d8b0f4-1b05-4412-9cdd-9994818597ad} + + + + + surroundPanExtent + + + 360 + + + {ccb86b1a-3b3b-4f58-a1b4-98869af17198} + + + + + stereoPan + + + 0 + + + {ccb86b1a-3b3b-4f58-a1b4-98869af17198} + + + + + stereoPan + + + 0 + + + {26f55d48-08a6-45ae-9a60-15b3c9c16846} + + + + + surroundLFELevel + + + 0 + + + {8d0261b0-05e0-4755-bca1-8fb4ee7ea705} + + + + + gain + + + 0 + + + {523cc29c-3057-4acc-97d7-dd82831adfed} + + + + + surroundPanExtent + + + 360 + + + {bfbace69-aa45-4e7f-b2ca-ef8f4c761769} + + + + + surroundStereoAxis + + + 0 + + + {8d0261b0-05e0-4755-bca1-8fb4ee7ea705} + + + + + {d320eb98-3d4a-4cd9-a001-fdb4e071c58e} + + + + + {d9982c58-a056-4e6c-b8e3-883854b4bffb} + + + + + {dd124d8d-1ccd-4871-a160-5024e3e3f116} + + + + + {3e1d1653-8bd5-4dbc-865e-cba8e8ded970} + + + + + {37ebea86-d649-4a7a-b7b5-25701bfce8e9} + + + + + {da23c66c-e512-4a93-98dc-02d6f58e4c5a} + + + + + {7e33a2b3-db05-4b7a-ba1e-e862f2bfde36} + + + + + snapshotIntensity + + + 100 + + + 100 + + + diff --git a/game/FMOD Project/Metadata/SnapshotGroup/{2dcd07b1-59b3-40e5-9a17-4b3c6efc2f22}.xml b/game/FMOD Project/Metadata/SnapshotGroup/{2dcd07b1-59b3-40e5-9a17-4b3c6efc2f22}.xml new file mode 100644 index 0000000..f897a15 --- /dev/null +++ b/game/FMOD Project/Metadata/SnapshotGroup/{2dcd07b1-59b3-40e5-9a17-4b3c6efc2f22}.xml @@ -0,0 +1,15 @@ + + + + + Reverb + + + {2e15ae1f-9888-48d4-9994-adc998ae281e} + + + {b695eec0-fe78-4755-b806-9690c06dfc0b} + {c107e28e-873b-4caa-9492-68fe72210c48} + + + diff --git a/game/FMOD Project/Metadata/SnapshotGroup/{2e15ae1f-9888-48d4-9994-adc998ae281e}.xml b/game/FMOD Project/Metadata/SnapshotGroup/{2e15ae1f-9888-48d4-9994-adc998ae281e}.xml new file mode 100644 index 0000000..a20efb8 --- /dev/null +++ b/game/FMOD Project/Metadata/SnapshotGroup/{2e15ae1f-9888-48d4-9994-adc998ae281e}.xml @@ -0,0 +1,14 @@ + + + + + {e305a498-2b18-461d-b35c-6eaea45fafd6} + {87ea4134-fff1-4e9d-8f8b-294a2b518223} + {6e8d8d09-12e0-48cf-b620-f9cc3bc478a3} + {2dcd07b1-59b3-40e5-9a17-4b3c6efc2f22} + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + diff --git a/game/FMOD Project/Metadata/Tags.xml b/game/FMOD Project/Metadata/Tags.xml new file mode 100644 index 0000000..578fdff --- /dev/null +++ b/game/FMOD Project/Metadata/Tags.xml @@ -0,0 +1,217 @@ + + + + + {2e193f8d-92b5-4f55-a7d7-fbd073e56354} + {b25c4f9d-1f47-4b94-89e1-8b05ecc39502} + {ff19646f-4dc8-43be-9d99-73cde9536edf} + {1b2729a6-7abf-4220-9cbc-a415743f03d6} + {c482be52-b48f-4e91-9a41-4429de5e55b3} + {106b1d43-b29e-4938-8809-4868fd036d2b} + {b621cb49-ebca-45dd-85fd-9af87c1d5a40} + {ad75f74d-248e-4b30-b41c-42bf6c059018} + {a0007824-27a5-4949-ae54-4df20f35ea51} + {ee45eecc-e25a-493b-bdcd-66a33f7336a5} + {032932ee-4178-4241-a136-2450347dcb6e} + {721cf887-761f-4cf4-a1cf-2e8790901610} + {95d562e5-0dc1-428c-9296-79fa91967a77} + {fe95956a-5e02-4848-a0cf-058417e95dfc} + {77641885-3e3e-4db6-9521-ac8e5dd0a761} + {5e618944-886a-41d0-96a0-a08198069cb1} + {4588ab2a-071d-4015-b568-407ac4472c7e} + {4dcd8475-dc77-49ec-a40f-f01cc6aac550} + {bdccd9d1-5ce9-49be-94c0-ba0a070cb181} + {33fbfe3e-0e7c-47e1-8aa2-f7a0e9f78857} + {0fc2fa3d-8018-4c63-93ae-377a27e014f5} + {bac8db8b-2092-43f1-9eb2-6f233db2d7a7} + {cf457cc2-8cc5-4b8a-a10b-3437fa75fb20} + {001a4c4c-ff56-427b-818c-e2fe66aa6bb4} + {d04b5409-a5d8-48c6-bd2b-4ed1630f88da} + {0561d714-637a-45af-bd52-33501f57b446} + {c993486d-84e1-468e-9f5a-d1b045016729} + {64ca6440-4faa-4d26-bdde-b75160430002} + {8b9f00f3-0328-4a96-8fa7-84477875d85a} + {ab60ec81-d8f9-4132-9036-9780d027a8ed} + {d6ff7340-ab69-44ca-97c8-39118d6593a1} + {bd5bac35-9143-4797-8e85-b42cd8ec2a6c} + {236a8681-4e37-498c-a1ea-c0e3819e7267} + {0e5da2a8-064a-46b3-8a8f-07f007eb3c91} + {e4a5d01c-e526-4acf-8985-7e898334379b} + + + + + ahdsr-modulator + + + + + async + + + + + automation + + + + + autopitch-modulator + + + + + built-in-parameter + + + + + destination-marker + + + + + discrete-parameter + + + + + fade + + + + + hold-value + + + + + initial-value + + + + + labeled-parameter + + + + + loop-instrument + + + + + loop-region + + + + + multi-instrument + + + + + one-shot + + + + + parameter + + + + + parameter-condition + + + + + persistent + + + + + programmer-instrument + + + + + quantization + + + + + random-modulator + + + + + scatterer-instrument + + + + + seek-speed + + + + + send + + + + + sidechain-effect + + + + + sidechain-modulator + + + + + single-instrument + + + + + snapshot-instrument + + + + + spatializer + + + + + start-offset + + + + + tempo-marker + + + + + track-colors + + + + + track-routing + + + + + transition-region + + + + + transition-timeline + + + diff --git a/game/FMOD Project/Metadata/VCA/{3f0b7d64-e765-400e-ae74-c2d973ad4ca1}.xml b/game/FMOD Project/Metadata/VCA/{3f0b7d64-e765-400e-ae74-c2d973ad4ca1}.xml new file mode 100644 index 0000000..9af396d --- /dev/null +++ b/game/FMOD Project/Metadata/VCA/{3f0b7d64-e765-400e-ae74-c2d973ad4ca1}.xml @@ -0,0 +1,11 @@ + + + + + Environment + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + diff --git a/game/FMOD Project/Metadata/VCA/{62d29c9d-bd2f-46ac-8dea-c37c666f3cfd}.xml b/game/FMOD Project/Metadata/VCA/{62d29c9d-bd2f-46ac-8dea-c37c666f3cfd}.xml new file mode 100644 index 0000000..d9ee33d --- /dev/null +++ b/game/FMOD Project/Metadata/VCA/{62d29c9d-bd2f-46ac-8dea-c37c666f3cfd}.xml @@ -0,0 +1,11 @@ + + + + + Player + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + diff --git a/game/FMOD Project/Metadata/VCA/{bf15a3f1-6824-492a-8cb1-db2383349f1b}.xml b/game/FMOD Project/Metadata/VCA/{bf15a3f1-6824-492a-8cb1-db2383349f1b}.xml new file mode 100644 index 0000000..af7bca4 --- /dev/null +++ b/game/FMOD Project/Metadata/VCA/{bf15a3f1-6824-492a-8cb1-db2383349f1b}.xml @@ -0,0 +1,14 @@ + + + + + Equipment + + + {62d29c9d-bd2f-46ac-8dea-c37c666f3cfd} + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + diff --git a/game/FMOD Project/Metadata/Workspace.xml b/game/FMOD Project/Metadata/Workspace.xml new file mode 100644 index 0000000..72dfa06 --- /dev/null +++ b/game/FMOD Project/Metadata/Workspace.xml @@ -0,0 +1,44 @@ + + + + + false + + + {10626052-c98b-4665-b391-646f2512cecd} + + + {1b486b69-30e1-4779-90d4-f45386aa7367} + + + {aca7fd17-4939-0ce5-284c-74c26c487e44} + + + {a418e0de-c7d0-05c9-280a-b529dc02e12e} + + + {07fb52a7-88b7-4b50-aff5-5f9728462f36} + + + {90f1921b-3a6d-4222-bafe-83641a15bccf} + + + {4c43130b-9186-4fb6-9d65-a9acdac70927} + + + {204ed808-83ea-42f4-b502-9b293dd2b6ba} + + + {26fc004a-e651-4c80-ac8f-6688d3221c0a} + + + {c9f35dc9-139f-472b-8888-8ad9fad5168c} + {8d452eed-4519-4e5e-9f8d-5ab4c83b0c2a} + + + {257d5ec6-3b22-4b51-8f79-e9d463ab102a} + {4c47f2c8-26a5-4542-b59e-7c28c629ba48} + {6c4f00a8-d2d3-431e-af63-1615148089df} + + +