diff --git a/.gitignore b/.gitignore index 0210746..7dfca47 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,9 @@ sysinfo.txt # Builds *.apk *.unitypackage + +# FMOD +/Assets/FMODStudioCache.asset +/Assets/FMODStudioCache.asset.meta +fmod.log +fmod_editor.log diff --git a/Assets/Editor Default Resources.meta b/Assets/Editor Default Resources.meta new file mode 100644 index 0000000..9812147 --- /dev/null +++ b/Assets/Editor Default Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd5ebd2f613e98a40b447ebe367a42f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD.meta b/Assets/Editor Default Resources/FMOD.meta new file mode 100644 index 0000000..c6fa978 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0098ee476320b9141b1c92a2ddc5f9fa +folderAsset: yes +timeCreated: 1447698325 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/AddIcon.png b/Assets/Editor Default Resources/FMOD/AddIcon.png new file mode 100644 index 0000000..49521d5 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/AddIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/AddIcon.png.meta b/Assets/Editor Default Resources/FMOD/AddIcon.png.meta new file mode 100644 index 0000000..87abf7b --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/AddIcon.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 3300e81f02e64924eb7cb7782713b126 +timeCreated: 1455151837 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/ArrowIcon.png b/Assets/Editor Default Resources/FMOD/ArrowIcon.png new file mode 100644 index 0000000..7dab8c3 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/ArrowIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/ArrowIcon.png.meta b/Assets/Editor Default Resources/FMOD/ArrowIcon.png.meta new file mode 100644 index 0000000..8f97b20 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/ArrowIcon.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 01c0101f357b9da4ba78b8f58c290f86 +timeCreated: 1455161898 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/BankIcon.png b/Assets/Editor Default Resources/FMOD/BankIcon.png new file mode 100644 index 0000000..b69fb3e Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/BankIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/BankIcon.png.meta b/Assets/Editor Default Resources/FMOD/BankIcon.png.meta new file mode 100644 index 0000000..f6396d7 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/BankIcon.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: a7e06068a7215854a84bf5ed8280ed15 +timeCreated: 1433208188 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/Border.png b/Assets/Editor Default Resources/FMOD/Border.png new file mode 100644 index 0000000..b0b1651 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/Border.png differ diff --git a/Assets/Editor Default Resources/FMOD/Border.png.meta b/Assets/Editor Default Resources/FMOD/Border.png.meta new file mode 100644 index 0000000..77553fe --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/Border.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 40848578d1961334d820821bec6175a4 +timeCreated: 1455150446 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/BrowserIcon.png b/Assets/Editor Default Resources/FMOD/BrowserIcon.png new file mode 100644 index 0000000..1982527 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/BrowserIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/BrowserIcon.png.meta b/Assets/Editor Default Resources/FMOD/BrowserIcon.png.meta new file mode 100644 index 0000000..9bcd7f0 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/BrowserIcon.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: c783b763d12874147876e070661b66ab +timeCreated: 1455688158 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/CopyIcon.png b/Assets/Editor Default Resources/FMOD/CopyIcon.png new file mode 100644 index 0000000..fa6621b Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/CopyIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/CopyIcon.png.meta b/Assets/Editor Default Resources/FMOD/CopyIcon.png.meta new file mode 100644 index 0000000..62cfdfd --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/CopyIcon.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 6e164dcb85fc8ad4b9ab2f1e883862d2 +timeCreated: 1455688729 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/Delete.png b/Assets/Editor Default Resources/FMOD/Delete.png new file mode 100644 index 0000000..52ed43b Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/Delete.png differ diff --git a/Assets/Editor Default Resources/FMOD/Delete.png.meta b/Assets/Editor Default Resources/FMOD/Delete.png.meta new file mode 100644 index 0000000..6f6c62e --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/Delete.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 196080340db65c44883dd3f599556fb9 +timeCreated: 1434604329 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/EventIcon.png b/Assets/Editor Default Resources/FMOD/EventIcon.png new file mode 100644 index 0000000..dc7c272 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/EventIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/EventIcon.png.meta b/Assets/Editor Default Resources/FMOD/EventIcon.png.meta new file mode 100644 index 0000000..ca11cc5 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/EventIcon.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: a602f206f9cb31f439c79a2fe23687c5 +timeCreated: 1432616010 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/FolderIconClosed.png b/Assets/Editor Default Resources/FMOD/FolderIconClosed.png new file mode 100644 index 0000000..d0082ba Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/FolderIconClosed.png differ diff --git a/Assets/Editor Default Resources/FMOD/FolderIconClosed.png.meta b/Assets/Editor Default Resources/FMOD/FolderIconClosed.png.meta new file mode 100644 index 0000000..faed9a3 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/FolderIconClosed.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 70efeb6d97126f843b30b8ed62d18a4f +timeCreated: 1432621560 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/FolderIconOpen.png b/Assets/Editor Default Resources/FMOD/FolderIconOpen.png new file mode 100644 index 0000000..d9df3e7 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/FolderIconOpen.png differ diff --git a/Assets/Editor Default Resources/FMOD/FolderIconOpen.png.meta b/Assets/Editor Default Resources/FMOD/FolderIconOpen.png.meta new file mode 100644 index 0000000..8d2fdfb --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/FolderIconOpen.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d2b54e4f7f80b9448a41d3c5985f5672 +timeCreated: 1432621574 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/LevelMeter.png b/Assets/Editor Default Resources/FMOD/LevelMeter.png new file mode 100644 index 0000000..7e427ef Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/LevelMeter.png differ diff --git a/Assets/Editor Default Resources/FMOD/LevelMeter.png.meta b/Assets/Editor Default Resources/FMOD/LevelMeter.png.meta new file mode 100644 index 0000000..c7c11f4 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/LevelMeter.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 21e7a3d41a926364a8b9a6704ebe80d8 +timeCreated: 1433917421 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/LevelMeterOff.png b/Assets/Editor Default Resources/FMOD/LevelMeterOff.png new file mode 100644 index 0000000..6da84b2 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/LevelMeterOff.png differ diff --git a/Assets/Editor Default Resources/FMOD/LevelMeterOff.png.meta b/Assets/Editor Default Resources/FMOD/LevelMeterOff.png.meta new file mode 100644 index 0000000..35d5a1e --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/LevelMeterOff.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 48dc5470d93f669419f294fcd33f7b7c +timeCreated: 1434426551 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/NotFound.png b/Assets/Editor Default Resources/FMOD/NotFound.png new file mode 100644 index 0000000..03a4ee0 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/NotFound.png differ diff --git a/Assets/Editor Default Resources/FMOD/NotFound.png.meta b/Assets/Editor Default Resources/FMOD/NotFound.png.meta new file mode 100644 index 0000000..315e989 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/NotFound.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 1138ab068176f29499337d7a73dfecd9 +timeCreated: 1432798099 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/SearchIcon.png b/Assets/Editor Default Resources/FMOD/SearchIcon.png new file mode 100644 index 0000000..7cf8716 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/SearchIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/SearchIcon.png.meta b/Assets/Editor Default Resources/FMOD/SearchIcon.png.meta new file mode 100644 index 0000000..6f4d3a1 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/SearchIcon.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 1b785acb38b002542a02d6c4cbb1fa6f +timeCreated: 1432696384 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/SearchIconBlack.png b/Assets/Editor Default Resources/FMOD/SearchIconBlack.png new file mode 100644 index 0000000..212ee28 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/SearchIconBlack.png differ diff --git a/Assets/Editor Default Resources/FMOD/SearchIconBlack.png.meta b/Assets/Editor Default Resources/FMOD/SearchIconBlack.png.meta new file mode 100644 index 0000000..03a227c --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/SearchIconBlack.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 99471facfde9fb84dbe4a81ad570ebce +timeCreated: 1434602090 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/Selected.png b/Assets/Editor Default Resources/FMOD/Selected.png new file mode 100644 index 0000000..3b2e828 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/Selected.png differ diff --git a/Assets/Editor Default Resources/FMOD/Selected.png.meta b/Assets/Editor Default Resources/FMOD/Selected.png.meta new file mode 100644 index 0000000..361c9be --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/Selected.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 38be8eaefa585de4aa1781acb0adc866 +timeCreated: 1432797507 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/SelectedAlt.png b/Assets/Editor Default Resources/FMOD/SelectedAlt.png new file mode 100644 index 0000000..278fd13 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/SelectedAlt.png differ diff --git a/Assets/Editor Default Resources/FMOD/SelectedAlt.png.meta b/Assets/Editor Default Resources/FMOD/SelectedAlt.png.meta new file mode 100644 index 0000000..448ef6a --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/SelectedAlt.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 8ce9b717b1bc7564cbe35664f2f178a7 +timeCreated: 1455161898 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/SnapshotIcon.png b/Assets/Editor Default Resources/FMOD/SnapshotIcon.png new file mode 100644 index 0000000..6437178 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/SnapshotIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/SnapshotIcon.png.meta b/Assets/Editor Default Resources/FMOD/SnapshotIcon.png.meta new file mode 100644 index 0000000..e0e9ec8 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/SnapshotIcon.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: cf2bba5fb8be7e64ca39979f18eb372a +timeCreated: 1434600422 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/StudioIcon.png b/Assets/Editor Default Resources/FMOD/StudioIcon.png new file mode 100644 index 0000000..1e96c6a Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/StudioIcon.png differ diff --git a/Assets/Editor Default Resources/FMOD/StudioIcon.png.meta b/Assets/Editor Default Resources/FMOD/StudioIcon.png.meta new file mode 100644 index 0000000..d9adb84 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/StudioIcon.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: a4edfa5854cdec34b98b1c55f0562bdd +timeCreated: 1434601223 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/TransportOpen.png b/Assets/Editor Default Resources/FMOD/TransportOpen.png new file mode 100644 index 0000000..874ed76 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/TransportOpen.png differ diff --git a/Assets/Editor Default Resources/FMOD/TransportOpen.png.meta b/Assets/Editor Default Resources/FMOD/TransportOpen.png.meta new file mode 100644 index 0000000..78eda48 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/TransportOpen.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: b0fb832e401d1514a9611735d8d340b1 +timeCreated: 1453178387 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png new file mode 100644 index 0000000..393ee3c Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png differ diff --git a/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png.meta b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png.meta new file mode 100644 index 0000000..61b5d12 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOff.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 29258b1336a580946bc144df00b74ac1 +timeCreated: 1453177025 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png new file mode 100644 index 0000000..5f19c41 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png differ diff --git a/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png.meta b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png.meta new file mode 100644 index 0000000..f066772 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/TransportPlayButtonOn.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 2d777c9a14189d241aea1afeeeff448c +timeCreated: 1453177025 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png b/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png new file mode 100644 index 0000000..0a66e0a Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png differ diff --git a/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png.meta b/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png.meta new file mode 100644 index 0000000..4397ce5 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/TransportStopButtonOff.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: cafa069c15865d543a07375373f0a18e +timeCreated: 1453177025 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png b/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png new file mode 100644 index 0000000..975e305 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png differ diff --git a/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png.meta b/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png.meta new file mode 100644 index 0000000..a8eff38 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/TransportStopButtonOn.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: eab53cb0959d1244aadeacf8b76c755c +timeCreated: 1453177025 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/preview.png b/Assets/Editor Default Resources/FMOD/preview.png new file mode 100644 index 0000000..b91f101 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/preview.png differ diff --git a/Assets/Editor Default Resources/FMOD/preview.png.meta b/Assets/Editor Default Resources/FMOD/preview.png.meta new file mode 100644 index 0000000..4b2c539 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/preview.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 0793eda432fc5df4ab1291e6baacd771 +timeCreated: 1434430906 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/FMOD/previewemitter.png b/Assets/Editor Default Resources/FMOD/previewemitter.png new file mode 100644 index 0000000..32ec8c6 Binary files /dev/null and b/Assets/Editor Default Resources/FMOD/previewemitter.png differ diff --git a/Assets/Editor Default Resources/FMOD/previewemitter.png.meta b/Assets/Editor Default Resources/FMOD/previewemitter.png.meta new file mode 100644 index 0000000..9ae72c0 --- /dev/null +++ b/Assets/Editor Default Resources/FMOD/previewemitter.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 9519043db3741934fa01455c47683e8c +timeCreated: 1434431177 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor.meta b/Assets/Editor.meta new file mode 100644 index 0000000..f03f482 --- /dev/null +++ b/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66fd76d1e8220fe4bb3ba0d326e6eb64 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/FMODMigrationUtil.cs b/Assets/Editor/FMODMigrationUtil.cs new file mode 100644 index 0000000..df66e86 --- /dev/null +++ b/Assets/Editor/FMODMigrationUtil.cs @@ -0,0 +1,219 @@ +using System; +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using UnityEditor; + +// Disable all the deprecated function warnings. Can't change anything because we have to be backwards compatible. +#pragma warning disable 0618 + + +#pragma warning disable 0649 + +namespace FMODUnity +{ + + [InitializeOnLoad] + public class MigrationUtil : MonoBehaviour + { + + /* + If you have a custom script that uses the FMODAsset class, it will need to me migrated so it can reference events in the new integration + + For Example, if you have the existing script + + public class MyBehaviour : MonoBehaviour + { + public FMODAsset MyEvent; + private FMOD.Studio.EventInstance myEventInstance; + + void Start() + { + myEventInstance = FMOD_StudioSystem.instance.GetEvent(MyEvent) + } + } + + You can migrate it by first adding a new property for each existing property + + public class MyBehaviour : MonoBehaviour + { + public FMODAsset MyEvent; + [FMODUnity.EventRef] + public String MyEventMigrated; + private FMOD.Studio.EventInstance myEventInstance; + + void Start() + { + myEventInstance = FMODUnity.RuntimeManager.CreateInstance(MyEventMigrated) + } + } + + Then add a custom migration entry before running the migration command + + static CustomMigrationEntry[] CustomMigrationEntries = new CustomMigrationEntry[] + { + new CustomMigrationEntry { ScriptClass = typeof(MyBehaviour), OldProperty = "MyEvent", NewProperty = "MyEventMigrated" }, + }; + + You can add multiple custom migration entries + + static CustomMigrationEntry[] CustomMigrationEntries = new CustomMigrationEntry[] + { + new CustomMigrationEntry { ScriptClass = typeof(MyBehaviour), OldProperty = "MyEvent", NewProperty = "MyEventMigrated" }, + new CustomMigrationEntry { ScriptClass = typeof(MyOtherBehaviour), OldProperty = "MyEvent", NewProperty = "MyEventMigrated" }, + }; + + After you've run the migration command you can remove the FMODAsset property from your script and rename the new properties + + public class MyBehaviour : MonoBehaviour + { + [FormerlySerializedAs("MyEventMigrated")] + [FMODUnity.EventRef] + public String MyEvent; + private FMOD.Studio.EventInstance myEventInstance; + + void Start() + { + myEventInstance = FMODUnity.RuntimeManager.CreateInstance(MyEvent) + } + } + + If you want to remove the FormerlySerializedAs you can do so after you've loaded and saved every scene in your project. + */ + + static CustomMigrationEntry[] CustomMigrationEntries = new CustomMigrationEntry[] + { + //new CustomMigrationEntry { ScriptClass = typeof(MyBehaviour), OldProperty = "MyEvent", NewProperty = "MyEventMigrated" }, + }; + + struct CustomMigrationEntry + { + public Type ScriptClass; + public String OldProperty; + public String NewProperty; + } + + [MenuItem("FMOD/Migration From Legacy Integration")] + public static void ShowMigrationDialog() + { + if (EditorUtility.DisplayDialog("FMOD Studio Integration Migration", "Are you sure you wish to migrate.\nPlease backup your Unity project first.", "OK", "Cancel")) + { + Migrate(); + } + } + + public static void Migrate() + { + int oldUndoIndex = Undo.GetCurrentGroup(); + Undo.IncrementCurrentGroup(); + Undo.SetCurrentGroupName("FMOD Studio Integration Migration"); + + Settings settings = Settings.Instance; + + var prefKey = "FMODStudioProjectPath_" + Application.dataPath; + var prefValue = EditorPrefs.GetString(prefKey); + if (prefValue != null) + { + settings.SourceBankPath = prefValue as string; + settings.SourceBankPath += "/Build"; + settings.HasSourceProject = false; + } + + // for each level + EditorApplication.SaveCurrentSceneIfUserWantsTo(); + + var scenes = AssetDatabase.FindAssets("*.scene"); + foreach (string scene in scenes) + { + if (!EditorUtility.DisplayDialog("FMOD Studio Integration Migration", String.Format("Migrate scene {0}", AssetDatabase.GUIDToAssetPath(scene)), "OK", "Cancel")) + { + continue; + } + + EditorApplication.OpenScene(AssetDatabase.GUIDToAssetPath(scene)); + + var emitters = FindObjectsOfType(); + foreach (var emitter in emitters) + { + GameObject parent = emitter.gameObject; + bool startOnAwake = emitter.startEventOnAwake; + string path = null; + if (emitter.asset != null) + { + path = emitter.asset.path; + } + else if (!String.IsNullOrEmpty(emitter.path)) + { + path = emitter.path; + } + else + { + continue; + } + + Undo.DestroyObjectImmediate(emitter); + + var newEmitter = Undo.AddComponent(parent); + newEmitter.Event = path; + newEmitter.PlayEvent = startOnAwake ? EmitterGameEvent.ObjectStart : EmitterGameEvent.None; + newEmitter.PlayEvent = startOnAwake ? EmitterGameEvent.ObjectDestroy : EmitterGameEvent.None; + } + + + var listeners = FindObjectsOfType(); + + foreach (var listener in listeners) + { + GameObject parent = listener.gameObject; + + foreach (var plugin in listener.pluginPaths) + { + if (!settings.Plugins.Contains(plugin)) + { + settings.Plugins.Add(plugin); + } + } + + Undo.DestroyObjectImmediate(listener); + Undo.AddComponent(parent); + } + + foreach (var custom in CustomMigrationEntries) + { + var objects = FindObjectsOfType(custom.ScriptClass); + foreach (var obj in objects) + { + var serializedObj = new SerializedObject(obj); + var oldProp = serializedObj.FindProperty(custom.OldProperty); + if (oldProp == null || oldProp.propertyType != SerializedPropertyType.ObjectReference || (oldProp.objectReferenceValue != null && oldProp.objectReferenceValue.GetType() != typeof(FMODAsset))) + { + UnityEngine.Debug.LogWarning(String.Format("FMOD Studio Migration: Cannot find property {0} of type FMODAsset on script {1}", custom.OldProperty, custom.ScriptClass.ToString())); + continue; + } + var newProp = serializedObj.FindProperty(custom.NewProperty); + if (newProp == null || newProp.propertyType != SerializedPropertyType.String) + { + UnityEngine.Debug.LogWarning(String.Format("FMOD Studio Migration: Cannot find property {0} of type string on script {1}", custom.NewProperty, custom.ScriptClass.ToString())); + continue; + } + var oldAsset = oldProp.objectReferenceValue as FMODAsset; + if (oldAsset != null) + { + newProp.stringValue = oldAsset.path; + } + oldProp.objectReferenceValue = null; + serializedObj.ApplyModifiedProperties(); + } + } + + EditorApplication.SaveCurrentSceneIfUserWantsTo(); + } + + EditorUtility.SetDirty(settings); + + AssetDatabase.DeleteAsset("Assets/FMODAssets"); + AssetDatabase.Refresh(); + Undo.CollapseUndoOperations(oldUndoIndex); + } + } +} diff --git a/Assets/Editor/FMODMigrationUtil.cs.meta b/Assets/Editor/FMODMigrationUtil.cs.meta new file mode 100644 index 0000000..2f02077 --- /dev/null +++ b/Assets/Editor/FMODMigrationUtil.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4ec66fcbb19699c4085ef9d55e5cb2cd +timeCreated: 1448505058 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FMOD Banks.meta b/Assets/FMOD Banks.meta new file mode 100644 index 0000000..ee942be --- /dev/null +++ b/Assets/FMOD Banks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4a335172d796ad40a4158f81fb0cdbf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FMOD Banks/Desktop.meta b/Assets/FMOD Banks/Desktop.meta new file mode 100644 index 0000000..f404d7b --- /dev/null +++ b/Assets/FMOD Banks/Desktop.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d7ddfbd00336b6468c5ccedde6a2b62 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FMOD Banks/Desktop/Master Bank.bank b/Assets/FMOD Banks/Desktop/Master Bank.bank new file mode 100644 index 0000000..435a3ea Binary files /dev/null and b/Assets/FMOD Banks/Desktop/Master Bank.bank differ diff --git a/Assets/FMOD Banks/Desktop/Master Bank.bank.meta b/Assets/FMOD Banks/Desktop/Master Bank.bank.meta new file mode 100644 index 0000000..833391f --- /dev/null +++ b/Assets/FMOD Banks/Desktop/Master Bank.bank.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 385812ceb26c662448ac8f327d22a91b +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FMOD Banks/Desktop/Master Bank.strings.bank b/Assets/FMOD Banks/Desktop/Master Bank.strings.bank new file mode 100644 index 0000000..bf1f04d Binary files /dev/null and b/Assets/FMOD Banks/Desktop/Master Bank.strings.bank differ diff --git a/Assets/FMOD Banks/Desktop/Master Bank.strings.bank.meta b/Assets/FMOD Banks/Desktop/Master Bank.strings.bank.meta new file mode 100644 index 0000000..8287fa3 --- /dev/null +++ b/Assets/FMOD Banks/Desktop/Master Bank.strings.bank.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 36433f5fbce8a41429d9d5d32408922a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FMOD Banks/GUIDs.txt b/Assets/FMOD Banks/GUIDs.txt new file mode 100644 index 0000000..52df8ef --- /dev/null +++ b/Assets/FMOD Banks/GUIDs.txt @@ -0,0 +1,14 @@ +{a9140383-6f7e-47e6-a2c9-d57eba7efb3e} event:/game/button_deactivated +{263637b9-0a24-4fd6-b191-d0d3b9835fa0} event:/game/button_pressed +{75d9bb63-5250-4143-a89e-ecb1a01954c9} event:/game/button_released +{f565b6b8-2b7b-476f-9eca-d2835a143b25} event:/game/door_closed +{14dcadc7-0dc9-4ce1-86c9-573168f4d2c1} event:/game/door_open +{4af5b57f-1dc2-4684-b547-cc8a9c0eb1a5} event:/game/generator +{33bcd925-7a96-4dc1-ab41-0e93f9c78a95} event:/music/intro +{1be24e63-cfe6-48c3-86ec-91e92695b739} event:/music/main_theme +{84f5785e-89ca-4529-ac1a-17acee8adc67} event:/music/second_theme +{896d541e-13ae-47ac-b653-3ed68704129e} event:/player/cough +{6fb91523-6b88-4fdf-8ed5-772f35c1b68b} bus:/ +{9d01b619-631f-4c67-9b33-264573323eed} bus:/music +{a40bdd6e-e5fc-4d75-aa70-151881f68e94} bus:/Reverb +{f2e5011e-791e-468c-a326-5ae894fd4a72} bank:/Master Bank diff --git a/Assets/FMOD Banks/GUIDs.txt.meta b/Assets/FMOD Banks/GUIDs.txt.meta new file mode 100644 index 0000000..7e3d802 --- /dev/null +++ b/Assets/FMOD Banks/GUIDs.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bd81437529517f24b9c92bea7d250158 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Gizmos.meta b/Assets/Gizmos.meta new file mode 100644 index 0000000..fc66c16 --- /dev/null +++ b/Assets/Gizmos.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 75b9001cbe2e2fa47bbc0a6ecf3d4098 +folderAsset: yes +timeCreated: 1540351105 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Gizmos/FMODEmitter.tiff b/Assets/Gizmos/FMODEmitter.tiff new file mode 100644 index 0000000..fe765e4 Binary files /dev/null and b/Assets/Gizmos/FMODEmitter.tiff differ diff --git a/Assets/Gizmos/FMODEmitter.tiff.meta b/Assets/Gizmos/FMODEmitter.tiff.meta new file mode 100644 index 0000000..9bb7828 --- /dev/null +++ b/Assets/Gizmos/FMODEmitter.tiff.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 392af304825cbe847bbf4e603852e4dd +timeCreated: 1433142042 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..e15bef5 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ba0aa8e0ef3fb14aa1d8288b7240da6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor.meta b/Assets/Plugins/Editor.meta new file mode 100644 index 0000000..08f9bfb --- /dev/null +++ b/Assets/Plugins/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11a73d122d4ba8c4a89cfef7fb658c0c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD.meta b/Assets/Plugins/Editor/FMOD.meta new file mode 100644 index 0000000..99c38bd --- /dev/null +++ b/Assets/Plugins/Editor/FMOD.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5fff257860818bd419ca8979be7deef3 +folderAsset: yes +timeCreated: 1444017889 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/BankRefDrawer.cs b/Assets/Plugins/Editor/FMOD/BankRefDrawer.cs new file mode 100644 index 0000000..fb3ddb7 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/BankRefDrawer.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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 UNITY_2017_3_OR_NEWER + if (e.type == EventType.DragPerform && position.Contains(e.mousePosition)) + #else + if (e.type == EventType.dragPerform && position.Contains(e.mousePosition)) + #endif + { + 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 = EventBrowser.CreateInstance(); + + eventBrowser.SelectBank(property); + var windowRect = position; + windowRect.position = GUIUtility.GUIToScreenPoint(windowRect.position); + windowRect.height = searchRect.height + 1; + eventBrowser.ShowAsDropDown(windowRect, new Vector2(windowRect.width, 400)); + } + + EditorGUI.EndProperty(); + } + } +} diff --git a/Assets/Plugins/Editor/FMOD/BankRefDrawer.cs.meta b/Assets/Plugins/Editor/FMOD/BankRefDrawer.cs.meta new file mode 100644 index 0000000..347474f --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/BankRefDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 49ebe6fea5e4bfc4bb492bba062b2afe +timeCreated: 1433209573 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/CreateEventPopup.cs b/Assets/Plugins/Editor/FMOD/CreateEventPopup.cs new file mode 100644 index 0000000..23448e4 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/CreateEventPopup.cs @@ -0,0 +1,429 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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 UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.Layout) + #else + if (Event.current.type == EventType.layout) + #endif + { + 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 UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.KeyDown) + #else + if (Event.current.type == EventType.keyDown) + #endif + { + 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 UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.KeyDown) + #else + if (Event.current.type == EventType.keyDown) + #endif + { + 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 UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.KeyDown) + #else + if (Event.current.type == EventType.keyDown) + #endif + nextEntry = filteredEntries[lastHover]; + Event.current.Use(); + } + if (Event.current.keyCode == KeyCode.LeftArrow) + { + #if UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.KeyDown) + #else + if (Event.current.type == EventType.keyDown) + #endif + 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 UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.MouseDown && currentRect.Contains(Event.current.mousePosition) && + currentFolder.parent != null) + #else + if (Event.current.type == EventType.mouseDown && currentRect.Contains(Event.current.mousePosition) && + currentFolder.parent != null) + #endif + { + 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 UNITY_2017_3_OR_NEWER + if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown) + #else + if (rect.Contains(Event.current.mousePosition) && Event.current.type == EventType.mouseDown) + #endif + { + 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 UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.Repaint) + #else + if (Event.current.type == EventType.repaint) + #endif + { + entry.rect = rect; + } + } + EditorGUILayout.EndScrollView(); + + #if UNITY_2017_3_OR_NEWER + if (Event.current.type == EventType.Repaint) + #else + if (Event.current.type == EventType.repaint) + #endif + { + 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/Assets/Plugins/Editor/FMOD/CreateEventPopup.cs.meta b/Assets/Plugins/Editor/FMOD/CreateEventPopup.cs.meta new file mode 100644 index 0000000..7920717 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/CreateEventPopup.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9c9773a32ed4a2b429fd42645175c32b +timeCreated: 1455063674 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EditorBankRef.cs b/Assets/Plugins/Editor/FMOD/EditorBankRef.cs new file mode 100644 index 0000000..1083ea6 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EditorBankRef.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEditor; +namespace FMODUnity +{ + public class EditorBankRef : ScriptableObject + { + [Serializable] + public class NameValuePair + { + public string Name; + public long Value; + + public NameValuePair(string name, long value) + { + Name = name; + Value = value; + } + } + + [SerializeField] + public string Path; + public string Name + { + get { return global::System.IO.Path.GetFileNameWithoutExtension(Path); } + } + + [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/Assets/Plugins/Editor/FMOD/EditorBankRef.cs.meta b/Assets/Plugins/Editor/FMOD/EditorBankRef.cs.meta new file mode 100644 index 0000000..2a0425f --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EditorBankRef.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c18180ecb35941f4682ae60107b85b7c +timeCreated: 1432775088 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EditorEventRef.cs b/Assets/Plugins/Editor/FMOD/EditorEventRef.cs new file mode 100644 index 0000000..7053174 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/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/Assets/Plugins/Editor/FMOD/EditorEventRef.cs.meta b/Assets/Plugins/Editor/FMOD/EditorEventRef.cs.meta new file mode 100644 index 0000000..9cab898 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EditorEventRef.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ceb653cd98e289a4e8697a1af55201f2 +timeCreated: 1432775088 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EditorParamRef.cs b/Assets/Plugins/Editor/FMOD/EditorParamRef.cs new file mode 100644 index 0000000..0a7b70a --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EditorParamRef.cs @@ -0,0 +1,21 @@ +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; + } +} diff --git a/Assets/Plugins/Editor/FMOD/EditorParamRef.cs.meta b/Assets/Plugins/Editor/FMOD/EditorParamRef.cs.meta new file mode 100644 index 0000000..5d50165 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EditorParamRef.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fecb8ef7f94ca804a8ab72049b86782e +timeCreated: 1432775088 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EditorUtils.cs b/Assets/Plugins/Editor/FMOD/EditorUtils.cs new file mode 100644 index 0000000..987605d --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EditorUtils.cs @@ -0,0 +1,743 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using System.Collections; +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))); + } + } + + 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 Settings.Instance.SourceBankPath; + } + return null; + } + + public static string GetBankDirectoryUnformatted() + { + if (Settings.Instance.HasSourceProject && !String.IsNullOrEmpty(Settings.Instance.SourceProjectPathUnformatted)) + { + string projectPath = Settings.Instance.SourceProjectPathUnformatted; + char directorySeparator = '\\'; + var folderIndex = projectPath.LastIndexOf(directorySeparator); + if (folderIndex < 0) + { + directorySeparator = '/'; + folderIndex = projectPath.LastIndexOf(directorySeparator); + } + string projectFolder = ""; + if (folderIndex > 0) + { + projectFolder = projectPath.Substring(0, folderIndex); + } + return projectFolder + directorySeparator + BuildFolder; + } + else if (!String.IsNullOrEmpty(Settings.Instance.SourceBankPathUnformatted)) + { + return Settings.Instance.SourceBankPathUnformatted; + } + 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 = "FMOD Studio Project path not set"; + return; + } + if (!File.Exists(settings.SourceProjectPath)) + { + valid = false; + reason = "FMOD Studio Project not found"; + 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").Length == 0 + ) + { + valid = false; + reason = "FMOD Studio Project does not contain any built data. Please build your project in FMOD Studio."; + return; + } + } + else + { + if (String.IsNullOrEmpty(settings.SourceBankPath)) + { + valid = false; + reason = "Build path not set"; + return; + } + if (!Directory.Exists(settings.SourceBankPath)) + { + valid = false; + reason = "Build path doesn't exist"; + return; + } + + if (settings.HasPlatforms) + { + if (Directory.GetDirectories(settings.SourceBankPath).Length == 0) + { + valid = false; + reason = "Build path doesn't contain any platform folders"; + return; + } + } + else + { + if (Directory.GetFiles(settings.SourceBankPath, "*.strings.bank").Length == 0) + { + valid = false; + reason = "Build path doesn't contain the contents of an FMOD Studio Build"; + return; + } + } + } + } + + public static string[] GetBankPlatforms() + { + string buildFolder = GetBankDirectory(); + 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; + #if UNITY_2017_2_OR_NEWER + EditorApplication.playModeStateChanged += HandleOnPlayModeChanged; + EditorApplication.pauseStateChanged += HandleOnPausedModeChanged; + #else + EditorApplication.playmodeStateChanged += HandleOnPlayModeChanged; + #endif + } + + #if UNITY_2017_2_OR_NEWER + 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(); + } + } + #else + static void HandleOnPlayModeChanged() + { + // 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 (EditorApplication.isPlayingOrWillChangePlaymode && + !EditorApplication.isPaused) + { + DestroySystem(); + } + + if (RuntimeManager.IsInitialized && RuntimeManager.HasBanksLoaded) + { + if (EditorApplication.isPlayingOrWillChangePlaymode) + { + RuntimeManager.GetBus("bus:/").setPaused(EditorApplication.isPaused); + RuntimeManager.StudioSystem.update(); + } + } + } + #endif + + static void Update() + { + // Compilation will cause scripts to reload, losing all state + // This is the last chance to clean up FMOD and avoid a leak. + if (EditorApplication.isCompiling) + { + DestroySystem(); + RuntimeManager.Destroy(); + } + + // Update the editor system + if (system.isValid()) + { + CheckResult(system.update()); + } + + 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 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.getLowLevelSystem(out lowlevel)); + + // Use play-in-editor speaker mode for event browser preview and metering + lowlevel.setSoftwareFormat(0, (FMOD.SPEAKERMODE)Settings.Instance.GetSpeakerMode(FMODPlatform.Default),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("http://www.fmod.org/documentation/#content/generated/engine_new_unity/overview.html"); + } + + [MenuItem("FMOD/Help/API Documentation", priority = 4)] + static void OnlineAPIDocs() + { + Application.OpenURL("http://www.fmod.org/documentation/#content/generated/studio_api.html"); + } + + [MenuItem("FMOD/Help/Support Forum", priority = 5)] + static void OnlineQA() + { + Application.OpenURL("http://www.fmod.org/questions"); + } + + [MenuItem("FMOD/Help/Revision History", priority = 6)] + static void OnlineRevisions() + { + Application.OpenURL("http://www.fmod.org/documentation/#content/generated/common/revision.html"); + } + + [MenuItem("FMOD/About Integration", priority = 7)] + public static void About() + { + FMOD.System lowlevel; + CheckResult(System.getLowLevelSystem(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-2018 \n\nSee LICENSE.TXT for additional license information.", "OK"); + } + + static FMOD.Studio.Bank masterBank; + static FMOD.Studio.Bank previewBank; + 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) + { + bool load = true; + if (previewEventDesc.isValid()) + { + Guid guid; + previewEventDesc.getID(out guid); + if (guid == eventRef.Guid) + { + load = false; + } + else + { + PreviewStop(); + } + } + + if (load) + { + CheckResult(System.loadBankFile(EventManager.MasterBank.Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out masterBank)); + if (eventRef.Banks[0] != EventManager.MasterBank) + { + CheckResult(System.loadBankFile(eventRef.Banks[0].Path, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out previewBank)); + } + else + { + previewBank.clearHandle(); + } + + CheckResult(System.getEventByID(eventRef.Guid, out previewEventDesc)); + CheckResult(previewEventDesc.createInstance(out previewEventInstance)); + } + + CheckResult(previewEventInstance.start()); + previewState = PreviewState.Playing; + } + + public static void PreviewUpdateParameter(string paramName, float paramValue) + { + if (previewEventInstance.isValid()) + { + CheckResult(previewEventInstance.setParameterValue(paramName, 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(); + if (previewBank.isValid()) + { + previewBank.unload(); + } + masterBank.unload(); + masterBank.clearHandle(); + previewBank.clearHandle(); + previewState = PreviewState.Stopped; + } + } + + public static float[] GetMetering() + { + FMOD.System lowlevel; + CheckResult(System.getLowLevelSystem(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[outputMetering.numchannels > 0 ? outputMetering.numchannels : channels]; + if (outputMetering.numchannels > 0) + { + Array.Copy(outputMetering.rmslevel, data, outputMetering.numchannels); + } + 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; + } + //UnityEngine.Debug.Log("FMOD Studio: Script Client failed to connect - Check FMOD Studio is running"); + 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; + //UnityEngine.Debug.Log("FMOD Studio: Script Client failed to connect - Check FMOD Studio is running"); + 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) + { + } + return open; + } + + private static string GetMasterBank() + { + GetScriptOutput(String.Format("masterBankFolder = studio.project.workspace.masterBankFolder;")); + string bankCountString = GetScriptOutput(String.Format("masterBankFolder.items.length;")); + int bankCount = Int32.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; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Editor/FMOD/EditorUtils.cs.meta b/Assets/Plugins/Editor/FMOD/EditorUtils.cs.meta new file mode 100644 index 0000000..3cd5e2c --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EditorUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2bb4068641d1f71478f95a9b73533f51 +timeCreated: 1432608272 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EventBrowser.cs b/Assets/Plugins/Editor/FMOD/EventBrowser.cs new file mode 100644 index 0000000..b7ca148 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventBrowser.cs @@ -0,0 +1,1074 @@ +using System; +using System.Collections.Generic; +using System.Text; +using UnityEditor; +using UnityEngine; +using System.IO; + +namespace FMODUnity +{ + class EventBrowser : EditorWindow, ISerializationCallbackReceiver + { + [MenuItem("FMOD/Event Browser", priority = 1)] + public static void ShowEventBrowser() + { + EventBrowser eventBrowser = EditorWindow.GetWindow("FMOD Events"); + eventBrowser.minSize = new Vector2(280, 600); + eventBrowser.Show(); + } + + void OnDestroy() + { + EditorUtils.PreviewStop(); + } + + List expandedState; + int selectedIndex = -1; + public void OnBeforeSerialize() + { + expandedState = new List(); + Action isExpanded = null; + isExpanded = (x) => { selectedIndex = (x == selectedItem) ? expandedState.Count : selectedIndex; expandedState.Add(x.Expanded); x.Children.ForEach(isExpanded); }; + treeItems.ForEach(isExpanded); + } + + public void OnAfterDeserialize() + { + } + + class TreeItem + { + public string Name; + public bool Expanded = false; + public EditorEventRef EventRef = null; + public EditorBankRef BankRef = null; + public List Children = new List(); + public TreeItem Next = null; + public TreeItem Prev = null; + public Rect Rect; + public bool Exists; + } + + [NonSerialized] + List treeItems; + + Texture searchIcon; + Texture eventIcon; + Texture folderOpenIcon; + Texture folderClosedIcon; + Texture bankIcon; + Texture snapshotIcon; + Texture2D borderIcon; + GUIStyle eventStyle; + + [NonSerialized] + TreeItem selectedItem = null; + + Dictionary previewParamValues = new Dictionary(); + float previewDistance = 0; + float previewOrientation = 0; + + string searchString = ""; + + private SerializedProperty outputProperty; + + bool fromInspector = false; + bool showEvents = true; + bool showBanks = true; + + Vector2 treeScroll; + Vector2 paramScroll; + + [NonSerialized] + TreeItem lastDrawnItem; + [NonSerialized] + int itemCount; + [NonSerialized] + bool forceRepaint; + [NonSerialized] + float lastRepaintTime; + + void Update() + { + if (forceRepaint && lastRepaintTime < Time.time + (1/30.0f)) + { + Repaint(); + lastRepaintTime = Time.time; + } + } + + void SetPreviewEvent(EditorEventRef eventRef) + { + forceRepaint = false; + EditorUtils.PreviewStop(); + previewParamValues.Clear(); + + previewDistance = 0; + previewOrientation = 0; + + if (eventRef != null) + { + foreach (var paramRef in eventRef.Parameters) + { + previewParamValues.Add(paramRef.Name, paramRef.Default); + } + } + eventPosition = new Vector2(0, 0); + } + + void SetSelectedItem(TreeItem item) + { + //if (item != selectedItem) + { + selectedItem = item; + + if (item != null) + { + SetPreviewEvent(item.EventRef); + } + else + { + SetPreviewEvent(null); + } + } + } + + void ShowEventFolder(TreeItem item, Predicate filter) + { + eventStyle.padding.left += 17; + + { + // Highlight first found item + if (item.EventRef != null || item.BankRef != null) + { + if (!String.IsNullOrEmpty(searchString) && + itemCount == 0 && + selectedItem == null + ) + { + SetSelectedItem(item); + } + + itemCount++; + } + + item.Next = null; + item.Prev = lastDrawnItem; + if (lastDrawnItem != null) + { + lastDrawnItem.Next = item; + } + lastDrawnItem = item; + } + + if (item.EventRef != null) + { + // Rendering and GUI event handling to show an event + GUIContent content = new GUIContent(item.Name, item.EventRef.Path.StartsWith("snapshot") ? snapshotIcon : eventIcon); + + eventStyle.normal.background = selectedItem == item ? EditorGUIUtility.Load("FMOD/Selected.png") as Texture2D : null; + GUILayout.Label(content, eventStyle, GUILayout.ExpandWidth(true)); + + Event e = Event.current; + + Rect rect = GUILayoutUtility.GetLastRect(); + if (e.type == EventType.MouseDown && + e.button == 0 && + rect.Contains(e.mousePosition)) + { + e.Use(); + + if (fromInspector && e.clickCount >= 2) + { + outputProperty.stringValue = ""; + outputProperty.stringValue = item.EventRef.Path; + EditorUtils.UpdateParamsOnEmitter(outputProperty.serializedObject, item.EventRef.Path); + outputProperty.serializedObject.ApplyModifiedProperties(); + Close(); + } + + SetSelectedItem(item); + } + #if UNITY_2017_3_OR_NEWER + if (e.type == EventType.MouseDrag && rect.Contains(e.mousePosition) && !fromInspector) + #else + if (e.type == EventType.mouseDrag && rect.Contains(e.mousePosition) && !fromInspector) + #endif + { + DragAndDrop.PrepareStartDrag(); + DragAndDrop.objectReferences = new UnityEngine.Object[] { ScriptableObject.Instantiate(item.EventRef) }; + DragAndDrop.StartDrag("New FMOD Studio Emitter"); + e.Use(); + } + if (Event.current.type == EventType.Repaint) + { + item.Rect = rect; + } + } + else if (item.BankRef != null) + { + // Rendering and event handling for a bank + GUIContent content = new GUIContent(item.Name, bankIcon); + + eventStyle.normal.background = selectedItem == item ? EditorGUIUtility.Load("FMOD/Selected.png") as Texture2D : null; + GUILayout.Label(content, eventStyle, GUILayout.ExpandWidth(true)); + + Event e = Event.current; + + Rect rect = GUILayoutUtility.GetLastRect(); + if (e.type == EventType.MouseDown && + e.button == 0 && + rect.Contains(e.mousePosition)) + { + e.Use(); + + if (fromInspector && e.clickCount >= 2) + { + outputProperty.stringValue = item.BankRef.Name; + outputProperty.serializedObject.ApplyModifiedProperties(); + Close(); + } + + SetSelectedItem(item); + } + #if UNITY_2017_3_OR_NEWER + if (e.type == EventType.MouseDrag && rect.Contains(e.mousePosition) && !fromInspector) + #else + if (e.type == EventType.mouseDrag && rect.Contains(e.mousePosition) && !fromInspector) + #endif + { + DragAndDrop.PrepareStartDrag(); + DragAndDrop.objectReferences = new UnityEngine.Object[] { ScriptableObject.Instantiate(item.BankRef) }; + DragAndDrop.StartDrag("New FMOD Studio Bank Loader"); + e.Use(); + } + if (Event.current.type == EventType.Repaint) + { + item.Rect = rect; + } + } + else + { + eventStyle.normal.background = selectedItem == item ? EditorGUIUtility.Load("FMOD/Selected.png") as Texture2D : null; + + bool expanded = item.Expanded || !string.IsNullOrEmpty(searchString); + GUIContent content = new GUIContent(item.Name, expanded ? folderOpenIcon : folderClosedIcon); + GUILayout.Label(content, eventStyle, GUILayout.ExpandWidth(true)); + + Rect rect = GUILayoutUtility.GetLastRect(); + if (Event.current.type == EventType.MouseDown && + Event.current.button == 0 && + rect.Contains(Event.current.mousePosition)) + { + Event.current.Use(); + item.Expanded = !item.Expanded; + SetSelectedItem(item); + } + + if (item.Expanded || !string.IsNullOrEmpty(searchString)) + { + item.Children.Sort((a, b) => a.Name.CompareTo(b.Name)); + if (item.Name.ToLower().Contains(searchString.ToLower())) + { + foreach(var childFolder in item.Children) + { + ShowEventFolder(childFolder, (x) => true); + } + } + else + { + foreach (var childFolder in item.Children.FindAll(filter)) + { + ShowEventFolder(childFolder, filter); + } + } + } + + if (Event.current.type == EventType.Repaint) + { + item.Rect = rect; + } + } + eventStyle.padding.left -= 17; + } + + Vector2 eventPosition; + + void OnGUI() + { + if (EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isPlaying) + { + // Brute force hack to stop us calling DLL functions while Unity is starting up + // playing in editor mode and will cause us to leak system objects + this.ShowNotification(new GUIContent("Playing In Editor Starting")); + return; + } + + if (!EventManager.IsValid) + { + this.ShowNotification(new GUIContent("No FMOD Studio banks loaded. Please check your settings.")); + return; + } + + if (Event.current.type == EventType.Layout) + { + RebuildDisplayFromCache(); + } + + //if (eventStyle == null) + { + eventStyle = new GUIStyle(GUI.skin.button); + eventStyle.normal.background = null; + eventStyle.focused.background = null; + eventStyle.active.background = null; + eventStyle.onFocused.background = null; + eventStyle.onNormal.background = null; + eventStyle.onHover.background = null; + eventStyle.onActive.background = null; + eventStyle.stretchWidth = false; + eventStyle.padding.left = 0; + eventStyle.stretchHeight = false; + eventStyle.fixedHeight = eventStyle.lineHeight + eventStyle.margin.top + eventStyle.margin.bottom; + eventStyle.alignment = TextAnchor.MiddleLeft; + + eventIcon = EditorGUIUtility.Load("FMOD/EventIcon.png") as Texture; + folderOpenIcon = EditorGUIUtility.Load("FMOD/FolderIconOpen.png") as Texture; + folderClosedIcon = EditorGUIUtility.Load("FMOD/FolderIconClosed.png") as Texture; + searchIcon = EditorGUIUtility.Load("FMOD/SearchIcon.png") as Texture; + bankIcon = EditorGUIUtility.Load("FMOD/BankIcon.png") as Texture; + snapshotIcon = EditorGUIUtility.Load("FMOD/SnapshotIcon.png") as Texture; + borderIcon = EditorGUIUtility.Load("FMOD/Border.png") as Texture2D; + } + + if (fromInspector) + { + 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); + } + + // Split the window int search box, tree view, preview pane (only if full browser) + Rect searchRect, listRect, previewRect; + SplitWindow(out searchRect, out listRect, out previewRect); + + // Scroll the selected item in the tree view - put above the search box otherwise it will take + // our key presses + #if UNITY_2017_3_OR_NEWER + if (selectedItem != null && Event.current.type == EventType.KeyDown) + #else + if (selectedItem != null && Event.current.type == EventType.keyDown) + #endif + { + if (Event.current.keyCode == KeyCode.UpArrow) + { + if (selectedItem.Prev != null) + { + SetSelectedItem(selectedItem.Prev); + + // make sure it's visible + if (selectedItem.Rect.y < treeScroll.y) + { + treeScroll.y = selectedItem.Rect.y; + } + } + Event.current.Use(); + } + if (Event.current.keyCode == KeyCode.DownArrow) + { + if (selectedItem.Next != null) + { + SetSelectedItem(selectedItem.Next); + // make sure it's visible + if (selectedItem.Rect.y + selectedItem.Rect.height > treeScroll.y + listRect.height) + { + treeScroll.y += (selectedItem.Rect.y + selectedItem.Rect.height) - listRect.height; + } + } + Event.current.Use(); + } + if (Event.current.keyCode == KeyCode.RightArrow) + { + selectedItem.Expanded = true; + Event.current.Use(); + } + if (Event.current.keyCode == KeyCode.LeftArrow) + { + selectedItem.Expanded = false; + Event.current.Use(); + } + } + + // Show the search box at the top + GUILayout.BeginArea(searchRect); + GUILayout.BeginHorizontal(); + GUILayout.Label(new GUIContent(searchIcon), GUILayout.ExpandWidth(false)); + GUI.SetNextControlName("SearchBox"); + searchString = EditorGUILayout.TextField(searchString); + GUILayout.EndHorizontal(); + GUILayout.EndArea(); + + if (fromInspector) + { + EditorGUI.FocusTextInControl("SearchBox"); + + if (selectedItem != null && Event.current.isKey && Event.current.keyCode == KeyCode.Return + && !(selectedItem.EventRef == null && selectedItem.BankRef == null)) + { + Event.current.Use(); + + if (selectedItem.EventRef != null) + { + outputProperty.stringValue = ""; + outputProperty.stringValue = selectedItem.EventRef.Path; + EditorUtils.UpdateParamsOnEmitter(outputProperty.serializedObject, selectedItem.EventRef.Path); + } + else + { + outputProperty.stringValue = selectedItem.BankRef.Name; + } + outputProperty.serializedObject.ApplyModifiedProperties(); + Close(); + } + if (Event.current.isKey && Event.current.keyCode == KeyCode.Escape) + { + Close(); + } + } + + // Show the tree view + + Predicate searchFilter = null; + searchFilter = (x) => (x.Name.ToLower().Contains(searchString.ToLower()) || x.Children.Exists(searchFilter)); + + // Check if our selected item still matches the search string + if (selectedItem != null && !String.IsNullOrEmpty(searchString) && selectedItem.Children.Count == 0) + { + Predicate containsSelected = null; + containsSelected = (x) => (x == selectedItem || x.Children.Exists(containsSelected)); + Predicate matchForSelected = null; + matchForSelected = (x) => (x.Name.ToLower().Contains(searchString.ToLower()) && (x == selectedItem || x.Children.Exists(containsSelected))) || x.Children.Exists(matchForSelected); + if (!treeItems.Exists(matchForSelected)) + { + SetSelectedItem(null); + } + } + + GUILayout.BeginArea(listRect); + treeScroll = GUILayout.BeginScrollView(treeScroll, GUILayout.ExpandHeight(true)); + + lastDrawnItem = null; + itemCount = 0; + + if (showEvents) + { + treeItems[0].Expanded = fromInspector ? true : treeItems[0].Expanded; + ShowEventFolder(treeItems[0], searchFilter); + ShowEventFolder(treeItems[1], searchFilter); + } + if (showBanks) + { + treeItems[2].Expanded = fromInspector ? true : treeItems[2].Expanded; + ShowEventFolder(treeItems[2], searchFilter); + } + + GUILayout.EndScrollView(); + GUILayout.EndArea(); + + // If the standalone event browser show a preview of the selected item + if (!fromInspector) + { + + GUI.Box(previewRect, GUIContent.none); + + if (selectedItem != null && selectedItem.EventRef != null && selectedItem.EventRef.Path.StartsWith("event:")) + { + PreviewEvent(previewRect, selectedItem.EventRef); + } + + if (selectedItem != null && selectedItem.EventRef != null && selectedItem.EventRef.Path.StartsWith("snapshot:")) + { + PreviewSnapshot(previewRect, selectedItem.EventRef); + } + + if (selectedItem != null && selectedItem.BankRef != null) + { + PreviewBank(previewRect, selectedItem.BankRef); + } + } + } + + private void SplitWindow(out Rect searchRect, out Rect listRect, out Rect previewRect) + { + searchRect = new Rect(4, 4, position.width - 8, 16); + float previewBoxHeight = fromInspector ? 0 : 300; + listRect = new Rect(0, searchRect.height + 6, position.width, position.height - previewBoxHeight - searchRect.height - 15); + previewRect = new Rect(0, position.height - previewBoxHeight, position.width, previewBoxHeight); + } + + Rect previewCustomRect; + Rect previewPathRect; + + private void PreviewEvent(Rect previewRect, EditorEventRef selectedEvent) + { + GUILayout.BeginArea(previewRect); + + bool isNarrow = previewRect.width < 400; + + var style = new GUIStyle(EditorStyles.label); + EditorStyles.label.fontStyle = FontStyle.Bold; + EditorGUIUtility.labelWidth = 75; + + var copyIcon = EditorGUIUtility.Load("FMOD/CopyIcon.png") as Texture; + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Full Path", selectedEvent.Path, style, GUILayout.ExpandWidth(true)); + if (GUILayout.Button(copyIcon, GUILayout.ExpandWidth(false))) + { + EditorGUIUtility.systemCopyBuffer = selectedEvent.Path; + } + EditorGUILayout.EndHorizontal(); + + StringBuilder builder = new StringBuilder(); + selectedEvent.Banks.ForEach((x) => { builder.Append(Path.GetFileNameWithoutExtension(x.Path)); builder.Append(", "); }); + EditorGUILayout.LabelField("Banks", builder.ToString(0, Math.Max(0, builder.Length - 2)), style); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Panning", selectedEvent.Is3D ? "3D" : "2D", style); + EditorGUILayout.LabelField("Oneshot", selectedEvent.IsOneShot.ToString(), style); + + TimeSpan t = System.TimeSpan.FromMilliseconds(selectedEvent.Length); + EditorGUILayout.LabelField("Length", selectedEvent.Length > 0 ? string.Format("{0:D2}:{1:D2}:{2:D3}", t.Minutes, t.Seconds, t.Milliseconds) : "N/A", style); + + if (!isNarrow) EditorGUILayout.LabelField("Streaming", selectedEvent.IsStream.ToString(), style); + EditorGUILayout.EndHorizontal(); + if (isNarrow) EditorGUILayout.LabelField("Streaming", selectedEvent.IsStream.ToString(), style); + + EditorGUIUtility.labelWidth = 0; + EditorStyles.label.fontStyle = FontStyle.Normal; + + if (Event.current.type == EventType.Repaint) + { + var lastRect = GUILayoutUtility.GetLastRect(); + if (!isNarrow) + { + previewCustomRect = new Rect(lastRect.width / 2 - 200, lastRect.yMax + 10, 400, 150); + } + else + { + previewCustomRect = new Rect(lastRect.width / 2 - 130, lastRect.yMax + 10, 260, 150); + } + } + + GUI.Box(new Rect(0, previewCustomRect.yMin, previewRect.width, 1), GUIContent.none); + GUI.Box(new Rect(0, previewCustomRect.yMax, previewRect.width, 1), GUIContent.none); + + GUILayout.BeginArea(previewCustomRect); + + Texture playOff = EditorGUIUtility.Load("FMOD/TransportPlayButtonOff.png") as Texture; + Texture playOn = EditorGUIUtility.Load("FMOD/TransportPlayButtonOn.png") as Texture; + Texture stopOff = EditorGUIUtility.Load("FMOD/TransportStopButtonOff.png") as Texture; + Texture stopOn = EditorGUIUtility.Load("FMOD/TransportStopButtonOn.png") as Texture; + Texture openIcon = EditorGUIUtility.Load("FMOD/transportOpen.png") as Texture; + + var transportButtonStyle = new GUIStyle(); + transportButtonStyle.padding.left = 4; + transportButtonStyle.padding.top = 10; + + var previewState = EditorUtils.PreviewState; + bool playing = previewState == PreviewState.Playing; + bool paused = previewState == PreviewState.Paused; + bool stopped = previewState == PreviewState.Stopped; + EditorGUILayout.BeginVertical(); + if (!isNarrow) GUILayout.FlexibleSpace(); + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button(stopped || paused ? stopOn : stopOff, transportButtonStyle, GUILayout.ExpandWidth(false))) + { + forceRepaint = false; + if (paused) + { + EditorUtils.PreviewStop(); + } + if (playing) + { + EditorUtils.PreviewPause(); + } + } + if (GUILayout.Button(playing ? playOn : playOff, transportButtonStyle, GUILayout.ExpandWidth(false))) + { + if (playing || stopped) + { + EditorUtils.PreviewEvent(selectedEvent); + } + else + { + EditorUtils.PreviewPause(); + } + forceRepaint = true; + } + if (GUILayout.Button(new GUIContent(openIcon, "Show Event in FMOD Studio"), transportButtonStyle, GUILayout.ExpandWidth(false))) + { + string cmd = string.Format("studio.window.navigateTo(studio.project.lookup(\"{0}\"))", selectedEvent.Guid.ToString("b")); + EditorUtils.SendScriptCommand(cmd); + } + + + EditorGUILayout.EndHorizontal(); + if (!isNarrow) GUILayout.FlexibleSpace(); + EditorGUILayout.EndVertical(); + + { + Texture circle = EditorGUIUtility.Load("FMOD/preview.png") as Texture; + Texture circle2 = EditorGUIUtility.Load("FMOD/previewemitter.png") as Texture; + + var originalColour = GUI.color; + if (!selectedEvent.Is3D) + { + GUI.color = new Color(1.0f, 1.0f, 1.0f, 0.1f); + } + + Rect rect = new Rect(isNarrow ? 120 : 150, 10, 128, 128); + GUI.DrawTexture(rect, circle); + + Vector2 centre = rect.center; + Rect rect2 = new Rect(rect.center.x + eventPosition.x - 6, rect.center.y + eventPosition.y - 6, 12, 12); + GUI.DrawTexture(rect2, circle2); + + GUI.color = originalColour; + + #if UNITY_2017_3_OR_NEWER + if (selectedEvent.Is3D && (Event.current.type == EventType.MouseDown || Event.current.type == EventType.MouseDrag) && rect.Contains(Event.current.mousePosition)) + #else + if (selectedEvent.Is3D && (Event.current.type == EventType.mouseDown || Event.current.type == EventType.mouseDrag) && rect.Contains(Event.current.mousePosition)) + #endif + { + var newPosition = Event.current.mousePosition; + Vector2 delta = (newPosition - centre); + float distance = delta.magnitude; + if (distance < 60) + { + eventPosition = newPosition - rect.center; + previewDistance = distance / 60.0f * selectedEvent.MaxDistance; + delta.Normalize(); + float angle = Mathf.Atan2(delta.y, delta.x); + previewOrientation = angle + Mathf.PI * 0.5f; + } + Event.current.Use(); + } + + EditorUtils.PreviewUpdatePosition(previewDistance, previewOrientation); + } + + + float hoffset = isNarrow ? 15 : 300; + float voffset = isNarrow ? 50 : 10; + Texture meterOn = EditorGUIUtility.Load("FMOD/LevelMeter.png") as Texture; + Texture meterOff = EditorGUIUtility.Load("FMOD/LevelMeterOff.png") as Texture; + float[] metering = EditorUtils.GetMetering(); + int meterHeight = isNarrow ? 86 : 128; + int meterWidth = (int)((128 / (float)meterOff.height) * meterOff.width); + foreach (float rms in metering) + { + GUI.DrawTexture(new Rect(hoffset, voffset, meterWidth, meterHeight), meterOff); + + float db = 20.0f * Mathf.Log10(rms * 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 *= meterHeight / (float)meterOff.height; + + Rect levelPosRect = new Rect(hoffset, meterHeight - visible + voffset, meterWidth, visible); + Rect levelUVRect = new Rect(0, 0, 1.0f, visible / meterHeight); + GUI.DrawTextureWithTexCoords(levelPosRect, meterOn, levelUVRect); + hoffset += meterWidth + 5.0f; + } + + GUILayout.EndArea(); + + Rect paramRect = new Rect(0, previewCustomRect.yMax + 10, previewRect.width, previewRect.height - (previewCustomRect.yMax + 10)); + GUILayout.BeginArea(paramRect); + + paramScroll = GUILayout.BeginScrollView(paramScroll, false, false); + foreach (var paramRef in selectedEvent.Parameters) + { + if (!previewParamValues.ContainsKey(paramRef.Name)) + { + previewParamValues[paramRef.Name] = paramRef.Default; + } + previewParamValues[paramRef.Name] = EditorGUILayout.Slider(paramRef.Name, previewParamValues[paramRef.Name], paramRef.Min, paramRef.Max); + EditorUtils.PreviewUpdateParameter(paramRef.Name, previewParamValues[paramRef.Name]); + } + GUILayout.EndScrollView(); + + GUILayout.EndArea(); + GUILayout.EndArea(); + } + + private void PreviewBank(Rect previewRect, EditorBankRef selectedBank) + { + GUILayout.BeginArea(previewRect); + EditorGUIUtility.labelWidth = 75; + string[] SizeSuffix = { "B", "KB", "MB", "GB" }; + EditorStyles.label.fontStyle = FontStyle.Bold; + EditorGUILayout.LabelField("Platform Bank Sizes"); + EditorStyles.label.fontStyle = FontStyle.Normal; + EditorGUI.indentLevel++; + foreach (var sizeInfo in selectedBank.FileSizes) + { + int order = 0; + long len = sizeInfo.Value; + while (len >= 1024 && order + 1 < SizeSuffix.Length) + { + order++; + len /= 1024; + } + EditorGUILayout.LabelField(sizeInfo.Name, String.Format("{0} {1}", len, SizeSuffix[order])); + } + EditorGUI.indentLevel--; + EditorGUIUtility.labelWidth = 0; + GUILayout.EndArea(); + } + + private void PreviewSnapshot(Rect previewRect, EditorEventRef selectedEvent) + { + GUILayout.BeginArea(previewRect); + var style = new GUIStyle(EditorStyles.label); + EditorStyles.label.fontStyle = FontStyle.Bold; + EditorGUIUtility.labelWidth = 75; + + EditorGUILayout.LabelField("Full Path", selectedEvent.Path, style); + + EditorGUIUtility.labelWidth = 0; + EditorStyles.label.fontStyle = FontStyle.Normal; + GUILayout.EndArea(); + } + + private void RebuildDisplayFromCache() + { + Action nullEvents = null; + nullEvents = (x) => { x.Exists = false; x.Children.ForEach(nullEvents); }; + Predicate isStale = (x) => !x.Exists; + Action removeStaleChildren = null; + removeStaleChildren = (x) => { x.Children.RemoveAll(isStale); x.Children.ForEach(removeStaleChildren); }; + + if (showEvents) + { + var editorEvents = EventManager.Events; + + treeItems[0].Children.ForEach(nullEvents); + treeItems[1].Children.ForEach(nullEvents); + + foreach (var editorEvent in editorEvents) + { + string[] split = editorEvent.Path.Split('/'); + var level = split[0] == "snapshot:" ? treeItems[1].Children : treeItems[0].Children; + for (int i = 1; i < split.Length; i++) + { + TreeItem item = level.Find((x) => x.Name == split[i]); + if (item != null) + { + if (i == (split.Length - 1)) + { + item.EventRef = editorEvent; + } + else + { + level = item.Children; + } + } + else + { + item = new TreeItem(); + if (i == (split.Length - 1)) + { + item.EventRef = editorEvent; + } + item.Name = split[i]; + level.Add(item); + level.Sort((a, b) => a.EventRef != b.EventRef ? (a.EventRef != null ? 1 : -1) : a.Name.CompareTo(b.Name)); + level = item.Children; + } + item.Exists = true; + } + } + + removeStaleChildren(treeItems[0]); + removeStaleChildren(treeItems[1]); + } + + if (showBanks) + { + var editorBanks = EventManager.Banks; + var children = treeItems[2].Children; + + children.ForEach(nullEvents); + + foreach (var editorBank in editorBanks) + { + var name = Path.GetFileNameWithoutExtension(editorBank.Path); + TreeItem item = children.Find((x) => x.Name == name); + if (item == null) + { + item = new TreeItem(); + item.Name = name; + item.BankRef = editorBank; + children.Add(item); + } + item.Exists = true; + } + children.Sort((a, b) => a.Name.CompareTo(b.Name)); + + removeStaleChildren(treeItems[2]); + } + + if (expandedState != null && EventManager.IsLoaded) + { + int i = 0; + Action setExpanded = null; + setExpanded = (x) => { selectedItem = (i == selectedIndex) ? x : selectedItem; x.Expanded = expandedState[i++]; x.Children.ForEach(setExpanded); }; + try + { + treeItems.ForEach(setExpanded); + } + catch + { + } + + expandedState = null; + + if (selectedItem != null) + { + SetPreviewEvent(selectedItem.EventRef); + } + else + { + SetPreviewEvent(null); + } + } + } + + internal void SelectEvent(SerializedProperty property) + { + fromInspector = true; + showBanks = false; + outputProperty = property; + JumpToEvent(outputProperty.stringValue); + } + + internal void SelectBank(SerializedProperty property) + { + fromInspector = true; + showEvents = false; + outputProperty = property; + JumpToBank(outputProperty.stringValue); + } + + public void JumpToEvent(string eventPath) + { + if (!String.IsNullOrEmpty(eventPath)) + { + searchString = ""; + RebuildDisplayFromCache(); + TreeItem currentItem = null; + if (eventPath.StartsWith("event:/")) + { + currentItem = treeItems[0]; + eventPath = eventPath.Replace("event:/", ""); + } + else if (eventPath.StartsWith("snapshot:/")) + { + currentItem = treeItems[1]; + eventPath = eventPath.Replace("snapshot:/", ""); + } + else + { + return; + } + + currentItem.Expanded = true; + var pathElements = eventPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + foreach (var pathElement in pathElements) + { + var nextItem = currentItem.Children.Find(x => x.Name.Equals(pathElement, StringComparison.CurrentCultureIgnoreCase)); + if (nextItem == null) + { + return; + } + nextItem.Expanded = true; + if (nextItem.EventRef) + { + SetSelectedItem(nextItem); + + Rect searchRect, listRect, previewRect; + SplitWindow(out searchRect, out listRect, out previewRect); + if (selectedItem.Rect.y < treeScroll.y) + { + treeScroll.y = selectedItem.Rect.y; + } + else if (selectedItem.Rect.y + selectedItem.Rect.height > treeScroll.y + listRect.height) + { + treeScroll.y += (selectedItem.Rect.y + selectedItem.Rect.height) - listRect.height; + } + return; + } + currentItem = nextItem; + } + } + } + + void JumpToBank(string bankName) + { + if (!String.IsNullOrEmpty(bankName)) + { + RebuildDisplayFromCache(); + TreeItem currentItem = treeItems[2]; + + currentItem.Expanded = true; + var nextItem = currentItem.Children.Find(x => x.Name.Equals(bankName, StringComparison.CurrentCultureIgnoreCase)); + if (nextItem == null) + { + return; + } + if (nextItem.BankRef) + { + SetSelectedItem(nextItem); + return; + } + } + } + + public EventBrowser() + { + treeItems = new List(); + treeItems.Add(new TreeItem()); + treeItems.Add(new TreeItem()); + treeItems.Add(new TreeItem()); + treeItems[0].Name = "Events"; + treeItems[1].Name = "Snapshots"; + treeItems[2].Name = "Banks"; + } + + public static void RepaintEventBrowser() + { + if (instance) + { + instance.Repaint(); + } + } + + static EventBrowser instance; + + public void OnEnable() + { + SceneView.onSceneGUIDelegate += SceneUpdate; + EditorApplication.hierarchyWindowItemOnGUI += HierachachyUpdate; + instance = this; + } + + // This is an event handler on the hierachy view to handle dragging our objects from the browser + void HierachachyUpdate(int instance, Rect rect) + { + Event e = Event.current; + #if UNITY_2017_3_OR_NEWER + if (e.type == EventType.DragPerform && rect.Contains(e.mousePosition)) + #else + if (e.type == EventType.dragPerform && rect.Contains(e.mousePosition)) + #endif + { + if (DragAndDrop.objectReferences.Length > 0 && + DragAndDrop.objectReferences[0] != null && + (DragAndDrop.objectReferences[0].GetType() == typeof(EditorEventRef) || + DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef))) + { + GameObject target = (GameObject)EditorUtility.InstanceIDToObject(instance); + if (DragAndDrop.objectReferences[0].GetType() == typeof(EditorEventRef)) + { + var emitter = Undo.AddComponent(target); + emitter.Event = ((EditorEventRef)DragAndDrop.objectReferences[0]).Path; + var so = new SerializedObject(emitter); + so.ApplyModifiedProperties(); + } + else + { + var loader = Undo.AddComponent(target); + loader.Banks = new List(); + loader.Banks.Add(((EditorBankRef)DragAndDrop.objectReferences[0]).Name); + } + Selection.activeObject = target; + e.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) + { + Event e = Event.current; + #if UNITY_2017_3_OR_NEWER + if (e.type == EventType.DragPerform) + #else + if (e.type == EventType.dragPerform) + #endif + { + if (DragAndDrop.objectReferences.Length > 0 && + DragAndDrop.objectReferences[0] != null && + (DragAndDrop.objectReferences[0].GetType() == typeof(EditorEventRef) || + DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef))) + { + GameObject newObject = null; + if (DragAndDrop.objectReferences[0].GetType() == typeof(EditorEventRef)) + { + string path = ((EditorEventRef)DragAndDrop.objectReferences[0]).Path; + string name = path.Substring(path.LastIndexOf("/") + 1); + newObject = new GameObject(name + " Emitter"); + var emitter = newObject.AddComponent(); + emitter.Event = path; + var so = new SerializedObject(emitter); + so.ApplyModifiedProperties(); + Undo.RegisterCreatedObjectUndo(newObject, "Create FMOD Studio Emitter"); + } + else + { + newObject = new GameObject("FMOD Studio Loader"); + var loader = newObject.AddComponent(); + loader.Banks = new List(); + loader.Banks.Add(((EditorBankRef)DragAndDrop.objectReferences[0]).Name); + Undo.RegisterCreatedObjectUndo(newObject, "Create FMOD Studio Loader"); + } + Ray ray = HandleUtility.GUIPointToWorldRay(e.mousePosition); + var 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; + e.Use(); + } + } + if (e.type == EventType.DragUpdated) + { + if (DragAndDrop.objectReferences.Length > 0 && + DragAndDrop.objectReferences[0] != null && + (DragAndDrop.objectReferences[0].GetType() == typeof(EditorEventRef) || + DragAndDrop.objectReferences[0].GetType() == typeof(EditorBankRef))) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Move; + DragAndDrop.AcceptDrag(); + e.Use(); + } + } + } + } +} diff --git a/Assets/Plugins/Editor/FMOD/EventBrowser.cs.meta b/Assets/Plugins/Editor/FMOD/EventBrowser.cs.meta new file mode 100644 index 0000000..2579cf5 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventBrowser.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5332ad2baabb58844975479e906001c8 +timeCreated: 1432613753 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EventCache.cs b/Assets/Plugins/Editor/FMOD/EventCache.cs new file mode 100644 index 0000000..45a4642 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventCache.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + class EventCache : ScriptableObject + { + public static int CurrentCacheVersion = 2; + + [SerializeField] + public List EditorBanks; + [SerializeField] + public List EditorEvents; + [SerializeField] + public EditorBankRef MasterBankRef; + [SerializeField] + public EditorBankRef StringsBankRef; + [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(); + MasterBankRef = null; + stringsBankWriteTime = 0; + } + } +} diff --git a/Assets/Plugins/Editor/FMOD/EventCache.cs.meta b/Assets/Plugins/Editor/FMOD/EventCache.cs.meta new file mode 100644 index 0000000..240bc22 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventCache.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d32cf7c32a3ed8347bac48ef5ed56d82 +timeCreated: 1432775088 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EventManager.cs b/Assets/Plugins/Editor/FMOD/EventManager.cs new file mode 100644 index 0000000..eb9a07d --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventManager.cs @@ -0,0 +1,631 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using UnityEditor.Callbacks; +#if UNITY_2017_1_OR_NEWER +using UnityEditor.Build; +#endif + +namespace FMODUnity +{ + [InitializeOnLoad] + public class EventManager : MonoBehaviour + { + const string CacheAssetName = "FMODStudioCache"; + const string CacheAssetFullName = "Assets/" + 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 RefreshBanks() + { + OnCacheChange(); + } +#endif + + static void ClearCache() + { + countdownTimer = CountdownTimerReset; + eventCache.StringsBankWriteTime = DateTime.MinValue; + eventCache.EditorBanks.Clear(); + eventCache.EditorEvents.Clear(); + eventCache.StringsBankRef = null; + eventCache.MasterBankRef = null; + OnCacheChange(); + } + + 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; + + AssetDatabase.CreateAsset(eventCache, CacheAssetFullName); + } + } + + if (EditorUtils.GetBankDirectory() == null) + { + ClearCache(); + return; + } + + string defaultBankFolder = null; + + if (!Settings.Instance.HasPlatforms) + { + defaultBankFolder = EditorUtils.GetBankDirectory(); + } + else + { + FMODPlatform platform = RuntimeUtils.GetEditorFMODPlatform(); + if (platform == FMODPlatform.None) + { + platform = FMODPlatform.PlayInEditor; + } + + defaultBankFolder = Path.Combine(EditorUtils.GetBankDirectory(), Settings.Instance.GetBankPlatform(platform)); + } + + string[] bankPlatforms = EditorUtils.GetBankPlatforms(); + string[] bankFolders = new string[bankPlatforms.Length]; + for (int i = 0; i < bankPlatforms.Length; i++) + { + bankFolders[i] = Path.Combine(EditorUtils.GetBankDirectory(), bankPlatforms[i]); + } + + List stringBanks = new List(0); + try + { + var files = Directory.GetFiles(defaultBankFolder, "*." + StringBankExtension); + 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 from the tool 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))); + string stringBankPath = stringBanks[0]; + + // Use the string bank timestamp as a marker for the most recent build of any bank because it gets exported every time + if (File.GetLastWriteTime(stringBankPath) == eventCache.StringsBankWriteTime) + { + countdownTimer = CountdownTimerReset; + return; + } + + if (EditorUtils.IsFileOpenByStudio(stringBankPath)) + { + countdownTimer = CountdownTimerReset; + return; + } + + + FMOD.Studio.Bank stringBank; + EditorUtils.CheckResult(EditorUtils.System.loadBankFile(stringBankPath, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out stringBank)); + if (!stringBank.isValid()) + { + countdownTimer = CountdownTimerReset; + return; + } + + // Iterate every string in the strings bank and look for any that identify banks + int stringCount; + stringBank.getStringCount(out stringCount); + List bankFileNames = new List(); + for (int stringIndex = 0; stringIndex < stringCount; stringIndex++) + { + string currentString; + Guid currentGuid; + stringBank.getStringInfo(stringIndex, out currentGuid, out currentString); + const string BankPrefix = "bank:/"; + int BankPrefixLength = BankPrefix.Length; + if (currentString.StartsWith(BankPrefix)) + { + string bankFileName = currentString.Substring(BankPrefixLength) + "." + BankExtension; + if (!bankFileName.Contains(StringBankExtension)) // filter out the strings bank + { + bankFileNames.Add(bankFileName); + } + } + } + + // Unload the strings bank + stringBank.unload(); + + // Check if any of the files are still being written by studio + foreach (string bankFileName in bankFileNames) + { + string bankPath = Path.Combine(defaultBankFolder, bankFileName); + + if (!File.Exists(bankPath)) + { + // TODO: this is meant to catch the case where we're in the middle of a build and a bank is being built + // for the first time. But it also stops someone trying to import an incomplete set of banks without any error message. + countdownTimer = CountdownTimerReset; + return; + } + + EditorBankRef bankRef = eventCache.EditorBanks.Find((x) => bankPath == x.Path); + if (bankRef == null) + { + if (EditorUtils.IsFileOpenByStudio(bankPath)) + { + countdownTimer = CountdownTimerReset; + return; + } + continue; + } + + if (bankRef.LastModified != File.GetLastWriteTime(bankPath)) + { + if (EditorUtils.IsFileOpenByStudio(bankPath)) + { + countdownTimer = CountdownTimerReset; + return; + } + } + } + + // Count down the timer in case we catch studio in-between updating two files. + if (countdownTimer-- > 0) + { + return; + } + + // 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 bank + EditorUtils.CheckResult(EditorUtils.System.loadBankFile(stringBankPath, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out stringBank)); + if (!stringBank.isValid()) + { + ClearCache(); + return; + } + FileInfo stringBankFileInfo = new FileInfo(stringBankPath); + eventCache.StringsBankWriteTime = stringBankFileInfo.LastWriteTime; + string masterBankFileName = Path.GetFileName(stringBankPath).Replace(StringBankExtension, BankExtension); + + AssetDatabase.StartAssetEditing(); + + if (eventCache.StringsBankRef == null) + { + eventCache.StringsBankRef = ScriptableObject.CreateInstance(); + eventCache.StringsBankRef.FileSizes = new List(); + eventCache.EditorBanks.Add(eventCache.StringsBankRef); + AssetDatabase.AddObjectToAsset(eventCache.StringsBankRef, eventCache); + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(eventCache.StringsBankRef)); + } + eventCache.StringsBankRef.Path = stringBankPath; + eventCache.StringsBankRef.LastModified = eventCache.StringsBankWriteTime; + eventCache.StringsBankRef.FileSizes.Clear(); + if (Settings.Instance.HasPlatforms) + { + for (int i = 0; i < bankPlatforms.Length; i++) + { + eventCache.StringsBankRef.FileSizes.Add(new EditorBankRef.NameValuePair(bankPlatforms[i], stringBankFileInfo.Length)); + } + } + else + { + eventCache.StringsBankRef.FileSizes.Add(new EditorBankRef.NameValuePair("", stringBankFileInfo.Length)); + } + + eventCache.EditorBanks.ForEach((x) => x.Exists = false); + eventCache.StringsBankRef.Exists = true; + + string[] folderContents = Directory.GetFiles(defaultBankFolder); + + foreach (string bankFileName in bankFileNames) + { + // Get the true file path, can't trust the character case we got from the string bank + string bankPath = ArrayUtility.Find(folderContents, x => (string.Equals(bankFileName, Path.GetFileName(x), StringComparison.CurrentCultureIgnoreCase))); + + FileInfo bankFileInfo = new FileInfo(bankPath); + EditorBankRef bankRef = eventCache.EditorBanks.Find((x) => bankFileInfo.FullName == 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.Path = bankFileInfo.FullName; + bankRef.LastModified = DateTime.MinValue; + bankRef.FileSizes = new List(); + eventCache.EditorBanks.Add(bankRef); + } + + bankRef.Exists = true; + + // 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 = 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 = Path.Combine(EditorUtils.GetBankDirectory(), bankFileName); + var fileInfo = new FileInfo(platformBankPath); + if (fileInfo.Exists) + { + bankRef.FileSizes.Add(new EditorBankRef.NameValuePair("", fileInfo.Length)); + } + } + + if (bankFileInfo.Name == masterBankFileName) + { + eventCache.MasterBankRef = bankRef; + } + } + + + // Unload the strings bank + stringBank.unload(); + + // Remove any stale entries from bank and event lists + eventCache.EditorBanks.FindAll((x) => !x.Exists).ForEach(RemoveCacheBank); + eventCache.EditorBanks.RemoveAll((x) => !x.Exists); + eventCache.EditorEvents.RemoveAll((x) => x.Banks.Count == 0); + + OnCacheChange(); + AssetDatabase.StopAssetEditing(); + } + + 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) + { + // 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; + 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.Banks.Add(bankRef); + Guid guid; + eventDesc.getID(out guid); + eventRef.Guid = guid; + eventRef.Path = 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.getParameterCount(out paramCount); + eventRef.Parameters = new List(paramCount); + for (int paramIndex = 0; paramIndex < paramCount; paramIndex++) + { + FMOD.Studio.PARAMETER_DESCRIPTION param; + eventDesc.getParameterByIndex(paramIndex, out param); + if (param.type != FMOD.Studio.PARAMETER_TYPE.GAME_CONTROLLED) + { + continue; + } + EditorParamRef paramRef = ScriptableObject.CreateInstance(); + AssetDatabase.AddObjectToAsset(paramRef, eventCache); + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(paramRef)); + paramRef.Name = param.name; + paramRef.Min = param.minimum; + paramRef.Max = param.maximum; + paramRef.Default = param.defaultvalue; + eventRef.Parameters.Add(paramRef); + } + } + } + + 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; + #if !UNITY_2017_1_OR_NEWER + EditorUserBuildSettings.activeBuildTargetChanged += BuildTargetChanged; + #endif + EditorApplication.update += Update; + } + + public static void CopyToStreamingAssets() + { + FMODPlatform platform = RuntimeUtils.GetEditorFMODPlatform(); + if (platform == FMODPlatform.None) + { + UnityEngine.Debug.LogWarning(String.Format("FMOD Studio: copy banks for platform {0} : Unsupported platform", EditorUserBuildSettings.activeBuildTarget.ToString())); + return; + } + + string bankTargetFolder = + Settings.Instance.ImportType == ImportType.StreamingAssets + ? Application.dataPath + "/StreamingAssets" + : Application.dataPath + "/" + Settings.Instance.TargetAssetPath; + Directory.CreateDirectory(bankTargetFolder); + + string bankTargetExension = + Settings.Instance.ImportType == ImportType.StreamingAssets + ? "bank" + : "bytes"; + + string bankSourceFolder = EditorUtils.GetBankDirectory() + "/" + Settings.Instance.GetBankPlatform(platform); + + if (Path.GetFullPath(bankTargetFolder).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar).ToUpperInvariant() == + Path.GetFullPath(bankSourceFolder).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar).ToUpperInvariant()) + { + return; + } + + bool madeChanges = false; + + try + { + // Clean out any stale .bank files + string[] currentBankFiles = Directory.GetFiles(bankTargetFolder, "*." + bankTargetExension); + foreach (var bankFileName in currentBankFiles) + { + string bankName = Path.GetFileNameWithoutExtension(bankFileName); + if (!eventCache.EditorBanks.Exists((x) => bankName == x.Name)) + { + File.Delete(bankFileName); + 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 targetPath = bankTargetFolder + "/" + bankRef.Name + "." + bankTargetExension; + + FileInfo sourceInfo = new FileInfo(sourcePath); + FileInfo targetInfo = new FileInfo(targetPath); + + if (!targetInfo.Exists || + sourceInfo.Length != targetInfo.Length || + sourceInfo.LastWriteTime != targetInfo.LastWriteTime) + { + File.Copy(sourcePath, targetPath, true); + targetInfo = new FileInfo(targetPath); + targetInfo.IsReadOnly = false; + targetInfo.LastWriteTime = sourceInfo.LastWriteTime; + + madeChanges = true; + } + } + } + catch(Exception exception) + { + UnityEngine.Debug.LogError(String.Format("FMOD Studio: copy banks for platform {0} : copying banks from {1} to {2}", platform.ToString(), bankSourceFolder, bankTargetFolder)); + UnityEngine.Debug.LogException(exception); + return; + } + + if (madeChanges) + { + AssetDatabase.Refresh(); + UnityEngine.Debug.Log(String.Format("FMOD Studio: copy banks for platform {0} : copying banks from {1} to {2} succeeded", platform.ToString(), bankSourceFolder, bankTargetFolder)); + } + } + + private static void BuildTargetChanged() + { + UpdateCache(); + + // Copy over assets for the new platform + CopyToStreamingAssets(); + } + + static void OnCacheChange() + { + if (eventCache.MasterBankRef) + { + Settings.Instance.MasterBank = eventCache.MasterBankRef.Name; + } + else + { + Settings.Instance.MasterBank = null; + } + + Settings.Instance.Banks.Clear(); + foreach (var bankRef in eventCache.EditorBanks) + { + if (bankRef != eventCache.MasterBankRef && + bankRef != eventCache.StringsBankRef) + { + Settings.Instance.Banks.Add(bankRef.Name); + } + } + + CopyToStreamingAssets(); + + EventBrowser.RepaintEventBrowser(); + } + + static bool firstUpdate = true; + static float lastCheckTime; + static void Update() + { + if (firstUpdate) + { + UpdateCache(); + OnCacheChange(); + CopyToStreamingAssets(); + 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) + { + UpdateCache(); + lastCheckTime = Time.realtimeSinceStartup; + } + } + + public static List Events + { + get + { + UpdateCache(); + return eventCache.EditorEvents; + } + } + + public static List Banks + { + get + { + UpdateCache(); + return eventCache.EditorBanks; + } + } + + public static EditorBankRef MasterBank + { + get + { + UpdateCache(); + return eventCache.MasterBankRef; + } + } + + public static bool IsLoaded + { + get + { + return EditorUtils.GetBankDirectory() != null; + } + } + + public static bool IsValid + { + get + { + UpdateCache(); + return eventCache.StringsBankWriteTime != DateTime.MinValue; + } + } + + public static EditorEventRef EventFromPath(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); + } + + #if UNITY_2017_1_OR_NEWER + public class ActiveBuildTargetListener : IActiveBuildTargetChanged + { + public int callbackOrder{ get { return 0; } } + public void OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget newTarget) + { + BuildTargetChanged(); + } + } + #endif + + } +} diff --git a/Assets/Plugins/Editor/FMOD/EventManager.cs.meta b/Assets/Plugins/Editor/FMOD/EventManager.cs.meta new file mode 100644 index 0000000..6219271 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1fc38201a5edb994c874a4a61e96053b +timeCreated: 1432600216 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/EventRefDrawer.cs b/Assets/Plugins/Editor/FMOD/EventRefDrawer.cs new file mode 100644 index 0000000..b74ebd1 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventRefDrawer.cs @@ -0,0 +1,153 @@ +using System; +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; + + EditorGUI.BeginProperty(position, label, property); + SerializedProperty pathProperty = property; + + Event e = Event.current; + #if UNITY_2017_3_OR_NEWER + if (e.type == EventType.DragPerform && position.Contains(e.mousePosition)) + #else + if (e.type == EventType.dragPerform && position.Contains(e.mousePosition)) + #endif + { + 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 = EventBrowser.CreateInstance(); + + eventBrowser.SelectEvent(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.ShowEventBrowser(); + var eventBrowser = EditorWindow.GetWindow(); + eventBrowser.JumpToEvent(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); + + 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); + StringBuilder builder = new StringBuilder(); + eventRef.Banks.ForEach((x) => { builder.Append(Path.GetFileNameWithoutExtension(x.Path)); builder.Append(", "); }); + GUI.Label(valueRect, builder.ToString(0, builder.Length - 2)); + 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/Assets/Plugins/Editor/FMOD/EventRefDrawer.cs.meta b/Assets/Plugins/Editor/FMOD/EventRefDrawer.cs.meta new file mode 100644 index 0000000..f745acf --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/EventRefDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 29a86a77bf7568e499243d9b47b7e88e +timeCreated: 1432696197 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/FindAndReplace.cs b/Assets/Plugins/Editor/FMOD/FindAndReplace.cs new file mode 100644 index 0000000..009578b --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/FindAndReplace.cs @@ -0,0 +1,195 @@ +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(); + #if UNITY_5_0 || UNITY_5_1 + window.title = "FMOD Find and Replace"; + #else + window.titleContent = new GUIContent("FMOD Find and Replace"); + #endif + 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) + { + emitters.RemoveAll(x => PrefabUtility.GetPrefabType(x) != PrefabType.Prefab); + } + + if (!prefabScope) + { + emitters.RemoveAll(x => PrefabUtility.GetPrefabType(x) == PrefabType.Prefab); + } + } + + 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/Assets/Plugins/Editor/FMOD/FindAndReplace.cs.meta b/Assets/Plugins/Editor/FMOD/FindAndReplace.cs.meta new file mode 100644 index 0000000..05eaec8 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/FindAndReplace.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a3d0ed60438564241a4e62b152836893 +timeCreated: 1453876443 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/LogViewer.cs b/Assets/Plugins/Editor/FMOD/LogViewer.cs new file mode 100644 index 0000000..21cf20c --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/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/Assets/Plugins/Editor/FMOD/LogViewer.cs.meta b/Assets/Plugins/Editor/FMOD/LogViewer.cs.meta new file mode 100644 index 0000000..59dc5aa --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/LogViewer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 255133e2dd4fbd9449ba729ddbb2f77f +timeCreated: 1433383105 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/MigrationUtil.cs b/Assets/Plugins/Editor/FMOD/MigrationUtil.cs new file mode 100644 index 0000000..b4a46d7 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/MigrationUtil.cs @@ -0,0 +1 @@ +/* This file has been moved to Assets/Editor/FMODMigrationUtil.cs */ \ No newline at end of file diff --git a/Assets/Plugins/Editor/FMOD/MigrationUtil.cs.meta b/Assets/Plugins/Editor/FMOD/MigrationUtil.cs.meta new file mode 100644 index 0000000..5e1bd79 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/MigrationUtil.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8b17d46b813f0f2448ae5dd54488ac6c +timeCreated: 1435300892 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/ParamRefDrawer.cs b/Assets/Plugins/Editor/FMOD/ParamRefDrawer.cs new file mode 100644 index 0000000..3c4a479 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/ParamRefDrawer.cs @@ -0,0 +1 @@ +/* This file has been removed */ \ No newline at end of file diff --git a/Assets/Plugins/Editor/FMOD/ParamRefDrawer.cs.meta b/Assets/Plugins/Editor/FMOD/ParamRefDrawer.cs.meta new file mode 100644 index 0000000..9f73784 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/ParamRefDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ea88808aa26cd614db1c5c1dcbb14d4e +timeCreated: 1444197074 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/SettingsEditor.cs b/Assets/Plugins/Editor/FMOD/SettingsEditor.cs new file mode 100644 index 0000000..bdfb5e2 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/SettingsEditor.cs @@ -0,0 +1,667 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEditor; +using System.IO; +using System; + +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" }; + + int[] SpeakerModeValues = new int[] { + (int)FMOD.SPEAKERMODE.STEREO, + (int)FMOD.SPEAKERMODE._5POINT1, + (int)FMOD.SPEAKERMODE._7POINT1}; + + bool[] foldoutState = new bool[(int)FMODPlatform.Count]; + + bool hasBankSourceChanged = false; + + string PlatformLabel(FMODPlatform platform) + { + switch(platform) + { + case FMODPlatform.Linux: + return "Linux"; + case FMODPlatform.Desktop: + return "Desktop"; + case FMODPlatform.Console: + return "Console"; + case FMODPlatform.iOS: + return "iOS"; + case FMODPlatform.Mac: + return "OSX"; + case FMODPlatform.Mobile: + return "Mobile"; + case FMODPlatform.PS4: + return "PS4"; + case FMODPlatform.Windows: + return "Windows"; + case FMODPlatform.WindowsPhone: + return "Windows Phone 8.1"; + case FMODPlatform.UWP: + return "UWP"; + case FMODPlatform.XboxOne: + return "XBox One"; + case FMODPlatform.WiiU: + return "Wii U"; + case FMODPlatform.PSVita: + return "PS Vita"; + case FMODPlatform.Android: + return "Android"; + case FMODPlatform.AppleTV: + return "Apple TV"; + case FMODPlatform.MobileHigh: + return "High-End Mobile"; + case FMODPlatform.MobileLow: + return "Low-End Mobile"; + } + return "Unknown"; + } + + void DisplayEditorBool(string label, List settings, FMODPlatform platform) + { + int current = Settings.GetSetting(settings, platform, TriStateBool.Disabled) != TriStateBool.Disabled ? 0 : 1; + int next = EditorGUILayout.Popup(label, (int)current, ToggleEditor); + Settings.SetSetting(settings, platform, next == 0 ? TriStateBool.Enabled : TriStateBool.Disabled); + } + + void DisplayParentBool(string label, List settings, FMODPlatform platform) + { + TriStateBool current = Settings.GetSetting(settings, platform, TriStateBool.Disabled); + int next = EditorGUILayout.Popup(label, (int)current, ToggleParent); + Settings.SetSetting(settings, platform, (TriStateBool)next); + } + + void DisplayChildBool(string label, List settings, FMODPlatform platform) + { + bool overriden = Settings.HasSetting(settings, platform); + TriStateBool parent = Settings.GetSetting(settings, Settings.GetParent(platform), TriStateBool.Disabled); + TriStateBool current = Settings.GetSetting(settings, platform, TriStateBool.Disabled); + + 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) + { + if (overriden) + { + Settings.RemoveSetting(settings, platform); + } + } + else + { + Settings.SetSetting(settings, platform, (TriStateBool)(next-1)); + } + } + + void DisplayParentInt(string label, List settings, FMODPlatform platform, int min, int max) + { + int current = Settings.GetSetting(settings, platform, 0); + int next = EditorGUILayout.IntSlider(label, current, min, max); + Settings.SetSetting(settings, platform, next); + } + + void DisplayChildInt(string label, List settings, FMODPlatform platform, int min, int max) + { + bool overriden = Settings.HasSetting(settings, platform); + int current = Settings.GetSetting(settings, platform, 0); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel(label); + overriden = !GUILayout.Toggle(!overriden, "Inherit"); + EditorGUI.BeginDisabledGroup(!overriden); + int next = EditorGUILayout.IntSlider(current, min, max); + EditorGUI.EndDisabledGroup(); + EditorGUILayout.EndHorizontal(); + + if (overriden) + { + Settings.SetSetting(settings, platform, next); + } + else + { + Settings.RemoveSetting(settings, platform); + } + } + + void DisplayParentFreq(string label, List settings, FMODPlatform platform) + { + int current = Settings.GetSetting(settings, platform, 0); + int index = Array.IndexOf(FrequencyValues, current); + int next = EditorGUILayout.Popup(label, index, FrequencyDisplay); + Settings.SetSetting(settings, platform, FrequencyValues[next]); + } + + void DisplayChildFreq(string label, List settings, FMODPlatform platform) + { + bool overriden = Settings.HasSetting(settings, platform); + int current = Settings.GetSetting(settings, platform, 0); + int inherit = Settings.GetSetting(settings, Settings.GetParent(platform), 0); + int currentIndex = Array.IndexOf(FrequencyValues, current); + int inheritIndex = Array.IndexOf(FrequencyValues, inherit); + + string[] valuesChild = new string[FrequencyDisplay.Length + 1]; + Array.Copy(FrequencyDisplay, 0, valuesChild, 1, FrequencyDisplay.Length); + valuesChild[0] = String.Format("Inherit ({0})", FrequencyDisplay[inheritIndex]); + + int next = EditorGUILayout.Popup(label, overriden ? currentIndex + 1 : 0, valuesChild); + if (next == 0) + { + Settings.RemoveSetting(settings, platform); + } + else + { + Settings.SetSetting(settings, platform, FrequencyValues[next-1]); + } + } + + void DisplayParentSpeakerMode(string label, List settings, FMODPlatform platform) + { + int current = Settings.GetSetting(settings, platform, (int)FMOD.SPEAKERMODE.STEREO); + int index = Array.IndexOf(SpeakerModeValues, current); + int next = EditorGUILayout.Popup(label, index, SpeakerModeDisplay); + Settings.SetSetting(settings, platform, SpeakerModeValues[next]); + } + + void DisplayPIESpeakerMode(string label, List settings, FMODPlatform platform) + { + int buildTargetSetting = Settings.GetSetting(settings, RuntimeUtils.GetEditorFMODPlatform(), (int)FMOD.SPEAKERMODE.STEREO); + int buildTargetIndex = Array.IndexOf(SpeakerModeValues, buildTargetSetting); + string[] speakerModes = new string[SpeakerModeDisplay.Length + 1]; + Array.Copy(SpeakerModeDisplay, 0, speakerModes, 1, SpeakerModeDisplay.Length); + speakerModes[0] = String.Format("Current Unity Platform ({0})", SpeakerModeDisplay[buildTargetIndex]); + + bool useCurrentUnity = !Settings.HasSetting(settings, platform); + + int current = Settings.GetSetting(settings, platform, (int)FMOD.SPEAKERMODE.STEREO); + int index = Array.IndexOf(SpeakerModeValues, current) + 1; + if (useCurrentUnity || index < 0) index = 0; + int next = EditorGUILayout.Popup(label, index, speakerModes); + if (next != 0) + { + Settings.SetSetting(settings, platform, SpeakerModeValues[next - 1]); + } + else + { + Settings.RemoveSetting(settings, platform); + } + } + + void DisplayChildSpeakerMode(string label, List settings, FMODPlatform platform) + { + bool overriden = Settings.HasSetting(settings, platform); + int current = Settings.GetSetting(settings, platform, 0); + int inherit = Settings.GetSetting(settings, Settings.GetParent(platform), 0); + int currentIndex = Array.IndexOf(SpeakerModeValues, current); + int inheritIndex = Array.IndexOf(SpeakerModeValues, inherit); + + string[] valuesChild = new string[SpeakerModeDisplay.Length + 1]; + Array.Copy(SpeakerModeDisplay, 0, valuesChild, 1, SpeakerModeDisplay.Length); + valuesChild[0] = String.Format("Inherit ({0})", SpeakerModeDisplay[inheritIndex]); + + int next = EditorGUILayout.Popup(label, overriden ? currentIndex + 1 : 0, valuesChild); + if (next == 0) + { + Settings.RemoveSetting(settings, platform); + } + else + { + Settings.SetSetting(settings, platform, SpeakerModeValues[next - 1]); + } + } + + void DisplayParentBuildDirectory(string label, List settings, FMODPlatform platform) + { + string[] buildDirectories = EditorUtils.GetBankPlatforms(); + + String current = Settings.GetSetting(settings, platform, "Desktop"); + int index = Array.IndexOf(buildDirectories, current); + if (index < 0) index = 0; + + int next = EditorGUILayout.Popup(label, index, buildDirectories); + Settings.SetSetting(settings, platform, buildDirectories[next]); + } + + + void DisplayPIEBuildDirectory(string label, List settings, FMODPlatform platform) + { + String buildTargetSetting = Settings.GetSetting(settings, RuntimeUtils.GetEditorFMODPlatform(), "Desktop"); + string[] buildDirectories = new string[EditorUtils.GetBankPlatforms().Length + 1]; + Array.Copy(EditorUtils.GetBankPlatforms(), 0, buildDirectories, 1, EditorUtils.GetBankPlatforms().Length); + buildDirectories[0] = String.Format("Current Unity Platform ({0})", buildTargetSetting); + + bool useCurrentUnity = !Settings.HasSetting(settings, platform); + String current = Settings.GetSetting(settings, platform, "Desktop"); + int index = Array.IndexOf(buildDirectories, current); + if (useCurrentUnity || index < 0) index = 0; + + int next = EditorGUILayout.Popup(label, index, buildDirectories); + if (next != 0) + { + Settings.SetSetting(settings, platform, buildDirectories[next]); + } + else + { + Settings.RemoveSetting(settings, platform); + } + } + + void DisplayChildBuildDirectories(string label, List settings, FMODPlatform platform) + { + string[] buildDirectories = EditorUtils.GetBankPlatforms(); + + bool overriden = Settings.HasSetting(settings, platform); + string current = Settings.GetSetting(settings, platform, "Desktop"); + string inherit = Settings.GetSetting(settings, Settings.GetParent(platform), "Desktop"); + int index = Array.IndexOf(buildDirectories, current); + if (index < 0) index = 0; + + string[] valuesChild = new string[buildDirectories.Length + 1]; + Array.Copy(buildDirectories, 0, valuesChild, 1, buildDirectories.Length); + valuesChild[0] = String.Format("Inherit ({0})", inherit); + + int next = EditorGUILayout.Popup(label, overriden ? index + 1 : 0, valuesChild); + if (next == 0) + { + Settings.RemoveSetting(settings, platform); + Settings.RemoveSetting(((Settings)target).SpeakerModeSettings, platform); + } + else + { + Settings.SetSetting(settings, platform, buildDirectories[next - 1]); + } + } + + void DisplayPlatform(FMODPlatform platform, FMODPlatform[] children = null) + { + Settings settings = target as Settings; + + var label = new global::System.Text.StringBuilder(); + label.AppendFormat("{0}", (PlatformLabel(platform))); + if (children != null) + { + label.Append(" ("); + foreach (var child in children) + { + label.Append(PlatformLabel(child)); + label.Append(", "); + } + label.Remove(label.Length - 2, 2); + label.Append(")"); + } + + GUIStyle style = new GUIStyle(GUI.skin.FindStyle("Foldout")); + style.richText = true; + + foldoutState[(int)platform] = EditorGUILayout.Foldout(foldoutState[(int)platform], new GUIContent(label.ToString()), style); + if (foldoutState[(int)platform]) + { + EditorGUI.indentLevel++; + DisplayChildBool("Live Update", settings.LiveUpdateSettings, platform); + if (settings.IsLiveUpdateEnabled(platform)) + { + GUIStyle style2 = new GUIStyle(GUI.skin.label); + style2.richText = true; + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel(" "); + #if UNITY_5_0 || UNITY_5_1 + GUILayout.Label("Unity 5.0 or 5.1 detected: Live update will listen on port 9265", style2); + #else + GUILayout.Label("Live update will listen on port 9264", style2); + #endif + EditorGUILayout.EndHorizontal(); + } + DisplayChildBool("Debug Overlay", settings.OverlaySettings, platform); + DisplayChildFreq("Sample Rate", settings.SampleRateSettings, platform); + if (settings.HasPlatforms && AllowBankChange(platform)) + { + bool prevChanged = GUI.changed; + DisplayChildBuildDirectories("Bank Platform", settings.BankDirectorySettings, platform); + hasBankSourceChanged |= !prevChanged && GUI.changed; + + if (Settings.HasSetting(settings.BankDirectorySettings, platform)) + { + DisplayChildSpeakerMode("Speaker Mode", settings.SpeakerModeSettings, platform); + EditorGUILayout.HelpBox(String.Format("Match the speaker mode to the setting of the platform {0} inside FMOD Studio", settings.GetBankPlatform(platform)), MessageType.Info, false); + } + else + { + EditorGUI.BeginDisabledGroup(true); + DisplayChildSpeakerMode("Speaker Mode", settings.SpeakerModeSettings, platform); + EditorGUI.EndDisabledGroup(); + } + } + + DisplayChildInt("Virtual Channel Count", settings.VirtualChannelSettings, platform, 1, 2048); + DisplayChildInt("Real Channel Count", settings.RealChannelSettings, platform, 1, 256); + + if (children != null) + { + foreach (var child in children) + { + DisplayPlatform(child); + } + } + + EditorGUI.indentLevel--; + } + } + + private bool AllowBankChange(FMODPlatform platform) + { + // Can't do these settings on pseudo-platforms + if (platform == FMODPlatform.MobileLow || platform == FMODPlatform.MobileHigh) + { + return false; + } + + return true; + } + + public override void OnInspectorGUI() + { + Settings settings = target as Settings; + + EditorGUI.BeginChangeCheck(); + + hasBankSourceChanged = false; + bool hasBankTargetChanged = false; + + GUIStyle style = new GUIStyle(GUI.skin.label); + style.richText = true; + + GUI.skin.FindStyle("HelpBox").richText = true; + + int sourceType = settings.HasSourceProject ? 0 : (settings.HasPlatforms ? 2 : 1); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.BeginVertical(); + sourceType = GUILayout.Toggle(sourceType == 0, "Project", "Button") ? 0 : sourceType; + sourceType = GUILayout.Toggle(sourceType == 1, "Single Platform Build", "Button") ? 1 : sourceType; + sourceType = GUILayout.Toggle(sourceType == 2, "Multiple Platform Build", "Button") ? 2 : 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 it's own sub directory\n" + + "" + , MessageType.Info, true); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.Space(); + + + if (sourceType == 0) + { + EditorGUILayout.BeginHorizontal(); + string oldPath = settings.SourceProjectPathUnformatted; + EditorGUILayout.PrefixLabel("Studio Project Path", GUI.skin.textField, style); + + EditorGUI.BeginChangeCheck(); + settings.SourceProjectPathUnformatted = EditorGUILayout.TextField(GUIContent.none, settings.SourceProjectPathUnformatted); + if (EditorGUI.EndChangeCheck()) + { + settings.SourceProjectPath = settings.SourceProjectPathUnformatted; + } + + if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) + { + GUI.FocusControl(null); + string path = EditorUtility.OpenFilePanel("Locate Studio Project", oldPath, "fspro"); + if (!String.IsNullOrEmpty(path)) + { + path = MakePathRelativeToProject(path); + settings.SourceProjectPathUnformatted = path; + settings.SourceProjectPath = path; + this.Repaint(); + } + } + EditorGUILayout.EndHorizontal(); + + // Cache in settings for runtime access in play-in-editor mode + string bankPath = EditorUtils.GetBankDirectoryUnformatted(); + settings.SourceBankPathUnformatted = bankPath; + settings.SourceBankPath = bankPath; + settings.HasPlatforms = true; + settings.HasSourceProject = true; + + // First time project path is set or changes, copy to streaming assets + if (settings.SourceProjectPathUnformatted != oldPath) + { + hasBankSourceChanged = true; + } + } + + if (sourceType == 1 || sourceType == 2) + { + EditorGUILayout.BeginHorizontal(); + string oldPath = settings.SourceBankPathUnformatted; + EditorGUILayout.PrefixLabel("Build Path", GUI.skin.textField, style); + + EditorGUI.BeginChangeCheck(); + settings.SourceBankPathUnformatted = EditorGUILayout.TextField(GUIContent.none, settings.SourceBankPathUnformatted); + if (EditorGUI.EndChangeCheck()) + { + settings.SourceBankPath = settings.SourceBankPathUnformatted; + } + + if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) + { + GUI.FocusControl(null); + var path = EditorUtility.OpenFolderPanel("Locate Build Folder", oldPath, null); + if (!String.IsNullOrEmpty(path)) + { + path = MakePathRelativeToProject(path); + settings.SourceBankPathUnformatted = path; + settings.SourceBankPath = path; + } + } + EditorGUILayout.EndHorizontal(); + + settings.HasPlatforms = (sourceType == 2); + settings.HasSourceProject = false; + + // First time project path is set or changes, copy to streaming assets + if (settings.SourceBankPathUnformatted != oldPath) + { + hasBankSourceChanged = true; + } + } + + if ((settings.HasSourceProject && !settings.SourceProjectPathUnformatted.Equals(settings.SourceProjectPath)) || + (sourceType >= 1 && !settings.SourceBankPathUnformatted.Equals(settings.SourceBankPath))) + { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.TextField("Platform specific path", sourceType >= 1 ? settings.SourceBankPath : settings.SourceProjectPath); + EditorGUI.EndDisabledGroup(); + } + + bool validBanks; + string failReason; + EditorUtils.ValidateSource(out validBanks, out failReason); + if (!validBanks) + { + 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) + { + hasBankTargetChanged = true; + settings.ImportType = importType; + } + + EditorGUI.BeginDisabledGroup(settings.ImportType == ImportType.StreamingAssets); + string targetAssetPath = EditorGUILayout.TextField("FMOD Asset Folder", settings.TargetAssetPath); + if (targetAssetPath != settings.TargetAssetPath) + { + settings.TargetAssetPath = targetAssetPath; + hasBankTargetChanged = true; + } + EditorGUI.EndDisabledGroup(); + EditorGUI.BeginDisabledGroup(settings.ImportType == ImportType.AssetBundle); + + // ----- Logging ----------------- + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Logging", style); + EditorGUI.indentLevel++; + settings.LoggingLevel = (FMOD.DEBUG_FLAGS)EditorGUILayout.EnumPopup("Logging Level", settings.LoggingLevel); + EditorGUI.indentLevel--; + EditorGUI.EndDisabledGroup(); + + // ----- Loading ----------------- + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Loading", style); + EditorGUI.indentLevel++; + settings.AutomaticEventLoading = EditorGUILayout.Toggle("Load All Event Data at Initialization", settings.AutomaticEventLoading); + EditorGUI.BeginDisabledGroup(!settings.AutomaticEventLoading); + settings.AutomaticSampleLoading = EditorGUILayout.Toggle("Load All Sample Data at Initialization", settings.AutomaticSampleLoading); + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel--; + EditorGUI.EndDisabledGroup(); + + // ----- PIE ---------------------------------------------- + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Play In Editor Settings", style); + EditorGUI.indentLevel++; + DisplayEditorBool("Live Update", settings.LiveUpdateSettings, FMODPlatform.PlayInEditor); + if (settings.IsLiveUpdateEnabled(FMODPlatform.PlayInEditor)) + { + #if UNITY_5_0 || UNITY_5_1 + EditorGUILayout.HelpBox("Unity 5.0 or 5.1 detected: Live update will listen on port 9265", MessageType.Warning, false); + #else + EditorGUILayout.HelpBox("Live update will listen on port 9264", MessageType.Info, false); + #endif + } + DisplayEditorBool("Debug Overlay", settings.OverlaySettings, FMODPlatform.PlayInEditor); + DisplayChildFreq("Sample Rate", settings.SampleRateSettings, FMODPlatform.PlayInEditor); + if (settings.HasPlatforms) + { + DisplayPIEBuildDirectory("Bank Platform", settings.BankDirectorySettings, FMODPlatform.PlayInEditor); + } + + DisplayPIESpeakerMode("Speaker Mode", settings.SpeakerModeSettings, FMODPlatform.PlayInEditor); + if (settings.HasPlatforms) + { + EditorGUILayout.HelpBox(String.Format("Match the speaker mode to the setting of the platform {0} inside FMOD Studio", settings.GetBankPlatform(FMODPlatform.PlayInEditor)), MessageType.Info, false); + } + else + { + EditorGUILayout.HelpBox("Match the speaker mode to the setting inside FMOD Studio", MessageType.Info, false); + } + + EditorGUI.indentLevel--; + + // ----- Default ---------------------------------------------- + EditorGUILayout.Separator(); + EditorGUILayout.LabelField("Default Settings", style); + EditorGUI.indentLevel++; + DisplayParentBool("Live Update", settings.LiveUpdateSettings, FMODPlatform.Default); + if (settings.IsLiveUpdateEnabled(FMODPlatform.Default)) + { + #if UNITY_5_0 || UNITY_5_1 + EditorGUILayout.HelpBox("Unity 5.0 or 5.1 detected: Live update will listen on port 9265", MessageType.Warning, false); + #else + EditorGUILayout.HelpBox("Live update will listen on port 9264", MessageType.Info, false); + #endif + } + DisplayParentBool("Debug Overlay", settings.OverlaySettings, FMODPlatform.Default); + DisplayParentFreq("Sample Rate", settings.SampleRateSettings, FMODPlatform.Default); + if (settings.HasPlatforms) + { + bool prevChanged = GUI.changed; + DisplayParentBuildDirectory("Bank Platform", settings.BankDirectorySettings, FMODPlatform.Default); + hasBankSourceChanged |= !prevChanged && GUI.changed; + } + + DisplayParentSpeakerMode("Speaker Mode", settings.SpeakerModeSettings, FMODPlatform.Default); + if (settings.HasPlatforms) + { + EditorGUILayout.HelpBox(String.Format("Match the speaker mode to the setting of the platform {0} inside FMOD Studio", settings.GetBankPlatform(FMODPlatform.Default)), MessageType.Info, false); + } + else + { + EditorGUILayout.HelpBox("Match the speaker mode to the setting inside FMOD Studio", MessageType.Info, false); + } + DisplayParentInt("Virtual Channel Count", settings.VirtualChannelSettings, FMODPlatform.Default, 1, 2048); + DisplayParentInt("Real Channel Count", settings.RealChannelSettings, FMODPlatform.Default, 1, 256); + EditorGUI.indentLevel--; + + + // ----- Plugins ---------------------------------------------- + EditorGUILayout.Separator(); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Plugins", GUI.skin.button, style); + if (GUILayout.Button("Add Plugin", GUILayout.ExpandWidth(false))) + { + settings.Plugins.Add(""); + } + EditorGUILayout.EndHorizontal(); + + EditorGUI.indentLevel++; + for (int count = 0; count < settings.Plugins.Count; count++) + { + EditorGUILayout.BeginHorizontal(); + settings.Plugins[count] = EditorGUILayout.TextField("Plugin " + (count + 1).ToString() + ":", settings.Plugins[count]); + + if (GUILayout.Button("Delete Plugin", GUILayout.ExpandWidth(false))) + { + settings.Plugins.RemoveAt(count); + } + EditorGUILayout.EndHorizontal(); + } + EditorGUI.indentLevel--; + + + // ----- Windows ---------------------------------------------- + DisplayPlatform(FMODPlatform.Desktop, null); + DisplayPlatform(FMODPlatform.Mobile, new FMODPlatform[] { FMODPlatform.MobileHigh, FMODPlatform.MobileLow, FMODPlatform.PSVita, FMODPlatform.AppleTV }); + DisplayPlatform(FMODPlatform.Console, new FMODPlatform[] { FMODPlatform.XboxOne, FMODPlatform.PS4, FMODPlatform.WiiU }); + + if (EditorGUI.EndChangeCheck()) + { + EditorUtility.SetDirty(settings); + } + + if (hasBankSourceChanged) + { + EventManager.UpdateCache(); + } + if (hasBankTargetChanged) + { + EventManager.CopyToStreamingAssets(); + } + } + + private string MakePathRelativeToProject(string path) + { + string fullPath = Path.GetFullPath(path); + string fullProjectPath = Path.GetFullPath(Environment.CurrentDirectory + Path.DirectorySeparatorChar); + return fullPath.Replace(fullProjectPath, ""); + } + } +} diff --git a/Assets/Plugins/Editor/FMOD/SettingsEditor.cs.meta b/Assets/Plugins/Editor/FMOD/SettingsEditor.cs.meta new file mode 100644 index 0000000..2031dd0 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/SettingsEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 353a9c870c318f74fa5fdcd475129bae +timeCreated: 1432530253 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/StudioBankLoaderEditor.cs b/Assets/Plugins/Editor/FMOD/StudioBankLoaderEditor.cs new file mode 100644 index 0000000..b247203 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioBankLoaderEditor.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.PropertyField(banks); + + 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 = ""; + + var browser = EventBrowser.CreateInstance(); + + #if UNITY_5_0 || UNITY_5_1 + browser.title = "Select FMOD Bank"; + #else + browser.titleContent = new GUIContent("Select FMOD Bank"); + #endif + + browser.SelectBank(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 UNITY_2017_3_OR_NEWER + if (e.type == EventType.DragPerform) + #else + if (e.type == EventType.dragPerform) + #endif + { + 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(); + } + } +} diff --git a/Assets/Plugins/Editor/FMOD/StudioBankLoaderEditor.cs.meta b/Assets/Plugins/Editor/FMOD/StudioBankLoaderEditor.cs.meta new file mode 100644 index 0000000..8065b49 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioBankLoaderEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f7f61e03a350e1e428dba6c562f3d64a +timeCreated: 1434691856 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/StudioEventEmitterEditor.cs b/Assets/Plugins/Editor/FMOD/StudioEventEmitterEditor.cs new file mode 100644 index 0000000..59d0b67 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioEventEmitterEditor.cs @@ -0,0 +1,333 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomEditor(typeof(StudioEventEmitter))] + [CanEditMultipleObjects] + public class StudioEventEmitterEditor : Editor + { + 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 param = serializedObject.FindProperty("Params"); + 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 >= 3 && begin.enumValueIndex <= 6) || + (end.enumValueIndex >= 3 && end.enumValueIndex <= 6)) + { + 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(); + } + + param.isExpanded = EditorGUILayout.Foldout(param.isExpanded, "Initial Parameter Values"); + if (ev.hasMultipleDifferentValues) + { + if (param.isExpanded) + { + GUILayout.Box("Cannot change parameters when different events are selected", GUILayout.ExpandWidth(true)); + } + } + else + { + var eventRef = EventManager.EventFromPath(ev.stringValue); + if (param.isExpanded && eventRef != null) + { + foreach (var paramRef in eventRef.Parameters) + { + bool set; + float value; + bool matchingSet, matchingValue; + CheckParameter(paramRef.Name, out set, out matchingSet, out value, out matchingValue); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel(paramRef.Name); + EditorGUI.showMixedValue = !matchingSet; + EditorGUI.BeginChangeCheck(); + bool newSet = EditorGUILayout.Toggle(set, GUILayout.Width(20)); + EditorGUI.showMixedValue = false; + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObjects(serializedObject.isEditingMultipleObjects ? serializedObject.targetObjects : new UnityEngine.Object[] { serializedObject.targetObject }, "Inspector"); + if (newSet) + { + AddParameterValue(paramRef.Name, paramRef.Default); + } + else + { + DeleteParameterValue(paramRef.Name); + } + set = newSet; + } + + EditorGUI.BeginDisabledGroup(!newSet); + if (set) + { + EditorGUI.showMixedValue = !matchingValue; + EditorGUI.BeginChangeCheck(); + value = EditorGUILayout.Slider(value, paramRef.Min, paramRef.Max); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObjects(serializedObject.isEditingMultipleObjects ? serializedObject.targetObjects : new UnityEngine.Object[] { serializedObject.targetObject }, "Inspector"); + SetParameterValue(paramRef.Name, value); + } + EditorGUI.showMixedValue = false; + } + else + { + EditorGUI.showMixedValue = !matchingValue; + EditorGUILayout.Slider(paramRef.Default, paramRef.Min, paramRef.Max); + EditorGUI.showMixedValue = false; + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.EndHorizontal(); + } + + } + } + + 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(); + } + + void CheckParameter(string name, out bool set, out bool matchingSet, out float value, out bool matchingValue) + { + value = 0; + set = false; + if (serializedObject.isEditingMultipleObjects) + { + bool first = true; + matchingValue = true; + matchingSet = true; + foreach (var obj in serializedObject.targetObjects) + { + var emitter = obj as StudioEventEmitter; + var param = emitter.Params != null ? emitter.Params.FirstOrDefault((x) => x.Name == name) : null; + if (first) + { + set = param != null; + value = set ? param.Value : 0; + first = false; + } + else + { + if (set) + { + if (param == null) + { + matchingSet = false; + matchingValue = false; + return; + } + else + { + if (param.Value != value) + { + matchingValue = false; + } + } + } + else + { + if (param != null) + { + matchingSet = false; + } + } + } + } + } + else + { + matchingSet = matchingValue = true; + + var emitter = serializedObject.targetObject as StudioEventEmitter; + var param = emitter.Params != null ? emitter.Params.FirstOrDefault((x) => x.Name == name) : null; + if (param != null) + { + set = true; + value = param.Value; + } + } + } + + void SetParameterValue(string name, float value) + { + if (serializedObject.isEditingMultipleObjects) + { + foreach (var obj in serializedObject.targetObjects) + { + SetParameterValue(obj, name, value); + } + } + else + { + SetParameterValue(serializedObject.targetObject, name, value); + } + } + + void SetParameterValue(UnityEngine.Object obj, string name, float value) + { + var emitter = obj as StudioEventEmitter; + var param = emitter.Params != null ? emitter.Params.FirstOrDefault((x) => x.Name == name) : null; + if (param != null) + { + param.Value = value; + } + } + + + void AddParameterValue(string name, float value) + { + if (serializedObject.isEditingMultipleObjects) + { + foreach (var obj in serializedObject.targetObjects) + { + AddParameterValue(obj, name, value); + } + } + else + { + AddParameterValue(serializedObject.targetObject, name, value); + } + } + + void AddParameterValue(UnityEngine.Object obj, string name, float value) + { + var emitter = obj as StudioEventEmitter; + var param = emitter.Params != null ? emitter.Params.FirstOrDefault((x) => x.Name == name) : null; + if (param == null) + { + int end = emitter.Params.Length; + Array.Resize(ref emitter.Params, end + 1); + emitter.Params[end] = new ParamRef(); + emitter.Params[end].Name = name; + emitter.Params[end].Value = value; + } + } + + void DeleteParameterValue(string name) + { + if (serializedObject.isEditingMultipleObjects) + { + foreach (var obj in serializedObject.targetObjects) + { + DeleteParameterValue(obj, name); + } + } + else + { + DeleteParameterValue(serializedObject.targetObject, name); + } + } + + void DeleteParameterValue(UnityEngine.Object obj, string name) + { + var emitter = obj as StudioEventEmitter; + int found = -1; + for (int i = 0; i < emitter.Params.Length; i++) + { + if (emitter.Params[i].Name == name) + { + found = i; + } + } + if (found >= 0) + { + int end = emitter.Params.Length - 1; + emitter.Params[found] = emitter.Params[end]; + Array.Resize(ref emitter.Params, end); + } + } + } + +} diff --git a/Assets/Plugins/Editor/FMOD/StudioEventEmitterEditor.cs.meta b/Assets/Plugins/Editor/FMOD/StudioEventEmitterEditor.cs.meta new file mode 100644 index 0000000..3f2cfcd --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioEventEmitterEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2b044fd4ebf2c42468e1f41d5e2b879c +timeCreated: 1434696182 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/StudioEventEmitterGizmoDrawer.cs b/Assets/Plugins/Editor/FMOD/StudioEventEmitterGizmoDrawer.cs new file mode 100644 index 0000000..927dbaa --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioEventEmitterGizmoDrawer.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEditor; + +namespace FMODUnity +{ + + public class StudioEventEmitterGizoDrawer + { + #if UNITY_5_0 || UNITY_5_1 + [DrawGizmo(GizmoType.Selected | GizmoType.Active | GizmoType.NotSelected)] + #else + [DrawGizmo(GizmoType.Selected | GizmoType.Active | GizmoType.NotInSelectionHierarchy | GizmoType.Pickable)] + #endif + static void DrawGizmo(StudioEventEmitter studioEmitter, GizmoType gizmoType) + { + Gizmos.DrawIcon(studioEmitter.transform.position, "FMODEmitter.tiff", true); + } + } +} diff --git a/Assets/Plugins/Editor/FMOD/StudioEventEmitterGizmoDrawer.cs.meta b/Assets/Plugins/Editor/FMOD/StudioEventEmitterGizmoDrawer.cs.meta new file mode 100644 index 0000000..6f5c18f --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioEventEmitterGizmoDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f09ba26caab55e048a2e596ff75b3eab +timeCreated: 1433142677 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/StudioListenerEditor.cs b/Assets/Plugins/Editor/FMOD/StudioListenerEditor.cs new file mode 100644 index 0000000..25b8dff --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioListenerEditor.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace FMODUnity +{ + [CustomEditor(typeof(StudioListener))] + [CanEditMultipleObjects] + public class StudioListenerEditor : Editor + { + public override void OnInspectorGUI() + { + var index = serializedObject.FindProperty("ListenerNumber"); + EditorGUILayout.IntSlider(index, 0, FMOD.CONSTANTS.MAX_LISTENERS, "Listener Index"); + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Editor/FMOD/StudioListenerEditor.cs.meta b/Assets/Plugins/Editor/FMOD/StudioListenerEditor.cs.meta new file mode 100644 index 0000000..b618254 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioListenerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 847f8505c25f5cf42adba68a26f2cda6 +timeCreated: 1445576758 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/StudioParameterTriggerEditor.cs b/Assets/Plugins/Editor/FMOD/StudioParameterTriggerEditor.cs new file mode 100644 index 0000000..af02a37 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioParameterTriggerEditor.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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 >= 3 && trigger.enumValueIndex <= 6) + { + 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); + 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(); + } + } +} diff --git a/Assets/Plugins/Editor/FMOD/StudioParameterTriggerEditor.cs.meta b/Assets/Plugins/Editor/FMOD/StudioParameterTriggerEditor.cs.meta new file mode 100644 index 0000000..7c8f4dd --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/StudioParameterTriggerEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dc94d213814ef1a42b0ca8ee00dd4728 +timeCreated: 1451968823 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/Timeline.meta b/Assets/Plugins/Editor/FMOD/Timeline.meta new file mode 100644 index 0000000..72d0079 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/Timeline.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ed5d9c135ba2d27459df510657538b4b +folderAsset: yes +timeCreated: 1540351106 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Editor/FMOD/Timeline/FMODEventPlayableEditor.cs b/Assets/Plugins/Editor/FMOD/Timeline/FMODEventPlayableEditor.cs new file mode 100644 index 0000000..20b2030 --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/Timeline/FMODEventPlayableEditor.cs @@ -0,0 +1,148 @@ +#if UNITY_2017_1_OR_NEWER + +using UnityEditor; +using UnityEngine; +using FMODUnity; +using System; +using System.Linq; + +[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 //UNITY_2017_1_OR_NEWER \ No newline at end of file diff --git a/Assets/Plugins/Editor/FMOD/Timeline/FMODEventPlayableEditor.cs.meta b/Assets/Plugins/Editor/FMOD/Timeline/FMODEventPlayableEditor.cs.meta new file mode 100644 index 0000000..3fb25ff --- /dev/null +++ b/Assets/Plugins/Editor/FMOD/Timeline/FMODEventPlayableEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fa325be8441506c4bb1462c8333ccce9 +timeCreated: 1523230773 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD.meta b/Assets/Plugins/FMOD.meta new file mode 100644 index 0000000..9783e18 --- /dev/null +++ b/Assets/Plugins/FMOD.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 06ae579381df01a4a87bb149dec89954 +folderAsset: yes +timeCreated: 1429061260 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/BankRefAttribute.cs b/Assets/Plugins/FMOD/BankRefAttribute.cs new file mode 100644 index 0000000..de44917 --- /dev/null +++ b/Assets/Plugins/FMOD/BankRefAttribute.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace FMODUnity +{ + public class BankRefAttribute : PropertyAttribute + { + } +} diff --git a/Assets/Plugins/FMOD/BankRefAttribute.cs.meta b/Assets/Plugins/FMOD/BankRefAttribute.cs.meta new file mode 100644 index 0000000..ac53cf2 --- /dev/null +++ b/Assets/Plugins/FMOD/BankRefAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a8ab5f38e7776644297d8b3687c39b49 +timeCreated: 1445488716 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/EventRefAttribute.cs b/Assets/Plugins/FMOD/EventRefAttribute.cs new file mode 100644 index 0000000..c35055d --- /dev/null +++ b/Assets/Plugins/FMOD/EventRefAttribute.cs @@ -0,0 +1,9 @@ +using System; +using UnityEngine; + +namespace FMODUnity +{ + public class EventRefAttribute : PropertyAttribute + { + } +} diff --git a/Assets/Plugins/FMOD/EventRefAttribute.cs.meta b/Assets/Plugins/FMOD/EventRefAttribute.cs.meta new file mode 100644 index 0000000..7b29bdd --- /dev/null +++ b/Assets/Plugins/FMOD/EventRefAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1b29a1189268c3b47aa2ec4b96a9e7ef +timeCreated: 1445311748 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/FMODAsset.cs b/Assets/Plugins/FMOD/FMODAsset.cs new file mode 100644 index 0000000..8e08908 --- /dev/null +++ b/Assets/Plugins/FMOD/FMODAsset.cs @@ -0,0 +1,8 @@ +/* This class is now legacy. Keep the definition here for the migration script to work */ + +using UnityEngine; +public class FMODAsset : ScriptableObject +{ + public string path; + public string id; +}; diff --git a/Assets/Plugins/FMOD/FMODAsset.cs.meta b/Assets/Plugins/FMOD/FMODAsset.cs.meta new file mode 100644 index 0000000..232c0fb --- /dev/null +++ b/Assets/Plugins/FMOD/FMODAsset.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e06c992c0c162f94a880e74e722cb286 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/FMOD_Listener.cs b/Assets/Plugins/FMOD/FMOD_Listener.cs new file mode 100644 index 0000000..e47a67a --- /dev/null +++ b/Assets/Plugins/FMOD/FMOD_Listener.cs @@ -0,0 +1,9 @@ +/* This class is now legacy. Keep the definition here for the migration script to work */ +using UnityEngine; + +[AddComponentMenu("")] +public class FMOD_Listener : MonoBehaviour +{ + [Header("This component is obsolete. Use FMODUnity.StudioListener instead")] + public string[] pluginPaths = {}; +} diff --git a/Assets/Plugins/FMOD/FMOD_Listener.cs.meta b/Assets/Plugins/FMOD/FMOD_Listener.cs.meta new file mode 100644 index 0000000..e98f2e9 --- /dev/null +++ b/Assets/Plugins/FMOD/FMOD_Listener.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7f8336b22d6d3af4da2712827e9ad333 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/FMOD_StudioEventEmitter.cs b/Assets/Plugins/FMOD/FMOD_StudioEventEmitter.cs new file mode 100644 index 0000000..235cc9c --- /dev/null +++ b/Assets/Plugins/FMOD/FMOD_StudioEventEmitter.cs @@ -0,0 +1,12 @@ +/* This class is now legacy. Keep the definition here for the migration script to work */ +using UnityEngine; + +[AddComponentMenu("")] +public class FMOD_StudioEventEmitter : MonoBehaviour +{ + [Header("This component is obsolete. Use FMODUnity.StudioEventEmitter instead")] + public FMODAsset asset; + public string path = ""; + public bool startEventOnAwake = true; + +} diff --git a/Assets/Plugins/FMOD/FMOD_StudioEventEmitter.cs.meta b/Assets/Plugins/FMOD/FMOD_StudioEventEmitter.cs.meta new file mode 100644 index 0000000..3774b0a --- /dev/null +++ b/Assets/Plugins/FMOD/FMOD_StudioEventEmitter.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 528ed627ab7a10b4f9c927aa803de36e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/LICENSE.TXT b/Assets/Plugins/FMOD/LICENSE.TXT new file mode 100644 index 0000000..1645de3 --- /dev/null +++ b/Assets/Plugins/FMOD/LICENSE.TXT @@ -0,0 +1,121 @@ + FMOD END USER LICENCE AGREEMENT + =============================== + +This FMOD End User Licence Agreement (EULA) is a legal agreement between you and +Firelight Technologies Pty Ltd (ACN 099 182 448) (us or we) and governs your use +of FMOD Studio and FMOD Engine software (FMOD). + +1. GRANT OF LICENCE + This EULA grants you the right to use FMOD, in a software application (Product), for + personal (hobbyist), educational (students and teachers) or Non-Commercial use only, + subject to the following: + i) Non-Commercial use does not involve any form of monetisation, sponsorship + or promotion. + ii) FMOD is distributed as integrated into a Product only; + iii) FMOD is not distributed as part of any Commercial Product or service; + iv) FMOD is not distributed as part of a game engine or tool set; + v) FMOD is not used in any Commercial enterprise or for any Commercial + production or subcontracting, except for the purposes of Evaluation or + Development of a Commercial Product; + vi) Product includes attribution in accordance with Clause 3; + +2. OTHER USE + For all Commercial use, and any Non Commercial use not permitted by this license, a + separate license is required. Refer to www.fmod.com/licensing for information. + +3. CREDITS + All Products require an in game credit line which must include the words "FMOD" or + "FMOD Studio" (if applicable) and "Firelight Technologies Pty Ltd". Refer to + www.fmod.com/licensing for examples + +4. INTELLECTUAL PROPERTY RIGHTS + a) We are and remain at all times the owner of FMOD (including all intellectual + property rights in or to the Software). For the avoidance of doubt, nothing in + this EULA may be deemed to grant or assign to you any proprietary or ownership + interest or intellectual property rights in or to FMOD other than the rights + licensed pursuant to clause 1. + b) You acknowledge and agree that you have no right, title or interest in and to the + intellectual property rights in FMOD. + +5. SECURITY AND RISK + You are responsible for protecting FMOD and any related materials at all times from + unauthorised access, use or damage. + +6. WARRANTY AND LIMITATION OF LIABILITY + a) FMOD is provided by us "as is" and, to the maximum extent permitted by law, + any express or implied warranties of any kind, including (but not limited to) all + implied warranties of merchantability and fitness for a particular purpose are + disclaimed. + b) In no event shall we (and our employees, contractors and subcontractors), + developers and contributors be liable for any direct, special, indirect or + consequential damages whatsoever resulting from loss of use of data or profits, + whether in an action of contract, negligence or other tortious conduct, arising + out of or in connection with the use or performance FMOD. + +7. OGG VORBIS CODEC + a) FMOD uses the Ogg Vorbis codec. + b) (c) 2002, Xiph.Org Foundation + c) Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + i) Redistributions of source code must retain the above copyright notice, the + list of conditions and the following disclaimer. + ii) Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other material provided with the distribution. + iii) Neither the name of the Xiph.org Foundation nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + d) THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +8. GOOGLE VR (GVR) + FMOD includes Google VR, licensed under the Apache Licence, Version 2.0 (the + Licence); you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software distributed + under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. See the License for the + specific language governing permissions and limitations under the License. + +9. ANDROID PLATFORM CODE + Copyright (C) 2010 The Android Open Source Project All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +10. AUDIOGAMING AUDIOMOTORS DEMO CONTENT + AudioGaming AudioMotors Demo Engine.agp is provided for evaluation purposes + only and is not to be redistributed. To create your own engine content, you + will need AudioMotors V2 Pro. A trial version be found at + http://store.audiogaming.net/content/audiomotors-v2-pro-trial. For access to + the full version, contact sales@fmod.com. diff --git a/Assets/Plugins/FMOD/LICENSE.TXT.meta b/Assets/Plugins/FMOD/LICENSE.TXT.meta new file mode 100644 index 0000000..1c70e50 --- /dev/null +++ b/Assets/Plugins/FMOD/LICENSE.TXT.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33bcf4e4e9e5e6445830127a535ad667 +timeCreated: 1540351115 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/OneshotList.cs b/Assets/Plugins/FMOD/OneshotList.cs new file mode 100644 index 0000000..8d1d9d4 --- /dev/null +++ b/Assets/Plugins/FMOD/OneshotList.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FMODUnity +{ + public class OneshotList + { + List instances = new List(); + + public void Add(FMOD.Studio.EventInstance instance) + { + instances.Add(instance); + } + + public void Update(FMOD.ATTRIBUTES_3D attributes) + { + // Cull finished instances + FMOD.Studio.PLAYBACK_STATE state; + var finishedInstances = instances.FindAll((x) => { x.getPlaybackState(out state); return state == FMOD.Studio.PLAYBACK_STATE.STOPPED; }); + foreach (var instance in finishedInstances) + { + instance.release(); + } + instances.RemoveAll((x) => !x.isValid()); + + // Update 3D attributes + foreach(var instance in instances) + { + instance.set3DAttributes(attributes); + } + } + + public void SetParameterValue(string name, float value) + { + foreach (var instance in instances) + { + instance.setParameterValue(name, value); + } + } + + public void StopAll(FMOD.Studio.STOP_MODE stopMode) + { + foreach (var instance in instances) + { + instance.stop(stopMode); + instance.release(); + } + instances.Clear(); + } + } +} diff --git a/Assets/Plugins/FMOD/OneshotList.cs.meta b/Assets/Plugins/FMOD/OneshotList.cs.meta new file mode 100644 index 0000000..c047b51 --- /dev/null +++ b/Assets/Plugins/FMOD/OneshotList.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 913a31310db178d4c834141ad50879e4 +timeCreated: 1433312818 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/ParamRef.cs b/Assets/Plugins/FMOD/ParamRef.cs new file mode 100644 index 0000000..ac29b4a --- /dev/null +++ b/Assets/Plugins/FMOD/ParamRef.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FMODUnity +{ + [Serializable] + public class ParamRef + { + public string Name; + public float Value; + } +} diff --git a/Assets/Plugins/FMOD/ParamRef.cs.meta b/Assets/Plugins/FMOD/ParamRef.cs.meta new file mode 100644 index 0000000..38a23c6 --- /dev/null +++ b/Assets/Plugins/FMOD/ParamRef.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 00e1a9817a5d9844796d7c313b1ab197 +timeCreated: 1444192631 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/RuntimeManager.cs b/Assets/Plugins/FMOD/RuntimeManager.cs new file mode 100644 index 0000000..ca489e6 --- /dev/null +++ b/Assets/Plugins/FMOD/RuntimeManager.cs @@ -0,0 +1,1088 @@ +using System; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using System.Collections; +using System.Text; +using UnityEngine; +using UnityEngine.Networking; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ + [AddComponentMenu("")] + public class RuntimeManager : MonoBehaviour + { + static SystemNotInitializedException initException = null; + static RuntimeManager instance; + static bool isQuitting = false; + + [SerializeField] + FMODPlatform fmodPlatform; + + FMOD.RESULT DEBUG_CALLBACK(FMOD.DEBUG_FLAGS flags, FMOD.StringWrapper file, int line, FMOD.StringWrapper func, FMOD.StringWrapper message) + { + 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 (isQuitting) + { + throw new Exception("[FMOD] Attempted access by script to RuntimeManager while application is quitting"); + } + + 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 + + var existing = FindObjectOfType(typeof(RuntimeManager)) as RuntimeManager; + if (existing != null) + { + // Older versions of the integration may have leaked the runtime manager game object into the scene, + // which was then serialized. It won't have valid pointers so don't use it. + if (existing.cachedPointers[0] != 0) + { + instance = existing; + instance.studioSystem.handle = ((IntPtr)instance.cachedPointers[0]); + instance.lowlevelSystem.handle = ((IntPtr)instance.cachedPointers[1]); + return instance; + } + } + + 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.HideInHierarchy; + + 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 LowlevelSystem + { + get { return Instance.lowlevelSystem; } + } + + FMOD.Studio.System studioSystem; + FMOD.System lowlevelSystem; + FMOD.DSP mixerHead; + + [SerializeField] + private long[] cachedPointers = new long[2]; + + struct LoadedBank + { + public FMOD.Studio.Bank Bank; + public int RefCount; + } + + Dictionary loadedBanks = new Dictionary(); + Dictionary loadedPlugins = 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 + #if UNITY_2017_2_OR_NEWER + EditorApplication.playModeStateChanged += HandlePlayModeStateChange; + #elif UNITY_2017_1_OR_NEWER + EditorApplication.playmodeStateChanged += HandleOnPlayModeChanged; + #endif // UNITY_2017_2_OR_NEWER + #endif // UNITY_EDITOR + + FMOD.RESULT result = FMOD.RESULT.OK; + FMOD.RESULT initResult = FMOD.RESULT.OK; + Settings fmodSettings = Settings.Instance; + fmodPlatform = RuntimeUtils.GetCurrentPlatform(); + + int sampleRate = fmodSettings.GetSampleRate(fmodPlatform); + int realChannels = Math.Min(fmodSettings.GetRealChannels(fmodPlatform), 256); // Prior to 1.08.10 we didn't clamp this properly in the settings screen + int virtualChannels = fmodSettings.GetVirtualChannels(fmodPlatform); + FMOD.SPEAKERMODE speakerMode = (FMOD.SPEAKERMODE)fmodSettings.GetSpeakerMode(fmodPlatform); + FMOD.OUTPUTTYPE outputType = FMOD.OUTPUTTYPE.AUTODETECT; + + FMOD.ADVANCEDSETTINGS advancedSettings = new FMOD.ADVANCEDSETTINGS(); + advancedSettings.randomSeed = (uint)DateTime.Now.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 + + SetThreadAffinity(); + + #if UNITY_EDITOR || ((UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX) && DEVELOPMENT_BUILD) + result = FMOD.Debug.Initialize(fmodSettings.LoggingLevel, FMOD.DEBUG_MODE.CALLBACK, DEBUG_CALLBACK, null); + CheckInitResult(result, "FMOD.Debug.Initialize"); + #endif + + FMOD.Studio.INITFLAGS studioInitFlags = FMOD.Studio.INITFLAGS.NORMAL | FMOD.Studio.INITFLAGS.DEFERRED_CALLBACKS; + if (fmodSettings.IsLiveUpdateEnabled(fmodPlatform)) + { + studioInitFlags |= FMOD.Studio.INITFLAGS.LIVEUPDATE; + + #if UNITY_5_0 || UNITY_5_1 // These versions of Unity shipped with FMOD4 profiling enabled consuming our port number. + UnityEngine.Debug.LogWarning("[FMOD] Live Update port in-use by Unity, switching to port 9265"); + advancedSettings.profilePort = 9265; + #endif + } + +retry: + result = FMOD.Studio.System.create(out studioSystem); + CheckInitResult(result, "FMOD.Studio.System.create"); + + result = studioSystem.getLowLevelSystem(out lowlevelSystem); + CheckInitResult(result, "FMOD.Studio.System.getLowLevelSystem"); + + result = lowlevelSystem.setOutput(outputType); + CheckInitResult(result, "FMOD.System.setOutput"); + + result = lowlevelSystem.setSoftwareChannels(realChannels); + CheckInitResult(result, "FMOD.System.setSoftwareChannels"); + + result = lowlevelSystem.setSoftwareFormat(sampleRate, speakerMode, 0); + CheckInitResult(result, "FMOD.System.setSoftwareFormat"); + + result = lowlevelSystem.setAdvancedSettings(ref advancedSettings); + CheckInitResult(result, "FMOD.System.setAdvancedSettings"); + + 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; + } + } + + LoadPlugins(fmodSettings); + LoadBanks(fmodSettings); + + return initResult; + } + + 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 + + bool listenerWarningIssued = false; + void Update() + { + if (studioSystem.isValid()) + { + studioSystem.update(); + + bool foundListener = false; + bool hasAllListeners = false; + int numListeners = 0; + for (int i = FMOD.CONSTANTS.MAX_LISTENERS - 1; i >= 0; i--) + { + if (!foundListener && HasListener[i]) + { + numListeners = i + 1; + foundListener = true; + hasAllListeners = true; + } + + if (!HasListener[i] && foundListener) + { + hasAllListeners = false; + } + } + + if (foundListener) + { + studioSystem.setNumListeners(numListeners); + } + + if (!hasAllListeners && !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 < 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); + } + #endif + } + } + + public static void AttachInstanceToGameObject(FMOD.Studio.EventInstance instance, Transform transform, Rigidbody rigidBody) + { + var attachedInstance = new AttachedInstance(); + attachedInstance.transform = transform; + attachedInstance.instance = instance; + attachedInstance.rigidBody = rigidBody; + Instance.attachedInstances.Add(attachedInstance); + } + + public static void AttachInstanceToGameObject(FMOD.Studio.EventInstance instance, Transform transform, Rigidbody2D rigidBody2D) + { + var attachedInstance = new AttachedInstance(); + attachedInstance.transform = transform; + attachedInstance.instance = instance; + attachedInstance.rigidBody2D = rigidBody2D; + attachedInstance.rigidBody = null; + Instance.attachedInstances.Add(attachedInstance); + } + + 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; + } + } + } + + Rect windowRect = new Rect(10, 10, 300, 100); + void OnGUI() + { + if (studioSystem.isValid() && Settings.Instance.IsOverlayEnabled(fmodPlatform)) + { + windowRect = GUI.Window(0, windowRect, DrawDebugOverlay, "FMOD Studio Debug"); + } + } + + 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; + lowlevelSystem.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; + lowlevelSystem.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 OnDisable() + { + // If we're being torn down for a script reload - cache the native pointers in something unity can serialize + cachedPointers[0] = (long)studioSystem.handle; + cachedPointers[1] = (long)lowlevelSystem.handle; + } + + void OnDestroy() + { + if (studioSystem.isValid()) + { + studioSystem.release(); + studioSystem.clearHandle(); + } + initException = null; + instance = null; + isQuitting = true; + } + +#if UNITY_EDITOR + public static void Destroy() + { + if (instance) + { + if (instance.studioSystem.isValid()) + { + instance.studioSystem.release(); + instance.studioSystem.clearHandle(); + } + DestroyImmediate(instance.gameObject); + } + + initException = null; + instance = null; + } + + #if UNITY_2017_2_OR_NEWER + void HandlePlayModeStateChange(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingEditMode) + { + Destroy(); + } + else if (state == PlayModeStateChange.EnteredEditMode) + { + isQuitting = false; + } + } + #elif UNITY_2017_1_OR_NEWER + void HandleOnPlayModeChanged() + { + if (EditorApplication.isPlayingOrWillChangePlaymode && + !EditorApplication.isPlaying) + { + Destroy(); + } + else if (!EditorApplication.isPlaying) + { + isQuitting = false; + } + } + #endif // UNITY_2017_2_OR_NEWER +#endif + +#if UNITY_IOS + /* iOS alarm interruptions do not trigger OnApplicationPause + * Sending the app to the background does trigger OnApplicationFocus + * We don't want to use this on Android as other things (like the keyboard) + * can steal focus. + * https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationFocus.html */ + + void OnApplicationFocus(bool focus) + { + if (studioSystem.isValid()) + { + // Strings bank is always loaded + if (loadedBanks.Count > 1) + PauseAllEvents(focus); + + if (focus) + { + lowlevelSystem.mixerResume(); + } + else + { + lowlevelSystem.mixerSuspend(); + } + } + } +#else + void OnApplicationPause(bool pauseStatus) + { + if (studioSystem.isValid()) + { + // Strings bank is always loaded + if (loadedBanks.Count > 1) + PauseAllEvents(pauseStatus); + + if (pauseStatus) + { + lowlevelSystem.mixerSuspend(); + } + else + { + lowlevelSystem.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_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 + + 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 bankPath = RuntimeUtils.GetBankPath(bankName); + FMOD.RESULT loadResult; + #if UNITY_ANDROID && !UNITY_EDITOR + if (!bankPath.StartsWith("file:///android_asset")) + { + 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(); + loadResult = Instance.studioSystem.loadBankMemory(www.bytes, FMOD.Studio.LOAD_BANK_FLAGS.NORMAL, out loadedBank.Bank); + Instance.loadedBankRegister(loadedBank, bankPath, bankName, loadSamples, loadResult); + } + } + } + else + #elif UNITY_WEBGL + if (bankPath.Contains("://")) + { + Instance.StartCoroutine(Instance.loadFromWeb(bankPath, bankName, loadSamples)); + } + else + #endif + { + LoadedBank loadedBank = new LoadedBank(); + 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); + } + } + } + + private void LoadBanks(Settings fmodSettings) + { + if (fmodSettings.ImportType == ImportType.StreamingAssets) + { + // Always load strings bank + try + { + LoadBank(fmodSettings.MasterBank + ".strings", fmodSettings.AutomaticSampleLoading); + + if (fmodSettings.AutomaticEventLoading) + { + LoadBank(fmodSettings.MasterBank, fmodSettings.AutomaticSampleLoading); + + foreach (var bank in fmodSettings.Banks) + { + LoadBank(bank, fmodSettings.AutomaticSampleLoading); + } + + WaitForAllLoads(); + } + } + 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 bool[] HasListener = new bool[FMOD.CONSTANTS.MAX_LISTENERS]; + + public static void SetListenerLocation(GameObject gameObject, Rigidbody rigidBody = null) + { + Instance.studioSystem.setListenerAttributes(0, RuntimeUtils.To3DAttributes(gameObject, rigidBody)); + } + + public static void SetListenerLocation(GameObject gameObject, Rigidbody2D rigidBody2D) + { + Instance.studioSystem.setListenerAttributes(0, RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); + } + + public static void SetListenerLocation(Transform transform) + { + Instance.studioSystem.setListenerAttributes(0, transform.To3DAttributes()); + } + + public static void SetListenerLocation(int listenerIndex, GameObject gameObject, Rigidbody rigidBody = null) + { + Instance.studioSystem.setListenerAttributes(listenerIndex, RuntimeUtils.To3DAttributes(gameObject, rigidBody)); + } + + public static void SetListenerLocation(int listenerIndex, GameObject gameObject, Rigidbody2D rigidBody2D) + { + Instance.studioSystem.setListenerAttributes(listenerIndex, RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); + } + + public static void SetListenerLocation(int listenerIndex, Transform transform) + { + Instance.studioSystem.setListenerAttributes(listenerIndex, transform.To3DAttributes()); + } + + 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) + { + GetBus("bus:/").setPaused(paused); + } + + public static void MuteAllEvents(bool muted) + { + GetBus("bus:/").setMute(muted); + } + + public static bool IsInitialized + { + get + { + return instance != null && instance.studioSystem.isValid(); + } + } + +#if UNITY_EDITOR + /* Only relavant to protect the Play-In-Editor to Editor transition. */ + public static bool IsQuitting() + { + return isQuitting; + } +#endif + + public static bool HasBanksLoaded + { + get + { + return Instance.loadedBanks.Count > 1; + } + } + + public static bool HasBankLoaded(string loadedBank) + { + return (instance.loadedBanks.ContainsKey(loadedBank)); + } + + private void LoadPlugins(Settings fmodSettings) + { + #if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR + FmodUnityNativePluginInit(lowlevelSystem.handle); + #else + + FMOD.RESULT result; + foreach (var pluginName in fmodSettings.Plugins) + { + if (string.IsNullOrEmpty(pluginName)) + continue; + string pluginPath = RuntimeUtils.GetPluginPath(pluginName); + uint handle; + result = lowlevelSystem.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 = RuntimeUtils.GetPluginPath(pluginName + "64"); + result = lowlevelSystem.loadPlugin(pluginPath64, out handle); + } + #endif + CheckInitResult(result, String.Format("Loading plugin '{0}' from '{1}'", pluginName, pluginPath)); + loadedPlugins.Add(pluginName, handle); + } + #endif + } + + private void SetThreadAffinity() + { + #if UNITY_PS4 && !UNITY_EDITOR + FMOD.PS4.THREADAFFINITY affinity = new FMOD.PS4.THREADAFFINITY + { + mixer = FMOD.PS4.THREAD.CORE0, + studioUpdate = FMOD.PS4.THREAD.CORE0, + studioLoadBank = FMOD.PS4.THREAD.CORE0, + studioLoadSample = FMOD.PS4.THREAD.CORE0 + }; + FMOD.RESULT result = FMOD.PS4.setThreadAffinity(ref affinity); + CheckInitResult(result, "FMOD.PS4.setThreadAffinity"); + + #elif UNITY_XBOXONE && !UNITY_EDITOR + FMOD.XboxOne.THREADAFFINITY affinity = new FMOD.XboxOne.THREADAFFINITY + { + mixer = FMOD.XboxOne.THREAD.CORE0, + studioUpdate = FMOD.XboxOne.THREAD.CORE0, + studioLoadBank = FMOD.XboxOne.THREAD.CORE0, + studioLoadSample = FMOD.XboxOne.THREAD.CORE0 + }; + FMOD.RESULT result = FMOD.XboxOne.setThreadAffinity(ref affinity); + CheckInitResult(result, "FMOD.XboxOne.setThreadAffinity"); + + #elif UNITY_SWITCH && !UNITY_EDITOR + FMOD.Switch.THREADAFFINITY affinity = new FMOD.Switch.THREADAFFINITY + { + mixer = FMOD.Switch.THREAD.CORE0, + studioUpdate = FMOD.Switch.THREAD.CORE0, + studioLoadBank = FMOD.Switch.THREAD.CORE0, + studioLoadSample = FMOD.Switch.THREAD.CORE0 + }; + FMOD.RESULT result = FMOD.Switch.setThreadAffinity(ref affinity); + CheckInitResult(result, "FMOD.Switch.setThreadAffinity"); + #endif + } + + #if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR + [DllImport("__Internal")] + private static extern FMOD.RESULT FmodUnityNativePluginInit(IntPtr system); + #endif + } +} diff --git a/Assets/Plugins/FMOD/RuntimeManager.cs.meta b/Assets/Plugins/FMOD/RuntimeManager.cs.meta new file mode 100644 index 0000000..4e923d8 --- /dev/null +++ b/Assets/Plugins/FMOD/RuntimeManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5e5fb8ce07f0ce84b9d1852869527ea5 +timeCreated: 1444628977 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 100 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/RuntimeUtils.cs b/Assets/Plugins/FMOD/RuntimeUtils.cs new file mode 100644 index 0000000..ecbf5f2 --- /dev/null +++ b/Assets/Plugins/FMOD/RuntimeUtils.cs @@ -0,0 +1,467 @@ +using System; +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 + { + None, + ObjectStart, + ObjectDestroy, + TriggerEnter, + TriggerExit, + TriggerEnter2D, + TriggerExit2D, + CollisionEnter, + CollisionExit, + CollisionEnter2D, + CollisionExit2D, + ObjectEnable, + ObjectDisable + } + + public enum LoaderGameEvent + { + None, + ObjectStart, + ObjectDestroy, + TriggerEnter, + TriggerExit, + TriggerEnter2D, + TriggerExit2D, + } + + public static class RuntimeUtils + { + 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; + } + + // Internal Helper Functions + internal static FMODPlatform GetCurrentPlatform() + { + #if UNITY_EDITOR + return FMODPlatform.PlayInEditor; + #elif UNITY_STANDALONE_WIN + return FMODPlatform.Windows; + #elif UNITY_STANDALONE_OSX + return FMODPlatform.Mac; + #elif UNITY_STANDALONE_LINUX + return FMODPlatform.Linux; + #elif UNITY_TVOS + return FMODPlatform.AppleTV; + #elif UNITY_IOS + FMODPlatform result; + 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: + result = FMODPlatform.MobileLow; + break; + default: + result = FMODPlatform.MobileHigh; + break; + } + + UnityEngine.Debug.Log(String.Format("FMOD Studio: Device {0} classed as {1}", SystemInfo.deviceModel, result.ToString())); + return result; + #elif UNITY_ANDROID + FMODPlatform result; + if (SystemInfo.processorCount <= 2) + { + result = FMODPlatform.MobileLow; + } + else if (SystemInfo.processorCount >= 8) + { + result = FMODPlatform.MobileHigh; + } + else + { + // check the clock rate on quad core systems + string freqinfo = "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"; + try + { + using (global::System.IO.TextReader reader = new global::System.IO.StreamReader(freqinfo)) + { + string line = reader.ReadLine(); + int khz = Int32.Parse(line) / 1000; + if (khz >= 1600) + { + result = FMODPlatform.MobileHigh; + } + else + { + result = FMODPlatform.MobileLow; + } + } + } + catch + { + result = FMODPlatform.MobileLow; + } + } + + UnityEngine.Debug.Log(String.Format("[FMOD] Device {0} classed as {1}", SystemInfo.deviceModel, result.ToString())); + return result; + #elif UNITY_WINRT_8_1 + FMODPlatform result; + if (SystemInfo.processorCount <= 2) + { + result = FMODPlatform.MobileLow; + } + else + { + result = FMODPlatform.MobileHigh; + } + + UnityEngine.Debug.Log(String.Format("[FMOD] Device {0} classed as {1}", SystemInfo.deviceModel, result.ToString())); + return result; + + #elif UNITY_PS4 + return FMODPlatform.PS4; + #elif UNITY_XBOXONE + return FMODPlatform.XboxOne; + #elif UNITY_PSP2 + return FMODPlatform.PSVita; + #elif (!UNITY_5_0 && !UNITY_5_1) && UNITY_WIIU + return FMODPlatform.WiiU; + #elif UNITY_WSA_10_0 + return FMODPlatform.UWP; + #elif UNITY_SWITCH + return FMODPlatform.Switch; + #elif UNITY_WEBGL + return FMODPlatform.WebGL; + #endif + } + + const string BankExtension = ".bank"; + internal static string GetBankPath(string bankName) + { + #if UNITY_EDITOR + // For play in editor use original asset location because streaming asset folder will contain platform specific banks + string bankFolder = Settings.Instance.SourceBankPath; + if (Settings.Instance.HasPlatforms) + { + bankFolder = global::System.IO.Path.Combine(bankFolder, Settings.Instance.GetBankPlatform(FMODPlatform.PlayInEditor)); + } + #elif UNITY_ANDROID + string bankFolder = null; + if (System.IO.Path.GetExtension(Application.dataPath) == ".apk") + { + bankFolder = "file:///android_asset"; + } + else + { + bankFolder = String.Format("jar:file://{0}!/assets", Application.dataPath); + } + #elif UNITY_WINRT_8_1 || UNITY_WSA_10_0 + string bankFolder = "ms-appx:///Data/StreamingAssets"; + #else + string bankFolder = Application.streamingAssetsPath; + #endif + + // Special case for Switch, remove / at start if needed. + #if UNITY_SWITCH + if (bankFolder[0] == '/') + bankFolder = bankFolder.Substring(1); + #endif + + if (System.IO.Path.GetExtension(bankName) != BankExtension) + { + return String.Format("{0}/{1}.bank", bankFolder, bankName); + } + else + { + return String.Format("{0}/{1}", bankFolder, bankName); + } + } + + internal static string GetPluginPath(string pluginName) + { + #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN || UNITY_XBOXONE || UNITY_WINRT_8_1 || UNITY_WSA_10_0 + string pluginFileName = pluginName + ".dll"; + #elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX + string pluginFileName = pluginName + ".bundle"; + #elif UNITY_PS4 + string pluginFileName = pluginName + ".prx"; + #elif UNITY_ANDROID || UNITY_STANDALONE_LINUX + string pluginFileName = "lib" + pluginName + ".so"; + #elif UNITY_WEBGL + string pluginFileName = pluginName + ".bc"; + #endif + + #if UNITY_EDITOR_WIN && UNITY_EDITOR_64 + string pluginFolder = Application.dataPath + "/Plugins/X86_64/"; + #elif UNITY_EDITOR_WIN + string pluginFolder = Application.dataPath + "/Plugins/X86/"; + #elif UNITY_STANDALONE_WIN || UNITY_PS4 || UNITY_XBOXONE || UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX || UNITY_WEBGL + string pluginFolder = Application.dataPath + "/Plugins/"; + #elif UNITY_STANDALONE_LINUX + string pluginFolder = Application.dataPath + ((IntPtr.Size == 8) ? "/Plugins/x86_64/" : "/Plugins/x86/"); + #elif UNITY_WSA + string pluginFolder = ""; + #elif UNITY_ANDROID + var dirInfo = new global::System.IO.DirectoryInfo(Application.persistentDataPath); + string packageName = dirInfo.Parent.Name; + string pluginFolder = "/data/data/" + packageName + "/lib/"; + #else + string pluginFileName = ""; + string pluginFolder = ""; + #endif + + return pluginFolder + pluginFileName; + } + + 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); + } + + #if UNITY_EDITOR + public static FMODPlatform GetEditorFMODPlatform() + { + switch (EditorUserBuildSettings.activeBuildTarget) + { + case BuildTarget.Android: + return FMODPlatform.Android; + case BuildTarget.iOS: + return FMODPlatform.iOS; + case BuildTarget.PS4: + return FMODPlatform.PS4; + case BuildTarget.PSP2: + return FMODPlatform.PSVita; + case BuildTarget.StandaloneLinux: + case BuildTarget.StandaloneLinux64: + case BuildTarget.StandaloneLinuxUniversal: + return FMODPlatform.Linux; + #if UNITY_2017_3_OR_NEWER + case BuildTarget.StandaloneOSX: + #else + case BuildTarget.StandaloneOSXIntel: + case BuildTarget.StandaloneOSXIntel64: + case BuildTarget.StandaloneOSXUniversal: + #endif + return FMODPlatform.Mac; + case BuildTarget.StandaloneWindows: + case BuildTarget.StandaloneWindows64: + return FMODPlatform.Windows; + case BuildTarget.XboxOne: + return FMODPlatform.XboxOne; + #if (UNITY_5_2 || UNITY_5_3_OR_NEWER) && !UNITY_2018_1_OR_NEWER + case BuildTarget.WiiU: + return FMODPlatform.WiiU; + #endif + case BuildTarget.WSAPlayer: + #if UNITY_2017_1_OR_NEWER + return FMODPlatform.UWP; + #elif UNITY_5_2 || UNITY_5_3_OR_NEWER + if (EditorUserBuildSettings.wsaSDK == WSASDK.UWP) + { + return FMODPlatform.UWP; + } + return FMODPlatform.None; + #else + if (EditorUserBuildSettings.wsaSDK == WSASDK.PhoneSDK81) + { + return FMODPlatform.WindowsPhone; + } + return FMODPlatform.None; + #endif + #if UNITY_5_3_OR_NEWER + case BuildTarget.tvOS: + return FMODPlatform.AppleTV; + #endif + #if UNITY_SWITCH + case BuildTarget.Switch: + return FMODPlatform.Switch; + #endif + #if UNITY_WEBGL + case BuildTarget.WebGL: + return FMODPlatform.WebGL; + #endif + default: + return FMODPlatform.None; + } + } + #endif + } +} diff --git a/Assets/Plugins/FMOD/RuntimeUtils.cs.meta b/Assets/Plugins/FMOD/RuntimeUtils.cs.meta new file mode 100644 index 0000000..e182bcc --- /dev/null +++ b/Assets/Plugins/FMOD/RuntimeUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6e349601408e423499e7b9f75216091d +timeCreated: 1433225261 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/Settings.cs b/Assets/Plugins/FMOD/Settings.cs new file mode 100644 index 0000000..47f4b35 --- /dev/null +++ b/Assets/Plugins/FMOD/Settings.cs @@ -0,0 +1,420 @@ +using UnityEngine; +using System.Collections.Generic; +using System; +using System.IO; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FMODUnity +{ + + [Serializable] + public enum FMODPlatform + { + None, + PlayInEditor, + Default, + Desktop, + Mobile, + MobileHigh, + MobileLow, + Console, + Windows, + Mac, + Linux, + iOS, + Android, + WindowsPhone, + XboxOne, + PS4, + WiiU, + PSVita, + AppleTV, + UWP, + Switch, + WebGL, + Count, + } + + [Serializable] + public enum ImportType + { + StreamingAssets, + AssetBundle, + } + + + public class PlatformSettingBase + { + public FMODPlatform Platform; + } + + public class PlatformSetting : PlatformSettingBase + { + public T Value; + } + + [Serializable] + public class PlatformIntSetting : PlatformSetting + { + } + + [Serializable] + public class PlatformStringSetting : PlatformSetting + { + } + + public enum TriStateBool + { + Disabled, + Enabled, + Development, + } + + [Serializable] + public class PlatformBoolSetting : PlatformSetting + { + } + + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + public class Settings : ScriptableObject + { + const string SettingsAssetName = "FMODStudioSettings"; + + private static Settings instance = null; + + public static Settings Instance + { + get + { + if (instance == null) + { + 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 (!System.IO.Directory.Exists("Assets/Resources")) + { + AssetDatabase.CreateFolder("Assets", "Resources"); + } + AssetDatabase.CreateAsset(instance, "Assets/Resources/" + SettingsAssetName + ".asset"); + #endif + } + } + 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 + { + if (String.IsNullOrEmpty(sourceProjectPath) && !String.IsNullOrEmpty(SourceProjectPathUnformatted)) + { + sourceProjectPath = GetPlatformSpecificPath(SourceProjectPathUnformatted); + } + return sourceProjectPath; + } + set + { + sourceProjectPath = GetPlatformSpecificPath(value); + } + } + + [SerializeField] + public string SourceProjectPathUnformatted; + + private string sourceBankPath; + public string SourceBankPath + { + get + { + if (String.IsNullOrEmpty(sourceBankPath) && !String.IsNullOrEmpty(SourceBankPathUnformatted)) + { + sourceBankPath = GetPlatformSpecificPath(SourceBankPathUnformatted); + } + return sourceBankPath; + } + set + { + sourceBankPath = GetPlatformSpecificPath(value); + } + } + + [SerializeField] + public string SourceBankPathUnformatted; + + [SerializeField] + public bool AutomaticEventLoading; + + [SerializeField] + public bool AutomaticSampleLoading; + + [SerializeField] + public ImportType ImportType; + + [SerializeField] + public string TargetAssetPath; + + [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 string MasterBank; + + [SerializeField] + public List Banks; + + public static FMODPlatform GetParent(FMODPlatform platform) + { + switch (platform) + { + case FMODPlatform.Windows: + case FMODPlatform.Linux: + case FMODPlatform.Mac: + case FMODPlatform.UWP: + return FMODPlatform.Desktop; + case FMODPlatform.MobileHigh: + case FMODPlatform.MobileLow: + case FMODPlatform.iOS: + case FMODPlatform.Android: + case FMODPlatform.WindowsPhone: + case FMODPlatform.PSVita: + case FMODPlatform.AppleTV: + case FMODPlatform.Switch: + return FMODPlatform.Mobile; + case FMODPlatform.XboxOne: + case FMODPlatform.PS4: + case FMODPlatform.WiiU: + return FMODPlatform.Console; + case FMODPlatform.Desktop: + case FMODPlatform.Console: + case FMODPlatform.Mobile: + return FMODPlatform.Default; + case FMODPlatform.PlayInEditor: + case FMODPlatform.Default: + default: + return FMODPlatform.None; + } + } + + public static bool HasSetting(List list, FMODPlatform platform) where T : PlatformSettingBase + { + return list.Exists((x) => x.Platform == platform); + } + + public static U GetSetting(List list, FMODPlatform platform, U def) where T : PlatformSetting + { + T t = list.Find((x) => x.Platform == platform); + if (t == null) + { + FMODPlatform parent = GetParent(platform); + if (parent != FMODPlatform.None) + { + return GetSetting(list, parent, def); + } + else + { + return def; + } + } + return t.Value; + } + + public static void SetSetting(List list, FMODPlatform platform, U value) where T : PlatformSetting, new() + { + T setting = list.Find((x) => x.Platform == platform); + if (setting == null) + { + setting = new T(); + setting.Platform = platform; + list.Add(setting); + } + setting.Value = value; + } + + public static void RemoveSetting(List list, FMODPlatform platform) where T : PlatformSettingBase + { + list.RemoveAll((x) => x.Platform == platform); + } + + // -------- Live Update ---------------------- + public bool IsLiveUpdateEnabled(FMODPlatform platform) + { + #if DEVELOPMENT_BUILD || UNITY_EDITOR + return GetSetting(LiveUpdateSettings, platform, TriStateBool.Disabled) != TriStateBool.Disabled; + #else + return GetSetting(LiveUpdateSettings, platform, TriStateBool.Disabled) == TriStateBool.Enabled; + #endif + } + + // -------- Overlay Update ---------------------- + public bool IsOverlayEnabled(FMODPlatform platform) + { + #if DEVELOPMENT_BUILD || UNITY_EDITOR + return GetSetting(OverlaySettings, platform, TriStateBool.Disabled) != TriStateBool.Disabled; + #else + return GetSetting(OverlaySettings, platform, TriStateBool.Disabled) == TriStateBool.Enabled; + #endif + } + + // -------- Real channels ---------------------- + public int GetRealChannels(FMODPlatform platform) + { + return GetSetting(RealChannelSettings, platform, 64); + } + + // -------- Virtual channels ---------------------- + public int GetVirtualChannels(FMODPlatform platform) + { + return GetSetting(VirtualChannelSettings, platform, 128); + } + + // -------- Speaker Mode ---------------------- + public int GetSpeakerMode(FMODPlatform platform) + { + #if UNITY_EDITOR + if (platform == FMODPlatform.PlayInEditor) + { + return GetSetting(SpeakerModeSettings, platform, GetSetting(SpeakerModeSettings, RuntimeUtils.GetEditorFMODPlatform(), (int)FMOD.SPEAKERMODE.STEREO)); + } + else + #endif + { + return GetSetting(SpeakerModeSettings, platform, (int)FMOD.SPEAKERMODE.STEREO); + } + } + // -------- Sample Rate ---------------------- + public int GetSampleRate(FMODPlatform platform) + { + return GetSetting(SampleRateSettings, platform, 48000); + } + + // -------- Bank Platform ---------------------- + public string GetBankPlatform(FMODPlatform platform) + { + if (!HasPlatforms) + { + return ""; + } + #if UNITY_EDITOR + if (platform == FMODPlatform.PlayInEditor) + { + return GetSetting(BankDirectorySettings, platform, GetSetting(BankDirectorySettings, RuntimeUtils.GetEditorFMODPlatform(), "Desktop")); + } + else + #endif + { + return GetSetting(BankDirectorySettings, platform, "Desktop"); + } + } + + private Settings() + { + Banks = 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(); + + // Default play in editor settings + SetSetting(LoggingSettings, FMODPlatform.PlayInEditor, TriStateBool.Enabled); + SetSetting(LiveUpdateSettings, FMODPlatform.PlayInEditor, TriStateBool.Enabled); + SetSetting(OverlaySettings, FMODPlatform.PlayInEditor, TriStateBool.Enabled); + SetSetting(SampleRateSettings, FMODPlatform.PlayInEditor, 48000); + // These are not editable, set them high + SetSetting(RealChannelSettings, FMODPlatform.PlayInEditor, 256); + SetSetting(VirtualChannelSettings, FMODPlatform.PlayInEditor, 1024); + + // Default runtime settings + SetSetting(LoggingSettings, FMODPlatform.Default, TriStateBool.Disabled); + SetSetting(LiveUpdateSettings, FMODPlatform.Default, TriStateBool.Disabled); + SetSetting(OverlaySettings, FMODPlatform.Default, TriStateBool.Disabled); + + SetSetting(RealChannelSettings, FMODPlatform.Default, 32); // Match the default in the low level + SetSetting(VirtualChannelSettings, FMODPlatform.Default, 128); + SetSetting(SampleRateSettings, FMODPlatform.Default, 0); + SetSetting(SpeakerModeSettings, FMODPlatform.Default, (int) FMOD.SPEAKERMODE.STEREO); + + ImportType = ImportType.StreamingAssets; + AutomaticEventLoading = true; + AutomaticSampleLoading = false; + TargetAssetPath = ""; + } + + private string GetPlatformSpecificPath(string path) + { + if (String.IsNullOrEmpty(path)) + { + return path; + } + + if (Path.DirectorySeparatorChar == '/') + { + return path.Replace('\\', '/'); + } + return path.Replace('/', '\\'); + } + } + +} \ No newline at end of file diff --git a/Assets/Plugins/FMOD/Settings.cs.meta b/Assets/Plugins/FMOD/Settings.cs.meta new file mode 100644 index 0000000..7fa33f1 --- /dev/null +++ b/Assets/Plugins/FMOD/Settings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eef8d824ea7b63742966aaa0e94ac383 +timeCreated: 1435215721 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -400 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/StudioBankLoader.cs b/Assets/Plugins/FMOD/StudioBankLoader.cs new file mode 100644 index 0000000..e1fd846 --- /dev/null +++ b/Assets/Plugins/FMOD/StudioBankLoader.cs @@ -0,0 +1,106 @@ +using UnityEngine; +using System; +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); + } + } + + 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); + } + } + } +} diff --git a/Assets/Plugins/FMOD/StudioBankLoader.cs.meta b/Assets/Plugins/FMOD/StudioBankLoader.cs.meta new file mode 100644 index 0000000..9bacb4a --- /dev/null +++ b/Assets/Plugins/FMOD/StudioBankLoader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b9468c5f457ace64f8d4df6d642b107f +timeCreated: 1440562167 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -250 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/StudioEventEmitter.cs b/Assets/Plugins/FMOD/StudioEventEmitter.cs new file mode 100644 index 0000000..2e31053 --- /dev/null +++ b/Assets/Plugins/FMOD/StudioEventEmitter.cs @@ -0,0 +1,262 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace FMODUnity +{ + [AddComponentMenu("FMOD Studio/FMOD Studio Event Emitter")] + public class StudioEventEmitter : MonoBehaviour + { + [EventRef] + public String Event = ""; + public EmitterGameEvent PlayEvent = EmitterGameEvent.None; + public EmitterGameEvent StopEvent = EmitterGameEvent.None; + public String CollisionTag = ""; + 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; + + private FMOD.Studio.EventDescription eventDescription; + public FMOD.Studio.EventDescription EventDescription { get { return eventDescription; } } + + private FMOD.Studio.EventInstance instance; + public FMOD.Studio.EventInstance EventInstance { get { return instance; } } + + private bool hasTriggered = false; + private bool isQuitting = false; + + 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 (Preload) + { + eventDescription.unloadSampleData(); + } + } + } + + void OnEnable() + { + HandleGameEvent(EmitterGameEvent.ObjectEnable); + } + + void OnDisable() + { + HandleGameEvent(EmitterGameEvent.ObjectDisable); + } + + void OnTriggerEnter(Collider other) + { + if (String.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(EmitterGameEvent.TriggerEnter); + } + } + + void OnTriggerExit(Collider other) + { + if (String.IsNullOrEmpty(CollisionTag) || other.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 HandleGameEvent(EmitterGameEvent gameEvent) + { + if (PlayEvent == gameEvent) + { + Play(); + } + if (StopEvent == gameEvent) + { + Stop(); + } + } + + void Lookup() + { + eventDescription = RuntimeManager.GetEventDescription(Event); + } + + public void Play() + { + if (TriggerOnce && hasTriggered) + { + return; + } + + if (String.IsNullOrEmpty(Event)) + { + return; + } + + if (!eventDescription.isValid()) + { + Lookup(); + } + + bool isOneshot = false; + if (!Event.StartsWith("snapshot", StringComparison.CurrentCultureIgnoreCase)) + { + eventDescription.isOneshot(out isOneshot); + } + bool is3D; + eventDescription.is3D(out is3D); + + if (!instance.isValid()) + { + instance.clearHandle(); + } + + // Let previous oneshot instances play out + if (isOneshot && instance.isValid()) + { + instance.release(); + instance.clearHandle(); + } + + 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.setParameterValue(param.Name, param.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() + { + 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) + { + if (instance.isValid()) + { + instance.setParameterValue(name, value); + } + } + + public bool IsPlaying() + { + if (instance.isValid() && instance.isValid()) + { + FMOD.Studio.PLAYBACK_STATE playbackState; + instance.getPlaybackState(out playbackState); + return (playbackState != FMOD.Studio.PLAYBACK_STATE.STOPPED); + } + return false; + } + } +} diff --git a/Assets/Plugins/FMOD/StudioEventEmitter.cs.meta b/Assets/Plugins/FMOD/StudioEventEmitter.cs.meta new file mode 100644 index 0000000..0af7ae5 --- /dev/null +++ b/Assets/Plugins/FMOD/StudioEventEmitter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9a6610d2e704f1648819acc8d7460285 +timeCreated: 1444629021 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -220 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/StudioListener.cs b/Assets/Plugins/FMOD/StudioListener.cs new file mode 100644 index 0000000..7aa9861 --- /dev/null +++ b/Assets/Plugins/FMOD/StudioListener.cs @@ -0,0 +1,46 @@ +using System; +using UnityEngine; +using System.Collections; + +namespace FMODUnity +{ + [AddComponentMenu("FMOD Studio/FMOD Studio Listener")] + public class StudioListener : MonoBehaviour + { + Rigidbody rigidBody; + Rigidbody2D rigidBody2D; + + public int ListenerNumber = 0; + + void OnEnable() + { + RuntimeUtils.EnforceLibraryOrder(); + rigidBody = gameObject.GetComponent(); + rigidBody2D = gameObject.GetComponent(); + RuntimeManager.HasListener[ListenerNumber] = true; + SetListenerLocation(); + } + + void OnDisable() + { + RuntimeManager.HasListener[ListenerNumber] = false; + } + + void Update() + { + SetListenerLocation(); + } + + void SetListenerLocation() + { + if (rigidBody) + { + RuntimeManager.SetListenerLocation(ListenerNumber, gameObject, rigidBody); + } + else + { + RuntimeManager.SetListenerLocation(ListenerNumber, gameObject, rigidBody2D); + } + } + } +} diff --git a/Assets/Plugins/FMOD/StudioListener.cs.meta b/Assets/Plugins/FMOD/StudioListener.cs.meta new file mode 100644 index 0000000..73b729a --- /dev/null +++ b/Assets/Plugins/FMOD/StudioListener.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 86c6556701af9e04380698b89f691b6e +timeCreated: 1449016511 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 80 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/StudioParameterTrigger.cs b/Assets/Plugins/FMOD/StudioParameterTrigger.cs new file mode 100644 index 0000000..4932b07 --- /dev/null +++ b/Assets/Plugins/FMOD/StudioParameterTrigger.cs @@ -0,0 +1,115 @@ +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: MonoBehaviour + { + public EmitterRef[] Emitters; + public EmitterGameEvent TriggerEvent; + public string CollisionTag; + + void Start() + { + HandleGameEvent(EmitterGameEvent.ObjectStart); + } + + void OnDestroy() + { + HandleGameEvent(EmitterGameEvent.ObjectDestroy); + } + + void OnEnable() + { + HandleGameEvent(EmitterGameEvent.ObjectEnable); + } + + void OnDisable() + { + HandleGameEvent(EmitterGameEvent.ObjectDisable); + } + + void OnTriggerEnter(Collider other) + { + if (String.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag)) + { + HandleGameEvent(EmitterGameEvent.TriggerEnter); + } + } + + void OnTriggerExit(Collider other) + { + if (String.IsNullOrEmpty(CollisionTag) || other.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 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) + { + for (int j = 0; j < Emitters[i].Params.Length; j++) + { + emitterRef.Target.SetParameter(Emitters[i].Params[j].Name, Emitters[i].Params[j].Value); + } + } + } + } + } +} diff --git a/Assets/Plugins/FMOD/StudioParameterTrigger.cs.meta b/Assets/Plugins/FMOD/StudioParameterTrigger.cs.meta new file mode 100644 index 0000000..7ac567a --- /dev/null +++ b/Assets/Plugins/FMOD/StudioParameterTrigger.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 744a208c85da6d04c861d81b992e4ead +timeCreated: 1451968823 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/Timeline.meta b/Assets/Plugins/FMOD/Timeline.meta new file mode 100644 index 0000000..4c79461 --- /dev/null +++ b/Assets/Plugins/FMOD/Timeline.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bb2bf046053c55e4980203375685a77c +folderAsset: yes +timeCreated: 1540351106 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/Timeline/FMODEventPlayable.cs b/Assets/Plugins/FMOD/Timeline/FMODEventPlayable.cs new file mode 100644 index 0000000..835f968 --- /dev/null +++ b/Assets/Plugins/FMOD/Timeline/FMODEventPlayable.cs @@ -0,0 +1,174 @@ +#if UNITY_2017_1_OR_NEWER + +using System; +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +[System.Serializable] +public class FMODEventPlayable : PlayableAsset, ITimelineClipAsset +{ + public FMODEventPlayableBehavior template = new FMODEventPlayableBehavior(); + + public GameObject TrackTargetObject { get; set; } + public float eventLength; //In seconds. + + [FMODUnity.EventRef] + [SerializeField] public string eventName; + [SerializeField] public STOP_MODE stopType; + + [SerializeField] public FMODUnity.ParamRef[] parameters = new FMODUnity.ParamRef[0]; + + 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) + { + var playable = ScriptPlayable.Create(graph, template); + FMODEventPlayableBehavior 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); + } + } +#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 (eventName != null) + { + if (!eventInstance.isValid()) + { + 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.setParameterValue(param.Name, 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; + } +} + +#endif //UNITY_2017_1_OR_NEWER \ No newline at end of file diff --git a/Assets/Plugins/FMOD/Timeline/FMODEventPlayable.cs.meta b/Assets/Plugins/FMOD/Timeline/FMODEventPlayable.cs.meta new file mode 100644 index 0000000..f94335c --- /dev/null +++ b/Assets/Plugins/FMOD/Timeline/FMODEventPlayable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 987a467495df9d942b56b1b51381d095 +timeCreated: 1523230466 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 392af304825cbe847bbf4e603852e4dd, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/Timeline/FMODEventTrack.cs b/Assets/Plugins/FMOD/Timeline/FMODEventTrack.cs new file mode 100644 index 0000000..12ac431 --- /dev/null +++ b/Assets/Plugins/FMOD/Timeline/FMODEventTrack.cs @@ -0,0 +1,72 @@ +#if UNITY_2017_1_OR_NEWER + +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +[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 || FMODUnity.RuntimeManager.IsQuitting()) + { + 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 //UNITY_2017_1_OR_NEWER \ No newline at end of file diff --git a/Assets/Plugins/FMOD/Timeline/FMODEventTrack.cs.meta b/Assets/Plugins/FMOD/Timeline/FMODEventTrack.cs.meta new file mode 100644 index 0000000..52306db --- /dev/null +++ b/Assets/Plugins/FMOD/Timeline/FMODEventTrack.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 133253f56854570409c222a87786b263 +timeCreated: 1523230466 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a4edfa5854cdec34b98b1c55f0562bdd, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/Wrapper.meta b/Assets/Plugins/FMOD/Wrapper.meta new file mode 100644 index 0000000..e34b295 --- /dev/null +++ b/Assets/Plugins/FMOD/Wrapper.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bfaed09c888d2a24096887e3996f48a0 +folderAsset: yes +timeCreated: 1432600460 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FMOD/Wrapper/fmod.cs b/Assets/Plugins/FMOD/Wrapper/fmod.cs new file mode 100644 index 0000000..3377ba2 --- /dev/null +++ b/Assets/Plugins/FMOD/Wrapper/fmod.cs @@ -0,0 +1,4583 @@ +/* ========================================================================================== */ +/* */ +/* FMOD Studio - C# Wrapper . Copyright (c), Firelight Technologies Pty, Ltd. 2004-2018. */ +/* */ +/* ========================================================================================== */ + +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 class VERSION + { + public const int number = 0x00011009; +#if (UNITY_IPHONE || UNITY_TVOS || UNITY_SWITCH || UNITY_WEBGL) && !UNITY_EDITOR + public const string dll = "__Internal"; +#elif (UNITY_PS4) && !UNITY_EDITOR + public const string dll = "libfmod"; +#elif (UNITY_PS4) && DEVELOPMENT_BUILD + public const string dll = "libfmodL"; +#elif (UNITY_PSP2 || UNITY_WIIU) && !UNITY_EDITOR + public const string dll = "libfmodstudio"; +/* Linux defines moved before the Windows define, otherwise Linux Editor tries to use Win lib when selected as build target.*/ +#elif (UNITY_EDITOR_LINUX) || ((UNITY_STANDALONE_LINUX || UNITY_ANDROID || UNITY_XBOXONE) && DEVELOPMENT_BUILD) + public const string dll = "fmodL"; +#elif (UNITY_EDITOR_OSX || UNITY_EDITOR_WIN) || ((UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN) && DEVELOPMENT_BUILD) + public const string dll = "fmodstudioL"; +#elif (UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN) + public const string dll = "fmodstudio"; +#else + 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 types + */ + + /* + [ENUM] + [ + [DESCRIPTION] + error codes. Returned from every function. + + [REMARKS] + + [SEE_ALSO] + ] + */ + public enum RESULT : int + { + OK, /* No errors. */ + ERR_BADCOMMAND, /* 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). */ + ERR_CHANNEL_ALLOC, /* Error trying to allocate a channel. */ + ERR_CHANNEL_STOLEN, /* The specified channel has been reused to play another sound. */ + ERR_DMA, /* DMA Failure. See debug output for more information. */ + ERR_DSP_CONNECTION, /* DSP connection error. Connection possibly caused a cyclic dependency or connected dsps with incompatible buffer counts. */ + ERR_DSP_DONTPROCESS, /* 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. */ + ERR_DSP_FORMAT, /* 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. */ + ERR_DSP_INUSE, /* DSP is already in the mixer's DSP network. It must be removed before being reinserted or released. */ + ERR_DSP_NOTFOUND, /* DSP connection error. Couldn't find the DSP unit specified. */ + ERR_DSP_RESERVED, /* DSP operation error. Cannot perform operation on this DSP as it is reserved by the system. */ + ERR_DSP_SILENCE, /* 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. */ + ERR_DSP_TYPE, /* DSP operation cannot be performed on a DSP of this type. */ + ERR_FILE_BAD, /* Error loading file. */ + ERR_FILE_COULDNOTSEEK, /* Couldn't perform seek operation. This is a limitation of the medium (ie netstreams) or the file format. */ + ERR_FILE_DISKEJECTED, /* Media was ejected while reading. */ + ERR_FILE_EOF, /* End of file unexpectedly reached while trying to read essential data (truncated?). */ + ERR_FILE_ENDOFDATA, /* End of current chunk reached while trying to read data. */ + ERR_FILE_NOTFOUND, /* File not found. */ + ERR_FORMAT, /* Unsupported file or audio format. */ + ERR_HEADER_MISMATCH, /* There is a version mismatch between the FMOD header and either the FMOD Studio library or the FMOD Low Level library. */ + ERR_HTTP, /* A HTTP error occurred. This is a catch-all for HTTP errors not listed elsewhere. */ + ERR_HTTP_ACCESS, /* The specified resource requires authentication or is forbidden. */ + ERR_HTTP_PROXY_AUTH, /* Proxy authentication is required to access the specified resource. */ + ERR_HTTP_SERVER_ERROR, /* A HTTP server error occurred. */ + ERR_HTTP_TIMEOUT, /* The HTTP request timed out. */ + ERR_INITIALIZATION, /* FMOD was not initialized correctly to support this function. */ + ERR_INITIALIZED, /* Cannot call this command after System::init. */ + ERR_INTERNAL, /* An error occurred that wasn't supposed to. Contact support. */ + ERR_INVALID_FLOAT, /* Value passed in was a NaN, Inf or denormalized float. */ + ERR_INVALID_HANDLE, /* An invalid object handle was used. */ + ERR_INVALID_PARAM, /* An invalid parameter was passed to this function. */ + ERR_INVALID_POSITION, /* An invalid seek position was passed to this function. */ + ERR_INVALID_SPEAKER, /* An invalid speaker was passed to this function based on the current speaker mode. */ + ERR_INVALID_SYNCPOINT, /* The syncpoint did not come from this sound handle. */ + ERR_INVALID_THREAD, /* Tried to call a function on a thread that is not supported. */ + ERR_INVALID_VECTOR, /* The vectors passed in are not unit length, or perpendicular. */ + ERR_MAXAUDIBLE, /* Reached maximum audible playback count for this sound's soundgroup. */ + ERR_MEMORY, /* Not enough memory or resources. */ + ERR_MEMORY_CANTPOINT, /* Can't use FMOD_OPENMEMORY_POINT on non PCM source data, or non mp3/xma/adpcm data if FMOD_CREATECOMPRESSEDSAMPLE was used. */ + ERR_NEEDS3D, /* Tried to call a command on a 2d sound when the command was meant for 3d sound. */ + ERR_NEEDSHARDWARE, /* Tried to use a feature that requires hardware support. */ + ERR_NET_CONNECT, /* Couldn't connect to the specified host. */ + ERR_NET_SOCKET_ERROR, /* A socket error occurred. This is a catch-all for socket-related errors not listed elsewhere. */ + ERR_NET_URL, /* The specified URL couldn't be resolved. */ + ERR_NET_WOULD_BLOCK, /* Operation on a non-blocking socket could not complete immediately. */ + ERR_NOTREADY, /* Operation could not be performed because specified sound/DSP connection is not ready. */ + ERR_OUTPUT_ALLOCATED, /* Error initializing output device, but more specifically, the output device is already in use and cannot be reused. */ + ERR_OUTPUT_CREATEBUFFER, /* Error creating hardware sound buffer. */ + ERR_OUTPUT_DRIVERCALL, /* A call to a standard soundcard driver failed, which could possibly mean a bug in the driver or resources were missing or exhausted. */ + ERR_OUTPUT_FORMAT, /* Soundcard does not support the specified format. */ + ERR_OUTPUT_INIT, /* Error initializing output device. */ + ERR_OUTPUT_NODRIVERS, /* 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. */ + ERR_PLUGIN, /* An unspecified error has been returned from a plugin. */ + ERR_PLUGIN_MISSING, /* A requested output, dsp unit type or codec was not available. */ + ERR_PLUGIN_RESOURCE, /* A resource that the plugin requires cannot be found. (ie the DLS file for MIDI playback) */ + ERR_PLUGIN_VERSION, /* A plugin was built with an unsupported SDK version. */ + ERR_RECORD, /* An error occurred trying to initialize the recording device. */ + ERR_REVERB_CHANNELGROUP, /* Reverb properties cannot be set on this channel because a parent channelgroup owns the reverb connection. */ + ERR_REVERB_INSTANCE, /* 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. */ + ERR_SUBSOUNDS, /* 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. */ + ERR_SUBSOUND_ALLOCATED, /* 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. */ + ERR_SUBSOUND_CANTMOVE, /* Shared subsounds cannot be replaced or moved from their parent stream, such as when the parent stream is an FSB file. */ + ERR_TAGNOTFOUND, /* The specified tag could not be found or there are no tags. */ + ERR_TOOMANYCHANNELS, /* The sound created exceeds the allowable input channel count. This can be increased using the 'maxinputchannels' parameter in System::setSoftwareFormat. */ + ERR_TRUNCATED, /* The retrieved string is too long to fit in the supplied buffer and has been truncated. */ + ERR_UNIMPLEMENTED, /* Something in FMOD hasn't been implemented when it should be! contact support! */ + ERR_UNINITIALIZED, /* This command failed because System::init or System::setDriver was not called. */ + ERR_UNSUPPORTED, /* A command issued was not supported by this object. Possibly a plugin without certain callbacks specified. */ + ERR_VERSION, /* The version number of this file format is not supported. */ + ERR_EVENT_ALREADY_LOADED, /* The specified bank has already been loaded. */ + ERR_EVENT_LIVEUPDATE_BUSY, /* The live update connection failed due to the game already being connected. */ + ERR_EVENT_LIVEUPDATE_MISMATCH, /* The live update connection failed due to the game data being out of sync with the tool. */ + ERR_EVENT_LIVEUPDATE_TIMEOUT, /* The live update connection timed out. */ + ERR_EVENT_NOTFOUND, /* The requested event, bus or vca could not be found. */ + ERR_STUDIO_UNINITIALIZED, /* The Studio::System object is not yet initialized. */ + ERR_STUDIO_NOT_LOADED, /* The specified resource is not loaded, so it can't be unloaded. */ + ERR_INVALID_STRING, /* An invalid string was passed to this function. */ + ERR_ALREADY_LOCKED, /* The specified resource is already locked. */ + ERR_NOT_LOCKED, /* The specified resource is not locked, so it can't be unlocked. */ + ERR_RECORD_DISCONNECTED, /* The specified recording driver has been disconnected. */ + ERR_TOOMANYSAMPLES, /* The length provided exceed the allowable limit. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Used to distinguish if a FMOD_CHANNELCONTROL parameter is actually a channel or a channelgroup. + + [REMARKS] + Cast the FMOD_CHANNELCONTROL to an FMOD_CHANNEL/FMOD::Channel, or FMOD_CHANNELGROUP/FMOD::ChannelGroup if specific functionality is needed for either class. + Otherwise use as FMOD_CHANNELCONTROL/FMOD::ChannelControl and use that API. + + [SEE_ALSO] + Channel::setCallback + ChannelGroup::setCallback + ] + */ + public enum CHANNELCONTROL_TYPE : int + { + CHANNEL, + CHANNELGROUP + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure describing a point in 3D space. + + [REMARKS] + FMOD uses a left handed co-ordinate system by default. + To use a right handed co-ordinate system specify FMOD_INIT_3D_RIGHTHANDED from FMOD_INITFLAGS in System::init. + + [SEE_ALSO] + System::set3DListenerAttributes + System::get3DListenerAttributes + Channel::set3DAttributes + Channel::get3DAttributes + Geometry::addPolygon + Geometry::setPolygonVertex + Geometry::getPolygonVertex + Geometry::setRotation + Geometry::getRotation + Geometry::setPosition + Geometry::getPosition + Geometry::setScale + Geometry::getScale + FMOD_INITFLAGS + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct VECTOR + { + public float x; /* X co-ordinate in 3D space. */ + public float y; /* Y co-ordinate in 3D space. */ + public float z; /* Z co-ordinate in 3D space. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure describing a position, velocity and orientation. + + [REMARKS] + + [SEE_ALSO] + FMOD_VECTOR + FMOD_DSP_PARAMETER_3DATTRIBUTES + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct ATTRIBUTES_3D + { + public VECTOR position; + public VECTOR velocity; + public VECTOR forward; + public VECTOR up; + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure that is passed into FMOD_FILE_ASYNCREAD_CALLBACK. Use the information in this structure to perform + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.
+ Members marked with [w] mean the variable can be written to. The user can set the value.
+
+ Instructions: write to 'buffer', and 'bytesread' BEFORE setting 'result'.
+ As soon as result is set, FMOD will asynchronously continue internally using the data provided in this structure.
+
+ Set 'result' to the result expected from a normal file read callback.
+ If the read was successful, set it to FMOD_OK.
+ If it read some data but hit the end of the file, set it to FMOD_ERR_FILE_EOF.
+ If a bad error occurred, return FMOD_ERR_FILE_BAD
+ If a disk was ejected, return FMOD_ERR_FILE_DISKEJECTED.
+ + [SEE_ALSO] + FMOD_FILE_ASYNCREAD_CALLBACK + FMOD_FILE_ASYNCCANCEL_CALLBACK + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct ASYNCREADINFO + { + public IntPtr handle; /* [r] The file handle that was filled out in the open callback. */ + public uint offset; /* [r] Seek position, make sure you read from this file offset. */ + public uint sizebytes; /* [r] how many bytes requested for read. */ + public int priority; /* [r] 0 = low importance. 100 = extremely important (ie 'must read now or stuttering may occur') */ + + public IntPtr userdata; /* [r] User data pointer. */ + public IntPtr buffer; /* [w] Buffer to read file data into. */ + public uint bytesread; /* [w] Fill this in before setting result code to tell FMOD how many bytes were read. */ + public ASYNCREADINFO_DONE_CALLBACK done; /* [r] FMOD file system wake up function. Call this when user file read is finished. Pass result of file read as a parameter. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + These output types are used with System::setOutput / System::getOutput, to choose which output method to use. + + [REMARKS] + To pass information to the driver when initializing fmod use the *extradriverdata* parameter in System::init for the following reasons. + + - FMOD_OUTPUTTYPE_WAVWRITER - extradriverdata is a pointer to a char * file name that the wav writer will output to. + - FMOD_OUTPUTTYPE_WAVWRITER_NRT - extradriverdata is a pointer to a char * file name that the wav writer will output to. + - FMOD_OUTPUTTYPE_DSOUND - extradriverdata is cast to a HWND type, so that FMOD can set the focus on the audio for a particular window. + - FMOD_OUTPUTTYPE_PS3 - extradriverdata is a pointer to a FMOD_PS3_EXTRADRIVERDATA struct. This can be found in fmodps3.h. + - FMOD_OUTPUTTYPE_XBOX360 - extradriverdata is a pointer to a FMOD_360_EXTRADRIVERDATA struct. This can be found in fmodxbox360.h. + + Currently these are the only FMOD drivers that take extra information. Other unknown plugins may have different requirements. + + Note! If FMOD_OUTPUTTYPE_WAVWRITER_NRT or FMOD_OUTPUTTYPE_NOSOUND_NRT are used, and if the System::update function is being called + very quickly (ie for a non realtime decode) it may be being called too quickly for the FMOD streamer thread to respond to. + The result will be a skipping/stuttering output in the captured audio. + + To remedy this, disable the FMOD streamer thread, and use FMOD_INIT_STREAM_FROM_UPDATE to avoid skipping in the output stream, + as it will lock the mixer and the streamer together in the same thread. + + [SEE_ALSO] + System::setOutput + System::getOutput + System::setSoftwareFormat + System::getSoftwareFormat + System::init + System::update + FMOD_INITFLAGS + ] + */ + public enum OUTPUTTYPE : int + { + AUTODETECT, /* Picks the best output mode for the platform. This is the default. */ + + UNKNOWN, /* All - 3rd party plugin, unknown. This is for use with System::getOutput only. */ + NOSOUND, /* All - Perform all mixing but discard the final output. */ + WAVWRITER, /* All - Writes output to a .wav file. */ + NOSOUND_NRT, /* All - Non-realtime version of FMOD_OUTPUTTYPE_NOSOUND. User can drive mixer with System::update at whatever rate they want. */ + WAVWRITER_NRT, /* All - Non-realtime version of FMOD_OUTPUTTYPE_WAVWRITER. User can drive mixer with System::update at whatever rate they want. */ + + DSOUND, /* Win - Direct Sound. (Default on Windows XP and below) */ + WINMM, /* Win - Windows Multimedia. */ + WASAPI, /* Win/WinStore/XboxOne - Windows Audio Session API. (Default on Windows Vista and above, Xbox One and Windows Store Applications) */ + ASIO, /* Win - Low latency ASIO 2.0. */ + PULSEAUDIO, /* Linux - Pulse Audio. (Default on Linux if available) */ + ALSA, /* Linux - Advanced Linux Sound Architecture. (Default on Linux if PulseAudio isn't available) */ + COREAUDIO, /* Mac/iOS - Core Audio. (Default on Mac and iOS) */ + XAUDIO, /* Xbox 360 - XAudio. (Default on Xbox 360) */ + PS3, /* PS3 - Audio Out. (Default on PS3) */ + AUDIOTRACK, /* Android - Java Audio Track. (Default on Android 2.2 and below) */ + OPENSL, /* Android - OpenSL ES. (Default on Android 2.3 and above) */ + WIIU, /* Wii U - AX. (Default on Wii U) */ + AUDIOOUT, /* PS4/PSVita - Audio Out. (Default on PS4 and PS Vita) */ + AUDIO3D, /* PS4 - Audio3D. */ + ATMOS, /* Win - Dolby Atmos (WASAPI). */ + WEBAUDIO, /* Web Browser - JavaScript webaudio output. (Default on JavaScript) */ + NNAUDIO, /* NX - NX nn::audio. (Default on NX) */ + WINSONIC, /* XboxOne - Windows Sonic. */ + + MAX, /* Maximum number of output types supported. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + Specify the destination of log output when using the logging version of FMOD. + + [REMARKS] + TTY destination can vary depending on platform, common examples include the + Visual Studio / Xcode output window, stderr and LogCat. + + [SEE_ALSO] + FMOD_Debug_Initialize + ] + */ + public enum DEBUG_MODE : int + { + TTY, /* Default log location per platform, i.e. Visual Studio output window, stderr, LogCat, etc */ + FILE, /* Write log to specified file path */ + CALLBACK, /* Call specified callback with log information */ + } + + /* + [DEFINE] + [ + [NAME] + FMOD_DEBUG_FLAGS + + [DESCRIPTION] + Specify the requested information to be output when using the logging version of FMOD. + + [REMARKS] + + [SEE_ALSO] + FMOD_Debug_Initialize + ] + */ + [Flags] + public enum DEBUG_FLAGS : uint + { + NONE = 0x00000000, /* Disable all messages */ + ERROR = 0x00000001, /* Enable only error messages. */ + WARNING = 0x00000002, /* Enable warning and error messages. */ + LOG = 0x00000004, /* Enable informational, warning and error messages (default). */ + + TYPE_MEMORY = 0x00000100, /* Verbose logging for memory operations, only use this if you are debugging a memory related issue. */ + TYPE_FILE = 0x00000200, /* Verbose logging for file access, only use this if you are debugging a file related issue. */ + TYPE_CODEC = 0x00000400, /* Verbose logging for codec initialization, only use this if you are debugging a codec related issue. */ + TYPE_TRACE = 0x00000800, /* Verbose logging for internal errors, use this for tracking the origin of error codes. */ + + DISPLAY_TIMESTAMPS = 0x00010000, /* Display the time stamp of the log message in milliseconds. */ + DISPLAY_LINENUMBERS = 0x00020000, /* Display the source code file and line number for where the message originated. */ + DISPLAY_THREAD = 0x00040000, /* Display the thread ID of the calling function that generated the message. */ + } + + /* + [DEFINE] + [ + [NAME] + FMOD_MEMORY_TYPE + + [DESCRIPTION] + Bit fields for memory allocation type being passed into FMOD memory callbacks. + + [REMARKS] + Remember this is a bitfield. You may get more than 1 bit set (ie physical + persistent) so do not simply switch on the types! You must check each bit individually or clear out the bits that you do not want within the callback.
+ Bits can be excluded if you want during Memory_Initialize so that you never get them. + + [SEE_ALSO] + FMOD_MEMORY_ALLOC_CALLBACK + FMOD_MEMORY_REALLOC_CALLBACK + FMOD_MEMORY_FREE_CALLBACK + Memory_Initialize + ] + */ + [Flags] + public enum MEMORY_TYPE : uint + { + NORMAL = 0x00000000, /* Standard memory. */ + STREAM_FILE = 0x00000001, /* Stream file buffer, size controllable with System::setStreamBufferSize. */ + STREAM_DECODE = 0x00000002, /* Stream decode buffer, size controllable with FMOD_CREATESOUNDEXINFO::decodebuffersize. */ + SAMPLEDATA = 0x00000004, /* Sample data buffer. Raw audio data, usually PCM/MPEG/ADPCM/XMA data. */ + DSP_BUFFER = 0x00000008, /* DSP memory block allocated when more than 1 output exists on a DSP node. */ + PLUGIN = 0x00000010, /* Memory allocated by a third party plugin. */ + XBOX360_PHYSICAL = 0x00100000, /* Requires XPhysicalAlloc / XPhysicalFree. */ + PERSISTENT = 0x00200000, /* Persistent memory. Memory will be freed when System::release is called. */ + SECONDARY = 0x00400000, /* Secondary memory. Allocation should be in secondary memory. For example RSX on the PS3. */ + ALL = 0xFFFFFFFF + } + + /* + [ENUM] + [ + [DESCRIPTION] + These are speaker types defined for use with the System::setSoftwareFormat command. + + [REMARKS] + Note below the phrase 'sound channels' is used. These are the subchannels inside a sound, they are not related and + have nothing to do with the FMOD class "Channel".
+ For example a mono sound has 1 sound channel, a stereo sound has 2 sound channels, and an AC3 or 6 channel wav file have 6 "sound channels".
+
+ FMOD_SPEAKERMODE_RAW
+ ---------------------
+ This mode is for output devices that are not specifically mono/stereo/quad/surround/5.1 or 7.1, but are multichannel.
+ Use System::setSoftwareFormat to specify the number of speakers you want to address, otherwise it will default to 2 (stereo).
+ Sound channels map to speakers sequentially, so a mono sound maps to output speaker 0, stereo sound maps to output speaker 0 & 1.
+ The user assumes knowledge of the speaker order. FMOD_SPEAKER enumerations may not apply, so raw channel indices should be used.
+ Multichannel sounds map input channels to output channels 1:1.
+ Channel::setPan and Channel::setPanLevels do not work.
+ Speaker levels must be manually set with Channel::setPanMatrix.
+
+ FMOD_SPEAKERMODE_MONO
+ ---------------------
+ This mode is for a 1 speaker arrangement.
+ Panning does not work in this speaker mode.
+ Mono, stereo and multichannel sounds have each sound channel played on the one speaker unity.
+ Mix behavior for multichannel sounds can be set with Channel::setPanMatrix.
+ Channel::setPanLevels does not work.
+
+ FMOD_SPEAKERMODE_STEREO
+ -----------------------
+ This mode is for 2 speaker arrangements that have a left and right speaker.
+
  • Mono sounds default to an even distribution between left and right. They can be panned with Channel::setPan.
    +
  • Stereo sounds default to the middle, or full left in the left speaker and full right in the right speaker. +
  • They can be cross faded with Channel::setPan.
    +
  • Multichannel sounds have each sound channel played on each speaker at unity.
    +
  • Mix behavior for multichannel sounds can be set with Channel::setPanMatrix.
    +
  • Channel::setPanLevels works but only front left and right parameters are used, the rest are ignored.
    +
    + FMOD_SPEAKERMODE_QUAD
    + ------------------------
    + This mode is for 4 speaker arrangements that have a front left, front right, surround left and a surround right speaker.
    +
  • Mono sounds default to an even distribution between front left and front right. They can be panned with Channel::setPan.
    +
  • Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right.
    +
  • They can be cross faded with Channel::setPan.
    +
  • Multichannel sounds default to all of their sound channels being played on each speaker in order of input.
    +
  • Mix behavior for multichannel sounds can be set with Channel::setPanMatrix.
    +
  • Channel::setPanLevels works but rear left, rear right, center and lfe are ignored.
    +
    + FMOD_SPEAKERMODE_SURROUND
    + ------------------------
    + This mode is for 5 speaker arrangements that have a left/right/center/surround left/surround right.
    +
  • Mono sounds default to the center speaker. They can be panned with Channel::setPan.
    +
  • Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right. +
  • They can be cross faded with Channel::setPan.
    +
  • Multichannel sounds default to all of their sound channels being played on each speaker in order of input. +
  • Mix behavior for multichannel sounds can be set with Channel::setPanMatrix.
    +
  • Channel::setPanLevels works but rear left / rear right are ignored.
    +
    + FMOD_SPEAKERMODE_5POINT1
    + ---------------------------------------------------------
    + This mode is for 5.1 speaker arrangements that have a left/right/center/surround left/surround right and a subwoofer speaker.
    +
  • Mono sounds default to the center speaker. They can be panned with Channel::setPan.
    +
  • Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right. +
  • They can be cross faded with Channel::setPan.
    +
  • Multichannel sounds default to all of their sound channels being played on each speaker in order of input. +
  • Mix behavior for multichannel sounds can be set with Channel::setPanMatrix.
    +
  • Channel::setPanLevels works but rear left / rear right are ignored.
    +
    + FMOD_SPEAKERMODE_7POINT1
    + ------------------------
    + This mode is for 7.1 speaker arrangements that have a left/right/center/surround left/surround right/rear left/rear right + and a subwoofer speaker.
    +
  • Mono sounds default to the center speaker. They can be panned with Channel::setPan.
    +
  • Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right. +
  • They can be cross faded with Channel::setPan.
    +
  • Multichannel sounds default to all of their sound channels being played on each speaker in order of input. +
  • Mix behavior for multichannel sounds can be set with Channel::setPanMatrix.
    +
  • Channel::setPanLevels works and every parameter is used to set the balance of a sound in any speaker.
    +
    + + [SEE_ALSO] + System::setSoftwareFormat + System::getSoftwareFormat + DSP::setChannelFormat + ] + */ + public enum SPEAKERMODE : int + { + DEFAULT, /* Default speaker mode for the chosen output mode which will resolve after System::init. */ + RAW, /* Assume there is no special mapping from a given channel to a speaker, channels map 1:1 in order. Use System::setSoftwareFormat to specify the speaker count. */ + MONO, /* 1 speaker setup (monaural). */ + STEREO, /* 2 speaker setup (stereo) front left, front right. */ + QUAD, /* 4 speaker setup (4.0) front left, front right, surround left, surround right. */ + SURROUND, /* 5 speaker setup (5.0) front left, front right, center, surround left, surround right. */ + _5POINT1, /* 6 speaker setup (5.1) front left, front right, center, low frequency, surround left, surround right. */ + _7POINT1, /* 8 speaker setup (7.1) front left, front right, center, low frequency, surround left, surround right, back left, back right. */ + _7POINT1POINT4, /* 12 speaker setup (7.1.4) front left, front right, center, low frequency, surround left, surround right, back left, back right, top front left, top front right, top back left, top back right. */ + + MAX, /* Maximum number of speaker modes supported. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + Assigns an enumeration for a speaker index. + + [REMARKS] + + [SEE_ALSO] + System::setSpeakerPosition + System::getSpeakerPosition + ] + */ + public enum SPEAKER : int + { + FRONT_LEFT, /* The front left speaker */ + FRONT_RIGHT, /* The front right speaker */ + FRONT_CENTER, /* The front center speaker */ + LOW_FREQUENCY, /* The LFE or 'subwoofer' speaker */ + SURROUND_LEFT, /* The surround left (usually to the side) speaker */ + SURROUND_RIGHT, /* The surround right (usually to the side) speaker */ + BACK_LEFT, /* The back left speaker */ + BACK_RIGHT, /* The back right speaker */ + TOP_FRONT_LEFT, /* The top front left speaker */ + TOP_FRONT_RIGHT, /* The top front right speaker */ + TOP_BACK_LEFT, /* The top back left speaker */ + TOP_BACK_RIGHT, /* The top back right speaker */ + + MAX, /* Maximum number of speaker types supported. */ + } + + /* + [DEFINE] + [ + [NAME] + FMOD_CHANNELMASK + + [DESCRIPTION] + These are bitfields to describe for a certain number of channels in a signal, which channels are being represented.
    + For example, a signal could be 1 channel, but contain the LFE channel only.
    + + [REMARKS] + FMOD_CHANNELMASK_BACK_CENTER is not represented as an output speaker in fmod - but it is encountered in input formats and is down or upmixed appropriately to the nearest speakers.
    + + [SEE_ALSO] + DSP::setChannelFormat + DSP::getChannelFormat + FMOD_SPEAKERMODE + ] + */ + [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) + } + + /* + [ENUM] + [ + [DESCRIPTION] + When creating a multichannel sound, FMOD will pan them to their default speaker locations, for example a 6 channel sound will default to one channel per 5.1 output speaker.
    + Another example is a stereo sound. It will default to left = front left, right = front right.
    +
    + This is for sounds that are not 'default'. For example you might have a sound that is 6 channels but actually made up of 3 stereo pairs, that should all be located in front left, front right only. + + [REMARKS] + + [SEE_ALSO] + FMOD_CREATESOUNDEXINFO + ] + */ + public enum CHANNELORDER : int + { + DEFAULT, /* Left, Right, Center, LFE, Surround Left, Surround Right, Back Left, Back Right (see FMOD_SPEAKER enumeration) */ + WAVEFORMAT, /* Left, Right, Center, LFE, Back Left, Back Right, Surround Left, Surround Right (as per Microsoft .wav WAVEFORMAT structure master order) */ + PROTOOLS, /* Left, Center, Right, Surround Left, Surround Right, LFE */ + ALLMONO, /* Mono, Mono, Mono, Mono, Mono, Mono, ... (each channel all the way up to 32 channels are treated as if they were mono) */ + ALLSTEREO, /* Left, Right, Left, Right, Left, Right, ... (each pair of channels is treated as stereo all the way up to 32 channels) */ + ALSA, /* Left, Right, Surround Left, Surround Right, Center, LFE (as per Linux ALSA channel order) */ + + MAX, /* Maximum number of channel orderings supported. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + These are plugin types defined for use with the System::getNumPlugins, + System::getPluginInfo and System::unloadPlugin functions. + + [REMARKS] + + [SEE_ALSO] + System::getNumPlugins + System::getPluginInfo + System::unloadPlugin + ] + */ + public enum PLUGINTYPE : int + { + OUTPUT, /* The plugin type is an output module. FMOD mixed audio will play through one of these devices */ + CODEC, /* The plugin type is a file format codec. FMOD will use these codecs to load file formats for playback. */ + DSP, /* The plugin type is a DSP unit. FMOD will use these plugins as part of its DSP network to apply effects to output or generate sound in realtime. */ + + MAX, /* Maximum number of plugin types supported. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Used to support lists of plugins within the one file. + + [REMARKS] + The description field is either a pointer to FMOD_DSP_DESCRIPTION, FMOD_OUTPUT_DESCRIPTION, FMOD_CODEC_DESCRIPTION. + + This structure is returned from a plugin as a pointer to a list where the last entry has FMOD_PLUGINTYPE_MAX and + a null description pointer. + + [SEE_ALSO] + System::getNumNestedPlugins + System::getNestedPlugin + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct PLUGINLIST + { + PLUGINTYPE type; + IntPtr description; + } + + /* + [DEFINE] + [ + [NAME] + FMOD_INITFLAGS + + [DESCRIPTION] + Initialization flags. Use them with System::init in the *flags* parameter to change various behavior. + + [REMARKS] + Use System::setAdvancedSettings to adjust settings for some of the features that are enabled by these flags. + + [SEE_ALSO] + System::init + System::update + System::setAdvancedSettings + Channel::set3DOcclusion + ] + */ + [Flags] + public enum INITFLAGS : uint + { + NORMAL = 0x00000000, /* Initialize normally */ + STREAM_FROM_UPDATE = 0x00000001, /* No stream thread is created internally. Streams are driven from System::update. Mainly used with non-realtime outputs. */ + MIX_FROM_UPDATE = 0x00000002, /* Win/Wii/PS3/Xbox/Xbox 360 Only - FMOD Mixer thread is woken up to do a mix when System::update is called rather than waking periodically on its own timer. */ + _3D_RIGHTHANDED = 0x00000004, /* FMOD will treat +X as right, +Y as up and +Z as backwards (towards you). */ + CHANNEL_LOWPASS = 0x00000100, /* All FMOD_3D based voices will add a software lowpass filter effect into the DSP chain which is automatically used when Channel::set3DOcclusion is used or the geometry API. This also causes sounds to sound duller when the sound goes behind the listener, as a fake HRTF style effect. Use System::setAdvancedSettings to disable or adjust cutoff frequency for this feature. */ + CHANNEL_DISTANCEFILTER = 0x00000200, /* All FMOD_3D based voices will add a software lowpass and highpass filter effect into the DSP chain which will act as a distance-automated bandpass filter. Use System::setAdvancedSettings to adjust the center frequency. */ + PROFILE_ENABLE = 0x00010000, /* Enable TCP/IP based host which allows FMOD Designer or FMOD Profiler to connect to it, and view memory, CPU and the DSP network graph in real-time. */ + VOL0_BECOMES_VIRTUAL = 0x00020000, /* Any sounds that are 0 volume will go virtual and not be processed except for having their positions updated virtually. Use System::setAdvancedSettings to adjust what volume besides zero to switch to virtual at. */ + GEOMETRY_USECLOSEST = 0x00040000, /* With the geometry engine, only process the closest polygon rather than accumulating all polygons the sound to listener line intersects. */ + PREFER_DOLBY_DOWNMIX = 0x00080000, /* When using FMOD_SPEAKERMODE_5POINT1 with a stereo output device, use the Dolby Pro Logic II downmix algorithm instead of the SRS Circle Surround algorithm. */ + THREAD_UNSAFE = 0x00100000, /* Disables thread safety for API calls. Only use this if FMOD low level is being called from a single thread, and if Studio API is not being used! */ + PROFILE_METER_ALL = 0x00200000, /* Slower, but adds level metering for every single DSP unit in the graph. Use DSP::setMeteringEnabled to turn meters off individually. */ + DISABLE_SRS_HIGHPASSFILTER = 0x00400000 /* Using FMOD_SPEAKERMODE_5POINT1 with a stereo output device will enable the SRS Circle Surround downmixer. By default the SRS downmixer applies a high pass filter with a cutoff frequency of 80Hz. Use this flag to diable the high pass fitler, or use FMOD_INIT_PREFER_DOLBY_DOWNMIX to use the Dolby Pro Logic II downmix algorithm instead. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + These definitions describe the type of song being played. + + [REMARKS] + + [SEE_ALSO] + Sound::getFormat + ] + */ + public enum SOUND_TYPE : int + { + UNKNOWN, /* 3rd party / unknown plugin format. */ + AIFF, /* AIFF. */ + ASF, /* Microsoft Advanced Systems Format (ie WMA/ASF/WMV). */ + DLS, /* Sound font / downloadable sound bank. */ + FLAC, /* FLAC lossless codec. */ + FSB, /* FMOD Sample Bank. */ + IT, /* Impulse Tracker. */ + MIDI, /* MIDI. extracodecdata is a pointer to an FMOD_MIDI_EXTRACODECDATA structure. */ + MOD, /* Protracker / Fasttracker MOD. */ + MPEG, /* MP2/MP3 MPEG. */ + OGGVORBIS, /* Ogg vorbis. */ + PLAYLIST, /* Information only from ASX/PLS/M3U/WAX playlists */ + RAW, /* Raw PCM data. */ + S3M, /* ScreamTracker 3. */ + USER, /* User created sound. */ + WAV, /* Microsoft WAV. */ + XM, /* FastTracker 2 XM. */ + XMA, /* Xbox360 XMA */ + AUDIOQUEUE, /* iPhone hardware decoder, supports AAC, ALAC and MP3. extracodecdata is a pointer to an FMOD_AUDIOQUEUE_EXTRACODECDATA structure. */ + AT9, /* PS4 / PSVita ATRAC 9 format */ + VORBIS, /* Vorbis */ + MEDIA_FOUNDATION,/* Windows Store Application built in system codecs */ + MEDIACODEC, /* Android MediaCodec */ + FADPCM, /* FMOD Adaptive Differential Pulse Code Modulation */ + + MAX, /* Maximum number of sound types supported. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + These definitions describe the native format of the hardware or software buffer that will be used. + + [REMARKS] + This is the format the native hardware or software buffer will be or is created in. + + [SEE_ALSO] + System::createSoundEx + Sound::getFormat + ] + */ + public enum SOUND_FORMAT : int + { + NONE, /* Unitialized / unknown */ + PCM8, /* 8bit integer PCM data */ + PCM16, /* 16bit integer PCM data */ + PCM24, /* 24bit integer PCM data */ + PCM32, /* 32bit integer PCM data */ + PCMFLOAT, /* 32bit floating point PCM data */ + BITSTREAM, /* Sound data is in its native compressed format. */ + + MAX /* Maximum number of sound formats supported. */ + } + + + /* + [DEFINE] + [ + [NAME] + FMOD_MODE + + [DESCRIPTION] + Sound description bitfields, bitwise OR them together for loading and describing sounds. + + [REMARKS] + By default a sound will open as a static sound that is decompressed fully into memory to PCM. (ie equivalent of FMOD_CREATESAMPLE)
    + To have a sound stream instead, use FMOD_CREATESTREAM, or use the wrapper function System::createStream.
    + Some opening modes (ie FMOD_OPENUSER, FMOD_OPENMEMORY, FMOD_OPENMEMORY_POINT, FMOD_OPENRAW) will need extra information.
    + This can be provided using the FMOD_CREATESOUNDEXINFO structure. +
    + Specifying FMOD_OPENMEMORY_POINT will POINT to your memory rather allocating its own sound buffers and duplicating it internally.
    + This means you cannot free the memory while FMOD is using it, until after Sound::release is called. + With FMOD_OPENMEMORY_POINT, for PCM formats, only WAV, FSB, and RAW are supported. For compressed formats, only those formats supported by FMOD_CREATECOMPRESSEDSAMPLE are supported.
    + With FMOD_OPENMEMORY_POINT and FMOD_OPENRAW or PCM, if using them together, note that you must pad the data on each side by 16 bytes. This is so fmod can modify the ends of the data for looping/interpolation/mixing purposes. If a wav file, you will need to insert silence, and then reset loop points to stop the playback from playing that silence.
    +
    + Xbox 360 memory On Xbox 360 Specifying FMOD_OPENMEMORY_POINT to a virtual memory address will cause FMOD_ERR_INVALID_ADDRESS + to be returned. Use physical memory only for this functionality.
    +
    + FMOD_LOWMEM is used on a sound if you want to minimize the memory overhead, by having FMOD not allocate memory for certain + features that are not likely to be used in a game environment. These are :
    + 1. Sound::getName functionality is removed. 256 bytes per sound is saved.
    + + [SEE_ALSO] + System::createSound + System::createStream + Sound::setMode + Sound::getMode + Channel::setMode + Channel::getMode + Sound::set3DCustomRolloff + Channel::set3DCustomRolloff + Sound::getOpenState + ] + */ + [Flags] + public enum MODE : uint + { + DEFAULT = 0x00000000, /* Default for all modes listed below. FMOD_LOOP_OFF, FMOD_2D, FMOD_3D_WORLDRELATIVE, FMOD_3D_INVERSEROLLOFF */ + LOOP_OFF = 0x00000001, /* For non looping sounds. (default). Overrides FMOD_LOOP_NORMAL / FMOD_LOOP_BIDI. */ + LOOP_NORMAL = 0x00000002, /* For forward looping sounds. */ + LOOP_BIDI = 0x00000004, /* For bidirectional looping sounds. (only works on software mixed static sounds). */ + _2D = 0x00000008, /* Ignores any 3d processing. (default). */ + _3D = 0x00000010, /* Makes the sound positionable in 3D. Overrides FMOD_2D. */ + CREATESTREAM = 0x00000080, /* Decompress at runtime, streaming from the source provided (standard stream). Overrides FMOD_CREATESAMPLE. */ + CREATESAMPLE = 0x00000100, /* Decompress at loadtime, decompressing or decoding whole file into memory as the target sample format. (standard sample). */ + CREATECOMPRESSEDSAMPLE = 0x00000200, /* Load MP2, MP3, IMAADPCM or XMA into memory and leave it compressed. During playback the FMOD software mixer will decode it in realtime as a 'compressed sample'. Can only be used in combination with FMOD_SOFTWARE. */ + OPENUSER = 0x00000400, /* Opens a user created static sample or stream. Use FMOD_CREATESOUNDEXINFO to specify format and/or read callbacks. If a user created 'sample' is created with no read callback, the sample will be empty. Use FMOD_Sound_Lock and FMOD_Sound_Unlock to place sound data into the sound if this is the case. */ + OPENMEMORY = 0x00000800, /* "name_or_data" will be interpreted as a pointer to memory instead of filename for creating sounds. */ + OPENMEMORY_POINT = 0x10000000, /* "name_or_data" will be interpreted as a pointer to memory instead of filename for creating sounds. Use FMOD_CREATESOUNDEXINFO to specify length. This differs to FMOD_OPENMEMORY in that it uses the memory as is, without duplicating the memory into its own buffers. Cannot be freed after open, only after Sound::release. Will not work if the data is compressed and FMOD_CREATECOMPRESSEDSAMPLE is not used. */ + OPENRAW = 0x00001000, /* Will ignore file format and treat as raw pcm. User may need to declare if data is FMOD_SIGNED or FMOD_UNSIGNED */ + OPENONLY = 0x00002000, /* Just open the file, dont prebuffer or read. Good for fast opens for info, or when sound::readData is to be used. */ + ACCURATETIME = 0x00004000, /* For FMOD_CreateSound - for accurate FMOD_Sound_GetLength / FMOD_Channel_SetPosition on VBR MP3, AAC and MOD/S3M/XM/IT/MIDI files. Scans file first, so takes longer to open. FMOD_OPENONLY does not affect this. */ + MPEGSEARCH = 0x00008000, /* For corrupted / bad MP3 files. This will search all the way through the file until it hits a valid MPEG header. Normally only searches for 4k. */ + NONBLOCKING = 0x00010000, /* For opening sounds and getting streamed subsounds (seeking) asyncronously. Use Sound::getOpenState to poll the state of the sound as it opens or retrieves the subsound in the background. */ + UNIQUE = 0x00020000, /* Unique sound, can only be played one at a time */ + _3D_HEADRELATIVE = 0x00040000, /* Make the sound's position, velocity and orientation relative to the listener. */ + _3D_WORLDRELATIVE = 0x00080000, /* Make the sound's position, velocity and orientation absolute (relative to the world). (DEFAULT) */ + _3D_INVERSEROLLOFF = 0x00100000, /* This sound will follow the inverse rolloff model where mindistance = full volume, maxdistance = where sound stops attenuating, and rolloff is fixed according to the global rolloff factor. (DEFAULT) */ + _3D_LINEARROLLOFF = 0x00200000, /* This sound will follow a linear rolloff model where mindistance = full volume, maxdistance = silence. */ + _3D_LINEARSQUAREROLLOFF= 0x00400000, /* This sound will follow a linear-square rolloff model where mindistance = full volume, maxdistance = silence. Rolloffscale is ignored. */ + _3D_INVERSETAPEREDROLLOFF = 0x00800000, /* This sound will follow the inverse rolloff model at distances close to mindistance and a linear-square rolloff close to maxdistance. */ + _3D_CUSTOMROLLOFF = 0x04000000, /* This sound will follow a rolloff model defined by Sound::set3DCustomRolloff / Channel::set3DCustomRolloff. */ + _3D_IGNOREGEOMETRY = 0x40000000, /* Is not affect by geometry occlusion. If not specified in Sound::setMode, or Channel::setMode, the flag is cleared and it is affected by geometry again. */ + IGNORETAGS = 0x02000000, /* Skips id3v2/asf/etc tag checks when opening a sound, to reduce seek/read overhead when opening files (helps with CD performance). */ + LOWMEM = 0x08000000, /* Removes some features from samples to give a lower memory overhead, like Sound::getName. */ + LOADSECONDARYRAM = 0x20000000, /* Load sound into the secondary RAM of supported platform. On PS3, sounds will be loaded into RSX/VRAM. */ + VIRTUAL_PLAYFROMSTART = 0x80000000 /* For sounds that start virtual (due to being quiet or low importance), instead of swapping back to audible, and playing at the correct offset according to time, this flag makes the sound play from the start. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + These values describe what state a sound is in after FMOD_NONBLOCKING has been used to open it. + + [REMARKS] + With streams, if you are using FMOD_NONBLOCKING, note that if the user calls Sound::getSubSound, a stream will go into FMOD_OPENSTATE_SEEKING state and sound related commands will return FMOD_ERR_NOTREADY.
    + With streams, if you are using FMOD_NONBLOCKING, note that if the user calls Channel::getPosition, a stream will go into FMOD_OPENSTATE_SETPOSITION state and sound related commands will return FMOD_ERR_NOTREADY.
    + + [SEE_ALSO] + Sound::getOpenState + FMOD_MODE + ] + */ + public enum OPENSTATE : int + { + READY = 0, /* Opened and ready to play */ + LOADING, /* Initial load in progress */ + ERROR, /* Failed to open - file not found, out of memory etc. See return value of Sound::getOpenState for what happened. */ + CONNECTING, /* Connecting to remote host (internet sounds only) */ + BUFFERING, /* Buffering data */ + SEEKING, /* Seeking to subsound and re-flushing stream buffer. */ + PLAYING, /* Ready and playing, but not possible to release at this time without stalling the main thread. */ + SETPOSITION, /* Seeking within a stream to a different position. */ + + MAX, /* Maximum number of open state types. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + These flags are used with SoundGroup::setMaxAudibleBehavior to determine what happens when more sounds + are played than are specified with SoundGroup::setMaxAudible. + + [REMARKS] + When using FMOD_SOUNDGROUP_BEHAVIOR_MUTE, SoundGroup::setMuteFadeSpeed can be used to stop a sudden transition. + Instead, the time specified will be used to cross fade between the sounds that go silent and the ones that become audible. + + [SEE_ALSO] + SoundGroup::setMaxAudibleBehavior + SoundGroup::getMaxAudibleBehavior + SoundGroup::setMaxAudible + SoundGroup::getMaxAudible + SoundGroup::setMuteFadeSpeed + SoundGroup::getMuteFadeSpeed + ] + */ + public enum SOUNDGROUP_BEHAVIOR : int + { + BEHAVIOR_FAIL, /* Any sound played that puts the sound count over the SoundGroup::setMaxAudible setting, will simply fail during System::playSound. */ + BEHAVIOR_MUTE, /* Any sound played that puts the sound count over the SoundGroup::setMaxAudible setting, will be silent, then if another sound in the group stops the sound that was silent before becomes audible again. */ + BEHAVIOR_STEALLOWEST, /* Any sound played that puts the sound count over the SoundGroup::setMaxAudible setting, will steal the quietest / least important sound playing in the group. */ + + MAX, /* Maximum number of sound group behaviors. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + These callback types are used with Channel::setCallback. + + [REMARKS] + Each callback has commanddata parameters passed as int unique to the type of callback.
    + See reference to FMOD_CHANNELCONTROL_CALLBACK to determine what they might mean for each type of callback.
    +
    + Note! Currently the user must call System::update for these callbacks to trigger! + + [SEE_ALSO] + Channel::setCallback + ChannelGroup::setCallback + FMOD_CHANNELCONTROL_CALLBACK + System::update + ] + */ + public enum CHANNELCONTROL_CALLBACK_TYPE : int + { + END, /* Called when a sound ends. */ + VIRTUALVOICE, /* Called when a voice is swapped out or swapped in. */ + SYNCPOINT, /* Called when a syncpoint is encountered. Can be from wav file markers. */ + OCCLUSION, /* Called when the channel has its geometry occlusion value calculated. Can be used to clamp or change the value. */ + + MAX, /* Maximum number of callback types supported. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + These enums denote special types of node within a DSP chain. + + [REMARKS] + By default there is 1 fader for a ChannelGroup or Channel, and it is the head. + + [SEE_ALSO] + Channel::getDSP + ChannelGroup::getDSP + ChannelControl::getNumDSPs + ChannelControl::setDSPIndex + ] + */ + public struct CHANNELCONTROL_DSP_INDEX + { + public const int HEAD = -1; /* Head of the DSP chain. Equivalent of index 0. */ + public const int FADER = -2; /* Built in fader DSP. */ + public const int TAIL = -3; /* Tail of the DSP chain. Equivalent of the number of dsps minus 1. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + Used to distinguish the instance type passed into FMOD_ERROR_CALLBACK. + + [REMARKS] + Cast the instance of FMOD_ERROR_CALLBACK to the appropriate class indicated by this enum. + + [SEE_ALSO] + ] + */ + 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 + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure that is passed into FMOD_SYSTEM_CALLBACK for the FMOD_SYSTEM_CALLBACK_ERROR callback type. + + [REMARKS] + The instance pointer will be a type corresponding to the instanceType enum. + + [SEE_ALSO] + FMOD_ERRORCALLBACK_INSTANCETYPE + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct ERRORCALLBACK_INFO + { + public RESULT result; /* Error code result */ + public ERRORCALLBACK_INSTANCETYPE instancetype; /* Type of instance the error occurred on */ + public IntPtr instance; /* Instance pointer */ + public StringWrapper functionname; /* Function that the error occurred on */ + public StringWrapper functionparams; /* Function parameters that the error ocurred on */ + } + + /* + [DEFINE] + [ + [NAME] + FMOD_SYSTEM_CALLBACK_TYPE + + [DESCRIPTION] + These callback types are used with System::setCallback. + + [REMARKS] + Each callback has commanddata parameters passed as void* unique to the type of callback.
    + See reference to FMOD_SYSTEM_CALLBACK to determine what they might mean for each type of callback.
    +
    + Note! Using FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED (on Mac only) requires the application to be running an event loop which will allow external changes to device list to be detected by FMOD.
    +
    + Note! The 'system' object pointer will be null for FMOD_SYSTEM_CALLBACK_THREADCREATED and FMOD_SYSTEM_CALLBACK_MEMORYALLOCATIONFAILED callbacks. + + [SEE_ALSO] + System::setCallback + System::update + DSP::addInput + ] + */ + [Flags] + public enum SYSTEM_CALLBACK_TYPE : uint + { + DEVICELISTCHANGED = 0x00000001, /* Called from System::update when the enumerated list of devices has changed. */ + DEVICELOST = 0x00000002, /* Called from System::update when an output device has been lost due to control panel parameter changes and FMOD cannot automatically recover. */ + MEMORYALLOCATIONFAILED = 0x00000004, /* Called directly when a memory allocation fails somewhere in FMOD. (NOTE - 'system' will be NULL in this callback type.)*/ + THREADCREATED = 0x00000008, /* Called directly when a thread is created. (NOTE - 'system' will be NULL in this callback type.) */ + BADDSPCONNECTION = 0x00000010, /* Called when a bad connection was made with DSP::addInput. Usually called from mixer thread because that is where the connections are made. */ + PREMIX = 0x00000020, /* Called each tick before a mix update happens. */ + POSTMIX = 0x00000040, /* Called each tick after a mix update happens. */ + ERROR = 0x00000080, /* Called when each API function returns an error code, including delayed async functions. */ + MIDMIX = 0x00000100, /* Called each tick in mix update after clocks have been updated before the main mix occurs. */ + THREADDESTROYED = 0x00000200, /* Called directly when a thread is destroyed. */ + PREUPDATE = 0x00000400, /* Called at start of System::update function. */ + POSTUPDATE = 0x00000800, /* Called at end of System::update function. */ + RECORDLISTCHANGED = 0x00001000, /* Called from System::update when the enumerated list of recording devices has changed. */ + ALL = 0xFFFFFFFF, /* Pass this mask to System::setCallback to receive all callback types. */ + } + + /* + FMOD Callbacks + */ + public delegate RESULT ASYNCREADINFO_DONE_CALLBACK(IntPtr info, RESULT result); + + public delegate RESULT DEBUG_CALLBACK (DEBUG_FLAGS flags, StringWrapper file, int line, StringWrapper func, StringWrapper message); + + public delegate RESULT SYSTEM_CALLBACK (IntPtr systemraw, SYSTEM_CALLBACK_TYPE type, IntPtr commanddata1, IntPtr commanddata2, IntPtr userdata); + + public delegate RESULT CHANNEL_CALLBACK (IntPtr channelraw, CHANNELCONTROL_TYPE controltype, CHANNELCONTROL_CALLBACK_TYPE type, IntPtr commanddata1, IntPtr commanddata2); + + public delegate RESULT SOUND_NONBLOCKCALLBACK (IntPtr soundraw, RESULT result); + public delegate RESULT SOUND_PCMREADCALLBACK (IntPtr soundraw, IntPtr data, uint datalen); + public delegate RESULT SOUND_PCMSETPOSCALLBACK (IntPtr soundraw, int subsound, uint position, TIMEUNIT postype); + + public delegate RESULT FILE_OPENCALLBACK (StringWrapper name, ref uint filesize, ref IntPtr handle, IntPtr userdata); + public delegate RESULT FILE_CLOSECALLBACK (IntPtr handle, IntPtr userdata); + public delegate RESULT FILE_READCALLBACK (IntPtr handle, IntPtr buffer, uint sizebytes, ref uint bytesread, IntPtr userdata); + public delegate RESULT FILE_SEEKCALLBACK (IntPtr handle, uint pos, IntPtr userdata); + public delegate RESULT FILE_ASYNCREADCALLBACK (IntPtr handle, IntPtr info, IntPtr userdata); + public delegate RESULT FILE_ASYNCCANCELCALLBACK (IntPtr handle, IntPtr userdata); + + public delegate IntPtr MEMORY_ALLOC_CALLBACK (uint size, MEMORY_TYPE type, StringWrapper sourcestr); + public delegate IntPtr MEMORY_REALLOC_CALLBACK (IntPtr ptr, uint size, MEMORY_TYPE type, StringWrapper sourcestr); + public delegate void MEMORY_FREE_CALLBACK (IntPtr ptr, MEMORY_TYPE type, StringWrapper sourcestr); + + public delegate float CB_3D_ROLLOFFCALLBACK (IntPtr channelraw, float distance); + + /* + [ENUM] + [ + [DESCRIPTION] + List of interpolation types that the FMOD Ex software mixer supports. + + [REMARKS] + The default resampler type is FMOD_DSP_RESAMPLER_LINEAR.
    + Use System::setSoftwareFormat to tell FMOD the resampling quality you require for FMOD_SOFTWARE based sounds. + + [SEE_ALSO] + System::setSoftwareFormat + System::getSoftwareFormat + ] + */ + public enum DSP_RESAMPLER : int + { + DEFAULT, /* Default interpolation method. Currently equal to FMOD_DSP_RESAMPLER_LINEAR. */ + NOINTERP, /* No interpolation. High frequency aliasing hiss will be audible depending on the sample rate of the sound. */ + LINEAR, /* Linear interpolation (default method). Fast and good quality, causes very slight lowpass effect on low frequency sounds. */ + CUBIC, /* Cubic interpolation. Slower than linear interpolation but better quality. */ + SPLINE, /* 5 point spline interpolation. Slowest resampling method but best quality. */ + + MAX, /* Maximum number of resample methods supported. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + List of connection types between 2 DSP nodes. + + [REMARKS] + FMOD_DSP_CONNECTION_TYPE_STANDARD
    + ----------------------------------
    + Default DSPConnection type. Audio is mixed from the input to the output DSP's audible buffer, meaning it will be part of the audible signal. A standard connection will execute its input DSP if it has not been executed before.
    +
    + FMOD_DSP_CONNECTION_TYPE_SIDECHAIN
    + ----------------------------------
    + Sidechain DSPConnection type. Audio is mixed from the input to the output DSP's sidechain buffer, meaning it will NOT be part of the audible signal. A sidechain connection will execute its input DSP if it has not been executed before.
    + The purpose of the seperate sidechain buffer in a DSP, is so that the DSP effect can privately access for analysis purposes. An example of use in this case, could be a compressor which analyzes the signal, to control its own effect parameters (ie a compression level or gain).
    +
    + For the effect developer, to accept sidechain data, the sidechain data will appear in the FMOD_DSP_STATE struct which is passed into the read callback of a DSP unit.
    + FMOD_DSP_STATE::sidechaindata and FMOD_DSP::sidechainchannels will hold the mixed result of any sidechain data flowing into it.
    +
    + FMOD_DSP_CONNECTION_TYPE_SEND
    + -----------------------------
    + Send DSPConnection type. Audio is mixed from the input to the output DSP's audible buffer, meaning it will be part of the audible signal. A send connection will NOT execute its input DSP if it has not been executed before.
    + A send connection will only read what exists at the input's buffer at the time of executing the output DSP unit (which can be considered the 'return')
    +
    + FMOD_DSP_CONNECTION_TYPE_SEND_SIDECHAIN
    + ---------------------------------------
    + Send sidechain DSPConnection type. Audio is mixed from the input to the output DSP's sidechain buffer, meaning it will NOT be part of the audible signal. A send sidechain connection will NOT execute its input DSP if it has not been executed before.
    + A send sidechain connection will only read what exists at the input's buffer at the time of executing the output DSP unit (which can be considered the 'sidechain return'). +
    + For the effect developer, to accept sidechain data, the sidechain data will appear in the FMOD_DSP_STATE struct which is passed into the read callback of a DSP unit.
    + FMOD_DSP_STATE::sidechaindata and FMOD_DSP::sidechainchannels will hold the mixed result of any sidechain data flowing into it. + + [SEE_ALSO] + DSP::addInput + DSPConnection::getType + ] + */ + public enum DSPCONNECTION_TYPE : int + { + STANDARD, /* Default connection type. Audio is mixed from the input to the output DSP's audible buffer. */ + SIDECHAIN, /* Sidechain connection type. Audio is mixed from the input to the output DSP's sidechain buffer. */ + SEND, /* Send connection type. Audio is mixed from the input to the output DSP's audible buffer, but the input is NOT executed, only copied from. A standard connection or sidechain needs to make an input execute to generate data. */ + SEND_SIDECHAIN, /* Send sidechain connection type. Audio is mixed from the input to the output DSP's sidechain buffer, but the input is NOT executed, only copied from. A standard connection or sidechain needs to make an input execute to generate data. */ + + MAX, /* Maximum number of DSP connection types supported. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + List of tag types that could be stored within a sound. These include id3 tags, metadata from netstreams and vorbis/asf data. + + [REMARKS] + + [SEE_ALSO] + Sound::getTag + ] + */ + public enum TAGTYPE : int + { + UNKNOWN = 0, + ID3V1, + ID3V2, + VORBISCOMMENT, + SHOUTCAST, + ICECAST, + ASF, + MIDI, + PLAYLIST, + FMOD, + USER, + + MAX /* Maximum number of tag types supported. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + List of data types that can be returned by Sound::getTag + + [REMARKS] + + [SEE_ALSO] + Sound::getTag + ] + */ + public enum TAGDATATYPE : int + { + BINARY = 0, + INT, + FLOAT, + STRING, + STRING_UTF16, + STRING_UTF16BE, + STRING_UTF8, + CDTOC, + + MAX /* Maximum number of tag datatypes supported. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure describing a piece of tag data. + + [REMARKS] + Members marked with [w] mean the user sets the value before passing it to the function. + Members marked with [r] mean FMOD sets the value to be used after the function exits. + + [SEE_ALSO] + Sound::getTag + TAGTYPE + TAGDATATYPE + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct TAG + { + public TAGTYPE type; /* [r] The type of this tag. */ + public TAGDATATYPE datatype; /* [r] The type of data that this tag contains */ + public StringWrapper name; /* [r] The name of this tag i.e. "TITLE", "ARTIST" etc. */ + public IntPtr data; /* [r] Pointer to the tag data - its format is determined by the datatype member */ + public uint datalen; /* [r] Length of the data contained in this tag */ + public bool updated; /* [r] True if this tag has been updated since last being accessed with Sound::getTag */ + } + + + /* + [DEFINE] + [ + [NAME] + FMOD_TIMEUNIT + + [DESCRIPTION] + List of time types that can be returned by Sound::getLength and used with Channel::setPosition or Channel::getPosition. + + [REMARKS] + + [SEE_ALSO] + Sound::getLength + Channel::setPosition + Channel::getPosition + ] + */ + [Flags] + public enum TIMEUNIT : uint + { + MS = 0x00000001, /* Milliseconds. */ + PCM = 0x00000002, /* PCM Samples, related to milliseconds * samplerate / 1000. */ + PCMBYTES = 0x00000004, /* Bytes, related to PCM samples * channels * datawidth (ie 16bit = 2 bytes). */ + RAWBYTES = 0x00000008, /* Raw file bytes of (compressed) sound data (does not include headers). Only used by Sound::getLength and Channel::getPosition. */ + PCMFRACTION = 0x00000010, /* Fractions of 1 PCM sample. Unsigned int range 0 to 0xFFFFFFFF. Used for sub-sample granularity for DSP purposes. */ + MODORDER = 0x00000100, /* MOD/S3M/XM/IT. Order in a sequenced module format. Use Sound::getFormat to determine the format. */ + MODROW = 0x00000200, /* MOD/S3M/XM/IT. Current row in a sequenced module format. Cannot use with Channel::setPosition. Sound::getLength will return the number if rows in the currently playing or seeked to pattern. */ + MODPATTERN = 0x00000400, /* MOD/S3M/XM/IT. Current pattern in a sequenced module format. Cannot use with Channel::setPosition. Sound::getLength will return the number of patterns in the song and Channel::getPosition will return the currently playing pattern. */ + } + + /* + [DEFINE] + [ + [NAME] + FMOD_PORT_INDEX + + [DESCRIPTION] + + [REMARKS] + + [SEE_ALSO] + System::AttachChannelGroupToPort + ] + */ + public struct PORT_INDEX + { + public const ulong NONE = 0xFFFFFFFFFFFFFFFF; + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Use this structure with System::createSound when more control is needed over loading. + The possible reasons to use this with System::createSound are: + + - Loading a file from memory. + - Loading a file from within another larger (possibly wad/pak) file, by giving the loader an offset and length. + - To create a user created / non file based sound. + - To specify a starting subsound to seek to within a multi-sample sounds (ie FSB/DLS) when created as a stream. + - To specify which subsounds to load for multi-sample sounds (ie FSB/DLS) so that memory is saved and only a subset is actually loaded/read from disk. + - To specify 'piggyback' read and seek callbacks for capture of sound data as fmod reads and decodes it. Useful for ripping decoded PCM data from sounds as they are loaded / played. + - To specify a MIDI DLS sample set file to load when opening a MIDI file. + + See below on what members to fill for each of the above types of sound you want to create. + + [REMARKS] + This structure is optional! Specify 0 or NULL in System::createSound if you don't need it! + + Loading a file from memory. + + - Create the sound using the FMOD_OPENMEMORY flag. + - Mandatory. Specify 'length' for the size of the memory block in bytes. + - Other flags are optional. + + Loading a file from within another larger (possibly wad/pak) file, by giving the loader an offset and length. + + - Mandatory. Specify 'fileoffset' and 'length'. + - Other flags are optional. + + To create a user created / non file based sound. + + - Create the sound using the FMOD_OPENUSER flag. + - Mandatory. Specify 'defaultfrequency, 'numchannels' and 'format'. + - Other flags are optional. + + To specify a starting subsound to seek to and flush with, within a multi-sample stream (ie FSB/DLS). + + - Mandatory. Specify 'initialsubsound'. + + To specify which subsounds to load for multi-sample sounds (ie FSB/DLS) so that memory is saved and only a subset is actually loaded/read from disk. + + - Mandatory. Specify 'inclusionlist' and 'inclusionlistnum'. + + To specify 'piggyback' read and seek callbacks for capture of sound data as fmod reads and decodes it. Useful for ripping decoded PCM data from sounds as they are loaded / played. + + - Mandatory. Specify 'pcmreadcallback' and 'pcmseekcallback'. + + To specify a MIDI DLS sample set file to load when opening a MIDI file. + + - Mandatory. Specify 'dlsname'. + + Setting the 'decodebuffersize' is for cpu intensive codecs that may be causing stuttering, not file intensive codecs (ie those from CD or netstreams) which are normally + altered with System::setStreamBufferSize. As an example of cpu intensive codecs, an mp3 file will take more cpu to decode than a PCM wav file. + + If you have a stuttering effect, then it is using more cpu than the decode buffer playback rate can keep up with. Increasing the decode buffersize will most likely solve this problem. + + FSB codec. If inclusionlist and numsubsounds are used together, this will trigger a special mode where subsounds are shuffled down to save memory. (useful for large FSB + files where you only want to load 1 sound). There will be no gaps, ie no null subsounds. As an example, if there are 10,000 subsounds and there is an inclusionlist with only 1 entry, + and numsubsounds = 1, then subsound 0 will be that entry, and there will only be the memory allocated for 1 subsound. Previously there would still be 10,000 subsound pointers and other + associated codec entries allocated along with it multiplied by 10,000. + + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.
    + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + System::createSound + System::setStreamBufferSize + FMOD_MODE + FMOD_SOUND_FORMAT + FMOD_SOUND_TYPE + FMOD_CHANNELMASK + FMOD_CHANNELORDER + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct CREATESOUNDEXINFO + { + public int cbsize; /* [w] Size of this structure. This is used so the structure can be expanded in the future and still work on older versions of FMOD Ex. */ + public uint length; /* [w] Optional. Specify 0 to ignore. Size in bytes of file to load, or sound to create (in this case only if FMOD_OPENUSER is used). Required if loading from memory. If 0 is specified, then it will use the size of the file (unless loading from memory then an error will be returned). */ + public uint fileoffset; /* [w] Optional. Specify 0 to ignore. Offset from start of the file to start loading from. This is useful for loading files from inside big data files. */ + public int numchannels; /* [w] Optional. Specify 0 to ignore. Number of channels in a sound specified only if OPENUSER is used. */ + public int defaultfrequency; /* [w] Optional. Specify 0 to ignore. Default frequency of sound in a sound specified only if OPENUSER is used. Other formats use the frequency determined by the file format. */ + public SOUND_FORMAT format; /* [w] Optional. Specify 0 or SOUND_FORMAT_NONE to ignore. Format of the sound specified only if OPENUSER is used. Other formats use the format determined by the file format. */ + public uint decodebuffersize; /* [w] Optional. Specify 0 to ignore. For streams. This determines the size of the double buffer (in PCM samples) that a stream uses. Use this for user created streams if you want to determine the size of the callback buffer passed to you. Specify 0 to use FMOD's default size which is currently equivalent to 400ms of the sound format created/loaded. */ + public int initialsubsound; /* [w] Optional. Specify 0 to ignore. In a multi-sample file format such as .FSB/.DLS/.SF2, specify the initial subsound to seek to, only if CREATESTREAM is used. */ + public int numsubsounds; /* [w] Optional. Specify 0 to ignore or have no subsounds. In a user created multi-sample sound, specify the number of subsounds within the sound that are accessable with Sound::getSubSound / SoundGetSubSound. */ + public IntPtr inclusionlist; /* [w] Optional. Specify 0 to ignore. In a multi-sample format such as .FSB/.DLS/.SF2 it may be desirable to specify only a subset of sounds to be loaded out of the whole file. This is an array of subsound indicies to load into memory when created. */ + public int inclusionlistnum; /* [w] Optional. Specify 0 to ignore. This is the number of integers contained within the */ + public IntPtr pcmreadcallback_handle; /* [w] Optional. Specify 0 to ignore. Callback to 'piggyback' on FMOD's read functions and accept or even write PCM data while FMOD is opening the sound. Used for user sounds created with OPENUSER or for capturing decoded data as FMOD reads it. */ + public IntPtr pcmsetposcallback_handle; /* [w] Optional. Specify 0 to ignore. Callback for when the user calls a seeking function such as Channel::setPosition within a multi-sample sound, and for when it is opened.*/ + public IntPtr nonblockcallback_handle; /* [w] Optional. Specify 0 to ignore. Callback for successful completion, or error while loading a sound that used the FMOD_NONBLOCKING flag.*/ + public IntPtr dlsname; /* [w] Optional. Specify 0 to ignore. Filename for a DLS or SF2 sample set when loading a MIDI file. If not specified, on windows it will attempt to open /windows/system32/drivers/gm.dls, otherwise the MIDI will fail to open. */ + public IntPtr encryptionkey; /* [w] Optional. Specify 0 to ignore. Key for encrypted FSB file. Without this key an encrypted FSB file will not load. */ + public int maxpolyphony; /* [w] Optional. Specify 0 to ingore. For sequenced formats with dynamic channel allocation such as .MID and .IT, this specifies the maximum voice count allowed while playing. .IT defaults to 64. .MID defaults to 32. */ + public IntPtr userdata; /* [w] Optional. Specify 0 to ignore. This is user data to be attached to the sound during creation. Access via Sound::getUserData. */ + public SOUND_TYPE suggestedsoundtype; /* [w] Optional. Specify 0 or FMOD_SOUND_TYPE_UNKNOWN to ignore. Instead of scanning all codec types, use this to speed up loading by making it jump straight to this codec. */ + public IntPtr fileuseropen_handle; /* [w] Optional. Specify 0 to ignore. Callback for opening this file. */ + public IntPtr fileuserclose_handle; /* [w] Optional. Specify 0 to ignore. Callback for closing this file. */ + public IntPtr fileuserread_handle; /* [w] Optional. Specify 0 to ignore. Callback for reading from this file. */ + public IntPtr fileuserseek_handle; /* [w] Optional. Specify 0 to ignore. Callback for seeking within this file. */ + public IntPtr fileuserasyncread_handle; /* [w] Optional. Specify 0 to ignore. Callback for asyncronously reading from this file. */ + public IntPtr fileuserasynccancel_handle; /* [w] Optional. Specify 0 to ignore. Callback for cancelling an asyncronous read. */ + public IntPtr fileuserdata; /* [w] Optional. Specify 0 to ignore. User data to be passed into the file callbacks. */ + public int filebuffersize; /* [w] Optional. Specify 0 to ignore. Buffer size for reading the file, -1 to disable buffering, or 0 for system default. */ + public CHANNELORDER channelorder; /* [w] Optional. Specify 0 to ignore. Use this to differ the way fmod maps multichannel sounds to speakers. See FMOD_CHANNELORDER for more. */ + public CHANNELMASK channelmask; /* [w] Optional. Specify 0 to ignore. Use this to differ the way fmod maps multichannel sounds to speakers. See FMOD_CHANNELMASK for more. */ + public IntPtr initialsoundgroup; /* [w] Optional. Specify 0 to ignore. Specify a sound group if required, to put sound in as it is created. */ + public uint initialseekposition; /* [w] Optional. Specify 0 to ignore. For streams. Specify an initial position to seek the stream to. */ + public TIMEUNIT initialseekpostype; /* [w] Optional. Specify 0 to ignore. For streams. Specify the time unit for the position set in initialseekposition. */ + public int ignoresetfilesystem; /* [w] Optional. Specify 0 to ignore. Set to 1 to use fmod's built in file system. Ignores setFileSystem callbacks and also FMOD_CREATESOUNEXINFO file callbacks. Useful for specific cases where you don't want to use your own file system but want to use fmod's file system (ie net streaming). */ + public uint audioqueuepolicy; /* [w] Optional. Specify 0 or FMOD_AUDIOQUEUE_CODECPOLICY_DEFAULT to ignore. Policy used to determine whether hardware or software is used for decoding, see FMOD_AUDIOQUEUE_CODECPOLICY for options (iOS >= 3.0 required, otherwise only hardware is available) */ + public uint minmidigranularity; /* [w] Optional. Specify 0 to ignore. Allows you to set a minimum desired MIDI mixer granularity. Values smaller than 512 give greater than default accuracy at the cost of more CPU and vise versa. Specify 0 for default (512 samples). */ + public int nonblockthreadid; /* [w] Optional. Specify 0 to ignore. Specifies a thread index to execute non blocking load on. Allows for up to 5 threads to be used for loading at once. This is to avoid one load blocking another. Maximum value = 4. */ + public IntPtr fsbguid; /* [r/w] Optional. Specify 0 to ignore. Allows you to provide the GUID lookup for cached FSB header info. Once loaded the GUID will be written back to the pointer. This is to avoid seeking and reading the FSB header. */ + + /* Delegate setters are provided to avoid marshalling errors when callbacks transition native -> managed -> native, like when using Studio::System::getSoundInfo followed by createSound. */ + public SOUND_PCMREADCALLBACK pcmreadcallback { set { pcmreadcallback_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public SOUND_PCMSETPOSCALLBACK pcmsetposcallback { set { pcmsetposcallback_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public SOUND_NONBLOCKCALLBACK nonblockcallback { set { nonblockcallback_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public FILE_OPENCALLBACK fileuseropen { set { fileuseropen_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public FILE_CLOSECALLBACK fileuserclose { set { fileuserclose_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public FILE_READCALLBACK fileuserread { set { fileuserread_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public FILE_SEEKCALLBACK fileuserseek { set { fileuserseek_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public FILE_ASYNCREADCALLBACK fileuserasyncread { set { fileuserasyncread_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + public FILE_ASYNCCANCELCALLBACK fileuserasynccancel { set { fileuserasynccancel_handle = (value == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(value)); } } + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure defining a reverb environment for FMOD_SOFTWARE based sounds only.
    + + [REMARKS] + Note the default reverb properties are the same as the FMOD_PRESET_GENERIC preset.
    + Note that integer values that typically range from -10,000 to 1000 are represented in decibels, + and are of a logarithmic scale, not linear, wheras float values are always linear.
    +
    + The numerical values listed below are the maximum, minimum and default values for each variable respectively.
    +
    + Hardware voice / Platform Specific reverb support.
    + WII See FMODWII.H for hardware specific reverb functionality.
    + 3DS See FMOD3DS.H for hardware specific reverb functionality.
    + PSP See FMODWII.H for hardware specific reverb functionality.
    +
    + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.
    + Members marked with [w] mean the variable can be written to. The user can set the value.
    + Members marked with [r/w] are either read or write depending on if you are using System::setReverbProperties (w) or System::getReverbProperties (r). + + [SEE_ALSO] + System::setReverbProperties + System::getReverbProperties + FMOD_REVERB_PRESETS + ] + */ +#pragma warning disable 414 + [StructLayout(LayoutKind.Sequential)] + public struct REVERB_PROPERTIES + { /* MIN MAX DEFAULT DESCRIPTION */ + public float DecayTime; /* [r/w] 0.0 20000.0 1500.0 Reverberation decay time in ms */ + public float EarlyDelay; /* [r/w] 0.0 300.0 7.0 Initial reflection delay time */ + public float LateDelay; /* [r/w] 0.0 100 11.0 Late reverberation delay time relative to initial reflection */ + public float HFReference; /* [r/w] 20.0 20000.0 5000 Reference high frequency (hz) */ + public float HFDecayRatio; /* [r/w] 10.0 100.0 50.0 High-frequency to mid-frequency decay time ratio */ + public float Diffusion; /* [r/w] 0.0 100.0 100.0 Value that controls the echo density in the late reverberation decay. */ + public float Density; /* [r/w] 0.0 100.0 100.0 Value that controls the modal density in the late reverberation decay */ + public float LowShelfFrequency; /* [r/w] 20.0 1000.0 250.0 Reference low frequency (hz) */ + public float LowShelfGain; /* [r/w] -36.0 12.0 0.0 Relative room effect level at low frequencies */ + public float HighCut; /* [r/w] 20.0 20000.0 20000.0 Relative room effect level at high frequencies */ + public float EarlyLateMix; /* [r/w] 0.0 100.0 50.0 Early reflections level relative to room effect */ + public float WetLevel; /* [r/w] -80.0 20.0 -6.0 Room effect level (at mid frequencies) + * */ + #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 + + /* + [DEFINE] + [ + [NAME] + FMOD_REVERB_PRESETS + + [DESCRIPTION] + A set of predefined environment PARAMETERS, created by Creative Labs + These are used to initialize an FMOD_REVERB_PROPERTIES structure statically. + ie + FMOD_REVERB_PROPERTIES prop = FMOD_PRESET_GENERIC; + + [SEE_ALSO] + System::setReverbProperties + ] + */ + 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 );} + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Settings for advanced features like configuring memory and cpu usage for the FMOD_CREATECOMPRESSEDSAMPLE feature. + + [REMARKS] + maxMPEGCodecs / maxADPCMCodecs / maxXMACodecs will determine the maximum cpu usage of playing realtime samples. Use this to lower potential excess cpu usage and also control memory usage.
    + + [SEE_ALSO] + System::setAdvancedSettings + System::getAdvancedSettings + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct ADVANCEDSETTINGS + { + public int cbSize; /* [w] Size of this structure. Use sizeof(FMOD_ADVANCEDSETTINGS) */ + public int maxMPEGCodecs; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_CREATECOMPRESSEDSAMPLE only. MPEG codecs consume 30,528 bytes per instance and this number will determine how many MPEG channels can be played simultaneously. Default = 32. */ + public int maxADPCMCodecs; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_CREATECOMPRESSEDSAMPLE only. ADPCM codecs consume 3,128 bytes per instance and this number will determine how many ADPCM channels can be played simultaneously. Default = 32. */ + public int maxXMACodecs; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_CREATECOMPRESSEDSAMPLE only. XMA codecs consume 14,836 bytes per instance and this number will determine how many XMA channels can be played simultaneously. Default = 32. */ + public int maxVorbisCodecs; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_CREATECOMPRESSEDSAMPLE only. Vorbis codecs consume 23,256 bytes per instance and this number will determine how many Vorbis channels can be played simultaneously. Default = 32. */ + public int maxAT9Codecs; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_CREATECOMPRESSEDSAMPLE only. AT9 codecs consume 8,720 bytes per instance and this number will determine how many AT9 channels can be played simultaneously. Default = 32. */ + public int maxFADPCMCodecs; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_CREATECOMPRESSEDSAMPLE only. This number will determine how many FADPCM channels can be played simultaneously. Default = 32. */ + public int maxPCMCodecs; /* [r/w] Optional. Specify 0 to ignore. For use with PS3 only. PCM codecs consume 12,672 bytes per instance and this number will determine how many streams and PCM voices can be played simultaneously. Default = 16. */ + public int ASIONumChannels; /* [r/w] Optional. Specify 0 to ignore. Number of channels available on the ASIO device. */ + public IntPtr ASIOChannelList; /* [r/w] Optional. Specify 0 to ignore. Pointer to an array of strings (number of entries defined by ASIONumChannels) with ASIO channel names. */ + public IntPtr ASIOSpeakerList; /* [r/w] Optional. Specify 0 to ignore. Pointer to a list of speakers that the ASIO channels map to. This can be called after System::init to remap ASIO output. */ + public float HRTFMinAngle; /* [r/w] Optional. For use with FMOD_INIT_HRTF_LOWPASS. The angle range (0-360) of a 3D sound in relation to the listener, at which the HRTF function begins to have an effect. 0 = in front of the listener. 180 = from 90 degrees to the left of the listener to 90 degrees to the right. 360 = behind the listener. Default = 180.0. */ + public float HRTFMaxAngle; /* [r/w] Optional. For use with FMOD_INIT_HRTF_LOWPASS. The angle range (0-360) of a 3D sound in relation to the listener, at which the HRTF function has maximum effect. 0 = front of the listener. 180 = from 90 degrees to the left of the listener to 90 degrees to the right. 360 = behind the listener. Default = 360.0. */ + public float HRTFFreq; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_INIT_HRTF_LOWPASS. The cutoff frequency of the HRTF's lowpass filter function when at maximum effect. (i.e. at HRTFMaxAngle). Default = 4000.0. */ + public float vol0virtualvol; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_INIT_VOL0_BECOMES_VIRTUAL. If this flag is used, and the volume is below this, then the sound will become virtual. Use this value to raise the threshold to a different point where a sound goes virtual. */ + public uint defaultDecodeBufferSize; /* [r/w] Optional. Specify 0 to ignore. For streams. This determines the default size of the double buffer (in milliseconds) that a stream uses. Default = 400ms */ + public ushort profilePort; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_INIT_PROFILE_ENABLE. Specify the port to listen on for connections by the profiler application. */ + public uint geometryMaxFadeTime; /* [r/w] Optional. Specify 0 to ignore. The maximum time in miliseconds it takes for a channel to fade to the new level when its occlusion changes. */ + public float distanceFilterCenterFreq; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_INIT_DISTANCE_FILTERING. The default center frequency in Hz for the distance filtering effect. Default = 1500.0. */ + public int reverb3Dinstance; /* [r/w] Optional. Specify 0 to ignore. Out of 0 to 3, 3d reverb spheres will create a phyical reverb unit on this instance slot. See FMOD_REVERB_PROPERTIES. */ + public int DSPBufferPoolSize; /* [r/w] Optional. Specify 0 to ignore. Number of buffers in DSP buffer pool. Each buffer will be DSPBlockSize * sizeof(float) * SpeakerModeChannelCount. ie 7.1 @ 1024 DSP block size = 8 * 1024 * 4 = 32kb. Default = 8. */ + public uint stackSizeStream; /* [r/w] Optional. Specify 0 to ignore. Specify the stack size for the FMOD Stream thread in bytes. Useful for custom codecs that use excess stack. Default 49,152 (48kb) */ + public uint stackSizeNonBlocking; /* [r/w] Optional. Specify 0 to ignore. Specify the stack size for the FMOD_NONBLOCKING loading thread. Useful for custom codecs that use excess stack. Default 65,536 (64kb) */ + public uint stackSizeMixer; /* [r/w] Optional. Specify 0 to ignore. Specify the stack size for the FMOD mixer thread. Useful for custom dsps that use excess stack. Default 49,152 (48kb) */ + public DSP_RESAMPLER resamplerMethod; /* [r/w] Optional. Specify 0 to ignore. Resampling method used with fmod's software mixer. See FMOD_DSP_RESAMPLER for details on methods. */ + public uint commandQueueSize; /* [r/w] Optional. Specify 0 to ignore. Specify the command queue size for thread safe processing. Default 2048 (2kb) */ + public uint randomSeed; /* [r/w] Optional. Specify 0 to ignore. Seed value that FMOD will use to initialize its internal random number generators. */ + } + + /* + [DEFINE] + [ + [NAME] + FMOD_DRIVER_STATE + + [DESCRIPTION] + Flags that provide additional information about a particular driver. + + [REMARKS] + + [SEE_ALSO] + System::getRecordDriverInfo + ] + */ + [Flags] + public enum DRIVER_STATE : uint + { + CONNECTED = 0x00000001, /* Device is currently plugged in. */ + DEFAULT = 0x00000002, /* Device is the users preferred choice. */ + } + + /* + 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 + } + + 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) + { + return FMOD5_Memory_Initialize(poolmem, poollen, useralloc, userrealloc, userfree, memtypeflags); + } + + public static RESULT GetStats(out int currentalloced, out int maxalloced) + { + return GetStats(out currentalloced, out maxalloced, false); + } + + public static RESULT GetStats(out int currentalloced, out int maxalloced, bool blocking) + { + 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_CALLBACK callback, string filename) + { + 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 + } + + /* + 'System' API. + */ + public struct System + { + public RESULT release() + { + return FMOD5_System_Release(this.handle); + } + + // Pre-init 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_OPENCALLBACK useropen, FILE_CLOSECALLBACK userclose, FILE_READCALLBACK userread, FILE_SEEKCALLBACK userseek, FILE_ASYNCREADCALLBACK userasyncread, FILE_ASYNCCANCELCALLBACK userasynccancel, int blockalign) + { + return FMOD5_System_SetFileSystem(this.handle, useropen, userclose, userread, userseek, userasyncread, userasynccancel, blockalign); + } + public RESULT attachFileSystem(FILE_OPENCALLBACK useropen, FILE_CLOSECALLBACK userclose, FILE_READCALLBACK userread, FILE_SEEKCALLBACK 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) + { + 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) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD5_System_LoadPlugin(this.handle, encoder.byteFromStringUTF8(filename), out handle, priority); + } + } + public RESULT loadPlugin(string filename, out uint handle) + { + return loadPlugin(filename, out handle, 0); + } + 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) + { + 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_ROLLOFFCALLBACK 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, 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 getFileUsage(out Int64 sampleBytesRead, out Int64 streamBytesRead, out Int64 otherBytesRead) + { + return FMOD5_System_GetFileUsage(this.handle, out sampleBytesRead, out streamBytesRead, out otherBytesRead); + } + public RESULT getSoundRAM(out int currentalloced, out int maxalloced, out int total) + { + return FMOD5_System_GetSoundRAM(this.handle, out currentalloced, out maxalloced, out total); + } + + // 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 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_OPENCALLBACK useropen, FILE_CLOSECALLBACK userclose, FILE_READCALLBACK userread, FILE_SEEKCALLBACK userseek, FILE_ASYNCREADCALLBACK userasyncread, FILE_ASYNCCANCELCALLBACK userasynccancel, int blockalign); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_AttachFileSystem (IntPtr system, FILE_OPENCALLBACK useropen, FILE_CLOSECALLBACK userclose, FILE_READCALLBACK userread, FILE_SEEKCALLBACK 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_ROLLOFFCALLBACK 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, 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_GetFileUsage (IntPtr system, out Int64 sampleBytesRead, out Int64 streamBytesRead, out Int64 otherBytesRead); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_System_GetSoundRAM (IntPtr system, out int currentalloced, out int maxalloced, out int total); + [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_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 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 lenbytes, out uint read) + { + return FMOD5_Sound_ReadData(this.handle, buffer, lenbytes, 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 lenbytes, 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 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 (CHANNEL_CALLBACK callback); + RESULT isPlaying (out bool isplaying); + + // Panning and level adjustment. + 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, 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, ref VECTOR alt_pan_pos); + RESULT get3DAttributes (out VECTOR pos, out VECTOR vel, out VECTOR alt_pan_pos); + 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(CHANNEL_CALLBACK callback) + { + return FMOD5_Channel_SetCallback(this.handle, callback); + } + public RESULT isPlaying(out bool isplaying) + { + return FMOD5_Channel_IsPlaying(this.handle, out isplaying); + } + + // Panning and level adjustment. + 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) + { + 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) + { + 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) + { + return FMOD5_Channel_SetDelay(this.handle, dspclock_start, dspclock_end, stopchannels); + } + 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, ref VECTOR alt_pan_pos) + { + return FMOD5_Channel_Set3DAttributes(this.handle, ref pos, ref vel, ref alt_pan_pos); + } + public RESULT get3DAttributes(out VECTOR pos, out VECTOR vel, out VECTOR alt_pan_pos) + { + return FMOD5_Channel_Get3DAttributes(this.handle, out pos, out vel, out alt_pan_pos); + } + 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, CHANNEL_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, 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, ref VECTOR alt_pan_pos); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Channel_Get3DAttributes (IntPtr channel, out VECTOR pos, out VECTOR vel, out VECTOR alt_pan_pos); + [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 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, 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(CHANNEL_CALLBACK callback) + { + return FMOD5_ChannelGroup_SetCallback(this.handle, callback); + } + public RESULT isPlaying(out bool isplaying) + { + return FMOD5_ChannelGroup_IsPlaying(this.handle, out isplaying); + } + + // Panning and level adjustment. + 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, 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, ref VECTOR alt_pan_pos) + { + return FMOD5_ChannelGroup_Set3DAttributes(this.handle, ref pos, ref vel, ref alt_pan_pos); + } + public RESULT get3DAttributes(out VECTOR pos, out VECTOR vel, out VECTOR alt_pan_pos) + { + return FMOD5_ChannelGroup_Get3DAttributes(this.handle, out pos, out vel, out alt_pan_pos); + } + 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 propogatedspclocks, 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, CHANNEL_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, 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, ref VECTOR alt_pan_pos); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_ChannelGroup_Get3DAttributes (IntPtr channelgroup, out VECTOR pos, out VECTOR vel, out VECTOR alt_pan_pos); + [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 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 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 target, out DSPConnection connection, DSPCONNECTION_TYPE type) + { + return FMOD5_DSP_AddInput(this.handle, target.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) + { + return FMOD5_DSP_GetParameterInfo(this.handle, index, out desc); + } + 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); + } + + #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 target, 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 DSP_PARAMETER_DESC 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); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + 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) + { + 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) + { + 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 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 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 reverb); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_Set3DAttributes (IntPtr reverb, ref VECTOR position, float mindistance, float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_Get3DAttributes (IntPtr reverb, ref VECTOR position, ref float mindistance, ref float maxdistance); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_SetProperties (IntPtr reverb, ref REVERB_PROPERTIES properties); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_GetProperties (IntPtr reverb, ref REVERB_PROPERTIES properties); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_SetActive (IntPtr reverb, bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_GetActive (IntPtr reverb, out bool active); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_SetUserData (IntPtr reverb, IntPtr userdata); + [DllImport(VERSION.dll)] + private static extern RESULT FMOD5_Reverb3D_GetUserData (IntPtr reverb, out IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + 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 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; + + 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 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() + { + 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/Assets/Plugins/FMOD/Wrapper/fmod.cs.meta b/Assets/Plugins/FMOD/Wrapper/fmod.cs.meta new file mode 100644 index 0000000..1193a07 --- /dev/null +++ b/Assets/Plugins/FMOD/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/Assets/Plugins/FMOD/Wrapper/fmod_dsp.cs b/Assets/Plugins/FMOD/Wrapper/fmod_dsp.cs new file mode 100644 index 0000000..86c710c --- /dev/null +++ b/Assets/Plugins/FMOD/Wrapper/fmod_dsp.cs @@ -0,0 +1,2028 @@ +/*$ preserve start $*/ +/* ========================================================================================== */ +/* FMOD Studio - DSP header file. Copyright (c), Firelight Technologies Pty, Ltd. 2004-2018. */ +/* */ +/* Use this header if you are interested in delving deeper into the FMOD software mixing / */ +/* DSP engine. In this header you can find parameter structures for FMOD system registered */ +/* DSP effects and generators. */ +/* */ +/* ========================================================================================== */ + +using System; +using System.Text; +using System.Runtime.InteropServices; + +namespace FMOD +{ +/*$ preserve end $*/ + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure for FMOD_DSP_PROCESS_CALLBACK input and output buffers. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_DSP_DESCRIPTION + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_BUFFER_ARRAY + { + public int numbuffers; /* [r/w] number of buffers */ + public int[] buffernumchannels; /* [r/w] array of number of channels for each buffer */ + public CHANNELMASK[] bufferchannelmask; /* [r/w] array of channel masks for each buffer */ + public IntPtr[] buffers; /* [r/w] array of buffers */ + public SPEAKERMODE speakermode; /* [r/w] speaker mode for all buffers in the array */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Operation type for FMOD_DSP_PROCESS_CALLBACK. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_DESCRIPTION + ] + */ + public enum DSP_PROCESS_OPERATION + { + PROCESS_PERFORM = 0, /* Process the incoming audio in 'inbufferarray' and output to 'outbufferarray'. */ + PROCESS_QUERY /* The DSP is being queried for the expected output format and whether it needs to process audio or should be bypassed. The function should return any value other than FMOD_OK if audio can pass through unprocessed. If audio is to be processed, 'outbufferarray' must be filled with the expected output format, channel count and mask. */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Complex number structure used for holding FFT frequency domain-data for FMOD_FFTREAL and FMOD_IFFTREAL DSP functions. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_STATE_FUNCTIONS + FMOD_DSP_STATE_DFT_FUNCTIONS + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct COMPLEX + { + public float real; /* Real component */ + public float imag; /* Imaginary component */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Flags for the FMOD_DSP_PAN_SUMSURROUNDMATRIX_FUNC function. + + [REMARKS] + This functionality is experimental, please contact support@fmod.org for more information. + + [SEE_ALSO] + FMOD_DSP_STATE_PAN_FUNCTIONS + ] + */ + public enum DSP_PAN_SURROUND_FLAGS + { + DEFAULT = 0, + ROTATION_NOT_BIASED = 1, + } + + + /* + FMOD_DSP_DESCRIPTION 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); + + + /* + FMOD_DSP_STATE functions + */ + public delegate IntPtr DSP_ALLOC_FUNC (uint size, MEMORY_TYPE type, StringWrapper sourcestr); + public delegate IntPtr DSP_REALLOC_FUNC (IntPtr ptr, uint size, MEMORY_TYPE type, StringWrapper sourcestr); + public delegate void DSP_FREE_FUNC (IntPtr ptr, MEMORY_TYPE type, StringWrapper sourcestr); + public delegate void DSP_LOG_FUNC (DEBUG_FLAGS level, StringWrapper file, int line, StringWrapper function, StringWrapper 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); + + + + /* + [ENUM] + [ + [DESCRIPTION] + These definitions can be used for creating FMOD defined special effects or DSP units. + + [REMARKS] + To get them to be active, first create the unit, then add it somewhere into the DSP network, either at the front of the network near the soundcard unit to affect the global output (by using System::getDSPHead), or on a single channel (using Channel::getDSPHead). + + [SEE_ALSO] + System::createDSPByType + ] + */ + public enum DSP_TYPE : int + { + UNKNOWN, /* This unit was created via a non FMOD plugin so has an unknown purpose. */ + MIXER, /* This unit does nothing but take inputs and mix them together then feed the result to the soundcard unit. */ + OSCILLATOR, /* This unit generates sine/square/saw/triangle or noise tones. */ + LOWPASS, /* This unit filters sound using a high quality, resonant lowpass filter algorithm but consumes more CPU time. */ + ITLOWPASS, /* This unit filters sound using a resonant lowpass filter algorithm that is used in Impulse Tracker, but with limited cutoff range (0 to 8060hz). */ + HIGHPASS, /* This unit filters sound using a resonant highpass filter algorithm. */ + ECHO, /* This unit produces an echo on the sound and fades out at the desired rate. */ + FADER, /* This unit pans and scales the volume of a unit. */ + FLANGE, /* This unit produces a flange effect on the sound. */ + DISTORTION, /* This unit distorts the sound. */ + NORMALIZE, /* This unit normalizes or amplifies the sound to a certain level. */ + LIMITER, /* This unit limits the sound to a certain level. */ + PARAMEQ, /* This unit attenuates or amplifies a selected frequency range. */ + PITCHSHIFT, /* This unit bends the pitch of a sound without changing the speed of playback. */ + CHORUS, /* This unit produces a chorus effect on the sound. */ + VSTPLUGIN, /* This unit allows the use of Steinberg VST plugins */ + WINAMPPLUGIN, /* This unit allows the use of Nullsoft Winamp plugins */ + ITECHO, /* This unit produces an echo on the sound and fades out at the desired rate as is used in Impulse Tracker. */ + COMPRESSOR, /* This unit implements dynamic compression (linked multichannel, wideband) */ + SFXREVERB, /* This unit implements SFX reverb */ + LOWPASS_SIMPLE, /* This unit filters sound using a simple lowpass with no resonance, but has flexible cutoff and is fast. */ + DELAY, /* This unit produces different delays on individual channels of the sound. */ + TREMOLO, /* This unit produces a tremolo / chopper effect on the sound. */ + LADSPAPLUGIN, /* This unit allows the use of LADSPA standard plugins. */ + SEND, /* This unit sends a copy of the signal to a return DSP anywhere in the DSP tree. */ + RETURN, /* This unit receives signals from a number of send DSPs. */ + HIGHPASS_SIMPLE, /* This unit filters sound using a simple highpass with no resonance, but has flexible cutoff and is fast. */ + PAN, /* This unit pans the signal, possibly upmixing or downmixing as well. */ + THREE_EQ, /* This unit is a three-band equalizer. */ + FFT, /* This unit simply analyzes the signal and provides spectrum information back through getParameter. */ + LOUDNESS_METER, /* This unit analyzes the loudness and true peak of the signal. */ + ENVELOPEFOLLOWER, /* This unit tracks the envelope of the input/sidechain signal */ + CONVOLUTIONREVERB, /* This unit implements convolution reverb. */ + CHANNELMIX, /* This unit provides per signal channel gain, and output channel mapping to allow 1 multichannel signal made up of many groups of signals to map to a single output signal. */ + TRANSCEIVER, /* This unit 'sends' and 'receives' from a selection of up to 32 different slots. It is like a send/return but it uses global slots rather than returns as the destination. It also has other features. Multiple transceivers can receive from a single channel, or multiple transceivers can send to a single channel, or a combination of both. */ + OBJECTPAN, /* This unit sends the signal to a 3d object encoder like Dolby Atmos. */ + MULTIBAND_EQ, /* This unit is a flexible five band parametric equalizer. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + DSP parameter types. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_PARAMETER_DESC + ] + */ + public enum DSP_PARAMETER_TYPE + { + FLOAT = 0, + INT, + BOOL, + DATA, + } + + + /* + [ENUM] + [ + [DESCRIPTION] + DSP float parameter mappings. These determine how values are mapped across dials and automation curves. + + [REMARKS] + FMOD_DSP_PARAMETER_FLOAT_MAPPING_TYPE_AUTO generates a mapping based on range and units. For example, if the units are in Hertz and the range is with-in the audio spectrum, a Bark scale will be chosen. Logarithmic scales may also be generated for ranges above zero spanning several orders of magnitude. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_FLOAT_MAPPING + ] + */ + public enum DSP_PARAMETER_FLOAT_MAPPING_TYPE + { + DSP_PARAMETER_FLOAT_MAPPING_TYPE_LINEAR = 0, /* Values mapped linearly across range. */ + DSP_PARAMETER_FLOAT_MAPPING_TYPE_AUTO, /* A mapping is automatically chosen based on range and units. See remarks. */ + DSP_PARAMETER_FLOAT_MAPPING_TYPE_PIECEWISE_LINEAR, /* Values mapped in a piecewise linear fashion defined by FMOD_DSP_PARAMETER_DESC_FLOAT::mapping.piecewiselinearmapping. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure to define a piecewise linear mapping. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_FLOAT_MAPPING_TYPE + FMOD_DSP_PARAMETER_FLOAT_MAPPING + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_FLOAT_MAPPING_PIECEWISE_LINEAR + { + public int numpoints; /* [w] The number of pairs in the piecewise mapping (at least 2). */ + public IntPtr pointparamvalues; /* [w] The values in the parameter's units for each point */ + public IntPtr pointpositions; /* [w] The positions along the control's scale (e.g. dial angle) corresponding to each parameter value. The range of this scale is arbitrary and all positions will be relative to the minimum and maximum values (e.g. [0,1,3] is equivalent to [1,2,4] and [2,4,8]). If this array is zero, pointparamvalues will be distributed with equal spacing. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure to define a mapping for a DSP unit's float parameter. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_FLOAT_MAPPING_TYPE + FMOD_DSP_PARAMETER_DESC_FLOAT + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_FLOAT_MAPPING + { + public DSP_PARAMETER_FLOAT_MAPPING_TYPE type; + public DSP_PARAMETER_FLOAT_MAPPING_PIECEWISE_LINEAR piecewiselinearmapping; /* [w] Only required for FMOD_DSP_PARAMETER_FLOAT_MAPPING_TYPE_PIECEWISE_LINEAR type mapping. */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure to define a float parameter for a DSP unit. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + System::createDSP + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_PARAMETER_DESC + FMOD_DSP_PARAMETER_FLOAT_MAPPING + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_FLOAT + { + public float min; /* [w] Minimum parameter value. */ + public float max; /* [w] Maximum parameter value. */ + public float defaultval; /* [w] Default parameter value. */ + public DSP_PARAMETER_FLOAT_MAPPING mapping; /* [w] How the values are distributed across dials and automation curves (e.g. linearly, exponentially etc). */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure to define a int parameter for a DSP unit. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + System::createDSP + DSP::setParameterInt + DSP::getParameterInt + FMOD_DSP_PARAMETER_DESC + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_INT + { + public int min; /* [w] Minimum parameter value. */ + public int max; /* [w] Maximum parameter value. */ + public int defaultval; /* [w] Default parameter value. */ + public bool goestoinf; /* [w] Whether the last value represents infiniy. */ + public IntPtr valuenames; /* [w] Names for each value. There should be as many strings as there are possible values (max - min + 1). Optional. */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure to define a boolean parameter for a DSP unit. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + System::createDSP + DSP::setParameterBool + DSP::getParameterBool + FMOD_DSP_PARAMETER_DESC + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_BOOL + { + public bool defaultval; /* [w] Default parameter value. */ + public IntPtr valuenames; /* [w] Names for false and true, respectively. There should be two strings. Optional. */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure to define a data parameter for a DSP unit. Use 0 or above for custom types. This parameter will be treated specially by the system if set to one of the FMOD_DSP_PARAMETER_DATA_TYPE values. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + System::createDSP + DSP::setParameterData + DSP::getParameterData + FMOD_DSP_PARAMETER_DATA_TYPE + FMOD_DSP_PARAMETER_DESC + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC_DATA + { + public int datatype; /* [w] The type of data for this parameter. Use 0 or above for custom types or set to one of the FMOD_DSP_PARAMETER_DATA_TYPE values. */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + + [REMARKS] + Members marked with [w] mean the user sets the value before passing it to the function. + Members marked with [r] mean FMOD sets the value to be used after the function exits. + + The step parameter tells the gui or application that the parameter has a certain granularity. + For example in the example of cutoff frequency with a range from 100.0 to 22050.0 you might only want the selection to be in 10hz increments. For this you would simply use 10.0 as the step value. + For a boolean, you can use min = 0.0, max = 1.0, step = 1.0. This way the only possible values are 0.0 and 1.0. + Some applications may detect min = 0.0, max = 1.0, step = 1.0 and replace a graphical slider bar with a checkbox instead. + A step value of 1.0 would simulate integer values only. + A step value of 0.0 would mean the full floating point range is accessable. + + [SEE_ALSO] + System::createDSP + System::getDSP + ] + */ + [StructLayout(LayoutKind.Explicit)] + public struct DSP_PARAMETER_DESC_UNION + { + [FieldOffset(0)] + public DSP_PARAMETER_DESC_FLOAT floatdesc; /* [w] Struct containing information about the parameter in floating point format. Use when type is FMOD_DSP_PARAMETER_TYPE_FLOAT. */ + [FieldOffset(0)] + public DSP_PARAMETER_DESC_INT intdesc; /* [w] Struct containing information about the parameter in integer format. Use when type is FMOD_DSP_PARAMETER_TYPE_INT. */ + [FieldOffset(0)] + public DSP_PARAMETER_DESC_BOOL booldesc; /* [w] Struct containing information about the parameter in boolean format. Use when type is FMOD_DSP_PARAMETER_TYPE_BOOL. */ + [FieldOffset(0)] + public DSP_PARAMETER_DESC_DATA datadesc; /* [w] Struct containing information about the parameter in data format. Use when type is FMOD_DSP_PARAMETER_TYPE_DATA. */ + } + + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_DESC + { + public DSP_PARAMETER_TYPE type; /* [w] Type of this parameter. */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] name; /* [w] Name of the parameter to be displayed (ie "Cutoff frequency"). */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public char[] label; /* [w] Short string to be put next to value to denote the unit type (ie "hz"). */ + public string description; /* [w] Description of the parameter to be displayed as a help item / tooltip for this parameter. */ + + public DSP_PARAMETER_DESC_UNION desc; + } + + /* + [ENUM] + [ + [DESCRIPTION] + Built-in types for the 'datatype' member of FMOD_DSP_PARAMETER_DESC_DATA. Data parameters of type other than FMOD_DSP_PARAMETER_DATA_TYPE_USER will be treated specially by the system. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_PARAMETER_DESC_DATA + FMOD_DSP_PARAMETER_OVERALLGAIN + FMOD_DSP_PARAMETER_3DATTRIBUTES + FMOD_DSP_PARAMETER_3DATTRIBUTES_MULTI + FMOD_DSP_PARAMETER_SIDECHAIN + ] + */ + public enum DSP_PARAMETER_DATA_TYPE + { + DSP_PARAMETER_DATA_TYPE_USER = 0, /* The default data type. All user data types should be 0 or above. */ + DSP_PARAMETER_DATA_TYPE_OVERALLGAIN = -1, /* The data type for FMOD_DSP_PARAMETER_OVERALLGAIN parameters. There should a maximum of one per DSP. */ + DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES = -2, /* The data type for FMOD_DSP_PARAMETER_3DATTRIBUTES parameters. There should a maximum of one per DSP. */ + DSP_PARAMETER_DATA_TYPE_SIDECHAIN = -3, /* The data type for FMOD_DSP_PARAMETER_SIDECHAIN parameters. There should a maximum of one per DSP. */ + DSP_PARAMETER_DATA_TYPE_FFT = -4, /* The data type for FMOD_DSP_PARAMETER_FFT parameters. There should a maximum of one per DSP. */ + DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES_MULTI = -5 /* The data type for FMOD_DSP_PARAMETER_3DATTRIBUTES_MULTI parameters. There should a maximum of one per DSP. */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure for data parameters of type FMOD_DSP_PARAMETER_DATA_TYPE_OVERALLGAIN. + A parameter of this type is used in effects that affect the overgain of the signal in a predictable way. + This parameter is read by the system to determine the effect's gain for voice virtualization. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_DATA_TYPE + FMOD_DSP_PARAMETER_DESC + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_OVERALLGAIN + { + public float linear_gain; /* [r] The overall linear gain of the effect on the direct signal path */ + public float linear_gain_additive; /* [r] Additive gain, for parallel signal paths */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure for data parameters of type FMOD_DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES. + A parameter of this type is used in effects that respond to a sound's 3D position. + The system will set this parameter automatically if a sound's position changes. + + [REMARKS] + FMOD will convert passed in co-ordinates to left-handed for the plugin if the System was initialized with the FMOD_INIT_3D_RIGHTHANDED flag. + + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_DATA_TYPE + FMOD_DSP_PARAMETER_DESC + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_3DATTRIBUTES + { + public ATTRIBUTES_3D relative; /* [w] The position of the sound relative to the listener. */ + public ATTRIBUTES_3D absolute; /* [w] The position of the sound in world coordinates. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure for data parameters of type FMOD_DSP_PARAMETER_DATA_TYPE_3DATTRIBUTES. + A parameter of this type is used in effects that respond to a sound's 3D position. + The system will set this parameter automatically if a sound's position changes. + + [REMARKS] + FMOD will convert passed in co-ordinates to left-handed for the plugin if the System was initialized with the FMOD_INIT_3D_RIGHTHANDED flag. + + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_DATA_TYPE + FMOD_DSP_PARAMETER_DESC + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_3DATTRIBUTES_MULTI + { + public int numlisteners; /* [w] The number of listeners. */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public ATTRIBUTES_3D[] relative; /* [w] The position of the sound relative to the listeners. */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public float[] weight; /* [w] The weighting of the listeners where 0 means listener has no contribution and 1 means full contribution. */ + public ATTRIBUTES_3D absolute; /* [w] The position of the sound in world coordinates. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure for data parameters of type FMOD_DSP_PARAMETER_DATA_TYPE_SIDECHAIN. + A parameter of this type is declared for effects which support sidechaining. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_DATA_TYPE + FMOD_DSP_PARAMETER_DESC + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_SIDECHAIN + { + public int sidechainenable; /* [r/w] Whether sidechains are enabled. */ + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Structure for data parameters of type FMOD_DSP_PARAMETER_DATA_TYPE_FFT. + A parameter of this type is declared for the FMOD_DSP_TYPE_FFT effect. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + Notes on the spectrum data member. Values inside the float buffer are typically between 0 and 1.0. + Each top level array represents one PCM channel of data. + Address data as spectrum[channel][bin]. A bin is 1 fft window entry. + Only read/display half of the buffer typically for analysis as the 2nd half is usually the same data reversed due to the nature of the way FFT works. + + [SEE_ALSO] + FMOD_DSP_PARAMETER_DATA_TYPE + FMOD_DSP_PARAMETER_DESC + FMOD_DSP_PARAMETER_DATA_TYPE_FFT + FMOD_DSP_TYPE + FMOD_DSP_FFT + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_PARAMETER_FFT + { + public int length; /* [r] Number of entries in this spectrum window. Divide this by the output rate to get the hz per entry. */ + public int numchannels; /* [r] Number of channels in spectrum. */ + + [MarshalAs(UnmanagedType.ByValArray,SizeConst=32)] + private IntPtr[] spectrum_internal; /* [r] Per channel spectrum arrays. See remarks for more. */ + + 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; + } + } + } + + + /* + [STRUCTURE] + [ + [DESCRIPTION] + When creating a DSP unit, declare one of these and provide the relevant callbacks and name for FMOD to use when it creates and uses a DSP unit of this type. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + There are 2 different ways to change a parameter in this architecture. + One is to use DSP::setParameterFloat / DSP::setParameterInt / DSP::setParameterBool / DSP::setParameterData. This is platform independant and is dynamic, so new unknown plugins can have their parameters enumerated and used. + The other is to use DSP::showConfigDialog. This is platform specific and requires a GUI, and will display a dialog box to configure the plugin. + + [SEE_ALSO] + System::createDSP + DSP::setParameterFloat + DSP::setParameterInt + DSP::setParameterBool + DSP::setParameterData + FMOD_DSP_STATE + FMOD_DSP_CREATE_CALLBACK + FMOD_DSP_RELEASE_CALLBACK + FMOD_DSP_RESET_CALLBACK + FMOD_DSP_READ_CALLBACK + FMOD_DSP_PROCESS_CALLBACK + FMOD_DSP_SETPOSITION_CALLBACK + FMOD_DSP_PARAMETER_DESC + FMOD_DSP_SETPARAM_FLOAT_CALLBACK + FMOD_DSP_SETPARAM_INT_CALLBACK + FMOD_DSP_SETPARAM_BOOL_CALLBACK + FMOD_DSP_SETPARAM_DATA_CALLBACK + FMOD_DSP_GETPARAM_FLOAT_CALLBACK + FMOD_DSP_GETPARAM_INT_CALLBACK + FMOD_DSP_GETPARAM_BOOL_CALLBACK + FMOD_DSP_GETPARAM_DATA_CALLBACK + FMOD_DSP_SHOULDIPROCESS_CALLBACK + FMOD_DSP_SYSTEM_REGISTER_CALLBACK + FMOD_DSP_SYSTEM_DEREGISTER_CALLBACK + FMOD_DSP_SYSTEM_MIX_CALLBACK + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_DESCRIPTION + { + public uint pluginsdkversion; /* [w] The plugin SDK version this plugin is built for. set to this to FMOD_PLUGIN_SDK_VERSION defined above. */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public char[] name; /* [w] Name of the unit to be displayed in the network. */ + public uint version; /* [w] Plugin writer's version number. */ + public int numinputbuffers; /* [w] Number of input buffers to process. Use 0 for DSPs that only generate sound and 1 for effects that process incoming sound. */ + public int numoutputbuffers; /* [w] Number of audio output buffers. Only one output buffer is currently supported. */ + public DSP_CREATECALLBACK create; /* [w] Create callback. This is called when DSP unit is created. Can be null. */ + public DSP_RELEASECALLBACK release; /* [w] Release callback. This is called just before the unit is freed so the user can do any cleanup needed for the unit. Can be null. */ + public DSP_RESETCALLBACK reset; /* [w] Reset callback. This is called by the user to reset any history buffers that may need resetting for a filter, when it is to be used or re-used for the first time to its initial clean state. Use to avoid clicks or artifacts. */ + public DSP_READCALLBACK read; /* [w] Read callback. Processing is done here. Can be null. */ + public DSP_PROCESS_CALLBACK process; /* [w] Process callback. Can be specified instead of the read callback if any channel format changes occur between input and output. This also replaces shouldiprocess and should return an error if the effect is to be bypassed. Can be null. */ + public DSP_SETPOSITIONCALLBACK setposition; /* [w] Setposition callback. This is called if the unit wants to update its position info but not process data. Can be null. */ + + public int numparameters; /* [w] Number of parameters used in this filter. The user finds this with DSP::getNumParameters */ + public IntPtr paramdesc; /* [w] Variable number of parameter structures. */ + public DSP_SETPARAM_FLOAT_CALLBACK setparameterfloat; /* [w] This is called when the user calls DSP.setParameterFloat. Can be null. */ + public DSP_SETPARAM_INT_CALLBACK setparameterint; /* [w] This is called when the user calls DSP.setParameterInt. Can be null. */ + public DSP_SETPARAM_BOOL_CALLBACK setparameterbool; /* [w] This is called when the user calls DSP.setParameterBool. Can be null. */ + public DSP_SETPARAM_DATA_CALLBACK setparameterdata; /* [w] This is called when the user calls DSP.setParameterData. Can be null. */ + public DSP_GETPARAM_FLOAT_CALLBACK getparameterfloat; /* [w] This is called when the user calls DSP.getParameterFloat. Can be null. */ + public DSP_GETPARAM_INT_CALLBACK getparameterint; /* [w] This is called when the user calls DSP.getParameterInt. Can be null. */ + public DSP_GETPARAM_BOOL_CALLBACK getparameterbool; /* [w] This is called when the user calls DSP.getParameterBool. Can be null. */ + public DSP_GETPARAM_DATA_CALLBACK getparameterdata; /* [w] This is called when the user calls DSP.getParameterData. Can be null. */ + public DSP_SHOULDIPROCESS_CALLBACK shouldiprocess; /* [w] This is called before processing. You can detect if inputs are idle and return FMOD_OK to process, or any other error code to avoid processing the effect. Use a count down timer to allow effect tails to process before idling! */ + public IntPtr userdata; /* [w] Optional. Specify 0 to ignore. This is user data to be attached to the DSP unit during creation. Access via FMOD_DSP_STATE_FUNCTIONS::getuserdata. */ + + public DSP_SYSTEM_REGISTER_CALLBACK sys_register; /* [w] Register callback. This is called when DSP unit is loaded/registered. Useful for 'global'/per system object init for plugin. Can be null. */ + public DSP_SYSTEM_DEREGISTER_CALLBACK sys_deregister; /* [w] Deregister callback. This is called when DSP unit is unloaded/deregistered. Useful as 'global'/per system object shutdown for plugin. Can be null. */ + public DSP_SYSTEM_MIX_CALLBACK sys_mix; /* [w] System mix stage callback. This is called when the mixer starts to execute or is just finishing executing. Useful for 'global'/per system object once a mix update calls for a plugin. Can be null. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Struct containing DFT functions to enable a plugin to perform optimized time-frequency domain conversion. + + [REMARKS] + Members marked with [r] mean read only for the developer, read/write for the FMOD system. + + Members marked with [w] mean read/write for the developer, read only for the FMOD system. + + [SEE_ALSO] + FMOD_DSP_STATE_FUNCTIONS + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE_DFT_FUNCTIONS + { + public DSP_DFT_FFTREAL_FUNC fftreal; /* [r] Function for performing an FFT on a real signal. */ + public DSP_DFT_IFFTREAL_FUNC inversefftreal; /* [r] Function for performing an inverse FFT to get a real signal. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Struct containing panning helper functions for spatialization plugins. + + [REMARKS] + These are experimental, please contact support@fmod.org for more information. + + Members marked with [r] mean read only for the developer, read/write for the FMOD system. + + Members marked with [w] mean read/write for the developer, read only for the FMOD system. + + [SEE_ALSO] + FMOD_DSP_STATE_FUNCTIONS + FMOD_DSP_PAN_SURROUND_FLAGS + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE_PAN_FUNCTIONS + { + public DSP_PAN_SUMMONOMATRIX_FUNC summonomatrix; /* [r] TBD. */ + public DSP_PAN_SUMSTEREOMATRIX_FUNC sumstereomatrix; /* [r] TBD. */ + public DSP_PAN_SUMSURROUNDMATRIX_FUNC sumsurroundmatrix; /* [r] TBD. */ + public DSP_PAN_SUMMONOTOSURROUNDMATRIX_FUNC summonotosurroundmatrix; /* [r] TBD. */ + public DSP_PAN_SUMSTEREOTOSURROUNDMATRIX_FUNC sumstereotosurroundmatrix; /* [r] TBD. */ + public DSP_PAN_GETROLLOFFGAIN_FUNC getrolloffgain; /* [r] TBD. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + Struct containing functions to give plugin developers the ability to query system state, access system level functionality and helpers. + + [REMARKS] + Members marked with [r] mean read only for the developer, read/write for the FMOD system. + + Members marked with [w] mean read/write for the developer, read only for the FMOD system. + + [SEE_ALSO] + FMOD_DSP_STATE + FMOD_DSP_STATE_DFT_FUNCTIONS + FMOD_DSP_STATE_PAN_FUNCTIONS + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE_FUNCTIONS + { + DSP_ALLOC_FUNC alloc; /* [r] Memory allocation callback. Use this for all dynamic memory allocation within the plugin. */ + DSP_REALLOC_FUNC realloc; /* [r] Memory reallocation callback. */ + DSP_FREE_FUNC free; /* [r] Memory free callback. */ + DSP_GETSAMPLERATE_FUNC getsamplerate; /* [r] Callback for getting the system samplerate. */ + DSP_GETBLOCKSIZE_FUNC getblocksize; /* [r] Callback for getting the system's block size. DSPs will be requested to process blocks of varying length up to this size.*/ + IntPtr dft; /* [r] Struct containing callbacks for performing FFTs and inverse FFTs. */ + IntPtr pan; /* [r] Pointer to a structure of callbacks for calculating pan, up-mix and down-mix matrices. */ + DSP_GETSPEAKERMODE_FUNC getspeakermode; /* [r] Callback for getting the system's speaker modes. One is the mixer's default speaker mode, the other is the output mode the system is downmixing or upmixing to.*/ + DSP_GETCLOCK_FUNC getclock; /* [r] Callback for getting the clock of the current DSP, as well as the subset of the input buffer that contains the signal */ + DSP_GETLISTENERATTRIBUTES_FUNC getlistenerattributes; /* [r] Callback for getting the absolute listener attributes set via the API (returned as left-handed co-ordinates). */ + DSP_LOG_FUNC log; /* [r] Function to write to the FMOD logging system. */ + DSP_GETUSERDATA_FUNC getuserdata; /* [r] Function to get the user data attached to this DSP. See FMOD_DSP_DESCRIPTION::userdata. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + DSP plugin structure that is passed into each callback. + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.
    + Members marked with [w] mean the variable can be written to. The user can set the value.
    +
    + 'systemobject' is an integer that relates to the System object that created the DSP or registered the DSP plugin. If only 1 System object is created then it should be 0. A second object would be 1 and so on. + FMOD_DSP_STATE_FUNCTIONS::getsamplerate/getblocksize/getspeakermode could return different results so it could be relevant to plugin developers to monitor which object is being used. + + [SEE_ALSO] + FMOD_DSP_DESCRIPTION + FMOD_DSP_STATE_FUNCTIONS + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_STATE + { + public IntPtr instance; /* [r] Handle to the DSP hand the user created. Not to be modified. C++ users cast to FMOD::DSP to use. */ + public IntPtr plugindata; /* [r/w] Plugin writer created data the output author wants to attach to this object. */ + public uint channelmask; /* [r] Specifies which speakers the DSP effect is active on */ + public int source_speakermode; /* [r] Specifies which speaker mode the signal originated for information purposes, ie in case panning needs to be done differently. */ + public IntPtr sidechaindata; /* [r] The mixed result of all incoming sidechains is stored at this pointer address. */ + public int sidechainchannels; /* [r] The number of channels of pcm data stored within the sidechain buffer. */ + public IntPtr functions; /* [r] Struct containing callbacks for system level functionality. */ + public int systemobject; /* [r] FMOD::System object index, relating to the System object that created this DSP. */ + } + + /* + [STRUCTURE] + [ + [DESCRIPTION] + DSP metering info used for retrieving metering info + + [REMARKS] + Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value. + Members marked with [w] mean the variable can be written to. The user can set the value. + + [SEE_ALSO] + FMOD_SPEAKER + ] + */ + [StructLayout(LayoutKind.Sequential)] + public struct DSP_METERING_INFO + { + public int numsamples; /* [r] The number of samples considered for this metering info. */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)] + public float[] peaklevel; /* [r] The peak level per channel. */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)] + public float[] rmslevel; /* [r] The rms level per channel. */ + public short numchannels; /* [r] Number of channels. */ + } + + + + /* + ============================================================================================================== + + FMOD built in effect parameters. + Use DSP::setParameter with these enums for the 'index' parameter. + + ============================================================================================================== + */ + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_OSCILLATOR filter. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameter + DSP::getParameter + FMOD_DSP_TYPE + ] + */ + public enum DSP_OSCILLATOR : int + { + TYPE, /* Waveform type. 0 = sine. 1 = square. 2 = sawup. 3 = sawdown. 4 = triangle. 5 = noise. */ + RATE /* Frequency of the sinewave in hz. 1.0 to 22000.0. Default = 220.0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_LOWPASS filter. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameter + DSP::getParameter + FMOD_DSP_TYPE + ] + */ + public enum DSP_LOWPASS : int + { + CUTOFF, /* Lowpass cutoff frequency in hz. 1.0 to 22000.0. Default = 5000.0. */ + RESONANCE /* Lowpass resonance Q value. 1.0 to 10.0. Default = 1.0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_ITLOWPASS filter. + This is different to the default FMOD_DSP_TYPE_ITLOWPASS filter in that it uses a different quality algorithm and is + the filter used to produce the correct sounding playback in .IT files. + FMOD Ex's .IT playback uses this filter. + + [REMARKS] + Note! This filter actually has a limited cutoff frequency below the specified maximum, due to its limited design, + so for a more open range filter use FMOD_DSP_LOWPASS or if you don't mind not having resonance, + FMOD_DSP_LOWPASS_SIMPLE. + The effective maximum cutoff is about 8060hz. + + [SEE_ALSO] + DSP::setParameter + DSP::getParameter + FMOD_DSP_TYPE + ] + */ + public enum DSP_ITLOWPASS : int + { + CUTOFF, /* Lowpass cutoff frequency in hz. 1.0 to 22000.0. Default = 5000.0/ */ + RESONANCE /* Lowpass resonance Q value. 0.0 to 127.0. Default = 1.0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_HIGHPASS filter. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameter + DSP::getParameter + FMOD_DSP_TYPE + ] + */ + public enum DSP_HIGHPASS : int + { + CUTOFF, /* (Type:float) - Highpass cutoff frequency in hz. 1.0 to output 22000.0. Default = 5000.0. */ + RESONANCE /* (Type:float) - Highpass resonance Q value. 1.0 to 10.0. Default = 1.0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_ECHO filter. + + [REMARKS] + Note. Every time the delay is changed, the plugin re-allocates the echo buffer. This means the echo will dissapear at that time while it refills its new buffer. + Larger echo delays result in larger amounts of memory allocated. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_ECHO : int + { + DELAY, /* (Type:float) - Echo delay in ms. 10 to 5000. Default = 500. */ + FEEDBACK, /* (Type:float) - Echo decay per delay. 0 to 100. 100.0 = No decay, 0.0 = total decay (ie simple 1 line delay). Default = 50.0. */ + DRYLEVEL, /* (Type:float) - Original sound volume in dB. -80.0 to 10.0. Default = 0. */ + WETLEVEL /* (Type:float) - Volume of echo signal to pass to output in dB. -80.0 to 10.0. Default = 0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_FADER filter. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_FADER : int + { + GAIN, /* (Type:float) - Signal gain in dB. -80.0 to 10.0. Default = 0.0. */ + OVERALL_GAIN, /* (Type:data) - Overall gain. For information only, not set by user. Data of type FMOD_DSP_PARAMETER_DATA_TYPE_OVERALLGAIN to provide to FMOD, to allow FMOD to know the DSP is scaling the signal for virtualization purposes. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_DELAY filter. + + [REMARKS] + Note. Every time MaxDelay is changed, the plugin re-allocates the delay buffer. This means the delay will dissapear at that time while it refills its new buffer. + A larger MaxDelay results in larger amounts of memory allocated. + Channel delays above MaxDelay will be clipped to MaxDelay and the delay buffer will not be resized. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_DELAY : int + { + CH0, /* Channel #0 Delay in ms. 0 to 10000. Default = 0. */ + CH1, /* Channel #1 Delay in ms. 0 to 10000. Default = 0. */ + CH2, /* Channel #2 Delay in ms. 0 to 10000. Default = 0. */ + CH3, /* Channel #3 Delay in ms. 0 to 10000. Default = 0. */ + CH4, /* Channel #4 Delay in ms. 0 to 10000. Default = 0. */ + CH5, /* Channel #5 Delay in ms. 0 to 10000. Default = 0. */ + CH6, /* Channel #6 Delay in ms. 0 to 10000. Default = 0. */ + CH7, /* Channel #7 Delay in ms. 0 to 10000. Default = 0. */ + CH8, /* Channel #8 Delay in ms. 0 to 10000. Default = 0. */ + CH9, /* Channel #9 Delay in ms. 0 to 10000. Default = 0. */ + CH10, /* Channel #10 Delay in ms. 0 to 10000. Default = 0. */ + CH11, /* Channel #11 Delay in ms. 0 to 10000. Default = 0. */ + CH12, /* Channel #12 Delay in ms. 0 to 10000. Default = 0. */ + CH13, /* Channel #13 Delay in ms. 0 to 10000. Default = 0. */ + CH14, /* Channel #14 Delay in ms. 0 to 10000. Default = 0. */ + CH15, /* Channel #15 Delay in ms. 0 to 10000. Default = 0. */ + MAXDELAY, /* Maximum delay in ms. 0 to 1000. Default = 10. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_FLANGE filter. + + [REMARKS] + Flange is an effect where the signal is played twice at the same time, and one copy slides back and forth creating a whooshing or flanging effect. + As there are 2 copies of the same signal, by default each signal is given 50% mix, so that the total is not louder than the original unaffected signal. + + Flange depth is a percentage of a 10ms shift from the original signal. Anything above 10ms is not considered flange because to the ear it begins to 'echo' so 10ms is the highest value possible. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_FLANGE : int + { + MIX, /* (Type:float) - Percentage of wet signal in mix. 0 to 100. Default = 50. */ + DEPTH, /* (Type:float) - Flange depth (percentage of 40ms delay). 0.01 to 1.0. Default = 1.0. */ + RATE /* (Type:float) - Flange speed in hz. 0.0 to 20.0. Default = 0.1. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_TREMOLO filter. + + [REMARKS] + The tremolo effect varies the amplitude of a sound. Depending on the settings, this unit can produce a tremolo, chopper or auto-pan effect. + + The shape of the LFO (low freq. oscillator) can morphed between sine, triangle and sawtooth waves using the FMOD_DSP_TREMOLO_SHAPE and FMOD_DSP_TREMOLO_SKEW parameters. + FMOD_DSP_TREMOLO_DUTY and FMOD_DSP_TREMOLO_SQUARE are useful for a chopper-type effect where the first controls the on-time duration and second controls the flatness of the envelope. + FMOD_DSP_TREMOLO_SPREAD varies the LFO phase between channels to get an auto-pan effect. This works best with a sine shape LFO. + The LFO can be synchronized using the FMOD_DSP_TREMOLO_PHASE parameter which sets its instantaneous phase. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameter + FMOD_DSP_TYPE + ] + */ + public enum DSP_TREMOLO : int + { + FREQUENCY, /* LFO frequency in Hz. 0.1 to 20. Default = 4. */ + DEPTH, /* Tremolo depth. 0 to 1. Default = 0. */ + SHAPE, /* LFO shape morph between triangle and sine. 0 to 1. Default = 0. */ + SKEW, /* Time-skewing of LFO cycle. -1 to 1. Default = 0. */ + DUTY, /* LFO on-time. 0 to 1. Default = 0.5. */ + SQUARE, /* Flatness of the LFO shape. 0 to 1. Default = 0. */ + PHASE, /* Instantaneous LFO phase. 0 to 1. Default = 0. */ + SPREAD /* Rotation / auto-pan effect. -1 to 1. Default = 0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_DISTORTION filter. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_DISTORTION : int + { + LEVEL /* Distortion value. 0.0 to 1.0. Default = 0.5. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_NORMALIZE filter. + + [REMARKS] + Normalize amplifies the sound based on the maximum peaks within the signal. + For example if the maximum peaks in the signal were 50% of the bandwidth, it would scale the whole sound by 2. + The lower threshold value makes the normalizer ignores peaks below a certain point, to avoid over-amplification if a loud signal suddenly came in, and also to avoid amplifying to maximum things like background hiss. + + Because FMOD is a realtime audio processor, it doesn't have the luxury of knowing the peak for the whole sound (ie it can't see into the future), so it has to process data as it comes in. + To avoid very sudden changes in volume level based on small samples of new data, fmod fades towards the desired amplification which makes for smooth gain control. The fadetime parameter can control this. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameter + FMOD_DSP_TYPE + ] + */ + public enum DSP_NORMALIZE : int + { + FADETIME, /* Time to ramp the silence to full in ms. 0.0 to 20000.0. Default = 5000.0. */ + THRESHHOLD, /* Lower volume range threshold to ignore. 0.0 to 1.0. Default = 0.1. Raise higher to stop amplification of very quiet signals. */ + MAXAMP /* Maximum amplification allowed. 1.0 to 100000.0. Default = 20.0. 1.0 = no amplifaction, higher values allow more boost. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_LIMITER filter. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_LIMITER : int + { + RELEASETIME, /* (Type:float) - Time to ramp the silence to full in ms. 1.0 to 1000.0. Default = 10.0. */ + CEILING, /* (Type:float) - Maximum level of the output signal in dB. -12.0 to 0.0. Default = 0.0. */ + MAXIMIZERGAIN, /* (Type:float) - Maximum amplification allowed in dB. 0.0 to 12.0. Default = 0.0. 0.0 = no amplifaction, higher values allow more boost. */ + MODE, /* (Type:float) - Channel processing mode. 0 or 1. Default = 0. 0 = Independent (limiter per channel), 1 = Linked. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_PARAMEQ filter. + + [REMARKS] + Parametric EQ is a bandpass filter that attenuates or amplifies a selected frequency and its neighbouring frequencies. + + To create a multi-band EQ create multiple FMOD_DSP_TYPE_PARAMEQ units and set each unit to different frequencies, for example 1000hz, 2000hz, 4000hz, 8000hz, 16000hz with a range of 1 octave each. + + When a frequency has its gain set to 1.0, the sound will be unaffected and represents the original signal exactly. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_PARAMEQ : int + { + CENTER, /* Frequency center. 20.0 to 22000.0. Default = 8000.0. */ + BANDWIDTH, /* Octave range around the center frequency to filter. 0.2 to 5.0. Default = 1.0. */ + GAIN /* Frequency Gain. 0.05 to 3.0. Default = 1.0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_MULTIBAND_EQ filter. + + [REMARKS] + Flexible five band parametric equalizer. + + [SEE_ALSO] + DSP::setParameterInt + DSP::getParameterInt + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_MULTIBAND_EQ : int + { + A_FILTER, /* (Type:int) - Band A: FMOD_DSP_MULTIBAND_EQ_FILTER_TYPE used to interpret the behavior of the remaining parameters. Default = FMOD_DSP_MULTIBAND_EQ_FILTER_LOWPASS_12DB */ + A_FREQUENCY, /* (Type:float) - Band A: Significant frequency in Hz, cutoff [low/high pass, low/high shelf], center [notch, peaking, band-pass], phase transition point [all-pass]. 20 to 24000. Default = 8000. */ + A_Q, /* (Type:float) - Band A: Quality factory, resonance [low/high pass], bandwidth [notch, peaking, band-pass], phase transition sharpness [all-pass], unused [low/high shelf]. 0.1 to 10.0. Default = 0.707. */ + A_GAIN, /* (Type:float) - Band A: Boost or attenuation in dB [peaking, high/low shelf only]. -30 to 30. Default = 0. */ + B_FILTER, /* (Type:int) - Band B: See Band A. Default = FMOD_DSP_MULTIBAND_EQ_FILTER_DISABLED */ + B_FREQUENCY, /* (Type:float) - Band B: See Band A */ + B_Q, /* (Type:float) - Band B: See Band A */ + B_GAIN, /* (Type:float) - Band B: See Band A */ + C_FILTER, /* (Type:int) - Band C: See Band A. Default = FMOD_DSP_MULTIBAND_EQ_FILTER_DISABLED */ + C_FREQUENCY, /* (Type:float) - Band C: See Band A. */ + C_Q, /* (Type:float) - Band C: See Band A. */ + C_GAIN, /* (Type:float) - Band C: See Band A. */ + D_FILTER, /* (Type:int) - Band D: See Band A. Default = FMOD_DSP_MULTIBAND_EQ_FILTER_DISABLED */ + D_FREQUENCY, /* (Type:float) - Band D: See Band A. */ + D_Q, /* (Type:float) - Band D: See Band A. */ + D_GAIN, /* (Type:float) - Band D: See Band A. */ + E_FILTER, /* (Type:int) - Band E: See Band A. Default = FMOD_DSP_MULTIBAND_EQ_FILTER_DISABLED */ + E_FREQUENCY, /* (Type:float) - Band E: See Band A. */ + E_Q, /* (Type:float) - Band E: See Band A. */ + E_GAIN, /* (Type:float) - Band E: See Band A. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Filter types for FMOD_DSP_MULTIBAND_EQ. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_MULTIBAND_EQ + + ] + */ + public enum DSP_MULTIBAND_EQ_FILTER_TYPE : int + { + DISABLED, /* Disabled filter, no processing. */ + LOWPASS_12DB, /* Resonant low-pass filter, attenuates frequencies (12dB per octave) above a given point (with specificed resonance) while allowing the rest to pass. */ + LOWPASS_24DB, /* Resonant low-pass filter, attenuates frequencies (24dB per octave) above a given point (with specificed resonance) while allowing the rest to pass. */ + LOWPASS_48DB, /* Resonant low-pass filter, attenuates frequencies (48dB per octave) above a given point (with specificed resonance) while allowing the rest to pass. */ + HIGHPASS_12DB, /* Resonant low-pass filter, attenuates frequencies (12dB per octave) below a given point (with specificed resonance) while allowing the rest to pass. */ + HIGHPASS_24DB, /* Resonant low-pass filter, attenuates frequencies (24dB per octave) below a given point (with specificed resonance) while allowing the rest to pass. */ + HIGHPASS_48DB, /* Resonant low-pass filter, attenuates frequencies (48dB per octave) below a given point (with specificed resonance) while allowing the rest to pass. */ + LOWSHELF, /* Low-shelf filter, boosts or attenuates frequencies (with specified gain) below a given point while allowing the rest to pass. */ + HIGHSHELF, /* High-shelf filter, boosts or attenuates frequencies (with specified gain) above a given point while allowing the rest to pass. */ + PEAKING, /* Peaking filter, boosts or attenuates frequencies (with specified gain) at a given point (with specificed bandwidth) while allowing the rest to pass. */ + BANDPASS, /* Band-pass filter, allows frequencies at a given point (with specificed bandwidth) to pass while attenuating frequencies outside this range. */ + NOTCH, /* Notch or band-reject filter, attenuates frequencies at a given point (with specificed bandwidth) while allowing frequencies outside this range to pass. */ + ALLPASS, /* All-pass filter, allows all frequencies to pass, but changes the phase response at a given point (with specified sharpness). */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_PITCHSHIFT filter. + + [REMARKS] + This pitch shifting unit can be used to change the pitch of a sound without speeding it up or slowing it down. + It can also be used for time stretching or scaling, for example if the pitch was doubled, and the frequency of the sound was halved, the pitch of the sound would sound correct but it would be twice as slow. + + Warning! This filter is very computationally expensive! Similar to a vocoder, it requires several overlapping FFT and IFFT's to produce smooth output, and can require around 440mhz for 1 stereo 48khz signal using the default settings. + Reducing the signal to mono will half the cpu usage, as will the overlap count. + Reducing this will lower audio quality, but what settings to use are largely dependant on the sound being played. A noisy polyphonic signal will need higher overlap and fft size compared to a speaking voice for example. + + This pitch shifter is based on the pitch shifter code at http://www.dspdimension.com, written by Stephan M. Bernsee. + The original code is COPYRIGHT 1999-2003 Stephan M. Bernsee . + + 'maxchannels' dictates the amount of memory allocated. By default, the maxchannels value is 0. If FMOD is set to stereo, the pitch shift unit will allocate enough memory for 2 channels. If it is 5.1, it will allocate enough memory for a 6 channel pitch shift, etc. + If the pitch shift effect is only ever applied to the global mix (ie it was added with System::addDSP), then 0 is the value to set as it will be enough to handle all speaker modes. + When the pitch shift is added to a channel (ie Channel::addDSP) then the channel count that comes in could be anything from 1 to 8 possibly. It is only in this case where you might want to increase the channel count above the output's channel count. + If a channel pitch shift is set to a lower number than the sound's channel count that is coming in, it will not pitch shift the sound. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_PITCHSHIFT : int + { + PITCH, /* Pitch value. 0.5 to 2.0. Default = 1.0. 0.5 = one octave down, 2.0 = one octave up. 1.0 does not change the pitch. */ + FFTSIZE, /* FFT window size. 256, 512, 1024, 2048, 4096. Default = 1024. Increase this to reduce 'smearing'. This effect is a warbling sound similar to when an mp3 is encoded at very low bitrates. */ + OVERLAP, /* Window overlap. 1 to 32. Default = 4. Increase this to reduce 'tremolo' effect. Increasing it by a factor of 2 doubles the CPU usage. */ + MAXCHANNELS /* Maximum channels supported. 0 to 16. 0 = same as fmod's default output polyphony, 1 = mono, 2 = stereo etc. See remarks for more. Default = 0. It is suggested to leave at 0! */ + } + + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_CHORUS filter. + + [REMARKS] + Chorous is an effect where the sound is more 'spacious' due to 1 to 3 versions of the sound being played along side the original signal but with the pitch of each copy modulating on a sine wave. + This is a highly configurable chorus unit. It supports 3 taps, small and large delay times and also feedback. + This unit also could be used to do a simple echo, or a flange effect. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_CHORUS : int + { + MIX, /* (Type:float) - Volume of original signal to pass to output. 0.0 to 100.0. Default = 50.0. */ + RATE, /* (Type:float) - Chorus modulation rate in Hz. 0.0 to 20.0. Default = 0.8 Hz. */ + DEPTH, /* (Type:float) - Chorus modulation depth. 0.0 to 100.0. Default = 3.0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_ITECHO filter. + This is effectively a software based echo filter that emulates the DirectX DMO echo effect. Impulse tracker files can support this, and FMOD will produce the effect on ANY platform, not just those that support DirectX effects! + + [REMARKS] + Note. Every time the delay is changed, the plugin re-allocates the echo buffer. This means the echo will dissapear at that time while it refills its new buffer. + Larger echo delays result in larger amounts of memory allocated. + + As this is a stereo filter made mainly for IT playback, it is targeted for stereo signals. + With mono signals only the FMOD_DSP_ITECHO_LEFTDELAY is used. + For multichannel signals (>2) there will be no echo on those channels. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + System::addDSP + ] + */ + public enum DSP_ITECHO : int + { + WETDRYMIX, /* (Type:float) - Ratio of wet (processed) signal to dry (unprocessed) signal. Must be in the range from 0.0 through 100.0 (all wet). Default = 50. */ + FEEDBACK, /* (Type:float) - Percentage of output fed back into input, in the range from 0.0 through 100.0. Default = 50. */ + LEFTDELAY, /* (Type:float) - Delay for left channel, in milliseconds, in the range from 1.0 through 2000.0. Default = 500 ms. */ + RIGHTDELAY, /* (Type:float) - Delay for right channel, in milliseconds, in the range from 1.0 through 2000.0. Default = 500 ms. */ + PANDELAY /* (Type:float) - Value that specifies whether to swap left and right delays with each successive echo. Ranges from 0.0 (equivalent to FALSE) to 1.0 (equivalent to TRUE), meaning no swap. Default = 0. CURRENTLY NOT SUPPORTED. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_COMPRESSOR unit. + This is a multichannel software limiter that is uniform across the whole spectrum. + + [REMARKS] + The limiter is not guaranteed to catch every peak above the threshold level, + because it cannot apply gain reduction instantaneously - the time delay is + determined by the attack time. However setting the attack time too short will + distort the sound, so it is a compromise. High level peaks can be avoided by + using a short attack time - but not too short, and setting the threshold a few + decibels below the critical level. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterBool + DSP::getParameterBool + FMOD_DSP_TYPE + ] + */ + public enum DSP_COMPRESSOR : int + { + THRESHOLD, /* (Type:float) - Threshold level (dB) in the range from -80 through 0. The default value is 0. */ + RATIO, /* (Type:float) - Compression Ratio (dB/dB) in the range from 1 to 50. The default value is 2.5. */ + ATTACK, /* (Type:float) - Attack time (milliseconds), in the range from 0.1 through 1000. The default value is 20. */ + RELEASE, /* (Type:float) - Release time (milliseconds), in the range from 10 through 5000. The default value is 100 */ + GAINMAKEUP, /* (Type:float) - Make-up gain (dB) applied after limiting, in the range from 0 through 30. The default value is 0. */ + USESIDECHAIN,/* (Type:bool) - Whether to analyse the sidechain signal instead of the input signal. The default value is false */ + LINKED /* (Type:bool) - FALSE = Independent (compressor per channel), TRUE = Linked. The default value is TRUE. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_SFXREVERB unit. + + [REMARKS] + This is a high quality I3DL2 based reverb. + On top of the I3DL2 property set, "Dry Level" is also included to allow the dry mix to be changed. + + These properties can be set with presets in FMOD_REVERB_PRESETS. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + FMOD_REVERB_PRESETS + ] + */ + public enum DSP_SFXREVERB : int + { + DECAYTIME, /* (Type:float) - Decay Time : Reverberation decay time at low-frequencies in milliseconds. Ranges from 100.0 to 20000.0. Default is 1500. */ + EARLYDELAY, /* (Type:float) - Early Delay : Delay time of first reflection in milliseconds. Ranges from 0.0 to 300.0. Default is 20. */ + LATEDELAY, /* (Type:float) - Reverb Delay : Late reverberation delay time relative to first reflection in milliseconds. Ranges from 0.0 to 100.0. Default is 40. */ + HFREFERENCE, /* (Type:float) - HF Reference : Reference frequency for high-frequency decay in Hz. Ranges from 20.0 to 20000.0. Default is 5000. */ + HFDECAYRATIO, /* (Type:float) - Decay HF Ratio : High-frequency decay time relative to decay time in percent. Ranges from 10.0 to 100.0. Default is 50. */ + DIFFUSION, /* (Type:float) - Diffusion : Reverberation diffusion (echo density) in percent. Ranges from 0.0 to 100.0. Default is 100. */ + DENSITY, /* (Type:float) - Density : Reverberation density (modal density) in percent. Ranges from 0.0 to 100.0. Default is 100. */ + LOWSHELFFREQUENCY, /* (Type:float) - Low Shelf Frequency : Transition frequency of low-shelf filter in Hz. Ranges from 20.0 to 1000.0. Default is 250. */ + LOWSHELFGAIN, /* (Type:float) - Low Shelf Gain : Gain of low-shelf filter in dB. Ranges from -36.0 to 12.0. Default is 0. */ + HIGHCUT, /* (Type:float) - High Cut : Cutoff frequency of low-pass filter in Hz. Ranges from 20.0 to 20000.0. Default is 20000. */ + EARLYLATEMIX, /* (Type:float) - Early/Late Mix : Blend ratio of late reverb to early reflections in percent. Ranges from 0.0 to 100.0. Default is 50. */ + WETLEVEL, /* (Type:float) - Wet Level : Reverb signal level in dB. Ranges from -80.0 to 20.0. Default is -6. */ + DRYLEVEL /* (Type:float) - Dry Level : Dry signal level in dB. Ranges from -80.0 to 20.0. Default is 0. */ + } + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_LOWPASS_SIMPLE filter. + This is a very simple low pass filter, based on two single-pole RC time-constant modules. + The emphasis is on speed rather than accuracy, so this should not be used for task requiring critical filtering. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_LOWPASS_SIMPLE : int + { + CUTOFF /* Lowpass cutoff frequency in hz. 10.0 to 22000.0. Default = 5000.0 */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_SEND DSP. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterInt + DSP::getParameterInt + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_SEND : int + { + RETURNID, /* (Type:int) - ID of the Return DSP this send is connected to (integer values only). -1 indicates no connected Return DSP. Default = -1. */ + LEVEL, /* (Type:float) - Send level. 0.0 to 1.0. Default = 1.0 */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_RETURN DSP. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterInt + DSP::getParameterInt + FMOD_DSP_TYPE + ] + */ + public enum DSP_RETURN : int + { + ID, /* (Type:int) - ID of this Return DSP. Read-only. Default = -1. */ + INPUT_SPEAKER_MODE /* (Type:int) - Input speaker mode of this return. Default = FMOD_SPEAKERMODE_DEFAULT. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_HIGHPASS_SIMPLE filter. + This is a very simple single-order high pass filter. + The emphasis is on speed rather than accuracy, so this should not be used for task requiring critical filtering. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_HIGHPASS_SIMPLE : int + { + CUTOFF /* (Type:float) - Highpass cutoff frequency in hz. 10.0 to 22000.0. Default = 1000.0 */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter values for the FMOD_DSP_PAN_2D_STEREO_MODE parameter of the FMOD_DSP_TYPE_PAN DSP. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_PAN + ] + */ + public enum DSP_PAN_2D_STEREO_MODE_TYPE : int + { + DISTRIBUTED, /* The parts of a stereo sound are spread around desination speakers based on FMOD_DSP_PAN_2D_EXTENT / FMOD_DSP_PAN_2D_DIRECTION */ + DISCRETE /* The L/R parts of a stereo sound are rotated around a circle based on FMOD_DSP_PAN_2D_STEREO_AXIS / FMOD_DSP_PAN_2D_STEREO_SEPARATION. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter values for the FMOD_DSP_PAN_MODE parameter of the FMOD_DSP_TYPE_PAN DSP. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_PAN + ] + */ + public enum DSP_PAN_MODE_TYPE : int + { + MONO, + STEREO, + SURROUND + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter values for the FMOD_DSP_PAN_3D_ROLLOFF parameter of the FMOD_DSP_TYPE_PAN DSP. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_PAN + ] + */ + public enum DSP_PAN_3D_ROLLOFF_TYPE : int + { + LINEARSQUARED, + LINEAR, + INVERSE, + INVERSETAPERED, + CUSTOM + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter values for the FMOD_DSP_PAN_3D_EXTENT_MODE parameter of the FMOD_DSP_TYPE_PAN DSP. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_PAN + ] + */ + public enum DSP_PAN_3D_EXTENT_MODE_TYPE : int + { + AUTO, + USER, + OFF + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_PAN DSP. + + [REMARKS] + FMOD_DSP_PAN_3D_PAN_BLEND controls the percentage of the effect supplied by FMOD_DSP_PAN_2D_DIRECTION and FMOD_DSP_PAN_2D_EXTENT. + + For FMOD_DSP_PAN_3D_POSITION, the following members in the FMOD_DSP_PARAMETER_3DATTRIBUTES_MULTI struct should be non zero. + - numlisteners - This is typically 1, can be up to 8. Typically more than 1 is only used for split screen purposes. The FMOD Panner will average angles and produce the best compromise for panning and attenuation. + - relative[listenernum].position - This is the delta between the listener position and the sound position. Typically the listener position is subtracted from the sound position. + - relative[listenernum].forward - This is the sound's forward vector. Optional, set to 0,0,1 if not needed. This is only relevant for more than mono sounds in 3D, that are spread amongst the destination speakers at the time of panning. + If the sound rotates then the L/R part of a stereo sound will rotate amongst its destination speakers. + If the sound has moved and pinpointed into a single speaker, rotation of the sound will have no effect as at that point the channels are collapsed into a single point. + + For FMOD_DSP_PAN_2D_STEREO_MODE, when it is set to FMOD_DSP_PAN_2D_STEREO_MODE_DISCRETE, only FMOD_DSP_PAN_2D_STEREO_SEPARATION and FMOD_DSP_PAN_2D_STEREO_AXIS are used. + When it is set to FMOD_DSP_PAN_2D_STEREO_MODE_DISTRIBUTED, then standard FMOD_DSP_PAN_2D_DIRECTION/FMOD_DSP_PAN_2D_EXTENT parameters are used. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterInt + DSP::getParameterInt + DSP::setParameterData + DSP::getParameterData + FMOD_DSP_TYPE + ] + */ + public enum DSP_PAN : int + { + MODE, /* (Type:int) - Panner mode. FMOD_DSP_PAN_MODE_MONO for mono down-mix, FMOD_DSP_PAN_MODE_STEREO for stereo panning or FMOD_DSP_PAN_MODE_SURROUND for surround panning. Default = FMOD_DSP_PAN_MODE_SURROUND */ + _2D_STEREO_POSITION, /* (Type:float) - 2D Stereo pan position. -100.0 to 100.0. Default = 0.0. */ + _2D_DIRECTION, /* (Type:float) - 2D Surround pan direction. Direction from center point of panning circle. -180.0 (degrees) to 180.0 (degrees). 0 = front center, -180 or +180 = rear speakers center point. Default = 0.0. */ + _2D_EXTENT, /* (Type:float) - 2D Surround pan extent. Distance from center point of panning circle. 0.0 (degrees) to 360.0 (degrees). Default = 360.0. */ + _2D_ROTATION, /* (Type:float) - 2D Surround pan rotation. -180.0 (degrees) to 180.0 (degrees). Default = 0.0. */ + _2D_LFE_LEVEL, /* (Type:float) - 2D Surround pan LFE level. 2D LFE level in dB. -80.0 (db) to 20.0 (db). Default = 0.0. */ + _2D_STEREO_MODE, /* (Type:int) - Stereo-To-Surround Mode. FMOD_DSP_PAN_2D_STEREO_MODE_DISTRIBUTED to FMOD_DSP_PAN_2D_STEREO_MODE_DISCRETE. Default = FMOD_DSP_PAN_2D_STEREO_MODE_DISCRETE.*/ + _2D_STEREO_SEPARATION, /* (Type:float) - Stereo-To-Surround Stereo For FMOD_DSP_PAN_2D_STEREO_MODE_DISCRETE mode. Separation/width of L/R parts of stereo sound. -180.0 (degrees) to +180.0 (degrees). Default = 60.0. */ + _2D_STEREO_AXIS, /* (Type:float) - Stereo-To-Surround Stereo For FMOD_DSP_PAN_2D_STEREO_MODE_DISCRETE mode. Axis/rotation of L/R parts of stereo sound. -180.0 (degrees) to +180.0 (degrees). Default = 0.0. */ + ENABLED_SPEAKERS, /* (Type:int) - Speakers Enabled. Bitmask for each speaker from 0 to 32 to be considered by panner. Use to disable speakers from being panned to. 0 to 0xFFF. Default = 0xFFF (All on). */ + _3D_POSITION, /* (Type:data) - 3D Position. Data of type FMOD_DSP_PARAMETER_3DATTRIBUTES_MULTI. See remarks on what to fill out. */ + _3D_ROLLOFF, /* (Type:int) - 3D Rolloff. FMOD_DSP_PAN_3D_ROLLOFF_LINEARSQUARED to FMOD_DSP_PAN_3D_ROLLOFF_CUSTOM. Default = FMOD_DSP_PAN_3D_ROLLOFF_LINEARSQUARED. */ + _3D_MIN_DISTANCE, /* (Type:float) - 3D Min Distance. 0.0 to 1e+18f. Default = 1.0. */ + _3D_MAX_DISTANCE, /* (Type:float) - 3D Max Distance. 0.0 to 1e+18f. Default = 20.0. */ + _3D_EXTENT_MODE, /* (Type:int) - 3D Extent Mode. FMOD_DSP_PAN_3D_EXTENT_MODE_AUTO to FMOD_DSP_PAN_3D_EXTENT_MODE_OFF. Default = FMOD_DSP_PAN_3D_EXTENT_MODE_AUTO. */ + _3D_SOUND_SIZE, /* (Type:float) - 3D Sound Size. 0.0 to 1e+18f. Default = 0.0. */ + _3D_MIN_EXTENT, /* (Type:float) - 3D Min Extent. 0.0 (degrees) to 360.0 (degrees). Default = 0.0. */ + _3D_PAN_BLEND, /* (Type:float) - 3D Pan Blend. 0.0 (fully 2D) to 1.0 (fully 3D). Default = 0.0. */ + LFE_UPMIX_ENABLED, /* (Type:int) - LFE Upmix Enabled. Determines whether non-LFE source channels should mix to the LFE or leave it alone. 0 (off) to 1 (on). Default = 0 (off). */ + OVERALL_GAIN, /* (Type:data) - Overall gain. For information only, not set by user. Data of type FMOD_DSP_PARAMETER_DATA_TYPE_OVERALLGAIN to provide to FMOD, to allow FMOD to know the DSP is scaling the signal for virtualization purposes. */ + SURROUND_SPEAKER_MODE, /* (Type:int) - Surround speaker mode. Target speaker mode for surround panning. Default = FMOD_SPEAKERMODE_DEFAULT. */ + _2D_HEIGHT_BLEND, /* (Type:float) - 2D Height blend. When FMOD_DSP_PAN_SURROUND_SPEAKER_MODE has height speakers, control the blend between ground and height. 0.0 (ground speakers only) to 1.0 (top speakers only). Default = 0.0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter values for the FMOD_DSP_THREE_EQ_CROSSOVERSLOPE parameter of the FMOD_DSP_TYPE_THREE_EQ DSP. + + [REMARKS] + + [SEE_ALSO] + FMOD_DSP_THREE_EQ + ] + */ + public enum DSP_THREE_EQ_CROSSOVERSLOPE_TYPE : int + { + _12DB, + _24DB, + _48DB + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_THREE_EQ filter. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterInt + DSP::getParameterInt + FMOD_DSP_TYPE + FMOD_DSP_THREE_EQ_CROSSOVERSLOPE_TYPE + ] + */ + public enum DSP_THREE_EQ : int + { + LOWGAIN, /* (Type:float) - Low frequency gain in dB. -80.0 to 10.0. Default = 0. */ + MIDGAIN, /* (Type:float) - Mid frequency gain in dB. -80.0 to 10.0. Default = 0. */ + HIGHGAIN, /* (Type:float) - High frequency gain in dB. -80.0 to 10.0. Default = 0. */ + LOWCROSSOVER, /* (Type:float) - Low-to-mid crossover frequency in Hz. 10.0 to 22000.0. Default = 400.0. */ + HIGHCROSSOVER, /* (Type:float) - Mid-to-high crossover frequency in Hz. 10.0 to 22000.0. Default = 4000.0. */ + CROSSOVERSLOPE /* (Type:int) - Crossover Slope. 0 = 12dB/Octave, 1 = 24dB/Octave, 2 = 48dB/Octave. Default = 1 (24dB/Octave). */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + List of windowing methods for the FMOD_DSP_TYPE_FFT unit. Used in spectrum analysis to reduce leakage / transient signals intefering with the analysis. + This is a problem with analysis of continuous signals that only have a small portion of the signal sample (the fft window size). + Windowing the signal with a curve or triangle tapers the sides of the fft window to help alleviate this problem. + + [REMARKS] + Cyclic signals such as a sine wave that repeat their cycle in a multiple of the window size do not need windowing. + I.e. If the sine wave repeats every 1024, 512, 256 etc samples and the FMOD fft window is 1024, then the signal would not need windowing. + Not windowing is the same as FMOD_DSP_FFT_WINDOW_RECT, which is the default. + If the cycle of the signal (ie the sine wave) is not a multiple of the window size, it will cause frequency abnormalities, so a different windowing method is needed. + + FMOD_DSP_FFT_WINDOW_RECT. + + + FMOD_DSP_FFT_WINDOW_TRIANGLE. + + + FMOD_DSP_FFT_WINDOW_HAMMING. + + + FMOD_DSP_FFT_WINDOW_HANNING. + + + FMOD_DSP_FFT_WINDOW_BLACKMAN. + + + FMOD_DSP_FFT_WINDOW_BLACKMANHARRIS. + + + [SEE_ALSO] + FMOD_DSP_FFT + ] + */ + public enum DSP_FFT_WINDOW : int + { + RECT, /* w[n] = 1.0 */ + TRIANGLE, /* w[n] = TRI(2n/N) */ + HAMMING, /* w[n] = 0.54 - (0.46 * COS(n/N) ) */ + HANNING, /* w[n] = 0.5 * (1.0 - COS(n/N) ) */ + BLACKMAN, /* w[n] = 0.42 - (0.5 * COS(n/N) ) + (0.08 * COS(2.0 * n/N) ) */ + BLACKMANHARRIS /* w[n] = 0.35875 - (0.48829 * COS(1.0 * n/N)) + (0.14128 * COS(2.0 * n/N)) - (0.01168 * COS(3.0 * n/N)) */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_FFT dsp effect. + + [REMARKS] + Set the attributes for the spectrum analysis with FMOD_DSP_FFT_WINDOWSIZE and FMOD_DSP_FFT_WINDOWTYPE, and retrieve the results with FMOD_DSP_FFT_SPECTRUM and FMOD_DSP_FFT_DOMINANT_FREQ. + FMOD_DSP_FFT_SPECTRUM stores its data in the FMOD_DSP_PARAMETER_DATA_TYPE_FFT. You will need to cast to this structure to get the right data. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterInt + DSP::getParameterInt + DSP::setParameterData + DSP::getParameterData + FMOD_DSP_TYPE + FMOD_DSP_FFT_WINDOW + ] + */ + public enum DSP_FFT : int + { + WINDOWSIZE, /* (Type:int) - [r/w] Must be a power of 2 between 128 and 16384. 128, 256, 512, 1024, 2048, 4096, 8192, 16384 are accepted. Default = 2048. */ + WINDOWTYPE, /* (Type:int) - [r/w] Refer to FMOD_DSP_FFT_WINDOW enumeration. Default = FMOD_DSP_FFT_WINDOW_HAMMING. */ + SPECTRUMDATA, /* (Type:data) - [r] Returns the current spectrum values between 0 and 1 for each 'fft bin'. Cast data to FMOD_DSP_PARAMETER_DATA_TYPE_FFT. Divide the niquist rate by the window size to get the hz value per entry. */ + DOMINANT_FREQ /* (Type:float) - [r] Returns the dominant frequencies for each channel. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_ENVELOPEFOLLOWER unit. + This is a simple envelope follower for tracking the signal level. + + [REMARKS] + This unit does not affect the incoming signal + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterBool + DSP::getParameterBool + FMOD_DSP_TYPE + ] + */ + public enum DSP_ENVELOPEFOLLOWER : int + { + ATTACK, /* (Type:float) - Attack time (milliseconds), in the range from 0.1 through 1000. The default value is 20. */ + RELEASE, /* (Type:float) - Release time (milliseconds), in the range from 10 through 5000. The default value is 100 */ + ENVELOPE, /* (Type:float) - Current value of the envelope, in the range 0 to 1. Read-only. */ + USESIDECHAIN /* (Type:bool) - Whether to analyse the sidechain signal instead of the input signal. The default value is false */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_CHORUS filter. + + [REMARKS] + Convolution Reverb reverb IR. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterData + DSP::getParameterData + FMOD_DSP_TYPE + ] + */ + public enum DSP_CONVOLUTION_REVERB : int + { + IR, /* (Type:data) - [w] 16-bit reverb IR (short*) with an extra sample prepended to the start which specifies the number of channels. */ + WET, /* (Type:float) - [r/w] Volume of echo signal to pass to output in dB. -80.0 to 10.0. Default = 0. */ + DRY, /* (Type:float) - [r/w] Original sound volume in dB. -80.0 to 10.0. Default = 0. */ + LINKED /* (Type:bool) - [r/w] Linked - channels are mixed together before processing through the reverb. Default = TRUE. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_CHANNELMIX_OUTPUTGROUPING parameter for FMOD_DSP_TYPE_CHANNELMIX effect. + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterInt + DSP::getParameterInt + FMOD_DSP_TYPE + ] + */ + public enum DSP_CHANNELMIX_OUTPUT : int + { + DEFAULT, /* Output channel count = input channel count. Mapping: See FMOD_SPEAKER enumeration. */ + ALLMONO, /* Output channel count = 1. Mapping: Mono, Mono, Mono, Mono, Mono, Mono, ... (each channel all the way up to FMOD_MAX_CHANNEL_WIDTH channels are treated as if they were mono) */ + ALLSTEREO, /* Output channel count = 2. Mapping: Left, Right, Left, Right, Left, Right, ... (each pair of channels is treated as stereo all the way up to FMOD_MAX_CHANNEL_WIDTH channels) */ + ALLQUAD, /* Output channel count = 4. Mapping: Repeating pattern of Front Left, Front Right, Surround Left, Surround Right. */ + ALL5POINT1, /* Output channel count = 6. Mapping: Repeating pattern of Front Left, Front Right, Center, LFE, Surround Left, Surround Right. */ + ALL7POINT1, /* Output channel count = 8. Mapping: Repeating pattern of Front Left, Front Right, Center, LFE, Surround Left, Surround Right, Back Left, Back Right. */ + ALLLFE /* Output channel count = 6. Mapping: Repeating pattern of LFE in a 5.1 output signal. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_CHANNELMIX filter. + + [REMARKS] + For FMOD_DSP_CHANNELMIX_OUTPUTGROUPING, this value will set the output speaker format for the DSP, and also map the incoming channels to the + outgoing channels in a round-robin fashion. Use this for example play a 32 channel input signal as if it were a repeating group of output signals. + Ie. + FMOD_DSP_CHANNELMIX_OUTPUT_ALLMONO = all incoming channels are mixed to a mono output. + FMOD_DSP_CHANNELMIX_OUTPUT_ALLSTEREO = all incoming channels are mixed to a stereo output, ie even incoming channels 0,2,4,6,etc are mixed to left, and odd incoming channels 1,3,5,7,etc are mixed to right. + FMOD_DSP_CHANNELMIX_OUTPUT_ALL5POINT1 = all incoming channels are mixed to a 5.1 output. If there are less than 6 coming in, it will just fill the first n channels in the 6 output channels. + If there are more, then it will repeat the input pattern to the output like it did with the stereo case, ie 12 incoming channels are mapped as 0-5 mixed to the + 5.1 output and 6 to 11 mapped to the 5.1 output. + FMOD_DSP_CHANNELMIX_OUTPUT_ALLLFE = all incoming channels are mixed to a 5.1 output but via the LFE channel only. + + + [SEE_ALSO] + DSP::setParameterInt + DSP::getParameterInt + DSP::setParameterFloat + DSP::getParameterFloat + FMOD_DSP_TYPE + ] + */ + public enum DSP_CHANNELMIX : int + { + OUTPUTGROUPING, /* (Type:int) - Refer to FMOD_DSP_CHANNELMIX_OUTPUT enumeration. Default = FMOD_DSP_CHANNELMIX_OUTPUT_DEFAULT. See remarks. */ + GAIN_CH0, /* (Type:float) - Channel #0 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH1, /* (Type:float) - Channel #1 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH2, /* (Type:float) - Channel #2 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH3, /* (Type:float) - Channel #3 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH4, /* (Type:float) - Channel #4 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH5, /* (Type:float) - Channel #5 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH6, /* (Type:float) - Channel #6 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH7, /* (Type:float) - Channel #7 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH8, /* (Type:float) - Channel #8 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH9, /* (Type:float) - Channel #9 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH10, /* (Type:float) - Channel #10 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH11, /* (Type:float) - Channel #11 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH12, /* (Type:float) - Channel #12 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH13, /* (Type:float) - Channel #13 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH14, /* (Type:float) - Channel #14 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH15, /* (Type:float) - Channel #15 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH16, /* (Type:float) - Channel #16 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH17, /* (Type:float) - Channel #17 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH18, /* (Type:float) - Channel #18 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH19, /* (Type:float) - Channel #19 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH20, /* (Type:float) - Channel #20 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH21, /* (Type:float) - Channel #21 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH22, /* (Type:float) - Channel #22 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH23, /* (Type:float) - Channel #23 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH24, /* (Type:float) - Channel #24 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH25, /* (Type:float) - Channel #25 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH26, /* (Type:float) - Channel #26 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH27, /* (Type:float) - Channel #27 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH28, /* (Type:float) - Channel #28 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH29, /* (Type:float) - Channel #29 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH30, /* (Type:float) - Channel #30 gain in dB. -80.0 to 10.0. Default = 0. */ + GAIN_CH31 /* (Type:float) - Channel #31 gain in dB. -80.0 to 10.0. Default = 0. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TRANSCEIVER_SPEAKERMODE parameter for FMOD_DSP_TYPE_TRANSCEIVER effect. + + [REMARKS] + The speaker mode of a transceiver buffer (of which there are up to 32 of) is determined automatically depending on the signal flowing through the transceiver effect, or it can be forced. + Use a smaller fixed speaker mode buffer to save memory. + + Only relevant for transmitter dsps, as they control the format of the transceiver channel's buffer. + + If multiple transceivers transmit to a single buffer in different speaker modes, it will allocate memory for each speaker mode. This uses more memory than a single speaker mode. + If there are multiple receivers reading from a channel with multiple speaker modes, it will read them all and mix them together. + + If the system's speaker mode is stereo or mono, it will not create a 3rd buffer, it will just use the mono/stereo speaker mode buffer. + + [SEE_ALSO] + DSP::setParameterInt + DSP::getParameterInt + FMOD_DSP_TYPE + ] + */ + public enum DSP_TRANSCEIVER_SPEAKERMODE : int + { + AUTO = -1, /* A transmitter will use whatever signal channel count coming in to the transmitter, to determine which speaker mode is allocated for the transceiver channel. */ + MONO = 0, /* A transmitter will always downmix to a mono channel buffer. */ + STEREO, /* A transmitter will always upmix or downmix to a stereo channel buffer. */ + SURROUND, /* A transmitter will always upmix or downmix to a surround channel buffer. Surround is the speaker mode of the system above stereo, so could be quad/surround/5.1/7.1. */ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_TRANSCEIVER filter. + + [REMARKS] + The transceiver only transmits and receives to a global array of 32 channels. The transceiver can be set to receiver mode (like a return) and can receive the signal at a variable gain (FMOD_DSP_TRANSCEIVER_GAIN). + The transceiver can also be set to transmit to a chnnel (like a send) and can transmit the signal with a variable gain (FMOD_DSP_TRANSCEIVER_GAIN). + + The FMOD_DSP_TRANSCEIVER_TRANSMITSPEAKERMODE is only applicable to the transmission format, not the receive format. This means this parameter is ignored in 'receive mode'. This allows receivers to receive at + the speaker mode of the user's choice. Receiving from a mono channel, is cheaper than receiving from a surround channel for example. + The 3 speaker modes FMOD_DSP_TRANSCEIVER_SPEAKERMODE_MONO, FMOD_DSP_TRANSCEIVER_SPEAKERMODE_STEREO, FMOD_DSP_TRANSCEIVER_SPEAKERMODE_SURROUND are stored as seperate buffers in memory for a tranmitter channel. + To save memory, use 1 common speaker mode for a transmitter. + + The transceiver is double buffered to avoid desyncing of transmitters and receivers. This means there will be a 1 block delay on a receiver, compared to the data sent from a transmitter. + + Multiple transmitters sending to the same channel will be mixed together. + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterInt + DSP::getParameterInt + DSP::setParameterBool + DSP::getParameterBool + FMOD_DSP_TYPE + ] + */ + public enum DSP_TRANSCEIVER : int + { + TRANSMIT, /* (Type:bool) - [r/w] - FALSE = Transceiver is a 'receiver' (like a return) and accepts data from a channel. TRUE = Transceiver is a 'transmitter' (like a send). Default = FALSE. */ + GAIN, /* (Type:float) - [r/w] - Gain to receive or transmit at in dB. -80.0 to 10.0. Default = 0. */ + CHANNEL, /* (Type:int) - [r/w] - Integer to select current global slot, shared by all Transceivers, that can be transmitted to or received from. 0 to 31. Default = 0.*/ + TRANSMITSPEAKERMODE /* (Type:int) - [r/w] - Speaker mode (transmitter mode only). Specifies either 0 (Auto) Default = 0.*/ + } + + + /* + [ENUM] + [ + [DESCRIPTION] + Parameter types for the FMOD_DSP_TYPE_OBJECTPAN DSP. 3D Object panners are meant for hardware 3d object systems like Dolby Atmos or Sony Morpheus. + These object panners take input in, and send it to the 7.1 bed, but do not send the signal further down the DSP chain (the output of the dsp is silence). + + [REMARKS] + + [SEE_ALSO] + DSP::setParameterFloat + DSP::getParameterFloat + DSP::setParameterInt + DSP::getParameterInt + DSP::setParameterData + DSP::getParameterData + FMOD_DSP_TYPE + ] + */ + public enum DSP_OBJECTPAN : int + { + _3D_POSITION, /* (Type:data) - 3D Position. data of type FMOD_DSP_PARAMETER_3DATTRIBUTES_MULTI */ + _3D_ROLLOFF, /* (Type:int) - 3D Rolloff. FMOD_DSP_PAN_3D_ROLLOFF_LINEARSQUARED to FMOD_DSP_PAN_3D_ROLLOFF_CUSTOM. Default = FMOD_DSP_PAN_3D_ROLLOFF_LINEARSQUARED. */ + _3D_MIN_DISTANCE, /* (Type:float) - 3D Min Distance. 0.0 to 1e+19f. Default = 1.0. */ + _3D_MAX_DISTANCE, /* (Type:float) - 3D Max Distance. 0.0 to 1e+19f. Default = 20.0. */ + _3D_EXTENT_MODE, /* (Type:int) - 3D Extent Mode. FMOD_DSP_PAN_3D_EXTENT_MODE_AUTO to FMOD_DSP_PAN_3D_EXTENT_MODE_OFF. Default = FMOD_DSP_PAN_3D_EXTENT_MODE_AUTO. */ + _3D_SOUND_SIZE, /* (Type:float) - 3D Sound Size. 0.0 to 1e+19f. Default = 0.0. */ + _3D_MIN_EXTENT, /* (Type:float) - 3D Min Extent. 0.0 (degrees) to 360.0 (degrees). Default = 0.0. */ + OVERALL_GAIN, /* (Type:data) - Overall gain. For information only, not set by user. Data of type FMOD_DSP_PARAMETER_DATA_TYPE_OVERALLGAIN to provide to FMOD, to allow FMOD to know the DSP is scaling the signal for virtualization purposes. */ + OUTPUTGAIN /* (Type:float) - Output gain level. 0.0 to 1.0 linear scale. For the user to scale the output of the object panner's signal. */ + } + +/*$ preserve start $*/ +} +/*$ preserve end $*/ diff --git a/Assets/Plugins/FMOD/Wrapper/fmod_dsp.cs.meta b/Assets/Plugins/FMOD/Wrapper/fmod_dsp.cs.meta new file mode 100644 index 0000000..53e10b4 --- /dev/null +++ b/Assets/Plugins/FMOD/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/Assets/Plugins/FMOD/Wrapper/fmod_errors.cs b/Assets/Plugins/FMOD/Wrapper/fmod_errors.cs new file mode 100644 index 0000000..718a137 --- /dev/null +++ b/Assets/Plugins/FMOD/Wrapper/fmod_errors.cs @@ -0,0 +1,103 @@ +/* =================================================================================================== */ +/* FMOD Studio - Error string header file. Copyright (c), Firelight Technologies Pty, Ltd. 2004-2018. */ +/* */ +/* Use this header if you want to store or display a string version / english explanation of */ +/* the FMOD error codes. */ +/* */ +/* =================================================================================================== */ + +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/Assets/Plugins/FMOD/Wrapper/fmod_errors.cs.meta b/Assets/Plugins/FMOD/Wrapper/fmod_errors.cs.meta new file mode 100644 index 0000000..a22cd1c --- /dev/null +++ b/Assets/Plugins/FMOD/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/Assets/Plugins/FMOD/Wrapper/fmod_studio.cs b/Assets/Plugins/FMOD/Wrapper/fmod_studio.cs new file mode 100644 index 0000000..9552e05 --- /dev/null +++ b/Assets/Plugins/FMOD/Wrapper/fmod_studio.cs @@ -0,0 +1,1874 @@ +/* ========================================================================================== */ +/* */ +/* FMOD System - C# Wrapper . Copyright (c), Firelight Technologies Pty, Ltd. 2004-2018. */ +/* */ +/* ========================================================================================== */ + +using System; +using System.Text; +using System.Runtime.InteropServices; +using System.Collections; + +namespace FMOD.Studio +{ + public class STUDIO_VERSION + { +#if (UNITY_IPHONE || UNITY_TVOS || UNITY_SWITCH || UNITY_WEBGL) && !UNITY_EDITOR + public const string dll = "__Internal"; +#elif (UNITY_PS4 || UNITY_WIIU || UNITY_PSP2) && !UNITY_EDITOR + public const string dll = "libfmodstudio"; +#elif (UNITY_PS4) && DEVELOPMENT_BUILD + public const string dll = "libfmodstudioL"; +#elif UNITY_EDITOR || ((UNITY_STANDALONE || UNITY_ANDROID || UNITY_XBOXONE) && DEVELOPMENT_BUILD) + public const string dll = "fmodstudioL"; +#else + public const string dll = "fmodstudio"; +#endif + } + + public enum STOP_MODE : int + { + ALLOWFADEOUT, /* Allows AHDSR modulators to complete their release, and DSP effect tails to play out. */ + IMMEDIATE, /* Stops the event instance immediately. */ + } + + public enum LOADING_STATE : int + { + UNLOADING, /* Currently unloading. */ + UNLOADED, /* Not loaded. */ + LOADING, /* Loading in progress. */ + LOADED, /* Loaded and ready to play. */ + ERROR, /* Failed to load and is now in error state. */ + } + + [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; /* [w] Size of this structure. NOTE: For C# wrapper, users can leave this at 0. ! */ + public int commandqueuesize; /* [r/w] Optional. Specify 0 to ignore. Specify the command queue size for studio async processing. Default 4096 (4kb) */ + public int handleinitialsize; /* [r/w] Optional. Specify 0 to ignore. Specify the initial size to allocate for handles. Memory for handles will grow as needed in pages. */ + public int studioupdateperiod; /* [r/w] Optional. Specify 0 to ignore. Specify the update period of Studio when in async mode, in milliseconds. Will be quantised to the nearest multiple of mixer duration. Default is 20ms. */ + public int idlesampledatapoolsize; /* [r/w] Optional. Specify 0 to ignore. Specify the amount of sample data to keep in memory when no longer used, to avoid repeated disk IO. Use -1 to disable. Default is 256kB. */ + } + + [StructLayout(LayoutKind.Sequential)] + public struct CPU_USAGE + { + public float dspusage; /* Returns the % CPU time taken by DSP processing on the low level mixer thread. */ + public float streamusage; /* Returns the % CPU time taken by stream processing on the low level stream thread. */ + public float geometryusage; /* Returns the % CPU time taken by geometry processing on the low level geometry thread. */ + public float updateusage; /* Returns the % CPU time taken by low level update, called as part of the studio update. */ + public float studiousage; /* Returns the % CPU time taken by studio update, called from the studio thread. Does not include low level update time. */ + } + + [StructLayout(LayoutKind.Sequential)] + public struct BUFFER_INFO + { + public int currentusage; /* Current buffer usage in bytes. */ + public int peakusage; /* Peak buffer usage in bytes. */ + public int capacity; /* Buffer capacity in bytes. */ + public int stallcount; /* Number of stalls due to buffer overflow. */ + public float stalltime; /* Amount of time stalled due to buffer overflow, in seconds. */ + } + + [StructLayout(LayoutKind.Sequential)] + public struct BUFFER_USAGE + { + public BUFFER_INFO studiocommandqueue; /* Information for the Studio Async Command buffer, controlled by FMOD_STUDIO_ADVANCEDSETTINGS commandqueuesize. */ + public BUFFER_INFO studiohandle; /* Information for the Studio handle table, controlled by FMOD_STUDIO_ADVANCEDSETTINGS handleinitialsize. */ + } + + [StructLayout(LayoutKind.Sequential)] + public struct BANK_INFO + { + public int size; /* The size of this struct (for binary compatibility) */ + public IntPtr userdata; /* User data to be passed to the file callbacks */ + public int userdatalength; /* If this is non-zero, userdata will be copied internally */ + public FILE_OPENCALLBACK opencallback; /* Callback for opening this file. */ + public FILE_CLOSECALLBACK closecallback; /* Callback for closing this file. */ + public FILE_READCALLBACK readcallback; /* Callback for reading from this file. */ + public FILE_SEEKCALLBACK seekcallback; /* Callback for seeking within this file. */ + } + + [Flags] + public enum SYSTEM_CALLBACK_TYPE : uint + { + PREUPDATE = 0x00000001, /* Called at the start of the main Studio update. For async mode this will be on its own thread. */ + POSTUPDATE = 0x00000002, /* Called at the end of the main Studio update. For async mode this will be on its own thread. */ + BANK_UNLOAD = 0x00000004, /* Called when bank has just been unloaded, after all resources are freed. CommandData will be the bank handle.*/ + ALL = 0xFFFFFFFF, /* Pass this mask to Studio::System::setCallback to receive all callback types. */ + } + + public delegate RESULT SYSTEM_CALLBACK(IntPtr systemraw, SYSTEM_CALLBACK_TYPE type, IntPtr parameters, IntPtr userdata); + + public enum PARAMETER_TYPE : int + { + GAME_CONTROLLED, /* Controlled via the API using Studio::ParameterInstance::setValue. */ + AUTOMATIC_DISTANCE, /* Distance between the event and the listener. */ + AUTOMATIC_EVENT_CONE_ANGLE, /* Angle between the event's forward vector and the vector pointing from the event to the listener (0 to 180 degrees). */ + AUTOMATIC_EVENT_ORIENTATION, /* Horizontal angle between the event's forward vector and listener's forward vector (-180 to 180 degrees). */ + AUTOMATIC_DIRECTION, /* Horizontal angle between the listener's forward vector and the vector pointing from the listener to the event (-180 to 180 degrees). */ + AUTOMATIC_ELEVATION, /* Angle between the listener's XZ plane and the vector pointing from the listener to the event (-90 to 90 degrees). */ + AUTOMATIC_LISTENER_ORIENTATION, /* Horizontal angle between the listener's forward vector and the global positive Z axis (-180 to 180 degrees). */ + } + + [StructLayout(LayoutKind.Sequential)] + public struct PARAMETER_DESCRIPTION + { + public StringWrapper name; /* Name of the parameter. */ + public int index; /* Index of the parameter */ + public float minimum; /* Minimum parameter value. */ + public float maximum; /* Maximum parameter value. */ + public float defaultvalue; /* Default parameter value. */ + public PARAMETER_TYPE type; /* Type of the parameter */ + } + + // 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; /* The filename or memory buffer that contains the sound. */ + public MODE mode; /* Mode flags required for loading the sound. */ + public CREATESOUNDEXINFO exinfo; /* Extra information required for loading the sound. */ + public int subsoundindex; /* Subsound index for loading the sound. */ + + 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, /* Integer property */ + BOOLEAN, /* Boolean property */ + FLOAT, /* Float property */ + STRING, /* String property */ + } + + [StructLayout(LayoutKind.Sequential)] + public struct USER_PROPERTY + { + public StringWrapper name; /* Name of the user property. */ + public USER_PROPERTY_TYPE type; /* Type of the user property. Use this to select one of the following values. */ + 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, /* Initialize normally. */ + LIVEUPDATE = 0x00000001, /* Enable live update. */ + ALLOW_MISSING_PLUGINS = 0x00000002, /* Load banks even if they reference plugins that have not been loaded. */ + SYNCHRONOUS_UPDATE = 0x00000004, /* Disable asynchronous processing and perform all processing on the calling thread instead. */ + DEFERRED_CALLBACKS = 0x00000008, /* Defer timeline callbacks until the main update. See Studio::EventInstance::setCallback for more information. */ + LOAD_FROM_UPDATE = 0x00000010, /* No additional threads are created for bank and resource loading. Loading is driven from Studio::System::update. Mainly used in non-realtime situations. */ + } + + [Flags] + public enum LOAD_BANK_FLAGS : uint + { + NORMAL = 0x00000000, /* Standard behaviour. */ + NONBLOCKING = 0x00000001, /* Bank loading occurs asynchronously rather than occurring immediately. */ + DECOMPRESS_SAMPLES = 0x00000002, /* Force samples to decompress into memory when they are loaded, rather than staying compressed. */ + } + + [Flags] + public enum COMMANDCAPTURE_FLAGS : uint + { + NORMAL = 0x00000000, /* Standard behaviour. */ + FILEFLUSH = 0x00000001, /* Call file flush on every command. */ + SKIP_INITIAL_STATE = 0x00000002, /* Normally the initial state of banks and instances is captured, unless this flag is set. */ + } + + [Flags] + public enum COMMANDREPLAY_FLAGS : uint + { + NORMAL = 0x00000000, /* Standard behaviour. */ + SKIP_CLEANUP = 0x00000001, /* Normally the playback will release any created resources when it stops, unless this flag is set. */ + FAST_FORWARD = 0x00000002, /* Play back at maximum speed, ignoring the timing of the original replay. */ + SKIP_BANK_LOAD = 0x00000004, /* Skip commands related to bank loading. */ + } + + public enum PLAYBACK_STATE : int + { + PLAYING, /* Currently playing. */ + SUSTAINING, /* The timeline cursor is paused on a sustain point. */ + STOPPED, /* Not playing. */ + STARTING, /* Start has been called but the instance is not fully started yet. */ + STOPPING, /* Stop has been called but the instance is not fully stopped yet. */ + } + + public enum EVENT_PROPERTY : int + { + CHANNELPRIORITY, /* Priority to set on low-level channels created by this event instance (-1 to 256). */ + SCHEDULE_DELAY, /* Schedule delay to synchronized playback for multiple tracks in DS clocks, or -1 for default. */ + SCHEDULE_LOOKAHEAD, /* Schedule look-ahead on the timeline in DSP clocks, or -1 for default. */ + MINIMUM_DISTANCE, /* Override the event's 3D minimum distance, or -1 for default. */ + MAXIMUM_DISTANCE /* Override the event's 3D maximum distance, or -1 for default. */ + }; + + [StructLayout(LayoutKind.Sequential)] + public struct PLUGIN_INSTANCE_PROPERTIES + { + public IntPtr name; /* The name of the plugin effect or sound (set in FMOD Studio). */ + public IntPtr dsp; /* The DSP plugin instance. This can be cast to/from FMOD::DSP* type. */ + } + + [Flags] + public enum EVENT_CALLBACK_TYPE : uint + { + CREATED = 0x00000001, /* Called when an instance is fully created. Parameters = unused. */ + DESTROYED = 0x00000002, /* Called when an instance is just about to be destroyed. Parameters = unused. */ + STARTING = 0x00000004, /* Called when an instance is preparing to start. Parameters = unused. */ + STARTED = 0x00000008, /* Called when an instance starts playing. Parameters = unused. */ + RESTARTED = 0x00000010, /* Called when an instance is restarted. Parameters = unused. */ + STOPPED = 0x00000020, /* Called when an instance stops. Parameters = unused. */ + START_FAILED = 0x00000040, /* Called when an instance did not start, e.g. due to polyphony. Parameters = unused. */ + CREATE_PROGRAMMER_SOUND = 0x00000080, /* Called when a programmer sound needs to be created in order to play a programmer instrument. Parameters = FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES. */ + DESTROY_PROGRAMMER_SOUND = 0x00000100, /* Called when a programmer sound needs to be destroyed. Parameters = FMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIES. */ + PLUGIN_CREATED = 0x00000200, /* Called when a DSP plugin instance has just been created. Parameters = FMOD_STUDIO_PLUGIN_INSTANCE_PROPERTIES. */ + PLUGIN_DESTROYED = 0x00000400, /* Called when a DSP plugin instance is about to be destroyed. Parameters = FMOD_STUDIO_PLUGIN_INSTANCE_PROPERTIES. */ + TIMELINE_MARKER = 0x00000800, /* Called when the timeline passes a named marker. Parameters = FMOD_STUDIO_TIMELINE_MARKER_PROPERTIES. */ + TIMELINE_BEAT = 0x00001000, /* Called when the timeline hits a beat in a tempo section. Parameters = FMOD_STUDIO_TIMELINE_BEAT_PROPERTIES. */ + SOUND_PLAYED = 0x00002000, /* Called when the event plays a sound. Parameters = FMOD::Sound. */ + SOUND_STOPPED = 0x00004000, /* Called when the event finishes playing a sound. Parameters = FMOD::Sound. */ + + ALL = 0xFFFFFFFF, /* Pass this mask to Studio::EventDescription::setCallback or Studio::EventInstance::setCallback to receive all callback types. */ + } + + public delegate RESULT EVENT_CALLBACK(EVENT_CALLBACK_TYPE type, EventInstance eventInstance, IntPtr parameters); + + public delegate RESULT COMMANDREPLAY_FRAME_CALLBACK(CommandReplay replay, int commandIndex, float currentTime, IntPtr userdata); + public delegate RESULT COMMANDREPLAY_LOAD_BANK_CALLBACK(CommandReplay replay, Guid guid, StringWrapper bankFilename, LOAD_BANK_FLAGS flags, out Bank bank, IntPtr userdata); + public delegate RESULT COMMANDREPLAY_CREATE_INSTANCE_CALLBACK(CommandReplay replay, EventDescription eventDescription, IntPtr originalHandle, out EventInstance instance, IntPtr userdata); + + public enum INSTANCETYPE : int + { + NONE, + SYSTEM, + EVENTDESCRIPTION, + EVENTINSTANCE, + PARAMETERINSTANCE, + BUS, + VCA, + BANK, + COMMANDREPLAY, + } + + [StructLayout(LayoutKind.Sequential)] + public struct COMMAND_INFO + { + private StringWrapper commandname; /* The full name of the API function for this command. */ + public int parentcommandindex; /* For commands that operate on an instance, this is the command that created the instance */ + public int framenumber; /* The frame the command belongs to */ + public float frametime; /* The playback time at which this command will be executed */ + public INSTANCETYPE instancetype; /* The type of object that this command uses as an instance */ + public INSTANCETYPE outputtype; /* The type of object that this command outputs, if any */ + public UInt32 instancehandle; /* The original handle value of the instance. This will no longer correspond to any actual object in playback. */ + public UInt32 outputhandle; /* The original handle value of the command output. This will no longer correspond to any actual object in playback. */ + } + + 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 studiosystem) + { + return FMOD_Studio_System_Create(out studiosystem.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 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 getLowLevelSystem(out FMOD.System system) + { + return FMOD_Studio_System_GetLowLevelSystem(this.handle, out system.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 guid, out EventDescription _event) + { + return FMOD_Studio_System_GetEventByID(this.handle, ref guid, out _event.handle); + } + public RESULT getBusByID(Guid guid, out Bus bus) + { + return FMOD_Studio_System_GetBusByID(this.handle, ref guid, out bus.handle); + } + public RESULT getVCAByID(Guid guid, out VCA vca) + { + return FMOD_Studio_System_GetVCAByID(this.handle, ref guid, out vca.handle); + } + public RESULT getBankByID(Guid guid, out Bank bank) + { + return FMOD_Studio_System_GetBankByID(this.handle, ref guid, 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 lookupID(string path, out Guid guid) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_LookupID(this.handle, encoder.byteFromStringUTF8(path), out guid); + } + } + public RESULT lookupPath(Guid guid, 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 guid, stringMem, 256, out retrieved); + + if (result == RESULT.ERR_TRUNCATED) + { + Marshal.FreeHGlobal(stringMem); + stringMem = Marshal.AllocHGlobal(retrieved); + result = FMOD_Studio_System_LookupPath(this.handle, ref guid, 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); + } + public RESULT setListenerAttributes(int listener, ATTRIBUTES_3D attributes) + { + return FMOD_Studio_System_SetListenerAttributes(this.handle, listener, ref attributes); + } + 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 name, LOAD_BANK_FLAGS flags, out Bank bank) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_LoadBankFile(this.handle, encoder.byteFromStringUTF8(name), 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 path, COMMANDCAPTURE_FLAGS flags) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_StartCommandCapture(this.handle, encoder.byteFromStringUTF8(path), flags); + } + } + public RESULT stopCommandCapture() + { + return FMOD_Studio_System_StopCommandCapture(this.handle); + } + public RESULT loadCommandReplay(string path, COMMANDREPLAY_FLAGS flags, out CommandReplay replay) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_System_LoadCommandReplay(this.handle, encoder.byteFromStringUTF8(path), 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 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); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Create (out IntPtr studiosystem, uint headerversion); + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_System_IsValid (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetAdvancedSettings (IntPtr studiosystem, ref ADVANCEDSETTINGS settings); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetAdvancedSettings (IntPtr studiosystem, out ADVANCEDSETTINGS settings); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Initialize (IntPtr studiosystem, int maxchannels, INITFLAGS studioFlags, FMOD.INITFLAGS flags, IntPtr extradriverdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Release (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_Update (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetLowLevelSystem (IntPtr studiosystem, out IntPtr system); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetEvent (IntPtr studiosystem, byte[] path, out IntPtr description); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBus (IntPtr studiosystem, byte[] path, out IntPtr bus); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetVCA (IntPtr studiosystem, byte[] path, out IntPtr vca); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBank (IntPtr studiosystem, byte[] path, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetEventByID (IntPtr studiosystem, ref Guid guid, out IntPtr description); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBusByID (IntPtr studiosystem, ref Guid guid, out IntPtr bus); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetVCAByID (IntPtr studiosystem, ref Guid guid, out IntPtr vca); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBankByID (IntPtr studiosystem, ref Guid guid, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetSoundInfo (IntPtr studiosystem, byte[] key, out SOUND_INFO info); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LookupID (IntPtr studiosystem, byte[] path, out Guid guid); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LookupPath (IntPtr studiosystem, ref Guid guid, IntPtr path, int size, out int retrieved); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetNumListeners (IntPtr studiosystem, out int numlisteners); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetNumListeners (IntPtr studiosystem, int numlisteners); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetListenerAttributes (IntPtr studiosystem, int listener, out ATTRIBUTES_3D attributes); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetListenerAttributes (IntPtr studiosystem, int listener, ref ATTRIBUTES_3D attributes); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetListenerWeight (IntPtr studiosystem, int listener, out float weight); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetListenerWeight (IntPtr studiosystem, int listener, float weight); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LoadBankFile (IntPtr studiosystem, byte[] filename, LOAD_BANK_FLAGS flags, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LoadBankMemory (IntPtr studiosystem, 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 studiosystem, ref BANK_INFO info, LOAD_BANK_FLAGS flags, out IntPtr bank); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_UnloadAll (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_FlushCommands (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_FlushSampleLoading (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_StartCommandCapture (IntPtr studiosystem, byte[] path, COMMANDCAPTURE_FLAGS flags); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_StopCommandCapture (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_LoadCommandReplay (IntPtr studiosystem, byte[] path, COMMANDREPLAY_FLAGS flags, out IntPtr commandReplay); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBankCount (IntPtr studiosystem, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBankList (IntPtr studiosystem, IntPtr[] array, int capacity, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetCPUUsage (IntPtr studiosystem, out CPU_USAGE usage); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetBufferUsage (IntPtr studiosystem, out BUFFER_USAGE usage); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_ResetBufferUsage (IntPtr studiosystem); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetCallback (IntPtr studiosystem, SYSTEM_CALLBACK callback, SYSTEM_CALLBACK_TYPE callbackmask); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_GetUserData (IntPtr studiosystem, out IntPtr userdata); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_System_SetUserData (IntPtr studiosystem, IntPtr userdata); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + 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 getParameterCount(out int count) + { + return FMOD_Studio_EventDescription_GetParameterCount(this.handle, out count); + } + public RESULT getParameterByIndex(int index, out PARAMETER_DESCRIPTION parameter) + { + return FMOD_Studio_EventDescription_GetParameterByIndex(this.handle, index, out parameter); + } + public RESULT getParameter(string name, out PARAMETER_DESCRIPTION parameter) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventDescription_GetParameter(this.handle, encoder.byteFromStringUTF8(name), 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_GetParameterCount (IntPtr eventdescription, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetParameterByIndex (IntPtr eventdescription, int index, out PARAMETER_DESCRIPTION parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventDescription_GetParameter (IntPtr eventdescription, byte[] name, 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 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, 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, 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 getParameter(string name, out ParameterInstance instance) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventInstance_GetParameter(this.handle, encoder.byteFromStringUTF8(name), out instance.handle); + } + } + public RESULT getParameterCount(out int count) + { + return FMOD_Studio_EventInstance_GetParameterCount(this.handle, out count); + } + public RESULT getParameterByIndex(int index, out ParameterInstance instance) + { + return FMOD_Studio_EventInstance_GetParameterByIndex(this.handle, index, out instance.handle); + } + public RESULT getParameterValue(string name, out float value, out float finalvalue) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventInstance_GetParameterValue(this.handle, encoder.byteFromStringUTF8(name), out value, out finalvalue); + } + } + public RESULT setParameterValue(string name, float value) + { + using (StringHelper.ThreadSafeEncoding encoder = StringHelper.GetFreeHelper()) + { + return FMOD_Studio_EventInstance_SetParameterValue(this.handle, encoder.byteFromStringUTF8(name), value); + } + } + public RESULT getParameterValueByIndex(int index, out float value, out float finalvalue) + { + return FMOD_Studio_EventInstance_GetParameterValueByIndex(this.handle, index, out value, out finalvalue); + } + public RESULT setParameterValueByIndex(int index, float value) + { + return FMOD_Studio_EventInstance_SetParameterValueByIndex(this.handle, index, value); + } + public RESULT setParameterValuesByIndices(int[] indices, float[] values, int count) + { + return FMOD_Studio_EventInstance_SetParameterValuesByIndices(this.handle, indices, values, count); + } + 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); + } + + #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_GetParameter (IntPtr _event, byte[] name, out IntPtr parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetParameterByIndex (IntPtr _event, int index, out IntPtr parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetParameterCount (IntPtr _event, out int count); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetParameterValue (IntPtr _event, byte[] name, out float value, out float finalvalue); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetParameterValue (IntPtr _event, byte[] name, float value); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_GetParameterValueByIndex (IntPtr _event, int index, out float value, out float finalvalue); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetParameterValueByIndex (IntPtr _event, int index, float value); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_EventInstance_SetParameterValuesByIndices (IntPtr _event, int[] indices, float[] values, int count); + [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); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + 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 ParameterInstance + { + public RESULT getDescription(out PARAMETER_DESCRIPTION description) + { + return FMOD_Studio_ParameterInstance_GetDescription(this.handle, out description); + } + public RESULT getValue(out float value) + { + return FMOD_Studio_ParameterInstance_GetValue(this.handle, out value); + } + public RESULT setValue(float value) + { + return FMOD_Studio_ParameterInstance_SetValue(this.handle, value); + } + + #region importfunctions + [DllImport(STUDIO_VERSION.dll)] + private static extern bool FMOD_Studio_ParameterInstance_IsValid (IntPtr parameter); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_ParameterInstance_GetDescription (IntPtr parameter, out PARAMETER_DESCRIPTION description); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_ParameterInstance_GetValue (IntPtr parameter, out float value); + [DllImport(STUDIO_VERSION.dll)] + private static extern RESULT FMOD_Studio_ParameterInstance_SetValue (IntPtr parameter, float value); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + public bool hasHandle() { return this.handle != IntPtr.Zero; } + public void clearHandle() { this.handle = IntPtr.Zero; } + + public bool isValid() + { + return hasHandle() && FMOD_Studio_ParameterInstance_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, 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); + } + + #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 value); + [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); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + 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, 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 value); + #endregion + + #region wrapperinternal + + public IntPtr handle; + + 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 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 totalTime) + { + return FMOD_Studio_CommandReplay_GetLength(this.handle, out totalTime); + } + 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 description) + { + description = 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) + { + description = 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 totalTime); + [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 description, int capacity); + [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 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/Assets/Plugins/FMOD/Wrapper/fmod_studio.cs.meta b/Assets/Plugins/FMOD/Wrapper/fmod_studio.cs.meta new file mode 100644 index 0000000..f858a3f --- /dev/null +++ b/Assets/Plugins/FMOD/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/Assets/Plugins/FMOD/fmodplugins.cpp b/Assets/Plugins/FMOD/fmodplugins.cpp new file mode 100644 index 0000000..9d9dd1b --- /dev/null +++ b/Assets/Plugins/FMOD/fmodplugins.cpp @@ -0,0 +1,77 @@ +struct FMOD_SYSTEM; +struct FMOD_DSP_DESCRIPTION; + +extern "C" uint32_t FMOD5_System_RegisterDSP(FMOD_SYSTEM *system, const FMOD_DSP_DESCRIPTION *description, uint32_t *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" uint32_t FmodUnityNativePluginInit(FMOD_SYSTEM* system) +{ + uint32_t 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 GoogleVR plugin on iOS */ + /* + result = FMOD5_System_RegisterDSP(system, FMOD_Google_GVRListener_GetDSPDescription(), nullptr); + if (result != 0) + { + return result; + } + result = FMOD5_System_RegisterDSP(system, FMOD_Google_GVRSoundfield_GetDSPDescription(), nullptr); + if (result != 0) + { + return result; + } + result = FMOD5_System_RegisterDSP(system, FMOD_Google_GVRSource_GetDSPDescription(), 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/Assets/Plugins/FMOD/fmodplugins.cpp.meta b/Assets/Plugins/FMOD/fmodplugins.cpp.meta new file mode 100644 index 0000000..805ac88 --- /dev/null +++ b/Assets/Plugins/FMOD/fmodplugins.cpp.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: b609b2636c3bd40b6baa2df2e77d015e +timeCreated: 1466052174 +licenseType: Free +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: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP.meta b/Assets/Plugins/UWP.meta new file mode 100644 index 0000000..d60743c --- /dev/null +++ b/Assets/Plugins/UWP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d66b515f76b91449a1cc6282c2b85d1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/arm.meta b/Assets/Plugins/UWP/arm.meta new file mode 100644 index 0000000..e51475b --- /dev/null +++ b/Assets/Plugins/UWP/arm.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0cddbb9418c24f44d87fc49581769340 +folderAsset: yes +timeCreated: 1457408139 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/arm/fmod.dll b/Assets/Plugins/UWP/arm/fmod.dll new file mode 100644 index 0000000..f52b281 Binary files /dev/null and b/Assets/Plugins/UWP/arm/fmod.dll differ diff --git a/Assets/Plugins/UWP/arm/fmod.dll.meta b/Assets/Plugins/UWP/arm/fmod.dll.meta new file mode 100644 index 0000000..bf1e982 --- /dev/null +++ b/Assets/Plugins/UWP/arm/fmod.dll.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 907f4331811d73442b58d50627a775d4 +timeCreated: 1457408139 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: ARM + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/arm/fmodstudio.dll b/Assets/Plugins/UWP/arm/fmodstudio.dll new file mode 100644 index 0000000..179280f Binary files /dev/null and b/Assets/Plugins/UWP/arm/fmodstudio.dll differ diff --git a/Assets/Plugins/UWP/arm/fmodstudio.dll.meta b/Assets/Plugins/UWP/arm/fmodstudio.dll.meta new file mode 100644 index 0000000..02ad01d --- /dev/null +++ b/Assets/Plugins/UWP/arm/fmodstudio.dll.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: a7c1eb40b6cc0b8468c161b5ba9a6df6 +timeCreated: 1457408139 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: ARM + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/x64.meta b/Assets/Plugins/UWP/x64.meta new file mode 100644 index 0000000..184f917 --- /dev/null +++ b/Assets/Plugins/UWP/x64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 81189b2e21a815647a28e3437c86beb2 +folderAsset: yes +timeCreated: 1457064777 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/x64/fmod.dll b/Assets/Plugins/UWP/x64/fmod.dll new file mode 100644 index 0000000..984c238 Binary files /dev/null and b/Assets/Plugins/UWP/x64/fmod.dll differ diff --git a/Assets/Plugins/UWP/x64/fmod.dll.meta b/Assets/Plugins/UWP/x64/fmod.dll.meta new file mode 100644 index 0000000..2ebcd84 --- /dev/null +++ b/Assets/Plugins/UWP/x64/fmod.dll.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 68f9a982a926833498d438319388a455 +timeCreated: 1457408139 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X64 + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/x64/fmodstudio.dll b/Assets/Plugins/UWP/x64/fmodstudio.dll new file mode 100644 index 0000000..5d1f92d Binary files /dev/null and b/Assets/Plugins/UWP/x64/fmodstudio.dll differ diff --git a/Assets/Plugins/UWP/x64/fmodstudio.dll.meta b/Assets/Plugins/UWP/x64/fmodstudio.dll.meta new file mode 100644 index 0000000..7153516 --- /dev/null +++ b/Assets/Plugins/UWP/x64/fmodstudio.dll.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 29800d7cce1a5fc46ae163c8a68d8346 +timeCreated: 1457408139 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X64 + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/x86.meta b/Assets/Plugins/UWP/x86.meta new file mode 100644 index 0000000..f9365d2 --- /dev/null +++ b/Assets/Plugins/UWP/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fa5c1a42d40246b4a83af1e8192b6bdf +folderAsset: yes +timeCreated: 1457063023 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/x86/fmod.dll b/Assets/Plugins/UWP/x86/fmod.dll new file mode 100644 index 0000000..ede409a Binary files /dev/null and b/Assets/Plugins/UWP/x86/fmod.dll differ diff --git a/Assets/Plugins/UWP/x86/fmod.dll.meta b/Assets/Plugins/UWP/x86/fmod.dll.meta new file mode 100644 index 0000000..3b3a7fa --- /dev/null +++ b/Assets/Plugins/UWP/x86/fmod.dll.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 39f9a761a2a032045a853a069db31081 +timeCreated: 1457408139 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UWP/x86/fmodstudio.dll b/Assets/Plugins/UWP/x86/fmodstudio.dll new file mode 100644 index 0000000..c5e47e7 Binary files /dev/null and b/Assets/Plugins/UWP/x86/fmodstudio.dll differ diff --git a/Assets/Plugins/UWP/x86/fmodstudio.dll.meta b/Assets/Plugins/UWP/x86/fmodstudio.dll.meta new file mode 100644 index 0000000..de2d682 --- /dev/null +++ b/Assets/Plugins/UWP/x86/fmodstudio.dll.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: ecb0cc0019197154b9baeef623b6ec0a +timeCreated: 1457408139 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 1 + settings: + CPU: X86 + DontProcess: False + PlaceholderPath: + SDK: UWP + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/WebGL.meta b/Assets/Plugins/WebGL.meta new file mode 100644 index 0000000..76e3e44 --- /dev/null +++ b/Assets/Plugins/WebGL.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1e406b6963a22dd4ab5c4f190f4d067b +folderAsset: yes +timeCreated: 1540351106 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/WebGL/libfmodstudiounityplugin.bc b/Assets/Plugins/WebGL/libfmodstudiounityplugin.bc new file mode 100644 index 0000000..a1e908e Binary files /dev/null and b/Assets/Plugins/WebGL/libfmodstudiounityplugin.bc differ diff --git a/Assets/Plugins/WebGL/libfmodstudiounityplugin.bc.meta b/Assets/Plugins/WebGL/libfmodstudiounityplugin.bc.meta new file mode 100644 index 0000000..b8d3c9d --- /dev/null +++ b/Assets/Plugins/WebGL/libfmodstudiounityplugin.bc.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 254f6ee9df4d3024d9c550104ea5feaf +timeCreated: 1518408468 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WebGL: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/WebGL/libfmodstudiounitypluginL.bc b/Assets/Plugins/WebGL/libfmodstudiounitypluginL.bc new file mode 100644 index 0000000..a320225 Binary files /dev/null and b/Assets/Plugins/WebGL/libfmodstudiounitypluginL.bc differ diff --git a/Assets/Plugins/WebGL/libfmodstudiounitypluginL.bc.meta b/Assets/Plugins/WebGL/libfmodstudiounitypluginL.bc.meta new file mode 100644 index 0000000..0dcaadb --- /dev/null +++ b/Assets/Plugins/WebGL/libfmodstudiounitypluginL.bc.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 2dab3dda051681d4a9ea3ed67cb9877f +timeCreated: 1518408468 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WebGL: + enabled: 0 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudio.bundle.meta b/Assets/Plugins/fmodstudio.bundle.meta new file mode 100644 index 0000000..976e5b5 --- /dev/null +++ b/Assets/Plugins/fmodstudio.bundle.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 4f94b6752a0d5ad489274786cbfbc6e5 +folderAsset: yes +timeCreated: 1442816865 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: OSX + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_13 + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 1 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudio.bundle/Contents.meta b/Assets/Plugins/fmodstudio.bundle/Contents.meta new file mode 100644 index 0000000..f4f4817 --- /dev/null +++ b/Assets/Plugins/fmodstudio.bundle/Contents.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2879b055c8551c44caa264ce7208ea17 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudio.bundle/Contents/MacOS.meta b/Assets/Plugins/fmodstudio.bundle/Contents/MacOS.meta new file mode 100644 index 0000000..7c72f6a --- /dev/null +++ b/Assets/Plugins/fmodstudio.bundle/Contents/MacOS.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4c7ef954631945d4981884adcc603e81 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudio.bundle/Contents/MacOS/fmodstudio b/Assets/Plugins/fmodstudio.bundle/Contents/MacOS/fmodstudio new file mode 100644 index 0000000..739de96 Binary files /dev/null and b/Assets/Plugins/fmodstudio.bundle/Contents/MacOS/fmodstudio differ diff --git a/Assets/Plugins/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta b/Assets/Plugins/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta new file mode 100644 index 0000000..5b10ad2 --- /dev/null +++ b/Assets/Plugins/fmodstudio.bundle/Contents/MacOS/fmodstudio.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: c5e926e235023354fb6b94bc154a8d2c +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudioL.bundle.meta b/Assets/Plugins/fmodstudioL.bundle.meta new file mode 100644 index 0000000..47cb9b0 --- /dev/null +++ b/Assets/Plugins/fmodstudioL.bundle.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 17156b5dbba3da94e9d70a06add50376 +folderAsset: yes +timeCreated: 1442816865 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: OSX + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_13 + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 1 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudioL.bundle/Contents.meta b/Assets/Plugins/fmodstudioL.bundle/Contents.meta new file mode 100644 index 0000000..d28a325 --- /dev/null +++ b/Assets/Plugins/fmodstudioL.bundle/Contents.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3ee033c1fbe25354097a9e4f56806fd5 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS.meta b/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS.meta new file mode 100644 index 0000000..31476a2 --- /dev/null +++ b/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d31dcfc39fb2ce943a0f3b1a5fe3d574 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS/fmodstudioL b/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS/fmodstudioL new file mode 100644 index 0000000..35d0bb8 Binary files /dev/null and b/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS/fmodstudioL differ diff --git a/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta b/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta new file mode 100644 index 0000000..809a441 --- /dev/null +++ b/Assets/Plugins/fmodstudioL.bundle/Contents/MacOS/fmodstudioL.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ccbd5fd69ea0cd145a1b6ab7543f3b8d +timeCreated: 1429825705 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86.meta b/Assets/Plugins/x86.meta new file mode 100644 index 0000000..de32cf7 --- /dev/null +++ b/Assets/Plugins/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 03f590b69e4afe14fa1c73f89a98a203 +folderAsset: yes +timeCreated: 1432606678 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86/fmodstudio.dll b/Assets/Plugins/x86/fmodstudio.dll new file mode 100644 index 0000000..9176a67 Binary files /dev/null and b/Assets/Plugins/x86/fmodstudio.dll differ diff --git a/Assets/Plugins/x86/fmodstudio.dll.meta b/Assets/Plugins/x86/fmodstudio.dll.meta new file mode 100644 index 0000000..cda4ae6 --- /dev/null +++ b/Assets/Plugins/x86/fmodstudio.dll.meta @@ -0,0 +1,78 @@ +fileFormatVersion: 2 +guid: 1550e5c882b8c2445a1f14f8b1b23d41 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: None + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 1 + settings: + CPU: None + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_13 + WP8: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86/fmodstudiol.dll b/Assets/Plugins/x86/fmodstudiol.dll new file mode 100644 index 0000000..b32fea9 Binary files /dev/null and b/Assets/Plugins/x86/fmodstudiol.dll differ diff --git a/Assets/Plugins/x86/fmodstudiol.dll.meta b/Assets/Plugins/x86/fmodstudiol.dll.meta new file mode 100644 index 0000000..ce236f8 --- /dev/null +++ b/Assets/Plugins/x86/fmodstudiol.dll.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 6e48bf6e640baa24f9e87619d1a61e8d +timeCreated: 1429083373 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: None + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 1 + settings: + CPU: None + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_13 + WP8: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86/gvraudio.dll b/Assets/Plugins/x86/gvraudio.dll new file mode 100644 index 0000000..36b2155 Binary files /dev/null and b/Assets/Plugins/x86/gvraudio.dll differ diff --git a/Assets/Plugins/x86/gvraudio.dll.meta b/Assets/Plugins/x86/gvraudio.dll.meta new file mode 100644 index 0000000..1d666fb --- /dev/null +++ b/Assets/Plugins/x86/gvraudio.dll.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 8a500dc3e3908324da75fc9cd2c10b9b +timeCreated: 1486356573 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Editor: + enabled: 0 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86/libfmod.so b/Assets/Plugins/x86/libfmod.so new file mode 100644 index 0000000..3b40291 Binary files /dev/null and b/Assets/Plugins/x86/libfmod.so differ diff --git a/Assets/Plugins/x86/libfmod.so.meta b/Assets/Plugins/x86/libfmod.so.meta new file mode 100644 index 0000000..8d83019 --- /dev/null +++ b/Assets/Plugins/x86/libfmod.so.meta @@ -0,0 +1,78 @@ +fileFormatVersion: 2 +guid: 36f717655f4546d49be99d6500b37235 +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/Assets/Plugins/x86/libfmodL.so b/Assets/Plugins/x86/libfmodL.so new file mode 100644 index 0000000..6b4aadb Binary files /dev/null and b/Assets/Plugins/x86/libfmodL.so differ diff --git a/Assets/Plugins/x86/libfmodL.so.meta b/Assets/Plugins/x86/libfmodL.so.meta new file mode 100644 index 0000000..4be84a5 --- /dev/null +++ b/Assets/Plugins/x86/libfmodL.so.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: c9b2333e7c587429b95411dc500b8b6f +timeCreated: 1481780142 +licenseType: Free +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/Assets/Plugins/x86/libfmodstudio.so b/Assets/Plugins/x86/libfmodstudio.so new file mode 100644 index 0000000..de92e0d Binary files /dev/null and b/Assets/Plugins/x86/libfmodstudio.so differ diff --git a/Assets/Plugins/x86/libfmodstudio.so.meta b/Assets/Plugins/x86/libfmodstudio.so.meta new file mode 100644 index 0000000..c36e88f --- /dev/null +++ b/Assets/Plugins/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/Assets/Plugins/x86/libfmodstudioL.so b/Assets/Plugins/x86/libfmodstudioL.so new file mode 100644 index 0000000..b63746f Binary files /dev/null and b/Assets/Plugins/x86/libfmodstudioL.so differ diff --git a/Assets/Plugins/x86/libfmodstudioL.so.meta b/Assets/Plugins/x86/libfmodstudioL.so.meta new file mode 100644 index 0000000..40b9710 --- /dev/null +++ b/Assets/Plugins/x86/libfmodstudioL.so.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: f97044b07bd9b4555b0669530d6ca6f2 +timeCreated: 1481780142 +licenseType: Free +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/Assets/Plugins/x86/resonanceaudio.dll b/Assets/Plugins/x86/resonanceaudio.dll new file mode 100644 index 0000000..90fead5 Binary files /dev/null and b/Assets/Plugins/x86/resonanceaudio.dll differ diff --git a/Assets/Plugins/x86/resonanceaudio.dll.meta b/Assets/Plugins/x86/resonanceaudio.dll.meta new file mode 100644 index 0000000..ca31234 --- /dev/null +++ b/Assets/Plugins/x86/resonanceaudio.dll.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: b2c11f1e03736f748bd861d7bf4f8952 +timeCreated: 1511469552 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Editor: + enabled: 0 + settings: + CPU: x86 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 1 + settings: + CPU: AnyCPU + Win64: + enabled: 0 + settings: + CPU: None + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64.meta b/Assets/Plugins/x86_64.meta new file mode 100644 index 0000000..11c9bea --- /dev/null +++ b/Assets/Plugins/x86_64.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8105cca2fc4eb2e488e010278c3ea1bf +folderAsset: yes +timeCreated: 1432606678 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/fmodstudio.dll b/Assets/Plugins/x86_64/fmodstudio.dll new file mode 100644 index 0000000..7655173 Binary files /dev/null and b/Assets/Plugins/x86_64/fmodstudio.dll differ diff --git a/Assets/Plugins/x86_64/fmodstudio.dll.meta b/Assets/Plugins/x86_64/fmodstudio.dll.meta new file mode 100644 index 0000000..310cbb7 --- /dev/null +++ b/Assets/Plugins/x86_64/fmodstudio.dll.meta @@ -0,0 +1,78 @@ +fileFormatVersion: 2 +guid: 684d4d47a018ed14080e15f4c99b8e86 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 1 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: None + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_13 + WP8: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/fmodstudiol.dll b/Assets/Plugins/x86_64/fmodstudiol.dll new file mode 100644 index 0000000..53ddec5 Binary files /dev/null and b/Assets/Plugins/x86_64/fmodstudiol.dll differ diff --git a/Assets/Plugins/x86_64/fmodstudiol.dll.meta b/Assets/Plugins/x86_64/fmodstudiol.dll.meta new file mode 100644 index 0000000..939a4f9 --- /dev/null +++ b/Assets/Plugins/x86_64/fmodstudiol.dll.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 8514ea8d6deab804895ec1cab6902681 +timeCreated: 1429083373 +licenseType: Pro +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + Linux: + enabled: 1 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: None + OSXIntel64: + enabled: 1 + settings: + CPU: AnyCPU + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_13 + WP8: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: AnyCPU + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + DontProcess: False + PlaceholderPath: + SDK: AnySDK + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/gvraudio.dll b/Assets/Plugins/x86_64/gvraudio.dll new file mode 100644 index 0000000..f73e295 Binary files /dev/null and b/Assets/Plugins/x86_64/gvraudio.dll differ diff --git a/Assets/Plugins/x86_64/gvraudio.dll.meta b/Assets/Plugins/x86_64/gvraudio.dll.meta new file mode 100644 index 0000000..1ad5bf0 --- /dev/null +++ b/Assets/Plugins/x86_64/gvraudio.dll.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: dbf938fe73bc5f54fae860c3c41ea59f +timeCreated: 1486356573 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/libfmod.so b/Assets/Plugins/x86_64/libfmod.so new file mode 100644 index 0000000..0481c19 Binary files /dev/null and b/Assets/Plugins/x86_64/libfmod.so differ diff --git a/Assets/Plugins/x86_64/libfmod.so.meta b/Assets/Plugins/x86_64/libfmod.so.meta new file mode 100644 index 0000000..563bea1 --- /dev/null +++ b/Assets/Plugins/x86_64/libfmod.so.meta @@ -0,0 +1,65 @@ +fileFormatVersion: 2 +guid: 9bd728ed7fbc89141a4885c569d1bd7f +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_15 + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/libfmodL.so b/Assets/Plugins/x86_64/libfmodL.so new file mode 100644 index 0000000..3967b9a Binary files /dev/null and b/Assets/Plugins/x86_64/libfmodL.so differ diff --git a/Assets/Plugins/x86_64/libfmodL.so.meta b/Assets/Plugins/x86_64/libfmodL.so.meta new file mode 100644 index 0000000..d1f0067 --- /dev/null +++ b/Assets/Plugins/x86_64/libfmodL.so.meta @@ -0,0 +1,65 @@ +fileFormatVersion: 2 +guid: 31af1dcfb5b345945916c9c4ea794255 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_15 + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/libfmodstudio.so b/Assets/Plugins/x86_64/libfmodstudio.so new file mode 100644 index 0000000..dd44b8f Binary files /dev/null and b/Assets/Plugins/x86_64/libfmodstudio.so differ diff --git a/Assets/Plugins/x86_64/libfmodstudio.so.meta b/Assets/Plugins/x86_64/libfmodstudio.so.meta new file mode 100644 index 0000000..5218650 --- /dev/null +++ b/Assets/Plugins/x86_64/libfmodstudio.so.meta @@ -0,0 +1,65 @@ +fileFormatVersion: 2 +guid: 9063aa11b1fcfcf4cb6030a076d14a30 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_15 + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/libfmodstudioL.so b/Assets/Plugins/x86_64/libfmodstudioL.so new file mode 100644 index 0000000..ecab071 Binary files /dev/null and b/Assets/Plugins/x86_64/libfmodstudioL.so differ diff --git a/Assets/Plugins/x86_64/libfmodstudioL.so.meta b/Assets/Plugins/x86_64/libfmodstudioL.so.meta new file mode 100644 index 0000000..5b580a2 --- /dev/null +++ b/Assets/Plugins/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/Assets/Plugins/x86_64/libgvraudio.so b/Assets/Plugins/x86_64/libgvraudio.so new file mode 100644 index 0000000..fb5a401 Binary files /dev/null and b/Assets/Plugins/x86_64/libgvraudio.so differ diff --git a/Assets/Plugins/x86_64/libgvraudio.so.meta b/Assets/Plugins/x86_64/libgvraudio.so.meta new file mode 100644 index 0000000..77b6727 --- /dev/null +++ b/Assets/Plugins/x86_64/libgvraudio.so.meta @@ -0,0 +1,69 @@ +fileFormatVersion: 2 +guid: 4a927ecf9fcb5fc428c946ae9d600f91 +timeCreated: 1486356573 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: ARMv7 + Any: + enabled: 0 + settings: + CPU: AnyCPU + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Linux + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_15 + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Assets/Plugins/x86_64/libresonanceaudio.so b/Assets/Plugins/x86_64/libresonanceaudio.so new file mode 100644 index 0000000..5c3db55 Binary files /dev/null and b/Assets/Plugins/x86_64/libresonanceaudio.so differ diff --git a/Assets/Plugins/x86_64/libresonanceaudio.so.meta b/Assets/Plugins/x86_64/libresonanceaudio.so.meta new file mode 100644 index 0000000..7a77080 --- /dev/null +++ b/Assets/Plugins/x86_64/libresonanceaudio.so.meta @@ -0,0 +1,69 @@ +fileFormatVersion: 2 +guid: bca6f630c310b4945b52486d2ed1da0a +timeCreated: 1511469552 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: ARMv7 + Any: + enabled: 0 + settings: + CPU: AnyCPU + Editor: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Linux + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + SamsungTV: + enabled: 0 + settings: + STV_MODEL: STANDARD_15 + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: \ No newline at end of file diff --git a/Assets/Plugins/x86_64/resonanceaudio.dll b/Assets/Plugins/x86_64/resonanceaudio.dll new file mode 100644 index 0000000..f811014 Binary files /dev/null and b/Assets/Plugins/x86_64/resonanceaudio.dll differ diff --git a/Assets/Plugins/x86_64/resonanceaudio.dll.meta b/Assets/Plugins/x86_64/resonanceaudio.dll.meta new file mode 100644 index 0000000..b169bc2 --- /dev/null +++ b/Assets/Plugins/x86_64/resonanceaudio.dll.meta @@ -0,0 +1,50 @@ +fileFormatVersion: 2 +guid: 4c8fb9b92ea2eae4f9112a3941c4f128 +timeCreated: 1511469552 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: x86 + Linux64: + enabled: 0 + settings: + CPU: x86_64 + OSXIntel: + enabled: 0 + settings: + CPU: AnyCPU + OSXIntel64: + enabled: 0 + settings: + CPU: AnyCPU + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..a41b563 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7cef7612cc64e784ca3ae96278be9b47 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/FMODStudioSettings.asset b/Assets/Resources/FMODStudioSettings.asset new file mode 100644 index 0000000..fccf771 --- /dev/null +++ b/Assets/Resources/FMODStudioSettings.asset @@ -0,0 +1,62 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {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: + HasSourceProject: 0 + HasPlatforms: 1 + sourceProjectPath: + SourceProjectPathUnformatted: + SourceBankPathUnformatted: Assets\FMOD Banks + AutomaticEventLoading: 1 + AutomaticSampleLoading: 0 + ImportType: 0 + TargetAssetPath: + LoggingLevel: 2 + SpeakerModeSettings: + - Platform: 2 + Value: 3 + SampleRateSettings: + - Platform: 1 + Value: 44100 + - Platform: 2 + Value: 0 + LiveUpdateSettings: + - Platform: 1 + Value: 1 + - Platform: 2 + Value: 0 + OverlaySettings: + - Platform: 1 + Value: 0 + - Platform: 2 + Value: 0 + LoggingSettings: + - Platform: 1 + Value: 1 + - Platform: 2 + Value: 0 + BankDirectorySettings: + - Platform: 2 + Value: Desktop + VirtualChannelSettings: + - Platform: 1 + Value: 1024 + - Platform: 2 + Value: 128 + RealChannelSettings: + - Platform: 1 + Value: 256 + - Platform: 2 + Value: 32 + Plugins: [] + MasterBank: Master Bank + Banks: [] diff --git a/Assets/Resources/FMODStudioSettings.asset.meta b/Assets/Resources/FMODStudioSettings.asset.meta new file mode 100644 index 0000000..cfa403b --- /dev/null +++ b/Assets/Resources/FMODStudioSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2677c41180659ec4a9b6ef920d31084e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta index 6501630..a8472c0 100644 --- a/Assets/Scripts.meta +++ b/Assets/Scripts.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e8932c60a1d82fc48a0cc2ff4ef55390 +guid: 1d33c1b6f30786048936b77a70ecfa84 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Camera.meta b/Assets/Scripts/Camera.meta index e1bebac..cd96f30 100644 --- a/Assets/Scripts/Camera.meta +++ b/Assets/Scripts/Camera.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7c0ed122487f2a1438559e6212bc2b39 +guid: cd6a4497f6fd6f74aaea35d44070552c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/GUI.meta b/Assets/Scripts/GUI.meta index f4105a5..1949356 100644 --- a/Assets/Scripts/GUI.meta +++ b/Assets/Scripts/GUI.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9fa7c48359ca64b47b79ac845a6b68f4 +guid: c29184c36c84d7b4fae37c34b6a5a03c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Generator.meta b/Assets/Scripts/Generator.meta index 446e151..114342e 100644 --- a/Assets/Scripts/Generator.meta +++ b/Assets/Scripts/Generator.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 02b490e5b4e4b0f48bf7712911799453 +guid: 76ee4e34f39a5ec42a892bbeec2a110e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Interactable.meta b/Assets/Scripts/Interactable.meta index 2b32c11..5d16bee 100644 --- a/Assets/Scripts/Interactable.meta +++ b/Assets/Scripts/Interactable.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2cf08264647860343a466ecc8418b9c3 +guid: dc83f8f007569a941bdd06848f42e2ee folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Platform.meta b/Assets/Scripts/Platform.meta index 983105d..979de21 100644 --- a/Assets/Scripts/Platform.meta +++ b/Assets/Scripts/Platform.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a9d539f0d6bbfa54c9ceec46b40c938b +guid: 78125777a91f06f439ebc7f1218ae2c7 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Player.meta b/Assets/Scripts/Player.meta index b32b75f..30d4041 100644 --- a/Assets/Scripts/Player.meta +++ b/Assets/Scripts/Player.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 42efea3c665a8174fb565d588e2274c8 +guid: 17d7c87d504f3fc46b511d20239cce54 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Scenes.meta b/Assets/Scripts/Scenes.meta index ea9b21e..1594e7b 100644 --- a/Assets/Scripts/Scenes.meta +++ b/Assets/Scripts/Scenes.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 130cee3a5aabf6247a354c7d56cbe185 +guid: 69c22e89c0a9c81419f11467b1bb337e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/StreamingAssets.meta b/Assets/StreamingAssets.meta new file mode 100644 index 0000000..63a333a --- /dev/null +++ b/Assets/StreamingAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5f35285a7f364a41a2a8f9b5db2da69 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Master Bank.bank b/Assets/StreamingAssets/Master Bank.bank new file mode 100644 index 0000000..435a3ea Binary files /dev/null and b/Assets/StreamingAssets/Master Bank.bank differ diff --git a/Assets/StreamingAssets/Master Bank.bank.meta b/Assets/StreamingAssets/Master Bank.bank.meta new file mode 100644 index 0000000..6d4c1cd --- /dev/null +++ b/Assets/StreamingAssets/Master Bank.bank.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f253c5008e6fbf94b90d93e76672a1cc +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/Master Bank.strings.bank b/Assets/StreamingAssets/Master Bank.strings.bank new file mode 100644 index 0000000..bf1f04d Binary files /dev/null and b/Assets/StreamingAssets/Master Bank.strings.bank differ diff --git a/Assets/StreamingAssets/Master Bank.strings.bank.meta b/Assets/StreamingAssets/Master Bank.strings.bank.meta new file mode 100644 index 0000000..d7fb28b --- /dev/null +++ b/Assets/StreamingAssets/Master Bank.strings.bank.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0b57c8b539a950640a8e03c996223385 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_NOT FMOD.meta b/Assets/_NOT FMOD.meta new file mode 100644 index 0000000..a868773 --- /dev/null +++ b/Assets/_NOT FMOD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe0b12b7d61337744a51bcb71de2b3e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Animations.meta b/Assets/_NOT FMOD/Animations.meta similarity index 100% rename from Assets/Animations.meta rename to Assets/_NOT FMOD/Animations.meta diff --git a/Assets/Animations/Buttons.meta b/Assets/_NOT FMOD/Animations/Buttons.meta similarity index 100% rename from Assets/Animations/Buttons.meta rename to Assets/_NOT FMOD/Animations/Buttons.meta diff --git a/Assets/Animations/Buttons/ButtonAnimator.controller b/Assets/_NOT FMOD/Animations/Buttons/ButtonAnimator.controller similarity index 100% rename from Assets/Animations/Buttons/ButtonAnimator.controller rename to Assets/_NOT FMOD/Animations/Buttons/ButtonAnimator.controller diff --git a/Assets/Animations/Buttons/ButtonAnimator.controller.meta b/Assets/_NOT FMOD/Animations/Buttons/ButtonAnimator.controller.meta similarity index 100% rename from Assets/Animations/Buttons/ButtonAnimator.controller.meta rename to Assets/_NOT FMOD/Animations/Buttons/ButtonAnimator.controller.meta diff --git a/Assets/Animations/Buttons/ButtonDeactivated.anim b/Assets/_NOT FMOD/Animations/Buttons/ButtonDeactivated.anim similarity index 100% rename from Assets/Animations/Buttons/ButtonDeactivated.anim rename to Assets/_NOT FMOD/Animations/Buttons/ButtonDeactivated.anim diff --git a/Assets/Animations/Buttons/ButtonDeactivated.anim.meta b/Assets/_NOT FMOD/Animations/Buttons/ButtonDeactivated.anim.meta similarity index 100% rename from Assets/Animations/Buttons/ButtonDeactivated.anim.meta rename to Assets/_NOT FMOD/Animations/Buttons/ButtonDeactivated.anim.meta diff --git a/Assets/Animations/Buttons/ButtonOff.anim b/Assets/_NOT FMOD/Animations/Buttons/ButtonOff.anim similarity index 100% rename from Assets/Animations/Buttons/ButtonOff.anim rename to Assets/_NOT FMOD/Animations/Buttons/ButtonOff.anim diff --git a/Assets/Animations/Buttons/ButtonOff.anim.meta b/Assets/_NOT FMOD/Animations/Buttons/ButtonOff.anim.meta similarity index 100% rename from Assets/Animations/Buttons/ButtonOff.anim.meta rename to Assets/_NOT FMOD/Animations/Buttons/ButtonOff.anim.meta diff --git a/Assets/Animations/Buttons/ButtonOn.anim b/Assets/_NOT FMOD/Animations/Buttons/ButtonOn.anim similarity index 100% rename from Assets/Animations/Buttons/ButtonOn.anim rename to Assets/_NOT FMOD/Animations/Buttons/ButtonOn.anim diff --git a/Assets/Animations/Buttons/ButtonOn.anim.meta b/Assets/_NOT FMOD/Animations/Buttons/ButtonOn.anim.meta similarity index 100% rename from Assets/Animations/Buttons/ButtonOn.anim.meta rename to Assets/_NOT FMOD/Animations/Buttons/ButtonOn.anim.meta diff --git a/Assets/Animations/Door.meta b/Assets/_NOT FMOD/Animations/Door.meta similarity index 100% rename from Assets/Animations/Door.meta rename to Assets/_NOT FMOD/Animations/Door.meta diff --git a/Assets/Animations/Door/DoorAnimator_red_back.controller b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_back.controller similarity index 100% rename from Assets/Animations/Door/DoorAnimator_red_back.controller rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_back.controller diff --git a/Assets/Animations/Door/DoorAnimator_red_back.controller.meta b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_back.controller.meta similarity index 100% rename from Assets/Animations/Door/DoorAnimator_red_back.controller.meta rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_back.controller.meta diff --git a/Assets/Animations/Door/DoorAnimator_red_front.controller b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_front.controller similarity index 100% rename from Assets/Animations/Door/DoorAnimator_red_front.controller rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_front.controller diff --git a/Assets/Animations/Door/DoorAnimator_red_front.controller.meta b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_front.controller.meta similarity index 100% rename from Assets/Animations/Door/DoorAnimator_red_front.controller.meta rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_red_front.controller.meta diff --git a/Assets/Animations/Door/DoorAnimator_steel_back.controller b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_back.controller similarity index 100% rename from Assets/Animations/Door/DoorAnimator_steel_back.controller rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_back.controller diff --git a/Assets/Animations/Door/DoorAnimator_steel_back.controller.meta b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_back.controller.meta similarity index 100% rename from Assets/Animations/Door/DoorAnimator_steel_back.controller.meta rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_back.controller.meta diff --git a/Assets/Animations/Door/DoorAnimator_steel_front.controller b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_front.controller similarity index 100% rename from Assets/Animations/Door/DoorAnimator_steel_front.controller rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_front.controller diff --git a/Assets/Animations/Door/DoorAnimator_steel_front.controller.meta b/Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_front.controller.meta similarity index 100% rename from Assets/Animations/Door/DoorAnimator_steel_front.controller.meta rename to Assets/_NOT FMOD/Animations/Door/DoorAnimator_steel_front.controller.meta diff --git a/Assets/Animations/Door/DoorClose_red_back.anim b/Assets/_NOT FMOD/Animations/Door/DoorClose_red_back.anim similarity index 100% rename from Assets/Animations/Door/DoorClose_red_back.anim rename to Assets/_NOT FMOD/Animations/Door/DoorClose_red_back.anim diff --git a/Assets/Animations/Door/DoorClose_red_back.anim.meta b/Assets/_NOT FMOD/Animations/Door/DoorClose_red_back.anim.meta similarity index 100% rename from Assets/Animations/Door/DoorClose_red_back.anim.meta rename to Assets/_NOT FMOD/Animations/Door/DoorClose_red_back.anim.meta diff --git a/Assets/Animations/Door/DoorClose_red_front.anim b/Assets/_NOT FMOD/Animations/Door/DoorClose_red_front.anim similarity index 100% rename from Assets/Animations/Door/DoorClose_red_front.anim rename to Assets/_NOT FMOD/Animations/Door/DoorClose_red_front.anim diff --git a/Assets/Animations/Door/DoorClose_red_front.anim.meta b/Assets/_NOT FMOD/Animations/Door/DoorClose_red_front.anim.meta similarity index 100% rename from Assets/Animations/Door/DoorClose_red_front.anim.meta rename to Assets/_NOT FMOD/Animations/Door/DoorClose_red_front.anim.meta diff --git a/Assets/Animations/Door/DoorClose_steel_back.anim b/Assets/_NOT FMOD/Animations/Door/DoorClose_steel_back.anim similarity index 100% rename from Assets/Animations/Door/DoorClose_steel_back.anim rename to Assets/_NOT FMOD/Animations/Door/DoorClose_steel_back.anim diff --git a/Assets/Animations/Door/DoorClose_steel_back.anim.meta b/Assets/_NOT FMOD/Animations/Door/DoorClose_steel_back.anim.meta similarity index 100% rename from Assets/Animations/Door/DoorClose_steel_back.anim.meta rename to Assets/_NOT FMOD/Animations/Door/DoorClose_steel_back.anim.meta diff --git a/Assets/Animations/Door/DoorClose_steel_front.anim b/Assets/_NOT FMOD/Animations/Door/DoorClose_steel_front.anim similarity index 100% rename from Assets/Animations/Door/DoorClose_steel_front.anim rename to Assets/_NOT FMOD/Animations/Door/DoorClose_steel_front.anim diff --git a/Assets/Animations/Door/DoorClose_steel_front.anim.meta b/Assets/_NOT FMOD/Animations/Door/DoorClose_steel_front.anim.meta similarity index 100% rename from Assets/Animations/Door/DoorClose_steel_front.anim.meta rename to Assets/_NOT FMOD/Animations/Door/DoorClose_steel_front.anim.meta diff --git a/Assets/Animations/Generator.meta b/Assets/_NOT FMOD/Animations/Generator.meta similarity index 100% rename from Assets/Animations/Generator.meta rename to Assets/_NOT FMOD/Animations/Generator.meta diff --git a/Assets/Animations/Generator/GeneratorAnimator.controller b/Assets/_NOT FMOD/Animations/Generator/GeneratorAnimator.controller similarity index 100% rename from Assets/Animations/Generator/GeneratorAnimator.controller rename to Assets/_NOT FMOD/Animations/Generator/GeneratorAnimator.controller diff --git a/Assets/Animations/Generator/GeneratorAnimator.controller.meta b/Assets/_NOT FMOD/Animations/Generator/GeneratorAnimator.controller.meta similarity index 100% rename from Assets/Animations/Generator/GeneratorAnimator.controller.meta rename to Assets/_NOT FMOD/Animations/Generator/GeneratorAnimator.controller.meta diff --git a/Assets/Animations/Generator/Generator_0_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_0_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_0_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_0_7.anim diff --git a/Assets/Animations/Generator/Generator_0_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_0_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_0_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_0_7.anim.meta diff --git a/Assets/Animations/Generator/Generator_1_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_1_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_1_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_1_7.anim diff --git a/Assets/Animations/Generator/Generator_1_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_1_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_1_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_1_7.anim.meta diff --git a/Assets/Animations/Generator/Generator_2_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_2_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_2_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_2_7.anim diff --git a/Assets/Animations/Generator/Generator_2_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_2_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_2_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_2_7.anim.meta diff --git a/Assets/Animations/Generator/Generator_3_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_3_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_3_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_3_7.anim diff --git a/Assets/Animations/Generator/Generator_3_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_3_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_3_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_3_7.anim.meta diff --git a/Assets/Animations/Generator/Generator_4_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_4_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_4_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_4_7.anim diff --git a/Assets/Animations/Generator/Generator_4_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_4_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_4_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_4_7.anim.meta diff --git a/Assets/Animations/Generator/Generator_5_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_5_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_5_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_5_7.anim diff --git a/Assets/Animations/Generator/Generator_5_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_5_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_5_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_5_7.anim.meta diff --git a/Assets/Animations/Generator/Generator_6_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_6_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_6_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_6_7.anim diff --git a/Assets/Animations/Generator/Generator_6_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_6_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_6_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_6_7.anim.meta diff --git a/Assets/Animations/Generator/Generator_7_7.anim b/Assets/_NOT FMOD/Animations/Generator/Generator_7_7.anim similarity index 100% rename from Assets/Animations/Generator/Generator_7_7.anim rename to Assets/_NOT FMOD/Animations/Generator/Generator_7_7.anim diff --git a/Assets/Animations/Generator/Generator_7_7.anim.meta b/Assets/_NOT FMOD/Animations/Generator/Generator_7_7.anim.meta similarity index 100% rename from Assets/Animations/Generator/Generator_7_7.anim.meta rename to Assets/_NOT FMOD/Animations/Generator/Generator_7_7.anim.meta diff --git a/Assets/Animations/Hero.meta b/Assets/_NOT FMOD/Animations/Hero.meta similarity index 100% rename from Assets/Animations/Hero.meta rename to Assets/_NOT FMOD/Animations/Hero.meta diff --git a/Assets/Animations/Hero/PlayerAnimationController.controller b/Assets/_NOT FMOD/Animations/Hero/PlayerAnimationController.controller similarity index 100% rename from Assets/Animations/Hero/PlayerAnimationController.controller rename to Assets/_NOT FMOD/Animations/Hero/PlayerAnimationController.controller diff --git a/Assets/Animations/Hero/PlayerAnimationController.controller.meta b/Assets/_NOT FMOD/Animations/Hero/PlayerAnimationController.controller.meta similarity index 100% rename from Assets/Animations/Hero/PlayerAnimationController.controller.meta rename to Assets/_NOT FMOD/Animations/Hero/PlayerAnimationController.controller.meta diff --git a/Assets/Animations/Hero/ZhaoIdle.anim b/Assets/_NOT FMOD/Animations/Hero/ZhaoIdle.anim similarity index 100% rename from Assets/Animations/Hero/ZhaoIdle.anim rename to Assets/_NOT FMOD/Animations/Hero/ZhaoIdle.anim diff --git a/Assets/Animations/Hero/ZhaoIdle.anim.meta b/Assets/_NOT FMOD/Animations/Hero/ZhaoIdle.anim.meta similarity index 100% rename from Assets/Animations/Hero/ZhaoIdle.anim.meta rename to Assets/_NOT FMOD/Animations/Hero/ZhaoIdle.anim.meta diff --git a/Assets/Animations/Hero/ZhaoJump.anim b/Assets/_NOT FMOD/Animations/Hero/ZhaoJump.anim similarity index 100% rename from Assets/Animations/Hero/ZhaoJump.anim rename to Assets/_NOT FMOD/Animations/Hero/ZhaoJump.anim diff --git a/Assets/Animations/Hero/ZhaoJump.anim.meta b/Assets/_NOT FMOD/Animations/Hero/ZhaoJump.anim.meta similarity index 100% rename from Assets/Animations/Hero/ZhaoJump.anim.meta rename to Assets/_NOT FMOD/Animations/Hero/ZhaoJump.anim.meta diff --git a/Assets/Animations/Hero/ZhaoJumpStart.anim b/Assets/_NOT FMOD/Animations/Hero/ZhaoJumpStart.anim similarity index 100% rename from Assets/Animations/Hero/ZhaoJumpStart.anim rename to Assets/_NOT FMOD/Animations/Hero/ZhaoJumpStart.anim diff --git a/Assets/Animations/Hero/ZhaoJumpStart.anim.meta b/Assets/_NOT FMOD/Animations/Hero/ZhaoJumpStart.anim.meta similarity index 100% rename from Assets/Animations/Hero/ZhaoJumpStart.anim.meta rename to Assets/_NOT FMOD/Animations/Hero/ZhaoJumpStart.anim.meta diff --git a/Assets/Animations/Hero/ZhaoWalk.anim b/Assets/_NOT FMOD/Animations/Hero/ZhaoWalk.anim similarity index 100% rename from Assets/Animations/Hero/ZhaoWalk.anim rename to Assets/_NOT FMOD/Animations/Hero/ZhaoWalk.anim diff --git a/Assets/Animations/Hero/ZhaoWalk.anim.meta b/Assets/_NOT FMOD/Animations/Hero/ZhaoWalk.anim.meta similarity index 100% rename from Assets/Animations/Hero/ZhaoWalk.anim.meta rename to Assets/_NOT FMOD/Animations/Hero/ZhaoWalk.anim.meta diff --git a/Assets/Animations/Intro.meta b/Assets/_NOT FMOD/Animations/Intro.meta similarity index 100% rename from Assets/Animations/Intro.meta rename to Assets/_NOT FMOD/Animations/Intro.meta diff --git a/Assets/Animations/Intro/Cutscene.anim b/Assets/_NOT FMOD/Animations/Intro/Cutscene.anim similarity index 100% rename from Assets/Animations/Intro/Cutscene.anim rename to Assets/_NOT FMOD/Animations/Intro/Cutscene.anim diff --git a/Assets/Animations/Intro/Cutscene.anim.meta b/Assets/_NOT FMOD/Animations/Intro/Cutscene.anim.meta similarity index 100% rename from Assets/Animations/Intro/Cutscene.anim.meta rename to Assets/_NOT FMOD/Animations/Intro/Cutscene.anim.meta diff --git a/Assets/Animations/Intro/CutsceneAnimator.controller b/Assets/_NOT FMOD/Animations/Intro/CutsceneAnimator.controller similarity index 100% rename from Assets/Animations/Intro/CutsceneAnimator.controller rename to Assets/_NOT FMOD/Animations/Intro/CutsceneAnimator.controller diff --git a/Assets/Animations/Intro/CutsceneAnimator.controller.meta b/Assets/_NOT FMOD/Animations/Intro/CutsceneAnimator.controller.meta similarity index 100% rename from Assets/Animations/Intro/CutsceneAnimator.controller.meta rename to Assets/_NOT FMOD/Animations/Intro/CutsceneAnimator.controller.meta diff --git a/Assets/Animations/Pipe.meta b/Assets/_NOT FMOD/Animations/Pipe.meta similarity index 100% rename from Assets/Animations/Pipe.meta rename to Assets/_NOT FMOD/Animations/Pipe.meta diff --git a/Assets/Animations/Pipe/PipeAnimator.controller b/Assets/_NOT FMOD/Animations/Pipe/PipeAnimator.controller similarity index 100% rename from Assets/Animations/Pipe/PipeAnimator.controller rename to Assets/_NOT FMOD/Animations/Pipe/PipeAnimator.controller diff --git a/Assets/Animations/Pipe/PipeAnimator.controller.meta b/Assets/_NOT FMOD/Animations/Pipe/PipeAnimator.controller.meta similarity index 100% rename from Assets/Animations/Pipe/PipeAnimator.controller.meta rename to Assets/_NOT FMOD/Animations/Pipe/PipeAnimator.controller.meta diff --git a/Assets/Animations/Pipe/Pipe_connected.anim b/Assets/_NOT FMOD/Animations/Pipe/Pipe_connected.anim similarity index 100% rename from Assets/Animations/Pipe/Pipe_connected.anim rename to Assets/_NOT FMOD/Animations/Pipe/Pipe_connected.anim diff --git a/Assets/Animations/Pipe/Pipe_connected.anim.meta b/Assets/_NOT FMOD/Animations/Pipe/Pipe_connected.anim.meta similarity index 100% rename from Assets/Animations/Pipe/Pipe_connected.anim.meta rename to Assets/_NOT FMOD/Animations/Pipe/Pipe_connected.anim.meta diff --git a/Assets/Animations/Pipe/Pipe_disconnected.anim b/Assets/_NOT FMOD/Animations/Pipe/Pipe_disconnected.anim similarity index 100% rename from Assets/Animations/Pipe/Pipe_disconnected.anim rename to Assets/_NOT FMOD/Animations/Pipe/Pipe_disconnected.anim diff --git a/Assets/Animations/Pipe/Pipe_disconnected.anim.meta b/Assets/_NOT FMOD/Animations/Pipe/Pipe_disconnected.anim.meta similarity index 100% rename from Assets/Animations/Pipe/Pipe_disconnected.anim.meta rename to Assets/_NOT FMOD/Animations/Pipe/Pipe_disconnected.anim.meta diff --git a/Assets/Animations/Screens.meta b/Assets/_NOT FMOD/Animations/Screens.meta similarity index 100% rename from Assets/Animations/Screens.meta rename to Assets/_NOT FMOD/Animations/Screens.meta diff --git a/Assets/Animations/Screens/ScreenAnimator_1.controller b/Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_1.controller similarity index 100% rename from Assets/Animations/Screens/ScreenAnimator_1.controller rename to Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_1.controller diff --git a/Assets/Animations/Screens/ScreenAnimator_1.controller.meta b/Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_1.controller.meta similarity index 100% rename from Assets/Animations/Screens/ScreenAnimator_1.controller.meta rename to Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_1.controller.meta diff --git a/Assets/Animations/Screens/ScreenAnimator_2.controller b/Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_2.controller similarity index 100% rename from Assets/Animations/Screens/ScreenAnimator_2.controller rename to Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_2.controller diff --git a/Assets/Animations/Screens/ScreenAnimator_2.controller.meta b/Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_2.controller.meta similarity index 100% rename from Assets/Animations/Screens/ScreenAnimator_2.controller.meta rename to Assets/_NOT FMOD/Animations/Screens/ScreenAnimator_2.controller.meta diff --git a/Assets/Animations/Screens/Screen_1.anim b/Assets/_NOT FMOD/Animations/Screens/Screen_1.anim similarity index 100% rename from Assets/Animations/Screens/Screen_1.anim rename to Assets/_NOT FMOD/Animations/Screens/Screen_1.anim diff --git a/Assets/Animations/Screens/Screen_1.anim.meta b/Assets/_NOT FMOD/Animations/Screens/Screen_1.anim.meta similarity index 100% rename from Assets/Animations/Screens/Screen_1.anim.meta rename to Assets/_NOT FMOD/Animations/Screens/Screen_1.anim.meta diff --git a/Assets/Animations/Screens/Screen_1_deactivated.anim b/Assets/_NOT FMOD/Animations/Screens/Screen_1_deactivated.anim similarity index 100% rename from Assets/Animations/Screens/Screen_1_deactivated.anim rename to Assets/_NOT FMOD/Animations/Screens/Screen_1_deactivated.anim diff --git a/Assets/Animations/Screens/Screen_1_deactivated.anim.meta b/Assets/_NOT FMOD/Animations/Screens/Screen_1_deactivated.anim.meta similarity index 100% rename from Assets/Animations/Screens/Screen_1_deactivated.anim.meta rename to Assets/_NOT FMOD/Animations/Screens/Screen_1_deactivated.anim.meta diff --git a/Assets/Animations/Screens/Screen_2.anim b/Assets/_NOT FMOD/Animations/Screens/Screen_2.anim similarity index 100% rename from Assets/Animations/Screens/Screen_2.anim rename to Assets/_NOT FMOD/Animations/Screens/Screen_2.anim diff --git a/Assets/Animations/Screens/Screen_2.anim.meta b/Assets/_NOT FMOD/Animations/Screens/Screen_2.anim.meta similarity index 100% rename from Assets/Animations/Screens/Screen_2.anim.meta rename to Assets/_NOT FMOD/Animations/Screens/Screen_2.anim.meta diff --git a/Assets/Animations/Screens/Screen_2_deactivated.anim b/Assets/_NOT FMOD/Animations/Screens/Screen_2_deactivated.anim similarity index 100% rename from Assets/Animations/Screens/Screen_2_deactivated.anim rename to Assets/_NOT FMOD/Animations/Screens/Screen_2_deactivated.anim diff --git a/Assets/Animations/Screens/Screen_2_deactivated.anim.meta b/Assets/_NOT FMOD/Animations/Screens/Screen_2_deactivated.anim.meta similarity index 100% rename from Assets/Animations/Screens/Screen_2_deactivated.anim.meta rename to Assets/_NOT FMOD/Animations/Screens/Screen_2_deactivated.anim.meta diff --git a/Assets/Pallets.meta b/Assets/_NOT FMOD/Pallets.meta similarity index 100% rename from Assets/Pallets.meta rename to Assets/_NOT FMOD/Pallets.meta diff --git a/Assets/Pallets/Walls.prefab b/Assets/_NOT FMOD/Pallets/Walls.prefab similarity index 100% rename from Assets/Pallets/Walls.prefab rename to Assets/_NOT FMOD/Pallets/Walls.prefab diff --git a/Assets/Pallets/Walls.prefab.meta b/Assets/_NOT FMOD/Pallets/Walls.prefab.meta similarity index 100% rename from Assets/Pallets/Walls.prefab.meta rename to Assets/_NOT FMOD/Pallets/Walls.prefab.meta diff --git a/Assets/Prefabs.meta b/Assets/_NOT FMOD/Prefabs.meta similarity index 100% rename from Assets/Prefabs.meta rename to Assets/_NOT FMOD/Prefabs.meta diff --git a/Assets/_NOT FMOD/Prefabs/Audio.meta b/Assets/_NOT FMOD/Prefabs/Audio.meta new file mode 100644 index 0000000..6eebbad --- /dev/null +++ b/Assets/_NOT FMOD/Prefabs/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4e26f233896c7b4aa9d9ba9f3123821 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_NOT FMOD/Prefabs/Audio/AudioManager.prefab b/Assets/_NOT FMOD/Prefabs/Audio/AudioManager.prefab new file mode 100644 index 0000000..3e7bb95 --- /dev/null +++ b/Assets/_NOT FMOD/Prefabs/Audio/AudioManager.prefab @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 0} + m_RootGameObject: {fileID: 1030731810580782} + m_IsPrefabAsset: 1 +--- !u!1 &1030731810580782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4894509025621206} + - component: {fileID: 114164511446869826} + m_Layer: 0 + m_Name: AudioManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4894509025621206 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1030731810580782} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.2096853, y: 0.19610485, z: 0.049804688} + 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!114 &114164511446869826 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1030731810580782} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e5796be49fdf154ca22e459afff9737, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/_NOT FMOD/Prefabs/Audio/AudioManager.prefab.meta b/Assets/_NOT FMOD/Prefabs/Audio/AudioManager.prefab.meta new file mode 100644 index 0000000..8fa1edd --- /dev/null +++ b/Assets/_NOT FMOD/Prefabs/Audio/AudioManager.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 31925c500bc22574aa0517ca9385de2b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Doors.meta b/Assets/_NOT FMOD/Prefabs/Doors.meta similarity index 100% rename from Assets/Prefabs/Doors.meta rename to Assets/_NOT FMOD/Prefabs/Doors.meta diff --git a/Assets/Prefabs/Doors/Door_red.prefab b/Assets/_NOT FMOD/Prefabs/Doors/Door_red.prefab similarity index 100% rename from Assets/Prefabs/Doors/Door_red.prefab rename to Assets/_NOT FMOD/Prefabs/Doors/Door_red.prefab diff --git a/Assets/Prefabs/Doors/Door_red.prefab.meta b/Assets/_NOT FMOD/Prefabs/Doors/Door_red.prefab.meta similarity index 100% rename from Assets/Prefabs/Doors/Door_red.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Doors/Door_red.prefab.meta diff --git a/Assets/Prefabs/Doors/Door_steel.prefab b/Assets/_NOT FMOD/Prefabs/Doors/Door_steel.prefab similarity index 100% rename from Assets/Prefabs/Doors/Door_steel.prefab rename to Assets/_NOT FMOD/Prefabs/Doors/Door_steel.prefab diff --git a/Assets/Prefabs/Doors/Door_steel.prefab.meta b/Assets/_NOT FMOD/Prefabs/Doors/Door_steel.prefab.meta similarity index 100% rename from Assets/Prefabs/Doors/Door_steel.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Doors/Door_steel.prefab.meta diff --git a/Assets/Prefabs/Generator.meta b/Assets/_NOT FMOD/Prefabs/Generator.meta similarity index 100% rename from Assets/Prefabs/Generator.meta rename to Assets/_NOT FMOD/Prefabs/Generator.meta diff --git a/Assets/Prefabs/Generator/DamagingArea.prefab b/Assets/_NOT FMOD/Prefabs/Generator/DamagingArea.prefab similarity index 100% rename from Assets/Prefabs/Generator/DamagingArea.prefab rename to Assets/_NOT FMOD/Prefabs/Generator/DamagingArea.prefab diff --git a/Assets/Prefabs/Generator/DamagingArea.prefab.meta b/Assets/_NOT FMOD/Prefabs/Generator/DamagingArea.prefab.meta similarity index 100% rename from Assets/Prefabs/Generator/DamagingArea.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Generator/DamagingArea.prefab.meta diff --git a/Assets/Prefabs/Generator/Generator.prefab b/Assets/_NOT FMOD/Prefabs/Generator/Generator.prefab similarity index 100% rename from Assets/Prefabs/Generator/Generator.prefab rename to Assets/_NOT FMOD/Prefabs/Generator/Generator.prefab diff --git a/Assets/Prefabs/Generator/Generator.prefab.meta b/Assets/_NOT FMOD/Prefabs/Generator/Generator.prefab.meta similarity index 100% rename from Assets/Prefabs/Generator/Generator.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Generator/Generator.prefab.meta diff --git a/Assets/Prefabs/Generator/Smoke.prefab b/Assets/_NOT FMOD/Prefabs/Generator/Smoke.prefab similarity index 100% rename from Assets/Prefabs/Generator/Smoke.prefab rename to Assets/_NOT FMOD/Prefabs/Generator/Smoke.prefab diff --git a/Assets/Prefabs/Generator/Smoke.prefab.meta b/Assets/_NOT FMOD/Prefabs/Generator/Smoke.prefab.meta similarity index 100% rename from Assets/Prefabs/Generator/Smoke.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Generator/Smoke.prefab.meta diff --git a/Assets/Prefabs/Interactable.meta b/Assets/_NOT FMOD/Prefabs/Interactable.meta similarity index 100% rename from Assets/Prefabs/Interactable.meta rename to Assets/_NOT FMOD/Prefabs/Interactable.meta diff --git a/Assets/Prefabs/Interactable/Button.prefab b/Assets/_NOT FMOD/Prefabs/Interactable/Button.prefab similarity index 100% rename from Assets/Prefabs/Interactable/Button.prefab rename to Assets/_NOT FMOD/Prefabs/Interactable/Button.prefab diff --git a/Assets/Prefabs/Interactable/Button.prefab.meta b/Assets/_NOT FMOD/Prefabs/Interactable/Button.prefab.meta similarity index 100% rename from Assets/Prefabs/Interactable/Button.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Interactable/Button.prefab.meta diff --git a/Assets/Prefabs/Interactable/Screen_1.prefab b/Assets/_NOT FMOD/Prefabs/Interactable/Screen_1.prefab similarity index 100% rename from Assets/Prefabs/Interactable/Screen_1.prefab rename to Assets/_NOT FMOD/Prefabs/Interactable/Screen_1.prefab diff --git a/Assets/Prefabs/Interactable/Screen_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Interactable/Screen_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Interactable/Screen_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Interactable/Screen_1.prefab.meta diff --git a/Assets/Prefabs/Interactable/Screen_2.prefab b/Assets/_NOT FMOD/Prefabs/Interactable/Screen_2.prefab similarity index 100% rename from Assets/Prefabs/Interactable/Screen_2.prefab rename to Assets/_NOT FMOD/Prefabs/Interactable/Screen_2.prefab diff --git a/Assets/Prefabs/Interactable/Screen_2.prefab.meta b/Assets/_NOT FMOD/Prefabs/Interactable/Screen_2.prefab.meta similarity index 100% rename from Assets/Prefabs/Interactable/Screen_2.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Interactable/Screen_2.prefab.meta diff --git a/Assets/Prefabs/Player.meta b/Assets/_NOT FMOD/Prefabs/Player.meta similarity index 100% rename from Assets/Prefabs/Player.meta rename to Assets/_NOT FMOD/Prefabs/Player.meta diff --git a/Assets/Prefabs/Player/Camera.prefab b/Assets/_NOT FMOD/Prefabs/Player/Camera.prefab similarity index 100% rename from Assets/Prefabs/Player/Camera.prefab rename to Assets/_NOT FMOD/Prefabs/Player/Camera.prefab diff --git a/Assets/Prefabs/Player/Camera.prefab.meta b/Assets/_NOT FMOD/Prefabs/Player/Camera.prefab.meta similarity index 100% rename from Assets/Prefabs/Player/Camera.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Player/Camera.prefab.meta diff --git a/Assets/Prefabs/Player/HUD.prefab b/Assets/_NOT FMOD/Prefabs/Player/HUD.prefab similarity index 100% rename from Assets/Prefabs/Player/HUD.prefab rename to Assets/_NOT FMOD/Prefabs/Player/HUD.prefab diff --git a/Assets/Prefabs/Player/HUD.prefab.meta b/Assets/_NOT FMOD/Prefabs/Player/HUD.prefab.meta similarity index 100% rename from Assets/Prefabs/Player/HUD.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Player/HUD.prefab.meta diff --git a/Assets/Prefabs/Player/Player.prefab b/Assets/_NOT FMOD/Prefabs/Player/Player.prefab similarity index 100% rename from Assets/Prefabs/Player/Player.prefab rename to Assets/_NOT FMOD/Prefabs/Player/Player.prefab diff --git a/Assets/Prefabs/Player/Player.prefab.meta b/Assets/_NOT FMOD/Prefabs/Player/Player.prefab.meta similarity index 100% rename from Assets/Prefabs/Player/Player.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Player/Player.prefab.meta diff --git a/Assets/Prefabs/Tiles.meta b/Assets/_NOT FMOD/Prefabs/Tiles.meta similarity index 100% rename from Assets/Prefabs/Tiles.meta rename to Assets/_NOT FMOD/Prefabs/Tiles.meta diff --git a/Assets/Prefabs/Tiles/Constructions.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions.meta diff --git a/Assets/Prefabs/Tiles/Constructions/barrow.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/barrow.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/barrow.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/barrow.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/barrow.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/barrow.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/barrow.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/barrow.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/construction_clear_h.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_clear_h.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_clear_h.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_clear_h.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/construction_clear_h.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_clear_h.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_clear_h.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_clear_h.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/construction_stairs.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_stairs.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/construction_stairs.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_stairs.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/construction_stairs_small.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs_small.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_stairs_small.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs_small.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/construction_stairs_small.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs_small.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_stairs_small.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_stairs_small.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_thin_half_v_1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/construction_v.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_v.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_v.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_v.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/construction_v.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_v.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/construction_v.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/construction_v.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_c.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_c.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_c.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_c.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_c.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_c.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_c.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_c.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_corner_in.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_in.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_corner_in.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_in.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_corner_in.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_in.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_corner_in.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_in.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_corner_out.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_out.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_corner_out.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_out.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_corner_out.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_out.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_corner_out.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_corner_out.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_d.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_d.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_d.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_d.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_d.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_d.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_d.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_d.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_half.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_half.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_half.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_half.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/darkness_half.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_half.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/darkness_half.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/darkness_half.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/railing.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/railing.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/railing.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/railing.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/railing_end.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing_end.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/railing_end.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing_end.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/railing_end.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing_end.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/railing_end.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/railing_end.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/sign_arrow_d.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_d.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_arrow_d.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_d.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/sign_arrow_d.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_d.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_arrow_d.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_d.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/sign_arrow_h.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_h.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_arrow_h.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_h.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/sign_arrow_h.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_h.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_arrow_h.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_arrow_h.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/sign_exit.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_exit.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_exit.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_exit.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/sign_exit.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_exit.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_exit.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_exit.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/sign_warning.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_warning.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_warning.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_warning.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/sign_warning.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_warning.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/sign_warning.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/sign_warning.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/struction_thin_half_v.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/structure_clear_d.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_clear_d.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/structure_clear_d.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_clear_d.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_clear_d_bottom.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/structure_d.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_d.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_d.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_d.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/structure_d.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_d.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_d.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_d.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/structure_full_h.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_full_h.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_full_h.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_full_h.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/structure_full_h.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_full_h.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_full_h.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_full_h.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/structure_h.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_h.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_h.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_h.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/structure_h.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_h.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_h.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_h.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/structure_half_h.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_half_h.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_half_h.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_half_h.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/structure_half_h.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_half_h.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_half_h.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_half_h.prefab.meta diff --git a/Assets/Prefabs/Tiles/Constructions/structure_thin_v.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_thin_v.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_thin_v.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_thin_v.prefab diff --git a/Assets/Prefabs/Tiles/Constructions/structure_thin_v.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_thin_v.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Constructions/structure_thin_v.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Constructions/structure_thin_v.prefab.meta diff --git a/Assets/Prefabs/Tiles/Pipes.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes.meta similarity index 100% rename from Assets/Prefabs/Tiles/Pipes.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes.meta diff --git a/Assets/Prefabs/Tiles/Pipes/cooper_pipe.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/cooper_pipe.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/cooper_pipe.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/cooper_pipe.prefab diff --git a/Assets/Prefabs/Tiles/Pipes/cooper_pipe.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/cooper_pipe.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/cooper_pipe.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/cooper_pipe.prefab.meta diff --git a/Assets/Prefabs/Tiles/Pipes/coper_pipe_double.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/coper_pipe_double.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/coper_pipe_double.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/coper_pipe_double.prefab diff --git a/Assets/Prefabs/Tiles/Pipes/coper_pipe_double.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/coper_pipe_double.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/coper_pipe_double.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/coper_pipe_double.prefab.meta diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_down.prefab.meta diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_d_up.prefab.meta diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_h.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_h.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_h.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_h.prefab diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_h.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_h.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_h.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_h.prefab.meta diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_v.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_v.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_v.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_v.prefab diff --git a/Assets/Prefabs/Tiles/Pipes/dark_pipe_v.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_v.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Pipes/dark_pipe_v.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Pipes/dark_pipe_v.prefab.meta diff --git a/Assets/Prefabs/Tiles/Ventilation.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation.meta similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation.meta diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation.prefab diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation.prefab.meta diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe.prefab.meta diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_pipe_hub.prefab.meta diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_small.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_small.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small.prefab diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_small.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_small.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small.prefab.meta diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab diff --git a/Assets/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Ventilation/ventilation_small_pipe.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/door_red 1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/door_red 1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/door_red 1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/door_red 1.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/door_red 1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/door_red 1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/door_red 1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/door_red 1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_1.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_2.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_2.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_2.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_2.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_2.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_2.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_2.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_2.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_3.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_3.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_3.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_3.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_3.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_3.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_3.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_3.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_4.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_4.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_4.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_4.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/dust_red_4.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_4.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/dust_red_4.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/dust_red_4.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/flower.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/flower.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/flower.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/flower.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/flower.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/flower.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/flower.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/flower.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/stairs_red.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/stairs_red.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/stairs_red.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/stairs_red.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/stairs_red_dust_2.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_small.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_border_wide.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_crack_2.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_door.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_door.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_door.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_door.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_door_dust.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_lattice.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_pipes_open.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_window.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_window.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_window.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_window.prefab diff --git a/Assets/Prefabs/Tiles/Walls_red/wall_red_window.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_window.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_red/wall_red_window.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_red/wall_red_window.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/door_steel.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/door_steel.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/door_steel.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/door_steel.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/door_steel.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/door_steel.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/door_steel.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/door_steel.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_2.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_3.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/dust_steel_4.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/stairs_steel.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/stairs_steel.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/stairs_steel.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/stairs_steel.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/stairs_steel_dust_2.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_small.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_border_wide.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_door_dust.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_broken.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_flap_cornered.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_line.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_plate.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_window.prefab.meta diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab diff --git a/Assets/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Walls_steel/wall_steel_wires.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_bl.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_br.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_br.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_br.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_br.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_br.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_br.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_br.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_br.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tl.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_diagonal_tr.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_1.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_1.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_1.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_1.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_1.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_1.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_1.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_1.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_2.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_2.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_2.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_2.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_2.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_2.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_2.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_2.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_3.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_3.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_3.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_3.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_3.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_3.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_3.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_3.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_4.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_4.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_4.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_4.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_h_4.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_4.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_h_4.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_h_4.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_t.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_t.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_t.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_t.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t.prefab.meta diff --git a/Assets/Prefabs/Tiles/Wires/wires_t_bottom.prefab b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t_bottom.prefab similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_t_bottom.prefab rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t_bottom.prefab diff --git a/Assets/Prefabs/Tiles/Wires/wires_t_bottom.prefab.meta b/Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t_bottom.prefab.meta similarity index 100% rename from Assets/Prefabs/Tiles/Wires/wires_t_bottom.prefab.meta rename to Assets/_NOT FMOD/Prefabs/Tiles/Wires/wires_t_bottom.prefab.meta diff --git a/Assets/Scenes.meta b/Assets/_NOT FMOD/Scenes.meta similarity index 100% rename from Assets/Scenes.meta rename to Assets/_NOT FMOD/Scenes.meta diff --git a/Assets/Scenes/Intro.unity b/Assets/_NOT FMOD/Scenes/Intro.unity similarity index 89% rename from Assets/Scenes/Intro.unity rename to Assets/_NOT FMOD/Scenes/Intro.unity index f0a7921..6a3c670 100644 --- a/Assets/Scenes/Intro.unity +++ b/Assets/_NOT FMOD/Scenes/Intro.unity @@ -113,6 +113,48 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1001 &190952953 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_LocalPosition.x + value: -1.2096853 + objectReference: {fileID: 0} + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_LocalPosition.y + value: 0.19610485 + objectReference: {fileID: 0} + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_LocalPosition.z + value: 0.049804688 + objectReference: {fileID: 0} + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4894509025621206, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 31925c500bc22574aa0517ca9385de2b, type: 2} + m_IsPrefabAsset: 0 --- !u!1 &294240782 GameObject: m_ObjectHideFlags: 0 @@ -544,146 +586,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: FirstLevelName: Level1 ---- !u!1 &919319088 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 919319089} - - component: {fileID: 919319091} - - component: {fileID: 919319090} - m_Layer: 0 - m_Name: MusicPlayer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &919319089 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 919319088} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.3230805, y: 0.050637808, z: 121.265625} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &919319090 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 919319088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 99387bca11d3bc34f957401d08fcadf4, type: 3} - m_Name: - m_EditorClassIdentifier: - IntroClip: {fileID: 8300000, guid: a3534b15e58172e41bb512aa122247be, type: 3} - AudioClips: - - {fileID: 8300000, guid: 50648faeaf995aa44b5ab3684f5055d2, type: 3} - - {fileID: 8300000, guid: a26df14e170d83b48baa0b8e189d3cfa, type: 3} ---- !u!82 &919319091 -AudioSource: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 919319088} - m_Enabled: 1 - serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 8300000, guid: a3534b15e58172e41bb512aa122247be, type: 3} - m_PlayOnAwake: 1 - m_Volume: 0.1 - m_Pitch: 1 - Loop: 1 - Mute: 0 - Spatialize: 0 - SpatializePostEffects: 0 - Priority: 128 - DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 - Pan2D: 0 - rolloffMode: 0 - BypassEffects: 0 - BypassListenerEffects: 0 - BypassReverbZones: 0 - rolloffCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - - serializedVersion: 3 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - panLevelCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - spreadCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - reverbZoneMixCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 --- !u!1 &977657363 GameObject: m_ObjectHideFlags: 0 @@ -926,13 +828,18 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!81 &1772415847 -AudioListener: +--- !u!114 &1772415847 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1772415846} m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86c6556701af9e04380698b89f691b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + ListenerNumber: 0 --- !u!20 &1772415848 Camera: m_ObjectHideFlags: 0 @@ -984,7 +891,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1820692623 GameObject: diff --git a/Assets/Scenes/Intro.unity.meta b/Assets/_NOT FMOD/Scenes/Intro.unity.meta similarity index 100% rename from Assets/Scenes/Intro.unity.meta rename to Assets/_NOT FMOD/Scenes/Intro.unity.meta diff --git a/Assets/Scenes/Level1.unity b/Assets/_NOT FMOD/Scenes/Level1.unity similarity index 99% rename from Assets/Scenes/Level1.unity rename to Assets/_NOT FMOD/Scenes/Level1.unity index ec655c2..5d18298 100644 --- a/Assets/Scenes/Level1.unity +++ b/Assets/_NOT FMOD/Scenes/Level1.unity @@ -11443,9 +11443,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -14597,8 +14594,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &553725914 AudioSource: @@ -21689,6 +21684,23 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!1 &719798254 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1752414260833948, guid: bd61e13e3fc85584eaa3bf923db967e3, + type: 2} + m_PrefabInternal: {fileID: 999037169} +--- !u!114 &719798259 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 719798254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86c6556701af9e04380698b89f691b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + ListenerNumber: 0 --- !u!1 &721822622 GameObject: m_ObjectHideFlags: 0 @@ -33603,8 +33615,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &862125967 AudioSource: @@ -45364,7 +45374,7 @@ Prefab: - target: {fileID: 20360168326623688, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} propertyPath: orthographic size - value: 2.0507812 + value: 1.9335938 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} @@ -59167,9 +59177,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 0 InitiallyPressed: 0 EventsOnPress: @@ -60660,6 +60667,7 @@ GameObject: - component: {fileID: 1374312450} - component: {fileID: 1374312449} - component: {fileID: 1374312448} + - component: {fileID: 1374312452} m_Layer: 0 m_Name: dome m_TagString: Untagged @@ -60689,11 +60697,11 @@ AudioSource: type: 2} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1374312446} - m_Enabled: 1 + m_Enabled: 0 serializedVersion: 4 OutputAudioMixerGroup: {fileID: 0} m_audioClip: {fileID: 8300000, guid: ea4ded240b54cfd4fa6c6ea41abfd0e3, type: 3} - m_PlayOnAwake: 1 + m_PlayOnAwake: 0 m_Volume: 0.4 m_Pitch: 1 Loop: 1 @@ -60836,6 +60844,17 @@ Rigidbody2D: m_SleepingMode: 1 m_CollisionDetection: 0 m_Constraints: 0 +--- !u!114 &1374312452 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1374312446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7acbf6377a5958a41a7397db86e14eb0, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1375294280 GameObject: m_ObjectHideFlags: 0 @@ -71889,8 +71908,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 0 --- !u!82 &1458430833 AudioSource: @@ -76011,9 +76028,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -78566,8 +78580,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &1792775151 AudioSource: @@ -79967,7 +79979,19 @@ Prefab: propertyPath: HPIndicator value: objectReference: {fileID: 1354617228} - m_RemovedComponents: [] + - target: {fileID: 81142255982296606, guid: 1e7fca456065e364eaf17d795ba5b6f8, + type: 2} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 82102960548032178, guid: 1e7fca456065e364eaf17d795ba5b6f8, + type: 2} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 82102960548032178, guid: 1e7fca456065e364eaf17d795ba5b6f8, type: 2} + - {fileID: 81142255982296606, guid: 1e7fca456065e364eaf17d795ba5b6f8, type: 2} m_SourcePrefab: {fileID: 100100000, guid: 1e7fca456065e364eaf17d795ba5b6f8, type: 2} m_IsPrefabAsset: 0 --- !u!1 &1855332380 diff --git a/Assets/Scenes/Level1.unity.meta b/Assets/_NOT FMOD/Scenes/Level1.unity.meta similarity index 100% rename from Assets/Scenes/Level1.unity.meta rename to Assets/_NOT FMOD/Scenes/Level1.unity.meta diff --git a/Assets/Scenes/Level2.unity b/Assets/_NOT FMOD/Scenes/Level2.unity similarity index 99% rename from Assets/Scenes/Level2.unity rename to Assets/_NOT FMOD/Scenes/Level2.unity index 3530ad3..305a3bc 100644 --- a/Assets/Scenes/Level2.unity +++ b/Assets/_NOT FMOD/Scenes/Level2.unity @@ -15099,8 +15099,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &326423143 AudioSource: @@ -29089,9 +29087,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -30140,8 +30135,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &664675150 AudioSource: @@ -67408,6 +67401,11 @@ MonoBehaviour: InitiallyFilled: 1 Consumption: 0.05 MaxRadius: 11 + EventsOnEmpty: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null m_safeDome: {fileID: 978514570} --- !u!95 &1181039112 Animator: @@ -67694,9 +67692,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -74591,9 +74586,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 0 InitiallyPressed: 0 EventsOnPress: @@ -76521,7 +76513,9 @@ Prefab: propertyPath: HPIndicator value: objectReference: {fileID: 2004917009} - m_RemovedComponents: [] + m_RemovedComponents: + - {fileID: 82102960548032178, guid: 1e7fca456065e364eaf17d795ba5b6f8, type: 2} + - {fileID: 81142255982296606, guid: 1e7fca456065e364eaf17d795ba5b6f8, type: 2} m_SourcePrefab: {fileID: 100100000, guid: 1e7fca456065e364eaf17d795ba5b6f8, type: 2} m_IsPrefabAsset: 0 --- !u!212 &1383847995 stripped @@ -93050,11 +93044,28 @@ Prefab: - target: {fileID: 20360168326623688, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} propertyPath: orthographic size - value: 2.0507812 + value: 1.9335938 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} m_IsPrefabAsset: 0 +--- !u!1 &1831665313 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1752414260833948, guid: bd61e13e3fc85584eaa3bf923db967e3, + type: 2} + m_PrefabInternal: {fileID: 1831665312} +--- !u!114 &1831665314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1831665313} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86c6556701af9e04380698b89f691b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + ListenerNumber: 0 --- !u!1 &1843078914 GameObject: m_ObjectHideFlags: 0 @@ -94366,9 +94377,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -97142,8 +97150,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &2045309412 MonoBehaviour: diff --git a/Assets/Scenes/Level2.unity.meta b/Assets/_NOT FMOD/Scenes/Level2.unity.meta similarity index 100% rename from Assets/Scenes/Level2.unity.meta rename to Assets/_NOT FMOD/Scenes/Level2.unity.meta diff --git a/Assets/Scenes/Level3.unity b/Assets/_NOT FMOD/Scenes/Level3.unity similarity index 99% rename from Assets/Scenes/Level3.unity rename to Assets/_NOT FMOD/Scenes/Level3.unity index 4c9dbb6..cc7ca01 100644 --- a/Assets/Scenes/Level3.unity +++ b/Assets/_NOT FMOD/Scenes/Level3.unity @@ -1519,7 +1519,7 @@ Prefab: - target: {fileID: 114924401141572992, guid: 4c30338a1975a7e438478ef788f52545, type: 2} propertyPath: EventsOnPress.m_PersistentCalls.m_Calls.Array.size - value: 1 + value: 2 objectReference: {fileID: 0} - target: {fileID: 4846108935492842, guid: 4c30338a1975a7e438478ef788f52545, type: 2} propertyPath: m_LocalPosition.x @@ -1583,6 +1583,32 @@ Prefab: propertyPath: EventsOnPress.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument value: Level4 objectReference: {fileID: 0} + - target: {fileID: 114924401141572992, guid: 4c30338a1975a7e438478ef788f52545, + type: 2} + propertyPath: EventsOnPress.m_PersistentCalls.m_Calls.Array.data[1].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114924401141572992, guid: 4c30338a1975a7e438478ef788f52545, + type: 2} + propertyPath: EventsOnPress.m_PersistentCalls.m_Calls.Array.data[1].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 114924401141572992, guid: 4c30338a1975a7e438478ef788f52545, + type: 2} + propertyPath: EventsOnPress.m_PersistentCalls.m_Calls.Array.data[1].m_Target + value: + objectReference: {fileID: 114164511446869826, guid: 31925c500bc22574aa0517ca9385de2b, + type: 2} + - target: {fileID: 114924401141572992, guid: 4c30338a1975a7e438478ef788f52545, + type: 2} + propertyPath: EventsOnPress.m_PersistentCalls.m_Calls.Array.data[1].m_MethodName + value: MusicTwo + objectReference: {fileID: 0} + - target: {fileID: 114924401141572992, guid: 4c30338a1975a7e438478ef788f52545, + type: 2} + propertyPath: EventsOnPress.m_PersistentCalls.m_Calls.Array.data[1].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 4c30338a1975a7e438478ef788f52545, type: 2} m_IsPrefabAsset: 0 @@ -1632,7 +1658,7 @@ Prefab: - target: {fileID: 224793413234625150, guid: 7f6ecd6ab0a21364d9f5f0ed5bb2a161, type: 2} propertyPath: m_RootOrder - value: 2 + value: 3 objectReference: {fileID: 0} - target: {fileID: 224793413234625150, guid: 7f6ecd6ab0a21364d9f5f0ed5bb2a161, type: 2} @@ -1672,7 +1698,7 @@ Prefab: - target: {fileID: 224793413234625150, guid: 7f6ecd6ab0a21364d9f5f0ed5bb2a161, type: 2} propertyPath: m_RootOrder - value: 2 + value: 3 objectReference: {fileID: 0} - target: {fileID: 224793413234625150, guid: 7f6ecd6ab0a21364d9f5f0ed5bb2a161, type: 2} @@ -4414,7 +4440,7 @@ Tilemap: - first: {x: 11, y: -10, z: 0} second: m_TileIndex: 12 - m_TileSpriteIndex: 12 + m_TileSpriteIndex: 14 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -5827,12 +5853,12 @@ Tilemap: m_Data: {fileID: 0} - m_RefCount: 0 m_Data: {fileID: 0} - - m_RefCount: 1 - m_Data: {fileID: 21300034, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300004, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 0 m_Data: {fileID: 0} + - m_RefCount: 1 + m_Data: {fileID: 21300004, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 1 + m_Data: {fileID: 21300034, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} m_TileMatrixArray: - m_RefCount: 87 m_Data: @@ -6073,7 +6099,7 @@ Prefab: - target: {fileID: 20360168326623688, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} propertyPath: orthographic size - value: 2.2135417 + value: 1.9335938 objectReference: {fileID: 0} - target: {fileID: 114897319026750266, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} @@ -6083,6 +6109,23 @@ Prefab: m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} m_IsPrefabAsset: 0 +--- !u!1 &1576834932 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1752414260833948, guid: bd61e13e3fc85584eaa3bf923db967e3, + type: 2} + m_PrefabInternal: {fileID: 1576834931} +--- !u!114 &1576834933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1576834932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86c6556701af9e04380698b89f691b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + ListenerNumber: 0 --- !u!1001 &1601416843 Prefab: m_ObjectHideFlags: 0 @@ -6444,7 +6487,7 @@ Tilemap: - first: {x: 12, y: -12, z: 0} second: m_TileIndex: 1 - m_TileSpriteIndex: 39 + m_TileSpriteIndex: 61 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6498,7 +6541,7 @@ Tilemap: - first: {x: 18, y: -12, z: 0} second: m_TileIndex: 25 - m_TileSpriteIndex: 38 + m_TileSpriteIndex: 60 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6516,7 +6559,7 @@ Tilemap: - first: {x: 20, y: -12, z: 0} second: m_TileIndex: 19 - m_TileSpriteIndex: 37 + m_TileSpriteIndex: 50 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6525,7 +6568,7 @@ Tilemap: - first: {x: 21, y: -12, z: 0} second: m_TileIndex: 20 - m_TileSpriteIndex: 27 + m_TileSpriteIndex: 49 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6543,7 +6586,7 @@ Tilemap: - first: {x: 23, y: -12, z: 0} second: m_TileIndex: 23 - m_TileSpriteIndex: 25 + m_TileSpriteIndex: 47 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6588,7 +6631,7 @@ Tilemap: - first: {x: -8, y: -11, z: 0} second: m_TileIndex: 5 - m_TileSpriteIndex: 30 + m_TileSpriteIndex: 39 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6642,7 +6685,7 @@ Tilemap: - first: {x: 0, y: -11, z: 0} second: m_TileIndex: 49 - m_TileSpriteIndex: 8 + m_TileSpriteIndex: 38 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6651,7 +6694,7 @@ Tilemap: - first: {x: 1, y: -11, z: 0} second: m_TileIndex: 39 - m_TileSpriteIndex: 7 + m_TileSpriteIndex: 37 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6660,7 +6703,7 @@ Tilemap: - first: {x: 2, y: -11, z: 0} second: m_TileIndex: 37 - m_TileSpriteIndex: 4 + m_TileSpriteIndex: 30 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6705,7 +6748,7 @@ Tilemap: - first: {x: 12, y: -11, z: 0} second: m_TileIndex: 2 - m_TileSpriteIndex: 23 + m_TileSpriteIndex: 27 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6732,7 +6775,7 @@ Tilemap: - first: {x: 20, y: -11, z: 0} second: m_TileIndex: 21 - m_TileSpriteIndex: 21 + m_TileSpriteIndex: 25 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -6741,7 +6784,7 @@ Tilemap: - first: {x: 21, y: -11, z: 0} second: m_TileIndex: 22 - m_TileSpriteIndex: 22 + m_TileSpriteIndex: 23 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -7029,7 +7072,7 @@ Tilemap: - first: {x: 19, y: -7, z: 0} second: m_TileIndex: 46 - m_TileSpriteIndex: 19 + m_TileSpriteIndex: 22 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -7038,7 +7081,7 @@ Tilemap: - first: {x: 20, y: -7, z: 0} second: m_TileIndex: 45 - m_TileSpriteIndex: 18 + m_TileSpriteIndex: 21 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -7047,7 +7090,7 @@ Tilemap: - first: {x: 21, y: -7, z: 0} second: m_TileIndex: 44 - m_TileSpriteIndex: 17 + m_TileSpriteIndex: 19 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -7056,7 +7099,7 @@ Tilemap: - first: {x: 22, y: -7, z: 0} second: m_TileIndex: 18 - m_TileSpriteIndex: 16 + m_TileSpriteIndex: 18 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -7317,7 +7360,7 @@ Tilemap: - first: {x: -5, y: -5, z: 0} second: m_TileIndex: 11 - m_TileSpriteIndex: 11 + m_TileSpriteIndex: 17 m_TileMatrixIndex: 1 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -7641,7 +7684,7 @@ Tilemap: - first: {x: 14, y: 0, z: 0} second: m_TileIndex: 12 - m_TileSpriteIndex: 12 + m_TileSpriteIndex: 16 m_TileMatrixIndex: 0 m_TileColorIndex: 0 m_ObjectToInstantiate: {fileID: 0} @@ -7804,60 +7847,60 @@ Tilemap: m_Data: {fileID: 21300250, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 2 m_Data: {fileID: 21300224, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300214, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 0 + m_Data: {fileID: 0} - m_RefCount: 2 m_Data: {fileID: 21300194, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 2 m_Data: {fileID: 21300192, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300212, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300210, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 0 + m_Data: {fileID: 0} + - m_RefCount: 0 + m_Data: {fileID: 0} - m_RefCount: 11 m_Data: {fileID: 21300166, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 2 m_Data: {fileID: 21300168, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300226, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300240, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 0 + m_Data: {fileID: 0} + - m_RefCount: 0 + m_Data: {fileID: 0} - m_RefCount: 3 m_Data: {fileID: 21300252, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 3 m_Data: {fileID: 21300254, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 0 m_Data: {fileID: 0} + - m_RefCount: 1 + m_Data: {fileID: 21300240, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 1 + m_Data: {fileID: 21300226, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300190, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300188, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 2 + m_Data: {fileID: 21300140, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300186, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300184, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 2 - m_Data: {fileID: 21300140, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300262, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300264, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 1 - m_Data: {fileID: 21300022, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300266, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 - m_Data: {fileID: 21300296, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + m_Data: {fileID: 21300262, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300268, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 - m_Data: {fileID: 21300294, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + m_Data: {fileID: 21300022, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300128, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300094, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 - m_Data: {fileID: 21300154, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + m_Data: {fileID: 21300214, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300060, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 @@ -7871,11 +7914,11 @@ Tilemap: - m_RefCount: 1 m_Data: {fileID: 21300216, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 - m_Data: {fileID: 21300292, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + m_Data: {fileID: 21300212, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 - m_Data: {fileID: 21300298, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + m_Data: {fileID: 21300210, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 - m_Data: {fileID: 21300056, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + m_Data: {fileID: 21300154, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300016, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 @@ -7890,14 +7933,14 @@ Tilemap: m_Data: {fileID: 21300096, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300126, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 0 - m_Data: {fileID: 0} + - m_RefCount: 1 + m_Data: {fileID: 21300296, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300014, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 0 - m_Data: {fileID: 0} - - m_RefCount: 0 - m_Data: {fileID: 0} + - m_RefCount: 1 + m_Data: {fileID: 21300294, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 1 + m_Data: {fileID: 21300292, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300228, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 5 @@ -7916,10 +7959,10 @@ Tilemap: m_Data: {fileID: 21300304, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 4 m_Data: {fileID: 21300306, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - - m_RefCount: 0 - m_Data: {fileID: 0} - - m_RefCount: 0 - m_Data: {fileID: 0} + - m_RefCount: 1 + m_Data: {fileID: 21300298, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} + - m_RefCount: 1 + m_Data: {fileID: 21300056, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 m_Data: {fileID: 21300278, guid: 7bd001d3c24f50d439b118bc2ea92851, type: 3} - m_RefCount: 1 @@ -8103,7 +8146,7 @@ Transform: - {fileID: 464097149} - {fileID: 1353226865} m_Father: {fileID: 0} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1816421760 GameObject: diff --git a/Assets/Scenes/Level3.unity.meta b/Assets/_NOT FMOD/Scenes/Level3.unity.meta similarity index 100% rename from Assets/Scenes/Level3.unity.meta rename to Assets/_NOT FMOD/Scenes/Level3.unity.meta diff --git a/Assets/Scenes/Level4.unity b/Assets/_NOT FMOD/Scenes/Level4.unity similarity index 99% rename from Assets/Scenes/Level4.unity rename to Assets/_NOT FMOD/Scenes/Level4.unity index 9dfe966..74ab8a7 100644 --- a/Assets/Scenes/Level4.unity +++ b/Assets/_NOT FMOD/Scenes/Level4.unity @@ -55322,9 +55322,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -56087,7 +56084,7 @@ Prefab: - target: {fileID: 20360168326623688, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} propertyPath: orthographic size - value: 2.0507812 + value: 1.9335938 objectReference: {fileID: 0} - target: {fileID: 114897319026750266, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} @@ -56097,6 +56094,23 @@ Prefab: m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} m_IsPrefabAsset: 0 +--- !u!1 &1804778038 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1752414260833948, guid: bd61e13e3fc85584eaa3bf923db967e3, + type: 2} + m_PrefabInternal: {fileID: 1804778037} +--- !u!114 &1804778039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1804778038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86c6556701af9e04380698b89f691b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + ListenerNumber: 0 --- !u!1 &1829757736 GameObject: m_ObjectHideFlags: 0 @@ -56311,9 +56325,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: diff --git a/Assets/Scenes/Level4.unity.meta b/Assets/_NOT FMOD/Scenes/Level4.unity.meta similarity index 100% rename from Assets/Scenes/Level4.unity.meta rename to Assets/_NOT FMOD/Scenes/Level4.unity.meta diff --git a/Assets/Scenes/Level5.unity b/Assets/_NOT FMOD/Scenes/Level5.unity similarity index 100% rename from Assets/Scenes/Level5.unity rename to Assets/_NOT FMOD/Scenes/Level5.unity diff --git a/Assets/Scenes/Level5.unity.meta b/Assets/_NOT FMOD/Scenes/Level5.unity.meta similarity index 100% rename from Assets/Scenes/Level5.unity.meta rename to Assets/_NOT FMOD/Scenes/Level5.unity.meta diff --git a/Assets/Scenes/Level6.unity b/Assets/_NOT FMOD/Scenes/Level6.unity similarity index 99% rename from Assets/Scenes/Level6.unity rename to Assets/_NOT FMOD/Scenes/Level6.unity index b3e9e95..a76eeeb 100644 --- a/Assets/Scenes/Level6.unity +++ b/Assets/_NOT FMOD/Scenes/Level6.unity @@ -26883,9 +26883,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -27087,7 +27084,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &130606254 Animator: serializedVersion: 3 @@ -27756,9 +27752,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -27938,7 +27931,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &154427478 Animator: serializedVersion: 3 @@ -34020,8 +34012,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &191737784 MonoBehaviour: @@ -44893,8 +44883,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &236099677 MonoBehaviour: @@ -45334,9 +45322,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -45516,7 +45501,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &247435109 Animator: serializedVersion: 3 @@ -45800,8 +45784,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 0 --- !u!82 &255256100 AudioSource: @@ -51216,9 +51198,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -51398,7 +51377,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &281765034 Animator: serializedVersion: 3 @@ -56814,9 +56792,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -57040,7 +57015,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &313313311 Animator: serializedVersion: 3 @@ -62230,8 +62204,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &335470965 MonoBehaviour: @@ -64230,9 +64202,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 0 InitiallyPressed: 0 EventsOnPress: @@ -64412,7 +64381,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &385771963 Animator: serializedVersion: 3 @@ -78045,9 +78013,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -78227,7 +78192,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &494260491 Animator: serializedVersion: 3 @@ -79194,9 +79158,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -79376,7 +79337,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &529643110 Animator: serializedVersion: 3 @@ -79807,8 +79767,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &536678009 MonoBehaviour: @@ -86396,9 +86354,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -86600,7 +86555,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &574053091 Animator: serializedVersion: 3 @@ -91854,9 +91808,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -92036,7 +91987,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &585426536 Animator: serializedVersion: 3 @@ -95924,8 +95874,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &697034409 AudioSource: @@ -106343,9 +106291,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -106503,7 +106448,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &727459509 Animator: serializedVersion: 3 @@ -113308,9 +113252,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -113534,7 +113475,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &797851227 Animator: serializedVersion: 3 @@ -123813,7 +123753,6 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ProgressIndicator: {fileID: 0} --- !u!58 &838732626 CircleCollider2D: m_ObjectHideFlags: 0 @@ -124119,8 +124058,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &842381267 MonoBehaviour: @@ -124919,8 +124856,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &863402876 MonoBehaviour: @@ -130575,8 +130510,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 0 --- !u!82 &892756536 AudioSource: @@ -147779,9 +147712,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -148005,7 +147935,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &987069156 Animator: serializedVersion: 3 @@ -148135,9 +148064,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -148317,7 +148243,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &991239230 Animator: serializedVersion: 3 @@ -165792,9 +165717,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -166018,7 +165940,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &1121579189 Animator: serializedVersion: 3 @@ -168408,8 +168329,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &1184722696 MonoBehaviour: @@ -168701,8 +168620,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &1192413753 AudioSource: @@ -190508,8 +190425,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 0 --- !u!82 &1286917267 AudioSource: @@ -190694,8 +190609,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 0 --- !u!82 &1287515708 AudioSource: @@ -205701,9 +205614,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -205883,7 +205793,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &1332799952 Animator: serializedVersion: 3 @@ -220231,8 +220140,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &1359336012 MonoBehaviour: @@ -220450,6 +220357,11 @@ MonoBehaviour: InitiallyFilled: 1 Consumption: 0.04 MaxRadius: 15 + EventsOnEmpty: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null m_safeDome: {fileID: 777957821} --- !u!95 &1364719678 Animator: @@ -225877,8 +225789,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &1388829623 AudioSource: @@ -226846,7 +226756,6 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ProgressIndicator: {fileID: 0} --- !u!58 &1420594337 CircleCollider2D: m_ObjectHideFlags: 0 @@ -236961,6 +236870,11 @@ MonoBehaviour: InitiallyFilled: 1 Consumption: 0.03 MaxRadius: 18 + EventsOnEmpty: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null m_safeDome: {fileID: 221362559} --- !u!4 &1454965111 Transform: @@ -237633,8 +237547,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &1466379221 MonoBehaviour: @@ -259770,7 +259682,6 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ProgressIndicator: {fileID: 0} --- !u!58 &1564906090 CircleCollider2D: m_ObjectHideFlags: 0 @@ -260667,9 +260578,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 0 InitiallyPressed: 0 EventsOnPress: @@ -260686,6 +260594,18 @@ MonoBehaviour: m_StringArgument: Outro m_BoolArgument: 0 m_CallState: 2 + - m_Target: {fileID: 114164511446869826, guid: 31925c500bc22574aa0517ca9385de2b, + type: 2} + m_MethodName: MusicStart + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null EventsOnRelease: @@ -260838,7 +260758,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &1577744549 Animator: serializedVersion: 3 @@ -276828,9 +276747,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -276988,7 +276904,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &1626976364 Animator: serializedVersion: 3 @@ -281240,8 +281155,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 0 --- !u!82 &1719720221 AudioSource: @@ -308921,7 +308834,6 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ProgressIndicator: {fileID: 0} --- !u!95 &1890700449 Animator: serializedVersion: 3 @@ -324120,7 +324032,6 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - ProgressIndicator: {fileID: 0} --- !u!58 &1926986763 CircleCollider2D: m_ObjectHideFlags: 0 @@ -324535,9 +324446,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 646c5997857d1244384f1333f578e950, type: 3} m_Name: m_EditorClassIdentifier: - DeactivatedSound: {fileID: 8300000, guid: 6d454ee17d62b104cac75d266cf28e1d, type: 3} - PressSound: {fileID: 8300000, guid: f1ce7be9937d5ea47ab2acbe07515c6c, type: 3} - ReleaseSound: {fileID: 8300000, guid: f154a80ec052e1c40836a4e359fee309, type: 3} Mode: 1 InitiallyPressed: 0 EventsOnPress: @@ -324706,7 +324614,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 91bd6a37ca5b47e4c8b6685e1053276c, type: 3} m_Name: m_EditorClassIdentifier: - InteractableObject: {fileID: 0} --- !u!95 &1934649011 Animator: serializedVersion: 3 @@ -336855,8 +336762,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &2027894097 AudioSource: @@ -351391,8 +351296,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &2050906810 MonoBehaviour: @@ -351741,8 +351644,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &2062361616 AudioSource: @@ -352308,8 +352209,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!114 &2072239366 MonoBehaviour: @@ -352662,9 +352561,31 @@ Prefab: propertyPath: target value: objectReference: {fileID: 20864030} + - target: {fileID: 20360168326623688, guid: bd61e13e3fc85584eaa3bf923db967e3, + type: 2} + propertyPath: orthographic size + value: 1.9335938 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: bd61e13e3fc85584eaa3bf923db967e3, type: 2} m_IsPrefabAsset: 0 +--- !u!1 &2082152387 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1752414260833948, guid: bd61e13e3fc85584eaa3bf923db967e3, + type: 2} + m_PrefabInternal: {fileID: 2082152386} +--- !u!114 &2082152388 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2082152387} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86c6556701af9e04380698b89f691b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + ListenerNumber: 0 --- !u!1 &2083872055 GameObject: m_ObjectHideFlags: 0 @@ -353958,8 +353879,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: fabeab3a47a1b8d45b1a7a3a1383fff9, type: 3} m_Name: m_EditorClassIdentifier: - OpeningSound: {fileID: 8300000, guid: 17f08a4c7bbffbf4b8812357108f9b0b, type: 3} - ClosingSound: {fileID: 8300000, guid: c8d665aa9d0432245829e6fb78771420, type: 3} InitiallyClosed: 1 --- !u!82 &2109450077 AudioSource: diff --git a/Assets/Scenes/Level6.unity.meta b/Assets/_NOT FMOD/Scenes/Level6.unity.meta similarity index 100% rename from Assets/Scenes/Level6.unity.meta rename to Assets/_NOT FMOD/Scenes/Level6.unity.meta diff --git a/Assets/Scenes/Outro.unity b/Assets/_NOT FMOD/Scenes/Outro.unity similarity index 100% rename from Assets/Scenes/Outro.unity rename to Assets/_NOT FMOD/Scenes/Outro.unity diff --git a/Assets/Scenes/Outro.unity.meta b/Assets/_NOT FMOD/Scenes/Outro.unity.meta similarity index 100% rename from Assets/Scenes/Outro.unity.meta rename to Assets/_NOT FMOD/Scenes/Outro.unity.meta diff --git a/Assets/Scenes/Test.unity b/Assets/_NOT FMOD/Scenes/Test.unity similarity index 100% rename from Assets/Scenes/Test.unity rename to Assets/_NOT FMOD/Scenes/Test.unity diff --git a/Assets/Scenes/Test.unity.meta b/Assets/_NOT FMOD/Scenes/Test.unity.meta similarity index 100% rename from Assets/Scenes/Test.unity.meta rename to Assets/_NOT FMOD/Scenes/Test.unity.meta diff --git a/Assets/_NOT FMOD/Scripts.meta b/Assets/_NOT FMOD/Scripts.meta new file mode 100644 index 0000000..6501630 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e8932c60a1d82fc48a0cc2ff4ef55390 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_NOT FMOD/Scripts/Audio.meta b/Assets/_NOT FMOD/Scripts/Audio.meta new file mode 100644 index 0000000..eb8b416 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 27befdf4b19dccd45bba3044c298ab43 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_NOT FMOD/Scripts/Audio/AudioManager.cs b/Assets/_NOT FMOD/Scripts/Audio/AudioManager.cs new file mode 100644 index 0000000..1820751 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Audio/AudioManager.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AudioManager : MonoBehaviour { + public static AudioManager instance = null; + + private FMOD.Studio.EventInstance musicIntro; + private FMOD.Studio.EventInstance musicThemeOne; + private FMOD.Studio.EventInstance musicThemeTwo; + + + void Awake() + { + if (instance == null) + { + instance = this; + DontDestroyOnLoad(gameObject); + } + else if (instance != this) + { + Destroy(this.gameObject); + return; + } + } + + void Start() + { + MusicStart(); + } + + public void MusicStart() + { + MusicStop(); + FMOD.Studio.PLAYBACK_STATE _musicIntro; + musicIntro.getPlaybackState(out _musicIntro); + if (_musicIntro != FMOD.Studio.PLAYBACK_STATE.PLAYING) + { + musicIntro = FMODUnity.RuntimeManager.CreateInstance(FMODPaths.MUSIC_INTRO); + musicIntro.start(); + } + } + + public void MusicOne() + { + MusicStop(); + musicThemeOne = FMODUnity.RuntimeManager.CreateInstance(FMODPaths.MUSIC_MAIN_THEME); + musicThemeOne.start(); + } + + public void MusicTwo() + { + MusicStop(); + musicThemeTwo = FMODUnity.RuntimeManager.CreateInstance(FMODPaths.MUSIC_SECOND_THEME); + musicThemeTwo.start(); + } + + public void MusicStop() + { + + FMOD.Studio.Bus musicBus = FMODUnity.RuntimeManager.GetBus("bus:/music"); + musicBus.stopAllEvents(FMOD.Studio.STOP_MODE.ALLOWFADEOUT); + } + +} diff --git a/Assets/_NOT FMOD/Scripts/Audio/AudioManager.cs.meta b/Assets/_NOT FMOD/Scripts/Audio/AudioManager.cs.meta new file mode 100644 index 0000000..c3c3977 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Audio/AudioManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e5796be49fdf154ca22e459afff9737 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_NOT FMOD/Scripts/Audio/FMODPaths.cs b/Assets/_NOT FMOD/Scripts/Audio/FMODPaths.cs new file mode 100644 index 0000000..cfeccd3 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Audio/FMODPaths.cs @@ -0,0 +1,22 @@ +public static class FMODPaths +{ + // EVENTS + + // player + public static readonly string COUGH = "event:/player/cough"; + + // game + public static readonly string DOOR_OPEN = "event:/game/door_open"; + public static readonly string DOOR_CLOSED = "event:/game/door_closed"; + public static readonly string GENERATOR_SFX = "event:/game/generator"; + public static readonly string BUTTON_PRESSED = "event:/game/button_pressed"; + public static readonly string BUTTON_RELEASED = "event:/game/button_released"; + public static readonly string BUTTON_DEACTIVATED = "event:/game/button_deactivated"; + + // music + public static readonly string MUSIC_INTRO = "event:/music/intro"; + public static readonly string MUSIC_MAIN_THEME = "event:/music/main_theme"; + public static readonly string MUSIC_SECOND_THEME = "event:/music/second_theme"; + +} + \ No newline at end of file diff --git a/Assets/_NOT FMOD/Scripts/Audio/FMODPaths.cs.meta b/Assets/_NOT FMOD/Scripts/Audio/FMODPaths.cs.meta new file mode 100644 index 0000000..445e4de --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Audio/FMODPaths.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62b43d8ec3ed7f84896740e1c38d7140 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_NOT FMOD/Scripts/Audio/GeneratorSFX.cs b/Assets/_NOT FMOD/Scripts/Audio/GeneratorSFX.cs new file mode 100644 index 0000000..9693b02 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Audio/GeneratorSFX.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class GeneratorSFX : MonoBehaviour { + + private FMOD.Studio.EventInstance generatorSFX; + + + void OnEnable () + { + generatorSFX = FMODUnity.RuntimeManager.CreateInstance(FMODPaths.GENERATOR_SFX); + FMODUnity.RuntimeManager.AttachInstanceToGameObject(generatorSFX, transform.parent, GetComponent()); + generatorSFX.start(); + } + + void OnDisable () + { + generatorSFX.stop(FMOD.Studio.STOP_MODE.ALLOWFADEOUT); + generatorSFX.release(); + } +} diff --git a/Assets/_NOT FMOD/Scripts/Audio/GeneratorSFX.cs.meta b/Assets/_NOT FMOD/Scripts/Audio/GeneratorSFX.cs.meta new file mode 100644 index 0000000..09fceaa --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Audio/GeneratorSFX.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7acbf6377a5958a41a7397db86e14eb0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_NOT FMOD/Scripts/Camera.meta b/Assets/_NOT FMOD/Scripts/Camera.meta new file mode 100644 index 0000000..e1bebac --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c0ed122487f2a1438559e6212bc2b39 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/DeadzoneCamera.cs b/Assets/_NOT FMOD/Scripts/Camera/DeadzoneCamera.cs similarity index 100% rename from Assets/Scripts/Camera/DeadzoneCamera.cs rename to Assets/_NOT FMOD/Scripts/Camera/DeadzoneCamera.cs diff --git a/Assets/Scripts/Camera/DeadzoneCamera.cs.meta b/Assets/_NOT FMOD/Scripts/Camera/DeadzoneCamera.cs.meta similarity index 100% rename from Assets/Scripts/Camera/DeadzoneCamera.cs.meta rename to Assets/_NOT FMOD/Scripts/Camera/DeadzoneCamera.cs.meta diff --git a/Assets/Scripts/Camera/MusicPlayer.cs b/Assets/_NOT FMOD/Scripts/Camera/MusicPlayer.cs similarity index 100% rename from Assets/Scripts/Camera/MusicPlayer.cs rename to Assets/_NOT FMOD/Scripts/Camera/MusicPlayer.cs diff --git a/Assets/Scripts/Camera/MusicPlayer.cs.meta b/Assets/_NOT FMOD/Scripts/Camera/MusicPlayer.cs.meta similarity index 100% rename from Assets/Scripts/Camera/MusicPlayer.cs.meta rename to Assets/_NOT FMOD/Scripts/Camera/MusicPlayer.cs.meta diff --git a/Assets/Scripts/Camera/PerfectPixel.cs b/Assets/_NOT FMOD/Scripts/Camera/PerfectPixel.cs similarity index 100% rename from Assets/Scripts/Camera/PerfectPixel.cs rename to Assets/_NOT FMOD/Scripts/Camera/PerfectPixel.cs diff --git a/Assets/Scripts/Camera/PerfectPixel.cs.meta b/Assets/_NOT FMOD/Scripts/Camera/PerfectPixel.cs.meta similarity index 100% rename from Assets/Scripts/Camera/PerfectPixel.cs.meta rename to Assets/_NOT FMOD/Scripts/Camera/PerfectPixel.cs.meta diff --git a/Assets/_NOT FMOD/Scripts/GUI.meta b/Assets/_NOT FMOD/Scripts/GUI.meta new file mode 100644 index 0000000..f4105a5 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/GUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fa7c48359ca64b47b79ac845a6b68f4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GUI/DamageOverlay.cs b/Assets/_NOT FMOD/Scripts/GUI/DamageOverlay.cs similarity index 100% rename from Assets/Scripts/GUI/DamageOverlay.cs rename to Assets/_NOT FMOD/Scripts/GUI/DamageOverlay.cs diff --git a/Assets/Scripts/GUI/DamageOverlay.cs.meta b/Assets/_NOT FMOD/Scripts/GUI/DamageOverlay.cs.meta similarity index 100% rename from Assets/Scripts/GUI/DamageOverlay.cs.meta rename to Assets/_NOT FMOD/Scripts/GUI/DamageOverlay.cs.meta diff --git a/Assets/Scripts/GUI/GameInterface.cs b/Assets/_NOT FMOD/Scripts/GUI/GameInterface.cs similarity index 100% rename from Assets/Scripts/GUI/GameInterface.cs rename to Assets/_NOT FMOD/Scripts/GUI/GameInterface.cs diff --git a/Assets/Scripts/GUI/GameInterface.cs.meta b/Assets/_NOT FMOD/Scripts/GUI/GameInterface.cs.meta similarity index 100% rename from Assets/Scripts/GUI/GameInterface.cs.meta rename to Assets/_NOT FMOD/Scripts/GUI/GameInterface.cs.meta diff --git a/Assets/Scripts/GUI/HealthBar.cs b/Assets/_NOT FMOD/Scripts/GUI/HealthBar.cs similarity index 100% rename from Assets/Scripts/GUI/HealthBar.cs rename to Assets/_NOT FMOD/Scripts/GUI/HealthBar.cs diff --git a/Assets/Scripts/GUI/HealthBar.cs.meta b/Assets/_NOT FMOD/Scripts/GUI/HealthBar.cs.meta similarity index 100% rename from Assets/Scripts/GUI/HealthBar.cs.meta rename to Assets/_NOT FMOD/Scripts/GUI/HealthBar.cs.meta diff --git a/Assets/Scripts/GUI/ProgressBar.cs b/Assets/_NOT FMOD/Scripts/GUI/ProgressBar.cs similarity index 100% rename from Assets/Scripts/GUI/ProgressBar.cs rename to Assets/_NOT FMOD/Scripts/GUI/ProgressBar.cs diff --git a/Assets/Scripts/GUI/ProgressBar.cs.meta b/Assets/_NOT FMOD/Scripts/GUI/ProgressBar.cs.meta similarity index 100% rename from Assets/Scripts/GUI/ProgressBar.cs.meta rename to Assets/_NOT FMOD/Scripts/GUI/ProgressBar.cs.meta diff --git a/Assets/_NOT FMOD/Scripts/Generator.meta b/Assets/_NOT FMOD/Scripts/Generator.meta new file mode 100644 index 0000000..446e151 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Generator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02b490e5b4e4b0f48bf7712911799453 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Generator/DamagingArea.cs b/Assets/_NOT FMOD/Scripts/Generator/DamagingArea.cs similarity index 100% rename from Assets/Scripts/Generator/DamagingArea.cs rename to Assets/_NOT FMOD/Scripts/Generator/DamagingArea.cs diff --git a/Assets/Scripts/Generator/DamagingArea.cs.meta b/Assets/_NOT FMOD/Scripts/Generator/DamagingArea.cs.meta similarity index 100% rename from Assets/Scripts/Generator/DamagingArea.cs.meta rename to Assets/_NOT FMOD/Scripts/Generator/DamagingArea.cs.meta diff --git a/Assets/Scripts/Generator/Generator.cs b/Assets/_NOT FMOD/Scripts/Generator/Generator.cs similarity index 99% rename from Assets/Scripts/Generator/Generator.cs rename to Assets/_NOT FMOD/Scripts/Generator/Generator.cs index ca92d4a..f96a8b1 100644 --- a/Assets/Scripts/Generator/Generator.cs +++ b/Assets/_NOT FMOD/Scripts/Generator/Generator.cs @@ -62,7 +62,7 @@ public bool IsActicated if (m_animator == null) return; m_animator.SetBool("Activated", m_isActivated); - m_animator.SetFloat("Speed", m_isActivated ? 1.0f : 0.0f); + m_animator.SetFloat("Speed", m_isActivated ? 1.0f : 0.0f); } } private bool m_isActivated; @@ -91,6 +91,7 @@ public float Fullness public SafeDome m_safeDome; + void Start() { m_animator = GetComponent(); @@ -132,4 +133,5 @@ public void UpdateDomeRadius() float s = MaxRadius * (2.0f - 2.0f / (Fullness + 1)); m_safeDome.transform.localScale = new Vector3(s, s, 0.0f); } + } diff --git a/Assets/Scripts/Generator/Generator.cs.meta b/Assets/_NOT FMOD/Scripts/Generator/Generator.cs.meta similarity index 100% rename from Assets/Scripts/Generator/Generator.cs.meta rename to Assets/_NOT FMOD/Scripts/Generator/Generator.cs.meta diff --git a/Assets/Scripts/Generator/SafeDome.cs b/Assets/_NOT FMOD/Scripts/Generator/SafeDome.cs similarity index 100% rename from Assets/Scripts/Generator/SafeDome.cs rename to Assets/_NOT FMOD/Scripts/Generator/SafeDome.cs diff --git a/Assets/Scripts/Generator/SafeDome.cs.meta b/Assets/_NOT FMOD/Scripts/Generator/SafeDome.cs.meta similarity index 100% rename from Assets/Scripts/Generator/SafeDome.cs.meta rename to Assets/_NOT FMOD/Scripts/Generator/SafeDome.cs.meta diff --git a/Assets/_NOT FMOD/Scripts/Interactable.meta b/Assets/_NOT FMOD/Scripts/Interactable.meta new file mode 100644 index 0000000..2b32c11 --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Interactable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cf08264647860343a466ecc8418b9c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Interactable/Button.cs b/Assets/_NOT FMOD/Scripts/Interactable/Button.cs similarity index 85% rename from Assets/Scripts/Interactable/Button.cs rename to Assets/_NOT FMOD/Scripts/Interactable/Button.cs index 2c5c5ff..d22760f 100644 --- a/Assets/Scripts/Interactable/Button.cs +++ b/Assets/_NOT FMOD/Scripts/Interactable/Button.cs @@ -16,7 +16,7 @@ public override void OnInspectorGUI() DrawDefaultInspector(); Button button = (Button)target; - +/* m_showSoundSelection = EditorGUILayout.Foldout(m_showSoundSelection, "Sounds"); if (m_showSoundSelection) { @@ -24,7 +24,7 @@ public override void OnInspectorGUI() button.PressSound = EditorGUILayout.ObjectField("Pressed", button.PressSound, typeof(AudioClip), true) as AudioClip; button.ReleaseSound = EditorGUILayout.ObjectField("Released", button.ReleaseSound, typeof(AudioClip), true) as AudioClip; } - +*/ ////////// if (button.Mode == ButtonMode.Push) @@ -69,12 +69,6 @@ public enum ButtonMode public class Button : Interactable { - [HideInInspector] - public AudioClip DeactivatedSound; - [HideInInspector] - public AudioClip PressSound; - [HideInInspector] - public AudioClip ReleaseSound; [SerializeField] public ButtonMode Mode = ButtonMode.Push; @@ -85,7 +79,6 @@ public class Button : Interactable public UnityEvent EventsOnRelease = null; private Animator m_animator; - private AudioSource m_audioSource; public bool IsActivated { @@ -115,12 +108,9 @@ public bool IsPressed if (m_isPressed != value) { m_isPressed = value; - - if (m_audioSource != null) - { - if (value && PressSound != null) m_audioSource.PlayOneShot(PressSound); - if (!value && ReleaseSound != null) m_audioSource.PlayOneShot(ReleaseSound); - } + + if (value) FMODUnity.RuntimeManager.PlayOneShotAttached(FMODPaths.BUTTON_PRESSED, this.gameObject); + if (!value) FMODUnity.RuntimeManager.PlayOneShotAttached(FMODPaths.BUTTON_RELEASED, this.gameObject); m_animator.SetBool("Pressed", value); } @@ -131,7 +121,6 @@ public bool IsPressed void Start() { m_animator = GetComponent(); - m_audioSource = GetComponent(); IsActivated = true; @@ -162,11 +151,8 @@ public void Press() if (!IsPressed && EventsOnRelease != null) EventsOnRelease.Invoke(); } else - { - if (m_audioSource != null) - { - m_audioSource.PlayOneShot(DeactivatedSound); - } + { + FMODUnity.RuntimeManager.PlayOneShotAttached(FMODPaths.BUTTON_DEACTIVATED, this.gameObject); } } diff --git a/Assets/Scripts/Interactable/Button.cs.meta b/Assets/_NOT FMOD/Scripts/Interactable/Button.cs.meta similarity index 100% rename from Assets/Scripts/Interactable/Button.cs.meta rename to Assets/_NOT FMOD/Scripts/Interactable/Button.cs.meta diff --git a/Assets/Scripts/Interactable/Door.cs b/Assets/_NOT FMOD/Scripts/Interactable/Door.cs similarity index 72% rename from Assets/Scripts/Interactable/Door.cs rename to Assets/_NOT FMOD/Scripts/Interactable/Door.cs index dfc8970..789ffe3 100644 --- a/Assets/Scripts/Interactable/Door.cs +++ b/Assets/_NOT FMOD/Scripts/Interactable/Door.cs @@ -26,8 +26,6 @@ public override void OnInspectorGUI() [ExecuteInEditMode] public class Door : MonoBehaviour { - public AudioClip OpeningSound; - public AudioClip ClosingSound; [Header("Initial values")] public bool InitiallyClosed = true; @@ -41,14 +39,8 @@ public bool IsClosed set { m_isClosed = value; - m_collision.enabled = value; - - if (m_audioSource != null) - { - if (value && OpeningSound != null) m_audioSource.PlayOneShot(OpeningSound); - if (!value && ClosingSound != null) m_audioSource.PlayOneShot(ClosingSound); - } - + m_collision.enabled = value; + if (m_animators == null || m_isActivated == false) return; foreach (Animator animator in m_animators) @@ -70,15 +62,16 @@ public bool IsActivated private Collider2D m_collision; private Animator[] m_animators; - private AudioSource m_audioSource; + + private FMOD.Studio.EventInstance openDoor; + private FMOD.Studio.EventInstance closeDoor; + void Start() { m_collision = GetComponent(); m_animators = GetComponentsInChildren(); - m_audioSource = GetComponent(); - if (m_audioSource) m_audioSource.Stop(); m_isActivated = true; IsClosed = InitiallyClosed; @@ -91,10 +84,18 @@ void Start() public void Open() { IsClosed = false; + openDoor = FMODUnity.RuntimeManager.CreateInstance(FMODPaths.DOOR_OPEN); + FMODUnity.RuntimeManager.AttachInstanceToGameObject(openDoor, GetComponent(), GetComponent()); + openDoor.start(); + openDoor.release(); } public void Close() { IsClosed = true; + closeDoor = FMODUnity.RuntimeManager.CreateInstance(FMODPaths.DOOR_CLOSED); + FMODUnity.RuntimeManager.AttachInstanceToGameObject(closeDoor, GetComponent(), GetComponent()); + closeDoor.start(); + closeDoor.release(); } } diff --git a/Assets/Scripts/Interactable/Door.cs.meta b/Assets/_NOT FMOD/Scripts/Interactable/Door.cs.meta similarity index 100% rename from Assets/Scripts/Interactable/Door.cs.meta rename to Assets/_NOT FMOD/Scripts/Interactable/Door.cs.meta diff --git a/Assets/Scripts/Interactable/Interactable.cs b/Assets/_NOT FMOD/Scripts/Interactable/Interactable.cs similarity index 100% rename from Assets/Scripts/Interactable/Interactable.cs rename to Assets/_NOT FMOD/Scripts/Interactable/Interactable.cs diff --git a/Assets/Scripts/Interactable/Interactable.cs.meta b/Assets/_NOT FMOD/Scripts/Interactable/Interactable.cs.meta similarity index 100% rename from Assets/Scripts/Interactable/Interactable.cs.meta rename to Assets/_NOT FMOD/Scripts/Interactable/Interactable.cs.meta diff --git a/Assets/Scripts/Interactable/InteractableTrigger.cs b/Assets/_NOT FMOD/Scripts/Interactable/InteractableTrigger.cs similarity index 100% rename from Assets/Scripts/Interactable/InteractableTrigger.cs rename to Assets/_NOT FMOD/Scripts/Interactable/InteractableTrigger.cs diff --git a/Assets/Scripts/Interactable/InteractableTrigger.cs.meta b/Assets/_NOT FMOD/Scripts/Interactable/InteractableTrigger.cs.meta similarity index 100% rename from Assets/Scripts/Interactable/InteractableTrigger.cs.meta rename to Assets/_NOT FMOD/Scripts/Interactable/InteractableTrigger.cs.meta diff --git a/Assets/Scripts/Interactable/Switch.cs b/Assets/_NOT FMOD/Scripts/Interactable/Switch.cs similarity index 100% rename from Assets/Scripts/Interactable/Switch.cs rename to Assets/_NOT FMOD/Scripts/Interactable/Switch.cs diff --git a/Assets/Scripts/Interactable/Switch.cs.meta b/Assets/_NOT FMOD/Scripts/Interactable/Switch.cs.meta similarity index 100% rename from Assets/Scripts/Interactable/Switch.cs.meta rename to Assets/_NOT FMOD/Scripts/Interactable/Switch.cs.meta diff --git a/Assets/Scripts/Interactable/Terminal.cs b/Assets/_NOT FMOD/Scripts/Interactable/Terminal.cs similarity index 100% rename from Assets/Scripts/Interactable/Terminal.cs rename to Assets/_NOT FMOD/Scripts/Interactable/Terminal.cs diff --git a/Assets/Scripts/Interactable/Terminal.cs.meta b/Assets/_NOT FMOD/Scripts/Interactable/Terminal.cs.meta similarity index 100% rename from Assets/Scripts/Interactable/Terminal.cs.meta rename to Assets/_NOT FMOD/Scripts/Interactable/Terminal.cs.meta diff --git a/Assets/_NOT FMOD/Scripts/Platform.meta b/Assets/_NOT FMOD/Scripts/Platform.meta new file mode 100644 index 0000000..983105d --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Platform.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a9d539f0d6bbfa54c9ceec46b40c938b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Platform/MovingPlatform.cs b/Assets/_NOT FMOD/Scripts/Platform/MovingPlatform.cs similarity index 100% rename from Assets/Scripts/Platform/MovingPlatform.cs rename to Assets/_NOT FMOD/Scripts/Platform/MovingPlatform.cs diff --git a/Assets/Scripts/Platform/MovingPlatform.cs.meta b/Assets/_NOT FMOD/Scripts/Platform/MovingPlatform.cs.meta similarity index 100% rename from Assets/Scripts/Platform/MovingPlatform.cs.meta rename to Assets/_NOT FMOD/Scripts/Platform/MovingPlatform.cs.meta diff --git a/Assets/_NOT FMOD/Scripts/Player.meta b/Assets/_NOT FMOD/Scripts/Player.meta new file mode 100644 index 0000000..b32b75f --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42efea3c665a8174fb565d588e2274c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PhysicsObject.cs b/Assets/_NOT FMOD/Scripts/Player/PhysicsObject.cs similarity index 100% rename from Assets/Scripts/Player/PhysicsObject.cs rename to Assets/_NOT FMOD/Scripts/Player/PhysicsObject.cs diff --git a/Assets/Scripts/Player/PhysicsObject.cs.meta b/Assets/_NOT FMOD/Scripts/Player/PhysicsObject.cs.meta similarity index 100% rename from Assets/Scripts/Player/PhysicsObject.cs.meta rename to Assets/_NOT FMOD/Scripts/Player/PhysicsObject.cs.meta diff --git a/Assets/Scripts/Player/PlatformerController.cs b/Assets/_NOT FMOD/Scripts/Player/PlatformerController.cs similarity index 100% rename from Assets/Scripts/Player/PlatformerController.cs rename to Assets/_NOT FMOD/Scripts/Player/PlatformerController.cs diff --git a/Assets/Scripts/Player/PlatformerController.cs.meta b/Assets/_NOT FMOD/Scripts/Player/PlatformerController.cs.meta similarity index 100% rename from Assets/Scripts/Player/PlatformerController.cs.meta rename to Assets/_NOT FMOD/Scripts/Player/PlatformerController.cs.meta diff --git a/Assets/Scripts/Player/Player.cs b/Assets/_NOT FMOD/Scripts/Player/Player.cs similarity index 86% rename from Assets/Scripts/Player/Player.cs rename to Assets/_NOT FMOD/Scripts/Player/Player.cs index 9efc787..b1eff17 100644 --- a/Assets/Scripts/Player/Player.cs +++ b/Assets/_NOT FMOD/Scripts/Player/Player.cs @@ -21,7 +21,6 @@ public override void OnInspectorGUI() public class Player : MonoBehaviour { - public AudioClip[] GettingDamageSounds; [HideInInspector] public SafeDome CurrentSafeZone = null; @@ -48,7 +47,6 @@ public bool IsDead [HideInInspector] public Interactable CurrentInteractable = null; - private AudioSource m_audioSource; private HealthBar m_healthBar; private DamageOverlay m_damageOverlay; @@ -58,7 +56,6 @@ public bool IsDead private void Start() { - m_audioSource = GetComponent(); m_healthBar = GameInterface.Instance.HealthBar; m_damageOverlay = GameInterface.Instance.DamageOverlay; @@ -113,10 +110,10 @@ public void Damage(float amount) { m_damageOverlay.TakeDamage(); } - - if (m_audioSource != null && GettingDamageSounds != null && GettingDamageSounds.Length > 0 && Random.Range(0, 100) < 50) + + if (Random.Range(0, 100) < 50) { - m_audioSource.PlayOneShot(GettingDamageSounds[Random.Range(0, GettingDamageSounds.Length)]); + FMODUnity.RuntimeManager.PlayOneShotAttached(FMODPaths.COUGH, this.gameObject); } } diff --git a/Assets/Scripts/Player/Player.cs.meta b/Assets/_NOT FMOD/Scripts/Player/Player.cs.meta similarity index 100% rename from Assets/Scripts/Player/Player.cs.meta rename to Assets/_NOT FMOD/Scripts/Player/Player.cs.meta diff --git a/Assets/_NOT FMOD/Scripts/Scenes.meta b/Assets/_NOT FMOD/Scripts/Scenes.meta new file mode 100644 index 0000000..ea9b21e --- /dev/null +++ b/Assets/_NOT FMOD/Scripts/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 130cee3a5aabf6247a354c7d56cbe185 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Scenes/Intro.cs b/Assets/_NOT FMOD/Scripts/Scenes/Intro.cs similarity index 94% rename from Assets/Scripts/Scenes/Intro.cs rename to Assets/_NOT FMOD/Scripts/Scenes/Intro.cs index 1feefcb..64c4a21 100644 --- a/Assets/Scripts/Scenes/Intro.cs +++ b/Assets/_NOT FMOD/Scripts/Scenes/Intro.cs @@ -29,7 +29,7 @@ void Update () void StartFirstLevel() { m_skipped = true; - MusicPlayer.Instance.StartMain(); + AudioManager.instance.MusicOne(); SceneManager.LoadScene(FirstLevelName); } } diff --git a/Assets/Scripts/Scenes/Intro.cs.meta b/Assets/_NOT FMOD/Scripts/Scenes/Intro.cs.meta similarity index 100% rename from Assets/Scripts/Scenes/Intro.cs.meta rename to Assets/_NOT FMOD/Scripts/Scenes/Intro.cs.meta diff --git a/Assets/Scripts/Scenes/Outro.cs b/Assets/_NOT FMOD/Scripts/Scenes/Outro.cs similarity index 100% rename from Assets/Scripts/Scenes/Outro.cs rename to Assets/_NOT FMOD/Scripts/Scenes/Outro.cs diff --git a/Assets/Scripts/Scenes/Outro.cs.meta b/Assets/_NOT FMOD/Scripts/Scenes/Outro.cs.meta similarity index 100% rename from Assets/Scripts/Scenes/Outro.cs.meta rename to Assets/_NOT FMOD/Scripts/Scenes/Outro.cs.meta diff --git a/Assets/Scripts/Scenes/SnapToGrid.cs b/Assets/_NOT FMOD/Scripts/Scenes/SnapToGrid.cs similarity index 100% rename from Assets/Scripts/Scenes/SnapToGrid.cs rename to Assets/_NOT FMOD/Scripts/Scenes/SnapToGrid.cs diff --git a/Assets/Scripts/Scenes/SnapToGrid.cs.meta b/Assets/_NOT FMOD/Scripts/Scenes/SnapToGrid.cs.meta similarity index 100% rename from Assets/Scripts/Scenes/SnapToGrid.cs.meta rename to Assets/_NOT FMOD/Scripts/Scenes/SnapToGrid.cs.meta diff --git a/Assets/Sounds.meta b/Assets/_NOT FMOD/Sounds.meta similarity index 77% rename from Assets/Sounds.meta rename to Assets/_NOT FMOD/Sounds.meta index 9ac014d..ac0ff1c 100644 --- a/Assets/Sounds.meta +++ b/Assets/_NOT FMOD/Sounds.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ed4e46e75ea713e428667c3c373a8c71 +guid: 9f188d3ed93a1244aa5f16c622284e4f folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Sounds/button_deactivated.mp3 b/Assets/_NOT FMOD/Sounds/button_deactivated.mp3 similarity index 100% rename from Assets/Sounds/button_deactivated.mp3 rename to Assets/_NOT FMOD/Sounds/button_deactivated.mp3 diff --git a/Assets/Sounds/button_deactivated.mp3.meta b/Assets/_NOT FMOD/Sounds/button_deactivated.mp3.meta similarity index 100% rename from Assets/Sounds/button_deactivated.mp3.meta rename to Assets/_NOT FMOD/Sounds/button_deactivated.mp3.meta diff --git a/Assets/Sounds/button_pressed.mp3 b/Assets/_NOT FMOD/Sounds/button_pressed.mp3 similarity index 100% rename from Assets/Sounds/button_pressed.mp3 rename to Assets/_NOT FMOD/Sounds/button_pressed.mp3 diff --git a/Assets/Sounds/button_pressed.mp3.meta b/Assets/_NOT FMOD/Sounds/button_pressed.mp3.meta similarity index 100% rename from Assets/Sounds/button_pressed.mp3.meta rename to Assets/_NOT FMOD/Sounds/button_pressed.mp3.meta diff --git a/Assets/Sounds/button_released.mp3 b/Assets/_NOT FMOD/Sounds/button_released.mp3 similarity index 100% rename from Assets/Sounds/button_released.mp3 rename to Assets/_NOT FMOD/Sounds/button_released.mp3 diff --git a/Assets/Sounds/button_released.mp3.meta b/Assets/_NOT FMOD/Sounds/button_released.mp3.meta similarity index 100% rename from Assets/Sounds/button_released.mp3.meta rename to Assets/_NOT FMOD/Sounds/button_released.mp3.meta diff --git a/Assets/Sounds/cough1.mp3 b/Assets/_NOT FMOD/Sounds/cough1.mp3 similarity index 100% rename from Assets/Sounds/cough1.mp3 rename to Assets/_NOT FMOD/Sounds/cough1.mp3 diff --git a/Assets/Sounds/cough1.mp3.meta b/Assets/_NOT FMOD/Sounds/cough1.mp3.meta similarity index 100% rename from Assets/Sounds/cough1.mp3.meta rename to Assets/_NOT FMOD/Sounds/cough1.mp3.meta diff --git a/Assets/Sounds/cough2.mp3 b/Assets/_NOT FMOD/Sounds/cough2.mp3 similarity index 100% rename from Assets/Sounds/cough2.mp3 rename to Assets/_NOT FMOD/Sounds/cough2.mp3 diff --git a/Assets/Sounds/cough2.mp3.meta b/Assets/_NOT FMOD/Sounds/cough2.mp3.meta similarity index 100% rename from Assets/Sounds/cough2.mp3.meta rename to Assets/_NOT FMOD/Sounds/cough2.mp3.meta diff --git a/Assets/Sounds/cough3.mp3 b/Assets/_NOT FMOD/Sounds/cough3.mp3 similarity index 100% rename from Assets/Sounds/cough3.mp3 rename to Assets/_NOT FMOD/Sounds/cough3.mp3 diff --git a/Assets/Sounds/cough3.mp3.meta b/Assets/_NOT FMOD/Sounds/cough3.mp3.meta similarity index 100% rename from Assets/Sounds/cough3.mp3.meta rename to Assets/_NOT FMOD/Sounds/cough3.mp3.meta diff --git a/Assets/Sounds/door_closed.mp3 b/Assets/_NOT FMOD/Sounds/door_closed.mp3 similarity index 100% rename from Assets/Sounds/door_closed.mp3 rename to Assets/_NOT FMOD/Sounds/door_closed.mp3 diff --git a/Assets/Sounds/door_closed.mp3.meta b/Assets/_NOT FMOD/Sounds/door_closed.mp3.meta similarity index 100% rename from Assets/Sounds/door_closed.mp3.meta rename to Assets/_NOT FMOD/Sounds/door_closed.mp3.meta diff --git a/Assets/Sounds/door_open.mp3 b/Assets/_NOT FMOD/Sounds/door_open.mp3 similarity index 100% rename from Assets/Sounds/door_open.mp3 rename to Assets/_NOT FMOD/Sounds/door_open.mp3 diff --git a/Assets/Sounds/door_open.mp3.meta b/Assets/_NOT FMOD/Sounds/door_open.mp3.meta similarity index 100% rename from Assets/Sounds/door_open.mp3.meta rename to Assets/_NOT FMOD/Sounds/door_open.mp3.meta diff --git a/Assets/Sounds/generator.mp3 b/Assets/_NOT FMOD/Sounds/generator.mp3 similarity index 100% rename from Assets/Sounds/generator.mp3 rename to Assets/_NOT FMOD/Sounds/generator.mp3 diff --git a/Assets/Sounds/generator.mp3.meta b/Assets/_NOT FMOD/Sounds/generator.mp3.meta similarity index 100% rename from Assets/Sounds/generator.mp3.meta rename to Assets/_NOT FMOD/Sounds/generator.mp3.meta diff --git a/Assets/Sprites.meta b/Assets/_NOT FMOD/Sprites.meta similarity index 100% rename from Assets/Sprites.meta rename to Assets/_NOT FMOD/Sprites.meta diff --git a/Assets/Sprites/Background.png b/Assets/_NOT FMOD/Sprites/Background.png similarity index 100% rename from Assets/Sprites/Background.png rename to Assets/_NOT FMOD/Sprites/Background.png diff --git a/Assets/Sprites/Background.png.meta b/Assets/_NOT FMOD/Sprites/Background.png.meta similarity index 100% rename from Assets/Sprites/Background.png.meta rename to Assets/_NOT FMOD/Sprites/Background.png.meta diff --git a/Assets/Sprites/DamageHud.png b/Assets/_NOT FMOD/Sprites/DamageHud.png similarity index 100% rename from Assets/Sprites/DamageHud.png rename to Assets/_NOT FMOD/Sprites/DamageHud.png diff --git a/Assets/Sprites/DamageHud.png.meta b/Assets/_NOT FMOD/Sprites/DamageHud.png.meta similarity index 100% rename from Assets/Sprites/DamageHud.png.meta rename to Assets/_NOT FMOD/Sprites/DamageHud.png.meta diff --git a/Assets/Sprites/Door_red_back.png b/Assets/_NOT FMOD/Sprites/Door_red_back.png similarity index 100% rename from Assets/Sprites/Door_red_back.png rename to Assets/_NOT FMOD/Sprites/Door_red_back.png diff --git a/Assets/Sprites/Door_red_back.png.meta b/Assets/_NOT FMOD/Sprites/Door_red_back.png.meta similarity index 100% rename from Assets/Sprites/Door_red_back.png.meta rename to Assets/_NOT FMOD/Sprites/Door_red_back.png.meta diff --git a/Assets/Sprites/Door_red_front.png b/Assets/_NOT FMOD/Sprites/Door_red_front.png similarity index 100% rename from Assets/Sprites/Door_red_front.png rename to Assets/_NOT FMOD/Sprites/Door_red_front.png diff --git a/Assets/Sprites/Door_red_front.png.meta b/Assets/_NOT FMOD/Sprites/Door_red_front.png.meta similarity index 100% rename from Assets/Sprites/Door_red_front.png.meta rename to Assets/_NOT FMOD/Sprites/Door_red_front.png.meta diff --git a/Assets/Sprites/Door_steel_back.png b/Assets/_NOT FMOD/Sprites/Door_steel_back.png similarity index 100% rename from Assets/Sprites/Door_steel_back.png rename to Assets/_NOT FMOD/Sprites/Door_steel_back.png diff --git a/Assets/Sprites/Door_steel_back.png.meta b/Assets/_NOT FMOD/Sprites/Door_steel_back.png.meta similarity index 100% rename from Assets/Sprites/Door_steel_back.png.meta rename to Assets/_NOT FMOD/Sprites/Door_steel_back.png.meta diff --git a/Assets/Sprites/Door_steel_front.png b/Assets/_NOT FMOD/Sprites/Door_steel_front.png similarity index 100% rename from Assets/Sprites/Door_steel_front.png rename to Assets/_NOT FMOD/Sprites/Door_steel_front.png diff --git a/Assets/Sprites/Door_steel_front.png.meta b/Assets/_NOT FMOD/Sprites/Door_steel_front.png.meta similarity index 100% rename from Assets/Sprites/Door_steel_front.png.meta rename to Assets/_NOT FMOD/Sprites/Door_steel_front.png.meta diff --git a/Assets/Sprites/Generator.png b/Assets/_NOT FMOD/Sprites/Generator.png similarity index 100% rename from Assets/Sprites/Generator.png rename to Assets/_NOT FMOD/Sprites/Generator.png diff --git a/Assets/Sprites/Generator.png.meta b/Assets/_NOT FMOD/Sprites/Generator.png.meta similarity index 100% rename from Assets/Sprites/Generator.png.meta rename to Assets/_NOT FMOD/Sprites/Generator.png.meta diff --git a/Assets/Sprites/GeneratorSmoke.png b/Assets/_NOT FMOD/Sprites/GeneratorSmoke.png similarity index 100% rename from Assets/Sprites/GeneratorSmoke.png rename to Assets/_NOT FMOD/Sprites/GeneratorSmoke.png diff --git a/Assets/Sprites/GeneratorSmoke.png.meta b/Assets/_NOT FMOD/Sprites/GeneratorSmoke.png.meta similarity index 100% rename from Assets/Sprites/GeneratorSmoke.png.meta rename to Assets/_NOT FMOD/Sprites/GeneratorSmoke.png.meta diff --git a/Assets/Sprites/GeneratorSmokeEdge.png b/Assets/_NOT FMOD/Sprites/GeneratorSmokeEdge.png similarity index 100% rename from Assets/Sprites/GeneratorSmokeEdge.png rename to Assets/_NOT FMOD/Sprites/GeneratorSmokeEdge.png diff --git a/Assets/Sprites/GeneratorSmokeEdge.png.meta b/Assets/_NOT FMOD/Sprites/GeneratorSmokeEdge.png.meta similarity index 100% rename from Assets/Sprites/GeneratorSmokeEdge.png.meta rename to Assets/_NOT FMOD/Sprites/GeneratorSmokeEdge.png.meta diff --git a/Assets/Sprites/HealthBar.png b/Assets/_NOT FMOD/Sprites/HealthBar.png similarity index 100% rename from Assets/Sprites/HealthBar.png rename to Assets/_NOT FMOD/Sprites/HealthBar.png diff --git a/Assets/Sprites/HealthBar.png.meta b/Assets/_NOT FMOD/Sprites/HealthBar.png.meta similarity index 100% rename from Assets/Sprites/HealthBar.png.meta rename to Assets/_NOT FMOD/Sprites/HealthBar.png.meta diff --git a/Assets/Sprites/Pipe.png b/Assets/_NOT FMOD/Sprites/Pipe.png similarity index 100% rename from Assets/Sprites/Pipe.png rename to Assets/_NOT FMOD/Sprites/Pipe.png diff --git a/Assets/Sprites/Pipe.png.meta b/Assets/_NOT FMOD/Sprites/Pipe.png.meta similarity index 100% rename from Assets/Sprites/Pipe.png.meta rename to Assets/_NOT FMOD/Sprites/Pipe.png.meta diff --git a/Assets/Sprites/ProgressBar.png b/Assets/_NOT FMOD/Sprites/ProgressBar.png similarity index 100% rename from Assets/Sprites/ProgressBar.png rename to Assets/_NOT FMOD/Sprites/ProgressBar.png diff --git a/Assets/Sprites/ProgressBar.png.meta b/Assets/_NOT FMOD/Sprites/ProgressBar.png.meta similarity index 100% rename from Assets/Sprites/ProgressBar.png.meta rename to Assets/_NOT FMOD/Sprites/ProgressBar.png.meta diff --git a/Assets/Sprites/RingMask.png b/Assets/_NOT FMOD/Sprites/RingMask.png similarity index 100% rename from Assets/Sprites/RingMask.png rename to Assets/_NOT FMOD/Sprites/RingMask.png diff --git a/Assets/Sprites/RingMask.png.meta b/Assets/_NOT FMOD/Sprites/RingMask.png.meta similarity index 100% rename from Assets/Sprites/RingMask.png.meta rename to Assets/_NOT FMOD/Sprites/RingMask.png.meta diff --git a/Assets/Sprites/Screen_1.png b/Assets/_NOT FMOD/Sprites/Screen_1.png similarity index 100% rename from Assets/Sprites/Screen_1.png rename to Assets/_NOT FMOD/Sprites/Screen_1.png diff --git a/Assets/Sprites/Screen_1.png.meta b/Assets/_NOT FMOD/Sprites/Screen_1.png.meta similarity index 100% rename from Assets/Sprites/Screen_1.png.meta rename to Assets/_NOT FMOD/Sprites/Screen_1.png.meta diff --git a/Assets/Sprites/Screen_2.png b/Assets/_NOT FMOD/Sprites/Screen_2.png similarity index 100% rename from Assets/Sprites/Screen_2.png rename to Assets/_NOT FMOD/Sprites/Screen_2.png diff --git a/Assets/Sprites/Screen_2.png.meta b/Assets/_NOT FMOD/Sprites/Screen_2.png.meta similarity index 100% rename from Assets/Sprites/Screen_2.png.meta rename to Assets/_NOT FMOD/Sprites/Screen_2.png.meta diff --git a/Assets/Sprites/Smoke.png b/Assets/_NOT FMOD/Sprites/Smoke.png similarity index 100% rename from Assets/Sprites/Smoke.png rename to Assets/_NOT FMOD/Sprites/Smoke.png diff --git a/Assets/Sprites/Smoke.png.meta b/Assets/_NOT FMOD/Sprites/Smoke.png.meta similarity index 100% rename from Assets/Sprites/Smoke.png.meta rename to Assets/_NOT FMOD/Sprites/Smoke.png.meta diff --git a/Assets/Sprites/Smoke_weak.png b/Assets/_NOT FMOD/Sprites/Smoke_weak.png similarity index 100% rename from Assets/Sprites/Smoke_weak.png rename to Assets/_NOT FMOD/Sprites/Smoke_weak.png diff --git a/Assets/Sprites/Smoke_weak.png.meta b/Assets/_NOT FMOD/Sprites/Smoke_weak.png.meta similarity index 100% rename from Assets/Sprites/Smoke_weak.png.meta rename to Assets/_NOT FMOD/Sprites/Smoke_weak.png.meta diff --git a/Assets/Sprites/SphereMask.png b/Assets/_NOT FMOD/Sprites/SphereMask.png similarity index 100% rename from Assets/Sprites/SphereMask.png rename to Assets/_NOT FMOD/Sprites/SphereMask.png diff --git a/Assets/Sprites/SphereMask.png.meta b/Assets/_NOT FMOD/Sprites/SphereMask.png.meta similarity index 100% rename from Assets/Sprites/SphereMask.png.meta rename to Assets/_NOT FMOD/Sprites/SphereMask.png.meta diff --git a/Assets/Sprites/SpriteSheet.png b/Assets/_NOT FMOD/Sprites/SpriteSheet.png similarity index 100% rename from Assets/Sprites/SpriteSheet.png rename to Assets/_NOT FMOD/Sprites/SpriteSheet.png diff --git a/Assets/Sprites/SpriteSheet.png.meta b/Assets/_NOT FMOD/Sprites/SpriteSheet.png.meta similarity index 100% rename from Assets/Sprites/SpriteSheet.png.meta rename to Assets/_NOT FMOD/Sprites/SpriteSheet.png.meta diff --git a/Assets/Sprites/SpriteSheet_new.png b/Assets/_NOT FMOD/Sprites/SpriteSheet_new.png similarity index 100% rename from Assets/Sprites/SpriteSheet_new.png rename to Assets/_NOT FMOD/Sprites/SpriteSheet_new.png diff --git a/Assets/Sprites/SpriteSheet_new.png.meta b/Assets/_NOT FMOD/Sprites/SpriteSheet_new.png.meta similarity index 100% rename from Assets/Sprites/SpriteSheet_new.png.meta rename to Assets/_NOT FMOD/Sprites/SpriteSheet_new.png.meta diff --git a/Assets/Sprites/TextureImporter.preset b/Assets/_NOT FMOD/Sprites/TextureImporter.preset similarity index 100% rename from Assets/Sprites/TextureImporter.preset rename to Assets/_NOT FMOD/Sprites/TextureImporter.preset diff --git a/Assets/Sprites/TextureImporter.preset.meta b/Assets/_NOT FMOD/Sprites/TextureImporter.preset.meta similarity index 100% rename from Assets/Sprites/TextureImporter.preset.meta rename to Assets/_NOT FMOD/Sprites/TextureImporter.preset.meta diff --git a/Assets/Sprites/Zhao.png b/Assets/_NOT FMOD/Sprites/Zhao.png similarity index 100% rename from Assets/Sprites/Zhao.png rename to Assets/_NOT FMOD/Sprites/Zhao.png diff --git a/Assets/Sprites/Zhao.png.meta b/Assets/_NOT FMOD/Sprites/Zhao.png.meta similarity index 100% rename from Assets/Sprites/Zhao.png.meta rename to Assets/_NOT FMOD/Sprites/Zhao.png.meta diff --git a/Assets/Sprites/icon.png b/Assets/_NOT FMOD/Sprites/icon.png similarity index 100% rename from Assets/Sprites/icon.png rename to Assets/_NOT FMOD/Sprites/icon.png diff --git a/Assets/Sprites/icon.png.meta b/Assets/_NOT FMOD/Sprites/icon.png.meta similarity index 100% rename from Assets/Sprites/icon.png.meta rename to Assets/_NOT FMOD/Sprites/icon.png.meta diff --git a/Assets/Sprites/intro.png b/Assets/_NOT FMOD/Sprites/intro.png similarity index 100% rename from Assets/Sprites/intro.png rename to Assets/_NOT FMOD/Sprites/intro.png diff --git a/Assets/Sprites/intro.png.meta b/Assets/_NOT FMOD/Sprites/intro.png.meta similarity index 100% rename from Assets/Sprites/intro.png.meta rename to Assets/_NOT FMOD/Sprites/intro.png.meta diff --git a/Assets/Sprites/intro1.png b/Assets/_NOT FMOD/Sprites/intro1.png similarity index 100% rename from Assets/Sprites/intro1.png rename to Assets/_NOT FMOD/Sprites/intro1.png diff --git a/Assets/Sprites/intro1.png.meta b/Assets/_NOT FMOD/Sprites/intro1.png.meta similarity index 100% rename from Assets/Sprites/intro1.png.meta rename to Assets/_NOT FMOD/Sprites/intro1.png.meta diff --git a/Assets/Sprites/intro2.png b/Assets/_NOT FMOD/Sprites/intro2.png similarity index 100% rename from Assets/Sprites/intro2.png rename to Assets/_NOT FMOD/Sprites/intro2.png diff --git a/Assets/Sprites/intro2.png.meta b/Assets/_NOT FMOD/Sprites/intro2.png.meta similarity index 100% rename from Assets/Sprites/intro2.png.meta rename to Assets/_NOT FMOD/Sprites/intro2.png.meta diff --git a/Assets/Sprites/intro41.png b/Assets/_NOT FMOD/Sprites/intro41.png similarity index 100% rename from Assets/Sprites/intro41.png rename to Assets/_NOT FMOD/Sprites/intro41.png diff --git a/Assets/Sprites/intro41.png.meta b/Assets/_NOT FMOD/Sprites/intro41.png.meta similarity index 100% rename from Assets/Sprites/intro41.png.meta rename to Assets/_NOT FMOD/Sprites/intro41.png.meta diff --git a/Assets/Sprites/intro42.png b/Assets/_NOT FMOD/Sprites/intro42.png similarity index 100% rename from Assets/Sprites/intro42.png rename to Assets/_NOT FMOD/Sprites/intro42.png diff --git a/Assets/Sprites/intro42.png.meta b/Assets/_NOT FMOD/Sprites/intro42.png.meta similarity index 100% rename from Assets/Sprites/intro42.png.meta rename to Assets/_NOT FMOD/Sprites/intro42.png.meta diff --git a/Assets/Sprites/intro43.png b/Assets/_NOT FMOD/Sprites/intro43.png similarity index 100% rename from Assets/Sprites/intro43.png rename to Assets/_NOT FMOD/Sprites/intro43.png diff --git a/Assets/Sprites/intro43.png.meta b/Assets/_NOT FMOD/Sprites/intro43.png.meta similarity index 100% rename from Assets/Sprites/intro43.png.meta rename to Assets/_NOT FMOD/Sprites/intro43.png.meta diff --git a/Assets/Sprites/intro44.png b/Assets/_NOT FMOD/Sprites/intro44.png similarity index 100% rename from Assets/Sprites/intro44.png rename to Assets/_NOT FMOD/Sprites/intro44.png diff --git a/Assets/Sprites/intro44.png.meta b/Assets/_NOT FMOD/Sprites/intro44.png.meta similarity index 100% rename from Assets/Sprites/intro44.png.meta rename to Assets/_NOT FMOD/Sprites/intro44.png.meta diff --git a/Assets/Sprites/intro5.png b/Assets/_NOT FMOD/Sprites/intro5.png similarity index 100% rename from Assets/Sprites/intro5.png rename to Assets/_NOT FMOD/Sprites/intro5.png diff --git a/Assets/Sprites/intro5.png.meta b/Assets/_NOT FMOD/Sprites/intro5.png.meta similarity index 100% rename from Assets/Sprites/intro5.png.meta rename to Assets/_NOT FMOD/Sprites/intro5.png.meta diff --git a/Assets/Sprites/intro6.png b/Assets/_NOT FMOD/Sprites/intro6.png similarity index 100% rename from Assets/Sprites/intro6.png rename to Assets/_NOT FMOD/Sprites/intro6.png diff --git a/Assets/Sprites/intro6.png.meta b/Assets/_NOT FMOD/Sprites/intro6.png.meta similarity index 100% rename from Assets/Sprites/intro6.png.meta rename to Assets/_NOT FMOD/Sprites/intro6.png.meta diff --git a/Assets/Sprites/intro7.png b/Assets/_NOT FMOD/Sprites/intro7.png similarity index 100% rename from Assets/Sprites/intro7.png rename to Assets/_NOT FMOD/Sprites/intro7.png diff --git a/Assets/Sprites/intro7.png.meta b/Assets/_NOT FMOD/Sprites/intro7.png.meta similarity index 100% rename from Assets/Sprites/intro7.png.meta rename to Assets/_NOT FMOD/Sprites/intro7.png.meta diff --git a/Assets/Sprites/outro.png b/Assets/_NOT FMOD/Sprites/outro.png similarity index 100% rename from Assets/Sprites/outro.png rename to Assets/_NOT FMOD/Sprites/outro.png diff --git a/Assets/Sprites/outro.png.meta b/Assets/_NOT FMOD/Sprites/outro.png.meta similarity index 100% rename from Assets/Sprites/outro.png.meta rename to Assets/_NOT FMOD/Sprites/outro.png.meta diff --git a/Assets/Tiles.meta b/Assets/_NOT FMOD/Tiles.meta similarity index 100% rename from Assets/Tiles.meta rename to Assets/_NOT FMOD/Tiles.meta diff --git a/Assets/Tiles/SpriteSheet_new_0.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_0.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_0.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_0.asset diff --git a/Assets/Tiles/SpriteSheet_new_0.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_0.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_0.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_0.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_1.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_1.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_1.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_1.asset diff --git a/Assets/Tiles/SpriteSheet_new_1.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_1.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_1.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_1.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_10.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_10.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_10.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_10.asset diff --git a/Assets/Tiles/SpriteSheet_new_10.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_10.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_10.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_10.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_100.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_100.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_100.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_100.asset diff --git a/Assets/Tiles/SpriteSheet_new_100.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_100.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_100.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_100.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_101.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_101.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_101.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_101.asset diff --git a/Assets/Tiles/SpriteSheet_new_101.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_101.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_101.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_101.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_102.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_102.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_102.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_102.asset diff --git a/Assets/Tiles/SpriteSheet_new_102.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_102.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_102.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_102.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_103.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_103.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_103.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_103.asset diff --git a/Assets/Tiles/SpriteSheet_new_103.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_103.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_103.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_103.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_104.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_104.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_104.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_104.asset diff --git a/Assets/Tiles/SpriteSheet_new_104.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_104.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_104.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_104.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_105.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_105.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_105.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_105.asset diff --git a/Assets/Tiles/SpriteSheet_new_105.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_105.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_105.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_105.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_107.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_107.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_107.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_107.asset diff --git a/Assets/Tiles/SpriteSheet_new_107.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_107.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_107.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_107.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_108.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_108.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_108.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_108.asset diff --git a/Assets/Tiles/SpriteSheet_new_108.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_108.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_108.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_108.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_109.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_109.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_109.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_109.asset diff --git a/Assets/Tiles/SpriteSheet_new_109.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_109.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_109.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_109.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_11.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_11.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_11.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_11.asset diff --git a/Assets/Tiles/SpriteSheet_new_11.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_11.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_11.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_11.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_110.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_110.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_110.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_110.asset diff --git a/Assets/Tiles/SpriteSheet_new_110.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_110.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_110.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_110.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_111.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_111.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_111.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_111.asset diff --git a/Assets/Tiles/SpriteSheet_new_111.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_111.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_111.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_111.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_112.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_112.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_112.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_112.asset diff --git a/Assets/Tiles/SpriteSheet_new_112.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_112.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_112.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_112.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_113.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_113.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_113.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_113.asset diff --git a/Assets/Tiles/SpriteSheet_new_113.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_113.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_113.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_113.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_114.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_114.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_114.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_114.asset diff --git a/Assets/Tiles/SpriteSheet_new_114.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_114.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_114.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_114.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_115.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_115.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_115.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_115.asset diff --git a/Assets/Tiles/SpriteSheet_new_115.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_115.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_115.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_115.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_116.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_116.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_116.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_116.asset diff --git a/Assets/Tiles/SpriteSheet_new_116.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_116.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_116.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_116.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_117.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_117.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_117.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_117.asset diff --git a/Assets/Tiles/SpriteSheet_new_117.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_117.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_117.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_117.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_118.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_118.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_118.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_118.asset diff --git a/Assets/Tiles/SpriteSheet_new_118.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_118.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_118.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_118.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_119.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_119.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_119.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_119.asset diff --git a/Assets/Tiles/SpriteSheet_new_119.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_119.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_119.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_119.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_12.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_12.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_12.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_12.asset diff --git a/Assets/Tiles/SpriteSheet_new_12.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_12.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_12.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_12.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_120.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_120.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_120.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_120.asset diff --git a/Assets/Tiles/SpriteSheet_new_120.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_120.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_120.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_120.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_121.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_121.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_121.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_121.asset diff --git a/Assets/Tiles/SpriteSheet_new_121.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_121.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_121.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_121.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_122.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_122.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_122.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_122.asset diff --git a/Assets/Tiles/SpriteSheet_new_122.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_122.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_122.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_122.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_123.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_123.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_123.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_123.asset diff --git a/Assets/Tiles/SpriteSheet_new_123.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_123.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_123.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_123.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_126.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_126.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_126.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_126.asset diff --git a/Assets/Tiles/SpriteSheet_new_126.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_126.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_126.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_126.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_127.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_127.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_127.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_127.asset diff --git a/Assets/Tiles/SpriteSheet_new_127.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_127.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_127.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_127.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_128.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_128.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_128.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_128.asset diff --git a/Assets/Tiles/SpriteSheet_new_128.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_128.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_128.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_128.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_129.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_129.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_129.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_129.asset diff --git a/Assets/Tiles/SpriteSheet_new_129.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_129.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_129.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_129.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_13.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_13.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_13.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_13.asset diff --git a/Assets/Tiles/SpriteSheet_new_13.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_13.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_13.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_13.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_130.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_130.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_130.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_130.asset diff --git a/Assets/Tiles/SpriteSheet_new_130.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_130.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_130.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_130.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_131.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_131.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_131.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_131.asset diff --git a/Assets/Tiles/SpriteSheet_new_131.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_131.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_131.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_131.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_132.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_132.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_132.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_132.asset diff --git a/Assets/Tiles/SpriteSheet_new_132.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_132.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_132.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_132.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_133.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_133.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_133.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_133.asset diff --git a/Assets/Tiles/SpriteSheet_new_133.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_133.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_133.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_133.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_134.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_134.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_134.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_134.asset diff --git a/Assets/Tiles/SpriteSheet_new_134.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_134.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_134.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_134.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_136.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_136.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_136.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_136.asset diff --git a/Assets/Tiles/SpriteSheet_new_136.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_136.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_136.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_136.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_137.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_137.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_137.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_137.asset diff --git a/Assets/Tiles/SpriteSheet_new_137.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_137.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_137.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_137.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_138.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_138.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_138.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_138.asset diff --git a/Assets/Tiles/SpriteSheet_new_138.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_138.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_138.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_138.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_14.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_14.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_14.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_14.asset diff --git a/Assets/Tiles/SpriteSheet_new_14.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_14.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_14.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_14.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_140.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_140.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_140.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_140.asset diff --git a/Assets/Tiles/SpriteSheet_new_140.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_140.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_140.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_140.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_141.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_141.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_141.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_141.asset diff --git a/Assets/Tiles/SpriteSheet_new_141.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_141.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_141.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_141.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_142.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_142.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_142.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_142.asset diff --git a/Assets/Tiles/SpriteSheet_new_142.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_142.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_142.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_142.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_143.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_143.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_143.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_143.asset diff --git a/Assets/Tiles/SpriteSheet_new_143.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_143.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_143.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_143.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_144.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_144.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_144.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_144.asset diff --git a/Assets/Tiles/SpriteSheet_new_144.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_144.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_144.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_144.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_145.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_145.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_145.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_145.asset diff --git a/Assets/Tiles/SpriteSheet_new_145.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_145.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_145.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_145.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_146.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_146.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_146.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_146.asset diff --git a/Assets/Tiles/SpriteSheet_new_146.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_146.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_146.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_146.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_147.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_147.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_147.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_147.asset diff --git a/Assets/Tiles/SpriteSheet_new_147.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_147.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_147.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_147.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_148.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_148.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_148.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_148.asset diff --git a/Assets/Tiles/SpriteSheet_new_148.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_148.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_148.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_148.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_149.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_149.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_149.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_149.asset diff --git a/Assets/Tiles/SpriteSheet_new_149.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_149.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_149.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_149.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_15.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_15.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_15.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_15.asset diff --git a/Assets/Tiles/SpriteSheet_new_15.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_15.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_15.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_15.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_150.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_150.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_150.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_150.asset diff --git a/Assets/Tiles/SpriteSheet_new_150.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_150.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_150.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_150.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_151.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_151.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_151.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_151.asset diff --git a/Assets/Tiles/SpriteSheet_new_151.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_151.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_151.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_151.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_152.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_152.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_152.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_152.asset diff --git a/Assets/Tiles/SpriteSheet_new_152.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_152.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_152.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_152.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_153.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_153.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_153.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_153.asset diff --git a/Assets/Tiles/SpriteSheet_new_153.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_153.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_153.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_153.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_155.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_155.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_155.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_155.asset diff --git a/Assets/Tiles/SpriteSheet_new_155.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_155.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_155.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_155.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_156.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_156.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_156.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_156.asset diff --git a/Assets/Tiles/SpriteSheet_new_156.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_156.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_156.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_156.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_157.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_157.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_157.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_157.asset diff --git a/Assets/Tiles/SpriteSheet_new_157.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_157.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_157.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_157.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_158.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_158.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_158.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_158.asset diff --git a/Assets/Tiles/SpriteSheet_new_158.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_158.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_158.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_158.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_159.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_159.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_159.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_159.asset diff --git a/Assets/Tiles/SpriteSheet_new_159.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_159.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_159.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_159.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_16.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_16.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_16.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_16.asset diff --git a/Assets/Tiles/SpriteSheet_new_16.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_16.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_16.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_16.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_160.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_160.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_160.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_160.asset diff --git a/Assets/Tiles/SpriteSheet_new_160.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_160.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_160.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_160.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_161.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_161.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_161.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_161.asset diff --git a/Assets/Tiles/SpriteSheet_new_161.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_161.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_161.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_161.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_162.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_162.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_162.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_162.asset diff --git a/Assets/Tiles/SpriteSheet_new_162.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_162.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_162.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_162.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_163.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_163.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_163.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_163.asset diff --git a/Assets/Tiles/SpriteSheet_new_163.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_163.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_163.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_163.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_164.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_164.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_164.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_164.asset diff --git a/Assets/Tiles/SpriteSheet_new_164.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_164.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_164.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_164.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_165.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_165.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_165.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_165.asset diff --git a/Assets/Tiles/SpriteSheet_new_165.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_165.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_165.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_165.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_166.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_166.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_166.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_166.asset diff --git a/Assets/Tiles/SpriteSheet_new_166.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_166.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_166.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_166.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_167.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_167.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_167.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_167.asset diff --git a/Assets/Tiles/SpriteSheet_new_167.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_167.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_167.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_167.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_17.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_17.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_17.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_17.asset diff --git a/Assets/Tiles/SpriteSheet_new_17.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_17.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_17.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_17.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_18.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_18.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_18.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_18.asset diff --git a/Assets/Tiles/SpriteSheet_new_18.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_18.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_18.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_18.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_19.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_19.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_19.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_19.asset diff --git a/Assets/Tiles/SpriteSheet_new_19.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_19.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_19.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_19.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_2.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_2.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_2.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_2.asset diff --git a/Assets/Tiles/SpriteSheet_new_2.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_2.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_2.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_2.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_20.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_20.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_20.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_20.asset diff --git a/Assets/Tiles/SpriteSheet_new_20.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_20.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_20.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_20.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_21.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_21.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_21.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_21.asset diff --git a/Assets/Tiles/SpriteSheet_new_21.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_21.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_21.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_21.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_22.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_22.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_22.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_22.asset diff --git a/Assets/Tiles/SpriteSheet_new_22.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_22.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_22.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_22.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_23.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_23.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_23.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_23.asset diff --git a/Assets/Tiles/SpriteSheet_new_23.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_23.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_23.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_23.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_24.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_24.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_24.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_24.asset diff --git a/Assets/Tiles/SpriteSheet_new_24.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_24.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_24.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_24.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_25.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_25.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_25.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_25.asset diff --git a/Assets/Tiles/SpriteSheet_new_25.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_25.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_25.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_25.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_26.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_26.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_26.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_26.asset diff --git a/Assets/Tiles/SpriteSheet_new_26.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_26.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_26.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_26.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_27.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_27.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_27.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_27.asset diff --git a/Assets/Tiles/SpriteSheet_new_27.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_27.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_27.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_27.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_28.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_28.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_28.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_28.asset diff --git a/Assets/Tiles/SpriteSheet_new_28.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_28.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_28.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_28.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_29.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_29.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_29.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_29.asset diff --git a/Assets/Tiles/SpriteSheet_new_29.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_29.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_29.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_29.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_3.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_3.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_3.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_3.asset diff --git a/Assets/Tiles/SpriteSheet_new_3.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_3.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_3.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_3.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_30.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_30.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_30.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_30.asset diff --git a/Assets/Tiles/SpriteSheet_new_30.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_30.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_30.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_30.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_31.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_31.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_31.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_31.asset diff --git a/Assets/Tiles/SpriteSheet_new_31.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_31.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_31.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_31.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_32.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_32.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_32.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_32.asset diff --git a/Assets/Tiles/SpriteSheet_new_32.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_32.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_32.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_32.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_33.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_33.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_33.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_33.asset diff --git a/Assets/Tiles/SpriteSheet_new_33.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_33.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_33.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_33.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_34.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_34.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_34.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_34.asset diff --git a/Assets/Tiles/SpriteSheet_new_34.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_34.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_34.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_34.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_35.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_35.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_35.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_35.asset diff --git a/Assets/Tiles/SpriteSheet_new_35.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_35.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_35.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_35.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_36.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_36.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_36.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_36.asset diff --git a/Assets/Tiles/SpriteSheet_new_36.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_36.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_36.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_36.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_37.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_37.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_37.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_37.asset diff --git a/Assets/Tiles/SpriteSheet_new_37.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_37.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_37.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_37.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_38.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_38.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_38.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_38.asset diff --git a/Assets/Tiles/SpriteSheet_new_38.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_38.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_38.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_38.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_39.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_39.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_39.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_39.asset diff --git a/Assets/Tiles/SpriteSheet_new_39.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_39.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_39.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_39.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_4.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_4.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_4.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_4.asset diff --git a/Assets/Tiles/SpriteSheet_new_4.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_4.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_4.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_4.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_40.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_40.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_40.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_40.asset diff --git a/Assets/Tiles/SpriteSheet_new_40.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_40.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_40.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_40.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_41.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_41.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_41.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_41.asset diff --git a/Assets/Tiles/SpriteSheet_new_41.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_41.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_41.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_41.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_42.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_42.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_42.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_42.asset diff --git a/Assets/Tiles/SpriteSheet_new_42.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_42.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_42.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_42.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_43.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_43.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_43.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_43.asset diff --git a/Assets/Tiles/SpriteSheet_new_43.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_43.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_43.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_43.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_44.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_44.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_44.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_44.asset diff --git a/Assets/Tiles/SpriteSheet_new_44.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_44.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_44.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_44.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_45.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_45.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_45.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_45.asset diff --git a/Assets/Tiles/SpriteSheet_new_45.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_45.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_45.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_45.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_46.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_46.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_46.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_46.asset diff --git a/Assets/Tiles/SpriteSheet_new_46.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_46.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_46.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_46.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_47.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_47.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_47.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_47.asset diff --git a/Assets/Tiles/SpriteSheet_new_47.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_47.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_47.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_47.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_48.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_48.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_48.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_48.asset diff --git a/Assets/Tiles/SpriteSheet_new_48.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_48.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_48.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_48.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_49.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_49.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_49.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_49.asset diff --git a/Assets/Tiles/SpriteSheet_new_49.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_49.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_49.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_49.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_5.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_5.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_5.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_5.asset diff --git a/Assets/Tiles/SpriteSheet_new_5.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_5.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_5.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_5.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_50.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_50.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_50.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_50.asset diff --git a/Assets/Tiles/SpriteSheet_new_50.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_50.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_50.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_50.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_51.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_51.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_51.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_51.asset diff --git a/Assets/Tiles/SpriteSheet_new_51.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_51.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_51.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_51.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_52.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_52.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_52.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_52.asset diff --git a/Assets/Tiles/SpriteSheet_new_52.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_52.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_52.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_52.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_53.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_53.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_53.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_53.asset diff --git a/Assets/Tiles/SpriteSheet_new_53.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_53.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_53.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_53.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_54.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_54.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_54.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_54.asset diff --git a/Assets/Tiles/SpriteSheet_new_54.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_54.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_54.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_54.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_55.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_55.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_55.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_55.asset diff --git a/Assets/Tiles/SpriteSheet_new_55.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_55.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_55.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_55.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_56.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_56.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_56.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_56.asset diff --git a/Assets/Tiles/SpriteSheet_new_56.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_56.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_56.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_56.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_57.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_57.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_57.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_57.asset diff --git a/Assets/Tiles/SpriteSheet_new_57.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_57.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_57.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_57.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_58.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_58.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_58.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_58.asset diff --git a/Assets/Tiles/SpriteSheet_new_58.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_58.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_58.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_58.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_59.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_59.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_59.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_59.asset diff --git a/Assets/Tiles/SpriteSheet_new_59.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_59.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_59.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_59.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_6.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_6.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_6.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_6.asset diff --git a/Assets/Tiles/SpriteSheet_new_6.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_6.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_6.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_6.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_60.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_60.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_60.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_60.asset diff --git a/Assets/Tiles/SpriteSheet_new_60.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_60.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_60.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_60.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_61.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_61.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_61.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_61.asset diff --git a/Assets/Tiles/SpriteSheet_new_61.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_61.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_61.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_61.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_62.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_62.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_62.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_62.asset diff --git a/Assets/Tiles/SpriteSheet_new_62.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_62.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_62.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_62.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_63.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_63.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_63.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_63.asset diff --git a/Assets/Tiles/SpriteSheet_new_63.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_63.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_63.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_63.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_64.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_64.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_64.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_64.asset diff --git a/Assets/Tiles/SpriteSheet_new_64.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_64.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_64.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_64.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_65.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_65.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_65.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_65.asset diff --git a/Assets/Tiles/SpriteSheet_new_65.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_65.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_65.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_65.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_66.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_66.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_66.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_66.asset diff --git a/Assets/Tiles/SpriteSheet_new_66.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_66.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_66.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_66.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_67.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_67.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_67.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_67.asset diff --git a/Assets/Tiles/SpriteSheet_new_67.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_67.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_67.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_67.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_68.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_68.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_68.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_68.asset diff --git a/Assets/Tiles/SpriteSheet_new_68.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_68.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_68.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_68.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_69.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_69.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_69.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_69.asset diff --git a/Assets/Tiles/SpriteSheet_new_69.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_69.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_69.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_69.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_7.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_7.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_7.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_7.asset diff --git a/Assets/Tiles/SpriteSheet_new_7.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_7.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_7.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_7.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_70.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_70.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_70.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_70.asset diff --git a/Assets/Tiles/SpriteSheet_new_70.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_70.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_70.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_70.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_71.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_71.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_71.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_71.asset diff --git a/Assets/Tiles/SpriteSheet_new_71.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_71.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_71.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_71.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_72.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_72.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_72.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_72.asset diff --git a/Assets/Tiles/SpriteSheet_new_72.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_72.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_72.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_72.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_73.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_73.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_73.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_73.asset diff --git a/Assets/Tiles/SpriteSheet_new_73.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_73.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_73.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_73.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_74.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_74.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_74.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_74.asset diff --git a/Assets/Tiles/SpriteSheet_new_74.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_74.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_74.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_74.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_75.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_75.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_75.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_75.asset diff --git a/Assets/Tiles/SpriteSheet_new_75.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_75.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_75.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_75.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_76.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_76.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_76.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_76.asset diff --git a/Assets/Tiles/SpriteSheet_new_76.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_76.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_76.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_76.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_77.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_77.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_77.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_77.asset diff --git a/Assets/Tiles/SpriteSheet_new_77.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_77.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_77.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_77.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_78.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_78.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_78.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_78.asset diff --git a/Assets/Tiles/SpriteSheet_new_78.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_78.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_78.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_78.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_79.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_79.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_79.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_79.asset diff --git a/Assets/Tiles/SpriteSheet_new_79.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_79.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_79.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_79.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_8.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_8.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_8.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_8.asset diff --git a/Assets/Tiles/SpriteSheet_new_8.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_8.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_8.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_8.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_80.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_80.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_80.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_80.asset diff --git a/Assets/Tiles/SpriteSheet_new_80.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_80.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_80.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_80.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_81.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_81.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_81.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_81.asset diff --git a/Assets/Tiles/SpriteSheet_new_81.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_81.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_81.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_81.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_82.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_82.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_82.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_82.asset diff --git a/Assets/Tiles/SpriteSheet_new_82.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_82.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_82.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_82.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_83.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_83.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_83.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_83.asset diff --git a/Assets/Tiles/SpriteSheet_new_83.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_83.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_83.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_83.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_84.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_84.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_84.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_84.asset diff --git a/Assets/Tiles/SpriteSheet_new_84.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_84.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_84.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_84.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_85.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_85.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_85.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_85.asset diff --git a/Assets/Tiles/SpriteSheet_new_85.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_85.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_85.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_85.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_86.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_86.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_86.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_86.asset diff --git a/Assets/Tiles/SpriteSheet_new_86.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_86.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_86.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_86.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_87.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_87.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_87.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_87.asset diff --git a/Assets/Tiles/SpriteSheet_new_87.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_87.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_87.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_87.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_88.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_88.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_88.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_88.asset diff --git a/Assets/Tiles/SpriteSheet_new_88.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_88.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_88.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_88.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_89.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_89.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_89.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_89.asset diff --git a/Assets/Tiles/SpriteSheet_new_89.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_89.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_89.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_89.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_9.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_9.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_9.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_9.asset diff --git a/Assets/Tiles/SpriteSheet_new_9.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_9.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_9.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_9.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_90.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_90.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_90.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_90.asset diff --git a/Assets/Tiles/SpriteSheet_new_90.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_90.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_90.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_90.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_91.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_91.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_91.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_91.asset diff --git a/Assets/Tiles/SpriteSheet_new_91.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_91.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_91.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_91.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_92.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_92.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_92.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_92.asset diff --git a/Assets/Tiles/SpriteSheet_new_92.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_92.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_92.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_92.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_93.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_93.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_93.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_93.asset diff --git a/Assets/Tiles/SpriteSheet_new_93.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_93.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_93.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_93.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_94.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_94.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_94.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_94.asset diff --git a/Assets/Tiles/SpriteSheet_new_94.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_94.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_94.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_94.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_95.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_95.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_95.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_95.asset diff --git a/Assets/Tiles/SpriteSheet_new_95.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_95.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_95.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_95.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_96.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_96.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_96.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_96.asset diff --git a/Assets/Tiles/SpriteSheet_new_96.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_96.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_96.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_96.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_97.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_97.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_97.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_97.asset diff --git a/Assets/Tiles/SpriteSheet_new_97.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_97.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_97.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_97.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_98.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_98.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_98.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_98.asset diff --git a/Assets/Tiles/SpriteSheet_new_98.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_98.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_98.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_98.asset.meta diff --git a/Assets/Tiles/SpriteSheet_new_99.asset b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_99.asset similarity index 100% rename from Assets/Tiles/SpriteSheet_new_99.asset rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_99.asset diff --git a/Assets/Tiles/SpriteSheet_new_99.asset.meta b/Assets/_NOT FMOD/Tiles/SpriteSheet_new_99.asset.meta similarity index 100% rename from Assets/Tiles/SpriteSheet_new_99.asset.meta rename to Assets/_NOT FMOD/Tiles/SpriteSheet_new_99.asset.meta diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/016B571D.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/016B571D.fobj new file mode 100644 index 0000000..e69de29 diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0934E1FF.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0934E1FF.fobj new file mode 100644 index 0000000..e7a6f67 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0934E1FF.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0B5CAE2E.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0B5CAE2E.fobj new file mode 100644 index 0000000..cde23d5 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0B5CAE2E.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0DC43FE2.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0DC43FE2.fobj new file mode 100644 index 0000000..15255c2 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0DC43FE2.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0FACE8E4.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0FACE8E4.fobj new file mode 100644 index 0000000..f90b42d Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/0FACE8E4.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/145AB8D1.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/145AB8D1.fobj new file mode 100644 index 0000000..e69de29 diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/1CBE5FB3.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/1CBE5FB3.fobj new file mode 100644 index 0000000..f90b42d Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/1CBE5FB3.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/22BF7A10.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/22BF7A10.fobj new file mode 100644 index 0000000..f5c22b1 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/22BF7A10.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/265E1974.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/265E1974.fobj new file mode 100644 index 0000000..419c006 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/265E1974.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/4A759BEF.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/4A759BEF.fobj new file mode 100644 index 0000000..15255c2 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/4A759BEF.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/56399FD0.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/56399FD0.fobj new file mode 100644 index 0000000..960a29e Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/56399FD0.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/6522AC00.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/6522AC00.fobj new file mode 100644 index 0000000..3ad6a07 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/6522AC00.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/79EADB73.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/79EADB73.fobj new file mode 100644 index 0000000..af5b798 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/79EADB73.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/7C8C6AF4.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/7C8C6AF4.fobj new file mode 100644 index 0000000..e69de29 diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/89BB44DA.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/89BB44DA.fobj new file mode 100644 index 0000000..e7a6f67 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/89BB44DA.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/92F4280F.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/92F4280F.fobj new file mode 100644 index 0000000..0c03e6e Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/92F4280F.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/9455A6F5.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/9455A6F5.fobj new file mode 100644 index 0000000..8e869e1 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/9455A6F5.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/9B66C911.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/9B66C911.fobj new file mode 100644 index 0000000..f5c22b1 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/9B66C911.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/A4690ED7.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/A4690ED7.fobj new file mode 100644 index 0000000..5472677 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/A4690ED7.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/AB6D87C5.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/AB6D87C5.fobj new file mode 100644 index 0000000..3ad6a07 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/AB6D87C5.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/BC71BCBA.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/BC71BCBA.fobj new file mode 100644 index 0000000..af5b798 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/BC71BCBA.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/BD68C0F3.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/BD68C0F3.fobj new file mode 100644 index 0000000..960a29e Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/BD68C0F3.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/C20AEF57.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/C20AEF57.fobj new file mode 100644 index 0000000..419c006 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/C20AEF57.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/CD3FE98C.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/CD3FE98C.fobj new file mode 100644 index 0000000..0c03e6e Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/CD3FE98C.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/E77E01C3.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/E77E01C3.fobj new file mode 100644 index 0000000..cde23d5 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/E77E01C3.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/ED19ABEB.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/ED19ABEB.fobj new file mode 100644 index 0000000..e69de29 diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/F1E026C0.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/F1E026C0.fobj new file mode 100644 index 0000000..5472677 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/F1E026C0.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/FCA2BB7C.fobj b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/FCA2BB7C.fobj new file mode 100644 index 0000000..8e869e1 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/fsbcache/Desktop/FCA2BB7C.fobj differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{0b88089f-85fb-4ac4-bb00-1840b5f53041}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{0b88089f-85fb-4ac4-bb00-1840b5f53041}.pdc new file mode 100644 index 0000000..e45fe09 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{0b88089f-85fb-4ac4-bb00-1840b5f53041}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{28d3666f-8756-47f8-bcba-a78fdf9f375e}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{28d3666f-8756-47f8-bcba-a78fdf9f375e}.pdc new file mode 100644 index 0000000..c70c0b0 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{28d3666f-8756-47f8-bcba-a78fdf9f375e}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{44e78851-7914-4253-ae5a-d3a81c7f2b7d}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{44e78851-7914-4253-ae5a-d3a81c7f2b7d}.pdc new file mode 100644 index 0000000..32f57f7 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{44e78851-7914-4253-ae5a-d3a81c7f2b7d}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{5dae90c1-148c-4a72-a5d6-b2235a318111}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{5dae90c1-148c-4a72-a5d6-b2235a318111}.pdc new file mode 100644 index 0000000..9b025de Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{5dae90c1-148c-4a72-a5d6-b2235a318111}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{7e93a537-706a-44b2-bfd3-3eb98932f902}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{7e93a537-706a-44b2-bfd3-3eb98932f902}.pdc new file mode 100644 index 0000000..befd64c Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{7e93a537-706a-44b2-bfd3-3eb98932f902}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{813c1a24-ed3c-488c-8dc8-5d292a0a451c}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{813c1a24-ed3c-488c-8dc8-5d292a0a451c}.pdc new file mode 100644 index 0000000..70be2cf Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{813c1a24-ed3c-488c-8dc8-5d292a0a451c}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{b93078f3-337e-49ff-96c7-3712fd375c8a}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{b93078f3-337e-49ff-96c7-3712fd375c8a}.pdc new file mode 100644 index 0000000..f44133e Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{b93078f3-337e-49ff-96c7-3712fd375c8a}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{df858353-3e98-4caf-be72-05bf28b9ad68}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{df858353-3e98-4caf-be72-05bf28b9ad68}.pdc new file mode 100644 index 0000000..362dec4 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{df858353-3e98-4caf-be72-05bf28b9ad68}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{e4b08df5-a813-48c1-8752-c6781023a8bf}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{e4b08df5-a813-48c1-8752-c6781023a8bf}.pdc new file mode 100644 index 0000000..d4e9262 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{e4b08df5-a813-48c1-8752-c6781023a8bf}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{e5371900-cf28-45e7-9fba-574d6459cfbd}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{e5371900-cf28-45e7-9fba-574d6459cfbd}.pdc new file mode 100644 index 0000000..6b23a36 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{e5371900-cf28-45e7-9fba-574d6459cfbd}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{ebf90362-3269-473a-8ebc-13a5fd38d619}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{ebf90362-3269-473a-8ebc-13a5fd38d619}.pdc new file mode 100644 index 0000000..a18b4d8 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{ebf90362-3269-473a-8ebc-13a5fd38d619}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/.cache/{ee6f0105-7acb-4418-8834-8cf2930db900}.pdc b/FMOD Studio Project/SpaceToxin/.cache/{ee6f0105-7acb-4418-8834-8cf2930db900}.pdc new file mode 100644 index 0000000..74f3c55 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/.cache/{ee6f0105-7acb-4418-8834-8cf2930db900}.pdc differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/button_deactivated.mp3 b/FMOD Studio Project/SpaceToxin/Assets/button_deactivated.mp3 new file mode 100644 index 0000000..d503fda Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/button_deactivated.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/button_pressed.mp3 b/FMOD Studio Project/SpaceToxin/Assets/button_pressed.mp3 new file mode 100644 index 0000000..a50ad34 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/button_pressed.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/button_released.mp3 b/FMOD Studio Project/SpaceToxin/Assets/button_released.mp3 new file mode 100644 index 0000000..4c23c4a Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/button_released.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/cough1.mp3 b/FMOD Studio Project/SpaceToxin/Assets/cough1.mp3 new file mode 100644 index 0000000..c970b09 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/cough1.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/cough2.mp3 b/FMOD Studio Project/SpaceToxin/Assets/cough2.mp3 new file mode 100644 index 0000000..49fae51 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/cough2.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/cough3.mp3 b/FMOD Studio Project/SpaceToxin/Assets/cough3.mp3 new file mode 100644 index 0000000..555f231 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/cough3.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/door_closed.mp3 b/FMOD Studio Project/SpaceToxin/Assets/door_closed.mp3 new file mode 100644 index 0000000..74d2c9e Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/door_closed.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/door_open.mp3 b/FMOD Studio Project/SpaceToxin/Assets/door_open.mp3 new file mode 100644 index 0000000..87d4267 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/door_open.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/generator.mp3 b/FMOD Studio Project/SpaceToxin/Assets/generator.mp3 new file mode 100644 index 0000000..6ba4f92 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/generator.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/intro.mp3 b/FMOD Studio Project/SpaceToxin/Assets/intro.mp3 new file mode 100644 index 0000000..c639504 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/intro.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/main_theme.mp3 b/FMOD Studio Project/SpaceToxin/Assets/main_theme.mp3 new file mode 100644 index 0000000..17044f8 Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/main_theme.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Assets/second_theme.mp3 b/FMOD Studio Project/SpaceToxin/Assets/second_theme.mp3 new file mode 100644 index 0000000..7911ffd Binary files /dev/null and b/FMOD Studio Project/SpaceToxin/Assets/second_theme.mp3 differ diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Asset/{9c21eefb-44d3-4962-8400-26d11534866e}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Asset/{9c21eefb-44d3-4962-8400-26d11534866e}.xml new file mode 100644 index 0000000..d2a5524 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Asset/{9c21eefb-44d3-4962-8400-26d11534866e}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{0b88089f-85fb-4ac4-bb00-1840b5f53041}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{0b88089f-85fb-4ac4-bb00-1840b5f53041}.xml new file mode 100644 index 0000000..c5b99b4 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{0b88089f-85fb-4ac4-bb00-1840b5f53041}.xml @@ -0,0 +1,20 @@ + + + + + button_released.mp3 + + + 44.0999985 + + + 2 + + + 0.15673469387755101 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{28d3666f-8756-47f8-bcba-a78fdf9f375e}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{28d3666f-8756-47f8-bcba-a78fdf9f375e}.xml new file mode 100644 index 0000000..e85ed99 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{28d3666f-8756-47f8-bcba-a78fdf9f375e}.xml @@ -0,0 +1,20 @@ + + + + + door_closed.mp3 + + + 44.0999985 + + + 2 + + + 1.0710204081632653 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{44e78851-7914-4253-ae5a-d3a81c7f2b7d}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{44e78851-7914-4253-ae5a-d3a81c7f2b7d}.xml new file mode 100644 index 0000000..7516577 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{44e78851-7914-4253-ae5a-d3a81c7f2b7d}.xml @@ -0,0 +1,20 @@ + + + + + door_open.mp3 + + + 44.0999985 + + + 2 + + + 1.1232653061224489 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{5dae90c1-148c-4a72-a5d6-b2235a318111}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{5dae90c1-148c-4a72-a5d6-b2235a318111}.xml new file mode 100644 index 0000000..222df85 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{5dae90c1-148c-4a72-a5d6-b2235a318111}.xml @@ -0,0 +1,23 @@ + + + + + generator.mp3 + + + true + + + 44.0999985 + + + 2 + + + 15.856326530612245 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{7e93a537-706a-44b2-bfd3-3eb98932f902}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{7e93a537-706a-44b2-bfd3-3eb98932f902}.xml new file mode 100644 index 0000000..c8a6696 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{7e93a537-706a-44b2-bfd3-3eb98932f902}.xml @@ -0,0 +1,20 @@ + + + + + cough3.mp3 + + + 44.0999985 + + + 2 + + + 0.28734693877551021 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{813c1a24-ed3c-488c-8dc8-5d292a0a451c}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{813c1a24-ed3c-488c-8dc8-5d292a0a451c}.xml new file mode 100644 index 0000000..2cdbcff --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{813c1a24-ed3c-488c-8dc8-5d292a0a451c}.xml @@ -0,0 +1,23 @@ + + + + + main_theme.mp3 + + + true + + + 44.0999985 + + + 2 + + + 383.73877551020411 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{b93078f3-337e-49ff-96c7-3712fd375c8a}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{b93078f3-337e-49ff-96c7-3712fd375c8a}.xml new file mode 100644 index 0000000..0daddbf --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{b93078f3-337e-49ff-96c7-3712fd375c8a}.xml @@ -0,0 +1,20 @@ + + + + + button_deactivated.mp3 + + + 44.0999985 + + + 2 + + + 0.39183673469387753 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{df858353-3e98-4caf-be72-05bf28b9ad68}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{df858353-3e98-4caf-be72-05bf28b9ad68}.xml new file mode 100644 index 0000000..7a6c22e --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{df858353-3e98-4caf-be72-05bf28b9ad68}.xml @@ -0,0 +1,20 @@ + + + + + cough2.mp3 + + + 44.0999985 + + + 2 + + + 0.39183673469387753 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{e4b08df5-a813-48c1-8752-c6781023a8bf}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{e4b08df5-a813-48c1-8752-c6781023a8bf}.xml new file mode 100644 index 0000000..e20a607 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{e4b08df5-a813-48c1-8752-c6781023a8bf}.xml @@ -0,0 +1,20 @@ + + + + + button_pressed.mp3 + + + 44.0999985 + + + 2 + + + 0.2089795918367347 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{e5371900-cf28-45e7-9fba-574d6459cfbd}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{e5371900-cf28-45e7-9fba-574d6459cfbd}.xml new file mode 100644 index 0000000..a731d8f --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{e5371900-cf28-45e7-9fba-574d6459cfbd}.xml @@ -0,0 +1,23 @@ + + + + + intro.mp3 + + + true + + + 44.0999985 + + + 2 + + + 41.430204081632652 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{ebf90362-3269-473a-8ebc-13a5fd38d619}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{ebf90362-3269-473a-8ebc-13a5fd38d619}.xml new file mode 100644 index 0000000..ac26b51 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{ebf90362-3269-473a-8ebc-13a5fd38d619}.xml @@ -0,0 +1,23 @@ + + + + + second_theme.mp3 + + + true + + + 44.0999985 + + + 2 + + + 189.77959183673468 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{ee6f0105-7acb-4418-8834-8cf2930db900}.xml b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{ee6f0105-7acb-4418-8834-8cf2930db900}.xml new file mode 100644 index 0000000..5fc36c2 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/AudioFile/{ee6f0105-7acb-4418-8834-8cf2930db900}.xml @@ -0,0 +1,20 @@ + + + + + cough1.mp3 + + + 44.0999985 + + + 2 + + + 0.4179591836734694 + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Bank/{f2e5011e-791e-468c-a326-5ae894fd4a72}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Bank/{f2e5011e-791e-468c-a326-5ae894fd4a72}.xml new file mode 100644 index 0000000..e380caf --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Bank/{f2e5011e-791e-468c-a326-5ae894fd4a72}.xml @@ -0,0 +1,8 @@ + + + + + {af50da8f-0e54-438a-818f-a42e169043b0} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/BankFolder/{af50da8f-0e54-438a-818f-a42e169043b0}.xml b/FMOD Studio Project/SpaceToxin/Metadata/BankFolder/{af50da8f-0e54-438a-818f-a42e169043b0}.xml new file mode 100644 index 0000000..2066a26 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/BankFolder/{af50da8f-0e54-438a-818f-a42e169043b0}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/EffectPreset/{9a49ebd1-ef61-46d2-b1e2-7cdac28096bc}.xml b/FMOD Studio Project/SpaceToxin/Metadata/EffectPreset/{9a49ebd1-ef61-46d2-b1e2-7cdac28096bc}.xml new file mode 100644 index 0000000..39c2bc3 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/EffectPreset/{9a49ebd1-ef61-46d2-b1e2-7cdac28096bc}.xml @@ -0,0 +1,25 @@ + + + + + Spatializer mono + + + {da0f4023-cd28-4b34-8d35-dada6516c818} + + + {4fa08f3b-78bd-43e8-8ec8-505a4b929a34} + + + + + 330 + + + 450 + + + 2 + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/EffectPresetFolder/{da0f4023-cd28-4b34-8d35-dada6516c818}.xml b/FMOD Studio Project/SpaceToxin/Metadata/EffectPresetFolder/{da0f4023-cd28-4b34-8d35-dada6516c818}.xml new file mode 100644 index 0000000..094c164 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/EffectPresetFolder/{da0f4023-cd28-4b34-8d35-dada6516c818}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/EncodingSetting/{a9a45a25-7caf-4da6-98cf-39f41835eaa3}.xml b/FMOD Studio Project/SpaceToxin/Metadata/EncodingSetting/{a9a45a25-7caf-4da6-98cf-39f41835eaa3}.xml new file mode 100644 index 0000000..fd9daf2 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/EncodingSetting/{a9a45a25-7caf-4da6-98cf-39f41835eaa3}.xml @@ -0,0 +1,17 @@ + + + + + 3 + + + 37 + + + {db9d59ee-17e7-4953-a4ef-9de66040512a} + + + {db9d59ee-17e7-4953-a4ef-9de66040512a} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{14dcadc7-0dc9-4ce1-86c9-573168f4d2c1}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{14dcadc7-0dc9-4ce1-86c9-573168f4d2c1}.xml new file mode 100644 index 0000000..f247550 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{14dcadc7-0dc9-4ce1-86c9-573168f4d2c1}.xml @@ -0,0 +1,150 @@ + + + + + door_open + + + 2 + + + {aa6a849f-5fe4-499f-95a7-d29f1f7db9a2} + + + {157299af-eff7-494a-ac11-281e802c288d} + + + {2832a7d8-b79b-4843-809b-f1cf4cc26fb9} + + + {4fa0cba3-fef3-4606-8afc-97f2be1bf63b} + + + {6913fe90-f595-4722-b770-892915d34c06} + + + {6cef7c11-864e-4888-aca2-fc156994f2e2} + + + {d60d7160-7500-4612-8a4f-ba1f16eea955} + + + {dd7e61cb-ba1f-4540-b660-96e00ab281db} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {75753bc4-77d9-4efd-a9a4-7bbb3616d2a9} + + + + + {75753bc4-77d9-4efd-a9a4-7bbb3616d2a9} + + + + + {b41467ab-3f39-4a04-8501-ecaa28933477} + + + {4493e468-2c0b-487b-b4fa-acf76ba05654} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + 1 + + + 4 + + + + + + {fb3470db-941e-4ab9-8c74-74c6c5e1a1dc} + + + {d3eb4c3a-05ed-45ce-a205-abb7e53521f6} + + + + + {fb3470db-941e-4ab9-8c74-74c6c5e1a1dc} + + + + + {f4cba88b-14c3-4f4f-8c05-3003d4a66c9c} + + + {a7935acb-2a4e-46e2-9a4d-9207a07ec955} + + + {157299af-eff7-494a-ac11-281e802c288d} + + + + + {dfcb2180-05f4-4a3e-84dd-12b3f8b98d13} + + + + + + 1.1232653061224489 + + + -12 + + + {44e78851-7914-4253-ae5a-d3a81c7f2b7d} + + + + + -11.5 + + + Audio 1 + + + {c81e3dd3-45ea-4220-9954-b03aa16dad5f} + + + {b1d2fef0-2459-424d-8593-6d9d33b9dcaf} + + + {75753bc4-77d9-4efd-a9a4-7bbb3616d2a9} + + + + + {5f5d4441-6bbf-48ed-9e41-6a48ba291d73} + {50701797-5870-4d83-a946-c5ab7012a5f8} + + + + + + + {f9398955-104a-41d9-aa3e-a7c0f1096803} + + + + + + + 1 + + + {9a49ebd1-ef61-46d2-b1e2-7cdac28096bc} + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{1be24e63-cfe6-48c3-86ec-91e92695b739}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{1be24e63-cfe6-48c3-86ec-91e92695b739}.xml new file mode 100644 index 0000000..351ae89 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{1be24e63-cfe6-48c3-86ec-91e92695b739}.xml @@ -0,0 +1,151 @@ + + + + + main_theme + + + 1 + + + {1564d145-75ef-4d75-85f0-3211dee12820} + + + {12baea9a-dbde-460e-af2d-f91b0592a161} + + + {9844fa06-f75e-480b-b9bc-f62c538c65a3} + + + {36b94566-a6bd-428f-a624-1a468be085d1} + + + {e5a59535-1e6e-48eb-8052-76bbbdb4a44f} + + + {45f35f88-13cc-4b58-af23-16978b909d70} + + + {bcba29c7-69fd-4f1c-85e3-efd910e290ab} + + + {232e0651-08ec-4790-aa21-4da5e513a8c1} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {3b817b86-ba0e-4749-ae5f-cac1ffd884ab} + + + + + {3b817b86-ba0e-4749-ae5f-cac1ffd884ab} + + + + + {ac392033-56a9-491d-9a67-893f3f7f01ca} + + + {175a21fc-d294-4a03-9c9c-8c7c6a29a028} + + + {9d01b619-631f-4c67-9b33-264573323eed} + + + + + + + {2425c9d2-b975-40e8-baf0-8bf077322d1a} + + + {406bfbf7-2924-4ac5-a87d-8e256d5983b9} + + + + + {2425c9d2-b975-40e8-baf0-8bf077322d1a} + + + {b9e4bc47-8aac-4312-99be-05fb931e1e48} + + + + + {f940c326-19be-4ec5-a0bf-e6368f86b26b} + + + {ca8237e1-f355-472d-8c6d-867ed465c51b} + + + {12baea9a-dbde-460e-af2d-f91b0592a161} + + + + + {67518564-ffae-45e5-8480-1210929fffae} + + + + + + 376 + + + -12 + + + {813c1a24-ed3c-488c-8dc8-5d292a0a451c} + + + + + -12 + + + Audio 2 + + + {51afa36e-4aec-41d4-8817-b571d242f7a2} + + + {65381c44-263c-4966-a261-219ec725a9e5} + + + {3b817b86-ba0e-4749-ae5f-cac1ffd884ab} + + + + + 0 + + + 376.45252214093182 + + + {232e0651-08ec-4790-aa21-4da5e513a8c1} + + + {45f35f88-13cc-4b58-af23-16978b909d70} + + + + + {0a002647-6a5c-41d4-aa7c-3c3312bc4fd4} + + + + + + + {02f11bfa-bd6f-49a3-b538-5fc46105bde2} + + + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{263637b9-0a24-4fd6-b191-d0d3b9835fa0}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{263637b9-0a24-4fd6-b191-d0d3b9835fa0}.xml new file mode 100644 index 0000000..928f793 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{263637b9-0a24-4fd6-b191-d0d3b9835fa0}.xml @@ -0,0 +1,143 @@ + + + + + button_pressed + + + 2 + + + {aa6a849f-5fe4-499f-95a7-d29f1f7db9a2} + + + {4b72e411-76ee-4f97-a617-a7b6d8b2ccec} + + + {e0356d43-b93d-4562-9399-b32d35373ded} + + + {40954c36-ac92-44fc-8c55-dca5e050223e} + + + {d560eaaf-0801-4ece-833e-6384cb0b7ae3} + + + {db2e72a1-447c-44f1-8b6f-2a1da0d833fe} + + + {e88f2552-a11e-47ca-b8ae-9d439fbd05c5} + + + {fdc41733-134a-4583-8d2a-22d41be2c2fe} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {344d6df0-3be6-4b7e-9524-1df6b98fc426} + + + + + {344d6df0-3be6-4b7e-9524-1df6b98fc426} + + + + + {dc93eeed-e30c-443e-b766-773b067c14e6} + + + {b4fd1d00-6ce7-4d7f-a198-0871d552d48b} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + + + {2f162ebd-ce4d-497b-92ca-59522d51fc86} + + + {5d229139-06ea-4077-b169-933f669e6382} + + + + + {2f162ebd-ce4d-497b-92ca-59522d51fc86} + + + + + {e80f2921-ed6a-46ee-a7c4-f1208a2f008b} + + + {b853b4be-b9c0-4e6e-9348-4c54ad268603} + + + {4b72e411-76ee-4f97-a617-a7b6d8b2ccec} + + + + + {c552f4d5-8322-4f53-8bbd-9c7be75bd776} + + + + + + 0.2089795918367347 + + + -12 + + + {e4b08df5-a813-48c1-8752-c6781023a8bf} + + + + + -11.5 + + + Audio 1 + + + {9fa91313-e3d2-4df2-bb94-f7dcd95fb443} + + + {bd25c1c1-905d-43c5-91e9-062a654f8229} + + + {344d6df0-3be6-4b7e-9524-1df6b98fc426} + + + + + {19a30ccf-5ef9-4158-b0bc-dbf862e31b01} + {b0d15ee4-bb52-4270-9a28-9963580fcb81} + + + + + + + {d33ffdce-b535-40ee-8cd5-2da7735b913d} + + + + + + + 1 + + + {9a49ebd1-ef61-46d2-b1e2-7cdac28096bc} + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{33bcd925-7a96-4dc1-ab41-0e93f9c78a95}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{33bcd925-7a96-4dc1-ab41-0e93f9c78a95}.xml new file mode 100644 index 0000000..e749164 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{33bcd925-7a96-4dc1-ab41-0e93f9c78a95}.xml @@ -0,0 +1,134 @@ + + + + + intro + + + 1 + + + {1564d145-75ef-4d75-85f0-3211dee12820} + + + {de6bfe29-74ee-4914-b7fb-c4a560029ee4} + + + {f59447cf-2937-4bc9-b9ea-32f300f65545} + + + {7586845d-3eb9-4f32-8a2d-c6776312d08b} + + + {3e5a8ddb-7945-4d79-9236-2c6832d246ce} + + + {3806fead-74e3-454a-a2d4-94ffb72201c2} + + + {2d0348ec-7747-41b9-881c-7340f480ff63} + + + {275e69a6-e0de-4696-b150-6e15425e7dbf} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {c15bc9f1-3231-4c4e-9784-bf6042302168} + + + + + {c15bc9f1-3231-4c4e-9784-bf6042302168} + + + + + {e7dee9a1-83b1-424a-be22-83f7a9a79a43} + + + {7e518ef7-3011-40a1-9406-a02902c232fd} + + + {9d01b619-631f-4c67-9b33-264573323eed} + + + + + + + {0550ba89-b82f-4619-9357-8a685fe36510} + + + {c782d242-9fa8-46b7-97ae-810d4f35a0ca} + + + + + {0550ba89-b82f-4619-9357-8a685fe36510} + + + + + {488753dd-025d-4e4c-a486-e14efac3eb1c} + + + {af10239a-e0ae-4421-bb0f-45a2aacf08c8} + + + {de6bfe29-74ee-4914-b7fb-c4a560029ee4} + + + + + {155e5512-5cb7-457a-99bd-552175f9de28} + + + + + + 41.430204081632652 + + + -12 + + + {e5371900-cf28-45e7-9fba-574d6459cfbd} + + + + + -11.5 + + + Audio 1 + + + {27292eb2-de80-47a0-8151-292963a180ed} + + + {ba899da9-6666-4acc-8d67-581abd5458f0} + + + {c15bc9f1-3231-4c4e-9784-bf6042302168} + + + + + {36f9f8fc-edbb-4e45-9fdf-c03768b9b1f7} + + + + + + + {17d8a63e-f566-42d1-a181-7cfb8f0e2139} + + + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{4af5b57f-1dc2-4684-b547-cc8a9c0eb1a5}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{4af5b57f-1dc2-4684-b547-cc8a9c0eb1a5}.xml new file mode 100644 index 0000000..7bb0b80 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{4af5b57f-1dc2-4684-b547-cc8a9c0eb1a5}.xml @@ -0,0 +1,163 @@ + + + + + generator + + + 2 + + + {aa6a849f-5fe4-499f-95a7-d29f1f7db9a2} + + + {cc488cfe-ccf0-4019-b821-9d19801b50f8} + + + {4f748bd7-8469-44d1-bf07-df97dd79f523} + + + {beda0bc1-e665-422d-aebf-eae8bfabe428} + + + {dfc9a33a-8a3f-407a-8f07-092523027e42} + + + {787dc9d2-f23c-4859-a2b1-60a02d694201} + + + {75d34cff-0221-4723-b9b1-8e6bbf7167fe} + + + {aa3e10b7-c70e-4ff3-af11-52a943312592} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {34028dba-5dbe-4347-8a2e-c8982543eebb} + + + + + {34028dba-5dbe-4347-8a2e-c8982543eebb} + + + + + {c2a56bbc-c3d6-4e1c-b58b-96568320b11b} + + + {6a322b0d-2fd2-40c1-9d8e-f5c405591e5c} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + + + {b09aa18d-8b4d-41ae-a367-b11c7b660d11} + + + {96a85587-dd7f-4ff0-8708-b57f7b7e8b04} + + + + + {b09aa18d-8b4d-41ae-a367-b11c7b660d11} + + + {52d8369d-63d0-4272-9626-d91f9154a973} + + + + + {ada457c5-8968-43a1-b9be-71d03520bdcb} + + + {fba3fbc6-93c0-45ca-8aa6-3859931c77b2} + + + {cc488cfe-ccf0-4019-b821-9d19801b50f8} + + + + + {38757845-0b36-4ae5-8a68-26d979d41d5f} + + + + + + 11.499999999999998 + + + 1.5 + + + -12 + + + {5dae90c1-148c-4a72-a5d6-b2235a318111} + + + + + -11.5 + + + Audio 1 + + + {25fd16fa-e40c-41af-8793-98068fdfc509} + + + {02bcf992-944b-4d2d-9b46-8c9d46661817} + + + {34028dba-5dbe-4347-8a2e-c8982543eebb} + + + + + 0 + + + 11.499999999999998 + + + {aa3e10b7-c70e-4ff3-af11-52a943312592} + + + {787dc9d2-f23c-4859-a2b1-60a02d694201} + + + + + {da740210-5a76-4f6c-b3d5-9ba4d306fe3b} + {6b602611-4c6b-4d12-ae7c-6a990e8d3875} + + + + + + + {84610cfc-99f2-40e1-9ccf-7fae1f3d0912} + + + + + + + 1 + + + {9a49ebd1-ef61-46d2-b1e2-7cdac28096bc} + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{75d9bb63-5250-4143-a89e-ecb1a01954c9}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{75d9bb63-5250-4143-a89e-ecb1a01954c9}.xml new file mode 100644 index 0000000..e901f4e --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{75d9bb63-5250-4143-a89e-ecb1a01954c9}.xml @@ -0,0 +1,143 @@ + + + + + button_released + + + 2 + + + {aa6a849f-5fe4-499f-95a7-d29f1f7db9a2} + + + {cf15f631-81f5-4761-997a-fc06468866a8} + + + {643c2dca-ab07-425a-a162-94998777fafd} + + + {3738d7a6-1554-422f-9ed3-f9a37090756f} + + + {c473d98d-e883-4b94-aa41-461bfa29c362} + + + {14ec81bd-ec9f-4692-9efe-a399b57b9c81} + + + {3972ac08-feae-4137-a213-4cb6c8c5b420} + + + {4febc17d-b5ea-4e51-93a3-bcae3d09f804} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {8f936530-d4b3-400d-8a47-a9b80239a1a0} + + + + + {8f936530-d4b3-400d-8a47-a9b80239a1a0} + + + + + {6289c857-bf32-4e09-81a8-062a47928f5a} + + + {7f53391d-40d3-4ec7-970c-cd3c709ccad4} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + + + {89a4b53f-b92b-419d-a395-d3548629eb1a} + + + {06d9f45a-946b-4fc4-b79a-3e8fd1391d6a} + + + + + {89a4b53f-b92b-419d-a395-d3548629eb1a} + + + + + {c3291aca-398c-4b4e-8dfc-717d767719c1} + + + {b5f329bb-322a-44b0-8d1b-3f0f5849ed25} + + + {cf15f631-81f5-4761-997a-fc06468866a8} + + + + + {b8bb2465-cf3d-4f1d-abbf-9547fcc91f95} + + + + + + 0.15673469387755101 + + + -12 + + + {0b88089f-85fb-4ac4-bb00-1840b5f53041} + + + + + -11.5 + + + Audio 1 + + + {af4858b1-b288-4e33-b1fa-734e19b3db3a} + + + {2674cfab-b12c-4a50-a789-ce27a2593158} + + + {8f936530-d4b3-400d-8a47-a9b80239a1a0} + + + + + {719ad2b2-dd66-4417-b71b-af89a42e9eb8} + {7f371442-7583-490b-8c9c-3c3054ffbe68} + + + + + + + {c103f3fa-3566-488b-a72f-b7f8c076a172} + + + + + + + 1 + + + {9a49ebd1-ef61-46d2-b1e2-7cdac28096bc} + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{84f5785e-89ca-4529-ac1a-17acee8adc67}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{84f5785e-89ca-4529-ac1a-17acee8adc67}.xml new file mode 100644 index 0000000..8268791 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{84f5785e-89ca-4529-ac1a-17acee8adc67}.xml @@ -0,0 +1,173 @@ + + + + + second_theme + + + 1 + + + {1564d145-75ef-4d75-85f0-3211dee12820} + + + {0425861f-56b8-47d8-803d-919f6acd650b} + + + {ce24a70f-683a-446c-9019-6fa6b0e7b1bb} + + + {49c7eb7c-dbad-4308-955f-3272e6a79b8e} + + + {fd05c192-b992-421f-88fc-56a4f3dfce08} + + + {bf267213-477a-4e86-bc9f-f4502170e6d6} + {8b9f8205-9d54-4650-95d0-243647bba0c6} + {555cb08d-56f3-4c7f-93da-a20d4f85c6d8} + + + {bd350c48-d259-4101-b297-64bc78b3f4c5} + + + {370cfee3-b985-489b-b7e3-050cb682c9ed} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {f059b074-09f0-4b28-bd6a-a4eea0d8999e} + + + + + {f059b074-09f0-4b28-bd6a-a4eea0d8999e} + + + + + {871a97eb-8663-4e30-970a-0f05cd5954f5} + + + {578d2cea-9cf5-4d89-aea6-8e193effca73} + + + {9d01b619-631f-4c67-9b33-264573323eed} + + + + + + + + + {c7bfe4ae-7eb4-48cd-897c-3c5ea4c1ff7f} + + + {22e52b96-92d0-46a7-97d2-0b481c54fab1} + + + + + {c7bfe4ae-7eb4-48cd-897c-3c5ea4c1ff7f} + + + {20ca00b5-52be-4701-aa6f-5ab9a59c640a} + {083e3da3-f48a-4b6e-abb3-baa81f4c79e7} + + + + + {f83bddde-98aa-491c-a71c-8fbf3c2698c0} + + + {44119156-bc27-42f8-aa52-a2a4f9c7acc1} + + + {0425861f-56b8-47d8-803d-919f6acd650b} + + + + + {66f85cd0-a69d-4d27-bc2b-11fdf0648784} + + + + + + 188.9104496065568 + + + 0.86914223017771874 + + + -12 + + + {ebf90362-3269-473a-8ebc-13a5fd38d619} + + + + + -11.5 + + + Audio 3 + + + {78ddc828-dc99-4f7a-ba54-0c196435dcdc} + + + {63fa9d77-be3d-468d-9b97-ee8a7454c30b} + + + {f059b074-09f0-4b28-bd6a-a4eea0d8999e} + + + + + 0 + + + 145.5 + + + {370cfee3-b985-489b-b7e3-050cb682c9ed} + + + {bf267213-477a-4e86-bc9f-f4502170e6d6} + + + + + 0 + + + 181.03568299221757 + + + {370cfee3-b985-489b-b7e3-050cb682c9ed} + + + {555cb08d-56f3-4c7f-93da-a20d4f85c6d8} + + + + + {6ad89196-2fd6-450b-b790-c3e43f33313f} + + + + + + + {ee20bb09-23ce-4db1-afd5-da79d57aef4e} + + + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{896d541e-13ae-47ac-b653-3ed68704129e}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{896d541e-13ae-47ac-b653-3ed68704129e}.xml new file mode 100644 index 0000000..441ab7a --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{896d541e-13ae-47ac-b653-3ed68704129e}.xml @@ -0,0 +1,160 @@ + + + + + cough + + + 2 + + + {12a0a93b-02cd-4048-8593-e05fada66cb5} + + + {6e453e9f-60f8-46a1-8508-4a2101fd4140} + + + {e5be9bac-2bee-498c-9fbd-26cb20afb4a2} + + + {52e9d6be-cc7c-4812-8e1f-0b1ebbcc5561} + + + {7cf7c845-e624-47b0-898a-f1caec69f814} + + + {e0e7d421-5e70-4084-9588-046bf399a50f} + + + {1daa395a-e26f-4c6f-99e9-aa640b280794} + + + {4fd36b38-73d7-4e70-aee6-1803002a2b7f} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {2e104258-04a7-4f7f-bb29-f7dc3a5f6ca4} + + + + + {2e104258-04a7-4f7f-bb29-f7dc3a5f6ca4} + + + + + {f85ffd69-1fe7-43b0-b442-ee17c72c267e} + + + {53610b2a-b59f-472a-acf0-bb296ab0da20} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + + + {e373b685-c344-4b3a-b926-540eceea4d8e} + + + {41c9d565-844d-43f6-800e-e2aad407b520} + + + + + {e373b685-c344-4b3a-b926-540eceea4d8e} + + + + + {a52444b6-44be-4952-b4ad-a9c8e8724424} + + + {e3c66830-fea4-42de-92d1-c41170228663} + + + {6e453e9f-60f8-46a1-8508-4a2101fd4140} + + + + + {986a8434-7f61-4801-9d48-2431060bf064} + + + + + + 8 + + + -12 + + + {ee4e1127-fe29-4213-ad26-89e092951b59} + {c3140524-eaff-4b7d-b567-cd4ae1a70423} + {8e63484d-fe7f-4068-988e-842cb4f74a1e} + + + + + -12 + + + Audio 1 + + + {a67bb00b-02f6-460e-9dc3-1a5d864ac558} + + + {42b0b118-5eb8-4539-ab99-300dc5db6f7b} + + + {2e104258-04a7-4f7f-bb29-f7dc3a5f6ca4} + + + + + {34e33a89-ccfb-40ed-8bf7-21b8d6fb721d} + {758d21d6-20a8-49d7-b476-35253469ffe4} + + + + + + + {ee6f0105-7acb-4418-8834-8cf2930db900} + + + + + {df858353-3e98-4caf-be72-05bf28b9ad68} + + + + + {7e93a537-706a-44b2-bfd3-3eb98932f902} + + + + + {801acb82-682a-4f70-9eb0-517fc88e38dd} + + + + + + + 1 + + + {9a49ebd1-ef61-46d2-b1e2-7cdac28096bc} + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{a9140383-6f7e-47e6-a2c9-d57eba7efb3e}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{a9140383-6f7e-47e6-a2c9-d57eba7efb3e}.xml new file mode 100644 index 0000000..94e3208 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{a9140383-6f7e-47e6-a2c9-d57eba7efb3e}.xml @@ -0,0 +1,143 @@ + + + + + button_deactivated + + + 2 + + + {aa6a849f-5fe4-499f-95a7-d29f1f7db9a2} + + + {a2da2d49-fa0d-46d6-a443-e8d61a2a663a} + + + {73a3ea9a-906c-47cd-856b-603e308ff89b} + + + {e5aa8a27-b6a6-4b64-84f5-0c69a66ecd4e} + + + {6ba9f0f0-aac6-45da-b72e-add333c68205} + + + {93691292-4a4b-4e83-9314-2ecad356c00f} + + + {db540c95-2384-4a1e-94d6-7aa395162a5a} + + + {dacbb15e-28bd-47e5-9489-7a3eca504856} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {080bedf8-429b-4853-9720-e6808cab51ff} + + + + + {080bedf8-429b-4853-9720-e6808cab51ff} + + + + + {8444a2fd-7317-42c5-991b-f40a0b2711fd} + + + {dbe0da8c-06ae-4349-876b-8b0d01c2d323} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + + + {672b669e-421b-4fb5-9c57-5643811579b1} + + + {0c8c0b5b-88d6-45b8-b219-b89029681bd2} + + + + + {672b669e-421b-4fb5-9c57-5643811579b1} + + + + + {fe6e7afa-801f-4cbb-b610-fc4efa3a0e9c} + + + {51784bcd-bbf1-49f1-a43d-f0ff8bad33b0} + + + {a2da2d49-fa0d-46d6-a443-e8d61a2a663a} + + + + + {49ddc7c1-9b60-4086-9ded-a2db1c346ac9} + + + + + + 0.39183673469387753 + + + -12 + + + {b93078f3-337e-49ff-96c7-3712fd375c8a} + + + + + -11.5 + + + Audio 1 + + + {34842e25-22bc-41a9-83a8-018e7c9fa54e} + + + {182fcede-d296-4e61-acd3-cfe9d83ebc43} + + + {080bedf8-429b-4853-9720-e6808cab51ff} + + + + + {2f94b797-b916-4b0a-b219-a6f90c1df01b} + {b61ff167-72ba-44d4-82ae-f9efb9784d32} + + + + + + + {c24bd40e-4984-4760-8b23-5d9cd42f0d64} + + + + + + + 1 + + + {9a49ebd1-ef61-46d2-b1e2-7cdac28096bc} + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Event/{f565b6b8-2b7b-476f-9eca-d2835a143b25}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Event/{f565b6b8-2b7b-476f-9eca-d2835a143b25}.xml new file mode 100644 index 0000000..99ea682 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Event/{f565b6b8-2b7b-476f-9eca-d2835a143b25}.xml @@ -0,0 +1,180 @@ + + + + + door_closed + + + 2 + + + {aa6a849f-5fe4-499f-95a7-d29f1f7db9a2} + + + {6e1ab12c-7fff-4f73-979f-391da88df1a7} + + + {4e25fd00-26d8-420c-9cc8-951e91ce556a} + + + {5e5e20ce-7967-42b5-8ec7-d8e3c575751c} + + + {2a14ca52-434f-435c-904c-ca642c0fc8d4} + + + {aa670f9f-d6c3-43c4-b439-040b39754bd1} + + + {62a98267-96d0-46ff-bcf3-af01282d3b9e} + + + {653ded21-d442-49f2-9fba-653dfd2a3e54} + + + {f2e5011e-791e-468c-a326-5ae894fd4a72} + + + + + {0a2e71e7-6405-4bb3-95e8-2973d07d956d} + + + + + {0a2e71e7-6405-4bb3-95e8-2973d07d956d} + + + + + {8afe82a5-fb36-4656-a388-8517f687b7c6} + + + {e4b33639-d1ef-4ac1-bb81-1120d1be3d80} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + 1 + + + 4 + + + + + + {e5a801d1-c94f-430f-bfb3-b45f454b15f4} + + + {e737a580-220e-4f63-9463-5a98778e02c1} + + + + + {e5a801d1-c94f-430f-bfb3-b45f454b15f4} + + + + + {b91994e0-6277-4a3d-b2a0-1d107e509a4d} + + + {b5e84679-c5c4-4695-9281-37264ef81775} + + + {6e1ab12c-7fff-4f73-979f-391da88df1a7} + + + + + {0437f9df-755b-435e-aea4-ef795a2c52fb} + + + + + + 0.99321986907970716 + + + -12 + + + {be8d58dc-16fc-4b10-8ea4-33bd840c0dfb} + + + {28d3666f-8756-47f8-bcba-a78fdf9f375e} + + + + + -12 + + + Audio 1 + + + {cbcaac7a-8cc2-4a3c-8974-cfae82767971} + + + {1f6a7ea3-4a13-4906-900f-868db7dd160a} + + + {0a2e71e7-6405-4bb3-95e8-2973d07d956d} + + + + + {466dda6a-e24c-4e69-9cf2-3a691e5d544a} + {2840d4db-e373-4572-bd65-9479fd7d6a59} + + + + + + + {28b4632b-4983-4f79-8a78-4806679f88e0} + + + {faa47a1b-2e0f-4329-87d9-cb19a9ed75df} + + + + + {ebc137f9-dde7-421e-a37f-fc8af48e041a} + + + + + + + 1 + + + {9a49ebd1-ef61-46d2-b1e2-7cdac28096bc} + + + + + 0.91231237966884848 + + + 1 + + + 0.171348602 + + + + + 0.99321986907970716 + + + 0 + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{12a0a93b-02cd-4048-8593-e05fada66cb5}.xml b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{12a0a93b-02cd-4048-8593-e05fada66cb5}.xml new file mode 100644 index 0000000..a0c48de --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{12a0a93b-02cd-4048-8593-e05fada66cb5}.xml @@ -0,0 +1,11 @@ + + + + + player + + + {e6808e1e-4d01-4155-a1c1-d4ea0af1df76} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{1564d145-75ef-4d75-85f0-3211dee12820}.xml b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{1564d145-75ef-4d75-85f0-3211dee12820}.xml new file mode 100644 index 0000000..70eada3 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{1564d145-75ef-4d75-85f0-3211dee12820}.xml @@ -0,0 +1,11 @@ + + + + + music + + + {e6808e1e-4d01-4155-a1c1-d4ea0af1df76} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{aa6a849f-5fe4-499f-95a7-d29f1f7db9a2}.xml b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{aa6a849f-5fe4-499f-95a7-d29f1f7db9a2}.xml new file mode 100644 index 0000000..6174a1a --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{aa6a849f-5fe4-499f-95a7-d29f1f7db9a2}.xml @@ -0,0 +1,11 @@ + + + + + game + + + {e6808e1e-4d01-4155-a1c1-d4ea0af1df76} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{e6808e1e-4d01-4155-a1c1-d4ea0af1df76}.xml b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{e6808e1e-4d01-4155-a1c1-d4ea0af1df76}.xml new file mode 100644 index 0000000..6256030 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/EventFolder/{e6808e1e-4d01-4155-a1c1-d4ea0af1df76}.xml @@ -0,0 +1,8 @@ + + + + + Master + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Group/{9d01b619-631f-4c67-9b33-264573323eed}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Group/{9d01b619-631f-4c67-9b33-264573323eed}.xml new file mode 100644 index 0000000..572417a --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Group/{9d01b619-631f-4c67-9b33-264573323eed}.xml @@ -0,0 +1,30 @@ + + + + + music + + + {223e649e-f7ac-4260-b8f5-f6381e81bd9c} + + + {caefdf95-33b2-4705-8ef1-1d7b897dae4c} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + {e1592219-1f92-47fa-8c01-585be80e75d2} + {98825880-518f-4e98-b432-b11a9f95b52a} + + + + + + + 7 + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Master.xml b/FMOD Studio Project/SpaceToxin/Metadata/Master.xml new file mode 100644 index 0000000..a338726 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Master.xml @@ -0,0 +1,31 @@ + + + + + Master Bus + + + {1c856209-fb00-48e2-a393-7f3d2fcef93c} + + + {73e8db7a-143f-4af8-91bf-372c19d43b50} + + + {71608c4c-0dc2-438b-8794-e0cff43cedf7} + + + + + {a764716b-c840-47db-96b7-1f0bf430b0de} + + + + + 2 + + + true + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Mixer.xml b/FMOD Studio Project/SpaceToxin/Metadata/Mixer.xml new file mode 100644 index 0000000..3357eb9 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Mixer.xml @@ -0,0 +1,11 @@ + + + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + {d3bb688c-ac4b-4c8d-9c31-713c3c7428e7} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/ParameterPresetFolder/{83d6ee4a-b9ce-45a6-9f61-66e2c210f728}.xml b/FMOD Studio Project/SpaceToxin/Metadata/ParameterPresetFolder/{83d6ee4a-b9ce-45a6-9f61-66e2c210f728}.xml new file mode 100644 index 0000000..7f5f5d2 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/ParameterPresetFolder/{83d6ee4a-b9ce-45a6-9f61-66e2c210f728}.xml @@ -0,0 +1,4 @@ + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Platform/{db9d59ee-17e7-4953-a4ef-9de66040512a}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Platform/{db9d59ee-17e7-4953-a4ef-9de66040512a}.xml new file mode 100644 index 0000000..032298c --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Platform/{db9d59ee-17e7-4953-a4ef-9de66040512a}.xml @@ -0,0 +1,17 @@ + + + + + 0 + + + Desktop + + + Desktop + + + 5 + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Return/{a40bdd6e-e5fc-4d75-aa70-151881f68e94}.xml b/FMOD Studio Project/SpaceToxin/Metadata/Return/{a40bdd6e-e5fc-4d75-aa70-151881f68e94}.xml new file mode 100644 index 0000000..e3e7846 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Return/{a40bdd6e-e5fc-4d75-aa70-151881f68e94}.xml @@ -0,0 +1,39 @@ + + + + + 2 + + + true + + + Reverb + + + {82b65832-2d69-46d1-86fe-22719d2613de} + + + {42fb1a62-19b1-4f7c-a8b7-bc63507b0c17} + + + {6fb91523-6b88-4fdf-8ed5-772f35c1b68b} + + + + + {08403e8e-eedc-46eb-8ab2-a715ba760bb6} + {81e97d15-2502-493e-b212-b2e2e38d0cdc} + + + + + + 0 + + + -80 + + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/SnapshotGroup/{d3bb688c-ac4b-4c8d-9c31-713c3c7428e7}.xml b/FMOD Studio Project/SpaceToxin/Metadata/SnapshotGroup/{d3bb688c-ac4b-4c8d-9c31-713c3c7428e7}.xml new file mode 100644 index 0000000..86cfaeb --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/SnapshotGroup/{d3bb688c-ac4b-4c8d-9c31-713c3c7428e7}.xml @@ -0,0 +1,8 @@ + + + + + {71608c4c-0dc2-438b-8794-e0cff43cedf7} + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Tags.xml b/FMOD Studio Project/SpaceToxin/Metadata/Tags.xml new file mode 100644 index 0000000..3270a43 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Tags.xml @@ -0,0 +1,8 @@ + + + + + Master + + + diff --git a/FMOD Studio Project/SpaceToxin/Metadata/Workspace.xml b/FMOD Studio Project/SpaceToxin/Metadata/Workspace.xml new file mode 100644 index 0000000..e471b83 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/Metadata/Workspace.xml @@ -0,0 +1,32 @@ + + + + + ../Assets/FMOD Banks + + + {e6808e1e-4d01-4155-a1c1-d4ea0af1df76} + + + {7dcbc5ea-0868-486e-8566-66ae48424e57} + + + {da0f4023-cd28-4b34-8d35-dada6516c818} + + + {83d6ee4a-b9ce-45a6-9f61-66e2c210f728} + + + {af50da8f-0e54-438a-818f-a42e169043b0} + + + {9c21eefb-44d3-4962-8400-26d11534866e} + + + {71608c4c-0dc2-438b-8794-e0cff43cedf7} + + + {db9d59ee-17e7-4953-a4ef-9de66040512a} + + + diff --git a/FMOD Studio Project/SpaceToxin/SpaceToxin.fspro b/FMOD Studio Project/SpaceToxin/SpaceToxin.fspro new file mode 100644 index 0000000..bd77b45 --- /dev/null +++ b/FMOD Studio Project/SpaceToxin/SpaceToxin.fspro @@ -0,0 +1,2 @@ + + diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 8534bb0..955ad7e 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -6,27 +6,27 @@ EditorBuildSettings: serializedVersion: 2 m_Scenes: - enabled: 1 - path: Assets/Scenes/Intro.unity + path: Assets/_NOT FMOD/Scenes/Intro.unity guid: 5054077c69aa255469df7dea7cf83edc - enabled: 1 - path: Assets/Scenes/Level1.unity + path: Assets/_NOT FMOD/Scenes/Level1.unity guid: da0592003ef5bb94f85b1ae2f5b7919b - enabled: 1 - path: Assets/Scenes/Level2.unity + path: Assets/_NOT FMOD/Scenes/Level2.unity guid: b8c63fb22ae93c74e87ee514f6bbccfe - enabled: 1 - path: Assets/Scenes/Level3.unity + path: Assets/_NOT FMOD/Scenes/Level3.unity guid: 59161e35b98eabb4c9c787827d9b5c1e - enabled: 1 - path: Assets/Scenes/Level4.unity + path: Assets/_NOT FMOD/Scenes/Level4.unity guid: 309e4f7b1e8ae584eb8ce2694359344f - enabled: 1 - path: Assets/Scenes/Level5.unity + path: Assets/_NOT FMOD/Scenes/Level5.unity guid: 70d6ae023288ae64593b318bfa087d26 - enabled: 1 - path: Assets/Scenes/Level6.unity + path: Assets/_NOT FMOD/Scenes/Level6.unity guid: 15efb00ee86ec054ba3aa7b56db100d5 - enabled: 1 - path: Assets/Scenes/Outro.unity + path: Assets/_NOT FMOD/Scenes/Outro.unity guid: 1b04c854900c0344993d23d7a5834e9e m_configObjects: {} diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 62410b5..4053174 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1 +1 @@ -m_EditorVersion: 2018.2.15f1 +m_EditorVersion: 2018.2.17f1 diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index 33b56c6..bed71ee 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -29,6 +29,12 @@ QualitySettings: vSyncCount: 0 lodBias: 0.3 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 4 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -57,6 +63,12 @@ QualitySettings: vSyncCount: 0 lodBias: 0.4 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 16 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -85,6 +97,12 @@ QualitySettings: vSyncCount: 1 lodBias: 0.7 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 64 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -113,6 +131,12 @@ QualitySettings: vSyncCount: 1 lodBias: 1 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 256 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -141,6 +165,12 @@ QualitySettings: vSyncCount: 1 lodBias: 1.5 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 1024 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 @@ -169,23 +199,15 @@ QualitySettings: vSyncCount: 1 lodBias: 2 maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 particleRaycastBudget: 4096 asyncUploadTimeSlice: 2 asyncUploadBufferSize: 4 resolutionScalingFixedDPIFactor: 1 excludedTargetPlatforms: [] - m_PerPlatformDefaultQuality: - Android: 2 - Nintendo 3DS: 5 - Nintendo Switch: 5 - PS4: 5 - PSM: 5 - PSP2: 2 - Standalone: 5 - Tizen: 2 - WebGL: 3 - WiiU: 5 - Windows Store Apps: 5 - XboxOne: 5 - iPhone: 2 - tvOS: 2 + m_PerPlatformDefaultQuality: {}