From 43a7dff3c863e2b512c94409bb18aa6428ef3968 Mon Sep 17 00:00:00 2001 From: chwan1 Date: Wed, 20 Nov 2019 12:46:08 +0800 Subject: [PATCH] update --- .../Assets/Frozen/Frozen.unity | 267 +- .../Frozen/FrozenDayParticleUniforms.asset | 30 - .../FrozenDayParticleUniforms.asset.meta | 10 - .../Frozen/FrozenNightParticleUniforms.asset | 30 - .../FrozenNightParticleUniforms.asset.meta | 10 - .../Frozen/FrozenParticleUniforms.asset | 30 - .../Frozen/FrozenParticleUniforms.asset.meta | 10 - .../Assets/Frozen/ParticleUniforms.asset | 30 - .../Assets/Frozen/ParticleUniforms.asset.meta | 10 - .../Assets/Frozen/Script/SceneController.cs | 12 +- Unity-19050-05-BallPool/Assets/Klak.meta | 2 - .../Assets/ParticleWorks.meta | 10 - .../Assets/ParticleWorks/CosineGradient.asset | 16 - .../ParticleWorks/CosineGradient.asset.meta | 10 - .../Assets/ParticleWorks/Material.meta | 10 - .../Assets/ParticleWorks/Material/Ground.mat | 76 - .../ParticleWorks/Material/Ground.mat.meta | 10 - .../Assets/ParticleWorks/Material/Mirror.mat | 76 - .../ParticleWorks/Material/Mirror.mat.meta | 8 - .../Material/ParticleViewerInstanced.mat | 78 - .../Material/ParticleViewerInstanced.mat.meta | 10 - .../Material/ParticleViewerMesh.mat | 78 - .../Material/ParticleViewerMesh.mat.meta | 10 - .../Material/ParticleViewerProcedural.mat | 77 - .../ParticleViewerProcedural.mat.meta | 10 - .../Assets/ParticleWorks/ParticleDance.unity | 1287 ------ .../ParticleWorks/ParticleDance.unity.meta | 7 - .../ParticleWorks/ParticleUniforms.asset | 30 - .../ParticleWorks/ParticleUniforms.asset.meta | 10 - .../ParticleUniformsForMeshVertex.asset | 30 - .../ParticleUniformsForMeshVertex.asset.meta | 10 - .../Assets/ParticleWorks/ParticleWorks.unity | 1017 ---- .../ParticleWorks/ParticleWorks.unity.meta | 9 - .../Assets/ParticleWorks/Script.meta | 10 - .../Script/BlendedCosineGradient.cs | 25 - .../Script/BlendedCosineGradient.cs.meta | 13 - .../Assets/ParticleWorks/Script/Defines.cs | 17 - .../ParticleWorks/Script/Defines.cs.meta | 13 - .../ParticleWorks/Script/ExtensionMethods.cs | 24 - .../Script/ExtensionMethods.cs.meta | 13 - .../ParticleWorks/Script/MeshVertexCollect.cs | 91 - .../Script/MeshVertexCollect.cs.meta | 11 - .../Script/ParticleUniformBridge.cs | 29 - .../Script/ParticleUniformBridge.cs.meta | 11 - .../ParticleWorks/Script/ParticleUniforms.cs | 63 - .../Script/ParticleUniforms.cs.meta | 13 - .../ParticleWorks/Script/ParticleUpdater.cs | 105 - .../Script/ParticleUpdater.cs.meta | 13 - .../ParticleWorks/Script/ParticleViewer.cs | 72 - .../Script/ParticleViewer.cs.meta | 13 - .../Script/ParticleViewerInstanced.cs | 41 - .../Script/ParticleViewerInstanced.cs.meta | 13 - .../Script/ParticleViewerMesh.cs | 125 - .../Script/ParticleViewerMesh.cs.meta | 14 - .../Script/ParticleViewerProcedural.cs | 48 - .../Script/ParticleViewerProcedural.cs.meta | 13 - .../ParticleWorks/Script/ParticleWorks.cs | 17 - .../Script/ParticleWorks.cs.meta | 13 - .../ParticleWorks/Script/StructuredBuffer.cs | 72 - .../Script/StructuredBuffer.cs.meta | 13 - .../Script/UniformBlendedStructuredBuffer.cs | 28 - .../UniformBlendedStructuredBuffer.cs.meta | 13 - .../Script/UniformStructuredBuffer.cs | 81 - .../Script/UniformStructuredBuffer.cs.meta | 13 - .../Assets/ParticleWorks/Script/Utilities.cs | 214 - .../ParticleWorks/Script/Utilities.cs.meta | 13 - .../Assets/ParticleWorks/Shader.meta | 10 - .../Assets/ParticleWorks/Shader/Inc.meta | 10 - .../Shader/Inc/ColorConvert.cginc | 44 - .../Shader/Inc/ColorConvert.cginc.meta | 10 - .../ParticleWorks/Shader/Inc/Defines.cginc | 17 - .../Shader/Inc/Defines.cginc.meta | 10 - .../ParticleWorks/Shader/Inc/Math.cginc | 231 - .../ParticleWorks/Shader/Inc/Math.cginc.meta | 10 - .../Shader/MeshVertexCollect.compute | 42 - .../Shader/MeshVertexCollect.compute.meta | 8 - .../Assets/ParticleWorks/Shader/Noise.meta | 10 - .../Shader/Noise/cellular2D.cginc | 55 - .../Shader/Noise/cellular2D.cginc.meta | 10 - .../Shader/Noise/cellular2x2.cginc | 50 - .../Shader/Noise/cellular2x2.cginc.meta | 10 - .../Shader/Noise/cellular2x2x2.cginc | 67 - .../Shader/Noise/cellular2x2x2.cginc.meta | 10 - .../Shader/Noise/cellular3D.cginc | 177 - .../Shader/Noise/cellular3D.cginc.meta | 10 - .../Shader/Noise/classicnoise2D.cginc | 101 - .../Shader/Noise/classicnoise2D.cginc.meta | 10 - .../Shader/Noise/classicnoise3D.cginc | 160 - .../Shader/Noise/classicnoise3D.cginc.meta | 10 - .../Shader/Noise/classicnoise4D.cginc | 290 -- .../Shader/Noise/classicnoise4D.cginc.meta | 10 - .../ParticleWorks/Shader/Noise/noise2D.cginc | 66 - .../Shader/Noise/noise2D.cginc.meta | 10 - .../ParticleWorks/Shader/Noise/noise3D.cginc | 93 - .../Shader/Noise/noise3D.cginc.meta | 10 - .../Shader/Noise/noise3Dgrad.cginc | 101 - .../Shader/Noise/noise3Dgrad.cginc.meta | 10 - .../ParticleWorks/Shader/Noise/noise4D.cginc | 110 - .../Shader/Noise/noise4D.cginc.meta | 10 - .../Shader/Noise/noiseMath.cginc | 63 - .../Shader/Noise/noiseMath.cginc.meta | 10 - .../Shader/Noise/psrdnoise2D.cginc | 459 -- .../Shader/Noise/psrdnoise2D.cginc.meta | 10 - .../Shader/ParticleUniforms.cginc | 29 - .../Shader/ParticleUniforms.cginc.meta | 10 - .../Shader/ParticleUpdate.compute | 146 - .../Shader/ParticleUpdate.compute.meta | 10 - .../Shader/ParticleViewerInstanced.shader | 80 - .../ParticleViewerInstanced.shader.meta | 10 - .../Shader/ParticleViewerMesh.shader | 72 - .../Shader/ParticleViewerMesh.shader.meta | 10 - .../Shader/ParticleViewerUnlitParticle.shader | 79 - .../ParticleViewerUnlitParticle.shader.meta | 10 - .../Shader/ParticleViewerUnlitPoint.shader | 110 - .../ParticleViewerUnlitPoint.shader.meta | 10 - .../Shader/VertexBufferUpdate.compute | 36 - .../Shader/VertexBufferUpdate.compute.meta | 8 - .../UnityUtils/3rdParty/KinectView.meta | 9 - .../3rdParty/KinectView/MainScene.unity | 976 ---- .../3rdParty/KinectView/MainScene.unity.meta | 8 - .../3rdParty/KinectView/Materials.meta | 9 - .../KinectView/Materials/BoneMaterial.mat | 34 - .../Materials/BoneMaterial.mat.meta | 4 - .../3rdParty/KinectView/Scripts.meta | 9 - .../KinectView/Scripts/BodySourceManager.cs | 70 - .../Scripts/BodySourceManager.cs.meta | 8 - .../KinectView/Scripts/BodySourceView.cs | 185 - .../KinectView/Scripts/BodySourceView.cs.meta | 8 - .../KinectView/Scripts/ColorSourceManager.cs | 78 - .../Scripts/ColorSourceManager.cs.meta | 8 - .../KinectView/Scripts/ColorSourceView.cs | 30 - .../Scripts/ColorSourceView.cs.meta | 8 - .../KinectView/Scripts/DepthSourceManager.cs | 59 - .../Scripts/DepthSourceManager.cs.meta | 8 - .../KinectView/Scripts/DepthSourceView.cs | 252 - .../Scripts/DepthSourceView.cs.meta | 8 - .../KinectView/Scripts/DisableOnStart.cs | 11 - .../KinectView/Scripts/DisableOnStart.cs.meta | 8 - .../Scripts/InfraredSourceManager.cs | 85 - .../Scripts/InfraredSourceManager.cs.meta | 8 - .../KinectView/Scripts/InfraredSourceView.cs | 29 - .../Scripts/InfraredSourceView.cs.meta | 8 - .../KinectView/Scripts/MultiSourceManager.cs | 100 - .../Scripts/MultiSourceManager.cs.meta | 8 - .../UnityUtils/3rdParty/SplineEditor.meta | 9 - .../3rdParty/SplineEditor/Editor.meta | 9 - .../SplineEditor/Editor/BezierSplineEditor.cs | 309 -- .../Editor/BezierSplineEditor.cs.meta | 8 - .../3rdParty/SplineEditor/Editor/ToolsUtil.cs | 19 - .../SplineEditor/Editor/ToolsUtil.cs.meta | 8 - .../SplineEditor/Editor/UniSplineEditor.cs | 226 - .../Editor/UniSplineEditor.cs.meta | 8 - .../3rdParty/SplineEditor/Scripts.meta | 9 - .../SplineEditor/Scripts/BaseSpline.cs | 535 --- .../SplineEditor/Scripts/BaseSpline.cs.meta | 8 - .../Scripts/BezierSplineComponent.cs | 552 --- .../Scripts/BezierSplineComponent.cs.meta | 8 - .../Scripts/BezierSplinePartialTest.cs | 28 - .../Scripts/BezierSplinePartialTest.cs.meta | 8 - .../SplineEditor/Scripts/BezierSplineTest.cs | 37 - .../Scripts/BezierSplineTest.cs.meta | 8 - .../3rdParty/SplineEditor/Scripts/Ease.cs | 1175 ----- .../SplineEditor/Scripts/Ease.cs.meta | 8 - .../Scripts/UniSplineComponent.cs | 503 -- .../Scripts/UniSplineComponent.cs.meta | 8 - .../SplineEditor/Scripts/UniSplineTest.cs | 37 - .../Scripts/UniSplineTest.cs.meta | 8 - .../UnityUtils/3rdParty/Standard Assets.meta | 9 - .../3rdParty/Standard Assets/Editor.meta | 9 - .../Standard Assets/Editor/ImageEffects.meta | 6 - .../Editor/ImageEffects/AntialiasingEditor.cs | 75 - .../ImageEffects/AntialiasingEditor.cs.meta | 9 - .../ImageEffects/BloomAndFlaresEditor.cs | 161 - .../ImageEffects/BloomAndFlaresEditor.cs.meta | 9 - .../Editor/ImageEffects/BloomEditor.cs | 166 - .../Editor/ImageEffects/BloomEditor.cs.meta | 9 - .../ImageEffects/CameraMotionBlurEditor.cs | 99 - .../CameraMotionBlurEditor.cs.meta | 9 - .../ColorCorrectionCurvesEditor.cs | 124 - .../ColorCorrectionCurvesEditor.cs.meta | 9 - .../ColorCorrectionLookupEditor.cs | 90 - .../ColorCorrectionLookupEditor.cs.meta | 9 - .../ImageEffects/CreaseShadingEditor.cs | 60 - .../ImageEffects/CreaseShadingEditor.cs.meta | 12 - .../Editor/ImageEffects/DepthOfFieldEditor.cs | 161 - .../ImageEffects/DepthOfFieldEditor.cs.meta | 9 - .../ImageEffects/EdgeDetectionEditor.cs | 72 - .../ImageEffects/EdgeDetectionEditor.cs.meta | 9 - .../ImageEffects/NoiseAndGrainEditor.cs | 111 - .../ImageEffects/NoiseAndGrainEditor.cs.meta | 9 - .../Editor/ImageEffects/SunShaftsEditor.cs | 105 - .../ImageEffects/SunShaftsEditor.cs.meta | 9 - .../Editor/ImageEffects/TonemappingEditor.cs | 85 - .../ImageEffects/TonemappingEditor.cs.meta | 9 - .../VignetteAndChromaticAberrationEditor.cs | 62 - ...gnetteAndChromaticAberrationEditor.cs.meta | 9 - .../Editor/KinectCopyPluginDataHelper.cs | 70 - .../Editor/KinectCopyPluginDataHelper.cs.meta | 10 - .../3rdParty/Standard Assets/Effects.meta | 6 - .../Standard Assets/Effects/ImageEffects.meta | 6 - .../Effects/ImageEffects/Scripts.meta | 6 - .../ImageEffects/Scripts/Antialiasing.cs | 177 - .../ImageEffects/Scripts/Antialiasing.cs.meta | 16 - .../Effects/ImageEffects/Scripts/Bloom.cs | 363 -- .../ImageEffects/Scripts/Bloom.cs.meta | 17 - .../ImageEffects/Scripts/BloomAndFlares.cs | 318 -- .../Scripts/BloomAndFlares.cs.meta | 22 - .../ImageEffects/Scripts/BloomOptimized.cs | 109 - .../Scripts/BloomOptimized.cs.meta | 10 - .../Effects/ImageEffects/Scripts/Blur.cs | 108 - .../Effects/ImageEffects/Scripts/Blur.cs.meta | 9 - .../ImageEffects/Scripts/BlurOptimized.cs | 93 - .../Scripts/BlurOptimized.cs.meta | 10 - .../ImageEffects/Scripts/CameraMotionBlur.cs | 408 -- .../Scripts/CameraMotionBlur.cs.meta | 14 - .../Scripts/ColorCorrectionCurves.cs | 181 - .../Scripts/ColorCorrectionCurves.cs.meta | 15 - .../Scripts/ColorCorrectionLookup.cs | 130 - .../Scripts/ColorCorrectionLookup.cs.meta | 11 - .../Scripts/ColorCorrectionRamp.cs | 17 - .../Scripts/ColorCorrectionRamp.cs.meta | 10 - .../ImageEffects/Scripts/ContrastEnhance.cs | 80 - .../Scripts/ContrastEnhance.cs.meta | 13 - .../ImageEffects/Scripts/ContrastStretch.cs | 200 - .../Scripts/ContrastStretch.cs.meta | 12 - .../ImageEffects/Scripts/CreaseShading.cs | 82 - .../Scripts/CreaseShading.cs.meta | 12 - .../ImageEffects/Scripts/DepthOfField.cs | 387 -- .../ImageEffects/Scripts/DepthOfField.cs.meta | 13 - .../ImageEffects/Scripts/EdgeDetection.cs | 89 - .../Scripts/EdgeDetection.cs.meta | 10 - .../Effects/ImageEffects/Scripts/Fisheye.cs | 46 - .../ImageEffects/Scripts/Fisheye.cs.meta | 10 - .../Effects/ImageEffects/Scripts/GlobalFog.cs | 100 - .../ImageEffects/Scripts/GlobalFog.cs.meta | 10 - .../Effects/ImageEffects/Scripts/Grayscale.cs | 21 - .../ImageEffects/Scripts/Grayscale.cs.meta | 9 - .../ImageEffects/Scripts/ImageEffectBase.cs | 55 - .../Scripts/ImageEffectBase.cs.meta | 8 - .../ImageEffects/Scripts/ImageEffects.cs | 42 - .../ImageEffects/Scripts/ImageEffects.cs.meta | 17 - .../ImageEffects/Scripts/MotionBlur.cs | 71 - .../ImageEffects/Scripts/MotionBlur.cs.meta | 9 - .../ImageEffects/Scripts/NoiseAndGrain.cs | 181 - .../Scripts/NoiseAndGrain.cs.meta | 12 - .../ImageEffects/Scripts/NoiseAndScratches.cs | 142 - .../Scripts/NoiseAndScratches.cs.meta | 12 - .../ImageEffects/Scripts/PostEffectsBase.cs | 261 -- .../Scripts/PostEffectsBase.cs.meta | 9 - .../ImageEffects/Scripts/PostEffectsHelper.cs | 188 - .../Scripts/PostEffectsHelper.cs.meta | 9 - .../Effects/ImageEffects/Scripts/Quads.cs | 125 - .../ImageEffects/Scripts/Quads.cs.meta | 9 - .../ImageEffects/Scripts/ScreenOverlay.cs | 69 - .../Scripts/ScreenOverlay.cs.meta | 11 - .../Scripts/ScreenSpaceAmbientObscurance.cs | 123 - .../ScreenSpaceAmbientObscurance.cs.meta | 11 - .../Scripts/ScreenSpaceAmbientOcclusion.cs | 205 - .../ScreenSpaceAmbientOcclusion.cs.meta | 10 - .../Effects/ImageEffects/Scripts/SepiaTone.cs | 16 - .../ImageEffects/Scripts/SepiaTone.cs.meta | 9 - .../Effects/ImageEffects/Scripts/SunShafts.cs | 151 - .../ImageEffects/Scripts/SunShafts.cs.meta | 12 - .../Effects/ImageEffects/Scripts/TiltShift.cs | 76 - .../ImageEffects/Scripts/TiltShift.cs.meta | 10 - .../ImageEffects/Scripts/Tonemapping.cs | 274 -- .../ImageEffects/Scripts/Tonemapping.cs.meta | 10 - .../Effects/ImageEffects/Scripts/Triangles.cs | 112 - .../ImageEffects/Scripts/Triangles.cs.meta | 9 - .../Effects/ImageEffects/Scripts/Twirl.cs | 22 - .../ImageEffects/Scripts/Twirl.cs.meta | 9 - .../Scripts/VignetteAndChromaticAberration.cs | 114 - .../VignetteAndChromaticAberration.cs.meta | 14 - .../Effects/ImageEffects/Scripts/Vortex.cs | 20 - .../ImageEffects/Scripts/Vortex.cs.meta | 9 - .../Effects/ImageEffects/Shaders.meta | 6 - .../Shaders/BlendModesOverlay.shader | 138 - .../Shaders/BlendModesOverlay.shader.meta | 4 - .../Shaders/BlurEffectConeTaps.shader | 54 - .../Shaders/BlurEffectConeTaps.shader.meta | 4 - .../Shaders/CameraMotionBlur.shader | 534 --- .../Shaders/CameraMotionBlur.shader.meta | 4 - .../Shaders/CameraMotionBlurDX11.shader | 225 - .../Shaders/CameraMotionBlurDX11.shader.meta | 4 - .../Shaders/ChromaticAberrationShader.shader | 159 - .../ChromaticAberrationShader.shader.meta | 4 - .../Shaders/ColorCorrection3DLut.shader | 79 - .../Shaders/ColorCorrection3DLut.shader.meta | 4 - .../Shaders/ColorCorrectionCurves.shader | 96 - .../Shaders/ColorCorrectionCurves.shader.meta | 4 - .../ColorCorrectionCurvesSimple.shader | 63 - .../ColorCorrectionCurvesSimple.shader.meta | 4 - .../Shaders/ColorCorrectionEffect.shader | 40 - .../Shaders/ColorCorrectionEffect.shader.meta | 4 - .../Shaders/ColorCorrectionSelective.shader | 55 - .../ColorCorrectionSelective.shader.meta | 4 - .../Shaders/Contrast Stretch.meta | 2 - .../Contrast Stretch/Adaptation.shader | 70 - .../Contrast Stretch/Adaptation.shader.meta | 4 - .../Shaders/Contrast Stretch/Apply.shader | 58 - .../Contrast Stretch/Apply.shader.meta | 4 - .../Shaders/Contrast Stretch/Luminance.shader | 36 - .../Contrast Stretch/Luminance.shader.meta | 4 - .../Contrast Stretch/MinMaxReduction.shader | 68 - .../MinMaxReduction.shader.meta | 4 - .../Shaders/ContrastComposite.shader | 72 - .../Shaders/ContrastComposite.shader.meta | 4 - .../ImageEffects/Shaders/ConvertDepth.shader | 58 - .../Shaders/ConvertDepth.shader.meta | 4 - .../ImageEffects/Shaders/CreaseApply.shader | 65 - .../Shaders/CreaseApply.shader.meta | 4 - .../Shaders/EdgeDetectNormals.shader | 331 -- .../Shaders/EdgeDetectNormals.shader.meta | 4 - .../ImageEffects/Shaders/FisheyeShader.shader | 61 - .../Shaders/FisheyeShader.shader.meta | 4 - .../ImageEffects/Shaders/GlobalFog.shader | 194 - .../Shaders/GlobalFog.shader.meta | 4 - .../Shaders/GrayscaleEffect.shader | 37 - .../Shaders/GrayscaleEffect.shader.meta | 4 - .../ImageEffects/Shaders/MotionBlur.shader | 122 - .../Shaders/MotionBlur.shader.meta | 4 - .../Shaders/MotionBlurClear.shader | 60 - .../Shaders/MotionBlurClear.shader.meta | 4 - .../ImageEffects/Shaders/NoiseAndGrain.shader | 160 - .../Shaders/NoiseAndGrain.shader.meta | 4 - .../Shaders/NoiseAndGrainDX11.shader | 239 - .../Shaders/NoiseAndGrainDX11.shader.meta | 4 - .../Shaders/NoiseEffectShaderRGB.shader | 66 - .../Shaders/NoiseEffectShaderRGB.shader.meta | 4 - .../Shaders/NoiseEffectShaderYUV.shader | 77 - .../Shaders/NoiseEffectShaderYUV.shader.meta | 4 - .../Shaders/PrepareSunShaftsBlur.shader | 99 - .../Shaders/PrepareSunShaftsBlur.shader.meta | 4 - .../ImageEffects/Shaders/RadialBlur.shader | 73 - .../Shaders/RadialBlur.shader.meta | 4 - .../ImageEffects/Shaders/SSAOShader.shader | 285 -- .../Shaders/SSAOShader.shader.meta | 4 - .../ScreenSpaceAmbientObscurance.shader | 417 -- .../ScreenSpaceAmbientObscurance.shader.meta | 4 - .../Shaders/ScreenSpaceRaytrace.cginc | 261 -- .../Shaders/ScreenSpaceRaytrace.cginc.meta | 9 - .../Shaders/SepiaToneEffect.shader | 39 - .../Shaders/SepiaToneEffect.shader.meta | 4 - .../Shaders/ShowAlphaChannel.shader | 56 - .../Shaders/ShowAlphaChannel.shader.meta | 4 - .../ImageEffects/Shaders/SimpleClear.shader | 43 - .../Shaders/SimpleClear.shader.meta | 4 - .../Shaders/SunShaftsComposite.shader | 229 - .../Shaders/SunShaftsComposite.shader.meta | 4 - .../ImageEffects/Shaders/Tonemapper.shader | 357 -- .../Shaders/Tonemapper.shader.meta | 4 - .../ImageEffects/Shaders/TwirlEffect.shader | 55 - .../Shaders/TwirlEffect.shader.meta | 4 - .../Shaders/VignettingShader.shader | 73 - .../Shaders/VignettingShader.shader.meta | 4 - .../ImageEffects/Shaders/VortexEffect.shader | 67 - .../Shaders/VortexEffect.shader.meta | 4 - .../ImageEffects/Shaders/_Antialiasing.meta | 2 - .../Shaders/_Antialiasing/DLAA.shader | 347 -- .../Shaders/_Antialiasing/DLAA.shader.meta | 4 - .../Shaders/_Antialiasing/FXAA2.shader | 191 - .../Shaders/_Antialiasing/FXAA2.shader.meta | 4 - .../Shaders/_Antialiasing/FXAA3Console.shader | 175 - .../_Antialiasing/FXAA3Console.shader.meta | 4 - .../Shaders/_Antialiasing/FXAAPreset2.shader | 831 ---- .../_Antialiasing/FXAAPreset2.shader.meta | 4 - .../Shaders/_Antialiasing/FXAAPreset3.shader | 830 ---- .../_Antialiasing/FXAAPreset3.shader.meta | 4 - .../Shaders/_Antialiasing/NFAA.shader | 151 - .../Shaders/_Antialiasing/NFAA.shader.meta | 4 - .../Shaders/_Antialiasing/SSAA.shader | 88 - .../Shaders/_Antialiasing/SSAA.shader.meta | 4 - .../ImageEffects/Shaders/_BloomAndFlares.meta | 2 - .../Shaders/_BloomAndFlares/Blend.shader | 118 - .../Shaders/_BloomAndFlares/Blend.shader.meta | 4 - .../_BloomAndFlares/BlendForBloom.shader | 224 - .../_BloomAndFlares/BlendForBloom.shader.meta | 4 - .../_BloomAndFlares/BlendOneOne.shader | 51 - .../_BloomAndFlares/BlendOneOne.shader.meta | 4 - .../_BloomAndFlares/BlurAndFlares.shader | 205 - .../_BloomAndFlares/BlurAndFlares.shader.meta | 4 - .../_BloomAndFlares/BrightPassFilter.shader | 60 - .../BrightPassFilter.shader.meta | 4 - .../_BloomAndFlares/BrightPassFilter2.shader | 77 - .../BrightPassFilter2.shader.meta | 4 - .../_BloomAndFlares/LensFlareCreate.shader | 63 - .../LensFlareCreate.shader.meta | 4 - .../_BloomAndFlares/MobileBloom.shader | 289 -- .../_BloomAndFlares/MobileBloom.shader.meta | 4 - .../Shaders/_BloomAndFlares/MobileBlur.shader | 236 - .../_BloomAndFlares/MobileBlur.shader.meta | 4 - .../MultiPassHollywoodFlares.shader | 157 - .../MultiPassHollywoodFlares.shader.meta | 4 - .../_BloomAndFlares/SeparableBlurPlus.shader | 72 - .../SeparableBlurPlus.shader.meta | 4 - .../_BloomAndFlares/VignetteShader.shader | 59 - .../VignetteShader.shader.meta | 4 - .../ImageEffects/Shaders/_DepthOfField.meta | 2 - .../Shaders/_DepthOfField/Bokeh34.shader | 79 - .../Shaders/_DepthOfField/Bokeh34.shader.meta | 4 - .../_DepthOfField/DepthOfField34.shader | 481 -- .../_DepthOfField/DepthOfField34.shader.meta | 4 - .../_DepthOfField/DepthOfFieldDX11.shader | 261 -- .../DepthOfFieldDX11.shader.meta | 4 - .../_DepthOfField/DepthOfFieldScatter.shader | 941 ---- .../DepthOfFieldScatter.shader.meta | 4 - .../_DepthOfField/SeparableBlur.shader | 69 - .../_DepthOfField/SeparableBlur.shader.meta | 4 - .../SeparableWeightedBlurDof34.shader | 244 - .../SeparableWeightedBlurDof34.shader.meta | 4 - .../_DepthOfField/TiltShiftHdrLensBlur.shader | 382 -- .../TiltShiftHdrLensBlur.shader.meta | 4 - .../ImageEffects/Shaders/frag_ao.cginc | 48 - .../ImageEffects/Shaders/frag_ao.cginc.meta | 4 - .../Effects/ImageEffects/Textures.meta | 6 - .../Textures/ContrastEnhanced3D16.png | Bin 2935 -> 0 bytes .../Textures/ContrastEnhanced3D16.png.meta | 35 - .../ImageEffects/Textures/HexShape.psd | Bin 478144 -> 0 bytes .../ImageEffects/Textures/HexShape.psd.meta | 35 - .../Textures/MotionBlurJitter.png | Bin 14549 -> 0 bytes .../Textures/MotionBlurJitter.png.meta | 35 - .../ImageEffects/Textures/Neutral3D16.png | Bin 2848 -> 0 bytes .../Textures/Neutral3D16.png.meta | 35 - .../Effects/ImageEffects/Textures/Noise.png | Bin 14549 -> 0 bytes .../ImageEffects/Textures/Noise.png.meta | 35 - .../ImageEffects/Textures/NoiseAndGrain.png | Bin 5734 -> 0 bytes .../Textures/NoiseAndGrain.png.meta | 35 - .../Textures/NoiseEffectGrain.png | Bin 128100 -> 0 bytes .../Textures/NoiseEffectGrain.png.meta | 35 - .../Textures/NoiseEffectScratch.png | Bin 2996 -> 0 bytes .../Textures/NoiseEffectScratch.png.meta | 35 - .../ImageEffects/Textures/RandomVectors.png | Bin 14549 -> 0 bytes .../Textures/RandomVectors.png.meta | 35 - .../ImageEffects/Textures/SphereShape.psd | Bin 492716 -> 0 bytes .../Textures/SphereShape.psd.meta | 35 - .../ImageEffects/Textures/VignetteMask.png | Bin 6381 -> 0 bytes .../Textures/VignetteMask.png.meta | 35 - .../Textures/color correction ramp.png | Bin 77 -> 0 bytes .../Textures/color correction ramp.png.meta | 35 - .../ImageEffects/Textures/grayscale ramp.png | Bin 77 -> 0 bytes .../Textures/grayscale ramp.png.meta | 35 - .../3rdParty/Standard Assets/Windows.meta | 9 - .../Standard Assets/Windows/Data.meta | 9 - .../Windows/Data/PropertyChangedEventArgs.cs | 73 - .../Data/PropertyChangedEventArgs.cs.meta | 10 - .../Standard Assets/Windows/Kinect.meta | 9 - .../Windows/Kinect/Activity.cs | 18 - .../Windows/Kinect/Activity.cs.meta | 10 - .../Windows/Kinect/Appearance.cs | 14 - .../Windows/Kinect/Appearance.cs.meta | 10 - .../Windows/Kinect/AudioBeam.cs | 240 - .../Windows/Kinect/AudioBeam.cs.meta | 10 - .../Windows/Kinect/AudioBeamFrame.cs | 114 - .../Windows/Kinect/AudioBeamFrame.cs.meta | 10 - .../Kinect/AudioBeamFrameArrivedEventArgs.cs | 75 - .../AudioBeamFrameArrivedEventArgs.cs.meta | 10 - .../Windows/Kinect/AudioBeamFrameList.cs | 71 - .../Windows/Kinect/AudioBeamFrameList.cs.meta | 10 - .../Windows/Kinect/AudioBeamFrameReader.cs | 309 -- .../Kinect/AudioBeamFrameReader.cs.meta | 10 - .../Windows/Kinect/AudioBeamFrameReference.cs | 101 - .../Kinect/AudioBeamFrameReference.cs.meta | 10 - .../Windows/Kinect/AudioBeamMode.cs | 15 - .../Windows/Kinect/AudioBeamMode.cs.meta | 10 - .../Windows/Kinect/AudioBeamSubFrame.cs | 212 - .../Windows/Kinect/AudioBeamSubFrame.cs.meta | 10 - .../Windows/Kinect/AudioBodyCorrelation.cs | 68 - .../Kinect/AudioBodyCorrelation.cs.meta | 10 - .../Windows/Kinect/AudioSource.cs | 361 -- .../Windows/Kinect/AudioSource.cs.meta | 10 - .../Standard Assets/Windows/Kinect/Body.cs | 355 -- .../Windows/Kinect/Body.cs.meta | 10 - .../Windows/Kinect/BodyFrame.cs | 144 - .../Windows/Kinect/BodyFrame.cs.meta | 10 - .../Kinect/BodyFrameArrivedEventArgs.cs | 75 - .../Kinect/BodyFrameArrivedEventArgs.cs.meta | 10 - .../Windows/Kinect/BodyFrameReader.cs | 297 -- .../Windows/Kinect/BodyFrameReader.cs.meta | 10 - .../Windows/Kinect/BodyFrameReference.cs | 89 - .../Windows/Kinect/BodyFrameReference.cs.meta | 10 - .../Windows/Kinect/BodyFrameSource.cs | 308 -- .../Windows/Kinect/BodyFrameSource.cs.meta | 10 - .../Windows/Kinect/BodyIndexFrame.cs | 147 - .../Windows/Kinect/BodyIndexFrame.cs.meta | 10 - .../Kinect/BodyIndexFrameArrivedEventArgs.cs | 75 - .../BodyIndexFrameArrivedEventArgs.cs.meta | 10 - .../Windows/Kinect/BodyIndexFrameReader.cs | 297 -- .../Kinect/BodyIndexFrameReader.cs.meta | 10 - .../Windows/Kinect/BodyIndexFrameReference.cs | 89 - .../Kinect/BodyIndexFrameReference.cs.meta | 10 - .../Windows/Kinect/BodyIndexFrameSource.cs | 289 -- .../Kinect/BodyIndexFrameSource.cs.meta | 10 - .../Windows/Kinect/CameraIntrinsics.cs | 58 - .../Windows/Kinect/CameraIntrinsics.cs.meta | 10 - .../Windows/Kinect/CameraSpacePoint.cs | 47 - .../Windows/Kinect/CameraSpacePoint.cs.meta | 10 - .../Windows/Kinect/CollectionMap.cs | 26 - .../Windows/Kinect/CollectionMap.cs.meta | 10 - .../Windows/Kinect/ColorCameraSettings.cs | 113 - .../Kinect/ColorCameraSettings.cs.meta | 10 - .../Windows/Kinect/ColorFrame.cs | 218 - .../Windows/Kinect/ColorFrame.cs.meta | 10 - .../Kinect/ColorFrameArrivedEventArgs.cs | 75 - .../Kinect/ColorFrameArrivedEventArgs.cs.meta | 10 - .../Windows/Kinect/ColorFrameReader.cs | 297 -- .../Windows/Kinect/ColorFrameReader.cs.meta | 10 - .../Windows/Kinect/ColorFrameReference.cs | 89 - .../Kinect/ColorFrameReference.cs.meta | 10 - .../Windows/Kinect/ColorFrameSource.cs | 308 -- .../Windows/Kinect/ColorFrameSource.cs.meta | 10 - .../Windows/Kinect/ColorImageFormat.cs | 19 - .../Windows/Kinect/ColorImageFormat.cs.meta | 10 - .../Windows/Kinect/ColorSpacePoint.cs | 46 - .../Windows/Kinect/ColorSpacePoint.cs.meta | 10 - .../Windows/Kinect/CoordinateMapper.cs | 336 -- .../Windows/Kinect/CoordinateMapper.cs.meta | 10 - .../CoordinateMappingChangedEventArgs.cs | 51 - .../CoordinateMappingChangedEventArgs.cs.meta | 10 - .../Windows/Kinect/DepthFrame.cs | 177 - .../Windows/Kinect/DepthFrame.cs.meta | 10 - .../Kinect/DepthFrameArrivedEventArgs.cs | 75 - .../Kinect/DepthFrameArrivedEventArgs.cs.meta | 10 - .../Windows/Kinect/DepthFrameReader.cs | 297 -- .../Windows/Kinect/DepthFrameReader.cs.meta | 10 - .../Windows/Kinect/DepthFrameReference.cs | 89 - .../Kinect/DepthFrameReference.cs.meta | 10 - .../Windows/Kinect/DepthFrameSource.cs | 319 -- .../Windows/Kinect/DepthFrameSource.cs.meta | 10 - .../Windows/Kinect/DepthSpacePoint.cs | 46 - .../Windows/Kinect/DepthSpacePoint.cs.meta | 10 - .../Windows/Kinect/DetectionResult.cs | 17 - .../Windows/Kinect/DetectionResult.cs.meta | 10 - .../Windows/Kinect/EventPump.cs | 78 - .../Windows/Kinect/EventPump.cs.meta | 10 - .../Windows/Kinect/ExceptionHelper.cs | 50 - .../Windows/Kinect/ExceptionHelper.cs.meta | 10 - .../Windows/Kinect/Expression.cs | 15 - .../Windows/Kinect/Expression.cs.meta | 10 - .../Windows/Kinect/FrameCapturedEventArgs.cs | 98 - .../Kinect/FrameCapturedEventArgs.cs.meta | 10 - .../Windows/Kinect/FrameCapturedStatus.cs | 16 - .../Kinect/FrameCapturedStatus.cs.meta | 10 - .../Windows/Kinect/FrameDescription.cs | 158 - .../Windows/Kinect/FrameDescription.cs.meta | 10 - .../Windows/Kinect/FrameEdges.cs | 19 - .../Windows/Kinect/FrameEdges.cs.meta | 10 - .../Windows/Kinect/FrameSourceTypes.cs | 22 - .../Windows/Kinect/FrameSourceTypes.cs.meta | 10 - .../Windows/Kinect/HandState.cs | 18 - .../Windows/Kinect/HandState.cs.meta | 10 - .../Windows/Kinect/INativeWrapper.cs | 12 - .../Windows/Kinect/INativeWrapper.cs.meta | 10 - .../Windows/Kinect/InfraredFrame.cs | 147 - .../Windows/Kinect/InfraredFrame.cs.meta | 10 - .../Kinect/InfraredFrameArrivedEventArgs.cs | 75 - .../InfraredFrameArrivedEventArgs.cs.meta | 10 - .../Windows/Kinect/InfraredFrameReader.cs | 297 -- .../Kinect/InfraredFrameReader.cs.meta | 10 - .../Windows/Kinect/InfraredFrameReference.cs | 89 - .../Kinect/InfraredFrameReference.cs.meta | 10 - .../Windows/Kinect/InfraredFrameSource.cs | 289 -- .../Kinect/InfraredFrameSource.cs.meta | 10 - .../Kinect/IsAvailableChangedEventArgs.cs | 68 - .../IsAvailableChangedEventArgs.cs.meta | 10 - .../Standard Assets/Windows/Kinect/Joint.cs | 47 - .../Windows/Kinect/Joint.cs.meta | 10 - .../Windows/Kinect/JointOrientation.cs | 46 - .../Windows/Kinect/JointOrientation.cs.meta | 10 - .../Windows/Kinect/JointType.cs | 38 - .../Windows/Kinect/JointType.cs.meta | 10 - .../Kinect/KinectAudioCalibrationState.cs | 16 - .../KinectAudioCalibrationState.cs.meta | 10 - .../Windows/Kinect/KinectBuffer.cs | 129 - .../Windows/Kinect/KinectBuffer.cs.meta | 10 - .../Windows/Kinect/KinectCapabilities.cs | 20 - .../Windows/Kinect/KinectCapabilities.cs.meta | 10 - .../Windows/Kinect/KinectSensor.cs | 498 -- .../Windows/Kinect/KinectSensor.cs.meta | 10 - .../Windows/Kinect/KinectSpecialCases.cs | 604 --- .../Windows/Kinect/KinectSpecialCases.cs.meta | 10 - .../Windows/Kinect/KinectUnityAddinUtils.cs | 19 - .../Kinect/KinectUnityAddinUtils.cs.meta | 10 - .../Kinect/LongExposureInfraredFrame.cs | 147 - .../Kinect/LongExposureInfraredFrame.cs.meta | 10 - ...ngExposureInfraredFrameArrivedEventArgs.cs | 75 - ...osureInfraredFrameArrivedEventArgs.cs.meta | 10 - .../Kinect/LongExposureInfraredFrameReader.cs | 297 -- .../LongExposureInfraredFrameReader.cs.meta | 10 - .../LongExposureInfraredFrameReference.cs | 89 - ...LongExposureInfraredFrameReference.cs.meta | 10 - .../Kinect/LongExposureInfraredFrameSource.cs | 289 -- .../LongExposureInfraredFrameSource.cs.meta | 10 - .../Windows/Kinect/MultiSourceFrame.cs | 187 - .../Windows/Kinect/MultiSourceFrame.cs.meta | 10 - .../MultiSourceFrameArrivedEventArgs.cs | 75 - .../MultiSourceFrameArrivedEventArgs.cs.meta | 10 - .../Windows/Kinect/MultiSourceFrameReader.cs | 312 -- .../Kinect/MultiSourceFrameReader.cs.meta | 10 - .../Kinect/MultiSourceFrameReference.cs | 72 - .../Kinect/MultiSourceFrameReference.cs.meta | 10 - .../Windows/Kinect/NativeObjectCache.cs | 136 - .../Windows/Kinect/NativeObjectCache.cs.meta | 10 - .../Windows/Kinect/NativeWrapper.cs | 28 - .../Windows/Kinect/NativeWrapper.cs.meta | 10 - .../Windows/Kinect/SmartGCHandle.cs | 42 - .../Windows/Kinect/SmartGCHandle.cs.meta | 10 - .../Windows/Kinect/ThreadSafeDictionary.cs | 61 - .../Kinect/ThreadSafeDictionary.cs.meta | 10 - .../Windows/Kinect/TrackingConfidence.cs | 15 - .../Windows/Kinect/TrackingConfidence.cs.meta | 10 - .../Windows/Kinect/TrackingState.cs | 16 - .../Windows/Kinect/TrackingState.cs.meta | 10 - .../Standard Assets/Windows/Kinect/Vector4.cs | 48 - .../Windows/Kinect/Vector4.cs.meta | 10 - .../Assets/UnityUtils/Camera.meta | 9 - .../UnityUtils/Camera/ComposerSettings.cs | 71 - .../Camera/ComposerSettings.cs.meta | 12 - .../Camera/FreeMotionCameraRig.meta | 9 - .../Camera/FreeMotionCameraRig/Editor.meta | 9 - .../Editor/ComposerSettingsEditor.cs | 150 - .../Editor/ComposerSettingsEditor.cs.meta | 12 - .../FreeMotionCameraRig/Editor/FMCRViewer.cs | 132 - .../Editor/FMCRViewer.cs.meta | 12 - .../Camera/FreeMotionCameraRig/FMCRControl.cs | 428 -- .../FreeMotionCameraRig/FMCRControl.cs.meta | 12 - .../FreeMotionCameraRig.FBX | Bin 39920 -> 0 bytes .../FreeMotionCameraRig.FBX.meta | 80 - .../FreeMotionCameraRig.cs | 236 - .../FreeMotionCameraRig.cs.meta | 12 - .../FreeMotionCameraRig.prefab | 123 - .../FreeMotionCameraRig.prefab.meta | 8 - .../UnityUtils/Camera/TransposerSettings.cs | 43 - .../Camera/TransposerSettings.cs.meta | 12 - .../Assets/UnityUtils/Communication.meta | 9 - .../UnityUtils/Communication/OSC2Firmata.meta | 9 - .../OSC2Firmata/FirmataControl.cs | 192 - .../OSC2Firmata/FirmataControl.cs.meta | 12 - .../UnityUtils/Communication/Plugins.meta | 9 - .../UnityUtils/Communication/Plugins/x86.meta | 9 - .../Communication/Plugins/x86/ofSerial.dll | Bin 51200 -> 0 bytes .../Plugins/x86/ofSerial.dll.meta | 122 - .../Communication/Plugins/x86_64.meta | 9 - .../Communication/Plugins/x86_64/ofSerial.dll | Bin 66048 -> 0 bytes .../Plugins/x86_64/ofSerial.dll.meta | 122 - .../UnityUtils/Communication/ofSerial.cs | 136 - .../UnityUtils/Communication/ofSerial.cs.meta | 12 - .../Assets/UnityUtils/ImageFileWatcher.meta | 9 - .../UnityUtils/ImageFileWatcher/Editor.meta | 9 - .../Editor/ImageFileWatcherEditor.cs | 68 - .../Editor/ImageFileWatcherEditor.cs.meta | 12 - .../ImageFileWatcher/ImageFileWatcher.cs | 225 - .../ImageFileWatcher/ImageFileWatcher.cs.meta | 12 - .../UnityUtils/ImageFileWatcher/ImageUtil.cs | 53 - .../ImageFileWatcher/ImageUtil.cs.meta | 12 - .../ImageFileWatcher/TextureData.cs | 183 - .../ImageFileWatcher/TextureData.cs.meta | 12 - .../Assets/UnityUtils/Instantiate.meta | 9 - .../Instantiate/GameObjectSpawnter.cs | 52 - .../Instantiate/GameObjectSpawnter.cs.meta | 12 - .../Assets/UnityUtils/IronHorse.meta | 9 - .../Assets/UnityUtils/IronHorse/AVProQuad.cs | 69 - .../UnityUtils/IronHorse/AVProQuad.cs.meta | 12 - .../Assets/UnityUtils/IronHorse/AutoFlip.cs | 95 - .../UnityUtils/IronHorse/AutoFlip.cs.meta | 12 - .../Assets/UnityUtils/IronHorse/AutoScaler.cs | 56 - .../UnityUtils/IronHorse/AutoScaler.cs.meta | 12 - .../Assets/UnityUtils/IronHorse/Editor.meta | 9 - .../Editor/CreateIronHorseDataHolder.cs | 40 - .../Editor/CreateIronHorseDataHolder.cs.meta | 12 - .../Assets/UnityUtils/IronHorse/Follower.cs | 79 - .../UnityUtils/IronHorse/Follower.cs.meta | 12 - .../Assets/UnityUtils/IronHorse/IronHorse.cs | 104 - .../UnityUtils/IronHorse/IronHorse.cs.meta | 12 - .../IronHorse/IronHorseDataHolder.cs | 11 - .../IronHorse/IronHorseDataHolder.cs.meta | 12 - .../Assets/UnityUtils/IronHorse/TouchMovie.cs | 97 - .../UnityUtils/IronHorse/TouchMovie.cs.meta | 12 - .../Assets/UnityUtils/MouseRecord.meta | 9 - .../MouseRecord/MousePositionRecorder.cs | 99 - .../MouseRecord/MousePositionRecorder.cs.meta | 12 - .../UnityUtils/MouseRecord/MouseRecordData.cs | 51 - .../MouseRecord/MouseRecordData.cs.meta | 12 - .../UnityUtils/MouseRecord/MouseReocrd.prefab | 589 --- .../MouseRecord/MouseReocrd.prefab.meta | 9 - .../UnityUtils/MouseRecord/WriteLoadXML.cs | 33 - .../MouseRecord/WriteLoadXML.cs.meta | 8 - .../Assets/UnityUtils/ReadMe.MD | 16 - .../Assets/UnityUtils/ReadMe.MD.meta | 8 - .../Assets/UnityUtils/Recorder.meta | 9 - .../Recorder/AudioListenerRecorder.cs | 144 - .../Recorder/AudioListenerRecorder.cs.meta | 12 - .../Assets/UnityUtils/Recorder/Editor.meta | 9 - .../Recorder/Editor/MovieRecorderEditor.cs | 90 - .../Editor/MovieRecorderEditor.cs.meta | 12 - .../Assets/UnityUtils/Recorder/Encoder.meta | 9 - .../UnityUtils/Recorder/Encoder/ID3TagData.cs | 36 - .../Recorder/Encoder/ID3TagData.cs.meta | 12 - .../UnityUtils/Recorder/Encoder/LameDLL.cs | 90 - .../Recorder/Encoder/LameDLL.cs.meta | 12 - .../UnityUtils/Recorder/Encoder/LibMp3Lame.cs | 2163 --------- .../Recorder/Encoder/LibMp3Lame.cs.meta | 12 - .../UnityUtils/Recorder/Encoder/Loader.cs | 158 - .../Recorder/Encoder/Loader.cs.meta | 12 - .../Recorder/Encoder/MP3FileWriter.cs | 714 --- .../Recorder/Encoder/MP3FileWriter.cs.meta | 12 - .../Assets/UnityUtils/Recorder/FFmpegOut.meta | 9 - .../Recorder/FFmpegOut/CameraCapture.cs | 218 - .../Recorder/FFmpegOut/CameraCapture.cs.meta | 13 - .../UnityUtils/Recorder/FFmpegOut/Editor.meta | 9 - .../FFmpegOut/Editor/CameraCaptureEditor.cs | 57 - .../Editor/CameraCaptureEditor.cs.meta | 12 - .../Recorder/FFmpegOut/FFmpegConfig.cs | 29 - .../Recorder/FFmpegOut/FFmpegConfig.cs.meta | 12 - .../Recorder/FFmpegOut/FFmpegPipe.cs | 147 - .../Recorder/FFmpegOut/FFmpegPipe.cs.meta | 12 - .../Recorder/FFmpegOut/Internal.meta | 9 - .../Recorder/FFmpegOut/Internal/Blitter.cs | 44 - .../FFmpegOut/Internal/Blitter.cs.meta | 12 - .../Recorder/FFmpegOut/Internal/Shader.meta | 9 - .../Internal/Shader/CameraCapture.shader | 34 - .../Internal/Shader/CameraCapture.shader.meta | 9 - .../UnityUtils/Recorder/MovieRecorder.cs | 258 -- .../UnityUtils/Recorder/MovieRecorder.cs.meta | 12 - .../Assets/UnityUtils/Recorder/Plugins.meta | 9 - .../UnityUtils/Recorder/Plugins/NAudio.dll | Bin 401408 -> 0 bytes .../Recorder/Plugins/NAudio.dll.meta | 25 - .../UnityUtils/Recorder/RecordCanvas.prefab | 4097 ----------------- .../Recorder/RecordCanvas.prefab.meta | 8 - .../Assets/UnityUtils/Recorder/RecordMic.cs | 31 - .../UnityUtils/Recorder/RecordMic.cs.meta | 12 - .../Assets/UnityUtils/Recorder/SaveAudio.cs | 310 -- .../UnityUtils/Recorder/SaveAudio.cs.meta | 12 - .../Assets/UnityUtils/Singleton.cs | 44 - .../Assets/UnityUtils/Singleton.cs.meta | 12 - .../Assets/UnityUtils/UltraControls.meta | 9 - .../UnityUtils/UltraControls/Editor.meta | 9 - .../UltraControls/Editor/UltraGetterEditor.cs | 71 - .../Editor/UltraGetterEditor.cs.meta | 12 - .../UltraControls/Editor/UltraSetterEditor.cs | 160 - .../Editor/UltraSetterEditor.cs.meta | 12 - .../UltraControls/NativeUltraControlsWrap.cs | 934 ---- .../NativeUltraControlsWrap.cs.meta | 12 - .../UnityUtils/UltraControls/Plugins.meta | 9 - .../UnityUtils/UltraControls/Plugins/x86.meta | 9 - .../Plugins/x86/NativeUltraControlsPlugin.dll | Bin 24576 -> 0 bytes .../x86/NativeUltraControlsPlugin.dll.meta | 79 - .../x86/NativeUltraControlsPluginD.dll | Bin 355840 -> 0 bytes .../x86/NativeUltraControlsPluginD.dll.meta | 79 - .../UltraControls/Plugins/x86_64.meta | 9 - .../x86_64/NativeUltraControlsPlugin.dll | Bin 31744 -> 0 bytes .../x86_64/NativeUltraControlsPlugin.dll.meta | 76 - .../x86_64/NativeUltraControlsPluginD.dll | Bin 471040 -> 0 bytes .../NativeUltraControlsPluginD.dll.meta | 76 - .../UnityUtils/UltraControls/UltraControls.cs | 423 -- .../UltraControls/UltraControls.cs.meta | 12 - .../UltraControls/UltraControlsAttribute.cs | 37 - .../UltraControlsAttribute.cs.meta | 12 - .../UnityUtils/UltraControls/UltraGetter.cs | 533 --- .../UltraControls/UltraGetter.cs.meta | 12 - .../UnityUtils/UltraControls/UltraSetter.cs | 315 -- .../UltraControls/UltraSetter.cs.meta | 12 - .../UnityUtils/UltraControls/UltraUtils.cs | 603 --- .../UltraControls/UltraUtils.cs.meta | 12 - 763 files changed, 142 insertions(+), 61745 deletions(-) delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset.meta delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset.meta delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset.meta delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset delete mode 100644 Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute delete mode 100644 Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CameraMotionBlur.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CameraMotionBlur.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CameraMotionBlurDX11.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CameraMotionBlurDX11.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ChromaticAberrationShader.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ChromaticAberrationShader.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrection3DLut.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrection3DLut.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionCurves.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionCurves.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionCurvesSimple.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionCurvesSimple.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionEffect.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionEffect.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionSelective.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ColorCorrectionSelective.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/Adaptation.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/Adaptation.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/Apply.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/Apply.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/Luminance.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/Luminance.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/MinMaxReduction.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Contrast Stretch/MinMaxReduction.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ContrastComposite.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ContrastComposite.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ConvertDepth.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ConvertDepth.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/TiltShiftHdrLensBlur.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/TiltShiftHdrLensBlur.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/frag_ao.cginc delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/frag_ao.cginc.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/ContrastEnhanced3D16.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/ContrastEnhanced3D16.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/HexShape.psd delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/HexShape.psd.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/MotionBlurJitter.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/MotionBlurJitter.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Neutral3D16.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Neutral3D16.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Noise.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Noise.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseAndGrain.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseAndGrain.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectGrain.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectGrain.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectScratch.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectScratch.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/RandomVectors.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/RandomVectors.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/SphereShape.psd delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/SphereShape.psd.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/VignetteMask.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/VignetteMask.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/color correction ramp.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/color correction ramp.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/grayscale ramp.png delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/grayscale ramp.png.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Data.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Data/PropertyChangedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Data/PropertyChangedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Body.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Body.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.FBX delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.FBX.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86/ofSerial.dll delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86/ofSerial.dll.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86_64.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86_64/ofSerial.dll delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86_64/ofSerial.dll.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/ofSerial.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Communication/ofSerial.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins/NAudio.dll delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins/NAudio.dll.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPlugin.dll delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPlugin.dll.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPluginD.dll delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPluginD.dll.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPlugin.dll delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPlugin.dll.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPluginD.dll delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPluginD.dll.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs.meta delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs delete mode 100644 Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs.meta diff --git a/Unity-19050-05-BallPool/Assets/Frozen/Frozen.unity b/Unity-19050-05-BallPool/Assets/Frozen/Frozen.unity index ca6b42b..2507594 100644 --- a/Unity-19050-05-BallPool/Assets/Frozen/Frozen.unity +++ b/Unity-19050-05-BallPool/Assets/Frozen/Frozen.unity @@ -2719,6 +2719,11 @@ Prefab: propertyPath: m_Enabled value: 1 objectReference: {fileID: 0} + - target: {fileID: 114504107585269582, guid: 1f68bf7cec2600e49a46d2f0554453c8, + type: 2} + propertyPath: debugInput + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_ParentPrefab: {fileID: 100100000, guid: 1f68bf7cec2600e49a46d2f0554453c8, type: 2} m_IsPrefabParent: 0 @@ -4011,136 +4016,6 @@ CanvasRenderer: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1075112480} ---- !u!43 &1079079082 -Mesh: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: 'Space Ground Mesh: (8x5x3)' - serializedVersion: 8 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 24 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 16 - localAABB: - m_Center: {x: 0, y: 1.5, z: 0} - m_Extent: {x: 4, y: 1.5, z: 2.5} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_MeshCompression: 0 - m_IsReadable: 0 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00 - m_Skin: [] - m_VertexData: - m_CurrentChannels: 11 - m_VertexCount: 16 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 24 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 512 - _typelessdata: 000080c000000000000020c0000000000000803f00000000e4388e3e00000000000080c00000000000002040000000000000803f00000000e4388e3e0000203f0000804000000000000020c0000000000000803f000000008ee3383f00000000000080400000000000002040000000000000803f000000008ee3383f0000203f000080c000000000000020400000000000000000000080bfe4388e3e0000203f000080c000004040000020400000000000000000000080bfe4388e3e0000803f0000804000000000000020400000000000000000000080bf8ee3383f0000203f0000804000004040000020400000000000000000000080bf8ee3383f0000803f000080c000000000000020c00000803f0000000000000000000000000000203f000080c000004040000020c00000803f0000000000000000000000000000803f000080c000000000000020400000803f0000000000000000e4388e3e0000203f000080c000004040000020400000803f0000000000000000e4388e3e0000803f000080400000000000002040000080bf00000000000000008ee3383f0000203f000080400000404000002040000080bf00000000000000008ee3383f0000803f0000804000000000000020c0000080bf00000000000000000000803f0000203f0000804000004040000020c0000080bf00000000000000000000803f0000803f - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 1.5, z: 0} - m_Extent: {x: 4, y: 1.5, z: 2.5} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshOptimized: 0 --- !u!1 &1164756621 GameObject: m_ObjectHideFlags: 0 @@ -5351,7 +5226,7 @@ MeshFilter: m_PrefabParentObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1379541361} - m_Mesh: {fileID: 1079079082} + m_Mesh: {fileID: 1538287620} --- !u!114 &1379541365 MonoBehaviour: m_ObjectHideFlags: 0 @@ -6022,6 +5897,136 @@ Transform: m_Father: {fileID: 96822206} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!43 &1538287620 +Mesh: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: 'Space Ground Mesh: (8x5x3)' + serializedVersion: 8 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 24 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 16 + localAABB: + m_Center: {x: 0, y: 1.5, z: 0} + m_Extent: {x: 4, y: 1.5, z: 2.5} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_MeshCompression: 0 + m_IsReadable: 0 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00 + m_Skin: [] + m_VertexData: + m_CurrentChannels: 11 + m_VertexCount: 16 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 24 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 512 + _typelessdata: 000080c000000000000020c0000000000000803f00000000e4388e3e00000000000080c00000000000002040000000000000803f00000000e4388e3e0000203f0000804000000000000020c0000000000000803f000000008ee3383f00000000000080400000000000002040000000000000803f000000008ee3383f0000203f000080c000000000000020400000000000000000000080bfe4388e3e0000203f000080c000004040000020400000000000000000000080bfe4388e3e0000803f0000804000000000000020400000000000000000000080bf8ee3383f0000203f0000804000004040000020400000000000000000000080bf8ee3383f0000803f000080c000000000000020c00000803f0000000000000000000000000000203f000080c000004040000020c00000803f0000000000000000000000000000803f000080c000000000000020400000803f0000000000000000e4388e3e0000203f000080c000004040000020400000803f0000000000000000e4388e3e0000803f000080400000000000002040000080bf00000000000000008ee3383f0000203f000080400000404000002040000080bf00000000000000008ee3383f0000803f0000804000000000000020c0000080bf00000000000000000000803f0000203f0000804000004040000020c0000080bf00000000000000000000803f0000803f + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 1.5, z: 0} + m_Extent: {x: 4, y: 1.5, z: 2.5} + m_MeshUsageFlags: 0 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshOptimized: 0 --- !u!1 &1561705233 GameObject: m_ObjectHideFlags: 0 diff --git a/Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset b/Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset deleted file mode 100644 index 10bbed6..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 852ced439e5120c44bd352e9c29a164f, type: 3} - m_Name: FrozenDayParticleUniforms - m_EditorClassIdentifier: - numRate: 1 - movement: 1 - geomSize: 0.556 - velocityDamping: 0.1 - lifeDuration: 10 - lifeVariation: 0 - convergence: 0 - homeStrength: 0 - noiseStrength: 0.055 - noiseSeed: 0.5 - noiseTimeScale: 1 - noiseFrequency: 0.731 - forceDirection: {x: 0, y: 0, z: 1} - forceStrength: 0 - impulsePosition: {x: 0, y: 0, z: 0} - impulseRadius: 3 - impulseStrength: 0.06 diff --git a/Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset.meta b/Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset.meta deleted file mode 100644 index 4030288..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/FrozenDayParticleUniforms.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 43473f0506b1ba64c86ae17dd11d902a -timeCreated: 1513320663 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset b/Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset deleted file mode 100644 index 1e7b607..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 852ced439e5120c44bd352e9c29a164f, type: 3} - m_Name: FrozenNightParticleUniforms - m_EditorClassIdentifier: - numRate: 1 - movement: 1 - geomSize: 0.02 - velocityDamping: 0.98 - lifeDuration: 5 - lifeVariation: 0 - convergence: 0 - homeStrength: 0.63 - noiseStrength: 0.055 - noiseSeed: 0.5 - noiseTimeScale: 1 - noiseFrequency: 0.733 - forceDirection: {x: 0, y: 0, z: 1} - forceStrength: 0 - impulsePosition: {x: 0, y: 0, z: 0} - impulseRadius: 3 - impulseStrength: 0.1 diff --git a/Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset.meta b/Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset.meta deleted file mode 100644 index d39b921..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/FrozenNightParticleUniforms.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 54b82be1afe58664c8daeb575db89094 -timeCreated: 1513320663 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset b/Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset deleted file mode 100644 index 04471a8..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 852ced439e5120c44bd352e9c29a164f, type: 3} - m_Name: FrozenParticleUniforms - m_EditorClassIdentifier: - numRate: 1 - movement: 1 - geomSize: 1 - velocityDamping: 0.95 - lifeDuration: 10 - lifeVariation: 0 - convergence: 0 - homeStrength: 0 - noiseStrength: 0.055 - noiseSeed: 0.5 - noiseTimeScale: 1 - noiseFrequency: 0.731 - forceDirection: {x: 0, y: 0, z: 1} - forceStrength: 0 - impulsePosition: {x: 0, y: 0, z: 0} - impulseRadius: 3 - impulseStrength: 0.06 diff --git a/Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset.meta b/Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset.meta deleted file mode 100644 index 0f2c7ab..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/FrozenParticleUniforms.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 43a114cac50c03e4ea881a51dbb6e7bd -timeCreated: 1513320663 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset b/Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset deleted file mode 100644 index 56d42fd..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 852ced439e5120c44bd352e9c29a164f, type: 3} - m_Name: ParticleUniforms - m_EditorClassIdentifier: - numRate: 1 - movement: 1 - geomSize: 0.074 - velocityDamping: 0.95 - lifeDuration: 10 - lifeVariation: 0 - convergence: 0 - homeStrength: 0 - noiseStrength: 0.055 - noiseSeed: 0.5 - noiseTimeScale: 1 - noiseFrequency: 0.731 - forceDirection: {x: 0, y: 0, z: 1} - forceStrength: 0.493 - impulsePosition: {x: 0, y: 0, z: 0} - impulseRadius: 3 - impulseStrength: 0.05 diff --git a/Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset.meta b/Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset.meta deleted file mode 100644 index b2f49a6..0000000 --- a/Unity-19050-05-BallPool/Assets/Frozen/ParticleUniforms.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 86d4ce704ed55d343a52fed03681663d -timeCreated: 1513320663 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/Frozen/Script/SceneController.cs b/Unity-19050-05-BallPool/Assets/Frozen/Script/SceneController.cs index 7b8cc3d..ef86bbe 100644 --- a/Unity-19050-05-BallPool/Assets/Frozen/Script/SceneController.cs +++ b/Unity-19050-05-BallPool/Assets/Frozen/Script/SceneController.cs @@ -22,8 +22,8 @@ namespace UltraCombos.Frozen [Range(0, 1)] public float rate = 0.0f; - [SerializeField] - UniformBlendedStructuredBuffer uniform; + // [SerializeField] + // UniformBlendedStructuredBuffer uniform; //[SerializeField] public List spaceMaterials = new List(); @@ -35,16 +35,16 @@ namespace UltraCombos.Frozen [SerializeField] Material snowMaterial; - [SerializeField] - BlendedCosineGradient cosineGradient; + // [SerializeField] + // BlendedCosineGradient cosineGradient; // [SerializeField] // KinectOpticalFlow kinect; [SerializeField] float nightKinectAmount = 30.0f; - [SerializeField] - ParticleViewerProcedural particleViewer; + // [SerializeField] + // ParticleViewerProcedural particleViewer; [SerializeField, Range(0, 1)] float dayParticleRate = 1.0f; diff --git a/Unity-19050-05-BallPool/Assets/Klak.meta b/Unity-19050-05-BallPool/Assets/Klak.meta index 200f648..b411e14 100644 --- a/Unity-19050-05-BallPool/Assets/Klak.meta +++ b/Unity-19050-05-BallPool/Assets/Klak.meta @@ -1,8 +1,6 @@ fileFormatVersion: 2 guid: 13b88616b1d47df45b1c7e4bea2670ec folderAsset: yes -timeCreated: 1519716653 -licenseType: Free DefaultImporter: externalObjects: {} userData: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks.meta deleted file mode 100644 index 620083b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 22351417d40ca3844ba1ccf6bd1f6f5b -folderAsset: yes -timeCreated: 1519716259 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset b/Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset deleted file mode 100644 index fc30dab..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset +++ /dev/null @@ -1,16 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 54276434dda9c694e85abaf98cdd981d, type: 3} - m_Name: CosineGradient - m_EditorClassIdentifier: - _redCoeffs: {x: 0.32, y: 0.284, z: 0.56, w: 0.453} - _greenCoeffs: {x: 0.191, y: 0.306, z: 0.3, w: 0.825} - _blueCoeffs: {x: 0.198, y: 0.558, z: 0.27, w: 0} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset.meta deleted file mode 100644 index 1c256a1..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/CosineGradient.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0b6d4f25fdc8b8448a67827d394f8c07 -timeCreated: 1513340684 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material.meta deleted file mode 100644 index 98c02b4..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 863ee04df261c0b4d9835a82da436f0f -folderAsset: yes -timeCreated: 1513322377 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat deleted file mode 100644 index e3ac75b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat +++ /dev/null @@ -1,76 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: Ground - m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.448 - - _GlossyReflections: 1 - - _Metallic: 0.17 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat.meta deleted file mode 100644 index 5ff8bbf..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Ground.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 54c13d9de6d77834994872fbf5c7082b -timeCreated: 1513322386 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat deleted file mode 100644 index 3928d5b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat +++ /dev/null @@ -1,76 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: Mirror - m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.425 - - _GlossyReflections: 1 - - _Metallic: 0.653 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat.meta deleted file mode 100644 index ba79a73..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/Mirror.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 305605d3346fb2f4fbad85f4e832bed2 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat deleted file mode 100644 index 5af4e4b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat +++ /dev/null @@ -1,78 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: ParticleViewerInstanced - m_Shader: {fileID: 4800000, guid: 0a37c93f4a42ad341ab8b8d2dafab01d, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 10910, guid: 0000000000000000f000000000000000, type: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Emission: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0.917 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _Smoothness: 0.839 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat.meta deleted file mode 100644 index 754dc70..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerInstanced.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: cc1041196be864c4cbe1b6a6118fe495 -timeCreated: 1514086623 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat deleted file mode 100644 index 71f3704..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat +++ /dev/null @@ -1,78 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: ParticleViewerMesh - m_Shader: {fileID: 4800000, guid: c31611738f4cc1b4ea71988156cc8327, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 10904, guid: 0000000000000000f000000000000000, type: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Emission: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0.579 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _Smoothness: 0.479 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat.meta deleted file mode 100644 index d391301..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerMesh.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6c404ebf6ff877a46a9ac3132b7c648d -timeCreated: 1513321839 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat deleted file mode 100644 index c5b919c..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat +++ /dev/null @@ -1,77 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: ParticleViewerProcedural - m_Shader: {fileID: 4800000, guid: 6815828e001d01f4699ec8c7f1dde1fe, type: 3} - m_ShaderKeywords: - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _Emission: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat.meta deleted file mode 100644 index 0918388..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Material/ParticleViewerProcedural.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 2c82eba6891c0044f9854bb70b0da2ef -timeCreated: 1513930866 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity deleted file mode 100644 index a2394b7..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity +++ /dev/null @@ -1,1287 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 0 - m_FogColor: {r: 0.5921569, g: 0.47450984, b: 0.2901961, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 2100000, guid: cd4b15a8a6981924cb2791f75e92ae97, type: 2} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 195910678} - m_IndirectSpecularColor: {r: 0.121907264, g: 0.20316994, b: 0.260672, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 10 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &195910677 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 195910679} - - component: {fileID: 195910678} - - component: {fileID: 195910680} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &195910678 -Light: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 195910677} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 0.93134546, b: 0.8715508, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 4 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &195910679 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 195910677} - m_LocalRotation: {x: 0.052217025, y: 0.9392279, z: -0.29613733, w: 0.16561128} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 35, y: 160, z: 0} ---- !u!114 &195910680 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 195910677} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 09f74dcd336a90240853a2bb08538f0d, type: 3} - m_Name: - m_EditorClassIdentifier: - kelvin: 5500 - color: {r: 1, g: 0.93134546, b: 0.8715508, a: 1} ---- !u!1 &300019303 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 300019305} - - component: {fileID: 300019304} - m_Layer: 0 - m_Name: Reflection Probe - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!215 &300019304 -ReflectionProbe: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300019303} - m_Enabled: 1 - serializedVersion: 2 - m_Type: 0 - m_Mode: 1 - m_RefreshMode: 1 - m_TimeSlicingMode: 0 - m_Resolution: 128 - m_UpdateFrequency: 0 - m_BoxSize: {x: 100, y: 100, z: 100} - m_BoxOffset: {x: 0, y: 0, z: 0} - m_NearClip: 0.3 - m_FarClip: 1000 - m_ShadowDistance: 100 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_IntensityMultiplier: 1 - m_BlendDistance: 1 - m_HDR: 1 - m_BoxProjection: 0 - m_RenderDynamicObjects: 0 - m_UseOcclusionCulling: 1 - m_Importance: 1 - m_CustomBakedTexture: {fileID: 0} ---- !u!4 &300019305 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300019303} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &388431762 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1404171735} - m_Modifications: - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_LocalPosition.z - value: -5.32 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 9500000, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_Controller - value: - objectReference: {fileID: 9100000, guid: 3fb04ee54d305dd46a438b8cb4303d12, type: 2} - - target: {fileID: 100004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - m_IsPrefabParent: 0 ---- !u!4 &388431763 stripped -Transform: - m_PrefabParentObject: {fileID: 400004, guid: c61778281aa9abe459f20b5ed0581d8d, type: 3} - m_PrefabInternal: {fileID: 388431762} ---- !u!1 &505289391 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 505289392} - - component: {fileID: 505289393} - m_Layer: 0 - m_Name: ParticleViewerInstanced - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &505289392 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 505289391} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &505289393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 505289391} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6d8d9920ebddf6247accd7655895ed34, type: 3} - m_Name: - m_EditorClassIdentifier: - buffer: {fileID: 1503302983} - material: {fileID: 2100000, guid: cc1041196be864c4cbe1b6a6118fe495, type: 2} - reference: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &590004640 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 590004641} - - component: {fileID: 590004642} - - component: {fileID: 590004644} - - component: {fileID: 590004643} - m_Layer: 0 - m_Name: ParticleViewerMesh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &590004641 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &590004642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d54292eb10cbcf43a98b855de6807e7, type: 3} - m_Name: - m_EditorClassIdentifier: - buffer: {fileID: 1503302983} - material: {fileID: 2100000, guid: 6c404ebf6ff877a46a9ac3132b7c648d, type: 2} - shader: {fileID: 7200000, guid: 226ca53b2a6b1f34cb8e462337683d07, type: 3} - references: - - {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &590004643 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 4294967295 - m_Materials: - - {fileID: 2100000, guid: 305605d3346fb2f4fbad85f4e832bed2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &590004644 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_Mesh: {fileID: 0} ---- !u!1 &670902531 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 670902532} - - component: {fileID: 670902535} - - component: {fileID: 670902534} - - component: {fileID: 670902533} - m_Layer: 0 - m_Name: Sphere - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &670902532 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 5, y: 5, z: 5} - m_Children: [] - m_Father: {fileID: 1610402962} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &670902533 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 4294967295 - m_Materials: - - {fileID: 2100000, guid: 305605d3346fb2f4fbad85f4e832bed2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &670902534 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &670902535 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &894860818 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 894860822} - - component: {fileID: 894860821} - - component: {fileID: 894860820} - - component: {fileID: 894860819} - - component: {fileID: 894860825} - - component: {fileID: 894860824} - - component: {fileID: 894860823} - m_Layer: 1 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &894860819 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 ---- !u!124 &894860820 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 ---- !u!20 &894860821 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: 3 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 1 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &894860822 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_LocalRotation: {x: -0, y: 0.87219614, z: -0, w: 0.4891563} - m_LocalPosition: {x: -2.26, y: 0.86, z: 1.59} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 121.43001, z: 0} ---- !u!114 &894860823 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} - m_Name: - m_EditorClassIdentifier: - sharedProfile: {fileID: 11400000, guid: 13848f592641d12488d9f26f621f4aea, type: 2} - isGlobal: 1 - blendDistance: 0 - weight: 1 - priority: 0 ---- !u!114 &894860824 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} - m_Name: - m_EditorClassIdentifier: - volumeTrigger: {fileID: 894860822} - volumeLayer: - serializedVersion: 2 - m_Bits: 2 - stopNaNPropagation: 1 - antialiasingMode: 2 - temporalAntialiasing: - jitterSpread: 0.75 - sharpness: 0.25 - stationaryBlending: 0.95 - motionBlending: 0.85 - fastApproximateAntialiasing: - fastMode: 0 - keepAlpha: 0 - fog: - enabled: 1 - excludeSkybox: 1 - debugLayer: - lightMeter: - width: 512 - height: 256 - showCurves: 1 - histogram: - width: 512 - height: 256 - channel: 3 - waveform: - exposure: 0.12 - height: 256 - vectorscope: - size: 256 - exposure: 0.12 - overlaySettings: - motionColorIntensity: 4 - motionGridSize: 64 - colorBlindnessType: 0 - colorBlindnessStrength: 1 - m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} - m_ShowToolkit: 0 - m_ShowCustomSorter: 0 - breakBeforeColorGrading: 0 - m_BeforeTransparentBundles: [] - m_BeforeStackBundles: [] - m_AfterStackBundles: [] ---- !u!114 &894860825 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fdea3b4bfb3beda43b2ce0152c3dcfc8, type: 3} - m_Name: - m_EditorClassIdentifier: - superSize: 2 - prefix: ScreenCapture ---- !u!4 &933572036 stripped -Transform: - m_PrefabParentObject: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - m_PrefabInternal: {fileID: 1469853377} ---- !u!1 &1004254532 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1004254533} - - component: {fileID: 1004254534} - - component: {fileID: 1004254536} - - component: {fileID: 1004254535} - m_Layer: 0 - m_Name: GameObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1004254533 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1004254532} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1004254534 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1004254532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0df48618396d21940afdaf83eae62f58, type: 3} - m_Name: - m_EditorClassIdentifier: - filename: ParticleDance - rootTransforms: - - {fileID: 590004641} ---- !u!23 &1004254535 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1004254532} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 4294967295 - m_Materials: - - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1004254536 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1004254532} - m_Mesh: {fileID: 0} ---- !u!1 &1183085976 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1183085977} - - component: {fileID: 1183085980} - - component: {fileID: 1183085978} - m_Layer: 0 - m_Name: Cylinder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1183085977 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1183085976} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -1, z: 0} - m_LocalScale: {x: 100, y: 1, z: 100} - m_Children: [] - m_Father: {fileID: 1610402962} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1183085978 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1183085976} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 4294967295 - m_Materials: - - {fileID: 2100000, guid: 54c13d9de6d77834994872fbf5c7082b, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1183085980 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1183085976} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1297859255 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1297859256} - - component: {fileID: 1297859257} - m_Layer: 0 - m_Name: ParticleUpdater - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1297859256 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1297859255} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1297859257 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1297859255} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 364a6df5fc849f7448e97efcaa6cefdc, type: 3} - m_Name: - m_EditorClassIdentifier: - reset: 0 - maxParticles: 3000 - particleBuffer: {fileID: 1503302983} - homeBuffer: {fileID: 1766716369} - homeVelocityBuffer: {fileID: 1705255769} - shader: {fileID: 7200000, guid: e08afbf5a516b754a8eb9de35a9f5e6a, type: 3} - uniformBuffer: {fileID: 1515258535} - cosineGradient: {fileID: 11400000, guid: 0b6d4f25fdc8b8448a67827d394f8c07, type: 2} - debug: ---- !u!1 &1404171734 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1404171735} - - component: {fileID: 1404171737} - m_Layer: 0 - m_Name: HomeBuffer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1404171735 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1404171734} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.007, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1766716368} - - {fileID: 1705255768} - - {fileID: 933572036} - - {fileID: 388431763} - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1404171737 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1404171734} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8eb9b37b2e6fe504c948b6b2ad22a38c, type: 3} - m_Name: - m_EditorClassIdentifier: - shader: {fileID: 7200000, guid: fa89158a0f676c9479248d6a1b0cee36, type: 3} - positionBuffer: {fileID: 1766716369} - velocityBuffer: {fileID: 1705255769} ---- !u!1001 &1469853377 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1404171735} - m_Modifications: - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_LocalPosition.x - value: -1.22 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 400004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 9500000, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_Controller - value: - objectReference: {fileID: 9100000, guid: 2fdeb833902f3f74ea50bed9c52e3399, type: 2} - - target: {fileID: 100004, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 75dc5464563dbed41984cdfa83943ba2, type: 3} - m_IsPrefabParent: 0 ---- !u!1 &1503302982 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1503302984} - - component: {fileID: 1503302983} - m_Layer: 0 - m_Name: StructuredBuffer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1503302983 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1503302982} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: afa75a2a1fe8aff4ab1d6418df9d62dd, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: ssbo ---- !u!4 &1503302984 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1503302982} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1515258533 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1515258534} - - component: {fileID: 1515258535} - - component: {fileID: 1515258536} - m_Layer: 0 - m_Name: Uniforms - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1515258534 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1515258533} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1515258535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1515258533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: de2687c4b3b02dc4ebc0495697f1cfb0, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: uniform_buffer - uniform: {fileID: 11400000, guid: c7e1ee53cbe14844380318198723f1e8, type: 2} ---- !u!114 &1515258536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1515258533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 799fd07762a67b348818cbe8e6502e21, type: 3} - m_Name: - m_EditorClassIdentifier: - impule: {fileID: 670902532} ---- !u!1 &1571173705 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1571173706} - - component: {fileID: 1571173707} - m_Layer: 0 - m_Name: ParticleViewerProcedural - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &1571173706 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1571173705} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1571173707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1571173705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e2f970277ae55db488ae9e5e4d484912, type: 3} - m_Name: - m_EditorClassIdentifier: - buffer: {fileID: 1503302983} - material: {fileID: 2100000, guid: 2c82eba6891c0044f9854bb70b0da2ef, type: 2} ---- !u!1 &1610402961 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1610402962} - m_Layer: 0 - m_Name: Ground - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1610402962 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1610402961} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1183085977} - - {fileID: 670902532} - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1635776202 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1635776204} - m_Layer: 0 - m_Name: ParticleWorks - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1635776204 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1635776202} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1503302984} - - {fileID: 1297859256} - - {fileID: 1571173706} - - {fileID: 590004641} - - {fileID: 505289392} - - {fileID: 1515258534} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1705255767 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1705255768} - - component: {fileID: 1705255769} - m_Layer: 0 - m_Name: HomeVelocityBuffer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1705255768 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1705255767} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1404171735} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1705255769 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1705255767} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: afa75a2a1fe8aff4ab1d6418df9d62dd, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: home_velocity_buffer ---- !u!1 &1766716367 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1766716368} - - component: {fileID: 1766716369} - m_Layer: 0 - m_Name: HomePositionBuffer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1766716368 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1766716367} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1404171735} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1766716369 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1766716367} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: afa75a2a1fe8aff4ab1d6418df9d62dd, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: home_buffer diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity.meta deleted file mode 100644 index 3dfc27e..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleDance.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: de3d241ea26743343865c5090195c069 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset deleted file mode 100644 index 0e99221..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 852ced439e5120c44bd352e9c29a164f, type: 3} - m_Name: ParticleUniforms - m_EditorClassIdentifier: - numRate: 1 - movement: 1 - geomSize: 0.069 - velocityDamping: 1 - lifeDuration: 0 - lifeVariation: 0 - convergence: 0.097 - homeStrength: 0.165 - noiseStrength: 0.208 - noiseSeed: 0.5 - noiseTimeScale: 1 - noiseFrequency: 0.217 - forceDirection: {x: 0, y: 0, z: 0} - forceStrength: 0 - impulsePosition: {x: 0, y: 0, z: 0} - impulseRadius: 3 - impulseStrength: -1 diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset.meta deleted file mode 100644 index 1bc24af..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniforms.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 01c39e7b96a04b24f87d437d0c5474e2 -timeCreated: 1513320663 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset deleted file mode 100644 index 17feda8..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 852ced439e5120c44bd352e9c29a164f, type: 3} - m_Name: ParticleUniformsForMeshVertex - m_EditorClassIdentifier: - numRate: 1 - movement: 1 - geomSize: 0.063 - velocityDamping: 1 - lifeDuration: 1 - lifeVariation: 0.571 - convergence: 0 - homeStrength: 0 - noiseStrength: 0.02 - noiseSeed: 0.5 - noiseTimeScale: 1 - noiseFrequency: 0.831 - forceDirection: {x: 0, y: 0, z: 0} - forceStrength: 0.026 - impulsePosition: {x: 0, y: 0, z: 0} - impulseRadius: 3 - impulseStrength: 0 diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset.meta deleted file mode 100644 index ef1dfa5..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleUniformsForMeshVertex.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c7e1ee53cbe14844380318198723f1e8 -timeCreated: 1513320663 -licenseType: Free -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity deleted file mode 100644 index b4ce2bd..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity +++ /dev/null @@ -1,1017 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 8 - m_Fog: 0 - m_FogColor: {r: 0.5921569, g: 0.47450984, b: 0.2901961, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 2100000, guid: d8da8ee0c05959f40b595cff10460db1, type: 2} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 195910678} - m_IndirectSpecularColor: {r: 0.04364972, g: 0.07841372, b: 0.104287446, a: 1} ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 0 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 9 - m_Resolution: 2 - m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 2 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 1 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &88184734 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 88184735} - - component: {fileID: 88184736} - m_Layer: 0 - m_Name: HomeBuffer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &88184735 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 88184734} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &88184736 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 88184734} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: afa75a2a1fe8aff4ab1d6418df9d62dd, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: home_buffer ---- !u!1 &195910677 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 195910679} - - component: {fileID: 195910678} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &195910678 -Light: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 195910677} - m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 0.93134546, b: 0.8715508, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 4 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &195910679 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 195910677} - m_LocalRotation: {x: 0.052217025, y: 0.9392279, z: -0.29613733, w: 0.16561128} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 35, y: 160, z: 0} ---- !u!1 &300019303 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 300019305} - - component: {fileID: 300019304} - m_Layer: 0 - m_Name: Reflection Probe - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!215 &300019304 -ReflectionProbe: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300019303} - m_Enabled: 1 - serializedVersion: 2 - m_Type: 0 - m_Mode: 1 - m_RefreshMode: 1 - m_TimeSlicingMode: 0 - m_Resolution: 128 - m_UpdateFrequency: 0 - m_BoxSize: {x: 100, y: 100, z: 100} - m_BoxOffset: {x: 0, y: 0, z: 0} - m_NearClip: 0.3 - m_FarClip: 1000 - m_ShadowDistance: 100 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_IntensityMultiplier: 1 - m_BlendDistance: 1 - m_HDR: 1 - m_BoxProjection: 0 - m_RenderDynamicObjects: 0 - m_UseOcclusionCulling: 1 - m_Importance: 1 - m_CustomBakedTexture: {fileID: 0} ---- !u!4 &300019305 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 300019303} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0.5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &505289391 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 505289392} - - component: {fileID: 505289393} - m_Layer: 0 - m_Name: ParticleViewerInstanced - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &505289392 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 505289391} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &505289393 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 505289391} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6d8d9920ebddf6247accd7655895ed34, type: 3} - m_Name: - m_EditorClassIdentifier: - buffer: {fileID: 1503302983} - material: {fileID: 2100000, guid: cc1041196be864c4cbe1b6a6118fe495, type: 2} - reference: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &590004640 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 590004641} - - component: {fileID: 590004642} - - component: {fileID: 590004644} - - component: {fileID: 590004643} - m_Layer: 0 - m_Name: ParticleViewerMesh - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &590004641 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &590004642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d54292eb10cbcf43a98b855de6807e7, type: 3} - m_Name: - m_EditorClassIdentifier: - buffer: {fileID: 1503302983} - material: {fileID: 2100000, guid: 6c404ebf6ff877a46a9ac3132b7c648d, type: 2} - shader: {fileID: 7200000, guid: 226ca53b2a6b1f34cb8e462337683d07, type: 3} - references: [] ---- !u!23 &590004643 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 305605d3346fb2f4fbad85f4e832bed2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &590004644 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 590004640} - m_Mesh: {fileID: 0} ---- !u!1 &670902531 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 670902532} - - component: {fileID: 670902535} - - component: {fileID: 670902534} - - component: {fileID: 670902533} - m_Layer: 0 - m_Name: Sphere - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &670902532 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 5, y: 5, z: 5} - m_Children: [] - m_Father: {fileID: 1610402962} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &670902533 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 305605d3346fb2f4fbad85f4e832bed2, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!135 &670902534 -SphereCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &670902535 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 670902531} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &799393429 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 799393430} - - component: {fileID: 799393431} - m_Layer: 0 - m_Name: HomeVelocityBuffer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &799393430 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 799393429} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &799393431 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 799393429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: afa75a2a1fe8aff4ab1d6418df9d62dd, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: home_buffer ---- !u!1 &894860818 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 894860822} - - component: {fileID: 894860821} - - component: {fileID: 894860820} - - component: {fileID: 894860819} - - component: {fileID: 894860824} - - component: {fileID: 894860823} - m_Layer: 1 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &894860819 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 ---- !u!124 &894860820 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 ---- !u!20 &894860821 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: 3 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 1 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &894860822 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} - m_LocalPosition: {x: -3, y: 10, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} ---- !u!114 &894860823 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} - m_Name: - m_EditorClassIdentifier: - sharedProfile: {fileID: 11400000, guid: 13848f592641d12488d9f26f621f4aea, type: 2} - isGlobal: 1 - blendDistance: 0 - weight: 1 - priority: 0 ---- !u!114 &894860824 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 894860818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} - m_Name: - m_EditorClassIdentifier: - volumeTrigger: {fileID: 894860822} - volumeLayer: - serializedVersion: 2 - m_Bits: 2 - stopNaNPropagation: 1 - antialiasingMode: 2 - temporalAntialiasing: - jitterSpread: 0.75 - sharpness: 0.25 - stationaryBlending: 0.95 - motionBlending: 0.85 - subpixelMorphologicalAntialiasing: - quality: 2 - fastApproximateAntialiasing: - fastMode: 0 - keepAlpha: 0 - fog: - enabled: 1 - excludeSkybox: 1 - debugLayer: - lightMeter: - width: 512 - height: 256 - showCurves: 1 - histogram: - width: 512 - height: 256 - channel: 3 - waveform: - exposure: 0.12 - height: 256 - vectorscope: - size: 256 - exposure: 0.12 - overlaySettings: - motionColorIntensity: 4 - motionGridSize: 64 - colorBlindnessType: 0 - colorBlindnessStrength: 1 - m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} - m_ShowToolkit: 0 - m_ShowCustomSorter: 0 - breakBeforeColorGrading: 0 - m_BeforeTransparentBundles: [] - m_BeforeStackBundles: [] - m_AfterStackBundles: [] ---- !u!1 &1183085976 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1183085977} - - component: {fileID: 1183085980} - - component: {fileID: 1183085978} - m_Layer: 0 - m_Name: Cylinder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1183085977 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1183085976} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -6.58, z: 0} - m_LocalScale: {x: 100, y: 1, z: 100} - m_Children: [] - m_Father: {fileID: 1610402962} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1183085978 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1183085976} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 2100000, guid: 54c13d9de6d77834994872fbf5c7082b, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 1 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1183085980 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1183085976} - m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1297859255 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1297859256} - - component: {fileID: 1297859257} - m_Layer: 0 - m_Name: ParticleUpdater - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1297859256 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1297859255} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1297859257 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1297859255} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 364a6df5fc849f7448e97efcaa6cefdc, type: 3} - m_Name: - m_EditorClassIdentifier: - reset: 0 - maxParticles: 100000 - particleBuffer: {fileID: 1503302983} - homeBuffer: {fileID: 88184736} - homeVelocityBuffer: {fileID: 799393431} - shader: {fileID: 7200000, guid: e08afbf5a516b754a8eb9de35a9f5e6a, type: 3} - uniformBuffer: {fileID: 1515258535} - cosineGradient: {fileID: 11400000, guid: 0b6d4f25fdc8b8448a67827d394f8c07, type: 2} - debug: ---- !u!1 &1503302982 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1503302984} - - component: {fileID: 1503302983} - m_Layer: 0 - m_Name: StructuredBuffer - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1503302983 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1503302982} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: afa75a2a1fe8aff4ab1d6418df9d62dd, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: ssbo ---- !u!4 &1503302984 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1503302982} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1515258533 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1515258534} - - component: {fileID: 1515258535} - - component: {fileID: 1515258536} - m_Layer: 0 - m_Name: Uniforms - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1515258534 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1515258533} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1515258535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1515258533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: de2687c4b3b02dc4ebc0495697f1cfb0, type: 3} - m_Name: - m_EditorClassIdentifier: - bufferName: uniform_buffer - uniform: {fileID: 11400000, guid: 01c39e7b96a04b24f87d437d0c5474e2, type: 2} ---- !u!114 &1515258536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1515258533} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 799fd07762a67b348818cbe8e6502e21, type: 3} - m_Name: - m_EditorClassIdentifier: - impule: {fileID: 670902532} ---- !u!1 &1571173705 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1571173706} - - component: {fileID: 1571173707} - m_Layer: 0 - m_Name: ParticleViewerProcedural - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!4 &1571173706 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1571173705} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1635776204} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1571173707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1571173705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e2f970277ae55db488ae9e5e4d484912, type: 3} - m_Name: - m_EditorClassIdentifier: - buffer: {fileID: 1503302983} - material: {fileID: 2100000, guid: 2c82eba6891c0044f9854bb70b0da2ef, type: 2} ---- !u!1 &1610402961 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1610402962} - m_Layer: 0 - m_Name: Ground - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1610402962 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1610402961} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1183085977} - - {fileID: 670902532} - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1635776202 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1635776204} - m_Layer: 0 - m_Name: ParticleWorks - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1635776204 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1635776202} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1503302984} - - {fileID: 1297859256} - - {fileID: 1571173706} - - {fileID: 590004641} - - {fileID: 505289392} - - {fileID: 1515258534} - - {fileID: 88184735} - - {fileID: 799393430} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity.meta deleted file mode 100644 index 0ea041c..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/ParticleWorks.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 111e8696392ec08489338cded28613a2 -timeCreated: 1513312462 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script.meta deleted file mode 100644 index 550eedf..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: fb695c06cfd78384791aea3307ffdafe -folderAsset: yes -timeCreated: 1513318441 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs deleted file mode 100644 index 8acb4ef..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class BlendedCosineGradient : MonoBehaviour - { - [SerializeField] - Klak.Chromatics.CosineGradient fromGradient = null; - - [SerializeField] - Klak.Chromatics.CosineGradient toGradient = null; - - [Range(0, 1)] - public float rate = 0.0f; - - public Vector3 coeffsA { get { return Vector3.Lerp(fromGradient.coeffsA, toGradient.coeffsA, rate); } } - public Vector3 coeffsB { get { return Vector3.Lerp(fromGradient.coeffsB, toGradient.coeffsB, rate); } } - public Vector3 coeffsC2 { get { return Vector3.Lerp(fromGradient.coeffsC2, toGradient.coeffsC2, rate); } } - public Vector3 coeffsD2 { get { return Vector3.Lerp(fromGradient.coeffsD2, toGradient.coeffsD2, rate); } } - - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs.meta deleted file mode 100644 index 7455201..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/BlendedCosineGradient.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 47a33aaf81d9cd84190b40b44c73516c -timeCreated: 1525079670 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs deleted file mode 100644 index 509a02b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public struct Particle - { - public Vector3 position; - public float seed; - public Color color; - public Vector3 velocity; - public float life; - public Vector4 quat; - public Matrix4x4 model_matrix; - }; -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs.meta deleted file mode 100644 index a97693a..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Defines.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: dc08faa58ae0bd74684f723a22959463 -timeCreated: 1513318457 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs deleted file mode 100644 index 7c85655..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public static class ExtensionMethods - { - public static ComputeBuffer CreateIndirectComputeArgsBuffer(this ComputeShader shader, int num_thread_x, int num_thread_y, int num_thread_z) - { - uint x, y, z; - shader.GetKernelThreadGroupSizes(0, out x, out y, out z); - uint[] args = new uint[3] - { - (uint)Mathf.CeilToInt((float)num_thread_x / x), - (uint)Mathf.CeilToInt((float)num_thread_y / y), - (uint)Mathf.CeilToInt((float)num_thread_z / z) - }; - var buf = new ComputeBuffer(1, args.Length * sizeof(uint), ComputeBufferType.IndirectArguments); - buf.SetData(args); - return buf; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs.meta deleted file mode 100644 index 166d8e3..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ExtensionMethods.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 71a803c8174401a42a8aab03320f61ab -timeCreated: 1513949514 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs deleted file mode 100644 index 9ba4356..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class MeshVertexCollect : MonoBehaviour - { - public ComputeShader shader; - ComputeBuffer args_buffer = null; - [SerializeField] StructuredBuffer positionBuffer; - [SerializeField] StructuredBuffer velocityBuffer; - - List renderers; - List vertex_buffers; - - Mesh bake_mesh; - - private void Start() - { - renderers = new List(); - renderers.AddRange(GetComponentsInChildren()); - vertex_buffers = new List(); - - int sum = 0; - foreach (var rdr in renderers) - { - var m = rdr.sharedMesh; - var ptr = m.GetNativeVertexBufferPtr(0); - int size = Utility.Buffer.GetSize(ptr); - int count = m.vertexCount; - int stride = size / m.vertexCount; - sum += count; - - ComputeBuffer buf = new ComputeBuffer(count, stride); - Utility.Buffer.Copy(buf.GetNativeBufferPtr(), m.GetNativeVertexBufferPtr(0)); - vertex_buffers.Add(buf); - } - - positionBuffer.Allocate(sum, sizeof(float) * 4); - velocityBuffer.Allocate(sum, sizeof(float) * 4); - - args_buffer = shader.CreateIndirectComputeArgsBuffer(positionBuffer.count, 1, 1); - - bake_mesh = new Mesh(); - - } - - private void FixedUpdate() - { - for (int i = 0; i < renderers.Count; i++) - { - renderers[i].BakeMesh(bake_mesh); - Utility.Buffer.Copy(vertex_buffers[i].GetNativeBufferPtr(), bake_mesh.GetNativeVertexBufferPtr(0)); - } - - - int index = 0; - shader.SetBuffer(0, positionBuffer.bufferName, positionBuffer.obj); - shader.SetBuffer(0, velocityBuffer.bufferName, velocityBuffer.obj); - for (int i = 0; i < renderers.Count; i++) - //foreach (var buf in vertex_buffers) - { - var buf = vertex_buffers[i]; - shader.SetInt("index", index); - shader.SetInt("count", buf.count); - shader.SetMatrix("model_matrix", renderers[i].transform.localToWorldMatrix); - shader.SetBuffer(0, "vertex_buffer", buf); - shader.DispatchIndirect(0, args_buffer); - index += buf.count; - } - - - } - - private void OnDestroy() - { - if (args_buffer != null) - { - args_buffer.Release(); - args_buffer = null; - } - - foreach (var buf in vertex_buffers) - { - buf.Release(); - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs.meta deleted file mode 100644 index f388567..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/MeshVertexCollect.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8eb9b37b2e6fe504c948b6b2ad22a38c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs deleted file mode 100644 index f438c6a..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class ParticleUniformBridge : MonoBehaviour - { - public Transform impule; - - UniformStructuredBuffer uniform_buffer; - - private void Start() - { - uniform_buffer = GetComponent(); - } - - private void FixedUpdate() - { - var uniforms = uniform_buffer.uniform as ParticleUniforms; - - if (impule != null) - { - uniforms.impulsePosition = impule.position; - } - } - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs.meta deleted file mode 100644 index 1c61f66..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniformBridge.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 799fd07762a67b348818cbe8e6502e21 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs deleted file mode 100644 index ab080fe..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - [CreateAssetMenu(menuName = "UltraCombos/ParticleUniforms", fileName = "ParticleUniforms", order = 1000)] - public class ParticleUniforms : ScriptableObject - { - [Header("General")] - //[Range(1, 1 << 21)] - //public int maxParticles = 1 << 20; - //[Range(0, 1)] - //public int isEmit = 1; - [Range(0, 1)] - public float numRate = 1.0f; - [Range(0, 10)] - public float movement = 1.0f; - [Range(0, 1)] - public float geomSize = 0.01f; - //[Range(0, 1)] - //public float colorize = 1.0f; - [Range(0, 1)] - public float velocityDamping = 1.0f; - - [Header("Life")] - [Range(0, 60)] - public float lifeDuration = 0.0f; - [Range(0, 1)] - public float lifeVariation = 0.0f; - - [Header("Convergence")] - [Range(0, 1)] - public float convergence = 0.0f; - - [Header("Home")] - [Range(0, 1)] - public float homeStrength = 0.0f; - - [Header("Noise")] - [Range(0, 1)] - public float noiseStrength = 0.0f; - [Range(0, 1)] - public float noiseSeed = 0.5f; - [Range(0, 1)] - public float noiseTimeScale = 1.0f; - [Range(0, 1)] - public float noiseFrequency = 0.5f; - - [Header("Directional Force")] - public Vector3 forceDirection; - [Range(0, 1)] - public float forceStrength = 0.0f; - - [Header("Impulse Force")] - public Vector3 impulsePosition; - [Range(0, 10)] - public float impulseRadius = 1.0f; - [Range(-1, 1)] - public float impulseStrength = 0.0f; - - } -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs.meta deleted file mode 100644 index 1a16794..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUniforms.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 852ced439e5120c44bd352e9c29a164f -timeCreated: 1513320246 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs deleted file mode 100644 index 48b8843..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class ParticleUpdater : MonoBehaviour - { - public bool reset = false; - [Range(1, 1 << 20)] - public int maxParticles = 1 << 15; - public StructuredBuffer particleBuffer = null; - List buffer_data = null; - public StructuredBuffer homeBuffer = null; - public StructuredBuffer homeVelocityBuffer = null; - - public ComputeShader shader = null; - ComputeBuffer args_buffer = null; - - public UniformStructuredBuffer uniformBuffer; - - public Klak.Chromatics.CosineGradient cosineGradient = null; - - bool is_initialized = false; - - [SerializeField] - string debug; - - private void Start() - { - StartCoroutine(Initialize()); - } - - private void FixedUpdate() - { - if (is_initialized == false) - return; - - if (reset) - { - reset = false; - OnReset(); - } - - UpdateParticle(Time.fixedDeltaTime); - } - - private void OnDestroy() - { - Utilities.Release(ref args_buffer); - } - - private void OnReset() - { - particleBuffer.SetData(buffer_data); - } - - private IEnumerator Initialize() - { -#if false - { - uint[] args = new uint[3] { (uint)Mathf.CeilToInt((float)maxHomes / WORK_GROUP_SIZE), 1, 1 }; - home_args_buffer = new ComputeBuffer(1, args.Length * sizeof(uint), ComputeBufferType.IndirectArguments); - home_args_buffer.SetData(args); - } -#endif - { - args_buffer = shader.CreateIndirectComputeArgsBuffer(maxParticles, 1, 1); - } - - { - buffer_data = new List(); - yield return Utilities.GetRandomParticleData(maxParticles, buffer_data); - } - - is_initialized = true; - OnReset(); - } - - private void UpdateParticle(float time_step) - { - { - shader.SetFloat("timeStep", time_step); - shader.SetFloat("timeValue", Utilities.GetTimeValue()); - shader.SetInt("home_count", homeBuffer.IsValid ? homeBuffer.count : 0); - shader.SetFloat("bufferCount", particleBuffer.count); - - if (cosineGradient != null) - { - shader.SetVector("coeffsA", cosineGradient.coeffsA); - shader.SetVector("coeffsB", cosineGradient.coeffsB); - shader.SetVector("coeffsC", cosineGradient.coeffsC2); - shader.SetVector("coeffsD", cosineGradient.coeffsD2); - } - - shader.SetBuffer(0, particleBuffer.bufferName, particleBuffer.obj); - shader.SetBuffer(0, uniformBuffer.bufferName, uniformBuffer.obj); - if (homeBuffer.IsValid) shader.SetBuffer(0, homeBuffer.bufferName, homeBuffer.obj); - if (homeVelocityBuffer.IsValid) shader.SetBuffer(0, homeVelocityBuffer.bufferName, homeVelocityBuffer.obj); - - shader.DispatchIndirect(0, args_buffer); - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs.meta deleted file mode 100644 index 9d93793..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleUpdater.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 364a6df5fc849f7448e97efcaa6cefdc -timeCreated: 1513317911 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs deleted file mode 100644 index d1ed119..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class ParticleViewer : MonoBehaviour - { - public StructuredBuffer buffer; - public Material material; - - public bool Initialized { get { return is_initialized; } } - bool is_initialized = false; - - private IEnumerator Start() - { - while (buffer.count == 0) - yield return null; - - OnStart(); - yield return Initialize(); - - is_initialized = true; - } - - private void Update() - { - if (is_initialized == false) - return; - OnUpdate(); - } - - private void FixedUpdate() - { - if (is_initialized == false) - return; - OnFixedUpdate(); - } - - private void OnDestroy() - { - Release(); - } - - protected virtual void OnStart() - { - - } - - protected virtual void OnUpdate() - { - - } - - protected virtual void OnFixedUpdate() - { - - } - - protected virtual IEnumerator Initialize() - { - is_initialized = true; - yield return null; - } - - protected virtual void Release() - { - - } - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs.meta deleted file mode 100644 index b002802..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: f9b1db6ec9855f941a3be0a6979d3bda -timeCreated: 1513320747 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs deleted file mode 100644 index 22a96db..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class ParticleViewerInstanced : ParticleViewer - { - public Mesh reference; - Bounds bounds; - ComputeBuffer args_buffer = null; - MaterialPropertyBlock props = null; - - protected override void OnUpdate() - { - props.SetMatrix("model_matrix", transform.localToWorldMatrix); - Graphics.DrawMeshInstancedIndirect(reference, 0, material, bounds, args_buffer, 0, props); - } - - protected override IEnumerator Initialize() - { - bounds = new Bounds(Vector3.zero, Vector3.one * 100); - - // index count per instance, instance count, start index location, base vertex location, start instance location - var args = new uint[5] { reference.GetIndexCount(0), (uint)buffer.count, 0, 0, 0 }; - args_buffer = new ComputeBuffer(1, args.Length * sizeof(uint), ComputeBufferType.IndirectArguments); - args_buffer.SetData(args); - - props = new MaterialPropertyBlock(); - props.SetBuffer(buffer.bufferName, buffer.obj); - - yield return null; - } - - protected override void Release() - { - Utilities.Release(ref args_buffer); - } - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs.meta deleted file mode 100644 index 80ad788..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerInstanced.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 6d8d9920ebddf6247accd7655895ed34 -timeCreated: 1513320747 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs deleted file mode 100644 index 054576c..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - [RequireComponent(typeof(MeshFilter))] - [RequireComponent(typeof(MeshRenderer))] - public class ParticleViewerMesh : ParticleViewer - { - public ComputeShader shader; - ComputeBuffer args_buffer = null; - ComputeBuffer origin_buffer = null; - ComputeBuffer vertex_buffer = null; - public List references; - Mesh mesh = null; - System.IntPtr mesh_buffer_handle; - - public ComputeBuffer vertexBuffer { get { return vertex_buffer; } } - - int buffer_count = 0; - public int BufferCount { set { buffer_count = value; } } - - protected override void OnFixedUpdate() - { - shader.SetBuffer(0, buffer.bufferName, buffer.obj); - shader.SetBuffer(0, "origin_buffer", origin_buffer); - shader.SetBuffer(0, "vertex_buffer", vertex_buffer); - shader.DispatchIndirect(0, args_buffer); - - Utility.Buffer.Copy(mesh_buffer_handle, vertex_buffer.GetNativeBufferPtr()); - } - - protected override void OnUpdate() - { - material.SetBuffer(buffer.bufferName, buffer.obj); - - } - - protected override void Release() - { - if (origin_buffer != null) - { - origin_buffer.Release(); - origin_buffer = null; - } - - if (vertex_buffer != null) - { - vertex_buffer.Release(); - vertex_buffer = null; - } - - if (args_buffer != null) - { - args_buffer.Release(); - args_buffer = null; - } - } - - protected override IEnumerator Initialize() - { - if (references.Count == 0) - { - var vertices = new List(); - var normals = new List(); - var colors = new List(); - var uvs = new List(); - var indices = new List(); - int side = 3; - float delta = Mathf.PI * 2.0f / side; - for (int i = 0; i < side; i++) - { - float a = -delta * i; - float x = Mathf.Cos(a); - float y = Mathf.Sin(a); - vertices.Add(new Vector3(x, 0, y)); - normals.Add(new Vector3(0, 1, 0)); - colors.Add(Color.white); - uvs.Add(new Vector2(x * 0.5f + 0.5f, y * 0.5f + 0.5f)); - indices.Add(i); - } - var m = new Mesh(); - m.SetVertices(vertices); - m.SetNormals(normals); - m.SetColors(colors); - m.SetUVs(0, uvs); - m.SetIndices(indices.ToArray(), MeshTopology.Triangles, 0); - m.UploadMeshData(false); - m.name = string.Format("{0} sides mesh", side); - references.Add(m); - } - - mesh = new Mesh(); - int max_particles = buffer_count > 0 ? buffer_count : buffer.count; - yield return Utilities.GetReferencesParticleMesh(references, max_particles, mesh); - - { - mesh.name = string.Format("v: {0}", mesh.vertexCount); - var mesh_filter = GetComponent(); - mesh_filter.sharedMesh = mesh; - //var mesh_renderer = GetComponent(); - //mesh_renderer.material = material; - //mesh_renderer.allowOcclusionWhenDynamic = false; - } - - { - mesh_buffer_handle = mesh.GetNativeVertexBufferPtr(0); - int size = Utility.Buffer.GetSize(mesh_buffer_handle); - int count = mesh.vertexCount; - int stride = size / count; - //print("size: " + size); - //print("count: " + count); - //print("stride: " + stride); - origin_buffer = new ComputeBuffer(count, stride); - Utility.Buffer.Copy(origin_buffer.GetNativeBufferPtr(), mesh_buffer_handle); - vertex_buffer = new ComputeBuffer(count, stride); - Utility.Buffer.Copy(vertex_buffer.GetNativeBufferPtr(), mesh_buffer_handle); - - args_buffer = shader.CreateIndirectComputeArgsBuffer(count, 1, 1); - } - } - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs.meta deleted file mode 100644 index 936560e..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerMesh.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 4d54292eb10cbcf43a98b855de6807e7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: - - buffer: {instanceID: 0} - - material: {instanceID: 0} - - shader: {fileID: 7200000, guid: 226ca53b2a6b1f34cb8e462337683d07, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs deleted file mode 100644 index aadf360..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class ParticleViewerProcedural : ParticleViewer - { - ComputeBuffer args_buffer = null; - public int VertexCount { set { vertex_count = value; } } - int vertex_count = -1; - public bool cullingMask = false; - - private void OnRenderObject() - { - if (Initialized == false) - return; - if (Utilities.SkipCamera(Camera.current.name)) - return; - int mask = Camera.current.cullingMask; - if (cullingMask && mask > -1 && mask != 1 << gameObject.layer) - return; - - material.SetPass(0); - material.SetMatrix("model_matrix", transform.localToWorldMatrix); - material.SetBuffer(buffer.bufferName, buffer.obj); - if (vertex_count < 0) - Graphics.DrawProceduralIndirect(MeshTopology.Points, args_buffer); - else - Graphics.DrawProcedural(MeshTopology.Points, vertex_count, 1); - } - - protected override IEnumerator Initialize() - { - var args = new uint[4] { (uint)buffer.count, 1, 0, 0 }; - args_buffer = new ComputeBuffer(1, args.Length * sizeof(uint), ComputeBufferType.IndirectArguments); - args_buffer.SetData(args); - - yield return null; - } - - protected override void Release() - { - Utilities.Release(ref args_buffer); - } - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs.meta deleted file mode 100644 index 58e0e06..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleViewerProcedural.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e2f970277ae55db488ae9e5e4d484912 -timeCreated: 1513320747 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs deleted file mode 100644 index b31f081..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class ParticleWorks : MonoBehaviour -{ - - void Start() - { - - } - - void Update() - { - - } -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs.meta deleted file mode 100644 index b2fbfac..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/ParticleWorks.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 516d0ee655a0aa54bb9a8f6205b6fb4e -timeCreated: 1513308272 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs deleted file mode 100644 index b458d3b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class StructuredBuffer : MonoBehaviour - { - public string bufferName = "ssbo"; - public int count { get { return (buffer != null) ? buffer.count : 0; } } - public int stride { get { return (buffer != null) ? buffer.stride : 0; } } - public ComputeBuffer obj { get { return buffer; } } - ComputeBuffer buffer = null; - public bool IsValid { get { return (buffer != null); } } - - System.IntPtr pointer; - public System.IntPtr handle - { - get - { - if (pointer == System.IntPtr.Zero) - pointer = obj.GetNativeBufferPtr(); - return pointer; - } - } - -#if false - [SerializeField] string debug; - private void FixedUpdate() - { - debug = string.Format("count: {0}, stride: {1}", count, stride); - } -#endif - - private void OnDestroy() - { - Release(); - } - - public void Allocate(int count, int stride) - { - Release(); - buffer = new ComputeBuffer(count, stride, ComputeBufferType.Default); - //Debug.LogFormat("ALLOCATE: count({0}), stride({1})", count, stride); - } - - public void SetData(List data) - { - int data_count = data.Count; - int data_stride = System.Runtime.InteropServices.Marshal.SizeOf(typeof(T)); - - if (buffer == null) - { - Allocate(data_count, data_stride); - } - else if (buffer.count * buffer.stride != data_count * data_stride) - { - Allocate(data_count, data_stride); - } - - buffer.SetData(data); - } - - public void Release() - { - if (buffer != null) - { - buffer.Release(); - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs.meta deleted file mode 100644 index cfaf074..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/StructuredBuffer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: afa75a2a1fe8aff4ab1d6418df9d62dd -timeCreated: 1513311430 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs deleted file mode 100644 index bae8e44..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class UniformBlendedStructuredBuffer : UniformStructuredBuffer - { - public ScriptableObject subUniform; - [Range(0, 1)] - public float rate; - - protected override void FixedUpdate() - { - var data = GetData(uniform); - var sub_data = GetData(subUniform); - - float v = Mathf.Clamp01(rate); - var res = new List(); - for (int i = 0; i < data.Count; i++) - { - res.Add(Mathf.Lerp(data[i], sub_data[i], v)); - } - SetData(res); - } - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs.meta deleted file mode 100644 index 9c80cc7..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformBlendedStructuredBuffer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3b2b572af25338e4594570cf0c8a1806 -timeCreated: 1525076508 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs deleted file mode 100644 index f476a94..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace UltraCombos -{ - public class UniformStructuredBuffer : StructuredBuffer - { - public ScriptableObject uniform; - - void Start() - { - int stride = GetStride(uniform.GetType()); - Allocate(stride / sizeof(float), sizeof(float)); - //Debug.LogFormat("stride: {0}", stride); - } - - protected virtual void FixedUpdate() - { - var data = GetData(uniform); - SetData(data); - } - - protected int GetStride(System.Type type) - { - int res = 0; - foreach (var field in type.GetFields()) - { - int s = System.Runtime.InteropServices.Marshal.SizeOf(field.FieldType); - res += s; - //Debug.LogFormat("{0}: {1}", field.Name, s); - } - return res; - } - - protected List GetData(object obj) - { - List values = new List(); - foreach (var field in obj.GetType().GetFields()) - { - var value = field.GetValue(obj); - - if (field.FieldType.Equals(typeof(int))) - { - values.Add((int)value); - } - else if (field.FieldType.Equals(typeof(float))) - { - values.Add((float)value); - } - else if (field.FieldType.Equals(typeof(Vector2))) - { - var v = (Vector2)value; - values.Add(v.x); - values.Add(v.y); - } - else if (field.FieldType.Equals(typeof(Vector3))) - { - var v = (Vector3)value; - values.Add(v.x); - values.Add(v.y); - values.Add(v.z); - } - else if (field.FieldType.Equals(typeof(Vector4))) - { - var v = (Vector4)value; - values.Add(v.x); - values.Add(v.y); - values.Add(v.z); - values.Add(v.w); - } - else - { - Debug.LogFormat("Field is invalid: {0} - {1}", field.Name, field.FieldType); - } - } - return values; - } - } -} - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs.meta deleted file mode 100644 index 1f245a9..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/UniformStructuredBuffer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: de2687c4b3b02dc4ebc0495697f1cfb0 -timeCreated: 1513427579 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs deleted file mode 100644 index 4b5cd5e..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs +++ /dev/null @@ -1,214 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -namespace UltraCombos -{ - public class Utilities - { - const float TWO_PI = Mathf.PI * 2.0f; - - public static float[] GetShuffleSeeds(int num) - { - List sources = new List(); - for (uint i = 0; i < num; i++) - sources.Add((float)i / num); - var rnd = new System.Random(); - return sources.OrderBy(item => rnd.Next()).ToArray(); - } - - public static Mesh[] GetUVIndexPolygons(int maxParticles, int side, float radius, float randomRadius = 0.0f, float startAngle = 0) - { -#if UNITY_2017_3_OR_NEWER - int num_meshes = 1; -#else - int limit = 65000; - int num_vertices = maxParticles * side; - int num_meshes = (num_vertices + limit - 1) / limit; -#endif - int ptc_per_mesh = maxParticles / num_meshes; - - Mesh[] meshes = new Mesh[num_meshes]; - - float r_mul = Mathf.Clamp01(randomRadius); - float r_max = radius * (1.0f + r_mul); - float r_min = radius * (1.0f - r_mul); - - for (int i = 0; i < num_meshes; i++) - { - var vertices = new List(); - var uvs = new List(); - var normals = new List(); - var indices = new List(); - - for (int j = 0; j < ptc_per_mesh; j++) - { - int index = i * ptc_per_mesh + j; - float delta_a = TWO_PI / side; - - for (uint k = 0; k < side; k++) - { - float a = delta_a * k + Mathf.PI / 4; - float x = Mathf.Cos(a); - float y = Mathf.Sin(a); - float r = Random.Range(r_min, r_max); - vertices.Add(new Vector3(x * r, y * r, 0)); - uvs.Add(new Vector4(x * 0.5f + 0.5f, y * 0.5f + 0.5f, index, k)); - normals.Add(new Vector3(0, 0, 1)); - } - - for (int k = 0; k < side - 2; k++) - { - indices.Add(j * side + 0); - indices.Add(j * side + k + 1); - indices.Add(j * side + k + 2); - } - } - - meshes[i] = new Mesh(); -#if UNITY_2017_3_OR_NEWER - meshes[i].indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; -#endif - meshes[i].SetVertices(vertices); - meshes[i].SetUVs(0, uvs); - meshes[i].SetNormals(normals); - meshes[i].SetIndices(indices.ToArray(), MeshTopology.Triangles, 0); - meshes[i].bounds = new Bounds(Vector3.zero, Vector3.one * 100.0f); - } - - return meshes; - } - - public static float GetTimeValue() - { - uint interval = 100000; - uint milli_time = (uint)(Time.time * 1000); - float value = milli_time % interval / (float)interval; - return Mathf.Sin(value * TWO_PI) * 0.5f + 0.5f; // continuous sin value - } - - public static void Release(ref ComputeBuffer buffer) - { - if (buffer != null) - buffer.Release(); - buffer = null; - } - - static List skip_camera_names = null; - public static bool SkipCamera(string name) - { - if (skip_camera_names == null) - skip_camera_names = new List() { "Preview Camera", "Preview Scene Camera" }; - return skip_camera_names.Contains(name); - } - - public static IEnumerator GetRandomParticleData(int amount, List result) - { - List seeds = new List(); - seeds.AddRange(GetShuffleSeeds(amount)); - List factors = new List(); - factors.AddRange(GetShuffleSeeds(amount)); - - float radius = 2.0f; - const int mod = 1 << 13; - for (int i = 0; i < amount; i++) - { - float x = Random.Range(-1.0f, 1.0f); - float y = Random.Range(-1.0f, 1.0f); - float z = Random.Range(-1.0f, 1.0f); - float r = Mathf.Pow(Random.Range(0.0f, 1.0f), 1.0f / 2.2f) * radius; - Vector3 pos = (new Vector3(x, y, z)).normalized * r; - - Particle p = new Particle(); - p.position = pos; - p.seed = seeds[i]; - p.color = new Vector4(1, 1, 1, factors[i]); - p.velocity = Vector3.zero; - p.life = Random.Range(1.0f, 0.0f); - var q = Random.rotation; - p.quat = new Vector4(q.x, q.y, q.z, q.w); - p.model_matrix = Matrix4x4.identity; - result.Add(p); - - if (i % mod == 0) - { - yield return null; - } - } - } - - public static IEnumerator GetReferencesParticleMesh(List referenceMeshes, int maxParticles, Mesh result) - { - int totalVertexCount = 0; - foreach (var m in referenceMeshes) - totalVertexCount += m.vertexCount; - int max_particles = maxParticles / referenceMeshes.Count; - int num_meshes = 1; - int ptc_per_mesh = max_particles / num_meshes; - - //for (int i = 0; i < num_meshes; i++) - { - int i = 0; - var vertices = new List(); - var normals = new List(); - var colors = new List(); - var uvs = new List(); - var indices = new List(); - var custom_uvs = new List(); - int begin_index = 0; - for (int j = 0; j < ptc_per_mesh; j++) - { - for (int k = 0; k < referenceMeshes.Count; k++) - { - int index = (i * ptc_per_mesh + j) * referenceMeshes.Count + k; - var mesh = referenceMeshes[k]; - vertices.AddRange(mesh.vertices); - normals.AddRange(mesh.normals); - uvs.AddRange(mesh.uv); - if (mesh.colors.Length == mesh.vertices.Length) - { - colors.AddRange(mesh.colors); - } - else - { - for (int ci = 0; ci < mesh.vertices.Length; ci++) - colors.Add(Color.white); - } - foreach (var idx in mesh.GetIndices(0)) - indices.Add(begin_index + idx); - for (int l = 0; l < mesh.vertexCount; l++) - custom_uvs.Add(new Vector4(mesh.uv[l].x, mesh.uv[l].y, index, k)); - begin_index += mesh.vertexCount; - } - - if (j % 1024 == 0) - { - yield return null; - } - - } - - //Mesh m = new Mesh(); - if (vertices.Count > 65000) - result.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; - result.SetVertices(vertices); - result.SetNormals(normals); - if (colors.Count == vertices.Count) - { - result.SetColors(colors); - } - //result.SetUVs(0, uvs); - result.SetUVs(0, custom_uvs); - result.SetIndices(indices.ToArray(), referenceMeshes[0].GetTopology(0), 0); - result.bounds = new Bounds(Vector3.zero, Vector3.one * 100); - result.UploadMeshData(false); - //meshes.Add(m); - } - - yield return null; - } - } -} - - diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs.meta deleted file mode 100644 index bd6b883..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Script/Utilities.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5ff350006f0c04048b030f5f5ac6bfac -timeCreated: 1513318561 -licenseType: Free -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader.meta deleted file mode 100644 index bee7340..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 970a2e35ee37f9b4480cfac047390d99 -folderAsset: yes -timeCreated: 1513318177 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc.meta deleted file mode 100644 index 935c8e8..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6ad29c6507346be46b99b7c01f9bc02a -folderAsset: yes -timeCreated: 1513318177 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc deleted file mode 100644 index 68efb34..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __COLOR_CONVERT__ -#define __COLOR_CONVERT__ - -float3 rgb2hsv(float3 c) -{ - float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); - float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); - float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); - - float d = q.x - min(q.w, q.y); - float e = 1.0e-10; - return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); -} - -float3 rgb2hsv(float r, float g, float b) { return rgb2hsv(float3(r, g, b)); } - -float3 hsv2rgb(float3 c) -{ - float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); - float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); - return c.z * lerp(K.xxx, saturate(p - K.xxx), c.y); -} - -float3 hsv2rgb(float h, float s, float v) { return hsv2rgb(float3(h, s, v)); } - -float3 rgb2yuv(float3 c) -{ - float Y = 0.2989 * c.r + 0.5866 * c.g + 0.1145 * c.b; - float Cr = -0.169 * c.r - 0.331 * c.g + 0.5 * c.b + 0.5; - float Cb = 0.5 * c.r - 0.419 * c.g - 0.081 * c.b + 0.5; - return float3(Y, Cr, Cb); -} - -float3 yuv2rgb(float3 c) -{ - float R = c.x + 1.13983 * (c.z - 0.5); - float G = c.x - 0.39465 * (c.y - 0.5) - 0.5806 * (c.z - 0.5); - float B = c.x + 2.03211 * (c.y - 0.5); - return float3(R, G, B); -} - - - -#endif // __COLOR_CONVERT__ diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc.meta deleted file mode 100644 index 230dd1d..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/ColorConvert.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e118d759cc2956348825500066cc4c47 -timeCreated: 1513318177 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc deleted file mode 100644 index d33a15a..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef __ULTRACOMBOS_DEFINES__ -#define __ULTRACOMBOS_DEFINES__ - -#define WORK_GROUP_SIZE 512 - -struct Particle -{ - float3 position; - float seed; - float4 color; - float3 velocity; - float life; - float4 quat; - float4x4 model_matrix; -}; - -#endif // __ULTRACOMBOS_DEFINES__ diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc.meta deleted file mode 100644 index 566ece5..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Defines.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8aa45de43ecc31d4e9499b18d3d3d589 -timeCreated: 1513318177 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc deleted file mode 100644 index 61cf5c3..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc +++ /dev/null @@ -1,231 +0,0 @@ -#ifndef __MATH__ -#define __MATH__ - -#define FLT_EPSILON 1.192092896e-07 - -float ofMap(float value, float inputMin, float inputMax, float outputMin, float outputMax, int bClamp) -{ - if (abs(inputMin - inputMax) < FLT_EPSILON) { - return outputMin; - } - else { - float outVal = ((value - inputMin) / (inputMax - inputMin) * (outputMax - outputMin) + outputMin); - if (bClamp > 0) { - if (outputMax < outputMin) { - if (outVal < outputMax) outVal = outputMax; - else if (outVal > outputMin) outVal = outputMin; - } - else { - if (outVal > outputMax) outVal = outputMax; - else if (outVal < outputMin) outVal = outputMin; - } - } - return outVal; - } -} - -float2 ofMap(float2 value, float2 inputMin, float2 inputMax, float2 outputMin, float2 outputMax, int bClamp) -{ - float x = ofMap(value.x, inputMin.x, inputMax.x, outputMin.x, outputMax.x, bClamp); - float y = ofMap(value.y, inputMin.y, inputMax.y, outputMin.y, outputMax.y, bClamp); - return float2(x, y); -} - -float3 ofMap(float3 value, float3 inputMin, float3 inputMax, float3 outputMin, float3 outputMax, int bClamp) -{ - float x = ofMap(value.x, inputMin.x, inputMax.x, outputMin.x, outputMax.x, bClamp); - float y = ofMap(value.y, inputMin.y, inputMax.y, outputMin.y, outputMax.y, bClamp); - float z = ofMap(value.z, inputMin.z, inputMax.z, outputMin.z, outputMax.z, bClamp); - return float3(x, y, z); -} - -float2x2 RotationMatrix(float a) -{ - float2x2 rot = { cos(a), -sin(a), sin(a), cos(a) }; - return rot; -} - -// implement from Rodrigues rotation formula -float3x3 RotationMatrix(float3 from, float3 to) -{ - float3 a = normalize(from); - float3 b = normalize(to); - float3 v = cross(a, b); - float s = length(v); - float c = dot(a, b); - float3x3 W = { 0, -v.z, v.y, v.z, 0, -v.x, -v.y, v.x, 0 }; - float3x3 I = { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; - float3x3 R = I + W * s + W * W * (1.0f - c); - //float theta = acos( dot(a, b) ); - //float3x3 R = I + W * sin(theta) + W * W * (1.0f - cos(theta)); - return R; -} - -float Rand(float2 co) -{ - return frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453); -} - -float4 MakeQuaternion(float pitch, float roll, float yaw) -{ - float4 q; - float t0 = cos(yaw * 0.5f); - float t1 = sin(yaw * 0.5f); - float t2 = cos(roll * 0.5f); - float t3 = sin(roll * 0.5f); - float t4 = cos(pitch * 0.5f); - float t5 = sin(pitch * 0.5f); - - q.w = t0 * t2 * t4 + t1 * t3 * t5; - q.x = t0 * t3 * t4 - t1 * t2 * t5; - q.y = t0 * t2 * t5 + t1 * t3 * t4; - q.z = t1 * t2 * t4 - t0 * t3 * t5; - return q; -} - -// Quaternion - -float4 quat_from_axis_angle(float3 axis, float angle) -{ - float4 qr; - float half_angle = (angle * 0.5);// *3.14159 / 180.0; - qr.x = axis.x * sin(half_angle); - qr.y = axis.y * sin(half_angle); - qr.z = axis.z * sin(half_angle); - qr.w = cos(half_angle); - return qr; -} - -float4 quat_conj(float4 q) -{ - return float4(-q.x, -q.y, -q.z, q.w); -} - -float4 quat_mult(float4 q1, float4 q2) -{ - float4 qr; - qr.x = (q1.w * q2.x) + (q1.x * q2.w) + (q1.y * q2.z) - (q1.z * q2.y); - qr.y = (q1.w * q2.y) - (q1.x * q2.z) + (q1.y * q2.w) + (q1.z * q2.x); - qr.z = (q1.w * q2.z) + (q1.x * q2.y) - (q1.y * q2.x) + (q1.z * q2.w); - qr.w = (q1.w * q2.w) - (q1.x * q2.x) - (q1.y * q2.y) - (q1.z * q2.z); - return qr; -} - -float3 rotate_vertex_position(float3 position, float4 quat) -{ - return position + 2.0f * cross(quat.xyz, cross(quat.xyz, position) + quat.w * position); -} - -float3 rotate_vertex_position(float3 position, float3 axis, float angle) -{ - float4 q = quat_from_axis_angle(axis, angle); - return rotate_vertex_position(position, q); - //float4 v = position.xyz; - //return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); -} - -void calc_tangents(float3 vertices[4], float3 normals[4], float2 texcoords[4], out float4 tangents[4]) -{ - //float4 tangents[3]; - float3 tan1[4]; - float3 tan2[4]; - int i; - - for (i = 0; i < 4; i++) - { - tan1[i] = tan2[i] = float3(0, 0, 0); - } - - for (i = 0; i < 4 - 2; i++) - { - int i1 = 0; - int i2 = i + 1; - int i3 = i + 2; - - float3 v1 = vertices[i1]; - float3 v2 = vertices[i2]; - float3 v3 = vertices[i3]; - - float2 w1 = texcoords[i1]; - float2 w2 = texcoords[i2]; - float2 w3 = texcoords[i3]; - - float x1 = v2.x - v1.x; - float x2 = v3.x - v1.x; - float y1 = v2.y - v1.y; - float y2 = v3.y - v1.y; - float z1 = v2.z - v1.z; - float z2 = v3.z - v1.z; - - float s1 = w2.x - w1.x; - float s2 = w3.x - w1.x; - float t1 = w2.y - w1.y; - float t2 = w3.y - w1.y; - - float r = 1.0f / (s1 * t2 - s2 * t1); - float3 sdir = float3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); - float3 tdir = float3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); - - tan1[i1] += sdir; - tan1[i2] += sdir; - tan1[i3] += sdir; - - tan2[i1] += tdir; - tan2[i2] += tdir; - tan2[i3] += tdir; - } - - for (i = 0; i < 4; i++) - { - float3 n = normals[i]; - float3 t = tan1[i]; - - tangents[i].xyz = tan1[i]; - tangents[i].w = (dot(cross(n, t), tan2[i]) < 0.0f) ? -1.0f : 1.0f; - } -} - -float4x4 quat_to_rotation_matrix(float4 q) -{ - return float4x4( - 1.0 - 2.0*q.y*q.y - 2.0*q.z*q.z, 2.0*q.x*q.y - 2.0*q.z*q.w, 2.0*q.x*q.z + 2.0*q.y*q.w, 0.0, - 2.0*q.x*q.y + 2.0*q.z*q.w, 1.0 - 2.0*q.x*q.x - 2.0*q.z*q.z, 2.0*q.y*q.z - 2.0*q.x*q.w, 0.0, - 2.0*q.x*q.z - 2.0*q.y*q.w, 2.0*q.y*q.z + 2.0*q.x*q.w, 1.0 - 2.0*q.x*q.x - 2.0*q.y*q.y, 0.0, - 0.0, 0.0, 0.0, 1.0); -} - -float4x4 make_translation_matrix(float3 trans) -{ - return float4x4( - 1, 0, 0, trans.x, - 0, 1, 0, trans.y, - 0, 0, 1, trans.z, - 0, 0, 0, 1 - ); -} - -float4x4 make_scaling_matrix(float s) -{ - return float4x4( - s, 0, 0, 0, - 0, s, 0, 0, - 0, 0, s, 0, - 0, 0, 0, 1 - ); -} - -const float4x4 identity_matrix = { - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 -}; - -half3 cosine_gradient(half3 A, half3 B, half3 C, half3 D, float t) -{ - return saturate(A + B * cos(C * t + D)); -} - - - -#endif // __MATH__ diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc.meta deleted file mode 100644 index 4ce64fc..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Inc/Math.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b75108e9e753c044eae1762becba5b2f -timeCreated: 1513318177 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute deleted file mode 100644 index 1832b32..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute +++ /dev/null @@ -1,42 +0,0 @@ -#pragma kernel CSMain - -#include "UnityCG.cginc" - -#define WORK_GROUP_SIZE 1024 - -struct Vertex -{ - float3 position; - float3 normal; - //float4 color; - //float2 uv; - //float2 uv2; - float4 tangent; -}; - -CBUFFER_START(Variables) - int index; - int count; - float4x4 model_matrix; -CBUFFER_END - -RWStructuredBuffer home_buffer; -RWStructuredBuffer home_velocity_buffer; -RWStructuredBuffer vertex_buffer; - -[numthreads(WORK_GROUP_SIZE, 1, 1)] -void CSMain(uint3 id : SV_DispatchThreadID) -{ - uint offset = (uint)index; - if (id.x < offset || id.x >= offset + count) - return; - - float4 pos = float4(vertex_buffer[id.x - offset].position, 1); - pos = mul(model_matrix, pos); - - float3 last_pos = home_buffer[id.x].xyz; - float3 vel = length(last_pos) == 0.0f ? float3(0, 0, 0) : pos.xyz - last_pos; - home_velocity_buffer[id.x] = float4(vel, 1.0f); - - home_buffer[id.x] = pos; -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute.meta deleted file mode 100644 index cfd724a..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/MeshVertexCollect.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fa89158a0f676c9479248d6a1b0cee36 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 4 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise.meta deleted file mode 100644 index df961af..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c968022c15bd5254385140a51e15c802 -folderAsset: yes -timeCreated: 1513318177 -licenseType: Free -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc deleted file mode 100644 index 55cc165..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef __CELLULAE_2D__ -#define __CELLULAE_2D__ - -#include "noiseMath.cginc" - -// Cellular noise ("Worley noise") in 2D in GLSL. -// Copyright (c) Stefan Gustavson 2011-04-19. All rights reserved. -// This code is released under the conditions of the MIT license. -// See LICENSE file for details. -// https://github.com/stegu/webgl-noise - -// Cellular noise, returning F1 and F2 in a vec2. -// Standard 3x3 search window for good F1 and F2 values -float2 cellular(float2 P) { - const float K = 0.142857142857; // 1/7 - const float Ko = 0.428571428571; // 3/7 - const float jitter = 1.0; // Less gives more regular pattern - float2 Pi = mod289(floor(P)); - float2 Pf = frac(P); - float3 oi = float3(-1.0, 0.0, 1.0); - float3 of = float3(-0.5, 0.5, 1.5); - float3 px = permute(Pi.x + oi); - float3 p = permute(px.x + Pi.y + oi); // p11, p12, p13 - float3 ox = fract(p*K) - Ko; - float3 oy = mod7(floor(p*K))*K - Ko; - float3 dx = Pf.x + 0.5 + jitter*ox; - float3 dy = Pf.y - of + jitter*oy; - float3 d1 = dx * dx + dy * dy; // d11, d12 and d13, squared - p = permute(px.y + Pi.y + oi); // p21, p22, p23 - ox = fract(p*K) - Ko; - oy = mod7(floor(p*K))*K - Ko; - dx = Pf.x - 0.5 + jitter*ox; - dy = Pf.y - of + jitter*oy; - float3 d2 = dx * dx + dy * dy; // d21, d22 and d23, squared - p = permute(px.z + Pi.y + oi); // p31, p32, p33 - ox = frac(p*K) - Ko; - oy = mod7(floor(p*K))*K - Ko; - dx = Pf.x - 1.5 + jitter*ox; - dy = Pf.y - of + jitter*oy; - float3 d3 = dx * dx + dy * dy; // d31, d32 and d33, squared - // Sort out the two smallest distances (F1, F2) - float3 d1a = min(d1, d2); - d2 = max(d1, d2); // Swap to keep candidates for F2 - d2 = min(d2, d3); // neither F1 nor F2 are now in d3 - d1 = min(d1a, d2); // F1 is now in d1 - d2 = max(d1a, d2); // Swap to keep candidates for F2 - d1.xy = (d1.x < d1.y) ? d1.xy : d1.yx; // Swap if smaller - d1.xz = (d1.x < d1.z) ? d1.xz : d1.zx; // F1 is in d1.x - d1.yz = min(d1.yz, d2.yz); // F2 is now not in d2.yz - d1.y = min(d1.y, d1.z); // nor in d1.z - d1.y = min(d1.y, d2.x); // F2 is in d1.y, we're done. - return sqrt(d1.xy); -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc.meta deleted file mode 100644 index f521cca..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: dabc3d39937cf8b44b436eb48779d989 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc deleted file mode 100644 index 41d11d5..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __CELLULAE_2X2__ -#define __CELLULAE_2X2__ - -#include "noiseMath.cginc" - -// Cellular noise ("Worley noise") in 2D in GLSL. -// Copyright (c) Stefan Gustavson 2011-04-19. All rights reserved. -// This code is released under the conditions of the MIT license. -// See LICENSE file for details. -// https://github.com/stegu/webgl-noise - -// Cellular noise, returning F1 and F2 in a vec2. -// Speeded up by using 2x2 search window instead of 3x3, -// at the expense of some strong pattern artifacts. -// F2 is often wrong and has sharp discontinuities. -// If you need a smooth F2, use the slower 3x3 version. -// F1 is sometimes wrong, too, but OK for most purposes. -float2 cellular2x2(float2 P) { - const float K = 0.142857142857; // 1/7 - const float K2 = 0.0714285714285; // K/2 - const float jitter = 0.8; // jitter 1.0 makes F1 wrong more often - float2 Pi = mod289(floor(P)); - float2 Pf = fract(P); - float4 Pfx = Pf.x + vec4(-0.5, -1.5, -0.5, -1.5); - float4 Pfy = Pf.y + vec4(-0.5, -0.5, -1.5, -1.5); - float4 p = permute(Pi.x + vec4(0.0, 1.0, 0.0, 1.0)); - p = permute(p + Pi.y + vec4(0.0, 0.0, 1.0, 1.0)); - float4 ox = mod7(p)*K+K2; - float4 oy = mod7(floor(p*K))*K+K2; - float4 dx = Pfx + jitter*ox; - float4 dy = Pfy + jitter*oy; - float4 d = dx * dx + dy * dy; // d11, d12, d21 and d22, squared - // Sort out the two smallest distances -#if false - // Cheat and pick only F1 - d.xy = min(d.xy, d.zw); - d.x = min(d.x, d.y); - return vec2(sqrt(d.x)); // F1 duplicated, F2 not computed -#else - // Do it right and find both F1 and F2 - d.xy = (d.x < d.y) ? d.xy : d.yx; // Swap if smaller - d.xz = (d.x < d.z) ? d.xz : d.zx; - d.xw = (d.x < d.w) ? d.xw : d.wx; - d.y = min(d.y, d.z); - d.y = min(d.y, d.w); - return sqrt(d.xy); -#endif -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc.meta deleted file mode 100644 index 3950a2d..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 286f253b43aa8bc4cbe7c7d3bc1e6500 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc deleted file mode 100644 index 43ba330..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef __CELLULAE_2X2X2__ -#define __CELLULAE_2X2X2__ - -#include "noiseMath.cginc" - -// Cellular noise ("Worley noise") in 3D in GLSL. -// Copyright (c) Stefan Gustavson 2011-04-19. All rights reserved. -// This code is released under the conditions of the MIT license. -// See LICENSE file for details. -// https://github.com/stegu/webgl-noise - -// Cellular noise, returning F1 and F2 in a vec2. -// Speeded up by using 2x2x2 search window instead of 3x3x3, -// at the expense of some pattern artifacts. -// F2 is often wrong and has sharp discontinuities. -// If you need a good F2, use the slower 3x3x3 version. -float2 cellular2x2x2(float3 P) { - const float K = 0.142857142857; // 1/7 - const float Ko = 0.428571428571; // 1/2-K/2 - const float K2 = 0.020408163265306; // 1/(7*7) - const float Kz = 0.166666666667; // 1/6 - const float Kzo = 0.416666666667; // 1/2-1/6*2 - const float jitter = 0.8; // smaller jitter gives less errors in F2 - float3 Pi = mod289(floor(P)); - float3 Pf = fract(P); - float4 Pfx = Pf.x + vec4(0.0, -1.0, 0.0, -1.0); - float4 Pfy = Pf.y + vec4(0.0, 0.0, -1.0, -1.0); - float4 p = permute(Pi.x + vec4(0.0, 1.0, 0.0, 1.0)); - p = permute(p + Pi.y + vec4(0.0, 0.0, 1.0, 1.0)); - float4 p1 = permute(p + Pi.z); // z+0 - float4 p2 = permute(p + Pi.z + vec4(1.0)); // z+1 - float4 ox1 = frac(p1*K) - Ko; - float4 oy1 = mod7(floor(p1*K))*K - Ko; - float4 oz1 = floor(p1*K2)*Kz - Kzo; // p1 < 289 guaranteed - float4 ox2 = fract(p2*K) - Ko; - float4 oy2 = mod7(floor(p2*K))*K - Ko; - float4 oz2 = floor(p2*K2)*Kz - Kzo; - float4 dx1 = Pfx + jitter*ox1; - float4 dy1 = Pfy + jitter*oy1; - float4 dz1 = Pf.z + jitter*oz1; - float4 dx2 = Pfx + jitter*ox2; - float4 dy2 = Pfy + jitter*oy2; - float4 dz2 = Pf.z - 1.0 + jitter*oz2; - float4 d1 = dx1 * dx1 + dy1 * dy1 + dz1 * dz1; // z+0 - float4 d2 = dx2 * dx2 + dy2 * dy2 + dz2 * dz2; // z+1 - - // Sort out the two smallest distances (F1, F2) -#if false - // Cheat and sort out only F1 - d1 = min(d1, d2); - d1.xy = min(d1.xy, d1.wz); - d1.x = min(d1.x, d1.y); - return vec2(sqrt(d1.x)); -#else - // Do it right and sort out both F1 and F2 - vec4 d = min(d1,d2); // F1 is now in d - d2 = max(d1,d2); // Make sure we keep all candidates for F2 - d.xy = (d.x < d.y) ? d.xy : d.yx; // Swap smallest to d.x - d.xz = (d.x < d.z) ? d.xz : d.zx; - d.xw = (d.x < d.w) ? d.xw : d.wx; // F1 is now in d.x - d.yzw = min(d.yzw, d2.yzw); // F2 now not in d2.yzw - d.y = min(d.y, d.z); // nor in d.z - d.y = min(d.y, d.w); // nor in d.w - d.y = min(d.y, d2.x); // F2 is now in d.y - return sqrt(d.xy); // F1 and F2 -#endif -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc.meta deleted file mode 100644 index e55b4c8..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular2x2x2.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 4990a2164abda5d4b99a145d3253bf9f -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc deleted file mode 100644 index 88bfd08..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc +++ /dev/null @@ -1,177 +0,0 @@ -#ifndef __CELLULAE_3D__ -#define __CELLULAE_3D__ - -#include "noiseMath.cginc" - -// Cellular noise ("Worley noise") in 3D in GLSL. -// Copyright (c) Stefan Gustavson 2011-04-19. All rights reserved. -// This code is released under the conditions of the MIT license. -// See LICENSE file for details. -// https://github.com/stegu/webgl-noise - -// Cellular noise, returning F1 and F2 in a vec2. -// 3x3x3 search region for good F2 everywhere, but a lot -// slower than the 2x2x2 version. -// The code below is a bit scary even to its author, -// but it has at least half decent performance on a -// modern GPU. In any case, it beats any software -// implementation of Worley noise hands down. - -float2 cellular(float3 P) { - const float K = 0.142857142857; // 1/7 - const float Ko = 0.428571428571; // 1/2-K/2 - const float K2 = 0.020408163265306; // 1/(7*7) - const float Kz = 0.166666666667; // 1/6 - const float Kzo = 0.416666666667; // 1/2-1/6*2 - const float jitter = 1.0; // smaller jitter gives more regular pattern - - float3 Pi = mod289(floor(P)); - float3 Pf = frac(P) - 0.5; - - float3 Pfx = Pf.x + float3(1.0, 0.0, -1.0); - float3 Pfy = Pf.y + float3(1.0, 0.0, -1.0); - float3 Pfz = Pf.z + float3(1.0, 0.0, -1.0); - - float3 p = permute(Pi.x + float3(-1.0, 0.0, 1.0)); - float3 p1 = permute(p + Pi.y - 1.0); - float3 p2 = permute(p + Pi.y); - float3 p3 = permute(p + Pi.y + 1.0); - - float3 p11 = permute(p1 + Pi.z - 1.0); - float3 p12 = permute(p1 + Pi.z); - float3 p13 = permute(p1 + Pi.z + 1.0); - - float3 p21 = permute(p2 + Pi.z - 1.0); - float3 p22 = permute(p2 + Pi.z); - float3 p23 = permute(p2 + Pi.z + 1.0); - - float3 p31 = permute(p3 + Pi.z - 1.0); - float3 p32 = permute(p3 + Pi.z); - float3 p33 = permute(p3 + Pi.z + 1.0); - - float3 ox11 = frac(p11*K) - Ko; - float3 oy11 = mod7(floor(p11*K))*K - Ko; - float3 oz11 = floor(p11*K2)*Kz - Kzo; // p11 < 289 guaranteed - - float3 ox12 = frac(p12*K) - Ko; - float3 oy12 = mod7(floor(p12*K))*K - Ko; - float3 oz12 = floor(p12*K2)*Kz - Kzo; - - float3 ox13 = frac(p13*K) - Ko; - float3 oy13 = mod7(floor(p13*K))*K - Ko; - float3 oz13 = floor(p13*K2)*Kz - Kzo; - - float3 ox21 = frac(p21*K) - Ko; - float3 oy21 = mod7(floor(p21*K))*K - Ko; - float3 oz21 = floor(p21*K2)*Kz - Kzo; - - float3 ox22 = frac(p22*K) - Ko; - float3 oy22 = mod7(floor(p22*K))*K - Ko; - float3 oz22 = floor(p22*K2)*Kz - Kzo; - - float3 ox23 = frac(p23*K) - Ko; - float3 oy23 = mod7(floor(p23*K))*K - Ko; - float3 oz23 = floor(p23*K2)*Kz - Kzo; - - float3 ox31 = frac(p31*K) - Ko; - float3 oy31 = mod7(floor(p31*K))*K - Ko; - float3 oz31 = floor(p31*K2)*Kz - Kzo; - - float3 ox32 = frac(p32*K) - Ko; - float3 oy32 = mod7(floor(p32*K))*K - Ko; - float3 oz32 = floor(p32*K2)*Kz - Kzo; - - float3 ox33 = frac(p33*K) - Ko; - float3 oy33 = mod7(floor(p33*K))*K - Ko; - float3 oz33 = floor(p33*K2)*Kz - Kzo; - - float3 dx11 = Pfx + jitter*ox11; - float3 dy11 = Pfy.x + jitter*oy11; - float3 dz11 = Pfz.x + jitter*oz11; - - float3 dx12 = Pfx + jitter*ox12; - float3 dy12 = Pfy.x + jitter*oy12; - float3 dz12 = Pfz.y + jitter*oz12; - - float3 dx13 = Pfx + jitter*ox13; - float3 dy13 = Pfy.x + jitter*oy13; - float3 dz13 = Pfz.z + jitter*oz13; - - float3 dx21 = Pfx + jitter*ox21; - float3 dy21 = Pfy.y + jitter*oy21; - float3 dz21 = Pfz.x + jitter*oz21; - - float3 dx22 = Pfx + jitter*ox22; - float3 dy22 = Pfy.y + jitter*oy22; - float3 dz22 = Pfz.y + jitter*oz22; - - float3 dx23 = Pfx + jitter*ox23; - float3 dy23 = Pfy.y + jitter*oy23; - float3 dz23 = Pfz.z + jitter*oz23; - - float3 dx31 = Pfx + jitter*ox31; - float3 dy31 = Pfy.z + jitter*oy31; - float3 dz31 = Pfz.x + jitter*oz31; - - float3 dx32 = Pfx + jitter*ox32; - float3 dy32 = Pfy.z + jitter*oy32; - float3 dz32 = Pfz.y + jitter*oz32; - - float3 dx33 = Pfx + jitter*ox33; - float3 dy33 = Pfy.z + jitter*oy33; - float3 dz33 = Pfz.z + jitter*oz33; - - float3 d11 = dx11 * dx11 + dy11 * dy11 + dz11 * dz11; - float3 d12 = dx12 * dx12 + dy12 * dy12 + dz12 * dz12; - float3 d13 = dx13 * dx13 + dy13 * dy13 + dz13 * dz13; - float3 d21 = dx21 * dx21 + dy21 * dy21 + dz21 * dz21; - float3 d22 = dx22 * dx22 + dy22 * dy22 + dz22 * dz22; - float3 d23 = dx23 * dx23 + dy23 * dy23 + dz23 * dz23; - float3 d31 = dx31 * dx31 + dy31 * dy31 + dz31 * dz31; - float3 d32 = dx32 * dx32 + dy32 * dy32 + dz32 * dz32; - float3 d33 = dx33 * dx33 + dy33 * dy33 + dz33 * dz33; - - // Sort out the two smallest distances (F1, F2) -#if false - // Cheat and sort out only F1 - float3 d1 = min(min(d11,d12), d13); - float3 d2 = min(min(d21,d22), d23); - float3 d3 = min(min(d31,d32), d33); - float3 d = min(min(d1,d2), d3); - d.x = min(min(d.x,d.y),d.z); - return float2(sqrt(d.x)); // F1 duplicated, no F2 computed -#else - // Do it right and sort out both F1 and F2 - float3 d1a = min(d11, d12); - d12 = max(d11, d12); - d11 = min(d1a, d13); // Smallest now not in d12 or d13 - d13 = max(d1a, d13); - d12 = min(d12, d13); // 2nd smallest now not in d13 - float3 d2a = min(d21, d22); - d22 = max(d21, d22); - d21 = min(d2a, d23); // Smallest now not in d22 or d23 - d23 = max(d2a, d23); - d22 = min(d22, d23); // 2nd smallest now not in d23 - float3 d3a = min(d31, d32); - d32 = max(d31, d32); - d31 = min(d3a, d33); // Smallest now not in d32 or d33 - d33 = max(d3a, d33); - d32 = min(d32, d33); // 2nd smallest now not in d33 - float3 da = min(d11, d21); - d21 = max(d11, d21); - d11 = min(da, d31); // Smallest now in d11 - d31 = max(da, d31); // 2nd smallest now not in d31 - d11.xy = (d11.x < d11.y) ? d11.xy : d11.yx; - d11.xz = (d11.x < d11.z) ? d11.xz : d11.zx; // d11.x now smallest - d12 = min(d12, d21); // 2nd smallest now not in d21 - d12 = min(d12, d22); // nor in d22 - d12 = min(d12, d31); // nor in d31 - d12 = min(d12, d32); // nor in d32 - d11.yz = min(d11.yz,d12.xy); // nor in d12.yz - d11.y = min(d11.y,d12.z); // Only two more to go - d11.y = min(d11.y,d11.z); // Done! (Phew!) - return sqrt(d11.xy); // F1, F2 -#endif -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc.meta deleted file mode 100644 index 008bfee..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/cellular3D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 35eda6f8be41bec4e86fe00e2ced1c0e -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc deleted file mode 100644 index a1e4557..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef __CLASSIC_NOISE_2D__ -#define __CLASSIC_NOISE_2D__ - -#include "noiseMath.cginc" - -// -// GLSL textureless classic 2D noise "cnoise", -// with an RSL-style periodic variant "pnoise". -// Author: Stefan Gustavson (stefan.gustavson@liu.se) -// Version: 2011-08-22 -// -// Many thanks to Ian McEwan of Ashima Arts for the -// ideas for permutation and gradient selection. -// -// Copyright (c) 2011 Stefan Gustavson. All rights reserved. -// Distributed under the MIT license. See LICENSE file. -// https://github.com/stegu/webgl-noise -// - -// Classic Perlin noise -float cnoise(float2 P) -{ - float4 Pi = floor(P.xyxy) + float4(0.0, 0.0, 1.0, 1.0); - float4 Pf = frac(P.xyxy) - float4(0.0, 0.0, 1.0, 1.0); - Pi = mod289(Pi); // To avoid truncation effects in permutation - float4 ix = Pi.xzxz; - float4 iy = Pi.yyww; - float4 fx = Pf.xzxz; - float4 fy = Pf.yyww; - - float4 i = permute(permute(ix) + iy); - - float4 gx = frac(i * (1.0 / 41.0)) * 2.0 - 1.0 ; - float4 gy = abs(gx) - 0.5 ; - float4 tx = floor(gx + 0.5); - gx = gx - tx; - - float2 g00 = float2(gx.x,gy.x); - float2 g10 = float2(gx.y,gy.y); - float2 g01 = float2(gx.z,gy.z); - float2 g11 = float2(gx.w,gy.w); - - float4 norm = taylorInvSqrt(float4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - float n00 = dot(g00, vec2(fx.x, fy.x)); - float n10 = dot(g10, vec2(fx.y, fy.y)); - float n01 = dot(g01, vec2(fx.z, fy.z)); - float n11 = dot(g11, vec2(fx.w, fy.w)); - - float2 fade_xy = fade(Pf.xy); - float2 n_x = lerp(float2(n00, n01), float2(n10, n11), fade_xy.x); - float n_xy = lerp(n_x.x, n_x.y, fade_xy.y); - return 2.3 * n_xy; -} - -// Classic Perlin noise, periodic variant -float pnoise(float2 P, float2 rep) -{ - float4 Pi = floor(P.xyxy) + float4(0.0, 0.0, 1.0, 1.0); - float4 Pf = frac(P.xyxy) - float4(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, rep.xyxy); // To create noise with explicit period - Pi = mod289(Pi); // To avoid truncation effects in permutation - float4 ix = Pi.xzxz; - float4 iy = Pi.yyww; - float4 fx = Pf.xzxz; - float4 fy = Pf.yyww; - - float4 i = permute(permute(ix) + iy); - - float4 gx = frac(i * (1.0 / 41.0)) * 2.0 - 1.0 ; - float4 gy = abs(gx) - 0.5 ; - float4 tx = floor(gx + 0.5); - gx = gx - tx; - - float2 g00 = float2(gx.x,gy.x); - float2 g10 = float2(gx.y,gy.y); - float2 g01 = float2(gx.z,gy.z); - float2 g11 = float2(gx.w,gy.w); - - float4 norm = taylorInvSqrt(float4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - float n00 = dot(g00, float2(fx.x, fy.x)); - float n10 = dot(g10, float2(fx.y, fy.y)); - float n01 = dot(g01, float2(fx.z, fy.z)); - float n11 = dot(g11, float2(fx.w, fy.w)); - - float2 fade_xy = fade(Pf.xy); - float2 n_x = lerp(vec2(n00, n01), float2(n10, n11), fade_xy.x); - float n_xy = lerp(n_x.x, n_x.y, fade_xy.y); - return 2.3 * n_xy; -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc.meta deleted file mode 100644 index a1d87ea..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise2D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 686e838ffd1bb9f4e8f2470120cfcdd1 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc deleted file mode 100644 index 8942523..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc +++ /dev/null @@ -1,160 +0,0 @@ -#ifndef __CLASSIC_NOISE_3D__ -#define __CLASSIC_NOISE_3D__ - -#include "noiseMath.cginc" - -// -// GLSL textureless classic 3D noise "cnoise", -// with an RSL-style periodic variant "pnoise". -// Author: Stefan Gustavson (stefan.gustavson@liu.se) -// Version: 2011-10-11 -// -// Many thanks to Ian McEwan of Ashima Arts for the -// ideas for permutation and gradient selection. -// -// Copyright (c) 2011 Stefan Gustavson. All rights reserved. -// Distributed under the MIT license. See LICENSE file. -// https://github.com/stegu/webgl-noise -// - -// Classic Perlin noise -float cnoise(float3 P) -{ - float3 Pi0 = floor(P); // Integer part for indexing - float3 Pi1 = Pi0 + float3(1.0); // Integer part + 1 - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - float3 Pf0 = frac(P); // Fractional part for interpolation - float3 Pf1 = Pf0 - float3(1.0); // Fractional part - 1.0 - float4 ix = float4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - float4 iy = float4(Pi0.yy, Pi1.yy); - float4 iz0 = Pi0.zzzz; - float4 iz1 = Pi1.zzzz; - - float4 ixy = permute(permute(ix) + iy); - float4 ixy0 = permute(ixy + iz0); - float4 ixy1 = permute(ixy + iz1); - - float4 gx0 = ixy0 * (1.0 / 7.0); - float4 gy0 = frac(floor(gx0) * (1.0 / 7.0)) - 0.5; - gx0 = frac(gx0); - float4 gz0 = float4(0.5) - abs(gx0) - abs(gy0); - float4 sz0 = step(gz0, float4(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - 0.5); - gy0 -= sz0 * (step(0.0, gy0) - 0.5); - - float4 gx1 = ixy1 * (1.0 / 7.0); - float4 gy1 = frac(floor(gx1) * (1.0 / 7.0)) - 0.5; - gx1 = frac(gx1); - float4 gz1 = float4(0.5) - abs(gx1) - abs(gy1); - float4 sz1 = step(gz1, float4(0.0)); - gx1 -= sz1 * (step(0.0, gx1) - 0.5); - gy1 -= sz1 * (step(0.0, gy1) - 0.5); - - float3 g000 = float3(gx0.x,gy0.x,gz0.x); - float3 g100 = float3(gx0.y,gy0.y,gz0.y); - float3 g010 = float3(gx0.z,gy0.z,gz0.z); - float3 g110 = float3(gx0.w,gy0.w,gz0.w); - float3 g001 = float3(gx1.x,gy1.x,gz1.x); - float3 g101 = float3(gx1.y,gy1.y,gz1.y); - float3 g011 = float3(gx1.z,gy1.z,gz1.z); - float3 g111 = float3(gx1.w,gy1.w,gz1.w); - - float4 norm0 = taylorInvSqrt(float4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - float4 norm1 = taylorInvSqrt(float4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - float n000 = dot(g000, Pf0); - float n100 = dot(g100, float3(Pf1.x, Pf0.yz)); - float n010 = dot(g010, float3(Pf0.x, Pf1.y, Pf0.z)); - float n110 = dot(g110, float3(Pf1.xy, Pf0.z)); - float n001 = dot(g001, float3(Pf0.xy, Pf1.z)); - float n101 = dot(g101, float3(Pf1.x, Pf0.y, Pf1.z)); - float n011 = dot(g011, float3(Pf0.x, Pf1.yz)); - float n111 = dot(g111, Pf1); - - float3 fade_xyz = fade(Pf0); - float4 n_z = mix(float4(n000, n100, n010, n110), float4(n001, n101, n011, n111), fade_xyz.z); - float2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); - float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return 2.2 * n_xyz; -} - -// Classic Perlin noise, periodic variant -float pnoise(float3 P, float3 rep) -{ - float3 Pi0 = mod(floor(P), rep); // Integer part, modulo period - float3 Pi1 = mod(Pi0 + float3(1.0), rep); // Integer part + 1, mod period - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - float3 Pf0 = frac(P); // Fractional part for interpolation - float3 Pf1 = Pf0 - float3(1.0); // Fractional part - 1.0 - float4 ix = float4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - float4 iy = float4(Pi0.yy, Pi1.yy); - float4 iz0 = Pi0.zzzz; - float4 iz1 = Pi1.zzzz; - - float4 ixy = permute(permute(ix) + iy); - float4 ixy0 = permute(ixy + iz0); - float4 ixy1 = permute(ixy + iz1); - - float4 gx0 = ixy0 * (1.0 / 7.0); - float4 gy0 = frac(floor(gx0) * (1.0 / 7.0)) - 0.5; - gx0 = frac(gx0); - float4 gz0 = float4(0.5) - abs(gx0) - abs(gy0); - float4 sz0 = step(gz0, float4(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - 0.5); - gy0 -= sz0 * (step(0.0, gy0) - 0.5); - - float4 gx1 = ixy1 * (1.0 / 7.0); - float4 gy1 = frac(floor(gx1) * (1.0 / 7.0)) - 0.5; - gx1 = frac(gx1); - float4 gz1 = float4(0.5) - abs(gx1) - abs(gy1); - float4 sz1 = step(gz1, float4(0.0)); - gx1 -= sz1 * (step(0.0, gx1) - 0.5); - gy1 -= sz1 * (step(0.0, gy1) - 0.5); - - float3 g000 = float3(gx0.x,gy0.x,gz0.x); - float3 g100 = float3(gx0.y,gy0.y,gz0.y); - float3 g010 = float3(gx0.z,gy0.z,gz0.z); - float3 g110 = float3(gx0.w,gy0.w,gz0.w); - float3 g001 = float3(gx1.x,gy1.x,gz1.x); - float3 g101 = float3(gx1.y,gy1.y,gz1.y); - float3 g011 = float3(gx1.z,gy1.z,gz1.z); - float3 g111 = float3(gx1.w,gy1.w,gz1.w); - - float4 norm0 = taylorInvSqrt(float4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - float4 norm1 = taylorInvSqrt(float4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - float n000 = dot(g000, Pf0); - float n100 = dot(g100, float3(Pf1.x, Pf0.yz)); - float n010 = dot(g010, float3(Pf0.x, Pf1.y, Pf0.z)); - float n110 = dot(g110, float3(Pf1.xy, Pf0.z)); - float n001 = dot(g001, float3(Pf0.xy, Pf1.z)); - float n101 = dot(g101, float3(Pf1.x, Pf0.y, Pf1.z)); - float n011 = dot(g011, float3(Pf0.x, Pf1.yz)); - float n111 = dot(g111, Pf1); - - float3 fade_xyz = fade(Pf0); - float4 n_z = mix(float4(n000, n100, n010, n110), float4(n001, n101, n011, n111), fade_xyz.z); - float2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); - float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return 2.2 * n_xyz; -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc.meta deleted file mode 100644 index 99968e5..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise3D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d455bc260cbec6a47b350e56e5af7cf0 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc deleted file mode 100644 index 38c27fa..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc +++ /dev/null @@ -1,290 +0,0 @@ -#ifndef __CLASSIC_NOISE_4D__ -#define __CLASSIC_NOISE_4D__ - -#include "noiseMath.cginc" - -// -// GLSL textureless classic 4D noise "cnoise", -// with an RSL-style periodic variant "pnoise". -// Author: Stefan Gustavson (stefan.gustavson@liu.se) -// Version: 2011-08-22 -// -// Many thanks to Ian McEwan of Ashima Arts for the -// ideas for permutation and gradient selection. -// -// Copyright (c) 2011 Stefan Gustavson. All rights reserved. -// Distributed under the MIT license. See LICENSE file. -// https://github.com/stegu/webgl-noise -// - -// Classic Perlin noise -float cnoise(float4 P) -{ - float4 Pi0 = floor(P); // Integer part for indexing - float4 Pi1 = Pi0 + 1.0; // Integer part + 1 - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - float4 Pf0 = frac(P); // Fractional part for interpolation - float4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0 - float4 ix = float4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - float4 iy = float4(Pi0.yy, Pi1.yy); - float4 iz0 = float4(Pi0.zzzz); - float4 iz1 = float4(Pi1.zzzz); - float4 iw0 = float4(Pi0.wwww); - float4 iw1 = float4(Pi1.wwww); - - float4 ixy = permute(permute(ix) + iy); - float4 ixy0 = permute(ixy + iz0); - float4 ixy1 = permute(ixy + iz1); - float4 ixy00 = permute(ixy0 + iw0); - float4 ixy01 = permute(ixy0 + iw1); - float4 ixy10 = permute(ixy1 + iw0); - float4 ixy11 = permute(ixy1 + iw1); - - float4 gx00 = ixy00 * (1.0 / 7.0); - float4 gy00 = floor(gx00) * (1.0 / 7.0); - float4 gz00 = floor(gy00) * (1.0 / 6.0); - gx00 = frac(gx00) - 0.5; - gy00 = frac(gy00) - 0.5; - gz00 = frac(gz00) - 0.5; - float4 gw00 = float4(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - float4 sw00 = step(gw00, float4(0.0)); - gx00 -= sw00 * (step(0.0, gx00) - 0.5); - gy00 -= sw00 * (step(0.0, gy00) - 0.5); - - float4 gx01 = ixy01 * (1.0 / 7.0); - float4 gy01 = floor(gx01) * (1.0 / 7.0); - float4 gz01 = floor(gy01) * (1.0 / 6.0); - gx01 = frac(gx01) - 0.5; - gy01 = frac(gy01) - 0.5; - gz01 = frac(gz01) - 0.5; - float4 gw01 = float4(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - float4 sw01 = step(gw01, float4(0.0)); - gx01 -= sw01 * (step(0.0, gx01) - 0.5); - gy01 -= sw01 * (step(0.0, gy01) - 0.5); - - float4 gx10 = ixy10 * (1.0 / 7.0); - float4 gy10 = floor(gx10) * (1.0 / 7.0); - float4 gz10 = floor(gy10) * (1.0 / 6.0); - gx10 = frac(gx10) - 0.5; - gy10 = frac(gy10) - 0.5; - gz10 = frac(gz10) - 0.5; - float4 gw10 = float4(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - float4 sw10 = step(gw10, float4(0.0)); - gx10 -= sw10 * (step(0.0, gx10) - 0.5); - gy10 -= sw10 * (step(0.0, gy10) - 0.5); - - float4 gx11 = ixy11 * (1.0 / 7.0); - float4 gy11 = floor(gx11) * (1.0 / 7.0); - float4 gz11 = floor(gy11) * (1.0 / 6.0); - gx11 = frac(gx11) - 0.5; - gy11 = frac(gy11) - 0.5; - gz11 = frac(gz11) - 0.5; - float4 gw11 = float4(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - float4 sw11 = step(gw11, float4(0.0)); - gx11 -= sw11 * (step(0.0, gx11) - 0.5); - gy11 -= sw11 * (step(0.0, gy11) - 0.5); - - float4 g0000 = float4(gx00.x,gy00.x,gz00.x,gw00.x); - float4 g1000 = float4(gx00.y,gy00.y,gz00.y,gw00.y); - float4 g0100 = float4(gx00.z,gy00.z,gz00.z,gw00.z); - float4 g1100 = float4(gx00.w,gy00.w,gz00.w,gw00.w); - float4 g0010 = float4(gx10.x,gy10.x,gz10.x,gw10.x); - float4 g1010 = float4(gx10.y,gy10.y,gz10.y,gw10.y); - float4 g0110 = float4(gx10.z,gy10.z,gz10.z,gw10.z); - float4 g1110 = float4(gx10.w,gy10.w,gz10.w,gw10.w); - float4 g0001 = float4(gx01.x,gy01.x,gz01.x,gw01.x); - float4 g1001 = float4(gx01.y,gy01.y,gz01.y,gw01.y); - float4 g0101 = float4(gx01.z,gy01.z,gz01.z,gw01.z); - float4 g1101 = float4(gx01.w,gy01.w,gz01.w,gw01.w); - float4 g0011 = float4(gx11.x,gy11.x,gz11.x,gw11.x); - float4 g1011 = float4(gx11.y,gy11.y,gz11.y,gw11.y); - float4 g0111 = float4(gx11.z,gy11.z,gz11.z,gw11.z); - float4 g1111 = float4(gx11.w,gy11.w,gz11.w,gw11.w); - - float4 norm00 = taylorInvSqrt(float4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - float4 norm01 = taylorInvSqrt(float4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - float4 norm10 = taylorInvSqrt(float4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - float4 norm11 = taylorInvSqrt(float4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - float n0000 = dot(g0000, Pf0); - float n1000 = dot(g1000, float4(Pf1.x, Pf0.yzw)); - float n0100 = dot(g0100, float4(Pf0.x, Pf1.y, Pf0.zw)); - float n1100 = dot(g1100, float4(Pf1.xy, Pf0.zw)); - float n0010 = dot(g0010, float4(Pf0.xy, Pf1.z, Pf0.w)); - float n1010 = dot(g1010, float4(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - float n0110 = dot(g0110, float4(Pf0.x, Pf1.yz, Pf0.w)); - float n1110 = dot(g1110, float4(Pf1.xyz, Pf0.w)); - float n0001 = dot(g0001, float4(Pf0.xyz, Pf1.w)); - float n1001 = dot(g1001, float4(Pf1.x, Pf0.yz, Pf1.w)); - float n0101 = dot(g0101, float4(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - float n1101 = dot(g1101, float4(Pf1.xy, Pf0.z, Pf1.w)); - float n0011 = dot(g0011, float4(Pf0.xy, Pf1.zw)); - float n1011 = dot(g1011, float4(Pf1.x, Pf0.y, Pf1.zw)); - float n0111 = dot(g0111, float4(Pf0.x, Pf1.yzw)); - float n1111 = dot(g1111, Pf1); - - float4 fade_xyzw = fade(Pf0); - float4 n_0w = lerp(float4(n0000, n1000, n0100, n1100), float4(n0001, n1001, n0101, n1101), fade_xyzw.w); - float4 n_1w = lerp(float4(n0010, n1010, n0110, n1110), float4(n0011, n1011, n0111, n1111), fade_xyzw.w); - float4 n_zw = lerp(n_0w, n_1w, fade_xyzw.z); - float2 n_yzw = lerp(n_zw.xy, n_zw.zw, fade_xyzw.y); - float n_xyzw = lerp(n_yzw.x, n_yzw.y, fade_xyzw.x); - return 2.2 * n_xyzw; -} - -// Classic Perlin noise, periodic version -float pnoise(float4 P, float4 rep) -{ - float4 Pi0 = mod(floor(P), rep); // Integer part modulo rep - float4 Pi1 = mod(Pi0 + 1.0, rep); // Integer part + 1 mod rep - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - float4 Pf0 = frac(P); // Fractional part for interpolation - float4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0 - float4 ix = float4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - float4 iy = float4(Pi0.yy, Pi1.yy); - float4 iz0 = float4(Pi0.zzzz); - float4 iz1 = float4(Pi1.zzzz); - float4 iw0 = float4(Pi0.wwww); - float4 iw1 = float4(Pi1.wwww); - - float4 ixy = permute(permute(ix) + iy); - float4 ixy0 = permute(ixy + iz0); - float4 ixy1 = permute(ixy + iz1); - float4 ixy00 = permute(ixy0 + iw0); - float4 ixy01 = permute(ixy0 + iw1); - float4 ixy10 = permute(ixy1 + iw0); - float4 ixy11 = permute(ixy1 + iw1); - - float4 gx00 = ixy00 * (1.0 / 7.0); - float4 gy00 = floor(gx00) * (1.0 / 7.0); - float4 gz00 = floor(gy00) * (1.0 / 6.0); - gx00 = frac(gx00) - 0.5; - gy00 = frac(gy00) - 0.5; - gz00 = frac(gz00) - 0.5; - float4 gw00 = float4(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - float4 sw00 = step(gw00, float4(0.0)); - gx00 -= sw00 * (step(0.0, gx00) - 0.5); - gy00 -= sw00 * (step(0.0, gy00) - 0.5); - - float4 gx01 = ixy01 * (1.0 / 7.0); - float4 gy01 = floor(gx01) * (1.0 / 7.0); - float4 gz01 = floor(gy01) * (1.0 / 6.0); - gx01 = frac(gx01) - 0.5; - gy01 = frac(gy01) - 0.5; - gz01 = frac(gz01) - 0.5; - float4 gw01 = float4(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - float4 sw01 = step(gw01, float4(0.0)); - gx01 -= sw01 * (step(0.0, gx01) - 0.5); - gy01 -= sw01 * (step(0.0, gy01) - 0.5); - - float4 gx10 = ixy10 * (1.0 / 7.0); - float4 gy10 = floor(gx10) * (1.0 / 7.0); - float4 gz10 = floor(gy10) * (1.0 / 6.0); - gx10 = frac(gx10) - 0.5; - gy10 = frac(gy10) - 0.5; - gz10 = frac(gz10) - 0.5; - float4 gw10 = float4(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - float4 sw10 = step(gw10, float4(0.0)); - gx10 -= sw10 * (step(0.0, gx10) - 0.5); - gy10 -= sw10 * (step(0.0, gy10) - 0.5); - - float4 gx11 = ixy11 * (1.0 / 7.0); - float4 gy11 = floor(gx11) * (1.0 / 7.0); - float4 gz11 = floor(gy11) * (1.0 / 6.0); - gx11 = frac(gx11) - 0.5; - gy11 = frac(gy11) - 0.5; - gz11 = frac(gz11) - 0.5; - float4 gw11 = float4(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - float4 sw11 = step(gw11, float4(0.0)); - gx11 -= sw11 * (step(0.0, gx11) - 0.5); - gy11 -= sw11 * (step(0.0, gy11) - 0.5); - - float4 g0000 = float4(gx00.x,gy00.x,gz00.x,gw00.x); - float4 g1000 = float4(gx00.y,gy00.y,gz00.y,gw00.y); - float4 g0100 = float4(gx00.z,gy00.z,gz00.z,gw00.z); - float4 g1100 = float4(gx00.w,gy00.w,gz00.w,gw00.w); - float4 g0010 = float4(gx10.x,gy10.x,gz10.x,gw10.x); - float4 g1010 = float4(gx10.y,gy10.y,gz10.y,gw10.y); - float4 g0110 = float4(gx10.z,gy10.z,gz10.z,gw10.z); - float4 g1110 = float4(gx10.w,gy10.w,gz10.w,gw10.w); - float4 g0001 = float4(gx01.x,gy01.x,gz01.x,gw01.x); - float4 g1001 = float4(gx01.y,gy01.y,gz01.y,gw01.y); - float4 g0101 = float4(gx01.z,gy01.z,gz01.z,gw01.z); - float4 g1101 = float4(gx01.w,gy01.w,gz01.w,gw01.w); - float4 g0011 = float4(gx11.x,gy11.x,gz11.x,gw11.x); - float4 g1011 = float4(gx11.y,gy11.y,gz11.y,gw11.y); - float4 g0111 = float4(gx11.z,gy11.z,gz11.z,gw11.z); - float4 g1111 = float4(gx11.w,gy11.w,gz11.w,gw11.w); - - float4 norm00 = taylorInvSqrt(float4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - float4 norm01 = taylorInvSqrt(float4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - float4 norm10 = taylorInvSqrt(float4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - float4 norm11 = taylorInvSqrt(float4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - float n0000 = dot(g0000, Pf0); - float n1000 = dot(g1000, float4(Pf1.x, Pf0.yzw)); - float n0100 = dot(g0100, float4(Pf0.x, Pf1.y, Pf0.zw)); - float n1100 = dot(g1100, float4(Pf1.xy, Pf0.zw)); - float n0010 = dot(g0010, float4(Pf0.xy, Pf1.z, Pf0.w)); - float n1010 = dot(g1010, float4(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - float n0110 = dot(g0110, float4(Pf0.x, Pf1.yz, Pf0.w)); - float n1110 = dot(g1110, float4(Pf1.xyz, Pf0.w)); - float n0001 = dot(g0001, float4(Pf0.xyz, Pf1.w)); - float n1001 = dot(g1001, float4(Pf1.x, Pf0.yz, Pf1.w)); - float n0101 = dot(g0101, float4(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - float n1101 = dot(g1101, float4(Pf1.xy, Pf0.z, Pf1.w)); - float n0011 = dot(g0011, float4(Pf0.xy, Pf1.zw)); - float n1011 = dot(g1011, float4(Pf1.x, Pf0.y, Pf1.zw)); - float n0111 = dot(g0111, float4(Pf0.x, Pf1.yzw)); - float n1111 = dot(g1111, Pf1); - - float4 fade_xyzw = fade(Pf0); - float4 n_0w = lerp(float4(n0000, n1000, n0100, n1100), float4(n0001, n1001, n0101, n1101), fade_xyzw.w); - float4 n_1w = lerp(float4(n0010, n1010, n0110, n1110), float4(n0011, n1011, n0111, n1111), fade_xyzw.w); - float4 n_zw = lerp(n_0w, n_1w, fade_xyzw.z); - float2 n_yzw = lerp(n_zw.xy, n_zw.zw, fade_xyzw.y); - float n_xyzw = lerp(n_yzw.x, n_yzw.y, fade_xyzw.x); - return 2.2 * n_xyzw; -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc.meta deleted file mode 100644 index 5e9d7f3..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/classicnoise4D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1dd8a94fd1cd7714ab6ea45bc0ca4fd6 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc deleted file mode 100644 index dd0fd06..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef __NOISE_2D__ -#define __NOISE_2D__ - -#include "noiseMath.cginc" - -// -// Description : Array and textureless GLSL 2D simplex noise function. -// Author : Ian McEwan, Ashima Arts. -// Maintainer : stegu -// Lastmod : 20110822 (ijm) -// License : Copyright (C) 2011 Ashima Arts. All rights reserved. -// Distributed under the MIT License. See LICENSE file. -// https://github.com/ashima/webgl-noise -// https://github.com/stegu/webgl-noise -// - -float snoise(float2 v) -{ - const float4 C = float4(0.211324865405187, // (3.0-sqrt(3.0))/6.0 - 0.366025403784439, // 0.5*(sqrt(3.0)-1.0) - -0.577350269189626, // -1.0 + 2.0 * C.x - 0.024390243902439); // 1.0 / 41.0 - // First corner - float2 i = floor(v + dot(v, C.yy) ); - float2 x0 = v - i + dot(i, C.xx); - - // Other corners - float2 i1; - //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 - //i1.y = 1.0 - i1.x; - i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); - // x0 = x0 - 0.0 + 0.0 * C.xx ; - // x1 = x0 - i1 + 1.0 * C.xx ; - // x2 = x0 - 1.0 + 2.0 * C.xx ; - float4 x12 = x0.xyxy + C.xxzz; - x12.xy -= i1; - - // Permutations - i = mod289(i); // Avoid truncation effects in permutation - float3 p = permute( permute( i.y + float3(0.0, i1.y, 1.0 )) - + i.x + float3(0.0, i1.x, 1.0 )); - - float3 m = max(0.5 - float3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0); - m = m*m ; - m = m*m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - float3 x = 2.0 * frac(p * C.www) - 1.0; - float3 h = abs(x) - 0.5; - float3 ox = floor(x + 0.5); - float3 a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Approximation of: m *= inversesqrt( a0*a0 + h*h ); - m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h ); - - // Compute final noise value at P - float3 g; - g.x = a0.x * x0.x + h.x * x0.y; - g.yz = a0.yz * x12.xz + h.yz * x12.yw; - return 130.0 * dot(m, g); -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc.meta deleted file mode 100644 index 0d01a06..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise2D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: dc4d13d9bf897e24e811156756e27090 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc deleted file mode 100644 index d08dae0..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef __NOISE_3D__ -#define __NOISE_3D__ - -#include "noiseMath.cginc" - -// -// Description : Array and textureless GLSL 2D/3D/4D simplex -// noise functions. -// Author : Ian McEwan, Ashima Arts. -// Maintainer : stegu -// Lastmod : 20110822 (ijm) -// License : Copyright (C) 2011 Ashima Arts. All rights reserved. -// Distributed under the MIT License. See LICENSE file. -// https://github.com/ashima/webgl-noise -// https://github.com/stegu/webgl-noise -// - -float snoise(float3 v) -{ - const float2 C = float2(1.0/6.0, 1.0/3.0) ; - const float4 D = float4(0.0, 0.5, 1.0, 2.0); - - // First corner - float3 i = floor(v + dot(v, C.yyy) ); - float3 x0 = v - i + dot(i, C.xxx) ; - - // Other corners - float3 g = step(x0.yzx, x0.xyz); - float3 l = 1.0 - g; - float3 i1 = min( g.xyz, l.zxy ); - float3 i2 = max( g.xyz, l.zxy ); - - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - float3 x1 = x0 - i1 + C.xxx; - float3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y - float3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y - - // Permutations - i = mod289(i); - float4 p = permute( permute( permute( - i.z + float4(0.0, i1.z, i2.z, 1.0 )) - + i.y + float4(0.0, i1.y, i2.y, 1.0 )) - + i.x + float4(0.0, i1.x, i2.x, 1.0 )); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - float n_ = 0.142857142857; // 1.0/7.0 - float3 ns = n_ * D.wyz - D.xzx; - - float4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) - - float4 x_ = floor(j * ns.z); - float4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) - - float4 x = x_ *ns.x + ns.yyyy; - float4 y = y_ *ns.x + ns.yyyy; - float4 h = 1.0 - abs(x) - abs(y); - - float4 b0 = float4( x.xy, y.xy ); - float4 b1 = float4( x.zw, y.zw ); - - //float4 s0 = float4(lessThan(b0,0.0))*2.0 - 1.0; - //float4 s1 = float4(lessThan(b1,0.0))*2.0 - 1.0; - float4 s0 = floor(b0)*2.0 + 1.0; - float4 s1 = floor(b1)*2.0 + 1.0; - float4 sh = -step(h, float4(0.0)); - - float4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; - float4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; - - float3 p0 = float3(a0.xy,h.x); - float3 p1 = float3(a0.zw,h.y); - float3 p2 = float3(a1.xy,h.z); - float3 p3 = float3(a1.zw,h.w); - - //Normalise gradients - float4 norm = taylorInvSqrt(float4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - - // Mix final noise value - float4 m = max(0.6 - float4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); - m = m * m; - return 42.0 * dot( m*m, float4( dot(p0,x0), dot(p1,x1), - dot(p2,x2), dot(p3,x3) ) ); -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc.meta deleted file mode 100644 index d5cec09..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 57958dda2d526f4468d4d3fe372c1f27 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc deleted file mode 100644 index bb61dea..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef __NOISE_3D_GRAD__ -#define __NOISE_3D_GRAD__ - -#include "noiseMath.cginc" - -// -// Description : Array and textureless GLSL 2D/3D/4D simplex -// noise functions. -// Author : Ian McEwan, Ashima Arts. -// Maintainer : stegu -// Lastmod : 20110822 (ijm) -// License : Copyright (C) 2011 Ashima Arts. All rights reserved. -// Distributed under the MIT License. See LICENSE file. -// https://github.com/ashima/webgl-noise -// https://github.com/stegu/webgl-noise -// - -float snoise(float3 v, out float3 gradient) -{ - const float2 C = float2(1.0/6.0, 1.0/3.0) ; - const float4 D = float4(0.0, 0.5, 1.0, 2.0); - - // First corner - float3 i = floor(v + dot(v, C.yyy) ); - float3 x0 = v - i + dot(i, C.xxx) ; - - // Other corners - float3 g = step(x0.yzx, x0.xyz); - float3 l = 1.0 - g; - float3 i1 = min( g.xyz, l.zxy ); - float3 i2 = max( g.xyz, l.zxy ); - - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - float3 x1 = x0 - i1 + C.xxx; - float3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y - float3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y - - // Permutations - i = mod289(i); - float4 p = permute( permute( permute( - i.z + float4(0.0, i1.z, i2.z, 1.0 )) - + i.y + float4(0.0, i1.y, i2.y, 1.0 )) - + i.x + float4(0.0, i1.x, i2.x, 1.0 )); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - float n_ = 0.142857142857; // 1.0/7.0 - float3 ns = n_ * D.wyz - D.xzx; - - float4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) - - float4 x_ = floor(j * ns.z); - float4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) - - float4 x = x_ *ns.x + ns.yyyy; - float4 y = y_ *ns.x + ns.yyyy; - float4 h = 1.0 - abs(x) - abs(y); - - float4 b0 = float4( x.xy, y.xy ); - float4 b1 = float4( x.zw, y.zw ); - - //float4 s0 = float4(lessThan(b0,0.0))*2.0 - 1.0; - //float4 s1 = float4(lessThan(b1,0.0))*2.0 - 1.0; - float4 s0 = floor(b0)*2.0 + 1.0; - float4 s1 = floor(b1)*2.0 + 1.0; - float4 sh = -step(h, float4(0, 0, 0, 0)); - - float4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; - float4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; - - float3 p0 = float3(a0.xy,h.x); - float3 p1 = float3(a0.zw,h.y); - float3 p2 = float3(a1.xy,h.z); - float3 p3 = float3(a1.zw,h.w); - - //Normalise gradients - float4 norm = taylorInvSqrt(float4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - - // Mix final noise value - float4 m = max(0.6 - float4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); - float4 m2 = m * m; - float4 m4 = m2 * m2; - float4 pdotx = float4(dot(p0,x0), dot(p1,x1), dot(p2,x2), dot(p3,x3)); - - // Determine noise gradient - float4 temp = m2 * m * pdotx; - gradient = -8.0 * (temp.x * x0 + temp.y * x1 + temp.z * x2 + temp.w * x3); - gradient += m4.x * p0 + m4.y * p1 + m4.z * p2 + m4.w * p3; - gradient *= 42.0; - - return 42.0 * dot(m4, pdotx); -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc.meta deleted file mode 100644 index 32abf80..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise3Dgrad.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: f71fd4322ebeb1b449257aef7f8856f6 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc deleted file mode 100644 index 53e589b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef __NOISE_4D__ -#define __NOISE_4D__ - -#include "noiseMath.cginc" - -// -// Description : Array and textureless GLSL 2D/3D/4D simplex -// noise functions. -// Author : Ian McEwan, Ashima Arts. -// Maintainer : stegu -// Lastmod : 20110822 (ijm) -// License : Copyright (C) 2011 Ashima Arts. All rights reserved. -// Distributed under the MIT License. See LICENSE file. -// https://github.com/ashima/webgl-noise -// https://github.com/stegu/webgl-noise -// - -float4 grad4(float j, float4 ip) -{ - const float4 ones = float4(1.0, 1.0, 1.0, -1.0); - float4 p, s; - - p.xyz = floor( frac (float3(j) * ip.xyz) * 7.0) * ip.z - 1.0; - p.w = 1.5 - dot(abs(p.xyz), ones.xyz); - s = float4(lessThan(p, float4(0.0))); - p.xyz = p.xyz + (s.xyz*2.0 - 1.0) * s.www; - - return p; -} - -float snoise(float4 v) -{ - // (sqrt(5) - 1)/4 = F4, used once below - const float F4 = 0.309016994374947451; - const float4 C = float4( 0.138196601125011, // (5 - sqrt(5))/20 G4 - 0.276393202250021, // 2 * G4 - 0.414589803375032, // 3 * G4 - -0.447213595499958); // -1 + 4 * G4 - - // First corner - float4 i = floor(v + dot(v, float4(F4)) ); - float4 x0 = v - i + dot(i, C.xxxx); - - // Other corners - - // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) - float4 i0; - float3 isX = step( x0.yzw, x0.xxx ); - float3 isYZ = step( x0.zww, x0.yyz ); - // i0.x = dot( isX, float3( 1.0 ) ); - i0.x = isX.x + isX.y + isX.z; - i0.yzw = 1.0 - isX; - // i0.y += dot( isYZ.xy, float2( 1.0 ) ); - i0.y += isYZ.x + isYZ.y; - i0.zw += 1.0 - isYZ.xy; - i0.z += isYZ.z; - i0.w += 1.0 - isYZ.z; - - // i0 now contains the unique values 0,1,2,3 in each channel - float4 i3 = clamp( i0, 0.0, 1.0 ); - float4 i2 = clamp( i0-1.0, 0.0, 1.0 ); - float4 i1 = clamp( i0-2.0, 0.0, 1.0 ); - - // x0 = x0 - 0.0 + 0.0 * C.xxxx - // x1 = x0 - i1 + 1.0 * C.xxxx - // x2 = x0 - i2 + 2.0 * C.xxxx - // x3 = x0 - i3 + 3.0 * C.xxxx - // x4 = x0 - 1.0 + 4.0 * C.xxxx - float4 x1 = x0 - i1 + C.xxxx; - float4 x2 = x0 - i2 + C.yyyy; - float4 x3 = x0 - i3 + C.zzzz; - float4 x4 = x0 + C.wwww; - - // Permutations - i = mod289(i); - float j0 = permute( permute( permute( permute(i.w) + i.z) + i.y) + i.x); - float4 j1 = permute( permute( permute( permute ( - i.w + float4(i1.w, i2.w, i3.w, 1.0 )) - + i.z + float4(i1.z, i2.z, i3.z, 1.0 )) - + i.y + float4(i1.y, i2.y, i3.y, 1.0 )) - + i.x + float4(i1.x, i2.x, i3.x, 1.0 )); - - // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope - // 7*7*6 = 294, which is close to the ring size 17*17 = 289. - float4 ip = float4(1.0/294.0, 1.0/49.0, 1.0/7.0, 0.0) ; - - float4 p0 = grad4(j0, ip); - float4 p1 = grad4(j1.x, ip); - float4 p2 = grad4(j1.y, ip); - float4 p3 = grad4(j1.z, ip); - float4 p4 = grad4(j1.w, ip); - - // Normalise gradients - float4 norm = taylorInvSqrt(float4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - p4 *= taylorInvSqrt(dot(p4,p4)); - - // Mix contributions from the five corners - float3 m0 = max(0.6 - float3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0); - float2 m1 = max(0.6 - float2(dot(x3,x3), dot(x4,x4) ), 0.0); - m0 = m0 * m0; - m1 = m1 * m1; - return 49.0 * ( dot(m0*m0, float3( dot( p0, x0 ), dot( p1, x1 ), dot( p2, x2 ))) - + dot(m1*m1, float2( dot( p3, x3 ), dot( p4, x4 ) ) ) ) ; -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc.meta deleted file mode 100644 index 47e7456..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noise4D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 098c1c0087563154b884b2b3de5b3309 -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc deleted file mode 100644 index 82d457f..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __NOISE_MATH__ -#define __NOISE_MATH__ - -// Modulo 289 without a division (only multiplications) -float mod289(float x) { - return x - floor(x * (1.0 / 289.0)) * 289.0; -} - -float2 mod289(float2 x) { - return x - floor(x * (1.0 / 289.0)) * 289.0; -} - -float3 mod289(float3 x) { - return x - floor(x * (1.0 / 289.0)) * 289.0; -} - -float4 mod289(float4 x) { - return x - floor(x * (1.0 / 289.0)) * 289.0; -} - -// Modulo 7 without a division -float3 mod7(float3 x) { - return x - floor(x * (1.0 / 7.0)) * 7.0; -} - -float4 mod7(float4 x) { - return x - floor(x * (1.0 / 7.0)) * 7.0; -} - -// Permutation polynomial: (34x^2 + x) mod 289 -float permute(float x) { - return mod289(((x*34.0) + 1.0)*x); -} - -float3 permute(float3 x) { - return mod289((34.0 * x + 1.0) * x); -} - -float4 permute(float4 x) { - return mod289((34.0 * x + 1.0) * x); -} - -float taylorInvSqrt(float r) { - return 1.79284291400159 - 0.85373472095314 * r; -} - -float4 taylorInvSqrt(float4 r) { - return 1.79284291400159 - 0.85373472095314 * r; -} - -float2 fade(float2 t) { - return t*t*t*(t*(t*6.0 - 15.0) + 10.0); -} - -float3 fade(float3 t) { - return t*t*t*(t*(t*6.0 - 15.0) + 10.0); -} - -float4 fade(float4 t) { - return t*t*t*(t*(t*6.0 - 15.0) + 10.0); -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc.meta deleted file mode 100644 index a88ccfb..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/noiseMath.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ea9d49db2c199ce41a7f57eaf17cae0f -timeCreated: 1511764552 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc deleted file mode 100644 index c84ae7b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc +++ /dev/null @@ -1,459 +0,0 @@ -// -// float3 psrdnoise(float2 pos, float2 per, float rot) -// float3 psdnoise(float2 pos, float2 per) -// float psrnoise(float2 pos, float2 per, float rot) -// float psnoise(float2 pos, float2 per) -// float3 srdnoise(float2 pos, float rot) -// float3 sdnoise(float2 pos) -// float srnoise(float2 pos, float rot) -// float snoise(float2 pos) -#ifndef __PSRD_NOISE_2D__ -#define __PSRD_NOISE_2D__ - -#include "noiseMath.cginc" - -// -// Periodic (tiling) 2-D simplex noise (hexagonal lattice gradient noise) -// with rotating gradients and analytic derivatives. -// Variants also without the derivative (no "d" in the name), without -// the tiling property (no "p" in the name) and without the rotating -// gradients (no "r" in the name). -// -// This is (yet) another variation on simplex noise. It's similar to the -// version presented by Ken Perlin, but the grid is axis-aligned and -// slightly stretched in the y direction to permit rectangular tiling. -// -// The noise can be made to tile seamlessly to any integer period in x and -// any even integer period in y. Odd periods may be specified for y, but -// then the actual tiling period will be twice that number. -// -// The rotating gradients give the appearance of a swirling motion, and can -// serve a similar purpose for animation as motion along z in 3-D noise. -// The rotating gradients in conjunction with the analytic derivatives -// can make "flow noise" effects as presented by Perlin and Neyret. -// -// float3 {p}s{r}dnoise(float2 pos {, float2 per} {, float rot}) -// "pos" is the input (x,y) coordinate -// "per" is the x and y period, where per.x is a positive integer -// and per.y is a positive even integer -// "rot" is the angle to rotate the gradients (any float value, -// where 0.0 is no rotation and 1.0 is one full turn) -// The first component of the 3-element return vector is the noise value. -// The second and third components are the x and y partial derivatives. -// -// float {p}s{r}noise(float2 pos {, float2 per} {, float rot}) -// "pos" is the input (x,y) coordinate -// "per" is the x and y period, where per.x is a positive integer -// and per.y is a positive even integer -// "rot" is the angle to rotate the gradients (any float value, -// where 0.0 is no rotation and 1.0 is one full turn) -// The return value is the noise value. -// Partial derivatives are not computed, making these functions faster. -// -// Author: Stefan Gustavson (stefan.gustavson@gmail.com) -// Version 2016-05-10. -// -// Many thanks to Ian McEwan of Ashima Arts for the -// idea of using a permutation polynomial. -// -// Copyright (c) 2016 Stefan Gustavson. All rights reserved. -// Distributed under the MIT license. See LICENSE file. -// https://github.com/stegu/webgl-noise -// - -// -// TODO: One-pixel wide artefacts used to occur due to precision issues with -// the gradient indexing. This is specific to this variant of noise, because -// one axis of the simplex grid is perfectly aligned with the input x axis. -// The errors were rare, and they are now very unlikely to ever be visible -// after a quick fix was introduced: a small offset is added to the y coordinate. -// A proper fix would involve using round() instead of floor() in selected -// places, but the quick fix works fine. -// (If you run into problems with this, please let me know.) -// - -// Hashed 2-D gradients with an extra rotation. -// (The constant 0.0243902439 is 1/41) -float2 rgrad2(float2 p, float rot) { -#if 0 -// Map from a line to a diamond such that a shift maps to a rotation. - float u = permute(permute(p.x) + p.y) * 0.0243902439 + rot; // Rotate by shift - u = 4.0 * frac(u) - 2.0; - // (This vector could be normalized, exactly or approximately.) - return float2(abs(u)-1.0, abs(abs(u+1.0)-2.0)-1.0); -#else -// For more isotropic gradients, sin/cos can be used instead. - float u = permute(permute(p.x) + p.y) * 0.0243902439 + rot; // Rotate by shift - u = frac(u) * 6.28318530718; // 2*pi - return float2(cos(u), sin(u)); -#endif -} - -// -// 2-D tiling simplex noise with rotating gradients and analytical derivative. -// The first component of the 3-element return vector is the noise value, -// and the second and third components are the x and y partial derivatives. -// -float3 psrdnoise(float2 pos, float2 per, float rot) { - // Hack: offset y slightly to hide some rare artifacts - pos.y += 0.01; - // Skew to hexagonal grid - float2 uv = float2(pos.x + pos.y*0.5, pos.y); - - float2 i0 = floor(uv); - float2 f0 = frac(uv); - // Traversal order - float2 i1 = (f0.x > f0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); - - // Unskewed grid points in (x,y) space - float2 p0 = float2(i0.x - i0.y * 0.5, i0.y); - float2 p1 = float2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y); - float2 p2 = float2(p0.x + 0.5, p0.y + 1.0); - - // Integer grid point indices in (u,v) space - i1 = i0 + i1; - float2 i2 = i0 + float2(1.0, 1.0); - - // Vectors in unskewed (x,y) coordinates from - // each of the simplex corners to the evaluation point - float2 d0 = pos - p0; - float2 d1 = pos - p1; - float2 d2 = pos - p2; - - // Wrap i0, i1 and i2 to the desired period before gradient hashing: - // wrap points in (x,y), map to (u,v) - float3 xw = mod(float3(p0.x, p1.x, p2.x), per.x); - float3 yw = mod(float3(p0.y, p1.y, p2.y), per.y); - float3 iuw = xw + 0.5 * yw; - float3 ivw = yw; - - // Create gradients from indices - float2 g0 = rgrad2(float2(iuw.x, ivw.x), rot); - float2 g1 = rgrad2(float2(iuw.y, ivw.y), rot); - float2 g2 = rgrad2(float2(iuw.z, ivw.z), rot); - - // Gradients dot vectors to corresponding corners - // (The derivatives of this are simply the gradients) - float3 w = float3(dot(g0, d0), dot(g1, d1), dot(g2, d2)); - - // Radial weights from corners - // 0.8 is the square of 2/sqrt(5), the distance from - // a grid point to the nearest simplex boundary - float3 t = 0.8 - float3(dot(d0, d0), dot(d1, d1), dot(d2, d2)); - - // Partial derivatives for analytical gradient computation - float3 dtdx = -2.0 * float3(d0.x, d1.x, d2.x); - float3 dtdy = -2.0 * float3(d0.y, d1.y, d2.y); - - // Set influence of each surflet to zero outside radius sqrt(0.8) - if (t.x < 0.0) { - dtdx.x = 0.0; - dtdy.x = 0.0; - t.x = 0.0; - } - if (t.y < 0.0) { - dtdx.y = 0.0; - dtdy.y = 0.0; - t.y = 0.0; - } - if (t.z < 0.0) { - dtdx.z = 0.0; - dtdy.z = 0.0; - t.z = 0.0; - } - - // Fourth power of t (and third power for derivative) - float3 t2 = t * t; - float3 t4 = t2 * t2; - float3 t3 = t2 * t; - - // Final noise value is: - // sum of ((radial weights) times (gradient dot vector from corner)) - float n = dot(t4, w); - - // Final analytical derivative (gradient of a sum of scalar products) - float2 dt0 = float2(dtdx.x, dtdy.x) * 4.0 * t3.x; - float2 dn0 = t4.x * g0 + dt0 * w.x; - float2 dt1 = float2(dtdx.y, dtdy.y) * 4.0 * t3.y; - float2 dn1 = t4.y * g1 + dt1 * w.y; - float2 dt2 = float2(dtdx.z, dtdy.z) * 4.0 * t3.z; - float2 dn2 = t4.z * g2 + dt2 * w.z; - - return 11.0*float3(n, dn0 + dn1 + dn2); -} - -// -// 2-D tiling simplex noise with fixed gradients -// and analytical derivative. -// This function is implemented as a wrapper to "psrdnoise", -// at the minimal cost of three extra additions. -// -float3 psdnoise(float2 pos, float2 per) { - return psrdnoise(pos, per, 0.0); -} - -// -// 2-D tiling simplex noise with rotating gradients, -// but without the analytical derivative. -// -float psrnoise(float2 pos, float2 per, float rot) { - // Offset y slightly to hide some rare artifacts - pos.y += 0.001; - // Skew to hexagonal grid - float2 uv = float2(pos.x + pos.y*0.5, pos.y); - - float2 i0 = floor(uv); - float2 f0 = frac(uv); - // Traversal order - float2 i1 = (f0.x > f0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); - - // Unskewed grid points in (x,y) space - float2 p0 = float2(i0.x - i0.y * 0.5, i0.y); - float2 p1 = float2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y); - float2 p2 = float2(p0.x + 0.5, p0.y + 1.0); - - // Integer grid point indices in (u,v) space - i1 = i0 + i1; - float2 i2 = i0 + float2(1.0, 1.0); - - // Vectors in unskewed (x,y) coordinates from - // each of the simplex corners to the evaluation point - float2 d0 = pos - p0; - float2 d1 = pos - p1; - float2 d2 = pos - p2; - - // Wrap i0, i1 and i2 to the desired period before gradient hashing: - // wrap points in (x,y), map to (u,v) - float3 xw = mod(float3(p0.x, p1.x, p2.x), per.x); - float3 yw = mod(float3(p0.y, p1.y, p2.y), per.y); - float3 iuw = xw + 0.5 * yw; - float3 ivw = yw; - - // Create gradients from indices - float2 g0 = rgrad2(float2(iuw.x, ivw.x), rot); - float2 g1 = rgrad2(float2(iuw.y, ivw.y), rot); - float2 g2 = rgrad2(float2(iuw.z, ivw.z), rot); - - // Gradients dot vectors to corresponding corners - // (The derivatives of this are simply the gradients) - float3 w = float3(dot(g0, d0), dot(g1, d1), dot(g2, d2)); - - // Radial weights from corners - // 0.8 is the square of 2/sqrt(5), the distance from - // a grid point to the nearest simplex boundary - float3 t = 0.8 - float3(dot(d0, d0), dot(d1, d1), dot(d2, d2)); - - // Set influence of each surflet to zero outside radius sqrt(0.8) - t = max(t, 0.0); - - // Fourth power of t - float3 t2 = t * t; - float3 t4 = t2 * t2; - - // Final noise value is: - // sum of ((radial weights) times (gradient dot vector from corner)) - float n = dot(t4, w); - - // Rescale to cover the range [-1,1] reasonably well - return 11.0*n; -} - -// -// 2-D tiling simplex noise with fixed gradients, -// without the analytical derivative. -// This function is implemented as a wrapper to "psrnoise", -// at the minimal cost of three extra additions. -// -float psnoise(float2 pos, float2 per) { - return psrnoise(pos, per, 0.0); -} - -// -// 2-D non-tiling simplex noise with rotating gradients and analytical derivative. -// The first component of the 3-element return vector is the noise value, -// and the second and third components are the x and y partial derivatives. -// -float3 srdnoise(float2 pos, float rot) { - // Offset y slightly to hide some rare artifacts - pos.y += 0.001; - // Skew to hexagonal grid - float2 uv = float2(pos.x + pos.y*0.5, pos.y); - - float2 i0 = floor(uv); - float2 f0 = frac(uv); - // Traversal order - float2 i1 = (f0.x > f0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); - - // Unskewed grid points in (x,y) space - float2 p0 = float2(i0.x - i0.y * 0.5, i0.y); - float2 p1 = float2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y); - float2 p2 = float2(p0.x + 0.5, p0.y + 1.0); - - // Integer grid point indices in (u,v) space - i1 = i0 + i1; - float2 i2 = i0 + float2(1.0, 1.0); - - // Vectors in unskewed (x,y) coordinates from - // each of the simplex corners to the evaluation point - float2 d0 = pos - p0; - float2 d1 = pos - p1; - float2 d2 = pos - p2; - - float3 x = float3(p0.x, p1.x, p2.x); - float3 y = float3(p0.y, p1.y, p2.y); - float3 iuw = x + 0.5 * y; - float3 ivw = y; - - // Avoid precision issues in permutation - iuw = mod289(iuw); - ivw = mod289(ivw); - - // Create gradients from indices - float2 g0 = rgrad2(float2(iuw.x, ivw.x), rot); - float2 g1 = rgrad2(float2(iuw.y, ivw.y), rot); - float2 g2 = rgrad2(float2(iuw.z, ivw.z), rot); - - // Gradients dot vectors to corresponding corners - // (The derivatives of this are simply the gradients) - float3 w = float3(dot(g0, d0), dot(g1, d1), dot(g2, d2)); - - // Radial weights from corners - // 0.8 is the square of 2/sqrt(5), the distance from - // a grid point to the nearest simplex boundary - float3 t = 0.8 - float3(dot(d0, d0), dot(d1, d1), dot(d2, d2)); - - // Partial derivatives for analytical gradient computation - float3 dtdx = -2.0 * float3(d0.x, d1.x, d2.x); - float3 dtdy = -2.0 * float3(d0.y, d1.y, d2.y); - - // Set influence of each surflet to zero outside radius sqrt(0.8) - if (t.x < 0.0) { - dtdx.x = 0.0; - dtdy.x = 0.0; - t.x = 0.0; - } - if (t.y < 0.0) { - dtdx.y = 0.0; - dtdy.y = 0.0; - t.y = 0.0; - } - if (t.z < 0.0) { - dtdx.z = 0.0; - dtdy.z = 0.0; - t.z = 0.0; - } - - // Fourth power of t (and third power for derivative) - float3 t2 = t * t; - float3 t4 = t2 * t2; - float3 t3 = t2 * t; - - // Final noise value is: - // sum of ((radial weights) times (gradient dot vector from corner)) - float n = dot(t4, w); - - // Final analytical derivative (gradient of a sum of scalar products) - float2 dt0 = float2(dtdx.x, dtdy.x) * 4.0 * t3.x; - float2 dn0 = t4.x * g0 + dt0 * w.x; - float2 dt1 = float2(dtdx.y, dtdy.y) * 4.0 * t3.y; - float2 dn1 = t4.y * g1 + dt1 * w.y; - float2 dt2 = float2(dtdx.z, dtdy.z) * 4.0 * t3.z; - float2 dn2 = t4.z * g2 + dt2 * w.z; - - return 11.0*float3(n, dn0 + dn1 + dn2); -} - -// -// 2-D non-tiling simplex noise with fixed gradients and analytical derivative. -// This function is implemented as a wrapper to "srdnoise", -// at the minimal cost of three extra additions. -// -float3 sdnoise(float2 pos) { - return srdnoise(pos, 0.0); -} - -// -// 2-D non-tiling simplex noise with rotating gradients, -// without the analytical derivative. -// -float srnoise(float2 pos, float rot) { - // Offset y slightly to hide some rare artifacts - pos.y += 0.001; - // Skew to hexagonal grid - float2 uv = float2(pos.x + pos.y*0.5, pos.y); - - float2 i0 = floor(uv); - float2 f0 = frac(uv); - // Traversal order - float2 i1 = (f0.x > f0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0); - - // Unskewed grid points in (x,y) space - float2 p0 = float2(i0.x - i0.y * 0.5, i0.y); - float2 p1 = float2(p0.x + i1.x - i1.y * 0.5, p0.y + i1.y); - float2 p2 = float2(p0.x + 0.5, p0.y + 1.0); - - // Integer grid point indices in (u,v) space - i1 = i0 + i1; - float2 i2 = i0 + float2(1.0, 1.0); - - // Vectors in unskewed (x,y) coordinates from - // each of the simplex corners to the evaluation point - float2 d0 = pos - p0; - float2 d1 = pos - p1; - float2 d2 = pos - p2; - - // Wrap i0, i1 and i2 to the desired period before gradient hashing: - // wrap points in (x,y), map to (u,v) - float3 x = float3(p0.x, p1.x, p2.x); - float3 y = float3(p0.y, p1.y, p2.y); - float3 iuw = x + 0.5 * y; - float3 ivw = y; - - // Avoid precision issues in permutation - iuw = mod289(iuw); - ivw = mod289(ivw); - - // Create gradients from indices - float2 g0 = rgrad2(float2(iuw.x, ivw.x), rot); - float2 g1 = rgrad2(float2(iuw.y, ivw.y), rot); - float2 g2 = rgrad2(float2(iuw.z, ivw.z), rot); - - // Gradients dot vectors to corresponding corners - // (The derivatives of this are simply the gradients) - float3 w = float3(dot(g0, d0), dot(g1, d1), dot(g2, d2)); - - // Radial weights from corners - // 0.8 is the square of 2/sqrt(5), the distance from - // a grid point to the nearest simplex boundary - float3 t = 0.8 - float3(dot(d0, d0), dot(d1, d1), dot(d2, d2)); - - // Set influence of each surflet to zero outside radius sqrt(0.8) - t = max(t, 0.0); - - // Fourth power of t - float3 t2 = t * t; - float3 t4 = t2 * t2; - - // Final noise value is: - // sum of ((radial weights) times (gradient dot vector from corner)) - float n = dot(t4, w); - - // Rescale to cover the range [-1,1] reasonably well - return 11.0*n; -} - -// -// 2-D non-tiling simplex noise with fixed gradients, -// without the analytical derivative. -// This function is implemented as a wrapper to "srnoise", -// at the minimal cost of three extra additions. -// Note: if this kind of noise is all you want, there are faster -// GLSL implementations of non-tiling simplex noise out there. -// This one is included mainly for completeness and compatibility -// with the other functions in the file. -// -float snoise(float2 pos) { - return srnoise(pos, 0.0); -} - -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc.meta deleted file mode 100644 index 908819d..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/Noise/psrdnoise2D.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7f5763592cf173242a03524f6010c0ae -timeCreated: 1511764501 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc deleted file mode 100644 index 280209b..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __PARTICLE_UNIFORMS__ -#define __PARTICLE_UNIFORMS__ - -struct ParticleUniforms -{ - float numRate; - float movement; - float geomSize; - float velocityDamping; - - float lifeDuration; - float lifeVariation; - float convergence; - float homeStrength; - - float noiseStrength; - float noiseSeed; - float noiseTimeScale; - float noiseFrequency; - - float3 forceDirection; - float forceStrength; - - float3 impulsePosition; - float impulseRadius; - float impulseStrength; -}; - -#endif // __PARTICLE_UNIFORMS__ diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc.meta deleted file mode 100644 index dc67a5a..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUniforms.cginc.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 361a9c8fc4ac1f64cbec0d92daa4f9ca -timeCreated: 1513426238 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute deleted file mode 100644 index be83b42..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute +++ /dev/null @@ -1,146 +0,0 @@ -#pragma kernel CSMain - -#include "UnityCG.cginc" -#include "Inc/Defines.cginc" -#include "Inc/Math.cginc" -#include "Noise/noise3Dgrad.cginc" -#include "ParticleUniforms.cginc" - -CBUFFER_START(Variables) - float timeStep; - float timeValue; - float bufferCount; - int home_count; - float3 coeffsA; - float3 coeffsB; - float3 coeffsC; - float3 coeffsD; -CBUFFER_END - -RWStructuredBuffer ssbo; -RWStructuredBuffer uniform_buffer; -RWStructuredBuffer home_buffer; -RWStructuredBuffer home_velocity_buffer; - -[numthreads(WORK_GROUP_SIZE, 1, 1)] -void CSMain(uint3 id : SV_DispatchThreadID) -{ - uint idx = id.x; - Particle p = ssbo[idx]; - float4 home = (home_count > 0) ? home_buffer[p.seed * home_count] : float4(0, 0, 0, 1); - float4 home_velcity = (home_count > 0) ? home_velocity_buffer[p.seed * home_count] : float4(0, 0, 0, 1); - ParticleUniforms uni = uniform_buffer[0]; - - float factor = p.color.a; - float3 acc = float3(0, 0, 0); - float3 F = float3(0, 0, 0); - - //if (lifeDuration > 0.1f) - { - float duration = uni.lifeDuration * (1.0f + factor * uni.lifeVariation); - float current_life = p.life * duration + timeStep; - //bool is_reset = false; - //if (current_life > duration) - //{ - // current_life -= duration; - // is_reset = true; - //} - //if (is_reset || p.life < 0.0f) - if (current_life > duration && uni.lifeDuration > 0.1f) - { - current_life -= duration; - //if (isEmit == 0 && current_life > 0.0) current_life -= duration; - p.position = home.xyz; - p.color.rgb = float3(1, 1, 1); - p.velocity = home_velcity.xyz * uni.forceStrength * 100.0f; - //p.velocity = forceDirection * 3.0f; - } - p.life = current_life / duration; - } - - // noise - { - //float n_seed = p.seed * 0.12f; - //float time_seed = timeValue * noiseTimeScale; - float3 np = p.position * uni.noiseFrequency; - float3 n1, n2; - snoise(np, n1); - snoise(np + float3(uni.noiseSeed, p.seed * 0.12f, timeValue * uni.noiseTimeScale), n2); - F = cross(n1, n2); - acc += F * uni.noiseStrength; - } - - // convergence - { - F = -p.position; - acc += F * uni.convergence; - } - - // home as tangential - { - F = cross(p.position, float3(0, 1, 0)); - float d = clamp(abs(p.position.y), 1, 100); - F = normalize(F) * 10.0f / pow(d, 2 * 2); - acc += F * uni.homeStrength; - } - - // force - { - F = float3(0, 0, 0); - if (length(uni.forceDirection) > 0.1f) - F = normalize(uni.forceDirection) * 10.0f; - acc += F * uni.forceStrength; - } - - // impulse - { - F = uni.impulsePosition - p.position; - float mag = F.x*F.x + F.y*F.y + F.z*F.z; - float rad2 = uni.impulseRadius * uni.impulseRadius; - acc += F * exp(-mag / rad2) * uni.impulseStrength; - } - - // cosine gradient - { - float t = (uni.lifeDuration > 0.1f) ? clamp(p.life, 0.0f, 1.0f) : factor; - half3 rgb = cosine_gradient(coeffsA, coeffsB, coeffsC, coeffsD, t); -#if !defined(UNITY_COLORSPACE_GAMMA) - rgb = GammaToLinearSpace(rgb); -#endif - p.color.rgb = rgb; - } - - acc *= uni.movement; - p.velocity += acc * timeStep; - p.position += p.velocity * timeStep; - - //float damping = lerp(0.965f, 0.985f, p.seed) * velocityDamping; - p.velocity *= lerp(0.965f, 0.985f, p.seed) * uni.velocityDamping; - - // calculate rotate quat - { - float vel = length(p.velocity); - float a = (1 + factor) * vel * 0.05f; - float4 q = quat_from_axis_angle(normalize(p.velocity + float3(0, FLT_EPSILON, 0)), a); - q = quat_mult(p.quat, q); - q = normalize(q); - p.quat = lerp(p.quat, q, saturate(vel - 0.01f)); - } - - // calculate model matrix - { - float size = uni.geomSize * lerp(1, pow(1.0f - saturate(p.life), 1.0f / 2.2f), any(uni.lifeDuration)); - size *= lerp(0.5, 1.0, p.seed); - if (idx > (uint)(uni.numRate * bufferCount) || (p.life < 0.0f && uni.lifeDuration > 0.1f)) - { - size = 0.0f; - } - - float4x4 mat = make_translation_matrix(p.position); - mat = mul(mat, quat_to_rotation_matrix(p.quat)); - mat = mul(mat, make_scaling_matrix(size)); - p.model_matrix = mat; - } - - ssbo[id.x] = p; -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute.meta deleted file mode 100644 index dd9769a..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleUpdate.compute.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e08afbf5a516b754a8eb9de35a9f5e6a -timeCreated: 1513318067 -licenseType: Free -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 4 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader deleted file mode 100644 index 7a1b93f..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader +++ /dev/null @@ -1,80 +0,0 @@ -Shader "UltraCombos/ParticleWorks/ParticleViewer/Instanced" -{ - Properties - { - _Color("Color", Color) = (1,1,1,1) - _MainTex("Albedo (RGB)", 2D) = "white" {} - _Metallic("Metallic", Range(0, 1)) = 0.0 - _Smoothness("Smoothness", Range(0, 1)) = 0.5 - _Emission("Emission", Range(0, 5)) = 0.0 - } - SubShader - { - Tags{ "RenderType" = "Opaque" } - LOD 200 - Cull Off - - CGPROGRAM - #pragma surface surf Standard fullforwardshadows vertex:vert addshadow - #pragma multi_compile_instancing - #pragma instancing_options assumeuniformscaling procedural:setup - #pragma target 4.5 - - sampler2D _MainTex; - - fixed4 _Color; - half _Smoothness; - half _Metallic; - half _Emission; - - #ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED - #include "Inc/Defines.cginc" - StructuredBuffer ssbo; - #endif - - struct Input { - float3 color; - float2 texcoord; - }; - - float4x4 model_matrix; - - #ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED - void setup() - { - Particle p = ssbo[unity_InstanceID]; - unity_ObjectToWorld = mul(model_matrix, p.model_matrix); - - unity_WorldToObject = unity_ObjectToWorld; - unity_WorldToObject._14_24_34 *= -1; - unity_WorldToObject._11_22_33 = 1.0f / unity_WorldToObject._11_22_33; - } - #endif - - void vert(inout appdata_full v, out Input o) - { - UNITY_INITIALIZE_OUTPUT(Input, o); - - #ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED - Particle p = ssbo[unity_InstanceID]; - - o.color = p.color; - o.texcoord = v.texcoord; - #endif - } - - void surf(Input IN, inout SurfaceOutputStandard o) - { - fixed4 c = tex2D(_MainTex, IN.texcoord) * _Color * float4(IN.color, 1); - o.Albedo = c.rgb; - o.Metallic = _Metallic; - o.Smoothness = _Smoothness; - o.Alpha = c.a; - - //float lumin = pow(Luminance(IN.color), 2.2f); - o.Emission = c.rgb * _Emission;// *lumin; - } - ENDCG - } - FallBack "Diffuse" -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader.meta deleted file mode 100644 index d398db9..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerInstanced.shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0a37c93f4a42ad341ab8b8d2dafab01d -timeCreated: 1513321527 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader deleted file mode 100644 index 7c2a8ef..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader +++ /dev/null @@ -1,72 +0,0 @@ -Shader "UltraCombos/ParticleWorks/ParticleViewer/Mesh" -{ - Properties - { - _Color("Color", Color) = (1,1,1,1) - _MainTex("Albedo (RGB)", 2D) = "white" {} - _Metallic("Metallic", Range(0, 1)) = 0.0 - _Smoothness("Smoothness", Range(0, 1)) = 0.5 - _Emission("Emission", Range(0, 5)) = 0.0 - } - SubShader - { - Tags{ "RenderType" = "Opaque" } - LOD 200 - Cull Off - - CGPROGRAM - #pragma surface surf Standard fullforwardshadows vertex:vert addshadow - #pragma target 4.5 - - sampler2D _MainTex; - - fixed4 _Color; - half _Smoothness; - half _Metallic; - half _Emission; - - #ifdef SHADER_API_D3D11 - #include "Inc/Defines.cginc" - StructuredBuffer ssbo; - #endif - - struct Input { - float3 color; - float2 texcoord; - }; - - void vert(inout appdata_full v, out Input o) - { - UNITY_INITIALIZE_OUTPUT(Input, o); - - #ifdef SHADER_API_D3D11 - int id = v.texcoord.z; - //int index = v.texcoord.w; - Particle p = ssbo[id]; - - v.vertex = mul(p.model_matrix, v.vertex); - v.normal = mul((float3x3)p.model_matrix, v.normal); - - o.color = p.color; - o.texcoord = v.texcoord.xy; - #endif - } - - void surf(Input IN, inout SurfaceOutputStandard o) - { - //float cc = length(IN.texcoord - float2(0.5f, 0.5f)); - //clip(0.5f / sqrt(2.0f) - cc); - - fixed4 c = tex2D(_MainTex, IN.texcoord) * _Color * float4(IN.color, 1); - o.Albedo = c.rgb; - o.Metallic = _Metallic; - o.Smoothness = _Smoothness; - o.Alpha = c.a; - - //float lumin = pow(Luminance(IN.color), 2.2f); - o.Emission = c.rgb * _Emission;// *lumin; - } - ENDCG - } - FallBack "Diffuse" -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader.meta deleted file mode 100644 index 4822e03..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerMesh.shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c31611738f4cc1b4ea71988156cc8327 -timeCreated: 1513321527 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader deleted file mode 100644 index c8c11fb..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader +++ /dev/null @@ -1,79 +0,0 @@ -Shader "UltraCombos/ParticleWorks/ParticleViewer/UnlitParticle" -{ - Properties - { - _Color("Color", Color) = (1,1,1,1) - _Emission("Emission", Range(0, 5)) = 0.0 - } - SubShader - { - Tags { "RenderType"="Opaque" } - LOD 100 - - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma geometry geom - #pragma fragment frag - #pragma multi_compile_fog - - #include "UnityCG.cginc" - - struct v2g - { - float4 vertex : SV_POSITION; - float3 color : COLOR; - }; - - struct g2f - { - float4 vertex : SV_POSITION; - float3 color : COLOR; - UNITY_FOG_COORDS(1) - }; - - fixed4 _Color; - half _Emission; - float4x4 model_matrix; - - #ifdef SHADER_API_D3D11 - #include "Inc/Defines.cginc" - StructuredBuffer ssbo; - #endif - - v2g vert (appdata_base v, uint vid : SV_VertexID) - { - v2g o = (v2g)0; - #ifdef SHADER_API_D3D11 - Particle p = ssbo[vid]; - o.vertex = mul(model_matrix, float4(p.position, 1)); - o.color = p.color.rgb; - #endif - return o; - } - - [maxvertexcount(6)] - void geom(point v2g input[1], inout PointStream OutputStream) - { - g2f o = (g2f)0; - - o.color = input[0].color; - - o.vertex = UnityObjectToClipPos(input[0].vertex.xyz); - UNITY_TRANSFER_FOG(o, o.vertex); - OutputStream.Append(o); - OutputStream.RestartStrip(); - } - - fixed4 frag (g2f i) : SV_Target - { - fixed4 col = fixed4(i.color, 1); - col.rgb *= 1 + _Emission; - UNITY_APPLY_FOG(i.fogCoord, col); - return col; - } - ENDCG - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader.meta deleted file mode 100644 index 4835b78..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitParticle.shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6815828e001d01f4699ec8c7f1dde1fe -timeCreated: 1513929851 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader deleted file mode 100644 index af214c2..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader +++ /dev/null @@ -1,110 +0,0 @@ -Shader "UltraCombos/ParticleWorks/ParticleViewer/UnlitPoint" -{ - Properties - { - _Color("Color", Color) = (1,1,1,1) - _MainTex("Albedo (RGB)", 2D) = "white" {} - _Emission("Emission", Range(0, 5)) = 0.0 - _Size("Size", Range(0, 1)) = 0.1 - } - SubShader - { - Tags { "RenderType"="Opaque" } - LOD 100 - - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma geometry geom - #pragma fragment frag - #pragma multi_compile_fog - - #include "UnityCG.cginc" - - struct v2g - { - float4 vertex : SV_POSITION; - }; - - struct g2f - { - float4 vertex : SV_POSITION; - float2 uv : TEXCOORD; - UNITY_FOG_COORDS(1) - }; - - sampler2D _MainTex; - float4 _MainTex_ST; - - fixed4 _Color; - half _Emission; - half _Size; - float4x4 model_matrix; - - #ifdef SHADER_API_D3D11 - StructuredBuffer ssbo; - #endif - - v2g vert (appdata_base v, uint vid : SV_VertexID) - { - v2g o = (v2g)0; - #ifdef SHADER_API_D3D11 - o.vertex = mul(model_matrix, float4(ssbo[vid].xyz, 1)); - #endif - return o; - } - - [maxvertexcount(6)] - void geom(point v2g input[1], inout TriangleStream OutputStream) - { - float3 position = input[0].vertex.xyz; - position = UnityObjectToViewPos(position); - float size = _Size;// *input[0].vertex.w; - const int side = 4; - float3 vertices[side]; - float2 uvs[side]; - - float delta_a = UNITY_PI * 2.0f / side; - for (int i = 0; i < side; i++) - { - float a = delta_a * i; - float x = cos(-a); - float y = sin(-a); - vertices[i] = position + float3(x * size, y * size, 0); - uvs[i] = float2(x, y) * 0.5f + 0.5f; - } - - g2f o = (g2f)0; - - int index; - for (int k = 0; k < side - 2; k++) - { - for (int j = 0; j < 3; j++) - { - index = (j == 0) ? 0 : (k + j); - - o.vertex = mul(UNITY_MATRIX_P, float4(vertices[index], 1.0f)); - o.uv = TRANSFORM_TEX(uvs[index], _MainTex); - UNITY_TRANSFER_FOG(o, o.vertex); - OutputStream.Append(o); - } - - OutputStream.RestartStrip(); - } - - } - - fixed4 frag (g2f i) : SV_Target - { - clip(0.5f / sqrt(2.0f) - length(i.uv - float2(0.5f, 0.5f))); - - fixed4 col = tex2D(_MainTex, i.uv) * _Color; - col.rgb *= 1 + _Emission; - UNITY_APPLY_FOG(i.fogCoord, col); - return col; - } - ENDCG - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader.meta deleted file mode 100644 index f37a826..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/ParticleViewerUnlitPoint.shader.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 786da5c7ceb729b4db2a00586adaeb24 -timeCreated: 1513929851 -licenseType: Free -ShaderImporter: - externalObjects: {} - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute deleted file mode 100644 index 7fcbc0a..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute +++ /dev/null @@ -1,36 +0,0 @@ -#pragma kernel CSMain - -#include "UnityCG.cginc" -#include "Inc/Defines.cginc" - -struct Vertex -{ - float3 position; - float3 normal; - float4 color; - float4 uv; - //float2 uv2; - //float4 tangent; -}; - -RWStructuredBuffer ssbo; -RWStructuredBuffer origin_buffer; -RWStructuredBuffer vertex_buffer; - -[numthreads(WORK_GROUP_SIZE, 1, 1)] -void CSMain(uint3 id : SV_DispatchThreadID) -{ - Vertex o = origin_buffer[id.x]; - Vertex v = vertex_buffer[id.x]; - int index = o.uv.z; - Particle p = ssbo[index]; - - //v = o; - - v.position = mul(p.model_matrix, float4(o.position, 1)).xyz; - v.normal = mul((float3x3)p.model_matrix, o.normal); - v.color = float4(p.color.rgb, 1.0f); - v.uv = float4(o.uv.xy, 0, 0); - - vertex_buffer[id.x] = v; -} diff --git a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute.meta b/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute.meta deleted file mode 100644 index 28548ee..0000000 --- a/Unity-19050-05-BallPool/Assets/ParticleWorks/Shader/VertexBufferUpdate.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 226ca53b2a6b1f34cb8e462337683d07 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 4 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView.meta deleted file mode 100644 index d82c755..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a4bdda5143caf964bbffdd9d7289a17c -folderAsset: yes -timeCreated: 1488532632 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity deleted file mode 100644 index 4244fbc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity +++ /dev/null @@ -1,976 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 7 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 7 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 4 - m_Resolution: 1 - m_BakeResolution: 50 - m_TextureWidth: 1024 - m_TextureHeight: 1024 - m_AO: 1 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 0 - m_DirectLightInLightProbes: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_LightingDataAsset: {fileID: 0} - m_RuntimeCPUUsage: 25 ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666666 - accuratePlacement: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &112136118 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 112136119} - - component: {fileID: 112136120} - m_Layer: 0 - m_Name: BodyView - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &112136119 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 112136118} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 716011534} - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &112136120 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 112136118} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8821130411451d343a1488e2a9db134e, type: 3} - m_Name: - m_EditorClassIdentifier: - BoneMaterial: {fileID: 2100000, guid: f2ea145c63353784985576f08398a815, type: 2} - BodySourceManager: {fileID: 1698423884} ---- !u!1 &252019523 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 252019524} - - component: {fileID: 252019527} - - component: {fileID: 252019526} - - component: {fileID: 252019525} - - component: {fileID: 252019528} - m_Layer: 0 - m_Name: DesignerOnlyView - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &252019524 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 252019523} - m_LocalRotation: {x: -0.7071069, y: 0, z: 0, w: 0.70710677} - m_LocalPosition: {x: 60, y: -45, z: 50} - m_LocalScale: {x: 13, y: 1, z: 10} - m_Children: [] - m_Father: {fileID: 1988608401} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &252019525 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 252019523} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 ---- !u!64 &252019526 -MeshCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 252019523} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Convex: 0 - m_InflateMesh: 0 - m_SkinWidth: 0.01 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!33 &252019527 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 252019523} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!114 &252019528 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 252019523} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61e5c93f5da1e324aa7fd9671db875bc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &257076396 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 257076398} - - component: {fileID: 257076397} - - component: {fileID: 257076399} - - component: {fileID: 257076400} - m_Layer: 0 - m_Name: DepthView - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &257076397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 257076396} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 383e102cbe3bfb34d94c98ea3c2479b4, type: 3} - m_Name: - m_EditorClassIdentifier: - ViewMode: 1 - ColorSourceManager: {fileID: 679549941} - DepthSourceManager: {fileID: 1022827879} - MultiSourceManager: {fileID: 1736670513} ---- !u!4 &257076398 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 257076396} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: -0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1988608401} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &257076399 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 257076396} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 ---- !u!33 &257076400 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 257076396} - m_Mesh: {fileID: 0} ---- !u!1 &660022884 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 660022886} - - component: {fileID: 660022885} - m_Layer: 0 - m_Name: Directional light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &660022885 -Light: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 660022884} - m_Enabled: 1 - serializedVersion: 7 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 1 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &660022886 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 660022884} - m_LocalRotation: {x: 0.30909714, y: -0.24520965, z: 0.08282233, w: 0.9151348} - m_LocalPosition: {x: -13.278711, y: 5.633033, z: 4.732221} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &679549941 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 679549942} - - component: {fileID: 679549943} - m_Layer: 0 - m_Name: ColorManager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &679549942 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 679549941} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -208.42621, y: 330.08652, z: 342.24237} - 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 &679549943 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 679549941} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 92ab5bea6110edb4081e490c0982748d, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!1 &716011529 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 716011534} - - component: {fileID: 716011533} - - component: {fileID: 716011532} - - component: {fileID: 716011531} - - component: {fileID: 716011530} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &716011530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 716011529} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61e5c93f5da1e324aa7fd9671db875bc, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!23 &716011531 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 716011529} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 ---- !u!65 &716011532 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 716011529} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &716011533 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 716011529} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &716011534 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 716011529} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 3, y: 8, z: 0.01} - m_Children: [] - m_Father: {fileID: 112136119} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &934010673 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 934010678} - - component: {fileID: 934010677} - - component: {fileID: 934010676} - - component: {fileID: 934010675} - - component: {fileID: 934010674} - m_Layer: 0 - m_Name: ColorView - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &934010674 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 934010673} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ee5302fdf7d10e74fbbbe1a2f7503f46, type: 3} - m_Name: - m_EditorClassIdentifier: - ColorSourceManager: {fileID: 679549941} ---- !u!23 &934010675 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 934010673} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 ---- !u!65 &934010676 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 934010673} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &934010677 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 934010673} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &934010678 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 934010673} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -118, y: 64.30853, z: 150.01746} - m_LocalScale: {x: 96, y: 54, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1022827879 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1022827881} - - component: {fileID: 1022827880} - m_Layer: 0 - m_Name: DepthManager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1022827880 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1022827879} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1cd019cdd7a54604b9ae8091d242d8a4, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1022827881 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1022827879} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 5.873085, y: 0, z: 182.0674} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1464340100 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1464340102} - - component: {fileID: 1464340101} - m_Layer: 0 - m_Name: InfraredManager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1464340101 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1464340100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 63eff7f54e54aa049a2331755f3cb99c, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1464340102 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1464340100} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -17} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1608503454 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1608503459} - - component: {fileID: 1608503458} - - component: {fileID: 1608503457} - - component: {fileID: 1608503456} - - component: {fileID: 1608503455} - m_Layer: 0 - m_Name: InfraredView - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1608503455 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1608503454} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 98f8736f9d8c8e44592c96e57d57c5d4, type: 3} - m_Name: - m_EditorClassIdentifier: - InfraredSourceManager: {fileID: 1464340100} ---- !u!23 &1608503456 -MeshRenderer: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1608503454} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 0 - m_ReflectionProbeUsage: 1 - m_Materials: - - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingOrder: 0 ---- !u!65 &1608503457 -BoxCollider: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1608503454} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!33 &1608503458 -MeshFilter: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1608503454} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1608503459 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1608503454} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -118, y: -6.0306396, z: 150.01746} - m_LocalScale: {x: 96, y: 79.5, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1698423884 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1698423886} - - component: {fileID: 1698423885} - m_Layer: 0 - m_Name: BodyManager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1698423885 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1698423884} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2e74aed0503c9d24290a1ae5438fddc3, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1698423886 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1698423884} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 5.873085, y: 0, z: 182.0674} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1736670513 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1736670515} - - component: {fileID: 1736670514} - m_Layer: 0 - m_Name: MultiFrameManager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1736670514 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1736670513} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f752c4e07617d8d4eb21d4975a2d7c61, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &1736670515 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1736670513} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -208.42621, y: 330.08652, z: 342.24237} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 10 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1747301860 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1747301865} - - component: {fileID: 1747301864} - - component: {fileID: 1747301863} - - component: {fileID: 1747301862} - - component: {fileID: 1747301861} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1747301861 -AudioListener: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1747301860} - m_Enabled: 1 ---- !u!124 &1747301862 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1747301860} - m_Enabled: 1 ---- !u!92 &1747301863 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1747301860} - m_Enabled: 1 ---- !u!20 &1747301864 -Camera: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1747301860} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 400 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 - m_StereoMirrorMode: 0 ---- !u!4 &1747301865 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1747301860} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -17} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 9 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1988608400 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 - m_Component: - - component: {fileID: 1988608401} - m_Layer: 0 - m_Name: DepthBase - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1988608401 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1988608400} - m_LocalRotation: {x: 0.16042967, y: -0.37686968, z: -0.06645215, w: -0.9098438} - m_LocalPosition: {x: 5.873085, y: 0, z: 182.0674} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 257076398} - - {fileID: 252019524} - m_Father: {fileID: 0} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity.meta deleted file mode 100644 index 9c36fe1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/MainScene.unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: acb109c17b75ff0439fee665f622f4b1 -timeCreated: 1488532632 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials.meta deleted file mode 100644 index 0f027be..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 2a9d46c4f184e354abec98addc1cc79d -folderAsset: yes -timeCreated: 1488532632 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat deleted file mode 100644 index 28edc0e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat +++ /dev/null @@ -1,34 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: BoneMaterial - m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 5 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - first: - name: _InvFade - second: 1 - m_Colors: - - first: - name: _Color - second: {r: 1, g: 1, b: 1, a: 1} - - first: - name: _TintColor - second: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat.meta deleted file mode 100644 index d6c130b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Materials/BoneMaterial.mat.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: f2ea145c63353784985576f08398a815 -NativeFormatImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts.meta deleted file mode 100644 index 2419e61..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0940689ded321ad4bb45f6140ead5344 -folderAsset: yes -timeCreated: 1488532632 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs deleted file mode 100644 index 288cf9e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs +++ /dev/null @@ -1,70 +0,0 @@ -using UnityEngine; -using System.Collections; -using Windows.Kinect; - -public class BodySourceManager : MonoBehaviour -{ - private KinectSensor _Sensor; - private BodyFrameReader _Reader; - private Body[] _Data = null; - - public Body[] GetData() - { - return _Data; - } - - - void Start () - { - _Sensor = KinectSensor.GetDefault(); - - if (_Sensor != null) - { - _Reader = _Sensor.BodyFrameSource.OpenReader(); - - if (!_Sensor.IsOpen) - { - _Sensor.Open(); - } - } - } - - void Update () - { - if (_Reader != null) - { - var frame = _Reader.AcquireLatestFrame(); - if (frame != null) - { - if (_Data == null) - { - _Data = new Body[_Sensor.BodyFrameSource.BodyCount]; - } - - frame.GetAndRefreshBodyData(_Data); - - frame.Dispose(); - frame = null; - } - } - } - - void OnApplicationQuit() - { - if (_Reader != null) - { - _Reader.Dispose(); - _Reader = null; - } - - if (_Sensor != null) - { - if (_Sensor.IsOpen) - { - _Sensor.Close(); - } - - _Sensor = null; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs.meta deleted file mode 100644 index 39841de..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceManager.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2e74aed0503c9d24290a1ae5438fddc3 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs deleted file mode 100644 index 698dbdc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs +++ /dev/null @@ -1,185 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using Kinect = Windows.Kinect; - -public class BodySourceView : MonoBehaviour -{ - public Material BoneMaterial; - public GameObject BodySourceManager; - - private Dictionary _Bodies = new Dictionary(); - private BodySourceManager _BodyManager; - - private Dictionary _BoneMap = new Dictionary() - { - { Kinect.JointType.FootLeft, Kinect.JointType.AnkleLeft }, - { Kinect.JointType.AnkleLeft, Kinect.JointType.KneeLeft }, - { Kinect.JointType.KneeLeft, Kinect.JointType.HipLeft }, - { Kinect.JointType.HipLeft, Kinect.JointType.SpineBase }, - - { Kinect.JointType.FootRight, Kinect.JointType.AnkleRight }, - { Kinect.JointType.AnkleRight, Kinect.JointType.KneeRight }, - { Kinect.JointType.KneeRight, Kinect.JointType.HipRight }, - { Kinect.JointType.HipRight, Kinect.JointType.SpineBase }, - - { Kinect.JointType.HandTipLeft, Kinect.JointType.HandLeft }, - { Kinect.JointType.ThumbLeft, Kinect.JointType.HandLeft }, - { Kinect.JointType.HandLeft, Kinect.JointType.WristLeft }, - { Kinect.JointType.WristLeft, Kinect.JointType.ElbowLeft }, - { Kinect.JointType.ElbowLeft, Kinect.JointType.ShoulderLeft }, - { Kinect.JointType.ShoulderLeft, Kinect.JointType.SpineShoulder }, - - { Kinect.JointType.HandTipRight, Kinect.JointType.HandRight }, - { Kinect.JointType.ThumbRight, Kinect.JointType.HandRight }, - { Kinect.JointType.HandRight, Kinect.JointType.WristRight }, - { Kinect.JointType.WristRight, Kinect.JointType.ElbowRight }, - { Kinect.JointType.ElbowRight, Kinect.JointType.ShoulderRight }, - { Kinect.JointType.ShoulderRight, Kinect.JointType.SpineShoulder }, - - { Kinect.JointType.SpineBase, Kinect.JointType.SpineMid }, - { Kinect.JointType.SpineMid, Kinect.JointType.SpineShoulder }, - { Kinect.JointType.SpineShoulder, Kinect.JointType.Neck }, - { Kinect.JointType.Neck, Kinect.JointType.Head }, - }; - - void Update () - { - if (BodySourceManager == null) - { - return; - } - - _BodyManager = BodySourceManager.GetComponent(); - if (_BodyManager == null) - { - return; - } - - Kinect.Body[] data = _BodyManager.GetData(); - if (data == null) - { - return; - } - - List trackedIds = new List(); - foreach(var body in data) - { - if (body == null) - { - continue; - } - - if(body.IsTracked) - { - trackedIds.Add (body.TrackingId); - } - } - - List knownIds = new List(_Bodies.Keys); - - // First delete untracked bodies - foreach(ulong trackingId in knownIds) - { - if(!trackedIds.Contains(trackingId)) - { - Destroy(_Bodies[trackingId]); - _Bodies.Remove(trackingId); - } - } - - foreach(var body in data) - { - if (body == null) - { - continue; - } - - if(body.IsTracked) - { - if(!_Bodies.ContainsKey(body.TrackingId)) - { - _Bodies[body.TrackingId] = CreateBodyObject(body.TrackingId); - } - - RefreshBodyObject(body, _Bodies[body.TrackingId]); - } - } - } - - private GameObject CreateBodyObject(ulong id) - { - GameObject body = new GameObject("Body:" + id); - - for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++) - { - GameObject jointObj = GameObject.CreatePrimitive(PrimitiveType.Cube); - - LineRenderer lr = jointObj.AddComponent(); -#if UNITY_5_6 - lr.positionCount = 2; -#else - lr.positionCount = 2; -#endif - lr.material = BoneMaterial; - lr.startWidth = 0.05f; - lr.endWidth = 0.05f; - - jointObj.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f); - jointObj.name = jt.ToString(); - jointObj.transform.parent = body.transform; - } - - return body; - } - - private void RefreshBodyObject(Kinect.Body body, GameObject bodyObject) - { - for (Kinect.JointType jt = Kinect.JointType.SpineBase; jt <= Kinect.JointType.ThumbRight; jt++) - { - Kinect.Joint sourceJoint = body.Joints[jt]; - Kinect.Joint? targetJoint = null; - - if(_BoneMap.ContainsKey(jt)) - { - targetJoint = body.Joints[_BoneMap[jt]]; - } - - Transform jointObj = bodyObject.transform.Find(jt.ToString()); - jointObj.localPosition = GetVector3FromJoint(sourceJoint); - - LineRenderer lr = jointObj.GetComponent(); - if(targetJoint.HasValue) - { - lr.SetPosition(0, jointObj.localPosition); - lr.SetPosition(1, GetVector3FromJoint(targetJoint.Value)); - lr.startColor = GetColorForState(sourceJoint.TrackingState); - lr.endColor = GetColorForState(targetJoint.Value.TrackingState); - } - else - { - lr.enabled = false; - } - } - } - - private static Color GetColorForState(Kinect.TrackingState state) - { - switch (state) - { - case Kinect.TrackingState.Tracked: - return Color.green; - - case Kinect.TrackingState.Inferred: - return Color.red; - - default: - return Color.black; - } - } - - private static Vector3 GetVector3FromJoint(Kinect.Joint joint) - { - return new Vector3(joint.Position.X * 10, joint.Position.Y * 10, joint.Position.Z * 10); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs.meta deleted file mode 100644 index 2855453..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/BodySourceView.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8821130411451d343a1488e2a9db134e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs deleted file mode 100644 index 30d0b75..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs +++ /dev/null @@ -1,78 +0,0 @@ -using UnityEngine; -using System.Collections; -using Windows.Kinect; - -public class ColorSourceManager : MonoBehaviour -{ - public int ColorWidth { get; private set; } - public int ColorHeight { get; private set; } - - private KinectSensor _Sensor; - private ColorFrameReader _Reader; - private Texture2D _Texture; - private byte[] _Data; - - public Texture2D GetColorTexture() - { - return _Texture; - } - - void Start() - { - _Sensor = KinectSensor.GetDefault(); - - if (_Sensor != null) - { - _Reader = _Sensor.ColorFrameSource.OpenReader(); - - var frameDesc = _Sensor.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Rgba); - ColorWidth = frameDesc.Width; - ColorHeight = frameDesc.Height; - - _Texture = new Texture2D(frameDesc.Width, frameDesc.Height, TextureFormat.RGBA32, false); - _Data = new byte[frameDesc.BytesPerPixel * frameDesc.LengthInPixels]; - - if (!_Sensor.IsOpen) - { - _Sensor.Open(); - } - } - } - - void Update () - { - if (_Reader != null) - { - var frame = _Reader.AcquireLatestFrame(); - - if (frame != null) - { - frame.CopyConvertedFrameDataToArray(_Data, ColorImageFormat.Rgba); - _Texture.LoadRawTextureData(_Data); - _Texture.Apply(); - - frame.Dispose(); - frame = null; - } - } - } - - void OnApplicationQuit() - { - if (_Reader != null) - { - _Reader.Dispose(); - _Reader = null; - } - - if (_Sensor != null) - { - if (_Sensor.IsOpen) - { - _Sensor.Close(); - } - - _Sensor = null; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs.meta deleted file mode 100644 index f16f40f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceManager.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 92ab5bea6110edb4081e490c0982748d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs deleted file mode 100644 index 9c9707d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEngine; -using System.Collections; -using Windows.Kinect; - -public class ColorSourceView : MonoBehaviour -{ - public GameObject ColorSourceManager; - private ColorSourceManager _ColorManager; - - void Start () - { - GetComponent().material.SetTextureScale("_MainTex", new Vector2(-1, 1)); - } - - void Update() - { - if (ColorSourceManager == null) - { - return; - } - - _ColorManager = ColorSourceManager.GetComponent(); - if (_ColorManager == null) - { - return; - } - - GetComponent().material.mainTexture = _ColorManager.GetColorTexture(); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs.meta deleted file mode 100644 index ce51abc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/ColorSourceView.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ee5302fdf7d10e74fbbbe1a2f7503f46 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs deleted file mode 100644 index 5b8500d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs +++ /dev/null @@ -1,59 +0,0 @@ -using UnityEngine; -using System.Collections; -using Windows.Kinect; - -public class DepthSourceManager : MonoBehaviour -{ - private KinectSensor _Sensor; - private DepthFrameReader _Reader; - private ushort[] _Data; - - public ushort[] GetData() - { - return _Data; - } - - void Start () - { - _Sensor = KinectSensor.GetDefault(); - - if (_Sensor != null) - { - _Reader = _Sensor.DepthFrameSource.OpenReader(); - _Data = new ushort[_Sensor.DepthFrameSource.FrameDescription.LengthInPixels]; - } - } - - void Update () - { - if (_Reader != null) - { - var frame = _Reader.AcquireLatestFrame(); - if (frame != null) - { - frame.CopyFrameDataToArray(_Data); - frame.Dispose(); - frame = null; - } - } - } - - void OnApplicationQuit() - { - if (_Reader != null) - { - _Reader.Dispose(); - _Reader = null; - } - - if (_Sensor != null) - { - if (_Sensor.IsOpen) - { - _Sensor.Close(); - } - - _Sensor = null; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs.meta deleted file mode 100644 index 06de839..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceManager.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1cd019cdd7a54604b9ae8091d242d8a4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs deleted file mode 100644 index 2119f02..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs +++ /dev/null @@ -1,252 +0,0 @@ -using UnityEngine; -using System.Collections; -using Windows.Kinect; - -public enum DepthViewMode -{ - SeparateSourceReaders, - MultiSourceReader, -} - -public class DepthSourceView : MonoBehaviour -{ - public DepthViewMode ViewMode = DepthViewMode.SeparateSourceReaders; - - public GameObject ColorSourceManager; - public GameObject DepthSourceManager; - public GameObject MultiSourceManager; - - private KinectSensor _Sensor; - private CoordinateMapper _Mapper; - private Mesh _Mesh; - private Vector3[] _Vertices; - private Vector2[] _UV; - private int[] _Triangles; - - // Only works at 4 right now - private const int _DownsampleSize = 4; - private const double _DepthScale = 0.1f; - private const int _Speed = 50; - - private MultiSourceManager _MultiManager; - private ColorSourceManager _ColorManager; - private DepthSourceManager _DepthManager; - - void Start() - { - _Sensor = KinectSensor.GetDefault(); - if (_Sensor != null) - { - _Mapper = _Sensor.CoordinateMapper; - var frameDesc = _Sensor.DepthFrameSource.FrameDescription; - - // Downsample to lower resolution - CreateMesh(frameDesc.Width / _DownsampleSize, frameDesc.Height / _DownsampleSize); - - if (!_Sensor.IsOpen) - { - _Sensor.Open(); - } - } - } - - void CreateMesh(int width, int height) - { - _Mesh = new Mesh(); - GetComponent().mesh = _Mesh; - - _Vertices = new Vector3[width * height]; - _UV = new Vector2[width * height]; - _Triangles = new int[6 * ((width - 1) * (height - 1))]; - - int triangleIndex = 0; - for (int y = 0; y < height; y++) - { - for (int x = 0; x < width; x++) - { - int index = (y * width) + x; - - _Vertices[index] = new Vector3(x, -y, 0); - _UV[index] = new Vector2(((float)x / (float)width), ((float)y / (float)height)); - - // Skip the last row/col - if (x != (width - 1) && y != (height - 1)) - { - int topLeft = index; - int topRight = topLeft + 1; - int bottomLeft = topLeft + width; - int bottomRight = bottomLeft + 1; - - _Triangles[triangleIndex++] = topLeft; - _Triangles[triangleIndex++] = topRight; - _Triangles[triangleIndex++] = bottomLeft; - _Triangles[triangleIndex++] = bottomLeft; - _Triangles[triangleIndex++] = topRight; - _Triangles[triangleIndex++] = bottomRight; - } - } - } - - _Mesh.vertices = _Vertices; - _Mesh.uv = _UV; - _Mesh.triangles = _Triangles; - _Mesh.RecalculateNormals(); - } - - void OnGUI() - { - GUI.BeginGroup(new Rect(0, 0, Screen.width, Screen.height)); - GUI.TextField(new Rect(Screen.width - 250 , 10, 250, 20), "DepthMode: " + ViewMode.ToString()); - GUI.EndGroup(); - } - - void Update() - { - if (_Sensor == null) - { - return; - } - - if (Input.GetButtonDown("Fire1")) - { - if(ViewMode == DepthViewMode.MultiSourceReader) - { - ViewMode = DepthViewMode.SeparateSourceReaders; - } - else - { - ViewMode = DepthViewMode.MultiSourceReader; - } - } - - float yVal = Input.GetAxis("Horizontal"); - float xVal = -Input.GetAxis("Vertical"); - - transform.Rotate( - (xVal * Time.deltaTime * _Speed), - (yVal * Time.deltaTime * _Speed), - 0, - Space.Self); - - if (ViewMode == DepthViewMode.SeparateSourceReaders) - { - if (ColorSourceManager == null) - { - return; - } - - _ColorManager = ColorSourceManager.GetComponent(); - if (_ColorManager == null) - { - return; - } - - if (DepthSourceManager == null) - { - return; - } - - _DepthManager = DepthSourceManager.GetComponent(); - if (_DepthManager == null) - { - return; - } - - GetComponent().material.mainTexture = _ColorManager.GetColorTexture(); - RefreshData(_DepthManager.GetData(), - _ColorManager.ColorWidth, - _ColorManager.ColorHeight); - } - else - { - if (MultiSourceManager == null) - { - return; - } - - _MultiManager = MultiSourceManager.GetComponent(); - if (_MultiManager == null) - { - return; - } - - GetComponent().material.mainTexture = _MultiManager.GetColorTexture(); - - RefreshData(_MultiManager.GetDepthData(), - _MultiManager.ColorWidth, - _MultiManager.ColorHeight); - } - } - - private void RefreshData(ushort[] depthData, int colorWidth, int colorHeight) - { - var frameDesc = _Sensor.DepthFrameSource.FrameDescription; - - ColorSpacePoint[] colorSpace = new ColorSpacePoint[depthData.Length]; - _Mapper.MapDepthFrameToColorSpace(depthData, colorSpace); - - for (int y = 0; y < frameDesc.Height; y += _DownsampleSize) - { - for (int x = 0; x < frameDesc.Width; x += _DownsampleSize) - { - int indexX = x / _DownsampleSize; - int indexY = y / _DownsampleSize; - int smallIndex = (indexY * (frameDesc.Width / _DownsampleSize)) + indexX; - - double avg = GetAvg(depthData, x, y, frameDesc.Width, frameDesc.Height); - - avg = avg * _DepthScale; - - _Vertices[smallIndex].z = (float)avg; - - // Update UV mapping with CDRP - var colorSpacePoint = colorSpace[(y * frameDesc.Width) + x]; - _UV[smallIndex] = new Vector2(colorSpacePoint.X / colorWidth, colorSpacePoint.Y / colorHeight); - } - } - - _Mesh.vertices = _Vertices; - _Mesh.uv = _UV; - _Mesh.triangles = _Triangles; - _Mesh.RecalculateNormals(); - } - - private double GetAvg(ushort[] depthData, int x, int y, int width, int height) - { - double sum = 0.0; - - for (int y1 = y; y1 < y + 4; y1++) - { - for (int x1 = x; x1 < x + 4; x1++) - { - int fullIndex = (y1 * width) + x1; - - if (depthData[fullIndex] == 0) - sum += 4500; - else - sum += depthData[fullIndex]; - - } - } - - return sum / 16; - } - - void OnApplicationQuit() - { - if (_Mapper != null) - { - _Mapper = null; - } - - if (_Sensor != null) - { - if (_Sensor.IsOpen) - { - _Sensor.Close(); - } - - _Sensor = null; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs.meta deleted file mode 100644 index 09bec26..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DepthSourceView.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 383e102cbe3bfb34d94c98ea3c2479b4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs deleted file mode 100644 index b6b2ab9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UnityEngine; -using System.Collections; - -public class DisableOnStart : MonoBehaviour { - - // Use this for initialization - void Start () - { - gameObject.SetActive (false); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs.meta deleted file mode 100644 index 4dddfaa..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/DisableOnStart.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 61e5c93f5da1e324aa7fd9671db875bc -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs deleted file mode 100644 index bdb6b15..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs +++ /dev/null @@ -1,85 +0,0 @@ -using UnityEngine; -using System.Collections; -using Windows.Kinect; - -public class InfraredSourceManager : MonoBehaviour -{ - private KinectSensor _Sensor; - private InfraredFrameReader _Reader; - private ushort[] _Data; - private byte[] _RawData; - - // I'm not sure this makes sense for the Kinect APIs - // Instead, this logic should be in the VIEW - private Texture2D _Texture; - - public Texture2D GetInfraredTexture() - { - return _Texture; - } - - void Start() - { - _Sensor = KinectSensor.GetDefault(); - if (_Sensor != null) - { - _Reader = _Sensor.InfraredFrameSource.OpenReader(); - var frameDesc = _Sensor.InfraredFrameSource.FrameDescription; - _Data = new ushort[frameDesc.LengthInPixels]; - _RawData = new byte[frameDesc.LengthInPixels * 4]; - _Texture = new Texture2D(frameDesc.Width, frameDesc.Height, TextureFormat.BGRA32, false); - - if (!_Sensor.IsOpen) - { - _Sensor.Open(); - } - } - } - - void Update () - { - if (_Reader != null) - { - var frame = _Reader.AcquireLatestFrame(); - if (frame != null) - { - frame.CopyFrameDataToArray(_Data); - - int index = 0; - foreach(var ir in _Data) - { - byte intensity = (byte)(ir >> 8); - _RawData[index++] = intensity; - _RawData[index++] = intensity; - _RawData[index++] = intensity; - _RawData[index++] = 255; // Alpha - } - - _Texture.LoadRawTextureData(_RawData); - _Texture.Apply(); - - frame.Dispose(); - frame = null; - } - } - } - - void OnApplicationQuit() - { - if (_Reader != null) - { - _Reader.Dispose(); - _Reader = null; - } - - if (_Sensor != null) - { - if (_Sensor.IsOpen) - { - _Sensor.Close(); - } - - _Sensor = null; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs.meta deleted file mode 100644 index be6708d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceManager.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 63eff7f54e54aa049a2331755f3cb99c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs deleted file mode 100644 index a57a465..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs +++ /dev/null @@ -1,29 +0,0 @@ -using UnityEngine; -using System.Collections; - -public class InfraredSourceView : MonoBehaviour -{ - public GameObject InfraredSourceManager; - private InfraredSourceManager _InfraredManager; - - void Start () - { - GetComponent().material.SetTextureScale("_MainTex", new Vector2(-1, 1)); - } - - void Update() - { - if (InfraredSourceManager == null) - { - return; - } - - _InfraredManager = InfraredSourceManager.GetComponent(); - if (_InfraredManager == null) - { - return; - } - - GetComponent().material.mainTexture = _InfraredManager.GetInfraredTexture(); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs.meta deleted file mode 100644 index 5cca658..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/InfraredSourceView.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 98f8736f9d8c8e44592c96e57d57c5d4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs deleted file mode 100644 index 1186278..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs +++ /dev/null @@ -1,100 +0,0 @@ -using UnityEngine; -using System.Collections; -using Windows.Kinect; - -public class MultiSourceManager : MonoBehaviour { - public int ColorWidth { get; private set; } - public int ColorHeight { get; private set; } - - private KinectSensor _Sensor; - private MultiSourceFrameReader _Reader; - private Texture2D _ColorTexture; - private ushort[] _DepthData; - private byte[] _ColorData; - - public Texture2D GetColorTexture() - { - return _ColorTexture; - } - - public ushort[] GetDepthData() - { - return _DepthData; - } - - void Start () - { - _Sensor = KinectSensor.GetDefault(); - - if (_Sensor != null) - { - _Reader = _Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color | FrameSourceTypes.Depth); - - var colorFrameDesc = _Sensor.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Rgba); - ColorWidth = colorFrameDesc.Width; - ColorHeight = colorFrameDesc.Height; - - _ColorTexture = new Texture2D(colorFrameDesc.Width, colorFrameDesc.Height, TextureFormat.RGBA32, false); - _ColorData = new byte[colorFrameDesc.BytesPerPixel * colorFrameDesc.LengthInPixels]; - - var depthFrameDesc = _Sensor.DepthFrameSource.FrameDescription; - _DepthData = new ushort[depthFrameDesc.LengthInPixels]; - - if (!_Sensor.IsOpen) - { - _Sensor.Open(); - } - } - } - - void Update () - { - if (_Reader != null) - { - var frame = _Reader.AcquireLatestFrame(); - if (frame != null) - { - var colorFrame = frame.ColorFrameReference.AcquireFrame(); - if (colorFrame != null) - { - var depthFrame = frame.DepthFrameReference.AcquireFrame(); - if (depthFrame != null) - { - colorFrame.CopyConvertedFrameDataToArray(_ColorData, ColorImageFormat.Rgba); - _ColorTexture.LoadRawTextureData(_ColorData); - _ColorTexture.Apply(); - - depthFrame.CopyFrameDataToArray(_DepthData); - - depthFrame.Dispose(); - depthFrame = null; - } - - colorFrame.Dispose(); - colorFrame = null; - } - - frame = null; - } - } - } - - void OnApplicationQuit() - { - if (_Reader != null) - { - _Reader.Dispose(); - _Reader = null; - } - - if (_Sensor != null) - { - if (_Sensor.IsOpen) - { - _Sensor.Close(); - } - - _Sensor = null; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs.meta deleted file mode 100644 index b9b6707..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/KinectView/Scripts/MultiSourceManager.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f752c4e07617d8d4eb21d4975a2d7c61 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor.meta deleted file mode 100644 index befc50f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ba34085223129f046aa6e576451ff313 -folderAsset: yes -timeCreated: 1482219460 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor.meta deleted file mode 100644 index b3e67e8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 7e01da1325b3d824abf7abbc238b90f0 -folderAsset: yes -timeCreated: 1482219461 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs deleted file mode 100644 index 4f1e60e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs +++ /dev/null @@ -1,309 +0,0 @@ -using UnityEditor; -using UnityEngine; -using System; -using System.Collections; -using uc.Spline; - -[CustomEditor(typeof(BezierSplineComponent))] -public class BezierSplineEditor : Editor -{ - private const float m_point_size = 0.05f; - private BezierSplineComponent m_splinecomp = null; - private BezierSpline m_spline = null; - private BezierSpline.EditHelper m_edithelper; - private int m_drawidx = -1; - - void OnEnable() - { - if(AssetDatabase.Contains(target)) - { - m_splinecomp = null; - m_spline = null; - m_edithelper = null; - } - else - { - m_splinecomp = (BezierSplineComponent)target; - m_spline = m_splinecomp.Spline; - m_edithelper = m_spline.GetEditHelper() as BezierSpline.EditHelper; - } - } - - void OnDisable() - { - ToolsUtil.Hidden = false; - } - - void OnSceneGUI() - { - if (m_splinecomp != null) - { - bool selected = false; - float hsize, hcsize1, hcsize2; - - Undo.RecordObject(m_splinecomp, "BezierSpline Modify"); - - Handles.matrix = m_splinecomp.transform.localToWorldMatrix; - - ToolsUtil.Hidden = m_edithelper.SomethingSelected; - - m_edithelper.Reset(); - while (m_edithelper.MoveNext()) - { - hsize = HandleUtility.GetHandleSize(m_edithelper.Point.m_point); - if (Handles.Button(m_edithelper.Point.m_point, Quaternion.identity, hsize * m_point_size, hsize * m_point_size, DrawPoint)) - { - m_edithelper.Selected = true; - selected = true; - } - if (m_edithelper.Selected) - { - if (m_edithelper.ControlPointsVisible) - { - BezierSplinePoint selectedPoint = m_edithelper.SelectedPoint as BezierSplinePoint; - Handles.color = new Color(1, 1, 0, 1); - Handles.DrawLine(selectedPoint.m_point, selectedPoint.m_point + selectedPoint.m_prevctrl); - Handles.DrawLine(selectedPoint.m_point, selectedPoint.m_point + selectedPoint.m_nextctrl); - Handles.color = new Color(1, 1, 1, 1); - hcsize1 = HandleUtility.GetHandleSize(selectedPoint.m_prevctrl); - m_drawidx = 0; - if (Handles.Button(selectedPoint.m_point + selectedPoint.m_prevctrl, Quaternion.identity, hcsize1 * m_point_size, hcsize1 * m_point_size, DrawControlPoint)) - { - m_edithelper.ControlPoint1Selected = true; - selected = true; - } - hcsize2 = HandleUtility.GetHandleSize(selectedPoint.m_nextctrl); - m_drawidx = 1; - if (Handles.Button(selectedPoint.m_point + selectedPoint.m_nextctrl, Quaternion.identity, hcsize2 * m_point_size, hcsize1 * m_point_size, DrawControlPoint)) - { - m_edithelper.ControlPoint2Selected = true; - selected = true; - } - } - - if (Tools.current == Tool.Move) - { - BezierSplinePoint selectedPoint = m_edithelper.SelectedPoint as BezierSplinePoint; - if (m_edithelper.ControlPoint1Selected) - { - selectedPoint.m_prevctrl = Handles.PositionHandle(m_edithelper.SelectedPoint.m_point + selectedPoint.m_prevctrl, Quaternion.identity) - m_edithelper.SelectedPoint.m_point; - } - else if (m_edithelper.ControlPoint2Selected) - { - if (selectedPoint.m_type == SplinePointType.Bezier) - { - selectedPoint.m_prevctrl = -(Handles.PositionHandle(m_edithelper.SelectedPoint.m_point + selectedPoint.m_nextctrl, Quaternion.identity) - m_edithelper.SelectedPoint.m_point); - } - else - { - selectedPoint.m_nextctrl = Handles.PositionHandle(m_edithelper.SelectedPoint.m_point + selectedPoint.m_nextctrl, Quaternion.identity) - m_edithelper.SelectedPoint.m_point; - } - } - else - { - m_edithelper.SelectedPoint.m_point = Handles.PositionHandle(m_edithelper.SelectedPoint.m_point, Quaternion.identity); - } - } - } - } - - if (GUI.changed) - { - m_spline.Build(); - EditorUtility.SetDirty(m_splinecomp); - Repaint(); - } - if (selected) - { - Repaint(); - SceneView.RepaintAll(); - GUIUtility.keyboardControl = 0; - } - if (Event.current.type == EventType.ValidateCommand) - { - switch (Event.current.commandName) - { - case "UndoRedoPerformed": - m_spline.Build(); - break; - } - } - } - } - - void DrawPoint(int controlID, Vector3 position, Quaternion rotation, float size, EventType eventType) - { - if (eventType != EventType.Layout && eventType != EventType.Repaint) - return; - - if (m_edithelper.Selected && !m_edithelper.ControlPoint1Selected && !m_edithelper.ControlPoint2Selected) - { - Handles.color = new Color(1, 0, 0, 1); - } - else - { - Handles.color = new Color(1, 1, 1, 1); - } - Handles.DotHandleCap(controlID, position, rotation, size, eventType); - Handles.Label(position, m_edithelper.Index.ToString()); - } - - void DrawControlPoint(int controlID, Vector3 position, Quaternion rotation, float size, EventType eventType) - { - if(m_drawidx == 0) - { - if(m_edithelper.ControlPoint1Selected) - { - Handles.color = new Color(1, 0, 0, 1); - } - else - { - Handles.color = new Color(0, 1, 0, 1); - } - Handles.DotHandleCap(controlID, position, rotation, size, eventType); - Handles.Label(position, "-"); - } - else - { - if(m_edithelper.ControlPoint2Selected) - { - Handles.color = new Color(1, 0, 0, 1); - } - else - { - Handles.color = new Color(0, 1, 0, 1); - } - Handles.DotHandleCap(controlID, position, rotation, size, eventType); - Handles.Label(position, "+"); - } - } - - override public void OnInspectorGUI() - { - if(m_splinecomp != null) - { - bool addremove = false, selected = false; - - Undo.RecordObject(m_splinecomp, "BezierSpline Modify"); - - using (new EditorGUILayout.VerticalScope()) - { - m_spline.WrapMode = (SplineWrapMode)EditorGUILayout.EnumPopup("Wrap mode", m_spline.WrapMode); - m_spline.ReparamType = (SplineReparamType)EditorGUILayout.EnumPopup("Reparameterization", m_spline.ReparamType); - if (m_spline.ReparamType != SplineReparamType.None) - { - m_spline.StepCount = EditorGUILayout.IntSlider("Step count", m_spline.StepCount, 1, 64); - } - - EditorGUILayout.HelpBox("Point count: " + m_spline.PointCount.ToString() + "\n" + "Length :" + m_spline.Length.ToString(), MessageType.Info); - } - - using (new EditorGUILayout.HorizontalScope()) - { - using (new EditorGUILayout.VerticalScope()) - { - if (m_spline.PointCount > 0) - { - if (GUILayout.Button("Select first")) - { - m_edithelper.SelectFirst(); - selected = true; - } - if (m_edithelper.SomethingSelected) - { - if (GUILayout.Button("Select next")) - { - m_edithelper.SelectNext(); - selected = true; - } - if (GUILayout.Button("Select previous")) - { - m_edithelper.SelectPrev(); - selected = true; - } - } - } - } - using (new EditorGUILayout.VerticalScope()) - { - if (GUILayout.Button("Append point")) - { - m_edithelper.AppendPoint(); - addremove = true; - } - if (GUILayout.Button("Remove last")) - { - m_edithelper.RemoveLast(); - addremove = true; - } - if (GUILayout.Button("Reverse points")) - { - m_spline.ReversePoints(); - addremove = true; - } - } - } - - EditorGUILayout.Separator(); - - if (m_edithelper.SomethingSelected) - { - EditorGUILayout.TextArea("", GUI.skin.horizontalSlider); - - EditorGUILayout.BeginHorizontal(); - if (GUILayout.Button("Insert before")) - { - m_edithelper.InsertBefore(); - addremove = true; - } - if (GUILayout.Button("Insert after")) - { - m_edithelper.InsertAfter(); - addremove = true; - } - if (GUILayout.Button("Remove")) - { - m_edithelper.Remove(); - addremove = true; - } - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.Separator(); - - BezierSplinePoint selectedPoint = m_edithelper.SelectedPoint as BezierSplinePoint; - - selectedPoint.m_type = (SplinePointType)EditorGUILayout.EnumPopup("Point type", selectedPoint.m_type); - selectedPoint.m_point = EditorGUILayout.Vector3Field("Position", selectedPoint.m_point); - - if(m_edithelper.ControlPointsVisible) - { - selectedPoint.m_prevctrl = EditorGUILayout.Vector3Field("Control -", selectedPoint.m_prevctrl); - selectedPoint.m_nextctrl = EditorGUILayout.Vector3Field("Control +", selectedPoint.m_nextctrl); - } - } - - - - if (GUI.changed || addremove) - { - m_spline.Build(); - EditorUtility.SetDirty(m_splinecomp); - Repaint(); - } - if(selected) - { - Repaint(); - SceneView.RepaintAll(); - GUIUtility.keyboardControl = 0; - } - - } - } - - [MenuItem("GameObject/Create Other/BezierSpline")] - public static void CreateBezierSpline() - { - GameObject go = new GameObject("BezierSpline"); - go.AddComponent(typeof(BezierSplineComponent)); - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs.meta deleted file mode 100644 index 70b0fb9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/BezierSplineEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5fca67f17674c2646bf02d8329f8d0fd -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs deleted file mode 100644 index 11f2fb1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs +++ /dev/null @@ -1,19 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System.Collections; -using System.Reflection; - -public class ToolsUtil -{ - public static bool Hidden - { - get - { - return (bool)typeof(Tools).GetField("s_Hidden", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); - } - set - { - typeof(Tools).GetField("s_Hidden", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, value); - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs.meta deleted file mode 100644 index 87e71e0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/ToolsUtil.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e0175365919a26e4a8bcb3f733756b07 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs deleted file mode 100644 index a8dcb4f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs +++ /dev/null @@ -1,226 +0,0 @@ -using UnityEditor; -using UnityEngine; -using System; -using System.Collections; -using uc.Spline; - -[CustomEditor(typeof(UniSplineComponent))] -public class UniSplineEditor : Editor -{ - private const float m_point_size = 0.05f; - private UniSplineComponent m_splinecomp = null; - private UniSpline m_spline = null; - private UniSpline.EditHelper m_edithelper; - - void OnEnable() - { - if(AssetDatabase.Contains(target)) - { - m_splinecomp = null; - m_spline = null; - m_edithelper = null; - } - else - { - m_splinecomp = (UniSplineComponent)target; - m_spline = m_splinecomp.Spline; - m_edithelper = m_spline.GetEditHelper() as UniSpline.EditHelper; - } - } - - void OnDisable() - { - ToolsUtil.Hidden = false; - } - - void OnSceneGUI() - { - if(m_splinecomp != null) - { - bool selected = false; - float hsize; - - Undo.RecordObject(m_splinecomp, "UniSpline Modify"); - - Handles.matrix = m_splinecomp.transform.localToWorldMatrix; - - ToolsUtil.Hidden = m_edithelper.SomethingSelected; - - m_edithelper.Reset(); - while(m_edithelper.MoveNext()) - { - hsize = HandleUtility.GetHandleSize(m_edithelper.Point.m_point); - if(Handles.Button(m_edithelper.Point.m_point, Quaternion.identity, hsize * m_point_size, hsize * m_point_size, DrawPoint)) - { - m_edithelper.Selected = true; - selected = true; - } - if(m_edithelper.Selected) - { - if(Tools.current == Tool.Move) - { - m_edithelper.Point.m_point = Handles.PositionHandle(m_edithelper.Point.m_point, Quaternion.identity); - } - } - } - - if(GUI.changed) - { - m_spline.Build(); - EditorUtility.SetDirty(m_splinecomp); - Repaint(); - } - if(selected) - { - Repaint(); - SceneView.RepaintAll(); - GUIUtility.keyboardControl = 0; - } - } - } - - void DrawPoint(int controlID, Vector3 position, Quaternion rotation, float size, EventType eventType) - { - if (m_edithelper.Selected) - { - Handles.color = new Color(1, 0, 0, 1); - } - else - { - Handles.color = new Color(1, 1, 1, 1); - } - Handles.DotHandleCap(controlID, position, rotation, size, eventType); - Handles.Label(position, m_edithelper.Index.ToString()); - } - - override public void OnInspectorGUI() - { - if(m_splinecomp != null) - { - bool addremove = false, selected = false; - - Undo.RecordObject(m_splinecomp, "UniSpline Modify"); - - EditorGUILayout.BeginVertical(); - EditorGUILayout.LabelField("Point count", m_spline.PointCount.ToString()); - EditorGUILayout.LabelField("Length", m_spline.Length.ToString()); - m_spline.SplineType = (UniSplineType)EditorGUILayout.EnumPopup("Type", m_spline.SplineType); - m_spline.WrapMode = (SplineWrapMode)EditorGUILayout.EnumPopup("Wrap mode", m_spline.WrapMode); - m_spline.ReparamType = (SplineReparamType)EditorGUILayout.EnumPopup("Reparameterization", m_spline.ReparamType); - if(m_spline.ReparamType != SplineReparamType.None) - { - m_spline.StepCount = EditorGUILayout.IntSlider("Step count", m_spline.StepCount, 1, 64); - } - - switch(m_spline.SplineType) - { - case UniSplineType.CatmullRom: break; - case UniSplineType.Hermite: - m_spline.Tension = EditorGUILayout.FloatField("Tension", m_spline.Tension); - m_spline.Bias = EditorGUILayout.FloatField("Bias", m_spline.Bias); - break; - case UniSplineType.KochanekBartels: - m_spline.Tension = EditorGUILayout.FloatField("Tension", m_spline.Tension); - m_spline.Continuity = EditorGUILayout.FloatField("Continuity", m_spline.Continuity); - m_spline.Bias = EditorGUILayout.FloatField("Bias", m_spline.Bias); - break; - } - - EditorGUILayout.EndVertical(); - - EditorGUILayout.BeginHorizontal(); - if(GUILayout.Button("Append point")) - { - m_edithelper.AppendPoint(); - addremove = true; - } - if(GUILayout.Button("Remove last")) - { - m_edithelper.RemoveLast(); - addremove = true; - } - if(GUILayout.Button("Reverse points")) - { - m_spline.ReversePoints(); - addremove = true; - } - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.BeginHorizontal(); - if(m_spline.GetPointCount() > 0) - { - if(GUILayout.Button("Select first")) - { - m_edithelper.SelectFirst(); - selected = true; - } - if(m_edithelper.SomethingSelected) - { - if(GUILayout.Button("Select next")) - { - m_edithelper.SelectNext(); - selected = true; - } - if(GUILayout.Button("Select previous")) - { - m_edithelper.SelectPrev(); - selected = true; - } - } - } - EditorGUILayout.EndHorizontal(); - - if(m_edithelper.SomethingSelected) - { - m_edithelper.SelectedPoint.m_point = EditorGUILayout.Vector3Field("Position", m_edithelper.SelectedPoint.m_point); - - EditorGUILayout.BeginHorizontal(); - if(GUILayout.Button("Insert before")) - { - m_edithelper.InsertBefore(); - addremove = true; - } - if(GUILayout.Button("Insert after")) - { - m_edithelper.InsertAfter(); - addremove = true; - } - if(GUILayout.Button("Remove")) - { - m_edithelper.Remove(); - addremove = true; - } - EditorGUILayout.EndHorizontal(); - } - - if(GUI.changed || addremove) - { - m_spline.Build(); - EditorUtility.SetDirty(m_splinecomp); - Repaint(); - } - if(selected) - { - Repaint(); - SceneView.RepaintAll(); - GUIUtility.keyboardControl = 0; - } - if (Event.current.type == EventType.ValidateCommand) - { - switch (Event.current.commandName) - { - case "UndoRedoPerformed": - m_spline.Build(); - break; - } - } - } - } - - [MenuItem("GameObject/Create Other/UniSpline")] - public static void CreateUniSpline() - { - GameObject go = new GameObject("UniSpline"); - go.AddComponent(typeof(UniSplineComponent)); - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs.meta deleted file mode 100644 index c5f681d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Editor/UniSplineEditor.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9c688ced67a614a4995d672131b93ad4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts.meta deleted file mode 100644 index d177765..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c15b53b2bd47f6347af0ef456865cf46 -folderAsset: yes -timeCreated: 1482219461 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs deleted file mode 100644 index bd8b1ac..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs +++ /dev/null @@ -1,535 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; -using System; - -namespace uc.Spline -{ - public enum UniSplineType - { - CatmullRom, - Hermite, - KochanekBartels - } - - public enum SplineWrapMode - { - Once, - Repeat, - PingPong, - Loop - } - - public enum SplinePointType - { - Corner, - Smooth, - Bezier, - BezierCorner - }; - - public enum SplineSegmentType - { - Linear, - Curve - }; - - public enum SplineReparamType - { - None, - Simple, - RungeKutta - }; - - [Serializable] - public class BaseSplinePoint - { - public BaseSplinePoint(Vector3 m_point) - { - this.m_point = m_point; - } - public Vector3 m_point; - } - - [Serializable] - public class BaseSplineSegment - { - public Vector3 m_startpos, m_startctrl, m_endctrl, m_endpos; - public float m_startlen, m_endlen, m_length; - public float[] m_params, m_precomps; - internal virtual Vector3 GetPosition(float t) { return Vector3.zero; } - internal virtual Vector3 GetTangent(float t) { return Vector3.zero; } - internal virtual Vector3 GetNormal(float t) { return Vector3.zero; } - } - - public abstract class BaseSpline - { - public class SplineIterator - { - internal SplineIterator(BaseSpline spline, bool reverse, int startidx, int endidx) - { - m_spline = spline; - m_reverse = reverse; - m_startidx = Mathf.Min(startidx, endidx); - m_endidx = Mathf.Max(startidx, endidx); - Reset(); - } - - public void SetTransform(Transform trnsfrm) - { - m_transform = trnsfrm; - } - - public Vector3 GetPosition() - { - if (m_transform != null) - { - return m_transform.TransformPoint(m_spline.GetPosition(m_segidx, m_segpos)); - } - else - { - return m_spline.GetPosition(m_segidx, m_segpos); - } - } - - public Vector3 GetTangent() - { - Quaternion rotation = m_transform != null ? m_transform.localRotation : Quaternion.identity; - float direction = m_reverse ? -1 : 1; - return rotation * (direction * m_spline.GetTangent(m_segidx, m_segpos)); - } - - public Vector3 GetNormal() - { - Quaternion rotation = m_transform != null ? m_transform.localRotation : Quaternion.identity; - return rotation * m_spline.GetNormal(m_segidx, m_segpos); - } - - public bool IsOnceOut() - { - return m_onceout; - } - - public void Reset() - { - if (m_reverse) - { - SetToEnd(); - } - else - { - SetToStart(); - } - m_back = false; - m_onceout = false; - } - - public void SetOffset(float offset) - { - offset = WrapPosition(m_spline.WrapMode, offset, m_spline.Length); - m_segidx = m_spline.FindSegment(offset); - m_segpos = offset - m_spline.GetSegmentStartLength(m_segidx); - } - - public float GetOffset() - { - return m_spline.GetSegmentStartLength(m_segidx) + m_segpos; - } - - public void SetOffsetPercent(float offset) - { - offset = WrapPosition(m_spline.WrapMode, offset, m_spline.Length); - m_segidx = m_spline.FindSegment(offset * m_spline.Length); - m_segpos = offset - m_spline.GetSegmentStartLength(m_segidx); - } - - public float GetOffsetPercent() - { - float result = (m_spline.GetSegmentStartLength(m_segidx) + m_segpos) / m_spline.Length; - if (m_reverse) - result = 1 - result; - return result; - } - - public void Iterate(float length) - { - bool stop = false, back = false; - if (m_reverse) - { - length = -length; - } - if (length < 0) - { - back = !m_back; - length = -length; - } - else - { - back = m_back; - } - if (back) - { - while (m_segpos - length < 0 && !stop) - { - length -= m_segpos; - - if (m_segidx - 1 < m_startidx) - { - switch (m_spline.WrapMode) - { - case SplineWrapMode.Loop: - SetToEnd(); - break; - case SplineWrapMode.Once: - SetToStart(); - stop = true; - m_onceout = true; - break; - case SplineWrapMode.Repeat: - SetToEnd(); - break; - case SplineWrapMode.PingPong: - SetToStart(); - m_back = !m_back; - stop = true; - break; - } - } - else - { - --m_segidx; - m_segpos = m_spline.GetSegmentLength(m_segidx); - } - } - if (!stop) - { - m_segpos -= length; - } - } - else - { - while (m_segpos + length > m_spline.GetSegmentLength(m_segidx) && !stop) - { - length -= m_spline.GetSegmentLength(m_segidx) - m_segpos; - - if (m_segidx + 1 >= m_endidx) - { - switch (m_spline.m_wrapmode) - { - case SplineWrapMode.Loop: - SetToStart(); - break; - case SplineWrapMode.Once: - SetToEnd(); - stop = true; - m_onceout = true; - break; - case SplineWrapMode.Repeat: - SetToStart(); - break; - case SplineWrapMode.PingPong: - SetToEnd(); - m_back = !m_back; - stop = true; - break; - } - } - else - { - ++m_segidx; - m_segpos = 0; - } - } - if (!stop) - { - m_segpos += length; - } - } - } - - private void SetToStart() - { - m_segidx = m_startidx; - m_segpos = 0; - } - - private void SetToEnd() - { - m_segidx = m_endidx - 1; - m_segpos = m_spline.GetSegmentLength(m_segidx); - } - - private Transform m_transform = null; - private BaseSpline m_spline; - private int m_segidx = 0, m_startidx = 0, m_endidx = 0; - private bool m_reverse = false, m_back = false, m_onceout = false; - private float m_segpos = 0; - } - - public abstract class BaseEditHelper - { - protected BaseSpline m_spline; - protected int m_idx = -1, m_selidx = -1; - - internal BaseEditHelper(BaseSpline spline) - { - m_spline = spline; - } - - public virtual bool MoveNext() - { - ++m_idx; - if (m_idx < m_spline.PointCount) - { - return true; - } - return false; - } - - public virtual void Reset() - { - m_idx = -1; - } - - public abstract void AppendPoint(); - public abstract void InsertBefore(); - public abstract void InsertAfter(); - - public abstract void Remove(); - - public virtual void RemoveLast() - { - if (m_spline.PointCount > 0) - { - RemoveLastPoint(); - } - if (m_selidx >= m_spline.PointCount) - { - m_selidx = m_spline.PointCount - 1; - } - } - - public virtual void SelectFirst() - { - m_selidx = (m_spline.PointCount > 0) ? 0 : -1; - } - - public virtual void SelectNext() - { - m_selidx = (m_selidx < m_spline.PointCount - 1) ? m_selidx + 1 : 0; - } - - public virtual void SelectPrev() - { - m_selidx = (m_selidx > 0) ? m_selidx - 1 : m_spline.PointCount - 1; - } - - public virtual int Index - { - get { return m_idx; } - } - - public virtual int SelectedIndex - { - get { return m_selidx; } - } - - public virtual bool Selected - { - get { return m_idx == m_selidx; } - set { if (value) { m_selidx = m_idx; } else { m_selidx = -1; } } - } - - public virtual bool SomethingSelected - { - get { return m_selidx != -1; } - } - - public abstract BaseSplinePoint Point { get; set; } - public abstract BaseSplinePoint SelectedPoint { get; set; } - - public abstract void RemoveLastPoint(); - public abstract void RemoveAllPoints(); - } - - [SerializeField] - protected SplineWrapMode m_wrapmode = SplineWrapMode.Once; - [SerializeField] - protected float m_length = 0; - [SerializeField] - protected int m_stepcount = 8; - [SerializeField] - protected SplineReparamType m_reparam = SplineReparamType.None; - - protected int m_buildnum = 0; - - [SerializeField] - protected float m_precompdiv = 1; - - public int BuildNum { get { return m_buildnum; } } - public abstract int PointCount { get; } - - public float Length { get { return m_length; } } - - public SplineWrapMode WrapMode - { - get { return m_wrapmode; } - set { m_wrapmode = value; } - } - - public int StepCount - { - get { return m_stepcount; } - set { if (value > 1) { m_stepcount = value; } } - } - - public SplineReparamType ReparamType - { - get { return m_reparam; } - set { m_reparam = value; } - } - - public abstract void Build(); - - public abstract int GetPointCount(); - public abstract int GetSegmentCount(); - protected abstract float GetSegmentLength(int segidx); - protected abstract float GetSegmentStartLength(int segidx); - protected abstract float GetSegmentEndLength(int segidx); - protected abstract int FindSegment(float offset); - protected abstract Vector3 GetDrawPosition(int segidx, float segpos); - protected abstract Vector3 GetPosition(int segidx, float segpos); - protected abstract Vector3 GetTangent(int segidx, float segpos); - protected abstract Vector3 GetNormal(int segidx, float segpos); - internal abstract void AppendPoint(BaseSplinePoint p); - internal abstract void InsertPoint(int idx, BaseSplinePoint p); - internal abstract void RemovePoint(int idx); - internal abstract Vector3 GetPointPosition(int idx); - - public SplineIterator GetIterator() - { - return new SplineIterator(this, false, 0, GetSegmentCount()); - } - - public SplineIterator GetReverseIterator() - { - return new SplineIterator(this, true, 0, GetSegmentCount()); - } - - public SplineIterator GetPartialIterator(int startidx, int endidx) - { - return new SplineIterator(this, false, startidx, endidx); - } - - public SplineIterator GetPartialReverseIterator(int startidx, int endidx) - { - return new SplineIterator(this, true, startidx, endidx); - } - - public Vector3[] GenerateDrawPoints(int divs) - { - int segcnt = GetSegmentCount(), ptidx = 0; - Vector3[] dc = new Vector3[segcnt * divs + 1]; - float dt = 1 / (float)divs; - - dc[ptidx] = GetDrawPosition(0, 0); - ++ptidx; - for (int i = 0; i < segcnt; ++i) - { - for (int j = 1; j < divs + 1; ++j) - { - dc[ptidx] = GetDrawPosition(i, (float)j * dt); - ++ptidx; - } - } - - return dc; - } - - public abstract BaseEditHelper GetEditHelper(); - - static public float WrapPosition(SplineWrapMode wrapmode, float pos, float len) - { - switch (wrapmode) - { - case SplineWrapMode.Loop: - case SplineWrapMode.Repeat: - pos = Mathf.Repeat(pos, len); - break; - case SplineWrapMode.PingPong: - pos = Mathf.PingPong(pos, len); - break; - case SplineWrapMode.Once: - pos = Mathf.Clamp(pos, 0, len); - break; - } - return pos; - } - - protected float GetReparamRungeKutta(BaseSplineSegment ss, float u) - { - float t = 0, k1, k2, k3, k4, h = u / (float)m_stepcount, mag; - for (int i = 1; i <= m_stepcount; i++) - { - mag = ss.GetTangent(t).magnitude; - if (mag == 0) - { - k1 = 0; - k2 = 0; - k3 = 0; - k4 = 0; - } - else - { - k1 = h / ss.GetTangent(t).magnitude; - k2 = h / ss.GetTangent(t + k1 * 0.5f).magnitude; - k3 = h / ss.GetTangent(t + k2 * 0.5f).magnitude; - k4 = h / ss.GetTangent(t + k3).magnitude; - } - t += (k1 + 2 * (k2 + k3) + k4) * 0.16666666666666666666666666666667f; - } - return t; - } - - protected float GetReparam(BaseSplineSegment ss, float u) - { - if (u <= 0) - { - return 0; - } - else if (u >= 1) - { - return 1; - } - - switch (m_reparam) - { - case SplineReparamType.RungeKutta: - { - int ridx = (int)(u * (float)m_stepcount); - float uc = (u - ss.m_precomps[ridx]) / m_precompdiv; - return Mathf.Lerp(ss.m_params[ridx], ss.m_params[ridx + 1], uc); - } - - case SplineReparamType.Simple: - { - int ridx = 0; - for (int i = 1; i < m_stepcount + 1; ++i) - { - if (ss.m_precomps[i] > u) - { - ridx = i - 1; - break; - } - } - float uc = (u - ss.m_precomps[ridx]) / (ss.m_precomps[ridx + 1] - ss.m_precomps[ridx]); - return Mathf.Lerp(ss.m_params[ridx], ss.m_params[ridx + 1], uc); - } - - default: - return 0; - } - } - - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs.meta deleted file mode 100644 index 1dc4c7a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BaseSpline.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a59219dcc930dac4abb50c2bd77011bd -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs deleted file mode 100644 index 4d8a175..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs +++ /dev/null @@ -1,552 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace uc.Spline -{ - [Serializable] - public class BezierSplinePoint : BaseSplinePoint - { - public BezierSplinePoint(Vector3 p, Vector3 c1, Vector3 c2, SplinePointType t) - : base(p) - { - m_prevctrl = c1; - m_nextctrl = c2; - m_type = t; - } - public BezierSplinePoint(Vector3 p) - : base(p) - { - m_prevctrl = Vector3.zero; - m_nextctrl = Vector3.zero; - m_type = SplinePointType.Corner; - } - - public Vector3 m_prevctrl, m_nextctrl; - public SplinePointType m_type; - } - - [Serializable] - public class BezierSpline : BaseSpline - { - public class EditHelper : BaseEditHelper - { - protected new BezierSpline m_spline; - internal EditHelper(BezierSpline spline) : base(spline) { - this.m_spline = spline; } - - public override void AppendPoint() - { - Vector3 newPos = Vector3.zero; - if (m_spline.PointCount == 1) - { - newPos = m_spline.GetPointPosition(m_spline.PointCount - 1) + Vector3.right; - } - else if(m_spline.PointCount > 1) - { - newPos = m_spline.GetPointPosition(m_spline.PointCount - 1) * 2 - m_spline.GetPointPosition(m_spline.PointCount - 2); - } - BezierSplinePoint p = new BezierSplinePoint(newPos); - m_spline.AppendPoint(p); - m_selidx = m_spline.PointCount - 1; - } - - public override void InsertBefore() - { - if (m_spline.PointCount == 1) - { - BezierSplinePoint p = new BezierSplinePoint(m_spline.GetPointPosition(m_spline.PointCount - 1) + Vector3.left); - m_spline.InsertPoint(0, p); - } - else - { - int previdx = m_selidx; - m_selidx = (int)Mathf.Repeat(m_selidx - 1, m_spline.PointCount - 1); - BezierSplinePoint p = new BezierSplinePoint((m_spline.GetPointPosition(m_selidx) + m_spline.GetPointPosition(previdx)) * 0.5f); - m_spline.InsertPoint(previdx, p); - m_selidx = previdx; - } - } - - public override void InsertAfter() - { - if (m_spline.m_points.Count == 1) - { - AppendPoint(); - } - else - { - int previdx = m_selidx; - m_selidx = (int)Mathf.Repeat(m_selidx + 1, m_spline.PointCount - 1); - BezierSplinePoint p = new BezierSplinePoint((m_spline.GetPointPosition(m_selidx) + m_spline.GetPointPosition(previdx)) * 0.5f); - m_spline.InsertPoint(m_selidx, p); - } - } - - public override void Remove() - { - m_spline.RemovePoint(m_selidx); - m_selidx = (int)Mathf.Repeat(m_selidx, m_spline.PointCount - 1); - } - - private int m_selcpidx = -1; - - public override bool Selected - { - get { return base.Selected; } - set { base.Selected = value; m_selcpidx = -1; } - } - - public override BaseSplinePoint Point - { - get { return m_spline.m_points[m_idx]; } - set { m_spline.m_points[m_idx] = value as BezierSplinePoint; } - } - - public override BaseSplinePoint SelectedPoint - { - get { return m_spline.m_points[m_selidx]; } - set { m_spline.m_points[m_selidx] = value as BezierSplinePoint; } - } - - public bool ControlPoint1Selected - { - get { return m_selcpidx == 0; } - set { if (value) { m_selcpidx = 0; } else { m_selcpidx = -1; } } - } - - public bool ControlPoint2Selected - { - get { return m_selcpidx == 1; } - set { if (value) { m_selcpidx = 1; } else { m_selcpidx = -1; } } - } - - public bool ControlPointsVisible - { - get - { - if (m_selidx == -1) return false; - BezierSplinePoint p = m_spline.m_points[m_selidx] as BezierSplinePoint; - return (p.m_type == SplinePointType.Bezier || - p.m_type == SplinePointType.BezierCorner); - } - } - - public override void RemoveLastPoint() - { - m_spline.m_points.RemoveAt(m_spline.PointCount - 1); - } - - public override void RemoveAllPoints() - { - m_spline.m_points.Clear(); - } - } - - [Serializable] - public class BezierSplineSegment : BaseSplineSegment - { - public SplineSegmentType m_type; - internal override Vector3 GetPosition(float t) - { - switch (m_type) - { - case SplineSegmentType.Linear: - return m_startpos + (m_endpos - m_startpos) * t; - case SplineSegmentType.Curve: - return uc.Math.Spline.Bezier.Position(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - default: return Vector3.zero; - } - } - internal override Vector3 GetTangent(float t) - { - switch (m_type) - { - case SplineSegmentType.Linear: - return (m_endpos - m_startpos); - case SplineSegmentType.Curve: - return uc.Math.Spline.Bezier.Tangent(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - default: return Vector3.zero; - } - } - internal override Vector3 GetNormal(float t) - { - switch (m_type) - { - case SplineSegmentType.Linear: - return Vector3.zero; - case SplineSegmentType.Curve: - return uc.Math.Spline.Bezier.Normal(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - default: return Vector3.zero; - } - } - } - - [SerializeField] - private List m_points = new List(); - [SerializeField] - private BezierSplineSegment[] m_segments = null; - public override int PointCount { get { return m_points.Count; } } - - public void ReversePoints() - { - m_points.Reverse(); - Vector3 swp; - for (int i = 0; i < m_points.Count; ++i) - { - BezierSplinePoint p = m_points[i] as BezierSplinePoint; - - swp = p.m_nextctrl; - p.m_nextctrl = p.m_prevctrl; - p.m_prevctrl = swp; - } - } - - public override void Build() - { - int idx, count; - BezierSplinePoint pp, sp, ep, np; - // - if (m_points.Count < 2) - { - m_segments = null; - m_length = 0; - return; - } - if (m_wrapmode == SplineWrapMode.Loop) - { - count = m_points.Count; - } - else - { - count = m_points.Count - 1; - } - // - m_segments = new BezierSplineSegment[count]; - m_length = 0; - idx = 0; - if (m_wrapmode == SplineWrapMode.Loop) - { - while (idx < count) - { - pp = m_points[(int)Mathf.Repeat(idx - 1, m_points.Count)] as BezierSplinePoint; - sp = m_points[(int)Mathf.Repeat(idx, m_points.Count)] as BezierSplinePoint; - ep = m_points[(int)Mathf.Repeat(idx + 1, m_points.Count)] as BezierSplinePoint; - np = m_points[(int)Mathf.Repeat(idx + 2, m_points.Count)] as BezierSplinePoint; - - m_segments[idx] = new BezierSplineSegment(); - BuildSegment(m_segments[idx] as BezierSplineSegment, pp, sp, ep, np); - ++idx; - } - } - else - { - while (idx < count) - { - pp = m_points[Mathf.Clamp(idx - 1, 0, m_points.Count - 1)] as BezierSplinePoint; - sp = m_points[Mathf.Clamp(idx, 0, m_points.Count - 1)] as BezierSplinePoint; - ep = m_points[Mathf.Clamp(idx + 1, 0, m_points.Count - 1)] as BezierSplinePoint; - np = m_points[Mathf.Clamp(idx + 2, 0, m_points.Count - 1)] as BezierSplinePoint; - - m_segments[idx] = new BezierSplineSegment(); - BuildSegment(m_segments[idx] as BezierSplineSegment, pp, sp, ep, np); - ++idx; - } - } - - ++m_buildnum; - } - - private void BuildSegment(BezierSplineSegment ss, BezierSplinePoint pp, BezierSplinePoint sp, BezierSplinePoint ep, BezierSplinePoint np) - { - PreparePoint(pp, sp, ep); - PreparePoint(sp, ep, np); - - ss.m_startpos = sp.m_point; - ss.m_endpos = ep.m_point; - ss.m_startctrl = ss.m_startpos + sp.m_nextctrl; - ss.m_endctrl = ss.m_endpos + ep.m_prevctrl; - - if (sp.m_type == SplinePointType.Corner && ep.m_type == SplinePointType.Corner) - { - ss.m_type = SplineSegmentType.Linear; - } - else - { - ss.m_type = SplineSegmentType.Curve; - } - - ss.m_startlen = m_length; - float seglen = GetLength(ss); - m_length += seglen; - ss.m_length = seglen; - ss.m_endlen = m_length; - - switch (m_reparam) - { - case SplineReparamType.None: - ss.m_params = null; - ss.m_precomps = null; - break; - - case SplineReparamType.Simple: - { - m_precompdiv = 1 / (float)m_stepcount; - float param = 0, length = 0; - - Vector3 prev, next; - - ss.m_params = new float[m_stepcount + 1]; - ss.m_precomps = new float[m_stepcount + 1]; - for (int i = 1; i < m_stepcount + 1; ++i) - { - prev = ss.GetPosition(param); - param += m_precompdiv; - next = ss.GetPosition(param); - length += (next - prev).magnitude; - ss.m_precomps[i] = length / seglen; - ss.m_params[i] = param; - } - ss.m_params[0] = 0; - ss.m_params[m_stepcount] = 1; - ss.m_precomps[0] = 0; - ss.m_precomps[m_stepcount] = 1; - m_precompdiv = 1 / (float)m_stepcount; - } - break; - - case SplineReparamType.RungeKutta: - float dlen = seglen / (float)m_stepcount, lparam = 0; - - ss.m_params = new float[m_stepcount + 1]; - ss.m_precomps = new float[m_stepcount + 1]; - for (int i = 0; i < m_stepcount + 1; ++i) - { - ss.m_params[i] = GetReparamRungeKutta(ss, lparam); - ss.m_precomps[i] = lparam / seglen; - lparam += dlen; - } - ss.m_params[0] = 0; - ss.m_params[m_stepcount] = 1; - ss.m_precomps[0] = 0; - ss.m_precomps[m_stepcount] = 1; - m_precompdiv = 1 / (float)m_stepcount; - break; - } - } - - private void PreparePoint(BezierSplinePoint pp, BezierSplinePoint pt, BezierSplinePoint np) - { - switch (pt.m_type) - { - case SplinePointType.Bezier: - pt.m_nextctrl = -pt.m_prevctrl; - break; - - case SplinePointType.Smooth: - pt.m_prevctrl = -0.25f * (np.m_point - pp.m_point); - pt.m_nextctrl = -0.25f * (pp.m_point - np.m_point); - break; - - case SplinePointType.Corner: - pt.m_prevctrl = Vector3.zero; - pt.m_nextctrl = Vector3.zero; - break; - - case SplinePointType.BezierCorner: - break; - } - } - - private float GetLength(BezierSplineSegment ss) - { - switch (ss.m_type) - { - case SplineSegmentType.Linear: - return (ss.m_endpos - ss.m_startpos).magnitude; - - case SplineSegmentType.Curve: - { - float len = 0; - Vector3 start, end; - float t = 0, dt = 1 / (float)m_stepcount; - int idx = 0; - start = ss.m_startpos; - while (idx < m_stepcount) - { - t += dt; - end = ss.GetPosition(t); - len += (end - start).magnitude; - start = end; - ++idx; - } - return len; - } - - default: return 0; - } - } - - public override int GetPointCount() { return m_points.Count; } - public override int GetSegmentCount() - { - if (m_segments != null) - { - return m_segments.Length; - } - return 0; - } - protected override float GetSegmentLength(int segidx) - { - return m_segments[segidx].m_length; - } - protected override float GetSegmentStartLength(int segidx) - { - return m_segments[segidx].m_startlen; - } - protected override float GetSegmentEndLength(int segidx) - { - return m_segments[segidx].m_endlen; - } - protected override int FindSegment(float offset) - { - for (int i = 0; i < m_segments.Length; ++i) - { - if (m_segments[i].m_startlen <= offset && m_segments[i].m_endlen > offset) - { - return i; - } - } - return m_segments.Length - 1; - } - protected override Vector3 GetDrawPosition(int segidx, float segpos) - { - return m_segments[segidx].GetPosition(segpos); - } - protected override Vector3 GetPosition(int segidx, float segpos) - { - BaseSplineSegment ss = m_segments[segidx]; - if (m_reparam == SplineReparamType.None) - { - return ss.GetPosition(segpos / ss.m_length); - } - else - { - return ss.GetPosition(GetReparam(ss, segpos / ss.m_length)); - } - } - protected override Vector3 GetTangent(int segidx, float segpos) - { - BaseSplineSegment ss = m_segments[segidx]; - if (m_reparam == SplineReparamType.None) - { - return ss.GetTangent(segpos / ss.m_length); - } - else - { - return ss.GetTangent(GetReparam(ss, segpos / ss.m_length)); - } - } - protected override Vector3 GetNormal(int segidx, float segpos) - { - BaseSplineSegment ss = m_segments[segidx]; - if (m_reparam == SplineReparamType.None) - { - return ss.GetNormal(segpos / ss.m_length); - } - else - { - return ss.GetNormal(GetReparam(ss, segpos / ss.m_length)); - } - } - internal override void AppendPoint(BaseSplinePoint p) - { - m_points.Add(p as BezierSplinePoint); - } - internal override void InsertPoint(int idx, BaseSplinePoint p) - { - if (idx < 0 || idx > m_points.Count) - { - throw (new IndexOutOfRangeException()); - } - m_points.Insert(idx, p as BezierSplinePoint); - } - internal override void RemovePoint(int idx) - { - if (idx < 0 || idx > m_points.Count) - { - throw (new IndexOutOfRangeException()); - } - m_points.RemoveAt(idx); - } - internal override Vector3 GetPointPosition(int idx) - { - if (idx < 0 || idx > m_points.Count) - { - throw (new IndexOutOfRangeException()); - } - return m_points[idx].m_point; - } - - public override BaseEditHelper GetEditHelper() - { - return new EditHelper(this); - } - } - - public class BezierSplineComponent : MonoBehaviour - { - [SerializeField] - private BezierSpline m_spline = new BezierSpline(); - - private int m_buildnum = -1; - private Vector3[] m_drawcache; - - public BezierSpline Spline - { - get { return m_spline; } - } - - void OnDrawGizmosSelected() - { - DrawGizmos(Color.red); - } - - void OnDrawGizmos() - { - DrawGizmos(Color.white); - } - - void DrawGizmos(Color color) - { - int curbuild = m_spline.BuildNum; - if (m_spline.GetSegmentCount() > 0) - { - if (m_buildnum != curbuild) - { - m_drawcache = m_spline.GenerateDrawPoints(16); - m_buildnum = curbuild; - } - - if (m_drawcache != null) - { - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.color = color; - - Vector3 startpos = Vector3.zero, endpos = Vector3.zero; - - for (int i = 0; i < m_drawcache.Length; ++i) - { - endpos = m_drawcache[i]; - if (i != 0) - { - Gizmos.DrawLine(startpos, endpos); - } - startpos = endpos; - } - } - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs.meta deleted file mode 100644 index b47c1af..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineComponent.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 21feb0ecbabf1854fa8aa9617d963310 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs deleted file mode 100644 index 7f0524f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs +++ /dev/null @@ -1,28 +0,0 @@ -using UnityEngine; -using System.Collections; -using uc.Spline; - -public class BezierSplinePartialTest : MonoBehaviour -{ - public BezierSplineComponent m_spline; - public float m_speed = 1; - public Vector3 m_up = Vector3.up; - private BaseSpline.SplineIterator m_iter; - - void Awake() - { - //m_iter = m_spline.Spline.GetPartialReverseIterator(0, 1); - m_iter = m_spline.Spline.GetPartialIterator(0, 1); - m_iter.SetTransform(m_spline.transform); - } - - void Update() - { - m_iter.Iterate(m_speed * Time.deltaTime); - - Vector3 prevpos = transform.position; - - transform.position = m_iter.GetPosition(); - transform.rotation = Quaternion.LookRotation(m_iter.GetTangent(), m_up); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs.meta deleted file mode 100644 index d52bfc2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplinePartialTest.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 27e23ea2e28e74a4dae60e8f39da542e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs deleted file mode 100644 index a870c9a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; -using System.Collections; -using uc.Spline; - -public class BezierSplineTest : MonoBehaviour -{ - public BezierSplineComponent m_spline; - public float m_speed = 1, m_curspeed = 0 ,m_position = 0; - public Vector3 m_up = Vector3.up; - private BaseSpline.SplineIterator m_iter; - - void Awake() - { - m_iter = m_spline.Spline.GetIterator(); - m_iter.SetTransform(m_spline.transform); - } - - void Update() - { - m_iter.Iterate(m_speed * Time.deltaTime); - - Vector3 prevpos = transform.position; - - transform.position = m_iter.GetPosition(); - - m_curspeed = (transform.position - prevpos).magnitude / Time.deltaTime; - if(m_iter.GetOffset()>=m_spline.Spline.Length-0.2f) - { - SendMessage("reset_role"); - m_iter.SetOffset(0); - } - - Debug.DrawLine(transform.position, transform.position + m_iter.GetTangent().normalized, Color.red); - Debug.DrawLine(transform.position, transform.position + m_iter.GetNormal().normalized, Color.green); - Debug.DrawLine(transform.position, transform.position + Vector3.Cross(m_iter.GetTangent().normalized, m_iter.GetNormal().normalized).normalized, Color.blue); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs.meta deleted file mode 100644 index d1eea67..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/BezierSplineTest.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b911a7bc467d9254aa763f7d71a99ff9 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs deleted file mode 100644 index 531e796..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs +++ /dev/null @@ -1,1175 +0,0 @@ -using UnityEngine; -using System.Collections; - -public static class Ease -{ - [System.Serializable] - public enum Easing - { - Linear, - - InQuad, - OutQuad, - InOutQuad, - OutInQuad, - - InCubic, - OutCubic, - InOutCubic, - OutInCubic, - - InQuart, - OutQuart, - InOutQuart, - OutInQuart, - - InQuint, - OutQuint, - InOutQuint, - OutInQuint, - - InSin, - OutSin, - InOutSin, - OutInSin, - - InExp, - OutExp, - InOutExp, - OutInExp, - - InCirc, - OutCirc, - InOutCirc, - OutInCirc, - - InElastic, - OutElastic, - InOutElastic, - OutInElastic, - - InBounce, - OutBounce, - InOutBounce, - OutInBounce, - - InBack, - OutBack, - InOutBack, - OutInBack - } - - public static float EaseByType(Easing e, float start, float end, float t) - { - switch(e) - { - case Easing.Linear: return Linear(start, end, t); - - case Easing.InQuad: return InQuad(start, end, t); - case Easing.OutQuad: return OutQuad(start, end, t); - case Easing.InOutQuad: return InOutQuad(start, end, t); - case Easing.OutInQuad: return OutInQuad(start, end, t); - - case Easing.InCubic: return InCubic(start, end, t); - case Easing.OutCubic: return OutCubic(start, end, t); - case Easing.InOutCubic: return InOutCubic(start, end, t); - case Easing.OutInCubic: return OutInCubic(start, end, t); - - case Easing.InQuart: return InQuart(start, end, t); - case Easing.OutQuart: return OutQuart(start, end, t); - case Easing.InOutQuart: return InOutQuart(start, end, t); - case Easing.OutInQuart: return OutInQuart(start, end, t); - - case Easing.InQuint: return InQuint(start, end, t); - case Easing.OutQuint: return OutQuint(start, end, t); - case Easing.InOutQuint: return InOutQuint(start, end, t); - case Easing.OutInQuint: return OutInQuint(start, end, t); - - case Easing.InSin: return InSin(start, end, t); - case Easing.OutSin: return OutSin(start, end, t); - case Easing.InOutSin: return InOutSin(start, end, t); - case Easing.OutInSin: return OutInSin(start, end, t); - - case Easing.InExp: return InExp(start, end, t); - case Easing.OutExp: return OutExp(start, end, t); - case Easing.InOutExp: return InOutExp(start, end, t); - case Easing.OutInExp: return OutInExp(start, end, t); - - case Easing.InCirc: return InCirc(start, end, t); - case Easing.OutCirc: return OutCirc(start, end, t); - case Easing.InOutCirc: return InOutCirc(start, end, t); - case Easing.OutInCirc: return OutInCirc(start, end, t); - - case Easing.InElastic: return InElastic(start, end, t); - case Easing.OutElastic: return OutElastic(start, end, t); - case Easing.InOutElastic: return InOutElastic(start, end, t); - case Easing.OutInElastic: return OutInElastic(start, end, t); - - case Easing.InBounce: return InBounce(start, end, t); - case Easing.OutBounce: return OutBounce(start, end, t); - case Easing.InOutBounce: return InOutBounce(start, end, t); - case Easing.OutInBounce: return OutInBounce(start, end, t); - - case Easing.InBack: return InBack(start, end, t); - case Easing.OutBack: return OutBack(start, end, t); - case Easing.InOutBack: return InOutBack(start, end, t); - case Easing.OutInBack: return OutInBack(start, end, t); - - default: return 0; - } - } - - public static float Linear(float start, float end, float t) - { - return t * (end - start) + start; - } - - public static float InQuad(float start, float end, float t) - { - return t * t * (end - start) + start; - } - - public static float OutQuad(float start, float end, float t) - { - return - (t * (t - 2)) * (end - start) + start; - } - - public static float InOutQuad(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * t * t * (end - start) + start; - } - else - { - --t; - return -0.5f * (t * (t - 2) - 1) * (end - start) + start; - } - } - - public static float OutInQuad(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return (-0.5f * (t * (t - 2) - 1) - 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t + 0.5f) * (end - start) + start; - } - } - - public static float InCubic(float start, float end, float t) - { - return t * t * t * (end - start) + start; - } - - public static float OutCubic(float start, float end, float t) - { - --t; - return (t * t * t + 1) * (end - start) + start; - } - - public static float InOutCubic(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * t * t * t * (end - start) + start; - } - else - { - t-= 2; - return 0.5f * (t * t * t + 2) * (end - start) + start; - } - } - - public static float OutInCubic(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f * (t * t * t + 2) - 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * t + 0.5f) * (end - start) + start; - } - } - - public static float InQuart(float start, float end, float t) - { - return t * t * t * t * (end - start) + start; - } - - public static float OutQuart(float start, float end, float t) - { - --t; - return -(t * t * t * t - 1) * (end - start) + start; - } - - public static float InOutQuart(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * t * t * t * t * (end - start) + start; - } - else - { - t -= 2; - return -0.5f * (t * t * t * t - 2) * (end - start) + start; - } - } - - public static float OutInQuart(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (-0.5f * t * t * t * t + 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * t * t + 0.5f) * (end - start) + start; - } - } - - public static float InQuint(float start, float end, float t) - { - return t * t * t * t * t * (end - start) + start; - } - - public static float OutQuint(float start, float end, float t) - { - --t; - return (t * t * t * t * t + 1) * (end - start) + start; - } - - public static float InOutQuint(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return (0.5f * t * t * t * t * t) * (end - start) + start; - } - else - { - t -= 2; - return (0.5f * t * t * t * t * t + 1) * (end - start) + start; - } - } - - public static float OutInQuint(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f * (t * t * t * t * t) + 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * t * t * t + 0.5f) * (end - start) + start; - } - } - - public static float InSin(float start, float end, float t) - { - return -Mathf.Cos(t * Mathf.PI * 0.5f) * (end - start) + end; - } - - public static float OutSin(float start, float end, float t) - { - return Mathf.Sin(t * Mathf.PI * 0.5f) * (end - start) + start; - } - - public static float InOutSin(float start, float end, float t) - { - return (-0.5f * Mathf.Cos(t * Mathf.PI) + 0.5f) * (end - start) + start; - } - - public static float OutInSin(float start, float end, float t) - { - return (t - (-0.5f * Mathf.Cos(t * Mathf.PI) + 0.5f - t)) * (end - start) + start; - } - - public static float InExp(float start, float end, float t) - { - return Mathf.Pow(2, 10 * (t - 1)) * (end - start) + start; - } - - public static float OutExp(float start, float end, float t) - { - return (1 - Mathf.Pow(2, -10 * t)) * (end - start) + start; - } - - public static float InOutExp(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * Mathf.Pow(2, 10 * (t - 1)) * (end - start) + start; - } - else - { - --t; - return 0.5f * (2 - Mathf.Pow(2, -10 * t)) * (end - start) + start; - } - } - - public static float OutInExp(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return (0.5f * (2 - Mathf.Pow(2, -10 * t)) - 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * Mathf.Pow(2, 10 * (t - 1)) + 0.5f) * (end - start) + start; - } - } - - public static float InCirc(float start, float end, float t) - { - return -(Mathf.Sqrt(1 - t * t) - 1) * (end - start) + start; - } - - public static float OutCirc(float start, float end, float t) - { - --t; - return Mathf.Sqrt(1 - t * t) * (end - start) + start; - } - - public static float InOutCirc(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return (-0.5f * (Mathf.Sqrt(1 - t * t) - 1)) * (end - start) + start; - } - else - { - t -= 2; - return (0.5f * (Mathf.Sqrt(1 - t * t) + 1)) * (end - start) + start; - } - } - - public static float OutInCirc(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f * Mathf.Sqrt(1 - t * t)) * (end - start) + start; - } - else - { - --t; - return (-0.5f * Mathf.Sqrt(1 - t * t) + 1) * (end - start) + start; - } - } - - public static float InElastic(float start, float end, float t) - { - float p = 0.3f, s = 0.075f; - --t; - return (-Mathf.Pow(2, 10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + start; - } - - public static float OutElastic(float start, float end, float t) - { - float p = 0.3f, s = 0.075f; - return (Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + end; - } - - public static float InOutElastic(float start, float end, float t) - { - float p = 0.3f, s = 0.075f; - t *= 2; - if(t < 1) - { - --t; - return (-0.5f * Mathf.Pow(2, 10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + start; - } - else - { - --t; - return (0.5f * Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + end; - } - } - - public static float OutInElastic(float start, float end, float t) - { - float p = 0.3f, s = 0.075f; - t *= 2; - if(t < 1) - { - return (0.5f * Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p) - 0.5f) * (end - start) + end; - } - else - { - t -= 2; - return (-0.5f *Mathf.Pow(2, 10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p) + 0.5f) * (end - start) + start; - } - } - - public static float InBounce(float start, float end, float t) - { - - t = 1 - t; - if(t < 1 / 2.75f) - { - return (-7.5625f * t * t + 1) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (-7.5625f * t * t - 0.75f + 1) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (-7.5625f * t * t - 0.9375f + 1) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (-7.5625f * t * t - 0.984375f + 1) * (end - start) + start; - } - } - - public static float OutBounce(float start, float end, float t) - { - - if(t < 1 / 2.75f) - { - return (7.5625f * t * t) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (7.5625f * t * t + 0.75f) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (7.5625f * t * t + 0.9375f) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (7.5625f * t * t + 0.984375f) * (end - start) + start; - } - } - - public static float InOutBounce(float start, float end, float t) - { - - t *= 2; - if(t < 1) - { - t = 1 - t; - if(t < 1 / 2.75f) - { - return (-0.5f * 7.5625f * t * t + 0.5f) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.75f) + 0.5f) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.9375f) + 0.5f) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.984375f) + 0.5f) * (end - start) + start; - } - } - else - { - --t; - if(t < 1 / 2.75f) - { - return (0.5f * 7.5625f * t * t + 0.5f) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.75f) + 0.5f) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.9375f) + 0.5f) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.984375f) + 0.5f) * (end - start) + start; - } - } - } - - public static float OutInBounce(float start, float end, float t) - { - - t *= 2; - if(t < 1) - { - if(t < 1 / 2.75f) - { - return (0.5f * 7.5625f * t * t ) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.75f)) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.9375f)) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.984375f)) * (end - start) + start; - } - } - else - { - t = 2 - t; - if(t < 1 / 2.75f) - { - return (-0.5f * 7.5625f * t * t + 1) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.75f) + 1) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.9375f) + 1) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.984375f) + 1) * (end - start) + start; - } - } - } - - public static float InBack(float start, float end, float t) - { - return t * t * (2.70158f * t - 1.70158f) * (end - start) + start; - } - - public static float OutBack(float start, float end, float t) - { - --t; - return (1 - t * t * (-2.70158f * t - 1.70158f)) * (end - start) + start; - } - - public static float InOutBack(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - return (0.5f * t * t * (2.70158f * t - 1.70158f)) * (end - start) + start; - } - else - { - t -= 2; - return (1 - 0.5f * t * t * (-2.70158f * t - 1.70158f)) * (end - start) + start; - } - } - - public static float OutInBack(float start, float end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f -0.5f * t * t * (-2.70158f * t - 1.70158f)) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * (2.70158f * t - 1.70158f) + 0.5f) * (end - start) + start; - } - } - - public static Vector3 EaseByType(Easing e, Vector3 start, Vector3 end, float t) - { - switch(e) - { - case Easing.Linear: return Linear(start, end, t); - - case Easing.InQuad: return InQuad(start, end, t); - case Easing.OutQuad: return OutQuad(start, end, t); - case Easing.InOutQuad: return InOutQuad(start, end, t); - case Easing.OutInQuad: return OutInQuad(start, end, t); - - case Easing.InCubic: return InCubic(start, end, t); - case Easing.OutCubic: return OutCubic(start, end, t); - case Easing.InOutCubic: return InOutCubic(start, end, t); - case Easing.OutInCubic: return OutInCubic(start, end, t); - - case Easing.InQuart: return InQuart(start, end, t); - case Easing.OutQuart: return OutQuart(start, end, t); - case Easing.InOutQuart: return InOutQuart(start, end, t); - case Easing.OutInQuart: return OutInQuart(start, end, t); - - case Easing.InQuint: return InQuint(start, end, t); - case Easing.OutQuint: return OutQuint(start, end, t); - case Easing.InOutQuint: return InOutQuint(start, end, t); - case Easing.OutInQuint: return OutInQuint(start, end, t); - - case Easing.InSin: return InSin(start, end, t); - case Easing.OutSin: return OutSin(start, end, t); - case Easing.InOutSin: return InOutSin(start, end, t); - case Easing.OutInSin: return OutInSin(start, end, t); - - case Easing.InExp: return InExp(start, end, t); - case Easing.OutExp: return OutExp(start, end, t); - case Easing.InOutExp: return InOutExp(start, end, t); - case Easing.OutInExp: return OutInExp(start, end, t); - - case Easing.InCirc: return InCirc(start, end, t); - case Easing.OutCirc: return OutCirc(start, end, t); - case Easing.InOutCirc: return InOutCirc(start, end, t); - case Easing.OutInCirc: return OutInCirc(start, end, t); - - case Easing.InElastic: return InElastic(start, end, t); - case Easing.OutElastic: return OutElastic(start, end, t); - case Easing.InOutElastic: return InOutElastic(start, end, t); - case Easing.OutInElastic: return OutInElastic(start, end, t); - - case Easing.InBounce: return InBounce(start, end, t); - case Easing.OutBounce: return OutBounce(start, end, t); - case Easing.InOutBounce: return InOutBounce(start, end, t); - case Easing.OutInBounce: return OutInBounce(start, end, t); - - case Easing.InBack: return InBack(start, end, t); - case Easing.OutBack: return OutBack(start, end, t); - case Easing.InOutBack: return InOutBack(start, end, t); - case Easing.OutInBack: return OutInBack(start, end, t); - - default: return Vector3.zero; - } - } - - public static Vector3 Linear(Vector3 start, Vector3 end, float t) - { - return t * (end - start) + start; - } - - public static Vector3 InQuad(Vector3 start, Vector3 end, float t) - { - return t * t * (end - start) + start; - } - - public static Vector3 OutQuad(Vector3 start, Vector3 end, float t) - { - return - (t * (t - 2)) * (end - start) + start; - } - - public static Vector3 InOutQuad(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * t * t * (end - start) + start; - } - else - { - --t; - return -0.5f * (t * (t - 2) - 1) * (end - start) + start; - } - } - - public static Vector3 OutInQuad(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return (-0.5f * (t * (t - 2) - 1) - 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t + 0.5f) * (end - start) + start; - } - } - - public static Vector3 InCubic(Vector3 start, Vector3 end, float t) - { - return t * t * t * (end - start) + start; - } - - public static Vector3 OutCubic(Vector3 start, Vector3 end, float t) - { - --t; - return (t * t * t + 1) * (end - start) + start; - } - - public static Vector3 InOutCubic(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * t * t * t * (end - start) + start; - } - else - { - t-= 2; - return 0.5f * (t * t * t + 2) * (end - start) + start; - } - } - - public static Vector3 OutInCubic(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f * (t * t * t + 2) - 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * t + 0.5f) * (end - start) + start; - } - } - - public static Vector3 InQuart(Vector3 start, Vector3 end, float t) - { - return t * t * t * t * (end - start) + start; - } - - public static Vector3 OutQuart(Vector3 start, Vector3 end, float t) - { - --t; - return -(t * t * t * t - 1) * (end - start) + start; - } - - public static Vector3 InOutQuart(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * t * t * t * t * (end - start) + start; - } - else - { - t -= 2; - return -0.5f * (t * t * t * t - 2) * (end - start) + start; - } - } - - public static Vector3 OutInQuart(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (-0.5f * t * t * t * t + 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * t * t + 0.5f) * (end - start) + start; - } - } - - public static Vector3 InQuint(Vector3 start, Vector3 end, float t) - { - return t * t * t * t * t * (end - start) + start; - } - - public static Vector3 OutQuint(Vector3 start, Vector3 end, float t) - { - --t; - return (t * t * t * t * t + 1) * (end - start) + start; - } - - public static Vector3 InOutQuint(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return (0.5f * t * t * t * t * t) * (end - start) + start; - } - else - { - t -= 2; - return (0.5f * t * t * t * t * t + 1) * (end - start) + start; - } - } - - public static Vector3 OutInQuint(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f * (t * t * t * t * t) + 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * t * t * t + 0.5f) * (end - start) + start; - } - } - - public static Vector3 InSin(Vector3 start, Vector3 end, float t) - { - return -Mathf.Cos(t * Mathf.PI * 0.5f) * (end - start) + end; - } - - public static Vector3 OutSin(Vector3 start, Vector3 end, float t) - { - return Mathf.Sin(t * Mathf.PI * 0.5f) * (end - start) + start; - } - - public static Vector3 InOutSin(Vector3 start, Vector3 end, float t) - { - return (-0.5f * Mathf.Cos(t * Mathf.PI) + 0.5f) * (end - start) + start; - } - - public static Vector3 OutInSin(Vector3 start, Vector3 end, float t) - { - return (t - (-0.5f * Mathf.Cos(t * Mathf.PI) + 0.5f - t)) * (end - start) + start; - } - - public static Vector3 InExp(Vector3 start, Vector3 end, float t) - { - return Mathf.Pow(2, 10 * (t - 1)) * (end - start) + start; - } - - public static Vector3 OutExp(Vector3 start, Vector3 end, float t) - { - return (1 - Mathf.Pow(2, -10 * t)) * (end - start) + start; - } - - public static Vector3 InOutExp(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return 0.5f * Mathf.Pow(2, 10 * (t - 1)) * (end - start) + start; - } - else - { - --t; - return 0.5f * (2 - Mathf.Pow(2, -10 * t)) * (end - start) + start; - } - } - - public static Vector3 OutInExp(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return (0.5f * (2 - Mathf.Pow(2, -10 * t)) - 0.5f) * (end - start) + start; - } - else - { - --t; - return (0.5f * Mathf.Pow(2, 10 * (t - 1)) + 0.5f) * (end - start) + start; - } - } - - public static Vector3 InCirc(Vector3 start, Vector3 end, float t) - { - return -(Mathf.Sqrt(1 - t * t) - 1) * (end - start) + start; - } - - public static Vector3 OutCirc(Vector3 start, Vector3 end, float t) - { - --t; - return Mathf.Sqrt(1 - t * t) * (end - start) + start; - } - - public static Vector3 InOutCirc(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return (-0.5f * (Mathf.Sqrt(1 - t * t) - 1)) * (end - start) + start; - } - else - { - t -= 2; - return (0.5f * (Mathf.Sqrt(1 - t * t) + 1)) * (end - start) + start; - } - } - - public static Vector3 OutInCirc(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f * Mathf.Sqrt(1 - t * t)) * (end - start) + start; - } - else - { - --t; - return (-0.5f * Mathf.Sqrt(1 - t * t) + 1) * (end - start) + start; - } - } - - public static Vector3 InElastic(Vector3 start, Vector3 end, float t) - { - float p = 0.3f, s = 0.075f; - --t; - return (-Mathf.Pow(2, 10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + start; - } - - public static Vector3 OutElastic(Vector3 start, Vector3 end, float t) - { - float p = 0.3f, s = 0.075f; - return (Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + end; - } - - public static Vector3 InOutElastic(Vector3 start, Vector3 end, float t) - { - float p = 0.3f, s = 0.075f; - t *= 2; - if(t < 1) - { - --t; - return (-0.5f * Mathf.Pow(2, 10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + start; - } - else - { - --t; - return (0.5f * Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p)) * (end - start) + end; - } - } - - public static Vector3 OutInElastic(Vector3 start, Vector3 end, float t) - { - float p = 0.3f, s = 0.075f; - t *= 2; - if(t < 1) - { - return (0.5f * Mathf.Pow(2, -10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p) - 0.5f) * (end - start) + end; - } - else - { - t -= 2; - return (-0.5f *Mathf.Pow(2, 10 * t) * Mathf.Sin((t - s) * (2 * Mathf.PI) / p) + 0.5f) * (end - start) + start; - } - } - - public static Vector3 InBounce(Vector3 start, Vector3 end, float t) - { - - t = 1 - t; - if(t < 1 / 2.75f) - { - return (-7.5625f * t * t + 1) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (-7.5625f * t * t - 0.75f + 1) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (-7.5625f * t * t - 0.9375f + 1) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (-7.5625f * t * t - 0.984375f + 1) * (end - start) + start; - } - } - - public static Vector3 OutBounce(Vector3 start, Vector3 end, float t) - { - - if(t < 1 / 2.75f) - { - return (7.5625f * t * t) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (7.5625f * t * t + 0.75f) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (7.5625f * t * t + 0.9375f) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (7.5625f * t * t + 0.984375f) * (end - start) + start; - } - } - - public static Vector3 InOutBounce(Vector3 start, Vector3 end, float t) - { - - t *= 2; - if(t < 1) - { - t = 1 - t; - if(t < 1 / 2.75f) - { - return (-0.5f * 7.5625f * t * t + 0.5f) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.75f) + 0.5f) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.9375f) + 0.5f) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.984375f) + 0.5f) * (end - start) + start; - } - } - else - { - --t; - if(t < 1 / 2.75f) - { - return (0.5f * 7.5625f * t * t + 0.5f) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.75f) + 0.5f) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.9375f) + 0.5f) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.984375f) + 0.5f) * (end - start) + start; - } - } - } - - public static Vector3 OutInBounce(Vector3 start, Vector3 end, float t) - { - - t *= 2; - if(t < 1) - { - if(t < 1 / 2.75f) - { - return (0.5f * 7.5625f * t * t ) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.75f)) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.9375f)) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (0.5f * (7.5625f * t * t + 0.984375f)) * (end - start) + start; - } - } - else - { - t = 2 - t; - if(t < 1 / 2.75f) - { - return (-0.5f * 7.5625f * t * t + 1) * (end - start) + start; - } - else if(t < 2.0f / 2.75f) - { - t -= 1.5f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.75f) + 1) * (end - start) + start; - } - else if (t < 2.5f / 2.75f) - { - t -= 2.25f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.9375f) + 1) * (end - start) + start; - } - else - { - t -= 2.625f / 2.75f; - return (-0.5f * (7.5625f * t * t + 0.984375f) + 1) * (end - start) + start; - } - } - } - - public static Vector3 InBack(Vector3 start, Vector3 end, float t) - { - return t * t * (2.70158f * t - 1.70158f) * (end - start) + start; - } - - public static Vector3 OutBack(Vector3 start, Vector3 end, float t) - { - --t; - return (1 - t * t * (-2.70158f * t - 1.70158f)) * (end - start) + start; - } - - public static Vector3 InOutBack(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - return (0.5f * t * t * (2.70158f * t - 1.70158f)) * (end - start) + start; - } - else - { - t -= 2; - return (1 - 0.5f * t * t * (-2.70158f * t - 1.70158f)) * (end - start) + start; - } - } - - public static Vector3 OutInBack(Vector3 start, Vector3 end, float t) - { - t *= 2; - if(t < 1) - { - --t; - return (0.5f -0.5f * t * t * (-2.70158f * t - 1.70158f)) * (end - start) + start; - } - else - { - --t; - return (0.5f * t * t * (2.70158f * t - 1.70158f) + 0.5f) * (end - start) + start; - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs.meta deleted file mode 100644 index d430894..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/Ease.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1fe61ea27a023d24fb096f1049432aa8 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs deleted file mode 100644 index 20b5ee0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs +++ /dev/null @@ -1,503 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; -namespace uc.Spline -{ - [Serializable] - public class UniSpline : BaseSpline - { - public class EditHelper : BaseEditHelper - { - protected new UniSpline m_spline; - internal EditHelper(UniSpline spline) : base(spline) { this.m_spline = spline; } - - public override void AppendPoint() - { - Vector3 newPos = Vector3.zero; - if (m_spline.PointCount == 1) - { - newPos = m_spline.GetPointPosition(m_spline.m_points.Count - 1)+ Vector3.right; - } - else if (m_spline.PointCount > 1) - { - newPos = m_spline.GetPointPosition(m_spline.m_points.Count - 1) * 2 - m_spline.GetPointPosition(m_spline.m_points.Count - 2); - } - BaseSplinePoint p = new BaseSplinePoint(newPos); - m_spline.AppendPoint(p); - m_selidx = m_spline.PointCount - 1; - } - - public override void InsertBefore() - { - if (m_spline.PointCount == 1) - { - m_spline.InsertPoint(0, new BaseSplinePoint(m_spline.GetPointPosition(m_spline.PointCount - 1)+ Vector3.left)); - } - else - { - int previdx = m_selidx; - m_selidx = (int)Mathf.Repeat(m_selidx - 1, m_spline.PointCount - 1); - m_spline.InsertPoint(previdx, new BaseSplinePoint((m_spline.GetPointPosition(m_selidx) + m_spline.GetPointPosition(previdx)) * 0.5f)); - m_selidx = previdx; - } - } - - public override void InsertAfter() - { - if (m_spline.PointCount == 1) - { - AppendPoint(); - } - else - { - int previdx = m_selidx; - m_selidx = (int)Mathf.Repeat(m_selidx + 1, m_spline.PointCount - 1); - m_spline.InsertPoint(m_selidx, new BaseSplinePoint((m_spline.GetPointPosition(m_selidx) + m_spline.GetPointPosition(previdx)) * 0.5f)); - } - } - - public override void Remove() - { - m_spline.m_points.RemoveAt(m_selidx); - m_selidx = (int)Mathf.Repeat(m_selidx, m_spline.PointCount - 1); - } - - public override BaseSplinePoint Point - { - get { return m_spline.m_points[m_idx]; } - set { m_spline.m_points[m_idx] = value; } - } - - public override BaseSplinePoint SelectedPoint - { - get { return m_spline.m_points[m_selidx]; } - set { m_spline.m_points[m_selidx] = value; } - } - - public override void RemoveLastPoint() - { - m_spline.m_points.RemoveAt(m_spline.PointCount - 1); - } - public override void RemoveAllPoints() - { - m_spline.m_points.Clear(); - } - } - - [Serializable] - public class UniSplineSegment : BaseSplineSegment - { - public UniSplineType m_type = UniSplineType.CatmullRom; - internal override Vector3 GetPosition(float t) - { - switch (m_type) - { - case UniSplineType.CatmullRom: - return uc.Math.Spline.CatmullRom.Position(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - case UniSplineType.Hermite: - return uc.Math.Spline.Hermite.Position(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - case UniSplineType.KochanekBartels: - return uc.Math.Spline.KochanekBartels.Position(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - default: return Vector3.zero; - } - } - internal override Vector3 GetTangent(float t) - { - switch (m_type) - { - case UniSplineType.CatmullRom: - return uc.Math.Spline.CatmullRom.Tangent(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - case UniSplineType.Hermite: - return uc.Math.Spline.Hermite.Tangent(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - case UniSplineType.KochanekBartels: - return uc.Math.Spline.KochanekBartels.Tangent(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - default: return Vector3.zero; - } - } - internal override Vector3 GetNormal(float t) - { - switch (m_type) - { - case UniSplineType.CatmullRom: - return uc.Math.Spline.CatmullRom.Normal(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - case UniSplineType.Hermite: - return uc.Math.Spline.Hermite.Normal(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - case UniSplineType.KochanekBartels: - return uc.Math.Spline.KochanekBartels.Normal(m_startctrl, m_startpos, m_endpos, m_endctrl, t); - default: return Vector3.zero; - } - } - } - - [SerializeField] - private List m_points = new List(); - [SerializeField] - private UniSplineSegment[] m_segments = null; - public override int PointCount { get { return m_points.Count; } } - - [SerializeField] - private UniSplineType m_type = UniSplineType.CatmullRom; - [SerializeField] - private float m_bias = 0, m_tension = 0, m_continuity = 0; - - public UniSplineType SplineType - { - get { return m_type; } - set { m_type = value; } - } - - public float Bias - { - get { return m_bias; } - set { m_bias = Mathf.Clamp(value, -1, 1); } - } - - public float Continuity - { - get { return m_continuity; } - set { m_continuity = Mathf.Clamp(value, -1, 1); } - } - - public float Tension - { - get { return m_tension; } - set { m_tension = Mathf.Clamp(value, -1, 1); } - } - - public void ReversePoints() - { - m_points.Reverse(); - } - - public override void Build() - { - int idx, count; - Vector3 spt1 = Vector3.zero, spt2 = Vector3.zero, spt3 = Vector3.zero, spt4 = Vector3.zero; - // - if (m_points.Count < 2) - { - m_segments = null; - m_length = 0; - return; - } - if (m_wrapmode == SplineWrapMode.Loop) - { - count = m_points.Count; - } - else - { - count = m_points.Count - 1; - } - - m_segments = new UniSplineSegment[count]; - m_length = 0; - idx = 0; - if (m_wrapmode == SplineWrapMode.Loop) - { - while (idx < count) - { - spt1 = m_points[(int)Mathf.Repeat(idx, m_points.Count)].m_point; - spt2 = m_points[(int)Mathf.Repeat(idx - 1, m_points.Count)].m_point; - spt3 = m_points[(int)Mathf.Repeat(idx + 2, m_points.Count)].m_point; - spt4 = m_points[(int)Mathf.Repeat(idx + 1, m_points.Count)].m_point; - - m_segments[idx] = new UniSplineSegment(); - (m_segments[idx] as UniSplineSegment).m_type = m_type; - BuildSegment(m_segments[idx] as UniSplineSegment, spt1, spt2, spt3, spt4); - ++idx; - } - } - else - { - while (idx < count) - { - spt1 = m_points[Mathf.Clamp(idx, 0, m_points.Count - 1)].m_point; - spt2 = m_points[Mathf.Clamp(idx - 1, 0, m_points.Count - 1)].m_point; - spt3 = m_points[Mathf.Clamp(idx + 2, 0, m_points.Count - 1)].m_point; - spt4 = m_points[Mathf.Clamp(idx + 1, 0, m_points.Count - 1)].m_point; - - m_segments[idx] = new UniSplineSegment(); - (m_segments[idx] as UniSplineSegment).m_type = m_type; - BuildSegment(m_segments[idx] as UniSplineSegment, spt1, spt2, spt3, spt4); - ++idx; - } - } - - ++m_buildnum; - } - - private void BuildSegment(UniSplineSegment ss, Vector3 sp, Vector3 sc, Vector3 ec, Vector3 ep) - { - ss.m_startpos = sp; - ss.m_endpos = ep; - - switch (m_type) - { - case UniSplineType.CatmullRom: - - ss.m_startctrl = sc; - ss.m_endctrl = ec; - break; - - case UniSplineType.Hermite: - { - float tens = (1 - m_tension) * 0.5f, - coef1 = (1 + m_bias) * tens, - coef2 = (1 - m_bias) * tens; - ss.m_startctrl = (sp - sc) * coef1 + (ep - sp) * coef2; - ss.m_endctrl = (ep - sp) * coef1 + (ec - ep) * coef2; - } - break; - - case UniSplineType.KochanekBartels: - { - float c1 = (1 - m_tension) * (1 + m_bias) * (1 + m_continuity) * 0.5f, - c2 = (1 - m_tension) * (1 - m_bias) * (1 - m_continuity) * 0.5f, - c3 = (1 - m_tension) * (1 + m_bias) * (1 - m_continuity) * 0.5f, - c4 = (1 - m_tension) * (1 - m_bias) * (1 + m_continuity) * 0.5f; - ss.m_startctrl = c1 * (sp - sc) + c2 * (ep - sp); - ss.m_endctrl = c3 * (ep - sp) + c4 * (ec - ep); - } - break; - } - - ss.m_startlen = m_length; - float seglen = GetLength(ss); - m_length += seglen; - ss.m_length = seglen; - ss.m_endlen = m_length; - - switch (m_reparam) - { - case SplineReparamType.None: - ss.m_params = null; - ss.m_precomps = null; - break; - - case SplineReparamType.Simple: - { - m_precompdiv = 1 / (float)m_stepcount; - float param = 0, length = 0; - - Vector3 prev, next; - - ss.m_params = new float[m_stepcount + 1]; - ss.m_precomps = new float[m_stepcount + 1]; - for (int i = 1; i < m_stepcount + 1; ++i) - { - prev = ss.GetPosition(param); - param += m_precompdiv; - next = ss.GetPosition(param); - length += (next - prev).magnitude; - ss.m_precomps[i] = length / seglen; - ss.m_params[i] = param; - } - ss.m_params[0] = 0; - ss.m_params[m_stepcount] = 1; - ss.m_precomps[0] = 0; - ss.m_precomps[m_stepcount] = 1; - m_precompdiv = 1 / (float)m_stepcount; - } - break; - - case SplineReparamType.RungeKutta: - float dlen = seglen / (float)m_stepcount, lparam = 0; - - ss.m_params = new float[m_stepcount + 1]; - ss.m_precomps = new float[m_stepcount + 1]; - for (int i = 0; i < m_stepcount + 1; ++i) - { - ss.m_params[i] = GetReparamRungeKutta(ss, lparam); - ss.m_precomps[i] = lparam / seglen; - lparam += dlen; - } - ss.m_params[0] = 0; - ss.m_params[m_stepcount] = 1; - ss.m_precomps[0] = 0; - ss.m_precomps[m_stepcount] = 1; - m_precompdiv = 1 / (float)m_stepcount; - break; - } - } - - private float GetLength(UniSplineSegment ss) - { - float len = 0; - Vector3 start, end; - float t = 0, dt = 1 / (float)m_stepcount; - int idx = 0; - start = ss.m_startpos; - while (idx < m_stepcount) - { - t += dt; - end = ss.GetPosition(t); - len += (end - start).magnitude; - start = end; - ++idx; - } - return len; - } - - public override int GetPointCount() { return m_points.Count; } - public override int GetSegmentCount() - { - if (m_segments != null) - { - return m_segments.Length; - } - return 0; - } - protected override float GetSegmentLength(int segidx) - { - return m_segments[segidx].m_length; - } - protected override float GetSegmentStartLength(int segidx) - { - return m_segments[segidx].m_startlen; - } - protected override float GetSegmentEndLength(int segidx) - { - return m_segments[segidx].m_endlen; - } - protected override int FindSegment(float offset) - { - for (int i = 0; i < m_segments.Length; ++i) - { - if (m_segments[i].m_startlen <= offset && m_segments[i].m_endlen > offset) - { - return i; - } - } - return m_segments.Length - 1; - } - protected override Vector3 GetDrawPosition(int segidx, float segpos) - { - return m_segments[segidx].GetPosition(segpos); - } - protected override Vector3 GetPosition(int segidx, float segpos) - { - BaseSplineSegment ss = m_segments[segidx]; - if (m_reparam == SplineReparamType.None) - { - return ss.GetPosition(segpos / ss.m_length); - } - else - { - return ss.GetPosition(GetReparam(ss, segpos / ss.m_length)); - } - } - protected override Vector3 GetTangent(int segidx, float segpos) - { - BaseSplineSegment ss = m_segments[segidx]; - if (m_reparam == SplineReparamType.None) - { - return ss.GetTangent(segpos / ss.m_length); - } - else - { - return ss.GetTangent(GetReparam(ss, segpos / ss.m_length)); - } - } - protected override Vector3 GetNormal(int segidx, float segpos) - { - BaseSplineSegment ss = m_segments[segidx]; - if (m_reparam == SplineReparamType.None) - { - return ss.GetNormal(segpos / ss.m_length); - } - else - { - return ss.GetNormal(GetReparam(ss, segpos / ss.m_length)); - } - } - internal override void AppendPoint(BaseSplinePoint p) - { - m_points.Add(p); - } - internal override void InsertPoint(int idx, BaseSplinePoint p) - { - if (idx < 0 || idx > m_points.Count) - { - throw (new IndexOutOfRangeException()); - } - m_points.Insert(idx, p); - } - internal override void RemovePoint(int idx) - { - if (idx < 0 || idx > m_points.Count) - { - throw (new IndexOutOfRangeException()); - } - m_points.RemoveAt(idx); - } - internal override Vector3 GetPointPosition(int idx) - { - if (idx < 0 || idx > m_points.Count) - { - throw (new IndexOutOfRangeException()); - } - return m_points[idx].m_point; - } - - public override BaseEditHelper GetEditHelper() - { - return new EditHelper(this); - } - } - - public class UniSplineComponent : MonoBehaviour - { - [SerializeField] - private UniSpline m_spline = new UniSpline(); - - private int m_buildnum = -1; - private Vector3[] m_drawcache; - - public UniSpline Spline - { - get { return m_spline; } - } - - void OnDrawGizmosSelected() - { - DrawGizmos(Color.red); - } - - void OnDrawGizmos() - { - DrawGizmos(Color.white); - } - - public void DrawGizmos(Color color) - { - int curbuild = m_spline.BuildNum; - if (m_spline.GetSegmentCount() > 0) - { - if (m_buildnum != curbuild) - { - m_drawcache = m_spline.GenerateDrawPoints(16); - m_buildnum = curbuild; - } - - if (m_drawcache != null) - { - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.color = color; - - Vector3 startpos = Vector3.zero, endpos = Vector3.zero; - - for (int i = 0; i < m_drawcache.Length; ++i) - { - endpos = m_drawcache[i]; - if (i != 0) - { - Gizmos.DrawLine(startpos, endpos); - } - startpos = endpos; - } - } - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs.meta deleted file mode 100644 index 708e20f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineComponent.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 133bc704398cd994a8c359b97a8ec3c6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs deleted file mode 100644 index b915dd9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; -using System.Collections; -using uc.Spline; - -public class UniSplineTest : MonoBehaviour -{ - public UniSplineComponent m_spline; - public float m_speed = 1, m_curspeed = 0, m_position = 0; - public Vector3 m_up = Vector3.up; - public Ease.Easing m_easing; - private BaseSpline.SplineIterator m_iter; - - void Awake() - { - m_iter = m_spline.Spline.GetIterator(); - m_iter.SetTransform(m_spline.transform); - } - - void Update() - { - m_position += m_speed * Time.deltaTime; - m_iter.SetOffset(Ease.EaseByType(m_easing, 0, m_spline.Spline.Length, m_position / m_spline.Spline.Length)); - - Vector3 prevpos = transform.position; - - transform.position = m_iter.GetPosition(); - transform.rotation = Quaternion.LookRotation(m_iter.GetTangent(), m_up); - - m_curspeed = (transform.position - prevpos).magnitude / Time.deltaTime; - - /* - Debug.DrawLine(transform.position, transform.position + m_iter.GetTangent().normalized, Color.red); - Debug.DrawLine(transform.position, transform.position + m_iter.GetNormal().normalized, Color.green); - Debug.DrawLine(transform.position, transform.position + Vector3.Cross(m_iter.GetTangent().normalized, m_iter.GetNormal().normalized).normalized, Color.blue); - */ - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs.meta deleted file mode 100644 index 387f811..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/SplineEditor/Scripts/UniSplineTest.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9a01219ae1b84284abd71a1a330f1218 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets.meta deleted file mode 100644 index 83b15cb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 9fa92981704c08548bd50b9fc1dd940e -folderAsset: yes -timeCreated: 1484640274 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor.meta deleted file mode 100644 index 4b2e03e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 5da2500853a87e24094934ae8214498c -folderAsset: yes -timeCreated: 1484640274 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects.meta deleted file mode 100644 index 1dfb536..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 225198e07aaae3547a6d1f6e7177555f -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs deleted file mode 100644 index 795b9d8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor(typeof (Antialiasing))] - public class AntialiasingEditor : Editor - { - private SerializedObject serObj; - - private SerializedProperty mode; - - private SerializedProperty showGeneratedNormals; - private SerializedProperty offsetScale; - private SerializedProperty blurRadius; - private SerializedProperty dlaaSharp; - - private SerializedProperty edgeThresholdMin; - private SerializedProperty edgeThreshold; - private SerializedProperty edgeSharpness; - - - private void OnEnable() - { - serObj = new SerializedObject(target); - - mode = serObj.FindProperty("mode"); - - showGeneratedNormals = serObj.FindProperty("showGeneratedNormals"); - offsetScale = serObj.FindProperty("offsetScale"); - blurRadius = serObj.FindProperty("blurRadius"); - dlaaSharp = serObj.FindProperty("dlaaSharp"); - - edgeThresholdMin = serObj.FindProperty("edgeThresholdMin"); - edgeThreshold = serObj.FindProperty("edgeThreshold"); - edgeSharpness = serObj.FindProperty("edgeSharpness"); - } - - - public override void OnInspectorGUI() - { - serObj.Update(); - - GUILayout.Label("Luminance based fullscreen antialiasing", EditorStyles.miniBoldLabel); - - EditorGUILayout.PropertyField(mode, new GUIContent("Technique")); - - Material mat = (target as Antialiasing).CurrentAAMaterial(); - if (null == mat && (target as Antialiasing).enabled) - { - EditorGUILayout.HelpBox("This AA technique is currently not supported. Choose a different technique or disable the effect and use MSAA instead.", MessageType.Warning); - } - - if (mode.enumValueIndex == (int) AAMode.NFAA) - { - EditorGUILayout.PropertyField(offsetScale, new GUIContent("Edge Detect Ofs")); - EditorGUILayout.PropertyField(blurRadius, new GUIContent("Blur Radius")); - EditorGUILayout.PropertyField(showGeneratedNormals, new GUIContent("Show Normals")); - } - else if (mode.enumValueIndex == (int) AAMode.DLAA) - { - EditorGUILayout.PropertyField(dlaaSharp, new GUIContent("Sharp")); - } - else if (mode.enumValueIndex == (int) AAMode.FXAA3Console) - { - EditorGUILayout.PropertyField(edgeThresholdMin, new GUIContent("Edge Min Threshhold")); - EditorGUILayout.PropertyField(edgeThreshold, new GUIContent("Edge Threshhold")); - EditorGUILayout.PropertyField(edgeSharpness, new GUIContent("Edge Sharpness")); - } - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs.meta deleted file mode 100644 index bbf3d2e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/AntialiasingEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ba15fa37442517749a3c4640a4ad4054 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs deleted file mode 100644 index 6a9c7cd..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(BloomAndFlares))] - class BloomAndFlaresEditor : Editor - { - SerializedProperty tweakMode; - SerializedProperty screenBlendMode; - - SerializedObject serObj; - - SerializedProperty hdr; - SerializedProperty sepBlurSpread; - SerializedProperty useSrcAlphaAsMask; - - SerializedProperty bloomIntensity; - SerializedProperty bloomthreshold; - SerializedProperty bloomBlurIterations; - - SerializedProperty lensflares; - - SerializedProperty hollywoodFlareBlurIterations; - - SerializedProperty lensflareMode; - SerializedProperty hollyStretchWidth; - SerializedProperty lensflareIntensity; - SerializedProperty lensflarethreshold; - SerializedProperty flareColorA; - SerializedProperty flareColorB; - SerializedProperty flareColorC; - SerializedProperty flareColorD; - - SerializedProperty lensFlareVignetteMask; - - void OnEnable () { - serObj = new SerializedObject (target); - - screenBlendMode = serObj.FindProperty("screenBlendMode"); - hdr = serObj.FindProperty("hdr"); - - sepBlurSpread = serObj.FindProperty("sepBlurSpread"); - useSrcAlphaAsMask = serObj.FindProperty("useSrcAlphaAsMask"); - - bloomIntensity = serObj.FindProperty("bloomIntensity"); - bloomthreshold = serObj.FindProperty("bloomThreshold"); - bloomBlurIterations = serObj.FindProperty("bloomBlurIterations"); - - lensflares = serObj.FindProperty("lensflares"); - - lensflareMode = serObj.FindProperty("lensflareMode"); - hollywoodFlareBlurIterations = serObj.FindProperty("hollywoodFlareBlurIterations"); - hollyStretchWidth = serObj.FindProperty("hollyStretchWidth"); - lensflareIntensity = serObj.FindProperty("lensflareIntensity"); - lensflarethreshold = serObj.FindProperty("lensflareThreshold"); - flareColorA = serObj.FindProperty("flareColorA"); - flareColorB = serObj.FindProperty("flareColorB"); - flareColorC = serObj.FindProperty("flareColorC"); - flareColorD = serObj.FindProperty("flareColorD"); - lensFlareVignetteMask = serObj.FindProperty("lensFlareVignetteMask"); - - tweakMode = serObj.FindProperty("tweakMode"); - } - - - public override void OnInspectorGUI () { - serObj.Update(); - - GUILayout.Label("HDR " + (hdr.enumValueIndex == 0 ? "auto detected, " : (hdr.enumValueIndex == 1 ? "forced on, " : "disabled, ")) + (useSrcAlphaAsMask.floatValue < 0.1f ? " ignoring alpha channel glow information" : " using alpha channel glow information"), EditorStyles.miniBoldLabel); - - EditorGUILayout.PropertyField (tweakMode, new GUIContent("Tweak mode")); - EditorGUILayout.PropertyField (screenBlendMode, new GUIContent("Blend mode")); - EditorGUILayout.PropertyField (hdr, new GUIContent("HDR")); - - // display info text when screen blend mode cannot be used - Camera cam = (target as BloomAndFlares).GetComponent(); - if (cam != null) { -#if UNITY_5_6_OR_NEWER - if (screenBlendMode.enumValueIndex==0 && ((cam.allowHDR && hdr.enumValueIndex==0) || (hdr.enumValueIndex==1))) { -#else - if (screenBlendMode.enumValueIndex == 0 && ((cam.hdr && hdr.enumValueIndex == 0) || (hdr.enumValueIndex == 1))) { -#endif - EditorGUILayout.HelpBox("Screen blend is not supported in HDR. Using 'Add' instead.", MessageType.Info); - } - } - - if (1 == tweakMode.intValue) - EditorGUILayout.PropertyField (lensflares, new GUIContent("Cast lens flares")); - - EditorGUILayout.Separator (); - - EditorGUILayout.PropertyField (bloomIntensity, new GUIContent("Intensity")); - bloomthreshold.floatValue = EditorGUILayout.Slider ("threshold", bloomthreshold.floatValue, -0.05f, 4.0f); - bloomBlurIterations.intValue = EditorGUILayout.IntSlider ("Blur iterations", bloomBlurIterations.intValue, 1, 4); - sepBlurSpread.floatValue = EditorGUILayout.Slider ("Blur spread", sepBlurSpread.floatValue, 0.1f, 10.0f); - - if (1 == tweakMode.intValue) - useSrcAlphaAsMask.floatValue = EditorGUILayout.Slider (new GUIContent("Use alpha mask", "Make alpha channel define glowiness"), useSrcAlphaAsMask.floatValue, 0.0f, 1.0f); - else - useSrcAlphaAsMask.floatValue = 0.0f; - - if (1 == tweakMode.intValue) { - EditorGUILayout.Separator (); - - if (lensflares.boolValue) { - - // further lens flare tweakings - if (0 != tweakMode.intValue) - EditorGUILayout.PropertyField (lensflareMode, new GUIContent("Lens flare mode")); - else - lensflareMode.enumValueIndex = 0; - - EditorGUILayout.PropertyField(lensFlareVignetteMask, new GUIContent("Lens flare mask", "This mask is needed to prevent lens flare artifacts")); - - EditorGUILayout.PropertyField (lensflareIntensity, new GUIContent("Local intensity")); - lensflarethreshold.floatValue = EditorGUILayout.Slider ("Local threshold", lensflarethreshold.floatValue, 0.0f, 1.0f); - - if (lensflareMode.intValue == 0) { - // ghosting - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorA, new GUIContent("1st Color")); - EditorGUILayout.PropertyField (flareColorB, new GUIContent("2nd Color")); - EditorGUILayout.EndHorizontal (); - - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorC, new GUIContent("3rd Color")); - EditorGUILayout.PropertyField (flareColorD, new GUIContent("4th Color")); - EditorGUILayout.EndHorizontal (); - } - else if (lensflareMode.intValue == 1) { - // hollywood - EditorGUILayout.PropertyField (hollyStretchWidth, new GUIContent("Stretch width")); - hollywoodFlareBlurIterations.intValue = EditorGUILayout.IntSlider ("Blur iterations", hollywoodFlareBlurIterations.intValue, 1, 4); - - EditorGUILayout.PropertyField (flareColorA, new GUIContent("Tint Color")); - } - else if (lensflareMode.intValue == 2) { - // both - EditorGUILayout.PropertyField (hollyStretchWidth, new GUIContent("Stretch width")); - hollywoodFlareBlurIterations.intValue = EditorGUILayout.IntSlider ("Blur iterations", hollywoodFlareBlurIterations.intValue, 1, 4); - - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorA, new GUIContent("1st Color")); - EditorGUILayout.PropertyField (flareColorB, new GUIContent("2nd Color")); - EditorGUILayout.EndHorizontal (); - - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorC, new GUIContent("3rd Color")); - EditorGUILayout.PropertyField (flareColorD, new GUIContent("4th Color")); - EditorGUILayout.EndHorizontal (); - } - } - } else - lensflares.boolValue = false; // disable lens flares in simple tweak mode - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs.meta deleted file mode 100644 index a4f4e00..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomAndFlaresEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4deca87cb459d1642ac8f734856ca84e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs deleted file mode 100644 index 9f67a19..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs +++ /dev/null @@ -1,166 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(Bloom))] - class BloomEditor : Editor - { - SerializedProperty tweakMode; - SerializedProperty screenBlendMode; - - SerializedObject serObj; - - SerializedProperty hdr; - SerializedProperty quality; - SerializedProperty sepBlurSpread; - - SerializedProperty bloomIntensity; - SerializedProperty bloomThresholdColor; - SerializedProperty bloomThreshold; - SerializedProperty bloomBlurIterations; - - SerializedProperty hollywoodFlareBlurIterations; - - SerializedProperty lensflareMode; - SerializedProperty hollyStretchWidth; - SerializedProperty lensflareIntensity; - SerializedProperty flareRotation; - SerializedProperty lensFlareSaturation; - SerializedProperty lensflareThreshold; - SerializedProperty flareColorA; - SerializedProperty flareColorB; - SerializedProperty flareColorC; - SerializedProperty flareColorD; - - SerializedProperty lensFlareVignetteMask; - - void OnEnable () { - serObj = new SerializedObject (target); - - screenBlendMode = serObj.FindProperty("screenBlendMode"); - hdr = serObj.FindProperty("hdr"); - quality = serObj.FindProperty("quality"); - - sepBlurSpread = serObj.FindProperty("sepBlurSpread"); - - bloomIntensity = serObj.FindProperty("bloomIntensity"); - bloomThreshold = serObj.FindProperty("bloomThreshold"); - bloomThresholdColor = serObj.FindProperty("bloomThresholdColor"); - bloomBlurIterations = serObj.FindProperty("bloomBlurIterations"); - - lensflareMode = serObj.FindProperty("lensflareMode"); - hollywoodFlareBlurIterations = serObj.FindProperty("hollywoodFlareBlurIterations"); - hollyStretchWidth = serObj.FindProperty("hollyStretchWidth"); - lensflareIntensity = serObj.FindProperty("lensflareIntensity"); - lensflareThreshold = serObj.FindProperty("lensflareThreshold"); - lensFlareSaturation = serObj.FindProperty("lensFlareSaturation"); - flareRotation = serObj.FindProperty("flareRotation"); - flareColorA = serObj.FindProperty("flareColorA"); - flareColorB = serObj.FindProperty("flareColorB"); - flareColorC = serObj.FindProperty("flareColorC"); - flareColorD = serObj.FindProperty("flareColorD"); - lensFlareVignetteMask = serObj.FindProperty("lensFlareVignetteMask"); - - tweakMode = serObj.FindProperty("tweakMode"); - } - - - public override void OnInspectorGUI () { - serObj.Update(); - - EditorGUILayout.LabelField("Glow and Lens Flares for bright screen pixels", EditorStyles.miniLabel); - - EditorGUILayout.PropertyField (quality, new GUIContent("Quality", "High quality preserves high frequencies with bigger blurs and uses a better blending and down-/upsampling")); - - EditorGUILayout.Separator (); - - EditorGUILayout.PropertyField (tweakMode, new GUIContent("Mode")); - EditorGUILayout.PropertyField (screenBlendMode, new GUIContent("Blend")); - EditorGUILayout.PropertyField (hdr, new GUIContent("HDR")); - - EditorGUILayout.Separator (); - - // display info text when screen blend mode cannot be used - Camera cam = (target as Bloom).GetComponent(); - if (cam != null) { -#if UNITY_5_6_OR_NEWER - if (screenBlendMode.enumValueIndex==0 && ((cam.allowHDR && hdr.enumValueIndex==0) || (hdr.enumValueIndex==1))) { -#else - if (screenBlendMode.enumValueIndex == 0 && ((cam.hdr && hdr.enumValueIndex == 0) || (hdr.enumValueIndex == 1))) { -#endif - EditorGUILayout.HelpBox("Screen blend is not supported in HDR. Using 'Add' instead.", MessageType.Info); - } - } - - EditorGUILayout.PropertyField (bloomIntensity, new GUIContent("Intensity")); - bloomThreshold.floatValue = EditorGUILayout.Slider ("Threshold", bloomThreshold.floatValue, -0.05f, 4.0f); - if (1 == tweakMode.intValue) { - EditorGUILayout.PropertyField(bloomThresholdColor, new GUIContent(" RGB Threshold")); - } - EditorGUILayout.Separator (); - - bloomBlurIterations.intValue = EditorGUILayout.IntSlider ("Blur Iterations", bloomBlurIterations.intValue, 1, 4); - sepBlurSpread.floatValue = EditorGUILayout.Slider (" Sample Distance", sepBlurSpread.floatValue, 0.1f, 10.0f); - EditorGUILayout.Separator (); - - if (1 == tweakMode.intValue) { - // further lens flare tweakings - if (0 != tweakMode.intValue) - EditorGUILayout.PropertyField (lensflareMode, new GUIContent("Lens Flares")); - else - lensflareMode.enumValueIndex = 0; - - EditorGUILayout.PropertyField (lensflareIntensity, new GUIContent(" Local Intensity", "0 disables lens flares entirely (optimization)")); - lensflareThreshold.floatValue = EditorGUILayout.Slider ("Threshold", lensflareThreshold.floatValue, 0.0f, 4.0f); - - if (Mathf.Abs(lensflareIntensity.floatValue) > Mathf.Epsilon) { - if (lensflareMode.intValue == 0) { - // ghosting - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorA, new GUIContent(" 1st Color")); - EditorGUILayout.PropertyField (flareColorB, new GUIContent(" 2nd Color")); - EditorGUILayout.EndHorizontal (); - - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorC, new GUIContent(" 3rd Color")); - EditorGUILayout.PropertyField (flareColorD, new GUIContent(" 4th Color")); - EditorGUILayout.EndHorizontal (); - } - else if (lensflareMode.intValue == 1) { - // hollywood - EditorGUILayout.PropertyField (hollyStretchWidth, new GUIContent(" Stretch width")); - EditorGUILayout.PropertyField (flareRotation, new GUIContent( " Rotation")); - hollywoodFlareBlurIterations.intValue = EditorGUILayout.IntSlider (" Blur Iterations", hollywoodFlareBlurIterations.intValue, 1, 4); - - EditorGUILayout.PropertyField (lensFlareSaturation, new GUIContent(" Saturation")); - EditorGUILayout.PropertyField (flareColorA, new GUIContent(" Tint Color")); - } - else if (lensflareMode.intValue == 2) { - // both - EditorGUILayout.PropertyField (hollyStretchWidth, new GUIContent(" Stretch width")); - hollywoodFlareBlurIterations.intValue = EditorGUILayout.IntSlider (" Blur Iterations", hollywoodFlareBlurIterations.intValue, 1, 4); - - EditorGUILayout.PropertyField (lensFlareSaturation, new GUIContent(" Saturation")); - - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorA, new GUIContent(" 1st Color")); - EditorGUILayout.PropertyField (flareColorB, new GUIContent(" 2nd Color")); - EditorGUILayout.EndHorizontal (); - - EditorGUILayout.BeginHorizontal (); - EditorGUILayout.PropertyField (flareColorC, new GUIContent(" 3rd Color")); - EditorGUILayout.PropertyField (flareColorD, new GUIContent(" 4th Color")); - EditorGUILayout.EndHorizontal (); - } - - EditorGUILayout.PropertyField(lensFlareVignetteMask, new GUIContent(" Mask", "This mask is needed to prevent lens flare artifacts")); - - } - } - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs.meta deleted file mode 100644 index ad4d3b3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/BloomEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 43fcc28c40e404d4eabfc88b1dbda7b5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs deleted file mode 100644 index bc1f5ff..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(CameraMotionBlur))] - class CameraMotionBlurEditor : Editor - { - SerializedObject serObj; - - SerializedProperty filterType; - SerializedProperty preview; - SerializedProperty previewScale; - SerializedProperty movementScale; - SerializedProperty jitter; - SerializedProperty rotationScale; - SerializedProperty maxVelocity; - SerializedProperty minVelocity; - SerializedProperty velocityScale; - SerializedProperty velocityDownsample; - SerializedProperty noiseTexture; - SerializedProperty showVelocity; - SerializedProperty showVelocityScale; - SerializedProperty excludeLayers; - - void OnEnable () { - serObj = new SerializedObject (target); - - filterType = serObj.FindProperty ("filterType"); - - preview = serObj.FindProperty ("preview"); - previewScale = serObj.FindProperty ("previewScale"); - - movementScale = serObj.FindProperty ("movementScale"); - rotationScale = serObj.FindProperty ("rotationScale"); - - maxVelocity = serObj.FindProperty ("maxVelocity"); - minVelocity = serObj.FindProperty ("minVelocity"); - - jitter = serObj.FindProperty ("jitter"); - - excludeLayers = serObj.FindProperty ("excludeLayers"); - - velocityScale = serObj.FindProperty ("velocityScale"); - velocityDownsample = serObj.FindProperty ("velocityDownsample"); - - noiseTexture = serObj.FindProperty ("noiseTexture"); - } - - - public override void OnInspectorGUI () { - serObj.Update (); - - EditorGUILayout.LabelField("Simulates camera based motion blur", EditorStyles.miniLabel); - - EditorGUILayout.PropertyField (filterType, new GUIContent("Technique")); - if (filterType.enumValueIndex == 3 && !(target as CameraMotionBlur).Dx11Support()) { - EditorGUILayout.HelpBox("DX11 mode not supported (need shader model 5)", MessageType.Info); - } - EditorGUILayout.PropertyField (velocityScale, new GUIContent(" Velocity Scale")); - if (filterType.enumValueIndex >= 2) { - EditorGUILayout.LabelField(" Tile size used during reconstruction filter:", EditorStyles.miniLabel); - EditorGUILayout.Slider(maxVelocity, 2.0f, 10.0f, new GUIContent(" Velocity Max")); - } - else - EditorGUILayout.Slider (maxVelocity, 2.0f, 10.0f, new GUIContent(" Velocity Max")); - EditorGUILayout.Slider(minVelocity, 0.0f, 10.0f, new GUIContent(" Velocity Min")); - - EditorGUILayout.Separator (); - - EditorGUILayout.LabelField("Technique Specific"); - - if (filterType.enumValueIndex == 0) { - // portal style motion blur - EditorGUILayout.PropertyField (rotationScale, new GUIContent(" Camera Rotation")); - EditorGUILayout.PropertyField (movementScale, new GUIContent(" Camera Movement")); - } - else { - // "plausible" blur or cheap, local blur - EditorGUILayout.PropertyField (excludeLayers, new GUIContent(" Exclude Layers")); - EditorGUILayout.PropertyField (velocityDownsample, new GUIContent(" Velocity Downsample")); - velocityDownsample.intValue = velocityDownsample.intValue < 1 ? 1 : velocityDownsample.intValue; - if (filterType.enumValueIndex >= 2) { // only display jitter for reconstruction - EditorGUILayout.PropertyField (noiseTexture, new GUIContent(" Sample Jitter")); - EditorGUILayout.Slider (jitter, 0.0f, 10.0f, new GUIContent(" Jitter Strength")); - } - } - - EditorGUILayout.Separator (); - - EditorGUILayout.PropertyField (preview, new GUIContent("Preview")); - if (preview.boolValue) - EditorGUILayout.PropertyField (previewScale, new GUIContent("")); - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs.meta deleted file mode 100644 index af66969..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CameraMotionBlurEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 80cbbe1c107bf5e43a96347d3dfc2658 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs deleted file mode 100644 index f37adb0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(ColorCorrectionCurves))] - class ColorCorrectionCurvesEditor : Editor { - SerializedObject serObj; - - SerializedProperty mode; - - SerializedProperty redChannel; - SerializedProperty greenChannel; - SerializedProperty blueChannel; - - SerializedProperty useDepthCorrection; - - SerializedProperty depthRedChannel; - SerializedProperty depthGreenChannel; - SerializedProperty depthBlueChannel; - - SerializedProperty zCurveChannel; - - SerializedProperty saturation; - - SerializedProperty selectiveCc; - SerializedProperty selectiveFromColor; - SerializedProperty selectiveToColor; - - private bool applyCurveChanges = false; - - void OnEnable () { - serObj = new SerializedObject (target); - - mode = serObj.FindProperty ("mode"); - - saturation = serObj.FindProperty ("saturation"); - - redChannel = serObj.FindProperty ("redChannel"); - greenChannel = serObj.FindProperty ("greenChannel"); - blueChannel = serObj.FindProperty ("blueChannel"); - - useDepthCorrection = serObj.FindProperty ("useDepthCorrection"); - - zCurveChannel = serObj.FindProperty ("zCurve"); - - depthRedChannel = serObj.FindProperty ("depthRedChannel"); - depthGreenChannel = serObj.FindProperty ("depthGreenChannel"); - depthBlueChannel = serObj.FindProperty ("depthBlueChannel"); - - serObj.ApplyModifiedProperties (); - - selectiveCc = serObj.FindProperty ("selectiveCc"); - selectiveFromColor = serObj.FindProperty ("selectiveFromColor"); - selectiveToColor = serObj.FindProperty ("selectiveToColor"); - } - - void CurveGui ( string name, SerializedProperty animationCurve, Color color) { - // @NOTE: EditorGUILayout.CurveField is buggy and flickers, using PropertyField for now - //animationCurve.animationCurveValue = EditorGUILayout.CurveField (GUIContent (name), animationCurve.animationCurveValue, color, Rect (0.0f,0.0f,1.0f,1.0f)); - EditorGUILayout.PropertyField (animationCurve, new GUIContent (name)); - if (GUI.changed) - applyCurveChanges = true; - } - - void BeginCurves () { - applyCurveChanges = false; - } - - void ApplyCurves () { - if (applyCurveChanges) { - serObj.ApplyModifiedProperties (); - (serObj.targetObject as ColorCorrectionCurves).gameObject.SendMessage ("UpdateTextures"); - } - } - - - public override void OnInspectorGUI () { - serObj.Update (); - - GUILayout.Label ("Use curves to tweak RGB channel colors", EditorStyles.miniBoldLabel); - - saturation.floatValue = EditorGUILayout.Slider( "Saturation", saturation.floatValue, 0.0f, 5.0f); - - EditorGUILayout.PropertyField (mode, new GUIContent ("Mode")); - EditorGUILayout.Separator (); - - BeginCurves (); - - CurveGui (" Red", redChannel, Color.red); - CurveGui (" Green", greenChannel, Color.green); - CurveGui (" Blue", blueChannel, Color.blue); - - EditorGUILayout.Separator (); - - if (mode.intValue > 0) - useDepthCorrection.boolValue = true; - else - useDepthCorrection.boolValue = false; - - if (useDepthCorrection.boolValue) { - CurveGui (" Red (depth)", depthRedChannel, Color.red); - CurveGui (" Green (depth)", depthGreenChannel, Color.green); - CurveGui (" Blue (depth)", depthBlueChannel, Color.blue); - EditorGUILayout.Separator (); - CurveGui (" Blend Curve", zCurveChannel, Color.grey); - } - - EditorGUILayout.Separator (); - EditorGUILayout.PropertyField (selectiveCc, new GUIContent ("Selective")); - if (selectiveCc.boolValue) { - EditorGUILayout.PropertyField (selectiveFromColor, new GUIContent (" Key")); - EditorGUILayout.PropertyField (selectiveToColor, new GUIContent (" Target")); - } - - - ApplyCurves (); - - if (!applyCurveChanges) - serObj.ApplyModifiedProperties (); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs.meta deleted file mode 100644 index b1c7fa3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionCurvesEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a4a9489f73e4f0344ab3fc97bdf5170b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs deleted file mode 100644 index 4d6c4bc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(ColorCorrectionLookup))] - class ColorCorrectionLookupEditor : Editor - { - SerializedObject serObj; - - void OnEnable () { - serObj = new SerializedObject (target); - } - - private Texture2D tempClutTex2D; - - - public override void OnInspectorGUI () { - serObj.Update (); - - EditorGUILayout.LabelField("Converts textures into color lookup volumes (for grading)", EditorStyles.miniLabel); - - //EditorGUILayout.LabelField("Change Lookup Texture (LUT):"); - //EditorGUILayout.BeginHorizontal (); - //Rect r = GUILayoutUtility.GetAspectRect(1.0ff); - - Rect r; Texture2D t; - - //EditorGUILayout.Space(); - tempClutTex2D = EditorGUILayout.ObjectField (" Based on", tempClutTex2D, typeof(Texture2D), false) as Texture2D; - if (tempClutTex2D == null) { - t = AssetDatabase.LoadMainAssetAtPath(((ColorCorrectionLookup)target).basedOnTempTex) as Texture2D; - if (t) tempClutTex2D = t; - } - - Texture2D tex = tempClutTex2D; - - if (tex && (target as ColorCorrectionLookup).basedOnTempTex != AssetDatabase.GetAssetPath(tex)) - { - EditorGUILayout.Separator(); - if (!(target as ColorCorrectionLookup).ValidDimensions(tex)) - { - EditorGUILayout.HelpBox ("Invalid texture dimensions!\nPick another texture or adjust dimension to e.g. 256x16.", MessageType.Warning); - } - else if (GUILayout.Button ("Convert and Apply")) - { - string path = AssetDatabase.GetAssetPath (tex); - TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter; - bool doImport = textureImporter.isReadable == false; - if (textureImporter.mipmapEnabled == true) { - doImport = true; - } - if (textureImporter.textureCompression != TextureImporterCompression.Uncompressed) { - doImport = true; - } - - if (doImport) - { - textureImporter.isReadable = true; - textureImporter.mipmapEnabled = false; - textureImporter.textureCompression = TextureImporterCompression.Uncompressed; - AssetDatabase.ImportAsset (path, ImportAssetOptions.ForceUpdate); - //tex = AssetDatabase.LoadMainAssetAtPath(path); - } - - (target as ColorCorrectionLookup).Convert(tex, path); - } - } - - if ((target as ColorCorrectionLookup).basedOnTempTex != "") - { - EditorGUILayout.HelpBox("Using " + (target as ColorCorrectionLookup).basedOnTempTex, MessageType.Info); - t = AssetDatabase.LoadMainAssetAtPath(((ColorCorrectionLookup)target).basedOnTempTex) as Texture2D; - if (t) { - r = GUILayoutUtility.GetLastRect(); - r = GUILayoutUtility.GetRect(r.width, 20); - r.x += r.width * 0.05f/2.0f; - r.width *= 0.95f; - GUI.DrawTexture (r, t); - GUILayoutUtility.GetRect(r.width, 4); - } - } - - //EditorGUILayout.EndHorizontal (); - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs.meta deleted file mode 100644 index 9286d0e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/ColorCorrectionLookupEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 66c17be95fbf398439ea09f8892a8b43 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs deleted file mode 100644 index da5d62d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using UnityEditor; -using UnityEditor.AnimatedValues; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor(typeof(CreaseShading))] - class CreaseShadingEditor : Editor { - SerializedObject serObj; - - SerializedProperty m_intensity; - SerializedProperty m_softness; - SerializedProperty m_spread; - - AnimBool m_showSoftnessWarning = new AnimBool(); - AnimBool m_showSpreadWarning = new AnimBool(); - - private bool softnessWarningValue { get { return m_softness.intValue > 4; } } - private bool spreadWarningValue { get { return m_spread.floatValue > 4; } } - - void OnEnable () { - serObj = new SerializedObject (target); - - m_intensity = serObj.FindProperty("intensity"); - m_softness = serObj.FindProperty("softness"); - m_spread = serObj.FindProperty("spread"); - - m_showSoftnessWarning.valueChanged.AddListener(Repaint); - m_showSpreadWarning.valueChanged.AddListener(Repaint); - - m_showSoftnessWarning.value = softnessWarningValue; - m_showSpreadWarning.value = spreadWarningValue; - } - - public override void OnInspectorGUI () { - serObj.Update (); - - EditorGUILayout.Slider(m_intensity, -5.0f, 5.0f, new GUIContent("Intensity")); - - EditorGUILayout.IntSlider(m_softness, 0, 15, new GUIContent("Softness")); - m_showSoftnessWarning.target = softnessWarningValue; - if (EditorGUILayout.BeginFadeGroup(m_showSoftnessWarning.faded)) - { - EditorGUILayout.HelpBox("High Softness value might reduce performance.", MessageType.Warning, false); - } - EditorGUILayout.EndFadeGroup(); - - EditorGUILayout.Slider(m_spread, 0.0f, 50.0f, new GUIContent("Spread")); - m_showSpreadWarning.target = spreadWarningValue; - if (EditorGUILayout.BeginFadeGroup(m_showSpreadWarning.faded)) - { - EditorGUILayout.HelpBox("High Spread value might introduce visual artifacts.", MessageType.Warning, false); - } - EditorGUILayout.EndFadeGroup(); - - serObj.ApplyModifiedProperties (); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs.meta deleted file mode 100644 index 85fb4ba..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/CreaseShadingEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6788af605d2f1244789565913bb4e7f6 -timeCreated: 1434032656 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs deleted file mode 100644 index acd7aca..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using UnityEditor; -using UnityEditor.AnimatedValues; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor(typeof(DepthOfField))] - class DepthOfFieldEditor : Editor - { - SerializedObject serObj; - - SerializedProperty visualizeFocus; - SerializedProperty focalLength; - SerializedProperty focalSize; - SerializedProperty aperture; - SerializedProperty focalTransform; - SerializedProperty maxBlurSize; - SerializedProperty highResolution; - - SerializedProperty blurType; - SerializedProperty blurSampleCount; - - SerializedProperty nearBlur; - SerializedProperty foregroundOverlap; - - SerializedProperty dx11BokehThreshold; - SerializedProperty dx11SpawnHeuristic; - SerializedProperty dx11BokehTexture; - SerializedProperty dx11BokehScale; - SerializedProperty dx11BokehIntensity; - - AnimBool showFocalDistance = new AnimBool(); - AnimBool showDiscBlurSettings = new AnimBool(); - AnimBool showDX11BlurSettings = new AnimBool(); - AnimBool showNearBlurOverlapSize = new AnimBool(); - - bool useFocalDistance { get { return focalTransform.objectReferenceValue == null; } } - bool useDiscBlur { get { return blurType.enumValueIndex < 1; } } - bool useDX11Blur { get { return blurType.enumValueIndex > 0; } } - bool useNearBlur { get { return nearBlur.boolValue; } } - - - void OnEnable() - { - serObj = new SerializedObject(target); - - visualizeFocus = serObj.FindProperty("visualizeFocus"); - - focalLength = serObj.FindProperty("focalLength"); - focalSize = serObj.FindProperty("focalSize"); - aperture = serObj.FindProperty("aperture"); - focalTransform = serObj.FindProperty("focalTransform"); - maxBlurSize = serObj.FindProperty("maxBlurSize"); - highResolution = serObj.FindProperty("highResolution"); - - blurType = serObj.FindProperty("blurType"); - blurSampleCount = serObj.FindProperty("blurSampleCount"); - - nearBlur = serObj.FindProperty("nearBlur"); - foregroundOverlap = serObj.FindProperty("foregroundOverlap"); - - dx11BokehThreshold = serObj.FindProperty("dx11BokehThreshold"); - dx11SpawnHeuristic = serObj.FindProperty("dx11SpawnHeuristic"); - dx11BokehTexture = serObj.FindProperty("dx11BokehTexture"); - dx11BokehScale = serObj.FindProperty("dx11BokehScale"); - dx11BokehIntensity = serObj.FindProperty("dx11BokehIntensity"); - - InitializedAnimBools(); - } - - void InitializedAnimBools() - { - showFocalDistance.valueChanged.AddListener(Repaint); - showFocalDistance.value = useFocalDistance; - - showDiscBlurSettings.valueChanged.AddListener(Repaint); - showDiscBlurSettings.value = useDiscBlur; - - showDX11BlurSettings.valueChanged.AddListener(Repaint); - showDX11BlurSettings.value = useDX11Blur; - - showNearBlurOverlapSize.valueChanged.AddListener(Repaint); - showNearBlurOverlapSize.value = useNearBlur; - } - - - void UpdateAnimBoolTargets() - { - showFocalDistance.target = useFocalDistance; - showDiscBlurSettings.target = useDiscBlur; - showDX11BlurSettings.target = useDX11Blur; - showNearBlurOverlapSize.target = useNearBlur; - } - - - public override void OnInspectorGUI() - { - serObj.Update(); - - UpdateAnimBoolTargets(); - - EditorGUILayout.LabelField("Simulates camera lens defocus", EditorStyles.miniLabel); - - GUILayout.Label("Focal Settings"); - EditorGUILayout.PropertyField(visualizeFocus, new GUIContent(" Visualize")); - EditorGUILayout.PropertyField(focalTransform, new GUIContent(" Focus on Transform")); - - if (EditorGUILayout.BeginFadeGroup(showFocalDistance.faded)) - { - EditorGUILayout.PropertyField(focalLength, new GUIContent(" Focal Distance")); - } - EditorGUILayout.EndFadeGroup(); - - EditorGUILayout.Slider(focalSize, 0.0f, 2.0f, new GUIContent(" Focal Size")); - EditorGUILayout.Slider(aperture, 0.0f, 1.0f, new GUIContent(" Aperture")); - - EditorGUILayout.Separator(); - - EditorGUILayout.PropertyField(blurType, new GUIContent("Defocus Type")); - - if (!(target as DepthOfField).Dx11Support() && blurType.enumValueIndex > 0) - { - EditorGUILayout.HelpBox("DX11 mode not supported (need shader model 5)", MessageType.Info); - } - - if (EditorGUILayout.BeginFadeGroup(showDiscBlurSettings.faded)) - { - EditorGUILayout.PropertyField(blurSampleCount, new GUIContent(" Sample Count")); - } - EditorGUILayout.EndFadeGroup(); - - EditorGUILayout.Slider(maxBlurSize, 0.1f, 2.0f, new GUIContent(" Max Blur Distance")); - EditorGUILayout.PropertyField(highResolution, new GUIContent(" High Resolution")); - - EditorGUILayout.Separator(); - - EditorGUILayout.PropertyField(nearBlur, new GUIContent("Near Blur")); - if (EditorGUILayout.BeginFadeGroup(showNearBlurOverlapSize.faded)) - { - EditorGUILayout.Slider(foregroundOverlap, 0.1f, 2.0f, new GUIContent(" Overlap Size")); - } - EditorGUILayout.EndFadeGroup(); - - EditorGUILayout.Separator(); - - if (EditorGUILayout.BeginFadeGroup(showDX11BlurSettings.faded)) - { - GUILayout.Label("DX11 Bokeh Settings"); - EditorGUILayout.PropertyField(dx11BokehTexture, new GUIContent(" Bokeh Texture")); - EditorGUILayout.Slider(dx11BokehScale, 0.0f, 50.0f, new GUIContent(" Bokeh Scale")); - EditorGUILayout.Slider(dx11BokehIntensity, 0.0f, 100.0f, new GUIContent(" Bokeh Intensity")); - EditorGUILayout.Slider(dx11BokehThreshold, 0.0f, 1.0f, new GUIContent(" Min Luminance")); - EditorGUILayout.Slider(dx11SpawnHeuristic, 0.01f, 1.0f, new GUIContent(" Spawn Heuristic")); - } - EditorGUILayout.EndFadeGroup(); - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs.meta deleted file mode 100644 index 8d85a2e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/DepthOfFieldEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 427fdf36119bab44a9131abd19b90f57 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs deleted file mode 100644 index 9d2d7a5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(EdgeDetection))] - class EdgeDetectionEditor : Editor - { - SerializedObject serObj; - - SerializedProperty mode; - SerializedProperty sensitivityDepth; - SerializedProperty sensitivityNormals; - - SerializedProperty lumThreshold; - - SerializedProperty edgesOnly; - SerializedProperty edgesOnlyBgColor; - - SerializedProperty edgeExp; - SerializedProperty sampleDist; - - - void OnEnable () { - serObj = new SerializedObject (target); - - mode = serObj.FindProperty("mode"); - - sensitivityDepth = serObj.FindProperty("sensitivityDepth"); - sensitivityNormals = serObj.FindProperty("sensitivityNormals"); - - lumThreshold = serObj.FindProperty("lumThreshold"); - - edgesOnly = serObj.FindProperty("edgesOnly"); - edgesOnlyBgColor = serObj.FindProperty("edgesOnlyBgColor"); - - edgeExp = serObj.FindProperty("edgeExp"); - sampleDist = serObj.FindProperty("sampleDist"); - } - - - public override void OnInspectorGUI () { - serObj.Update (); - - GUILayout.Label("Detects spatial differences and converts into black outlines", EditorStyles.miniBoldLabel); - EditorGUILayout.PropertyField (mode, new GUIContent("Mode")); - - if (mode.intValue < 2) { - EditorGUILayout.PropertyField (sensitivityDepth, new GUIContent(" Depth Sensitivity")); - EditorGUILayout.PropertyField (sensitivityNormals, new GUIContent(" Normals Sensitivity")); - } - else if (mode.intValue < 4) { - EditorGUILayout.PropertyField (edgeExp, new GUIContent(" Edge Exponent")); - } - else { - // lum based mode - EditorGUILayout.PropertyField (lumThreshold, new GUIContent(" Luminance Threshold")); - } - - EditorGUILayout.PropertyField (sampleDist, new GUIContent(" Sample Distance")); - - EditorGUILayout.Separator (); - - GUILayout.Label ("Background Options"); - edgesOnly.floatValue = EditorGUILayout.Slider (" Edges only", edgesOnly.floatValue, 0.0f, 1.0f); - EditorGUILayout.PropertyField (edgesOnlyBgColor, new GUIContent (" Color")); - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs.meta deleted file mode 100644 index 3ec10ca..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/EdgeDetectionEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b5f1618d14cd80f4da910f00b04af37f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs deleted file mode 100644 index 5b31336..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof( NoiseAndGrain))] - class NoiseAndGrainEditor : Editor - { - SerializedObject serObj; - - SerializedProperty intensityMultiplier; - SerializedProperty generalIntensity; - SerializedProperty blackIntensity; - SerializedProperty whiteIntensity; - SerializedProperty midGrey; - - SerializedProperty dx11Grain; - SerializedProperty softness; - SerializedProperty monochrome; - - SerializedProperty intensities; - SerializedProperty tiling; - SerializedProperty monochromeTiling; - - SerializedProperty noiseTexture; - SerializedProperty filterMode; - - void OnEnable () { - serObj = new SerializedObject (target); - - intensityMultiplier = serObj.FindProperty("intensityMultiplier"); - generalIntensity = serObj.FindProperty("generalIntensity"); - blackIntensity = serObj.FindProperty("blackIntensity"); - whiteIntensity = serObj.FindProperty("whiteIntensity"); - midGrey = serObj.FindProperty("midGrey"); - - dx11Grain = serObj.FindProperty("dx11Grain"); - softness = serObj.FindProperty("softness"); - monochrome = serObj.FindProperty("monochrome"); - - intensities = serObj.FindProperty("intensities"); - tiling = serObj.FindProperty("tiling"); - monochromeTiling = serObj.FindProperty("monochromeTiling"); - - noiseTexture = serObj.FindProperty("noiseTexture"); - filterMode = serObj.FindProperty("filterMode"); - } - - - public override void OnInspectorGUI () { - serObj.Update(); - - EditorGUILayout.LabelField("Overlays animated noise patterns", EditorStyles.miniLabel); - - EditorGUILayout.PropertyField(dx11Grain, new GUIContent("DirectX 11 Grain")); - - if (dx11Grain.boolValue && !(target as NoiseAndGrain).Dx11Support()) { - EditorGUILayout.HelpBox("DX11 mode not supported (need DX11 GPU and enable DX11 in PlayerSettings)", MessageType.Info); - } - - EditorGUILayout.PropertyField(monochrome, new GUIContent("Monochrome")); - - EditorGUILayout.Separator(); - - EditorGUILayout.Slider(intensityMultiplier, 0.0f, 10.0f, new GUIContent("Intensity Multiplier")); - EditorGUILayout.Slider(generalIntensity, 0.0f, 1.0f, new GUIContent(" General")); - EditorGUILayout.Slider(blackIntensity, 0.0f, 1.0f, new GUIContent(" Black Boost")); - EditorGUILayout.Slider(whiteIntensity, 0.0f, 1.0f, new GUIContent(" White Boost")); - midGrey.floatValue = EditorGUILayout.Slider( new GUIContent(" Mid Grey (for Boost)"), midGrey.floatValue, 0.0f, 1.0f); - if (monochrome.boolValue == false) { - Color c = new Color(intensities.vector3Value.x,intensities.vector3Value.y,intensities.vector3Value.z,1.0f); - c = EditorGUILayout.ColorField(new GUIContent(" Color Weights"), c); - intensities.vector3Value = new Vector3(c.r, c.g, c.b); - } - - if (!dx11Grain.boolValue) { - EditorGUILayout.Separator(); - - EditorGUILayout.LabelField("Noise Shape"); - EditorGUILayout.PropertyField(noiseTexture, new GUIContent(" Texture")); - EditorGUILayout.PropertyField(filterMode, new GUIContent(" Filter")); - } - else { - EditorGUILayout.Separator(); - EditorGUILayout.LabelField("Noise Shape"); - } - - softness.floatValue = EditorGUILayout.Slider( new GUIContent(" Softness"),softness.floatValue, 0.0f, 0.99f); - - if (!dx11Grain.boolValue) { - EditorGUILayout.Separator(); - EditorGUILayout.LabelField("Advanced"); - - if (monochrome.boolValue == false) - { - Vector3 temp = tiling.vector3Value; - temp.x = EditorGUILayout.FloatField(new GUIContent(" Tiling (Red)"), tiling.vector3Value.x); - temp.y = EditorGUILayout.FloatField(new GUIContent(" Tiling (Green)"), tiling.vector3Value.y); - temp.z = EditorGUILayout.FloatField(new GUIContent(" Tiling (Blue)"), tiling.vector3Value.z); - tiling.vector3Value = temp; - } - else { - EditorGUILayout.PropertyField(monochromeTiling, new GUIContent(" Tiling")); - } - } - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs.meta deleted file mode 100644 index 1ca666a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/NoiseAndGrainEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: abd63abcc46fbcb4588164b671b52d3b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs deleted file mode 100644 index 51deae7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(SunShafts))] - class SunShaftsEditor : Editor - { - SerializedObject serObj; - - SerializedProperty sunTransform; - SerializedProperty radialBlurIterations; - SerializedProperty sunColor; - SerializedProperty sunThreshold; - SerializedProperty sunShaftBlurRadius; - SerializedProperty sunShaftIntensity; - SerializedProperty useDepthTexture; - SerializedProperty resolution; - SerializedProperty screenBlendMode; - SerializedProperty maxRadius; - - void OnEnable () { - serObj = new SerializedObject (target); - - screenBlendMode = serObj.FindProperty("screenBlendMode"); - - sunTransform = serObj.FindProperty("sunTransform"); - sunColor = serObj.FindProperty("sunColor"); - sunThreshold = serObj.FindProperty("sunThreshold"); - - sunShaftBlurRadius = serObj.FindProperty("sunShaftBlurRadius"); - radialBlurIterations = serObj.FindProperty("radialBlurIterations"); - - sunShaftIntensity = serObj.FindProperty("sunShaftIntensity"); - - resolution = serObj.FindProperty("resolution"); - - maxRadius = serObj.FindProperty("maxRadius"); - - useDepthTexture = serObj.FindProperty("useDepthTexture"); - } - - - public override void OnInspectorGUI () { - serObj.Update (); - - EditorGUILayout.BeginHorizontal(); - - EditorGUILayout.PropertyField (useDepthTexture, new GUIContent ("Rely on Z Buffer?")); - if ((target as SunShafts).GetComponent()) - GUILayout.Label("Current camera mode: "+ (target as SunShafts).GetComponent().depthTextureMode, EditorStyles.miniBoldLabel); - - EditorGUILayout.EndHorizontal(); - - // depth buffer need - /* - bool newVal = useDepthTexture.boolValue; - if (newVal != oldVal) { - if (newVal) - (target as SunShafts).camera.depthTextureMode |= DepthTextureMode.Depth; - else - (target as SunShafts).camera.depthTextureMode &= ~DepthTextureMode.Depth; - } - */ - - EditorGUILayout.PropertyField (resolution, new GUIContent("Resolution")); - EditorGUILayout.PropertyField (screenBlendMode, new GUIContent("Blend mode")); - - EditorGUILayout.Separator (); - - EditorGUILayout.BeginHorizontal(); - - EditorGUILayout.PropertyField (sunTransform, new GUIContent("Shafts caster", "Chose a transform that acts as a root point for the produced sun shafts")); - if ((target as SunShafts).sunTransform && (target as SunShafts).GetComponent()) { - if (GUILayout.Button("Center on " + (target as SunShafts).GetComponent().name)) { - if (EditorUtility.DisplayDialog ("Move sun shafts source?", "The SunShafts caster named "+ (target as SunShafts).sunTransform.name +"\n will be centered along "+(target as SunShafts).GetComponent().name+". Are you sure? ", "Please do", "Don't")) { - Ray ray = (target as SunShafts).GetComponent().ViewportPointToRay(new Vector3(0.5f,0.5f,0)); - (target as SunShafts).sunTransform.position = ray.origin + ray.direction * 500.0f; - (target as SunShafts).sunTransform.LookAt ((target as SunShafts).transform); - } - } - } - - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.Separator (); - - EditorGUILayout.PropertyField (sunThreshold, new GUIContent ("Threshold color")); - EditorGUILayout.PropertyField (sunColor, new GUIContent ("Shafts color")); - maxRadius.floatValue = 1.0f - EditorGUILayout.Slider ("Distance falloff", 1.0f - maxRadius.floatValue, 0.1f, 1.0f); - - EditorGUILayout.Separator (); - - sunShaftBlurRadius.floatValue = EditorGUILayout.Slider ("Blur size", sunShaftBlurRadius.floatValue, 1.0f, 10.0f); - radialBlurIterations.intValue = EditorGUILayout.IntSlider ("Blur iterations", radialBlurIterations.intValue, 1, 3); - - EditorGUILayout.Separator (); - - EditorGUILayout.PropertyField (sunShaftIntensity, new GUIContent("Intensity")); - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs.meta deleted file mode 100644 index b8d901f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/SunShaftsEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 54f6f6313f2aecc4d81035ec0031e313 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs deleted file mode 100644 index 8d42887..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(Tonemapping))] - class TonemappingEditor : Editor - { - SerializedObject serObj; - - SerializedProperty type; - - // CURVE specific parameter - SerializedProperty remapCurve; - - SerializedProperty exposureAdjustment; - - // REINHARD specific parameter - SerializedProperty middleGrey; - SerializedProperty white; - SerializedProperty adaptionSpeed; - SerializedProperty adaptiveTextureSize; - - void OnEnable () { - serObj = new SerializedObject (target); - - type = serObj.FindProperty ("type"); - remapCurve = serObj.FindProperty ("remapCurve"); - exposureAdjustment = serObj.FindProperty ("exposureAdjustment"); - middleGrey = serObj.FindProperty ("middleGrey"); - white = serObj.FindProperty ("white"); - adaptionSpeed = serObj.FindProperty ("adaptionSpeed"); - adaptiveTextureSize = serObj.FindProperty("adaptiveTextureSize"); - } - - - public override void OnInspectorGUI () { - serObj.Update (); - - GUILayout.Label("Mapping HDR to LDR ranges since 1982", EditorStyles.miniLabel); - - Camera cam = (target as Tonemapping).GetComponent(); - if (cam != null) { -#if UNITY_5_6_OR_NEWER - if (!cam.allowHDR) { -#else - if (!cam.hdr) { -#endif - EditorGUILayout.HelpBox("The camera is not HDR enabled. This will likely break the Tonemapper.", MessageType.Warning); - } - else if (!(target as Tonemapping).validRenderTextureFormat) { - EditorGUILayout.HelpBox("The input to Tonemapper is not in HDR. Make sure that all effects prior to this are executed in HDR.", MessageType.Warning); - } - } - - EditorGUILayout.PropertyField (type, new GUIContent ("Technique")); - - if (type.enumValueIndex == (int) Tonemapping.TonemapperType.UserCurve) { - EditorGUILayout.PropertyField (remapCurve, new GUIContent ("Remap curve", "Specify the mapping of luminances yourself")); - } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.SimpleReinhard) { - EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment")); - } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.Hable) { - EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment")); - } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.Photographic) { - EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment")); - } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.OptimizedHejiDawson) { - EditorGUILayout.PropertyField (exposureAdjustment, new GUIContent ("Exposure", "Exposure adjustment")); - } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.AdaptiveReinhard) { - EditorGUILayout.PropertyField (middleGrey, new GUIContent ("Middle grey", "Middle grey defines the average luminance thus brightening or darkening the entire image.")); - EditorGUILayout.PropertyField (white, new GUIContent ("White", "Smallest luminance value that will be mapped to white")); - EditorGUILayout.PropertyField (adaptionSpeed, new GUIContent ("Adaption Speed", "Speed modifier for the automatic adaption")); - EditorGUILayout.PropertyField (adaptiveTextureSize, new GUIContent ("Texture size", "Defines the amount of downsamples needed.")); - } else if (type.enumValueIndex == (int) Tonemapping.TonemapperType.AdaptiveReinhardAutoWhite) { - EditorGUILayout.PropertyField (middleGrey, new GUIContent ("Middle grey", "Middle grey defines the average luminance thus brightening or darkening the entire image.")); - EditorGUILayout.PropertyField (adaptionSpeed, new GUIContent ("Adaption Speed", "Speed modifier for the automatic adaption")); - EditorGUILayout.PropertyField (adaptiveTextureSize, new GUIContent ("Texture size", "Defines the amount of downsamples needed.")); - } - - GUILayout.Label("All following effects will use LDR color buffers", EditorStyles.miniBoldLabel); - - serObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs.meta deleted file mode 100644 index 40c242a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/TonemappingEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0f7cab214f141f642b87a5bdbd14653e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs deleted file mode 100644 index 7ccec20..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using UnityEditor; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [CustomEditor (typeof(VignetteAndChromaticAberration))] - class VignetteAndChromaticAberrationEditor : Editor - { - private SerializedObject m_SerObj; - private SerializedProperty m_Mode; - private SerializedProperty m_Intensity; // intensity == 0 disables pre pass (optimization) - private SerializedProperty m_ChromaticAberration; - private SerializedProperty m_AxialAberration; - private SerializedProperty m_Blur; // blur == 0 disables blur pass (optimization) - private SerializedProperty m_BlurSpread; - private SerializedProperty m_BlurDistance; - private SerializedProperty m_LuminanceDependency; - - - void OnEnable () - { - m_SerObj = new SerializedObject (target); - m_Mode = m_SerObj.FindProperty ("mode"); - m_Intensity = m_SerObj.FindProperty ("intensity"); - m_ChromaticAberration = m_SerObj.FindProperty ("chromaticAberration"); - m_AxialAberration = m_SerObj.FindProperty ("axialAberration"); - m_Blur = m_SerObj.FindProperty ("blur"); - m_BlurSpread = m_SerObj.FindProperty ("blurSpread"); - m_LuminanceDependency = m_SerObj.FindProperty ("luminanceDependency"); - m_BlurDistance = m_SerObj.FindProperty ("blurDistance"); - } - - - public override void OnInspectorGUI () - { - m_SerObj.Update (); - - EditorGUILayout.LabelField("Simulates the common lens artifacts 'Vignette' and 'Aberration'", EditorStyles.miniLabel); - - EditorGUILayout.Slider(m_Intensity, 0.0f, 1.0f, new GUIContent("Vignetting")); - EditorGUILayout.Slider(m_Blur, 0.0f, 1.0f, new GUIContent(" Blurred Corners")); - if (m_Blur.floatValue>0.0f) - EditorGUILayout.Slider(m_BlurSpread, 0.0f, 1.0f, new GUIContent(" Blur Distance")); - - EditorGUILayout.Separator (); - - EditorGUILayout.PropertyField (m_Mode, new GUIContent("Aberration")); - if (m_Mode.intValue>0) - { - EditorGUILayout.Slider(m_ChromaticAberration, 0.0f, 5.0f, new GUIContent(" Tangential Aberration")); - EditorGUILayout.Slider(m_AxialAberration, 0.0f, 5.0f, new GUIContent(" Axial Aberration")); - m_LuminanceDependency.floatValue = EditorGUILayout.Slider(" Contrast Dependency", m_LuminanceDependency.floatValue, 0.001f, 1.0f); - m_BlurDistance.floatValue = EditorGUILayout.Slider(" Blur Distance", m_BlurDistance.floatValue, 0.001f, 5.0f); - } - else - EditorGUILayout.PropertyField (m_ChromaticAberration, new GUIContent(" Chromatic Aberration")); - - m_SerObj.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs.meta deleted file mode 100644 index 278b4eb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/ImageEffects/VignetteAndChromaticAberrationEditor.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 08126bf2baa528c4cb9c60340a24e5d6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs deleted file mode 100644 index b94333d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs +++ /dev/null @@ -1,70 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System; -using System.Collections.Generic; -using System.IO; - -public static class KinectCopyPluginDataHelper -{ - private const string DataDirSuffix = "_Data"; - private const string PluginsDirName = "Plugins"; - - private static Dictionary TargetToDirName = new Dictionary() - { - {BuildTarget.StandaloneWindows, "x86"}, - {BuildTarget.StandaloneWindows64, "x86_64"} - }; - - public static void CopyPluginData(BuildTarget target, string buildTargetPath, string subDirToCopy) - { - string subDirName; - if (!TargetToDirName.TryGetValue (target, out subDirName)) - { - // No work to do - return; - } - - // Get Required Paths - var buildName = Path.GetFileNameWithoutExtension(buildTargetPath); - var targetDir = Directory.GetParent(buildTargetPath); - var separator = Path.DirectorySeparatorChar; - - var buildDataDir = targetDir.FullName + separator + buildName + DataDirSuffix + separator; - var tgtPluginsDir = buildDataDir + separator + PluginsDirName + separator + subDirToCopy + separator; - var srcPluginsDir = Application.dataPath + separator + PluginsDirName + separator + subDirName + separator + subDirToCopy + separator; - - CopyAll (new DirectoryInfo (srcPluginsDir), new DirectoryInfo(tgtPluginsDir)); - } - - /// - /// Recursive Copy Directory Method - /// - private static void CopyAll(DirectoryInfo source, DirectoryInfo target) - { - // Check if the source directory exists, if not, don't do any work. - if (!Directory.Exists(source.FullName)) - { - return; - } - - // Check if the target directory exists, if not, create it. - if (!Directory.Exists(target.FullName)) - { - Directory.CreateDirectory(target.FullName); - } - - // Copy each file into it’s new directory. - foreach (var fileInfo in source.GetFiles()) - { - fileInfo.CopyTo (Path.Combine (target.ToString (), fileInfo.Name), true); - } - - // Copy each subdirectory using recursion. - foreach (var subDirInfo in source.GetDirectories()) - { - DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(subDirInfo.Name); - CopyAll(subDirInfo, nextTargetSubDir); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs.meta deleted file mode 100644 index 9b34d13..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Editor/KinectCopyPluginDataHelper.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a103df75c03c9c54096627354fdb1398 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects.meta deleted file mode 100644 index fc4ec9c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 115d1f9d9bd29064ab981e57c8fc8cdf -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects.meta deleted file mode 100644 index 5b717ba..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: d6e0c95a128e14227939c51b5d9ad74e -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts.meta deleted file mode 100644 index 0ca768e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: cd3e1490c3d9a7a498538315414d5129 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs deleted file mode 100644 index fdecc11..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - public enum AAMode - { - FXAA2 = 0, - FXAA3Console = 1, - FXAA1PresetA = 2, - FXAA1PresetB = 3, - NFAA = 4, - SSAA = 5, - DLAA = 6, - } - - [ExecuteInEditMode] - [RequireComponent(typeof (Camera))] - [AddComponentMenu("Image Effects/Other/Antialiasing")] - public class Antialiasing : PostEffectsBase - { - public AAMode mode = AAMode.FXAA3Console; - - public bool showGeneratedNormals = false; - public float offsetScale = 0.2f; - public float blurRadius = 18.0f; - - public float edgeThresholdMin = 0.05f; - public float edgeThreshold = 0.2f; - public float edgeSharpness = 4.0f; - - public bool dlaaSharp = false; - - public Shader ssaaShader; - private Material ssaa; - public Shader dlaaShader; - private Material dlaa; - public Shader nfaaShader; - private Material nfaa; - public Shader shaderFXAAPreset2; - private Material materialFXAAPreset2; - public Shader shaderFXAAPreset3; - private Material materialFXAAPreset3; - public Shader shaderFXAAII; - private Material materialFXAAII; - public Shader shaderFXAAIII; - private Material materialFXAAIII; - - - public Material CurrentAAMaterial() - { - Material returnValue = null; - - switch (mode) - { - case AAMode.FXAA3Console: - returnValue = materialFXAAIII; - break; - case AAMode.FXAA2: - returnValue = materialFXAAII; - break; - case AAMode.FXAA1PresetA: - returnValue = materialFXAAPreset2; - break; - case AAMode.FXAA1PresetB: - returnValue = materialFXAAPreset3; - break; - case AAMode.NFAA: - returnValue = nfaa; - break; - case AAMode.SSAA: - returnValue = ssaa; - break; - case AAMode.DLAA: - returnValue = dlaa; - break; - default: - returnValue = null; - break; - } - - return returnValue; - } - - - public override bool CheckResources() - { - CheckSupport(false); - - materialFXAAPreset2 = CreateMaterial(shaderFXAAPreset2, materialFXAAPreset2); - materialFXAAPreset3 = CreateMaterial(shaderFXAAPreset3, materialFXAAPreset3); - materialFXAAII = CreateMaterial(shaderFXAAII, materialFXAAII); - materialFXAAIII = CreateMaterial(shaderFXAAIII, materialFXAAIII); - nfaa = CreateMaterial(nfaaShader, nfaa); - ssaa = CreateMaterial(ssaaShader, ssaa); - dlaa = CreateMaterial(dlaaShader, dlaa); - - if (!ssaaShader.isSupported) - { - NotSupported(); - ReportAutoDisable(); - } - - return isSupported; - } - - - public void OnRenderImage(RenderTexture source, RenderTexture destination) - { - if (CheckResources() == false) - { - Graphics.Blit(source, destination); - return; - } - - // ---------------------------------------------------------------- - // FXAA antialiasing modes - - if (mode == AAMode.FXAA3Console && (materialFXAAIII != null)) - { - materialFXAAIII.SetFloat("_EdgeThresholdMin", edgeThresholdMin); - materialFXAAIII.SetFloat("_EdgeThreshold", edgeThreshold); - materialFXAAIII.SetFloat("_EdgeSharpness", edgeSharpness); - - Graphics.Blit(source, destination, materialFXAAIII); - } - else if (mode == AAMode.FXAA1PresetB && (materialFXAAPreset3 != null)) - { - Graphics.Blit(source, destination, materialFXAAPreset3); - } - else if (mode == AAMode.FXAA1PresetA && materialFXAAPreset2 != null) - { - source.anisoLevel = 4; - Graphics.Blit(source, destination, materialFXAAPreset2); - source.anisoLevel = 0; - } - else if (mode == AAMode.FXAA2 && materialFXAAII != null) - { - Graphics.Blit(source, destination, materialFXAAII); - } - else if (mode == AAMode.SSAA && ssaa != null) - { - // ---------------------------------------------------------------- - // SSAA antialiasing - Graphics.Blit(source, destination, ssaa); - } - else if (mode == AAMode.DLAA && dlaa != null) - { - // ---------------------------------------------------------------- - // DLAA antialiasing - - source.anisoLevel = 0; - RenderTexture interim = RenderTexture.GetTemporary(source.width, source.height); - Graphics.Blit(source, interim, dlaa, 0); - Graphics.Blit(interim, destination, dlaa, dlaaSharp ? 2 : 1); - RenderTexture.ReleaseTemporary(interim); - } - else if (mode == AAMode.NFAA && nfaa != null) - { - // ---------------------------------------------------------------- - // nfaa antialiasing - - source.anisoLevel = 0; - - nfaa.SetFloat("_OffsetScale", offsetScale); - nfaa.SetFloat("_BlurRadius", blurRadius); - - Graphics.Blit(source, destination, nfaa, showGeneratedNormals ? 1 : 0); - } - else - { - // none of the AA is supported, fallback to a simple blit - Graphics.Blit(source, destination); - } - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs.meta deleted file mode 100644 index 6284674..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Antialiasing.cs.meta +++ /dev/null @@ -1,16 +0,0 @@ -fileFormatVersion: 2 -guid: 646b5bc27a658f447b1d929fd5ffbd70 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - ssaaShader: {fileID: 4800000, guid: b3728d1488b02490cbd196c7941bf1f8, type: 3} - - dlaaShader: {fileID: 4800000, guid: 017ca72b9e8a749058d13ebd527e98fa, type: 3} - - nfaaShader: {fileID: 4800000, guid: ce0cb2621f6d84e21a87414e471a3cce, type: 3} - - shaderFXAAPreset2: {fileID: 4800000, guid: 6f1418cffd12146f2a83be795f6fa5a7, type: 3} - - shaderFXAAPreset3: {fileID: 4800000, guid: c182fa94a5a0a4c02870641efcd38cd5, type: 3} - - shaderFXAAII: {fileID: 4800000, guid: cd5b323dcc592457790ff18b528f5e67, type: 3} - - shaderFXAAIII: {fileID: 4800000, guid: c547503fff0e8482ea5793727057041c, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs deleted file mode 100644 index 2ac20b2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs +++ /dev/null @@ -1,363 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Bloom and Glow/Bloom")] - public class Bloom : PostEffectsBase - { - public enum LensFlareStyle - { - Ghosting = 0, - Anamorphic = 1, - Combined = 2, - } - - public enum TweakMode - { - Basic = 0, - Complex = 1, - } - - public enum HDRBloomMode - { - Auto = 0, - On = 1, - Off = 2, - } - - public enum BloomScreenBlendMode - { - Screen = 0, - Add = 1, - } - - public enum BloomQuality - { - Cheap = 0, - High = 1, - } - - public TweakMode tweakMode = 0; - public BloomScreenBlendMode screenBlendMode = BloomScreenBlendMode.Add; - - public HDRBloomMode hdr = HDRBloomMode.Auto; - private bool doHdr = false; - public float sepBlurSpread = 2.5f; - - public BloomQuality quality = BloomQuality.High; - - public float bloomIntensity = 0.5f; - public float bloomThreshold = 0.5f; - public Color bloomThresholdColor = Color.white; - public int bloomBlurIterations = 2; - - public int hollywoodFlareBlurIterations = 2; - public float flareRotation = 0.0f; - public LensFlareStyle lensflareMode = (LensFlareStyle) 1; - public float hollyStretchWidth = 2.5f; - public float lensflareIntensity = 0.0f; - public float lensflareThreshold = 0.3f; - public float lensFlareSaturation = 0.75f; - public Color flareColorA = new Color (0.4f, 0.4f, 0.8f, 0.75f); - public Color flareColorB = new Color (0.4f, 0.8f, 0.8f, 0.75f); - public Color flareColorC = new Color (0.8f, 0.4f, 0.8f, 0.75f); - public Color flareColorD = new Color (0.8f, 0.4f, 0.0f, 0.75f); - public Texture2D lensFlareVignetteMask; - - public Shader lensFlareShader; - private Material lensFlareMaterial; - - public Shader screenBlendShader; - private Material screenBlend; - - public Shader blurAndFlaresShader; - private Material blurAndFlaresMaterial; - - public Shader brightPassFilterShader; - private Material brightPassFilterMaterial; - - - public override bool CheckResources () - { - CheckSupport (false); - - screenBlend = CheckShaderAndCreateMaterial (screenBlendShader, screenBlend); - lensFlareMaterial = CheckShaderAndCreateMaterial(lensFlareShader,lensFlareMaterial); - blurAndFlaresMaterial = CheckShaderAndCreateMaterial (blurAndFlaresShader, blurAndFlaresMaterial); - brightPassFilterMaterial = CheckShaderAndCreateMaterial(brightPassFilterShader, brightPassFilterMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - public void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources()==false) - { - Graphics.Blit (source, destination); - return; - } - - // screen blend is not supported when HDR is enabled (will cap values) - - doHdr = false; - if (hdr == HDRBloomMode.Auto) -#if UNITY_5_6_OR_NEWER - doHdr = source.format == RenderTextureFormat.ARGBHalf && GetComponent().allowHDR; -#else - doHdr = source.format == RenderTextureFormat.ARGBHalf && GetComponent().hdr; -#endif - else - { - doHdr = hdr == HDRBloomMode.On; - } - - doHdr = doHdr && supportHDRTextures; - - BloomScreenBlendMode realBlendMode = screenBlendMode; - if (doHdr) - realBlendMode = BloomScreenBlendMode.Add; - - var rtFormat= (doHdr) ? RenderTextureFormat.ARGBHalf : RenderTextureFormat.Default; - var rtW2= source.width/2; - var rtH2= source.height/2; - var rtW4= source.width/4; - var rtH4= source.height/4; - - float widthOverHeight = (1.0f * source.width) / (1.0f * source.height); - float oneOverBaseSize = 1.0f / 512.0f; - - // downsample - RenderTexture quarterRezColor = RenderTexture.GetTemporary (rtW4, rtH4, 0, rtFormat); - RenderTexture halfRezColorDown = RenderTexture.GetTemporary (rtW2, rtH2, 0, rtFormat); - if (quality > BloomQuality.Cheap) { - Graphics.Blit (source, halfRezColorDown, screenBlend, 2); - RenderTexture rtDown4 = RenderTexture.GetTemporary (rtW4, rtH4, 0, rtFormat); - Graphics.Blit (halfRezColorDown, rtDown4, screenBlend, 2); - Graphics.Blit (rtDown4, quarterRezColor, screenBlend, 6); - RenderTexture.ReleaseTemporary(rtDown4); - } - else { - Graphics.Blit (source, halfRezColorDown); - Graphics.Blit (halfRezColorDown, quarterRezColor, screenBlend, 6); - } - RenderTexture.ReleaseTemporary (halfRezColorDown); - - // cut colors (thresholding) - RenderTexture secondQuarterRezColor = RenderTexture.GetTemporary (rtW4, rtH4, 0, rtFormat); - BrightFilter (bloomThreshold * bloomThresholdColor, quarterRezColor, secondQuarterRezColor); - - // blurring - - if (bloomBlurIterations < 1) bloomBlurIterations = 1; - else if (bloomBlurIterations > 10) bloomBlurIterations = 10; - - for (int iter = 0; iter < bloomBlurIterations; iter++) - { - float spreadForPass = (1.0f + (iter * 0.25f)) * sepBlurSpread; - - // vertical blur - RenderTexture blur4 = RenderTexture.GetTemporary (rtW4, rtH4, 0, rtFormat); - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 (0.0f, spreadForPass * oneOverBaseSize, 0.0f, 0.0f)); - Graphics.Blit (secondQuarterRezColor, blur4, blurAndFlaresMaterial, 4); - RenderTexture.ReleaseTemporary(secondQuarterRezColor); - secondQuarterRezColor = blur4; - - // horizontal blur - blur4 = RenderTexture.GetTemporary (rtW4, rtH4, 0, rtFormat); - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 ((spreadForPass / widthOverHeight) * oneOverBaseSize, 0.0f, 0.0f, 0.0f)); - Graphics.Blit (secondQuarterRezColor, blur4, blurAndFlaresMaterial, 4); - RenderTexture.ReleaseTemporary (secondQuarterRezColor); - secondQuarterRezColor = blur4; - - if (quality > BloomQuality.Cheap) - { - if (iter == 0) - { - Graphics.SetRenderTarget(quarterRezColor); - GL.Clear(false, true, Color.black); // Clear to avoid RT restore - Graphics.Blit (secondQuarterRezColor, quarterRezColor); - } - else - { - quarterRezColor.MarkRestoreExpected(); // using max blending, RT restore expected - Graphics.Blit (secondQuarterRezColor, quarterRezColor, screenBlend, 10); - } - } - } - - if (quality > BloomQuality.Cheap) - { - Graphics.SetRenderTarget(secondQuarterRezColor); - GL.Clear(false, true, Color.black); // Clear to avoid RT restore - Graphics.Blit (quarterRezColor, secondQuarterRezColor, screenBlend, 6); - } - - // lens flares: ghosting, anamorphic or both (ghosted anamorphic flares) - - if (lensflareIntensity > Mathf.Epsilon) - { - - RenderTexture rtFlares4 = RenderTexture.GetTemporary (rtW4, rtH4, 0, rtFormat); - - if (lensflareMode == 0) - { - // ghosting only - - BrightFilter (lensflareThreshold, secondQuarterRezColor, rtFlares4); - - if (quality > BloomQuality.Cheap) - { - // smooth a little - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 (0.0f, (1.5f) / (1.0f * quarterRezColor.height), 0.0f, 0.0f)); - Graphics.SetRenderTarget(quarterRezColor); - GL.Clear(false, true, Color.black); // Clear to avoid RT restore - Graphics.Blit (rtFlares4, quarterRezColor, blurAndFlaresMaterial, 4); - - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 ((1.5f) / (1.0f * quarterRezColor.width), 0.0f, 0.0f, 0.0f)); - Graphics.SetRenderTarget(rtFlares4); - GL.Clear(false, true, Color.black); // Clear to avoid RT restore - Graphics.Blit (quarterRezColor, rtFlares4, blurAndFlaresMaterial, 4); - } - - // no ugly edges! - Vignette (0.975f, rtFlares4, rtFlares4); - BlendFlares (rtFlares4, secondQuarterRezColor); - } - else - { - - //Vignette (0.975ff, rtFlares4, rtFlares4); - //DrawBorder(rtFlares4, screenBlend, 8); - - float flareXRot = 1.0f * Mathf.Cos(flareRotation); - float flareyRot = 1.0f * Mathf.Sin(flareRotation); - - float stretchWidth = (hollyStretchWidth * 1.0f / widthOverHeight) * oneOverBaseSize; - - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 (flareXRot, flareyRot, 0.0f, 0.0f)); - blurAndFlaresMaterial.SetVector ("_Threshhold", new Vector4 (lensflareThreshold, 1.0f, 0.0f, 0.0f)); - blurAndFlaresMaterial.SetVector ("_TintColor", new Vector4 (flareColorA.r, flareColorA.g, flareColorA.b, flareColorA.a) * flareColorA.a * lensflareIntensity); - blurAndFlaresMaterial.SetFloat ("_Saturation", lensFlareSaturation); - - // "pre and cut" - quarterRezColor.DiscardContents(); - Graphics.Blit (rtFlares4, quarterRezColor, blurAndFlaresMaterial, 2); - // "post" - rtFlares4.DiscardContents(); - Graphics.Blit (quarterRezColor, rtFlares4, blurAndFlaresMaterial, 3); - - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 (flareXRot * stretchWidth, flareyRot * stretchWidth, 0.0f, 0.0f)); - // stretch 1st - blurAndFlaresMaterial.SetFloat ("_StretchWidth", hollyStretchWidth); - quarterRezColor.DiscardContents(); - Graphics.Blit (rtFlares4, quarterRezColor, blurAndFlaresMaterial, 1); - // stretch 2nd - blurAndFlaresMaterial.SetFloat ("_StretchWidth", hollyStretchWidth * 2.0f); - rtFlares4.DiscardContents(); - Graphics.Blit (quarterRezColor, rtFlares4, blurAndFlaresMaterial, 1); - // stretch 3rd - blurAndFlaresMaterial.SetFloat ("_StretchWidth", hollyStretchWidth * 4.0f); - quarterRezColor.DiscardContents(); - Graphics.Blit (rtFlares4, quarterRezColor, blurAndFlaresMaterial, 1); - - // additional blur passes - for (int iter = 0; iter < hollywoodFlareBlurIterations; iter++) - { - stretchWidth = (hollyStretchWidth * 2.0f / widthOverHeight) * oneOverBaseSize; - - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 (stretchWidth * flareXRot, stretchWidth * flareyRot, 0.0f, 0.0f)); - rtFlares4.DiscardContents(); - Graphics.Blit (quarterRezColor, rtFlares4, blurAndFlaresMaterial, 4); - - blurAndFlaresMaterial.SetVector ("_Offsets", new Vector4 (stretchWidth * flareXRot, stretchWidth * flareyRot, 0.0f, 0.0f)); - quarterRezColor.DiscardContents(); - Graphics.Blit (rtFlares4, quarterRezColor, blurAndFlaresMaterial, 4); - } - - if (lensflareMode == (LensFlareStyle) 1) - // anamorphic lens flares - AddTo (1.0f, quarterRezColor, secondQuarterRezColor); - else - { - // "combined" lens flares - - Vignette (1.0f, quarterRezColor, rtFlares4); - BlendFlares (rtFlares4, quarterRezColor); - AddTo (1.0f, quarterRezColor, secondQuarterRezColor); - } - } - RenderTexture.ReleaseTemporary (rtFlares4); - } - - int blendPass = (int) realBlendMode; - //if (Mathf.Abs(chromaticBloom) < Mathf.Epsilon) - // blendPass += 4; - - screenBlend.SetFloat ("_Intensity", bloomIntensity); - screenBlend.SetTexture ("_ColorBuffer", source); - - if (quality > BloomQuality.Cheap) - { - RenderTexture halfRezColorUp = RenderTexture.GetTemporary (rtW2, rtH2, 0, rtFormat); - Graphics.Blit (secondQuarterRezColor, halfRezColorUp); - Graphics.Blit (halfRezColorUp, destination, screenBlend, blendPass); - RenderTexture.ReleaseTemporary (halfRezColorUp); - } - else - Graphics.Blit (secondQuarterRezColor, destination, screenBlend, blendPass); - - RenderTexture.ReleaseTemporary (quarterRezColor); - RenderTexture.ReleaseTemporary (secondQuarterRezColor); - } - - private void AddTo (float intensity_, RenderTexture from, RenderTexture to) - { - screenBlend.SetFloat ("_Intensity", intensity_); - to.MarkRestoreExpected(); // additive blending, RT restore expected - Graphics.Blit (from, to, screenBlend, 9); - } - - private void BlendFlares (RenderTexture from, RenderTexture to) - { - lensFlareMaterial.SetVector ("colorA", new Vector4 (flareColorA.r, flareColorA.g, flareColorA.b, flareColorA.a) * lensflareIntensity); - lensFlareMaterial.SetVector ("colorB", new Vector4 (flareColorB.r, flareColorB.g, flareColorB.b, flareColorB.a) * lensflareIntensity); - lensFlareMaterial.SetVector ("colorC", new Vector4 (flareColorC.r, flareColorC.g, flareColorC.b, flareColorC.a) * lensflareIntensity); - lensFlareMaterial.SetVector ("colorD", new Vector4 (flareColorD.r, flareColorD.g, flareColorD.b, flareColorD.a) * lensflareIntensity); - to.MarkRestoreExpected(); // additive blending, RT restore expected - Graphics.Blit (from, to, lensFlareMaterial); - } - - private void BrightFilter (float thresh, RenderTexture from, RenderTexture to) - { - brightPassFilterMaterial.SetVector ("_Threshhold", new Vector4 (thresh, thresh, thresh, thresh)); - Graphics.Blit (from, to, brightPassFilterMaterial, 0); - } - - private void BrightFilter (Color threshColor, RenderTexture from, RenderTexture to) - { - brightPassFilterMaterial.SetVector ("_Threshhold", threshColor); - Graphics.Blit (from, to, brightPassFilterMaterial, 1); - } - - private void Vignette (float amount, RenderTexture from, RenderTexture to) - { - if (lensFlareVignetteMask) - { - screenBlend.SetTexture ("_ColorBuffer", lensFlareVignetteMask); - to.MarkRestoreExpected(); // using blending, RT restore expected - Graphics.Blit (from == to ? null : from, to, screenBlend, from == to ? 7 : 3); - } - else if (from != to) - { - Graphics.SetRenderTarget (to); - GL.Clear(false, true, Color.black); // clear destination to avoid RT restore - Graphics.Blit (from, to); - } - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs.meta deleted file mode 100644 index edcd45d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Bloom.cs.meta +++ /dev/null @@ -1,17 +0,0 @@ -fileFormatVersion: 2 -guid: 7fceaeb339b971b429c4cc600acabd13 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - lensFlareVignetteMask: {fileID: 2800000, guid: 95ef4804fe0be4c999ddaa383536cde8, - type: 3} - - lensFlareShader: {fileID: 4800000, guid: 459fe69d2f6d74ddb92f04dbf45a866b, type: 3} - - screenBlendShader: {fileID: 4800000, guid: 7856cbff0a0ca45c787d5431eb805bb0, type: 3} - - blurAndFlaresShader: {fileID: 4800000, guid: be6e39cf196f146d5be72fbefb18ed75, - type: 3} - - brightPassFilterShader: {fileID: 4800000, guid: 0aeaa4cb29f5d4e9c8455f04c8575c8c, - type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs deleted file mode 100644 index 4cb19e4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs +++ /dev/null @@ -1,318 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - public enum LensflareStyle34 - { - Ghosting = 0, - Anamorphic = 1, - Combined = 2, - } - - public enum TweakMode34 - { - Basic = 0, - Complex = 1, - } - - public enum HDRBloomMode - { - Auto = 0, - On = 1, - Off = 2, - } - - public enum BloomScreenBlendMode - { - Screen = 0, - Add = 1, - } - - [ExecuteInEditMode] - [RequireComponent(typeof(Camera))] - [AddComponentMenu("Image Effects/Bloom and Glow/BloomAndFlares (3.5, Deprecated)")] - public class BloomAndFlares : PostEffectsBase - { - public TweakMode34 tweakMode = 0; - public BloomScreenBlendMode screenBlendMode = BloomScreenBlendMode.Add; - - public HDRBloomMode hdr = HDRBloomMode.Auto; - private bool doHdr = false; - public float sepBlurSpread = 1.5f; - public float useSrcAlphaAsMask = 0.5f; - - public float bloomIntensity = 1.0f; - public float bloomThreshold = 0.5f; - public int bloomBlurIterations = 2; - - public bool lensflares = false; - public int hollywoodFlareBlurIterations = 2; - public LensflareStyle34 lensflareMode = (LensflareStyle34)1; - public float hollyStretchWidth = 3.5f; - public float lensflareIntensity = 1.0f; - public float lensflareThreshold = 0.3f; - public Color flareColorA = new Color(0.4f, 0.4f, 0.8f, 0.75f); - public Color flareColorB = new Color(0.4f, 0.8f, 0.8f, 0.75f); - public Color flareColorC = new Color(0.8f, 0.4f, 0.8f, 0.75f); - public Color flareColorD = new Color(0.8f, 0.4f, 0.0f, 0.75f); - public Texture2D lensFlareVignetteMask; - - public Shader lensFlareShader; - private Material lensFlareMaterial; - - public Shader vignetteShader; - private Material vignetteMaterial; - - public Shader separableBlurShader; - private Material separableBlurMaterial; - - public Shader addBrightStuffOneOneShader; - private Material addBrightStuffBlendOneOneMaterial; - - public Shader screenBlendShader; - private Material screenBlend; - - public Shader hollywoodFlaresShader; - private Material hollywoodFlaresMaterial; - - public Shader brightPassFilterShader; - private Material brightPassFilterMaterial; - - - public override bool CheckResources() - { - CheckSupport(false); - - screenBlend = CheckShaderAndCreateMaterial(screenBlendShader, screenBlend); - lensFlareMaterial = CheckShaderAndCreateMaterial(lensFlareShader, lensFlareMaterial); - vignetteMaterial = CheckShaderAndCreateMaterial(vignetteShader, vignetteMaterial); - separableBlurMaterial = CheckShaderAndCreateMaterial(separableBlurShader, separableBlurMaterial); - addBrightStuffBlendOneOneMaterial = CheckShaderAndCreateMaterial(addBrightStuffOneOneShader, addBrightStuffBlendOneOneMaterial); - hollywoodFlaresMaterial = CheckShaderAndCreateMaterial(hollywoodFlaresShader, hollywoodFlaresMaterial); - brightPassFilterMaterial = CheckShaderAndCreateMaterial(brightPassFilterShader, brightPassFilterMaterial); - - if (!isSupported) - ReportAutoDisable(); - return isSupported; - } - - void OnRenderImage(RenderTexture source, RenderTexture destination) - { - if (CheckResources() == false) - { - Graphics.Blit(source, destination); - return; - } - - // screen blend is not supported when HDR is enabled (will cap values) - - doHdr = false; - if (hdr == HDRBloomMode.Auto) -#if UNITY_5_6_OR_NEWER - doHdr = source.format == RenderTextureFormat.ARGBHalf && GetComponent().allowHDR; -#else - doHdr = source.format == RenderTextureFormat.ARGBHalf && GetComponent().hdr; -#endif - else - { - doHdr = hdr == HDRBloomMode.On; - } - - doHdr = doHdr && supportHDRTextures; - - BloomScreenBlendMode realBlendMode = screenBlendMode; - if (doHdr) - realBlendMode = BloomScreenBlendMode.Add; - - var rtFormat = (doHdr) ? RenderTextureFormat.ARGBHalf : RenderTextureFormat.Default; - RenderTexture halfRezColor = RenderTexture.GetTemporary(source.width / 2, source.height / 2, 0, rtFormat); - RenderTexture quarterRezColor = RenderTexture.GetTemporary(source.width / 4, source.height / 4, 0, rtFormat); - RenderTexture secondQuarterRezColor = RenderTexture.GetTemporary(source.width / 4, source.height / 4, 0, rtFormat); - RenderTexture thirdQuarterRezColor = RenderTexture.GetTemporary(source.width / 4, source.height / 4, 0, rtFormat); - - float widthOverHeight = (1.0f * source.width) / (1.0f * source.height); - float oneOverBaseSize = 1.0f / 512.0f; - - // downsample - - Graphics.Blit(source, halfRezColor, screenBlend, 2); // <- 2 is stable downsample - Graphics.Blit(halfRezColor, quarterRezColor, screenBlend, 2); // <- 2 is stable downsample - - RenderTexture.ReleaseTemporary(halfRezColor); - - // cut colors (thresholding) - - BrightFilter(bloomThreshold, useSrcAlphaAsMask, quarterRezColor, secondQuarterRezColor); - quarterRezColor.DiscardContents(); - - // blurring - - if (bloomBlurIterations < 1) bloomBlurIterations = 1; - - for (int iter = 0; iter < bloomBlurIterations; iter++) - { - float spreadForPass = (1.0f + (iter * 0.5f)) * sepBlurSpread; - separableBlurMaterial.SetVector("offsets", new Vector4(0.0f, spreadForPass * oneOverBaseSize, 0.0f, 0.0f)); - - RenderTexture src = iter == 0 ? secondQuarterRezColor : quarterRezColor; - Graphics.Blit(src, thirdQuarterRezColor, separableBlurMaterial); - src.DiscardContents(); - - separableBlurMaterial.SetVector("offsets", new Vector4((spreadForPass / widthOverHeight) * oneOverBaseSize, 0.0f, 0.0f, 0.0f)); - Graphics.Blit(thirdQuarterRezColor, quarterRezColor, separableBlurMaterial); - thirdQuarterRezColor.DiscardContents(); - } - - // lens flares: ghosting, anamorphic or a combination - - if (lensflares) - { - - if (lensflareMode == 0) - { - - BrightFilter(lensflareThreshold, 0.0f, quarterRezColor, thirdQuarterRezColor); - quarterRezColor.DiscardContents(); - - // smooth a little, this needs to be resolution dependent - /* - separableBlurMaterial.SetVector ("offsets", Vector4 (0.0ff, (2.0ff) / (1.0ff * quarterRezColor.height), 0.0ff, 0.0ff)); - Graphics.Blit (thirdQuarterRezColor, secondQuarterRezColor, separableBlurMaterial); - separableBlurMaterial.SetVector ("offsets", Vector4 ((2.0ff) / (1.0ff * quarterRezColor.width), 0.0ff, 0.0ff, 0.0ff)); - Graphics.Blit (secondQuarterRezColor, thirdQuarterRezColor, separableBlurMaterial); - */ - // no ugly edges! - - Vignette(0.975f, thirdQuarterRezColor, secondQuarterRezColor); - thirdQuarterRezColor.DiscardContents(); - - BlendFlares(secondQuarterRezColor, quarterRezColor); - secondQuarterRezColor.DiscardContents(); - } - - // (b) hollywood/anamorphic flares? - - else - { - - // thirdQuarter has the brightcut unblurred colors - // quarterRezColor is the blurred, brightcut buffer that will end up as bloom - - hollywoodFlaresMaterial.SetVector("_threshold", new Vector4(lensflareThreshold, 1.0f / (1.0f - lensflareThreshold), 0.0f, 0.0f)); - hollywoodFlaresMaterial.SetVector("tintColor", new Vector4(flareColorA.r, flareColorA.g, flareColorA.b, flareColorA.a) * flareColorA.a * lensflareIntensity); - Graphics.Blit(thirdQuarterRezColor, secondQuarterRezColor, hollywoodFlaresMaterial, 2); - thirdQuarterRezColor.DiscardContents(); - - Graphics.Blit(secondQuarterRezColor, thirdQuarterRezColor, hollywoodFlaresMaterial, 3); - secondQuarterRezColor.DiscardContents(); - - hollywoodFlaresMaterial.SetVector("offsets", new Vector4((sepBlurSpread * 1.0f / widthOverHeight) * oneOverBaseSize, 0.0f, 0.0f, 0.0f)); - hollywoodFlaresMaterial.SetFloat("stretchWidth", hollyStretchWidth); - Graphics.Blit(thirdQuarterRezColor, secondQuarterRezColor, hollywoodFlaresMaterial, 1); - thirdQuarterRezColor.DiscardContents(); - - hollywoodFlaresMaterial.SetFloat("stretchWidth", hollyStretchWidth * 2.0f); - Graphics.Blit(secondQuarterRezColor, thirdQuarterRezColor, hollywoodFlaresMaterial, 1); - secondQuarterRezColor.DiscardContents(); - - hollywoodFlaresMaterial.SetFloat("stretchWidth", hollyStretchWidth * 4.0f); - Graphics.Blit(thirdQuarterRezColor, secondQuarterRezColor, hollywoodFlaresMaterial, 1); - thirdQuarterRezColor.DiscardContents(); - - if (lensflareMode == (LensflareStyle34)1) - { - for (int itera = 0; itera < hollywoodFlareBlurIterations; itera++) - { - separableBlurMaterial.SetVector("offsets", new Vector4((hollyStretchWidth * 2.0f / widthOverHeight) * oneOverBaseSize, 0.0f, 0.0f, 0.0f)); - Graphics.Blit(secondQuarterRezColor, thirdQuarterRezColor, separableBlurMaterial); - secondQuarterRezColor.DiscardContents(); - - separableBlurMaterial.SetVector("offsets", new Vector4((hollyStretchWidth * 2.0f / widthOverHeight) * oneOverBaseSize, 0.0f, 0.0f, 0.0f)); - Graphics.Blit(thirdQuarterRezColor, secondQuarterRezColor, separableBlurMaterial); - thirdQuarterRezColor.DiscardContents(); - } - - AddTo(1.0f, secondQuarterRezColor, quarterRezColor); - secondQuarterRezColor.DiscardContents(); - } - else - { - - // (c) combined - - for (int ix = 0; ix < hollywoodFlareBlurIterations; ix++) - { - separableBlurMaterial.SetVector("offsets", new Vector4((hollyStretchWidth * 2.0f / widthOverHeight) * oneOverBaseSize, 0.0f, 0.0f, 0.0f)); - Graphics.Blit(secondQuarterRezColor, thirdQuarterRezColor, separableBlurMaterial); - secondQuarterRezColor.DiscardContents(); - - separableBlurMaterial.SetVector("offsets", new Vector4((hollyStretchWidth * 2.0f / widthOverHeight) * oneOverBaseSize, 0.0f, 0.0f, 0.0f)); - Graphics.Blit(thirdQuarterRezColor, secondQuarterRezColor, separableBlurMaterial); - thirdQuarterRezColor.DiscardContents(); - } - - Vignette(1.0f, secondQuarterRezColor, thirdQuarterRezColor); - secondQuarterRezColor.DiscardContents(); - - BlendFlares(thirdQuarterRezColor, secondQuarterRezColor); - thirdQuarterRezColor.DiscardContents(); - - AddTo(1.0f, secondQuarterRezColor, quarterRezColor); - secondQuarterRezColor.DiscardContents(); - } - } - } - - // screen blend bloom results to color buffer - - screenBlend.SetFloat("_Intensity", bloomIntensity); - screenBlend.SetTexture("_ColorBuffer", source); - Graphics.Blit(quarterRezColor, destination, screenBlend, (int)realBlendMode); - - RenderTexture.ReleaseTemporary(quarterRezColor); - RenderTexture.ReleaseTemporary(secondQuarterRezColor); - RenderTexture.ReleaseTemporary(thirdQuarterRezColor); - } - - private void AddTo(float intensity_, RenderTexture from, RenderTexture to) - { - addBrightStuffBlendOneOneMaterial.SetFloat("_Intensity", intensity_); - Graphics.Blit(from, to, addBrightStuffBlendOneOneMaterial); - } - - private void BlendFlares(RenderTexture from, RenderTexture to) - { - lensFlareMaterial.SetVector("colorA", new Vector4(flareColorA.r, flareColorA.g, flareColorA.b, flareColorA.a) * lensflareIntensity); - lensFlareMaterial.SetVector("colorB", new Vector4(flareColorB.r, flareColorB.g, flareColorB.b, flareColorB.a) * lensflareIntensity); - lensFlareMaterial.SetVector("colorC", new Vector4(flareColorC.r, flareColorC.g, flareColorC.b, flareColorC.a) * lensflareIntensity); - lensFlareMaterial.SetVector("colorD", new Vector4(flareColorD.r, flareColorD.g, flareColorD.b, flareColorD.a) * lensflareIntensity); - Graphics.Blit(from, to, lensFlareMaterial); - } - - private void BrightFilter(float thresh, float useAlphaAsMask, RenderTexture from, RenderTexture to) - { - if (doHdr) - brightPassFilterMaterial.SetVector("threshold", new Vector4(thresh, 1.0f, 0.0f, 0.0f)); - else - brightPassFilterMaterial.SetVector("threshold", new Vector4(thresh, 1.0f / (1.0f - thresh), 0.0f, 0.0f)); - brightPassFilterMaterial.SetFloat("useSrcAlphaAsMask", useAlphaAsMask); - Graphics.Blit(from, to, brightPassFilterMaterial); - } - - private void Vignette(float amount, RenderTexture from, RenderTexture to) - { - if (lensFlareVignetteMask) - { - screenBlend.SetTexture("_ColorBuffer", lensFlareVignetteMask); - Graphics.Blit(from, to, screenBlend, 3); - } - else - { - vignetteMaterial.SetFloat("vignetteIntensity", amount); - Graphics.Blit(from, to, vignetteMaterial); - } - } - - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs.meta deleted file mode 100644 index d3b3c7b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomAndFlares.cs.meta +++ /dev/null @@ -1,22 +0,0 @@ -fileFormatVersion: 2 -guid: 02536f33053638549ab5c50ff3ecc0de -MonoImporter: - serializedVersion: 2 - defaultReferences: - - lensFlareVignetteMask: {fileID: 2800000, guid: 95ef4804fe0be4c999ddaa383536cde8, - type: 3} - - lensFlareShader: {fileID: 4800000, guid: 459fe69d2f6d74ddb92f04dbf45a866b, type: 3} - - vignetteShader: {fileID: 4800000, guid: 627943dc7a9a74286b70a4f694a0acd5, type: 3} - - separableBlurShader: {fileID: 4800000, guid: a9df009a214e24a5ebbf271595f8d5b6, - type: 3} - - addBrightStuffOneOneShader: {fileID: 4800000, guid: f7898d203e9b94c0dbe2bf9dd5cb32c0, - type: 3} - - screenBlendShader: {fileID: 4800000, guid: 53b3960ee3d3d4a5caa8d5473d120187, type: 3} - - hollywoodFlaresShader: {fileID: 4800000, guid: e2baf3cae8edc4daf94c9adc2154be00, - type: 3} - - brightPassFilterShader: {fileID: 4800000, guid: 186c4c0d31e314f049595dcbaf4ca129, - type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs deleted file mode 100644 index f7d9251..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Bloom and Glow/Bloom (Optimized)")] - public class BloomOptimized : PostEffectsBase - { - - public enum Resolution - { - Low = 0, - High = 1, - } - - public enum BlurType - { - Standard = 0, - Sgx = 1, - } - - [Range(0.0f, 1.5f)] - public float threshold = 0.25f; - [Range(0.0f, 2.5f)] - public float intensity = 0.75f; - - [Range(0.25f, 5.5f)] - public float blurSize = 1.0f; - - Resolution resolution = Resolution.Low; - [Range(1, 4)] - public int blurIterations = 1; - - public BlurType blurType= BlurType.Standard; - - public Shader fastBloomShader = null; - private Material fastBloomMaterial = null; - - - public override bool CheckResources () - { - CheckSupport (false); - - fastBloomMaterial = CheckShaderAndCreateMaterial (fastBloomShader, fastBloomMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnDisable () - { - if (fastBloomMaterial) - DestroyImmediate (fastBloomMaterial); - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources() == false) - { - Graphics.Blit (source, destination); - return; - } - - int divider = resolution == Resolution.Low ? 4 : 2; - float widthMod = resolution == Resolution.Low ? 0.5f : 1.0f; - - fastBloomMaterial.SetVector ("_Parameter", new Vector4 (blurSize * widthMod, 0.0f, threshold, intensity)); - source.filterMode = FilterMode.Bilinear; - - var rtW= source.width/divider; - var rtH= source.height/divider; - - // downsample - RenderTexture rt = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); - rt.filterMode = FilterMode.Bilinear; - Graphics.Blit (source, rt, fastBloomMaterial, 1); - - var passOffs= blurType == BlurType.Standard ? 0 : 2; - - for(int i = 0; i < blurIterations; i++) - { - fastBloomMaterial.SetVector ("_Parameter", new Vector4 (blurSize * widthMod + (i*1.0f), 0.0f, threshold, intensity)); - - // vertical blur - RenderTexture rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); - rt2.filterMode = FilterMode.Bilinear; - Graphics.Blit (rt, rt2, fastBloomMaterial, 2 + passOffs); - RenderTexture.ReleaseTemporary (rt); - rt = rt2; - - // horizontal blur - rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); - rt2.filterMode = FilterMode.Bilinear; - Graphics.Blit (rt, rt2, fastBloomMaterial, 3 + passOffs); - RenderTexture.ReleaseTemporary (rt); - rt = rt2; - } - - fastBloomMaterial.SetTexture ("_Bloom", rt); - - Graphics.Blit (source, destination, fastBloomMaterial, 0); - - RenderTexture.ReleaseTemporary (rt); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs.meta deleted file mode 100644 index 68dcfc1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BloomOptimized.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 4975a6e437fc3b149a8cd508ce5bdd69 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - fastBloomShader: {fileID: 4800000, guid: 68a00c837b82e4c6d92e7da765dc5f1d, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs deleted file mode 100644 index 1db8a3f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Blur/Blur")] - public class Blur : MonoBehaviour - { - /// Blur iterations - larger number means more blur. - [Range(0,10)] - public int iterations = 3; - - /// Blur spread for each iteration. Lower values - /// give better looking blur, but require more iterations to - /// get large blurs. Value is usually between 0.5 and 1.0. - [Range(0.0f,1.0f)] - public float blurSpread = 0.6f; - - - // -------------------------------------------------------- - // The blur iteration shader. - // Basically it just takes 4 texture samples and averages them. - // By applying it repeatedly and spreading out sample locations - // we get a Gaussian blur approximation. - - public Shader blurShader = null; - - static Material m_Material = null; - protected Material material { - get { - if (m_Material == null) { - m_Material = new Material(blurShader); - m_Material.hideFlags = HideFlags.DontSave; - } - return m_Material; - } - } - - protected void OnDisable() { - if ( m_Material ) { - DestroyImmediate( m_Material ); - } - } - - // -------------------------------------------------------- - - protected void Start() - { - // Disable if we don't support image effects - if (!SystemInfo.supportsImageEffects) { - enabled = false; - return; - } - // Disable if the shader can't run on the users graphics card - if (!blurShader || !material.shader.isSupported) { - enabled = false; - return; - } - } - - // Performs one blur iteration. - public void FourTapCone (RenderTexture source, RenderTexture dest, int iteration) - { - float off = 0.5f + iteration*blurSpread; - Graphics.BlitMultiTap (source, dest, material, - new Vector2(-off, -off), - new Vector2(-off, off), - new Vector2( off, off), - new Vector2( off, -off) - ); - } - - // Downsamples the texture to a quarter resolution. - private void DownSample4x (RenderTexture source, RenderTexture dest) - { - float off = 1.0f; - Graphics.BlitMultiTap (source, dest, material, - new Vector2(-off, -off), - new Vector2(-off, off), - new Vector2( off, off), - new Vector2( off, -off) - ); - } - - // Called by the camera to apply the image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) { - int rtW = source.width/4; - int rtH = source.height/4; - RenderTexture buffer = RenderTexture.GetTemporary(rtW, rtH, 0); - - // Copy source to the 4x4 smaller texture. - DownSample4x (source, buffer); - - // Blur the small texture - for(int i = 0; i < iterations; i++) - { - RenderTexture buffer2 = RenderTexture.GetTemporary(rtW, rtH, 0); - FourTapCone (buffer, buffer2, i); - RenderTexture.ReleaseTemporary(buffer); - buffer = buffer2; - } - Graphics.Blit(buffer, destination); - - RenderTexture.ReleaseTemporary(buffer); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs.meta deleted file mode 100644 index c4bb7e7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Blur.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 34382083ad114a07d000fbfb8d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - blurShader: {fileID: 4800000, guid: 57e6deea7c2924e22a5138e2b70bb4dc, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs deleted file mode 100644 index c922dbe..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Blur/Blur (Optimized)")] - public class BlurOptimized : PostEffectsBase - { - - [Range(0, 2)] - public int downsample = 1; - - public enum BlurType { - StandardGauss = 0, - SgxGauss = 1, - } - - [Range(0.0f, 10.0f)] - public float blurSize = 3.0f; - - [Range(1, 4)] - public int blurIterations = 2; - - public BlurType blurType= BlurType.StandardGauss; - - public Shader blurShader = null; - private Material blurMaterial = null; - - - public override bool CheckResources () { - CheckSupport (false); - - blurMaterial = CheckShaderAndCreateMaterial (blurShader, blurMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - public void OnDisable () { - if (blurMaterial) - DestroyImmediate (blurMaterial); - } - - public void OnRenderImage (RenderTexture source, RenderTexture destination) { - if (CheckResources() == false) { - Graphics.Blit (source, destination); - return; - } - - float widthMod = 1.0f / (1.0f * (1<> downsample; - int rtH = source.height >> downsample; - - // downsample - RenderTexture rt = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); - - rt.filterMode = FilterMode.Bilinear; - Graphics.Blit (source, rt, blurMaterial, 0); - - var passOffs= blurType == BlurType.StandardGauss ? 0 : 2; - - for(int i = 0; i < blurIterations; i++) { - float iterationOffs = (i*1.0f); - blurMaterial.SetVector ("_Parameter", new Vector4 (blurSize * widthMod + iterationOffs, -blurSize * widthMod - iterationOffs, 0.0f, 0.0f)); - - // vertical blur - RenderTexture rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); - rt2.filterMode = FilterMode.Bilinear; - Graphics.Blit (rt, rt2, blurMaterial, 1 + passOffs); - RenderTexture.ReleaseTemporary (rt); - rt = rt2; - - // horizontal blur - rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); - rt2.filterMode = FilterMode.Bilinear; - Graphics.Blit (rt, rt2, blurMaterial, 2 + passOffs); - RenderTexture.ReleaseTemporary (rt); - rt = rt2; - } - - Graphics.Blit (rt, destination); - - RenderTexture.ReleaseTemporary (rt); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs.meta deleted file mode 100644 index 47ca17b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/BlurOptimized.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7fc6bde01469c7b4badee5362f191d96 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - blurShader: {fileID: 4800000, guid: f9d5fa183cd6b45eeb1491f74863cd91, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs deleted file mode 100644 index b9cba5d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs +++ /dev/null @@ -1,408 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Camera/Camera Motion Blur") ] - public class CameraMotionBlur : PostEffectsBase - { - // make sure to match this to MAX_RADIUS in shader ('k' in paper) - static float MAX_RADIUS = 10.0f; - - public enum MotionBlurFilter { - CameraMotion = 0, // global screen blur based on cam motion - LocalBlur = 1, // cheap blur, no dilation or scattering - Reconstruction = 2, // advanced filter (simulates scattering) as in plausible motion blur paper - ReconstructionDX11 = 3, // advanced filter (simulates scattering) as in plausible motion blur paper - ReconstructionDisc = 4, // advanced filter using scaled poisson disc sampling - } - - // settings - public MotionBlurFilter filterType = MotionBlurFilter.Reconstruction; - public bool preview = false; // show how blur would look like in action ... - public Vector3 previewScale = Vector3.one; // ... given this movement vector - - // params - public float movementScale = 0.0f; - public float rotationScale = 1.0f; - public float maxVelocity = 8.0f; // maximum velocity in pixels - public float minVelocity = 0.1f; // minimum velocity in pixels - public float velocityScale = 0.375f; // global velocity scale - public float softZDistance = 0.005f; // for z overlap check softness (reconstruction filter only) - public int velocityDownsample = 1; // low resolution velocity buffer? (optimization) - public LayerMask excludeLayers = 0; - private GameObject tmpCam = null; - - // resources - public Shader shader; - public Shader dx11MotionBlurShader; - public Shader replacementClear; - - private Material motionBlurMaterial = null; - private Material dx11MotionBlurMaterial = null; - - public Texture2D noiseTexture = null; - public float jitter = 0.05f; - - // (internal) debug - public bool showVelocity = false; - public float showVelocityScale = 1.0f; - - // camera transforms - private Matrix4x4 currentViewProjMat; - private Matrix4x4[] currentStereoViewProjMat; - private Matrix4x4 prevViewProjMat; - private Matrix4x4[] prevStereoViewProjMat; - private int prevFrameCount; - private bool wasActive; - // shortcuts to calculate global blur direction when using 'CameraMotion' - private Vector3 prevFrameForward = Vector3.forward; - private Vector3 prevFrameUp = Vector3.up; - private Vector3 prevFramePos = Vector3.zero; - private Camera _camera; - - - private void CalculateViewProjection () { - Matrix4x4 viewMat = _camera.worldToCameraMatrix; - Matrix4x4 projMat = GL.GetGPUProjectionMatrix (_camera.projectionMatrix, true); - currentViewProjMat = projMat * viewMat; - - if(_camera.stereoEnabled) - { - for (int eye = 0; eye < 2; ++eye) - { - Matrix4x4 stereoViewMat = _camera.GetStereoViewMatrix(eye == 0 ? Camera.StereoscopicEye.Left : Camera.StereoscopicEye.Right); - Matrix4x4 stereoProjMat = _camera.GetStereoProjectionMatrix(eye == 0 ? Camera.StereoscopicEye.Left : Camera.StereoscopicEye.Right); - stereoProjMat = GL.GetGPUProjectionMatrix(stereoProjMat, true); - currentStereoViewProjMat[eye] = stereoProjMat * stereoViewMat; - } - } - } - - - new void Start () { - CheckResources (); - - if (_camera == null) - _camera = GetComponent(); - - wasActive = gameObject.activeInHierarchy; - currentStereoViewProjMat = new Matrix4x4[2]; - prevStereoViewProjMat = new Matrix4x4[2]; - CalculateViewProjection (); - Remember (); - wasActive = false; // hack to fake position/rotation update and prevent bad blurs - } - - void OnEnable () { - - if (_camera == null) - _camera = GetComponent(); - - _camera.depthTextureMode |= DepthTextureMode.Depth; - } - - void OnDisable () { - if (null != motionBlurMaterial) { - DestroyImmediate (motionBlurMaterial); - motionBlurMaterial = null; - } - if (null != dx11MotionBlurMaterial) { - DestroyImmediate (dx11MotionBlurMaterial); - dx11MotionBlurMaterial = null; - } - if (null != tmpCam) { - DestroyImmediate (tmpCam); - tmpCam = null; - } - } - - - public override bool CheckResources () { - CheckSupport (true, true); // depth & hdr needed - motionBlurMaterial = CheckShaderAndCreateMaterial (shader, motionBlurMaterial); - - if (supportDX11 && filterType == MotionBlurFilter.ReconstructionDX11) { - dx11MotionBlurMaterial = CheckShaderAndCreateMaterial (dx11MotionBlurShader, dx11MotionBlurMaterial); - } - - if (!isSupported) - ReportAutoDisable (); - - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) { - if (false == CheckResources ()) { - Graphics.Blit (source, destination); - return; - } - - if (filterType == MotionBlurFilter.CameraMotion) - StartFrame (); - - // use if possible new RG format ... fallback to half otherwise - var rtFormat= SystemInfo.SupportsRenderTextureFormat (RenderTextureFormat.RGHalf) ? RenderTextureFormat.RGHalf : RenderTextureFormat.ARGBHalf; - - // get temp textures - RenderTexture velBuffer = RenderTexture.GetTemporary (divRoundUp (source.width, velocityDownsample), divRoundUp (source.height, velocityDownsample), 0, rtFormat); - int tileWidth = 1; - int tileHeight = 1; - maxVelocity = Mathf.Max (2.0f, maxVelocity); - - float _maxVelocity = maxVelocity; // calculate 'k' - // note: 's' is hardcoded in shaders except for DX11 path - - // auto DX11 fallback! - bool fallbackFromDX11 = filterType == MotionBlurFilter.ReconstructionDX11 && dx11MotionBlurMaterial == null; - - if (filterType == MotionBlurFilter.Reconstruction || fallbackFromDX11 || filterType == MotionBlurFilter.ReconstructionDisc) { - maxVelocity = Mathf.Min (maxVelocity, MAX_RADIUS); - tileWidth = divRoundUp (velBuffer.width, (int) maxVelocity); - tileHeight = divRoundUp (velBuffer.height, (int) maxVelocity); - _maxVelocity = velBuffer.width/tileWidth; - } - else { - tileWidth = divRoundUp (velBuffer.width, (int) maxVelocity); - tileHeight = divRoundUp (velBuffer.height, (int) maxVelocity); - _maxVelocity = velBuffer.width/tileWidth; - } - - RenderTexture tileMax = RenderTexture.GetTemporary (tileWidth, tileHeight, 0, rtFormat); - RenderTexture neighbourMax = RenderTexture.GetTemporary (tileWidth, tileHeight, 0, rtFormat); - velBuffer.filterMode = FilterMode.Point; - tileMax.filterMode = FilterMode.Point; - neighbourMax.filterMode = FilterMode.Point; - if (noiseTexture) noiseTexture.filterMode = FilterMode.Point; - source.wrapMode = TextureWrapMode.Clamp; - velBuffer.wrapMode = TextureWrapMode.Clamp; - neighbourMax.wrapMode = TextureWrapMode.Clamp; - tileMax.wrapMode = TextureWrapMode.Clamp; - - // calc correct viewprj matrix - CalculateViewProjection (); - - // just started up? - if (gameObject.activeInHierarchy && !wasActive) { - Remember (); - } - wasActive = gameObject.activeInHierarchy; - - // matrices - Matrix4x4 invViewPrj = Matrix4x4.Inverse (currentViewProjMat); - motionBlurMaterial.SetMatrix ("_InvViewProj", invViewPrj); - motionBlurMaterial.SetMatrix ("_PrevViewProj", prevViewProjMat); - motionBlurMaterial.SetMatrix ("_ToPrevViewProjCombined", prevViewProjMat * invViewPrj); - if(_camera.stereoEnabled) - { - Matrix4x4[] invStereoViewPrj = new Matrix4x4[2]; - invStereoViewPrj[0] = Matrix4x4.Inverse(currentStereoViewProjMat[0]); - invStereoViewPrj[1] = Matrix4x4.Inverse(currentStereoViewProjMat[1]); - - Matrix4x4 combined = prevStereoViewProjMat[0] * invStereoViewPrj[0]; - motionBlurMaterial.SetMatrix("_StereoToPrevViewProjCombined0", combined); - motionBlurMaterial.SetMatrix("_StereoToPrevViewProjCombined1", prevStereoViewProjMat[1] * invStereoViewPrj[1]); - } - - motionBlurMaterial.SetFloat ("_MaxVelocity", _maxVelocity); - motionBlurMaterial.SetFloat ("_MaxRadiusOrKInPaper", _maxVelocity); - motionBlurMaterial.SetFloat ("_MinVelocity", minVelocity); - motionBlurMaterial.SetFloat ("_VelocityScale", velocityScale); - motionBlurMaterial.SetFloat ("_Jitter", jitter); - - // texture samplers - motionBlurMaterial.SetTexture ("_NoiseTex", noiseTexture); - motionBlurMaterial.SetTexture ("_VelTex", velBuffer); - motionBlurMaterial.SetTexture ("_NeighbourMaxTex", neighbourMax); - motionBlurMaterial.SetTexture ("_TileTexDebug", tileMax); - - if (preview) { - // generate an artificial 'previous' matrix to simulate blur look - Matrix4x4 viewMat = _camera.worldToCameraMatrix; - Matrix4x4 offset = Matrix4x4.identity; - offset.SetTRS(previewScale * 0.3333f, Quaternion.identity, Vector3.one); // using only translation - Matrix4x4 projMat = GL.GetGPUProjectionMatrix (_camera.projectionMatrix, true); - prevViewProjMat = projMat * offset * viewMat; - motionBlurMaterial.SetMatrix ("_PrevViewProj", prevViewProjMat); - motionBlurMaterial.SetMatrix ("_ToPrevViewProjCombined", prevViewProjMat * invViewPrj); - } - - if (filterType == MotionBlurFilter.CameraMotion) - { - // build blur vector to be used in shader to create a global blur direction - Vector4 blurVector = Vector4.zero; - - float lookUpDown = Vector3.Dot (transform.up, Vector3.up); - Vector3 distanceVector = prevFramePos-transform.position; - - float distMag = distanceVector.magnitude; - - float farHeur = 1.0f; - - // pitch (vertical) - farHeur = (Vector3.Angle (transform.up, prevFrameUp) / _camera.fieldOfView) * (source.width * 0.75f); - blurVector.x = rotationScale * farHeur;//Mathf.Clamp01((1.0ff-Vector3.Dot(transform.up, prevFrameUp))); - - // yaw #1 (horizontal, faded by pitch) - farHeur = (Vector3.Angle (transform.forward, prevFrameForward) / _camera.fieldOfView) * (source.width * 0.75f); - blurVector.y = rotationScale * lookUpDown * farHeur;//Mathf.Clamp01((1.0ff-Vector3.Dot(transform.forward, prevFrameForward))); - - // yaw #2 (when looking down, faded by 1-pitch) - farHeur = (Vector3.Angle (transform.forward, prevFrameForward) / _camera.fieldOfView) * (source.width * 0.75f); - blurVector.z = rotationScale * (1.0f- lookUpDown) * farHeur;//Mathf.Clamp01((1.0ff-Vector3.Dot(transform.forward, prevFrameForward))); - - if (distMag > Mathf.Epsilon && movementScale > Mathf.Epsilon) { - // forward (probably most important) - blurVector.w = movementScale * (Vector3.Dot (transform.forward, distanceVector) ) * (source.width * 0.5f); - // jump (maybe scale down further) - blurVector.x += movementScale * (Vector3.Dot (transform.up, distanceVector) ) * (source.width * 0.5f); - // strafe (maybe scale down further) - blurVector.y += movementScale * (Vector3.Dot (transform.right, distanceVector) ) * (source.width * 0.5f); - } - - if (preview) // crude approximation - motionBlurMaterial.SetVector ("_BlurDirectionPacked", new Vector4 (previewScale.y, previewScale.x, 0.0f, previewScale.z) * 0.5f * _camera.fieldOfView); - else - motionBlurMaterial.SetVector ("_BlurDirectionPacked", blurVector); - } - else { - // generate velocity buffer - Graphics.Blit (source, velBuffer, motionBlurMaterial, 0); - - // patch up velocity buffer: - - // exclude certain layers (e.g. skinned objects as we cant really support that atm) - - Camera cam = null; - if (excludeLayers.value != 0)// || dynamicLayers.value) - cam = GetTmpCam (); - - if (cam && excludeLayers.value != 0 && replacementClear && replacementClear.isSupported) { - cam.targetTexture = velBuffer; - cam.cullingMask = excludeLayers; - cam.RenderWithShader (replacementClear, ""); - } - } - - if (!preview && Time.frameCount != prevFrameCount) { - // remember current transformation data for next frame - prevFrameCount = Time.frameCount; - Remember (); - } - - source.filterMode = FilterMode.Bilinear; - - // debug vel buffer: - if (showVelocity) { - // generate tile max and neighbour max - //Graphics.Blit (velBuffer, tileMax, motionBlurMaterial, 2); - //Graphics.Blit (tileMax, neighbourMax, motionBlurMaterial, 3); - motionBlurMaterial.SetFloat ("_DisplayVelocityScale", showVelocityScale); - Graphics.Blit (velBuffer, destination, motionBlurMaterial, 1); - } - else { - if (filterType == MotionBlurFilter.ReconstructionDX11 && !fallbackFromDX11) { - // need to reset some parameters for dx11 shader - dx11MotionBlurMaterial.SetFloat ("_MinVelocity", minVelocity); - dx11MotionBlurMaterial.SetFloat ("_VelocityScale", velocityScale); - dx11MotionBlurMaterial.SetFloat ("_Jitter", jitter); - - // texture samplers - dx11MotionBlurMaterial.SetTexture ("_NoiseTex", noiseTexture); - dx11MotionBlurMaterial.SetTexture ("_VelTex", velBuffer); - dx11MotionBlurMaterial.SetTexture ("_NeighbourMaxTex", neighbourMax); - - dx11MotionBlurMaterial.SetFloat ("_SoftZDistance", Mathf.Max(0.00025f, softZDistance) ); - dx11MotionBlurMaterial.SetFloat ("_MaxRadiusOrKInPaper", _maxVelocity); - - // generate tile max and neighbour max - Graphics.Blit (velBuffer, tileMax, dx11MotionBlurMaterial, 0); - Graphics.Blit (tileMax, neighbourMax, dx11MotionBlurMaterial, 1); - - // final blur - Graphics.Blit (source, destination, dx11MotionBlurMaterial, 2); - } - else if (filterType == MotionBlurFilter.Reconstruction || fallbackFromDX11) { - // 'reconstructing' properly integrated color - motionBlurMaterial.SetFloat ("_SoftZDistance", Mathf.Max(0.00025f, softZDistance) ); - - // generate tile max and neighbour max - Graphics.Blit (velBuffer, tileMax, motionBlurMaterial, 2); - Graphics.Blit (tileMax, neighbourMax, motionBlurMaterial, 3); - - // final blur - Graphics.Blit (source, destination, motionBlurMaterial, 4); - } - else if (filterType == MotionBlurFilter.CameraMotion) { - // orange box style motion blur - Graphics.Blit (source, destination, motionBlurMaterial, 6); - } - else if (filterType == MotionBlurFilter.ReconstructionDisc) { - // dof style motion blur defocuing and ellipse around the princical blur direction - // 'reconstructing' properly integrated color - motionBlurMaterial.SetFloat ("_SoftZDistance", Mathf.Max(0.00025f, softZDistance) ); - - // generate tile max and neighbour max - Graphics.Blit (velBuffer, tileMax, motionBlurMaterial, 2); - Graphics.Blit (tileMax, neighbourMax, motionBlurMaterial, 3); - - Graphics.Blit (source, destination, motionBlurMaterial, 7); - } - else { - // simple & fast blur (low quality): just blurring along velocity - Graphics.Blit (source, destination, motionBlurMaterial, 5); - } - } - - // cleanup - RenderTexture.ReleaseTemporary (velBuffer); - RenderTexture.ReleaseTemporary (tileMax); - RenderTexture.ReleaseTemporary (neighbourMax); - } - - void Remember () { - prevViewProjMat = currentViewProjMat; - prevFrameForward = transform.forward; - prevFrameUp = transform.up; - prevFramePos = transform.position; - prevStereoViewProjMat[0] = currentStereoViewProjMat[0]; - prevStereoViewProjMat[1] = currentStereoViewProjMat[1]; - } - - Camera GetTmpCam () { - if (tmpCam == null) { - string name = "_" + _camera.name + "_MotionBlurTmpCam"; - GameObject go = GameObject.Find (name); - if (null == go) // couldn't find, recreate - tmpCam = new GameObject (name, typeof (Camera)); - else - tmpCam = go; - } - - tmpCam.hideFlags = HideFlags.DontSave; - tmpCam.transform.position = _camera.transform.position; - tmpCam.transform.rotation = _camera.transform.rotation; - tmpCam.transform.localScale = _camera.transform.localScale; - tmpCam.GetComponent().CopyFrom(_camera); - - tmpCam.GetComponent().enabled = false; - tmpCam.GetComponent().depthTextureMode = DepthTextureMode.None; - tmpCam.GetComponent().clearFlags = CameraClearFlags.Nothing; - - return tmpCam.GetComponent(); - } - - void StartFrame () { - // take only x% of positional changes into account (camera motion) - // TODO: possibly do the same for rotational part - prevFramePos = Vector3.Slerp(prevFramePos, transform.position, 0.75f); - } - - static int divRoundUp (int x, int d) - { - return (x + d - 1) / d; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs.meta deleted file mode 100644 index ef18200..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CameraMotionBlur.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 97e9b95cf609d96409b6c40519432957 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: 85a88efa8c871af4a9d17c64791b6f4f, type: 3} - - dx11MotionBlurShader: {fileID: 4800000, guid: f1b13d7a80660504a858ea24cfa418c6, - type: 3} - - replacementClear: {fileID: 4800000, guid: 7699c5fbfa27745a1abe111ab7bf9785, type: 3} - - noiseTexture: {fileID: 2800000, guid: 31f5a8611c4ed1245b18456206e798dc, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs deleted file mode 100644 index 0425da9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu ("Image Effects/Color Adjustments/Color Correction (Curves, Saturation)")] - public class ColorCorrectionCurves : PostEffectsBase - { - public enum ColorCorrectionMode - { - Simple = 0, - Advanced = 1 - } - - public AnimationCurve redChannel = new AnimationCurve(new Keyframe(0f,0f), new Keyframe(1f,1f)); - public AnimationCurve greenChannel = new AnimationCurve(new Keyframe(0f,0f), new Keyframe(1f,1f)); - public AnimationCurve blueChannel = new AnimationCurve(new Keyframe(0f,0f), new Keyframe(1f,1f)); - - public bool useDepthCorrection = false; - - public AnimationCurve zCurve = new AnimationCurve(new Keyframe(0f,0f), new Keyframe(1f,1f)); - public AnimationCurve depthRedChannel = new AnimationCurve(new Keyframe(0f,0f), new Keyframe(1f,1f)); - public AnimationCurve depthGreenChannel = new AnimationCurve(new Keyframe(0f,0f), new Keyframe(1f,1f)); - public AnimationCurve depthBlueChannel = new AnimationCurve(new Keyframe(0f,0f), new Keyframe(1f,1f)); - - private Material ccMaterial; - private Material ccDepthMaterial; - private Material selectiveCcMaterial; - - private Texture2D rgbChannelTex; - private Texture2D rgbDepthChannelTex; - private Texture2D zCurveTex; - - public float saturation = 1.0f; - - public bool selectiveCc = false; - - public Color selectiveFromColor = Color.white; - public Color selectiveToColor = Color.white; - - public ColorCorrectionMode mode; - - public bool updateTextures = true; - - public Shader colorCorrectionCurvesShader = null; - public Shader simpleColorCorrectionCurvesShader = null; - public Shader colorCorrectionSelectiveShader = null; - - private bool updateTexturesOnStartup = true; - - - new void Start () - { - base.Start (); - updateTexturesOnStartup = true; - } - - void Awake () { } - - - public override bool CheckResources () - { - CheckSupport (mode == ColorCorrectionMode.Advanced); - - ccMaterial = CheckShaderAndCreateMaterial (simpleColorCorrectionCurvesShader, ccMaterial); - ccDepthMaterial = CheckShaderAndCreateMaterial (colorCorrectionCurvesShader, ccDepthMaterial); - selectiveCcMaterial = CheckShaderAndCreateMaterial (colorCorrectionSelectiveShader, selectiveCcMaterial); - - if (!rgbChannelTex) - rgbChannelTex = new Texture2D (256, 4, TextureFormat.ARGB32, false, true); - if (!rgbDepthChannelTex) - rgbDepthChannelTex = new Texture2D (256, 4, TextureFormat.ARGB32, false, true); - if (!zCurveTex) - zCurveTex = new Texture2D (256, 1, TextureFormat.ARGB32, false, true); - - rgbChannelTex.hideFlags = HideFlags.DontSave; - rgbDepthChannelTex.hideFlags = HideFlags.DontSave; - zCurveTex.hideFlags = HideFlags.DontSave; - - rgbChannelTex.wrapMode = TextureWrapMode.Clamp; - rgbDepthChannelTex.wrapMode = TextureWrapMode.Clamp; - zCurveTex.wrapMode = TextureWrapMode.Clamp; - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - public void UpdateParameters () - { - CheckResources(); // textures might not be created if we're tweaking UI while disabled - - if (redChannel != null && greenChannel != null && blueChannel != null) - { - for (float i = 0.0f; i <= 1.0f; i += 1.0f / 255.0f) - { - float rCh = Mathf.Clamp (redChannel.Evaluate(i), 0.0f, 1.0f); - float gCh = Mathf.Clamp (greenChannel.Evaluate(i), 0.0f, 1.0f); - float bCh = Mathf.Clamp (blueChannel.Evaluate(i), 0.0f, 1.0f); - - rgbChannelTex.SetPixel ((int) Mathf.Floor(i*255.0f), 0, new Color(rCh,rCh,rCh) ); - rgbChannelTex.SetPixel ((int) Mathf.Floor(i*255.0f), 1, new Color(gCh,gCh,gCh) ); - rgbChannelTex.SetPixel ((int) Mathf.Floor(i*255.0f), 2, new Color(bCh,bCh,bCh) ); - - float zC = Mathf.Clamp (zCurve.Evaluate(i), 0.0f,1.0f); - - zCurveTex.SetPixel ((int) Mathf.Floor(i*255.0f), 0, new Color(zC,zC,zC) ); - - rCh = Mathf.Clamp (depthRedChannel.Evaluate(i), 0.0f,1.0f); - gCh = Mathf.Clamp (depthGreenChannel.Evaluate(i), 0.0f,1.0f); - bCh = Mathf.Clamp (depthBlueChannel.Evaluate(i), 0.0f,1.0f); - - rgbDepthChannelTex.SetPixel ((int) Mathf.Floor(i*255.0f), 0, new Color(rCh,rCh,rCh) ); - rgbDepthChannelTex.SetPixel ((int) Mathf.Floor(i*255.0f), 1, new Color(gCh,gCh,gCh) ); - rgbDepthChannelTex.SetPixel ((int) Mathf.Floor(i*255.0f), 2, new Color(bCh,bCh,bCh) ); - } - - rgbChannelTex.Apply (); - rgbDepthChannelTex.Apply (); - zCurveTex.Apply (); - } - } - - void UpdateTextures () - { - UpdateParameters (); - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources()==false) - { - Graphics.Blit (source, destination); - return; - } - - if (updateTexturesOnStartup) - { - UpdateParameters (); - updateTexturesOnStartup = false; - } - - if (useDepthCorrection) - GetComponent().depthTextureMode |= DepthTextureMode.Depth; - - RenderTexture renderTarget2Use = destination; - - if (selectiveCc) - { - renderTarget2Use = RenderTexture.GetTemporary (source.width, source.height); - } - - if (useDepthCorrection) - { - ccDepthMaterial.SetTexture ("_RgbTex", rgbChannelTex); - ccDepthMaterial.SetTexture ("_ZCurve", zCurveTex); - ccDepthMaterial.SetTexture ("_RgbDepthTex", rgbDepthChannelTex); - ccDepthMaterial.SetFloat ("_Saturation", saturation); - - Graphics.Blit (source, renderTarget2Use, ccDepthMaterial); - } - else - { - ccMaterial.SetTexture ("_RgbTex", rgbChannelTex); - ccMaterial.SetFloat ("_Saturation", saturation); - - Graphics.Blit (source, renderTarget2Use, ccMaterial); - } - - if (selectiveCc) - { - selectiveCcMaterial.SetColor ("selColor", selectiveFromColor); - selectiveCcMaterial.SetColor ("targetColor", selectiveToColor); - Graphics.Blit (renderTarget2Use, destination, selectiveCcMaterial); - - RenderTexture.ReleaseTemporary (renderTarget2Use); - } - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs.meta deleted file mode 100644 index e60e166..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionCurves.cs.meta +++ /dev/null @@ -1,15 +0,0 @@ -fileFormatVersion: 2 -guid: 1fd999d1b2cf94a45a5b0a47ce074bef -MonoImporter: - serializedVersion: 2 - defaultReferences: - - colorCorrectionCurvesShader: {fileID: 4800000, guid: 62bcade1028c24ca1a39760ed84b9487, - type: 3} - - simpleColorCorrectionCurvesShader: {fileID: 4800000, guid: 438ddd58d82c84d9eb1fdc56111702e1, - type: 3} - - colorCorrectionSelectiveShader: {fileID: 4800000, guid: e515e0f94cefc4c0db54b45cba621544, - type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs deleted file mode 100644 index e85bb59..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu ("Image Effects/Color Adjustments/Color Correction (3D Lookup Texture)")] - public class ColorCorrectionLookup : PostEffectsBase - { - public Shader shader; - private Material material; - - // serialize this instead of having another 2d texture ref'ed - public Texture3D converted3DLut = null; - public string basedOnTempTex = ""; - - - public override bool CheckResources () { - CheckSupport (false); - - material = CheckShaderAndCreateMaterial (shader, material); - - if (!isSupported || !SystemInfo.supports3DTextures) - ReportAutoDisable (); - return isSupported; - } - - void OnDisable () { - if (material) { - DestroyImmediate (material); - material = null; - } - } - - void OnDestroy () { - if (converted3DLut) - DestroyImmediate (converted3DLut); - converted3DLut = null; - } - - public void SetIdentityLut () { - int dim = 16; - var newC = new Color[dim*dim*dim]; - float oneOverDim = 1.0f / (1.0f * dim - 1.0f); - - for(int i = 0; i < dim; i++) { - for(int j = 0; j < dim; j++) { - for(int k = 0; k < dim; k++) { - newC[i + (j*dim) + (k*dim*dim)] = new Color((i*1.0f)*oneOverDim, (j*1.0f)*oneOverDim, (k*1.0f)*oneOverDim, 1.0f); - } - } - } - - if (converted3DLut) - DestroyImmediate (converted3DLut); - converted3DLut = new Texture3D (dim, dim, dim, TextureFormat.ARGB32, false); - converted3DLut.SetPixels (newC); - converted3DLut.Apply (); - basedOnTempTex = ""; - } - - public bool ValidDimensions ( Texture2D tex2d) { - if (!tex2d) return false; - int h = tex2d.height; - if (h != Mathf.FloorToInt(Mathf.Sqrt(tex2d.width))) { - return false; - } - return true; - } - - public void Convert ( Texture2D temp2DTex, string path) { - - // conversion fun: the given 2D texture needs to be of the format - // w * h, wheras h is the 'depth' (or 3d dimension 'dim') and w = dim * dim - - if (temp2DTex) { - int dim = temp2DTex.width * temp2DTex.height; - dim = temp2DTex.height; - - if (!ValidDimensions(temp2DTex)) { - Debug.LogWarning ("The given 2D texture " + temp2DTex.name + " cannot be used as a 3D LUT."); - basedOnTempTex = ""; - return; - } - - var c = temp2DTex.GetPixels(); - var newC = new Color[c.Length]; - - for(int i = 0; i < dim; i++) { - for(int j = 0; j < dim; j++) { - for(int k = 0; k < dim; k++) { - int j_ = dim-j-1; - newC[i + (j*dim) + (k*dim*dim)] = c[k*dim+i+j_*dim*dim]; - } - } - } - - if (converted3DLut) - DestroyImmediate (converted3DLut); - converted3DLut = new Texture3D (dim, dim, dim, TextureFormat.ARGB32, false); - converted3DLut.SetPixels (newC); - converted3DLut.Apply (); - basedOnTempTex = path; - } - else { - // error, something went terribly wrong - Debug.LogError ("Couldn't color correct with 3D LUT texture. Image Effect will be disabled."); - } - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) { - if (CheckResources () == false || !SystemInfo.supports3DTextures) { - Graphics.Blit (source, destination); - return; - } - - if (converted3DLut == null) { - SetIdentityLut (); - } - - int lutSize = converted3DLut.width; - converted3DLut.wrapMode = TextureWrapMode.Clamp; - material.SetFloat("_Scale", (lutSize - 1) / (1.0f*lutSize)); - material.SetFloat("_Offset", 1.0f / (2.0f * lutSize)); - material.SetTexture("_ClutTex", converted3DLut); - - Graphics.Blit (source, destination, material, QualitySettings.activeColorSpace == ColorSpace.Linear ? 1 : 0); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs.meta deleted file mode 100644 index 82f6837..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionLookup.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8cde8c0fd649d9b46bb403ba5e157391 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: b61f0d8d8244b4b28aa66b0c8cb46a8d, type: 3} - - converted3DLut: {instanceID: 0} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs deleted file mode 100644 index ae594f8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Color Adjustments/Color Correction (Ramp)")] - public class ColorCorrectionRamp : ImageEffectBase { - public Texture textureRamp; - - // Called by camera to apply image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) { - material.SetTexture ("_RampTex", textureRamp); - Graphics.Blit (source, destination, material); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs.meta deleted file mode 100644 index 009d841..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ColorCorrectionRamp.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ea59781cad112c75d0008dfa8d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: 67f8781cad112c75d0008dfa8d76c639, type: 3} - - textureRamp: {fileID: 2800000, guid: d440902fad11e807d00044888d76c639, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs deleted file mode 100644 index 00c2820..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent(typeof(Camera))] - [AddComponentMenu("Image Effects/Color Adjustments/Contrast Enhance (Unsharp Mask)")] - public class ContrastEnhance : PostEffectsBase - { - [Range(0.0f, 1.0f)] - public float intensity = 0.5f; - [Range(0.0f,0.999f)] - public float threshold = 0.0f; - - private Material separableBlurMaterial; - private Material contrastCompositeMaterial; - - [Range(0.0f,1.0f)] - public float blurSpread = 1.0f; - - public Shader separableBlurShader = null; - public Shader contrastCompositeShader = null; - - - public override bool CheckResources () - { - CheckSupport (false); - - contrastCompositeMaterial = CheckShaderAndCreateMaterial (contrastCompositeShader, contrastCompositeMaterial); - separableBlurMaterial = CheckShaderAndCreateMaterial (separableBlurShader, separableBlurMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources()==false) - { - Graphics.Blit (source, destination); - return; - } - - int rtW = source.width; - int rtH = source.height; - - RenderTexture color2 = RenderTexture.GetTemporary (rtW/2, rtH/2, 0); - - // downsample - - Graphics.Blit (source, color2); - RenderTexture color4a = RenderTexture.GetTemporary (rtW/4, rtH/4, 0); - Graphics.Blit (color2, color4a); - RenderTexture.ReleaseTemporary (color2); - - // blur - - separableBlurMaterial.SetVector ("offsets", new Vector4 (0.0f, (blurSpread * 1.0f) / color4a.height, 0.0f, 0.0f)); - RenderTexture color4b = RenderTexture.GetTemporary (rtW/4, rtH/4, 0); - Graphics.Blit (color4a, color4b, separableBlurMaterial); - RenderTexture.ReleaseTemporary (color4a); - - separableBlurMaterial.SetVector ("offsets", new Vector4 ((blurSpread * 1.0f) / color4a.width, 0.0f, 0.0f, 0.0f)); - color4a = RenderTexture.GetTemporary (rtW/4, rtH/4, 0); - Graphics.Blit (color4b, color4a, separableBlurMaterial); - RenderTexture.ReleaseTemporary (color4b); - - // composite - - contrastCompositeMaterial.SetTexture ("_MainTexBlurred", color4a); - contrastCompositeMaterial.SetFloat ("intensity", intensity); - contrastCompositeMaterial.SetFloat ("threshold", threshold); - Graphics.Blit (source, destination, contrastCompositeMaterial); - - RenderTexture.ReleaseTemporary (color4a); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs.meta deleted file mode 100644 index c469a7c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastEnhance.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 3309686a9fbbe6e42a182d5e0257704c -MonoImporter: - serializedVersion: 2 - defaultReferences: - - separableBlurShader: {fileID: 4800000, guid: e97c14fbb5ea04c3a902cc533d7fc5d1, - type: 3} - - contrastCompositeShader: {fileID: 4800000, guid: 273404942eede4ea1883ca1fb2942507, - type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs deleted file mode 100644 index a349d5c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Color Adjustments/Contrast Stretch")] - public class ContrastStretch : MonoBehaviour - { - /// Adaptation speed - percents per frame, if playing at 30FPS. - /// Default is 0.02 (2% each 1/30s). - [Range(0.0001f, 1.0f)] - public float adaptationSpeed = 0.02f; - - /// If our scene is really dark (or really bright), we might not want to - /// stretch its contrast to the full range. - /// limitMinimum=0, limitMaximum=1 is the same as not applying the effect at all. - /// limitMinimum=1, limitMaximum=0 is always stretching colors to full range. - - /// The limit on the minimum luminance (0...1) - we won't go above this. - [Range(0.0f,1.0f)] - public float limitMinimum = 0.2f; - - /// The limit on the maximum luminance (0...1) - we won't go below this. - [Range(0.0f, 1.0f)] - public float limitMaximum = 0.6f; - - - // To maintain adaptation levels over time, we need two 1x1 render textures - // and ping-pong between them. - private RenderTexture[] adaptRenderTex = new RenderTexture[2]; - private int curAdaptIndex = 0; - - - // Computes scene luminance (grayscale) image - public Shader shaderLum; - private Material m_materialLum; - protected Material materialLum { - get { - if ( m_materialLum == null ) { - m_materialLum = new Material(shaderLum); - m_materialLum.hideFlags = HideFlags.HideAndDontSave; - } - return m_materialLum; - } - } - - // Reduces size of the image by 2x2, while computing maximum/minimum values. - // By repeatedly applying this shader, we reduce the initial luminance image - // to 1x1 image with minimum/maximum luminances found. - public Shader shaderReduce; - private Material m_materialReduce; - protected Material materialReduce { - get { - if ( m_materialReduce == null ) { - m_materialReduce = new Material(shaderReduce); - m_materialReduce.hideFlags = HideFlags.HideAndDontSave; - } - return m_materialReduce; - } - } - - // Adaptation shader - gradually "adapts" minimum/maximum luminances, - // based on currently adapted 1x1 image and the actual 1x1 image of the current scene. - public Shader shaderAdapt; - private Material m_materialAdapt; - protected Material materialAdapt { - get { - if ( m_materialAdapt == null ) { - m_materialAdapt = new Material(shaderAdapt); - m_materialAdapt.hideFlags = HideFlags.HideAndDontSave; - } - return m_materialAdapt; - } - } - - // Final pass - stretches the color values of the original scene, based on currently - // adpated minimum/maximum values. - public Shader shaderApply; - private Material m_materialApply; - protected Material materialApply { - get { - if ( m_materialApply == null ) { - m_materialApply = new Material(shaderApply); - m_materialApply.hideFlags = HideFlags.HideAndDontSave; - } - return m_materialApply; - } - } - - void Start() - { - // Disable if we don't support image effects - if (!SystemInfo.supportsImageEffects) { - enabled = false; - return; - } - - if (!shaderAdapt.isSupported || !shaderApply.isSupported || !shaderLum.isSupported || !shaderReduce.isSupported) { - enabled = false; - return; - } - } - - void OnEnable() - { - for( int i = 0; i < 2; ++i ) - { - if ( !adaptRenderTex[i] ) { - adaptRenderTex[i] = new RenderTexture(1, 1, 0); - adaptRenderTex[i].hideFlags = HideFlags.HideAndDontSave; - } - } - } - - void OnDisable() - { - for( int i = 0; i < 2; ++i ) - { - DestroyImmediate( adaptRenderTex[i] ); - adaptRenderTex[i] = null; - } - if ( m_materialLum ) - DestroyImmediate( m_materialLum ); - if ( m_materialReduce ) - DestroyImmediate( m_materialReduce ); - if ( m_materialAdapt ) - DestroyImmediate( m_materialAdapt ); - if ( m_materialApply ) - DestroyImmediate( m_materialApply ); - } - - - /// Apply the filter - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - // Blit to smaller RT and convert to luminance on the way - const int TEMP_RATIO = 1; // 4x4 smaller - RenderTexture rtTempSrc = RenderTexture.GetTemporary(source.width/TEMP_RATIO, source.height/TEMP_RATIO); - Graphics.Blit (source, rtTempSrc, materialLum); - - // Repeatedly reduce this image in size, computing min/max luminance values - // In the end we'll have 1x1 image with min/max luminances found. - const int FINAL_SIZE = 1; - //const int FINAL_SIZE = 1; - while( rtTempSrc.width > FINAL_SIZE || rtTempSrc.height > FINAL_SIZE ) - { - const int REDUCE_RATIO = 2; // our shader does 2x2 reduction - int destW = rtTempSrc.width / REDUCE_RATIO; - if ( destW < FINAL_SIZE ) destW = FINAL_SIZE; - int destH = rtTempSrc.height / REDUCE_RATIO; - if ( destH < FINAL_SIZE ) destH = FINAL_SIZE; - RenderTexture rtTempDst = RenderTexture.GetTemporary(destW,destH); - Graphics.Blit (rtTempSrc, rtTempDst, materialReduce); - - // Release old src temporary, and make new temporary the source - RenderTexture.ReleaseTemporary( rtTempSrc ); - rtTempSrc = rtTempDst; - } - - // Update viewer's adaptation level - CalculateAdaptation( rtTempSrc ); - - // Apply contrast strech to the original scene, using currently adapted parameters - materialApply.SetTexture("_AdaptTex", adaptRenderTex[curAdaptIndex] ); - Graphics.Blit (source, destination, materialApply); - - RenderTexture.ReleaseTemporary( rtTempSrc ); - } - - - /// Helper function to do gradual adaptation to min/max luminances - private void CalculateAdaptation( Texture curTexture ) - { - int prevAdaptIndex = curAdaptIndex; - curAdaptIndex = (curAdaptIndex+1) % 2; - - // Adaptation speed is expressed in percents/frame, based on 30FPS. - // Calculate the adaptation lerp, based on current FPS. - float adaptLerp = 1.0f - Mathf.Pow( 1.0f - adaptationSpeed, 30.0f * Time.deltaTime ); - const float kMinAdaptLerp = 0.01f; - adaptLerp = Mathf.Clamp( adaptLerp, kMinAdaptLerp, 1 ); - - materialAdapt.SetTexture("_CurTex", curTexture ); - materialAdapt.SetVector("_AdaptParams", new Vector4( - adaptLerp, - limitMinimum, - limitMaximum, - 0.0f - )); - // clear destination RT so its contents don't need to be restored - Graphics.SetRenderTarget(adaptRenderTex[curAdaptIndex]); - GL.Clear(false, true, Color.black); - Graphics.Blit ( - adaptRenderTex[prevAdaptIndex], - adaptRenderTex[curAdaptIndex], - materialAdapt); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs.meta deleted file mode 100644 index a9285bb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ContrastStretch.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ec92b071d2d424aecb3e46f28eb63174 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shaderLum: {fileID: 4800000, guid: befbb4b9c320b4b18a08ef7afb93b6c9, type: 3} - - shaderReduce: {fileID: 4800000, guid: 57b33a14b6d5347c5a85c36f6cb3b280, type: 3} - - shaderAdapt: {fileID: 4800000, guid: 257bc83cbeb544540bd0e558aa9b1383, type: 3} - - shaderApply: {fileID: 4800000, guid: f4901f25d4e1542589348bbb89563d8e, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs deleted file mode 100644 index a26d007..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Edge Detection/Crease Shading")] - public class CreaseShading : PostEffectsBase - { - public float intensity = 0.5f; - public int softness = 1; - public float spread = 1.0f; - - public Shader blurShader = null; - private Material blurMaterial = null; - - public Shader depthFetchShader = null; - private Material depthFetchMaterial = null; - - public Shader creaseApplyShader = null; - private Material creaseApplyMaterial = null; - - - public override bool CheckResources () - { - CheckSupport (true); - - blurMaterial = CheckShaderAndCreateMaterial (blurShader, blurMaterial); - depthFetchMaterial = CheckShaderAndCreateMaterial (depthFetchShader, depthFetchMaterial); - creaseApplyMaterial = CheckShaderAndCreateMaterial (creaseApplyShader, creaseApplyMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources()==false) - { - Graphics.Blit (source, destination); - return; - } - - int rtW = source.width; - int rtH = source.height; - - float widthOverHeight = (1.0f * rtW) / (1.0f * rtH); - float oneOverBaseSize = 1.0f / 512.0f; - - RenderTexture hrTex = RenderTexture.GetTemporary (rtW, rtH, 0); - RenderTexture lrTex1 = RenderTexture.GetTemporary (rtW/2, rtH/2, 0); - - Graphics.Blit (source,hrTex, depthFetchMaterial); - Graphics.Blit (hrTex, lrTex1); - - for(int i = 0; i < softness; i++) - { - RenderTexture lrTex2 = RenderTexture.GetTemporary (rtW/2, rtH/2, 0); - blurMaterial.SetVector ("offsets", new Vector4 (0.0f, spread * oneOverBaseSize, 0.0f, 0.0f)); - Graphics.Blit (lrTex1, lrTex2, blurMaterial); - RenderTexture.ReleaseTemporary (lrTex1); - lrTex1 = lrTex2; - - lrTex2 = RenderTexture.GetTemporary (rtW/2, rtH/2, 0); - blurMaterial.SetVector ("offsets", new Vector4 (spread * oneOverBaseSize / widthOverHeight, 0.0f, 0.0f, 0.0f)); - Graphics.Blit (lrTex1, lrTex2, blurMaterial); - RenderTexture.ReleaseTemporary (lrTex1); - lrTex1 = lrTex2; - } - - creaseApplyMaterial.SetTexture ("_HrDepthTex", hrTex); - creaseApplyMaterial.SetTexture ("_LrDepthTex", lrTex1); - creaseApplyMaterial.SetFloat ("intensity", intensity); - Graphics.Blit (source,destination, creaseApplyMaterial); - - RenderTexture.ReleaseTemporary (hrTex); - RenderTexture.ReleaseTemporary (lrTex1); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs.meta deleted file mode 100644 index c6ebebe..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/CreaseShading.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d64b4f3a592f28b44bf19223ac8b6cd2 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - blurShader: {fileID: 4800000, guid: e97c14fbb5ea04c3a902cc533d7fc5d1, type: 3} - - depthFetchShader: {fileID: 4800000, guid: 14768d3865b1342e3a861fbe19ba2db2, type: 3} - - creaseApplyShader: {fileID: 4800000, guid: b59984d82af624bd3b0c777f038276f2, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs deleted file mode 100644 index 59aee65..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs +++ /dev/null @@ -1,387 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Camera/Depth of Field (Lens Blur, Scatter, DX11)") ] - public class DepthOfField : PostEffectsBase { - - public bool visualizeFocus = false; - public float focalLength = 10.0f; - public float focalSize = 0.05f; - public float aperture = 0.5f; - public Transform focalTransform = null; - public float maxBlurSize = 2.0f; - public bool highResolution = false; - - public enum BlurType { - DiscBlur = 0, - DX11 = 1, - } - - public enum BlurSampleCount { - Low = 0, - Medium = 1, - High = 2, - } - - public BlurType blurType = BlurType.DiscBlur; - public BlurSampleCount blurSampleCount = BlurSampleCount.High; - - public bool nearBlur = false; - public float foregroundOverlap = 1.0f; - - public Shader dofHdrShader; - private Material dofHdrMaterial = null; - - public Shader dx11BokehShader; - private Material dx11bokehMaterial; - - public float dx11BokehThreshold = 0.5f; - public float dx11SpawnHeuristic = 0.0875f; - public Texture2D dx11BokehTexture = null; - public float dx11BokehScale = 1.2f; - public float dx11BokehIntensity = 2.5f; - - private float focalDistance01 = 10.0f; - private ComputeBuffer cbDrawArgs; - private ComputeBuffer cbPoints; - private float internalBlurWidth = 1.0f; - - private Camera cachedCamera; - - public override bool CheckResources () { - CheckSupport (true); // only requires depth, not HDR - - dofHdrMaterial = CheckShaderAndCreateMaterial (dofHdrShader, dofHdrMaterial); - if (supportDX11 && blurType == BlurType.DX11) { - dx11bokehMaterial = CheckShaderAndCreateMaterial(dx11BokehShader, dx11bokehMaterial); - CreateComputeResources (); - } - - if (!isSupported) - ReportAutoDisable (); - - return isSupported; - } - - void OnEnable () { - cachedCamera = GetComponent(); - cachedCamera.depthTextureMode |= DepthTextureMode.Depth; - } - - void OnDisable () { - ReleaseComputeResources (); - - if (dofHdrMaterial) DestroyImmediate(dofHdrMaterial); - dofHdrMaterial = null; - if (dx11bokehMaterial) DestroyImmediate(dx11bokehMaterial); - dx11bokehMaterial = null; - } - - void ReleaseComputeResources () { - if (cbDrawArgs != null) cbDrawArgs.Release(); - cbDrawArgs = null; - if (cbPoints != null) cbPoints.Release(); - cbPoints = null; - } - - void CreateComputeResources () { - if (cbDrawArgs == null) - { - cbDrawArgs = new ComputeBuffer (1, 16, ComputeBufferType.IndirectArguments); - var args= new int[4]; - args[0] = 0; args[1] = 1; args[2] = 0; args[3] = 0; - cbDrawArgs.SetData (args); - } - if (cbPoints == null) - { - cbPoints = new ComputeBuffer (90000, 12+16, ComputeBufferType.Append); - } - } - - float FocalDistance01 ( float worldDist) { - return cachedCamera.WorldToViewportPoint((worldDist-cachedCamera.nearClipPlane) * cachedCamera.transform.forward + cachedCamera.transform.position).z / (cachedCamera.farClipPlane-cachedCamera.nearClipPlane); - } - - private void WriteCoc ( RenderTexture fromTo, bool fgDilate) { - dofHdrMaterial.SetTexture("_FgOverlap", null); - - if (nearBlur && fgDilate) { - - int rtW = fromTo.width/2; - int rtH = fromTo.height/2; - - // capture fg coc - RenderTexture temp2 = RenderTexture.GetTemporary (rtW, rtH, 0, fromTo.format); - Graphics.Blit (fromTo, temp2, dofHdrMaterial, 4); - - // special blur - float fgAdjustment = internalBlurWidth * foregroundOverlap; - - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, fgAdjustment , 0.0f, fgAdjustment)); - RenderTexture temp1 = RenderTexture.GetTemporary (rtW, rtH, 0, fromTo.format); - Graphics.Blit (temp2, temp1, dofHdrMaterial, 2); - RenderTexture.ReleaseTemporary(temp2); - - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (fgAdjustment, 0.0f, 0.0f, fgAdjustment)); - temp2 = RenderTexture.GetTemporary (rtW, rtH, 0, fromTo.format); - Graphics.Blit (temp1, temp2, dofHdrMaterial, 2); - RenderTexture.ReleaseTemporary(temp1); - - // "merge up" with background COC - dofHdrMaterial.SetTexture("_FgOverlap", temp2); - fromTo.MarkRestoreExpected(); // only touching alpha channel, RT restore expected - Graphics.Blit (fromTo, fromTo, dofHdrMaterial, 13); - RenderTexture.ReleaseTemporary(temp2); - } - else { - // capture full coc in alpha channel (fromTo is not read, but bound to detect screen flip) - fromTo.MarkRestoreExpected(); // only touching alpha channel, RT restore expected - Graphics.Blit (fromTo, fromTo, dofHdrMaterial, 0); - } - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) { - if (!CheckResources ()) { - Graphics.Blit (source, destination); - return; - } - - // clamp & prepare values so they make sense - - if (aperture < 0.0f) aperture = 0.0f; - if (maxBlurSize < 0.1f) maxBlurSize = 0.1f; - focalSize = Mathf.Clamp(focalSize, 0.0f, 2.0f); - internalBlurWidth = Mathf.Max(maxBlurSize, 0.0f); - - // focal & coc calculations - - focalDistance01 = (focalTransform) ? (cachedCamera.WorldToViewportPoint (focalTransform.position)).z / (cachedCamera.farClipPlane) : FocalDistance01 (focalLength); - dofHdrMaterial.SetVector("_CurveParams", new Vector4(1.0f, focalSize, (1.0f / (1.0f - aperture) - 1.0f), focalDistance01)); - - // possible render texture helpers - - RenderTexture rtLow = null; - RenderTexture rtLow2 = null; - RenderTexture rtSuperLow1 = null; - RenderTexture rtSuperLow2 = null; - float fgBlurDist = internalBlurWidth * foregroundOverlap; - - if (visualizeFocus) - { - - // - // 2. - // visualize coc - // - // - - WriteCoc (source, true); - Graphics.Blit (source, destination, dofHdrMaterial, 16); - } - else if ((blurType == BlurType.DX11) && dx11bokehMaterial) - { - - // - // 1. - // optimized dx11 bokeh scatter - // - // - - - if (highResolution) { - - internalBlurWidth = internalBlurWidth < 0.1f ? 0.1f : internalBlurWidth; - fgBlurDist = internalBlurWidth * foregroundOverlap; - - rtLow = RenderTexture.GetTemporary (source.width, source.height, 0, source.format); - - var dest2= RenderTexture.GetTemporary (source.width, source.height, 0, source.format); - - // capture COC - WriteCoc (source, false); - - // blur a bit so we can do a frequency check - rtSuperLow1 = RenderTexture.GetTemporary(source.width>>1, source.height>>1, 0, source.format); - rtSuperLow2 = RenderTexture.GetTemporary(source.width>>1, source.height>>1, 0, source.format); - - Graphics.Blit(source, rtSuperLow1, dofHdrMaterial, 15); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, 1.5f , 0.0f, 1.5f)); - Graphics.Blit (rtSuperLow1, rtSuperLow2, dofHdrMaterial, 19); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (1.5f, 0.0f, 0.0f, 1.5f)); - Graphics.Blit (rtSuperLow2, rtSuperLow1, dofHdrMaterial, 19); - - // capture fg coc - if (nearBlur) - Graphics.Blit (source, rtSuperLow2, dofHdrMaterial, 4); - - dx11bokehMaterial.SetTexture ("_BlurredColor", rtSuperLow1); - dx11bokehMaterial.SetFloat ("_SpawnHeuristic", dx11SpawnHeuristic); - dx11bokehMaterial.SetVector ("_BokehParams", new Vector4(dx11BokehScale, dx11BokehIntensity, Mathf.Clamp(dx11BokehThreshold, 0.005f, 4.0f), internalBlurWidth)); - dx11bokehMaterial.SetTexture ("_FgCocMask", nearBlur ? rtSuperLow2 : null); - - // collect bokeh candidates and replace with a darker pixel - Graphics.SetRandomWriteTarget (1, cbPoints); - Graphics.Blit (source, rtLow, dx11bokehMaterial, 0); - Graphics.ClearRandomWriteTargets (); - - // fg coc blur happens here (after collect!) - if (nearBlur) { - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, fgBlurDist , 0.0f, fgBlurDist)); - Graphics.Blit (rtSuperLow2, rtSuperLow1, dofHdrMaterial, 2); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (fgBlurDist, 0.0f, 0.0f, fgBlurDist)); - Graphics.Blit (rtSuperLow1, rtSuperLow2, dofHdrMaterial, 2); - - // merge fg coc with bg coc - Graphics.Blit (rtSuperLow2, rtLow, dofHdrMaterial, 3); - } - - // NEW: LAY OUT ALPHA on destination target so we get nicer outlines for the high rez version - Graphics.Blit (rtLow, dest2, dofHdrMaterial, 20); - - // box blur (easier to merge with bokeh buffer) - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (internalBlurWidth, 0.0f , 0.0f, internalBlurWidth)); - Graphics.Blit (rtLow, source, dofHdrMaterial, 5); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, internalBlurWidth, 0.0f, internalBlurWidth)); - Graphics.Blit (source, dest2, dofHdrMaterial, 21); - - // apply bokeh candidates - Graphics.SetRenderTarget (dest2); - ComputeBuffer.CopyCount (cbPoints, cbDrawArgs, 0); - dx11bokehMaterial.SetBuffer ("pointBuffer", cbPoints); - dx11bokehMaterial.SetTexture ("_MainTex", dx11BokehTexture); - dx11bokehMaterial.SetVector ("_Screen", new Vector3(1.0f/(1.0f*source.width), 1.0f/(1.0f*source.height), internalBlurWidth)); - dx11bokehMaterial.SetPass (2); - - Graphics.DrawProceduralIndirect (MeshTopology.Points, cbDrawArgs, 0); - - Graphics.Blit (dest2, destination); // hackaround for DX11 high resolution flipfun (OPTIMIZEME) - - RenderTexture.ReleaseTemporary(dest2); - RenderTexture.ReleaseTemporary(rtSuperLow1); - RenderTexture.ReleaseTemporary(rtSuperLow2); - } - else { - rtLow = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); - rtLow2 = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); - - fgBlurDist = internalBlurWidth * foregroundOverlap; - - // capture COC & color in low resolution - WriteCoc (source, false); - source.filterMode = FilterMode.Bilinear; - Graphics.Blit (source, rtLow, dofHdrMaterial, 6); - - // blur a bit so we can do a frequency check - rtSuperLow1 = RenderTexture.GetTemporary(rtLow.width>>1, rtLow.height>>1, 0, rtLow.format); - rtSuperLow2 = RenderTexture.GetTemporary(rtLow.width>>1, rtLow.height>>1, 0, rtLow.format); - - Graphics.Blit(rtLow, rtSuperLow1, dofHdrMaterial, 15); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, 1.5f , 0.0f, 1.5f)); - Graphics.Blit (rtSuperLow1, rtSuperLow2, dofHdrMaterial, 19); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (1.5f, 0.0f, 0.0f, 1.5f)); - Graphics.Blit (rtSuperLow2, rtSuperLow1, dofHdrMaterial, 19); - - RenderTexture rtLow3 = null; - - if (nearBlur) { - // capture fg coc - rtLow3 = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); - Graphics.Blit (source, rtLow3, dofHdrMaterial, 4); - } - - dx11bokehMaterial.SetTexture ("_BlurredColor", rtSuperLow1); - dx11bokehMaterial.SetFloat ("_SpawnHeuristic", dx11SpawnHeuristic); - dx11bokehMaterial.SetVector ("_BokehParams", new Vector4(dx11BokehScale, dx11BokehIntensity, Mathf.Clamp(dx11BokehThreshold, 0.005f, 4.0f), internalBlurWidth)); - dx11bokehMaterial.SetTexture ("_FgCocMask", rtLow3); - - // collect bokeh candidates and replace with a darker pixel - Graphics.SetRandomWriteTarget (1, cbPoints); - Graphics.Blit (rtLow, rtLow2, dx11bokehMaterial, 0); - Graphics.ClearRandomWriteTargets (); - - RenderTexture.ReleaseTemporary(rtSuperLow1); - RenderTexture.ReleaseTemporary(rtSuperLow2); - - // fg coc blur happens here (after collect!) - if (nearBlur) { - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, fgBlurDist , 0.0f, fgBlurDist)); - Graphics.Blit (rtLow3, rtLow, dofHdrMaterial, 2); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (fgBlurDist, 0.0f, 0.0f, fgBlurDist)); - Graphics.Blit (rtLow, rtLow3, dofHdrMaterial, 2); - - // merge fg coc with bg coc - Graphics.Blit (rtLow3, rtLow2, dofHdrMaterial, 3); - } - - // box blur (easier to merge with bokeh buffer) - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (internalBlurWidth, 0.0f , 0.0f, internalBlurWidth)); - Graphics.Blit (rtLow2, rtLow, dofHdrMaterial, 5); - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, internalBlurWidth, 0.0f, internalBlurWidth)); - Graphics.Blit (rtLow, rtLow2, dofHdrMaterial, 5); - - // apply bokeh candidates - Graphics.SetRenderTarget (rtLow2); - ComputeBuffer.CopyCount (cbPoints, cbDrawArgs, 0); - dx11bokehMaterial.SetBuffer ("pointBuffer", cbPoints); - dx11bokehMaterial.SetTexture ("_MainTex", dx11BokehTexture); - dx11bokehMaterial.SetVector ("_Screen", new Vector3(1.0f/(1.0f*rtLow2.width), 1.0f/(1.0f*rtLow2.height), internalBlurWidth)); - dx11bokehMaterial.SetPass (1); - Graphics.DrawProceduralIndirect (MeshTopology.Points, cbDrawArgs, 0); - - // upsample & combine - dofHdrMaterial.SetTexture ("_LowRez", rtLow2); - dofHdrMaterial.SetTexture ("_FgOverlap", rtLow3); - dofHdrMaterial.SetVector ("_Offsets", ((1.0f*source.width)/(1.0f*rtLow2.width)) * internalBlurWidth * Vector4.one); - Graphics.Blit (source, destination, dofHdrMaterial, 9); - - if (rtLow3) RenderTexture.ReleaseTemporary(rtLow3); - } - } - else - { - - // - // 2. - // poisson disc style blur in low resolution - // - // - - source.filterMode = FilterMode.Bilinear; - - if (highResolution) internalBlurWidth *= 2.0f; - - WriteCoc (source, true); - - rtLow = RenderTexture.GetTemporary (source.width >> 1, source.height >> 1, 0, source.format); - rtLow2 = RenderTexture.GetTemporary (source.width >> 1, source.height >> 1, 0, source.format); - - int blurPass = (blurSampleCount == BlurSampleCount.High || blurSampleCount == BlurSampleCount.Medium) ? 17 : 11; - - if (highResolution) { - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, internalBlurWidth, 0.025f, internalBlurWidth)); - Graphics.Blit (source, destination, dofHdrMaterial, blurPass); - } - else { - dofHdrMaterial.SetVector ("_Offsets", new Vector4 (0.0f, internalBlurWidth, 0.1f, internalBlurWidth)); - - // blur - Graphics.Blit (source, rtLow, dofHdrMaterial, 6); - Graphics.Blit (rtLow, rtLow2, dofHdrMaterial, blurPass); - - // cheaper blur in high resolution, upsample and combine - dofHdrMaterial.SetTexture("_LowRez", rtLow2); - dofHdrMaterial.SetTexture("_FgOverlap", null); - dofHdrMaterial.SetVector ("_Offsets", Vector4.one * ((1.0f*source.width)/(1.0f*rtLow2.width)) * internalBlurWidth); - Graphics.Blit (source, destination, dofHdrMaterial, blurSampleCount == BlurSampleCount.High ? 18 : 12); - } - } - - if (rtLow) RenderTexture.ReleaseTemporary(rtLow); - if (rtLow2) RenderTexture.ReleaseTemporary(rtLow2); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs.meta deleted file mode 100644 index 82a4f57..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/DepthOfField.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: bd70d448b18cfbc46af26466f752332c -MonoImporter: - serializedVersion: 2 - defaultReferences: - - focalTransform: {instanceID: 0} - - dofHdrShader: {fileID: 4800000, guid: acd613035ff3e455e8abf23fdc8c8c24, type: 3} - - dx11BokehShader: {fileID: 4800000, guid: d8e82664aa8686642a424c88ab10164a, type: 3} - - dx11BokehTexture: {fileID: 2800000, guid: a4cdca73d61814d33ac1587f6c163bca, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs deleted file mode 100644 index 9f95aa0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof (Camera))] - [AddComponentMenu ("Image Effects/Edge Detection/Edge Detection")] - public class EdgeDetection : PostEffectsBase - { - public enum EdgeDetectMode - { - TriangleDepthNormals = 0, - RobertsCrossDepthNormals = 1, - SobelDepth = 2, - SobelDepthThin = 3, - TriangleLuminance = 4, - } - - - public EdgeDetectMode mode = EdgeDetectMode.SobelDepthThin; - public float sensitivityDepth = 1.0f; - public float sensitivityNormals = 1.0f; - public float lumThreshold = 0.2f; - public float edgeExp = 1.0f; - public float sampleDist = 1.0f; - public float edgesOnly = 0.0f; - public Color edgesOnlyBgColor = Color.white; - - public Shader edgeDetectShader; - private Material edgeDetectMaterial = null; - private EdgeDetectMode oldMode = EdgeDetectMode.SobelDepthThin; - - - public override bool CheckResources () - { - CheckSupport (true); - - edgeDetectMaterial = CheckShaderAndCreateMaterial (edgeDetectShader,edgeDetectMaterial); - if (mode != oldMode) - SetCameraFlag (); - - oldMode = mode; - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - - new void Start () - { - oldMode = mode; - } - - void SetCameraFlag () - { - if (mode == EdgeDetectMode.SobelDepth || mode == EdgeDetectMode.SobelDepthThin) - GetComponent().depthTextureMode |= DepthTextureMode.Depth; - else if (mode == EdgeDetectMode.TriangleDepthNormals || mode == EdgeDetectMode.RobertsCrossDepthNormals) - GetComponent().depthTextureMode |= DepthTextureMode.DepthNormals; - } - - void OnEnable () - { - SetCameraFlag(); - } - - [ImageEffectOpaque] - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources () == false) - { - Graphics.Blit (source, destination); - return; - } - - Vector2 sensitivity = new Vector2 (sensitivityDepth, sensitivityNormals); - edgeDetectMaterial.SetVector ("_Sensitivity", new Vector4 (sensitivity.x, sensitivity.y, 1.0f, sensitivity.y)); - edgeDetectMaterial.SetFloat ("_BgFade", edgesOnly); - edgeDetectMaterial.SetFloat ("_SampleDistance", sampleDist); - edgeDetectMaterial.SetVector ("_BgColor", edgesOnlyBgColor); - edgeDetectMaterial.SetFloat ("_Exponent", edgeExp); - edgeDetectMaterial.SetFloat ("_Threshold", lumThreshold); - - Graphics.Blit (source, destination, edgeDetectMaterial, (int) mode); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs.meta deleted file mode 100644 index 22ad6e8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/EdgeDetection.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 730475ee64f9a894bbac0d9e6f22e813 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - edgeDetectShader: {fileID: 4800000, guid: 0d1644bdf064147baa97f235fc5b4903, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs deleted file mode 100644 index 069affa..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Displacement/Fisheye")] - public class Fisheye : PostEffectsBase - { - [Range(0.0f, 1.5f)] - public float strengthX = 0.05f; - [Range(0.0f, 1.5f)] - public float strengthY = 0.05f; - - public Shader fishEyeShader = null; - private Material fisheyeMaterial = null; - - - public override bool CheckResources () - { - CheckSupport (false); - fisheyeMaterial = CheckShaderAndCreateMaterial(fishEyeShader,fisheyeMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources()==false) - { - Graphics.Blit (source, destination); - return; - } - - float oneOverBaseSize = 80.0f / 512.0f; // to keep values more like in the old version of fisheye - - float ar = (source.width * 1.0f) / (source.height * 1.0f); - - fisheyeMaterial.SetVector ("intensity", new Vector4 (strengthX * ar * oneOverBaseSize, strengthY * oneOverBaseSize, strengthX * ar * oneOverBaseSize, strengthY * oneOverBaseSize)); - Graphics.Blit (source, destination, fisheyeMaterial); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs.meta deleted file mode 100644 index deb7976..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Fisheye.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 4739c22ef73ad62488fe344c8fe9addd -MonoImporter: - serializedVersion: 2 - defaultReferences: - - fishEyeShader: {fileID: 4800000, guid: 874ceab4425f64bccb1d14032f4452b1, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs deleted file mode 100644 index 3d17fc2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Rendering/Global Fog")] - class GlobalFog : PostEffectsBase - { - [Tooltip("Apply distance-based fog?")] - public bool distanceFog = true; - [Tooltip("Exclude far plane pixels from distance-based fog? (Skybox or clear color)")] - public bool excludeFarPixels = true; - [Tooltip("Distance fog is based on radial distance from camera when checked")] - public bool useRadialDistance = false; - [Tooltip("Apply height-based fog?")] - public bool heightFog = true; - [Tooltip("Fog top Y coordinate")] - public float height = 1.0f; - [Range(0.001f,10.0f)] - public float heightDensity = 2.0f; - [Tooltip("Push fog away from the camera by this amount")] - public float startDistance = 0.0f; - - public Shader fogShader = null; - private Material fogMaterial = null; - - - public override bool CheckResources () - { - CheckSupport (true); - - fogMaterial = CheckShaderAndCreateMaterial (fogShader, fogMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - [ImageEffectOpaque] - void OnRenderImage(RenderTexture source, RenderTexture destination) - { - if (CheckResources() == false || (!distanceFog && !heightFog)) - { - Graphics.Blit(source, destination); - return; - } - - Camera cam = GetComponent(); - Transform camtr = cam.transform; - - Vector3[] frustumCorners = new Vector3[4]; - cam.CalculateFrustumCorners(new Rect(0, 0, 1, 1), cam.farClipPlane, cam.stereoActiveEye, frustumCorners); - var bottomLeft = camtr.TransformVector(frustumCorners[0]); - var topLeft = camtr.TransformVector(frustumCorners[1]); - var topRight = camtr.TransformVector(frustumCorners[2]); - var bottomRight = camtr.TransformVector(frustumCorners[3]); - - Matrix4x4 frustumCornersArray = Matrix4x4.identity; - frustumCornersArray.SetRow(0, bottomLeft); - frustumCornersArray.SetRow(1, bottomRight); - frustumCornersArray.SetRow(2, topLeft); - frustumCornersArray.SetRow(3, topRight); - - var camPos = camtr.position; - float FdotC = camPos.y - height; - float paramK = (FdotC <= 0.0f ? 1.0f : 0.0f); - float excludeDepth = (excludeFarPixels ? 1.0f : 2.0f); - fogMaterial.SetMatrix("_FrustumCornersWS", frustumCornersArray); - fogMaterial.SetVector("_CameraWS", camPos); - fogMaterial.SetVector("_HeightParams", new Vector4(height, FdotC, paramK, heightDensity * 0.5f)); - fogMaterial.SetVector("_DistanceParams", new Vector4(-Mathf.Max(startDistance, 0.0f), excludeDepth, 0, 0)); - - var sceneMode = RenderSettings.fogMode; - var sceneDensity = RenderSettings.fogDensity; - var sceneStart = RenderSettings.fogStartDistance; - var sceneEnd = RenderSettings.fogEndDistance; - Vector4 sceneParams; - bool linear = (sceneMode == FogMode.Linear); - float diff = linear ? sceneEnd - sceneStart : 0.0f; - float invDiff = Mathf.Abs(diff) > 0.0001f ? 1.0f / diff : 0.0f; - sceneParams.x = sceneDensity * 1.2011224087f; // density / sqrt(ln(2)), used by Exp2 fog mode - sceneParams.y = sceneDensity * 1.4426950408f; // density / ln(2), used by Exp fog mode - sceneParams.z = linear ? -invDiff : 0.0f; - sceneParams.w = linear ? sceneEnd * invDiff : 0.0f; - fogMaterial.SetVector("_SceneFogParams", sceneParams); - fogMaterial.SetVector("_SceneFogMode", new Vector4((int)sceneMode, useRadialDistance ? 1 : 0, 0, 0)); - - int pass = 0; - if (distanceFog && heightFog) - pass = 0; // distance + height - else if (distanceFog) - pass = 1; // distance only - else - pass = 2; // height only - Graphics.Blit(source, destination, fogMaterial, pass); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs.meta deleted file mode 100644 index fa21d25..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/GlobalFog.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 76b5ec6153a1d55438228df10fe66844 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - fogShader: {fileID: 4800000, guid: 70d8568987ac0499f952b54c7c13e265, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs deleted file mode 100644 index 369d5cd..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Color Adjustments/Grayscale")] - public class Grayscale : ImageEffectBase { - public Texture textureRamp; - - [Range(-1.0f,1.0f)] - public float rampOffset; - - // Called by camera to apply image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) { - material.SetTexture("_RampTex", textureRamp); - material.SetFloat("_RampOffset", rampOffset); - Graphics.Blit (source, destination, material); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs.meta deleted file mode 100644 index b23db62..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Grayscale.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 243a781cad112c75d0008dfa8d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: daf9781cad112c75d0008dfa8d76c639, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs deleted file mode 100644 index 0158215..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [RequireComponent(typeof (Camera))] - [AddComponentMenu("")] - public class ImageEffectBase : MonoBehaviour - { - /// Provides a shader property that is set in the inspector - /// and a material instantiated from the shader - public Shader shader; - - private Material m_Material; - - - protected virtual void Start() - { - // Disable if we don't support image effects - if (!SystemInfo.supportsImageEffects) - { - enabled = false; - return; - } - - // Disable the image effect if the shader can't - // run on the users graphics card - if (!shader || !shader.isSupported) - enabled = false; - } - - - protected Material material - { - get - { - if (m_Material == null) - { - m_Material = new Material(shader); - m_Material.hideFlags = HideFlags.HideAndDontSave; - } - return m_Material; - } - } - - - protected virtual void OnDisable() - { - if (m_Material) - { - DestroyImmediate(m_Material); - } - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs.meta deleted file mode 100644 index f3c0025..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffectBase.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f6469eb0ad1119d6d00011d98d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs deleted file mode 100644 index c8d4afc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - /// A Utility class for performing various image based rendering tasks. - [AddComponentMenu("")] - public class ImageEffects - { - public static void RenderDistortion(Material material, RenderTexture source, RenderTexture destination, float angle, Vector2 center, Vector2 radius) - { - bool invertY = source.texelSize.y < 0.0f; - if (invertY) - { - center.y = 1.0f - center.y; - angle = -angle; - } - - Matrix4x4 rotationMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, angle), Vector3.one); - - material.SetMatrix("_RotationMatrix", rotationMatrix); - material.SetVector("_CenterRadius", new Vector4(center.x, center.y, radius.x, radius.y)); - material.SetFloat("_Angle", angle*Mathf.Deg2Rad); - - Graphics.Blit(source, destination, material); - } - - - [Obsolete("Use Graphics.Blit(source,dest) instead")] - public static void Blit(RenderTexture source, RenderTexture dest) - { - Graphics.Blit(source, dest); - } - - - [Obsolete("Use Graphics.Blit(source, destination, material) instead")] - public static void BlitWithMaterial(Material material, RenderTexture source, RenderTexture dest) - { - Graphics.Blit(source, dest, material); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs.meta deleted file mode 100644 index 9d82a11..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ImageEffects.cs.meta +++ /dev/null @@ -1,17 +0,0 @@ -fileFormatVersion: 2 -guid: 89a037199d11087f1100e2b844295342 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - blitCopyShader: {fileID: 4800000, guid: 3338b5ea2f3cb594698fae65cf060346, type: 3} - - blitMultiplyShader: {fileID: 4800000, guid: 7034c801b78acab448cdcf845f7c352d, - type: 3} - - blitMultiply2XShader: {fileID: 4800000, guid: cde82987e0a884c4788c65f7b54390e8, - type: 3} - - blitAddShader: {fileID: 4800000, guid: c7515f214a63bdb42b6ae6335a00a8a4, type: 3} - - blitAddSmoothShader: {fileID: 4800000, guid: 7741a77a7c455d0418bc429bd508dc87, - type: 3} - - blitBlendShader: {fileID: 4800000, guid: f1cf7e9c98754c4429ff0f7cc1d9dd7b, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs deleted file mode 100644 index 2b7968b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using UnityEngine; - -// This class implements simple ghosting type Motion Blur. -// If Extra Blur is selected, the scene will allways be a little blurred, -// as it is scaled to a smaller resolution. -// The effect works by accumulating the previous frames in an accumulation -// texture. -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Blur/Motion Blur (Color Accumulation)")] - [RequireComponent(typeof(Camera))] - public class MotionBlur : ImageEffectBase - { - [Range(0.0f, 0.92f)] - public float blurAmount = 0.8f; - public bool extraBlur = false; - - private RenderTexture accumTexture; - - override protected void Start() - { - base.Start(); - } - - override protected void OnDisable() - { - base.OnDisable(); - DestroyImmediate(accumTexture); - } - - // Called by camera to apply image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - // Create the accumulation texture - if (accumTexture == null || accumTexture.width != source.width || accumTexture.height != source.height) - { - DestroyImmediate(accumTexture); - accumTexture = new RenderTexture(source.width, source.height, 0); - accumTexture.hideFlags = HideFlags.HideAndDontSave; - Graphics.Blit( source, accumTexture ); - } - - // If Extra Blur is selected, downscale the texture to 4x4 smaller resolution. - if (extraBlur) - { - RenderTexture blurbuffer = RenderTexture.GetTemporary(source.width/4, source.height/4, 0); - accumTexture.MarkRestoreExpected(); - Graphics.Blit(accumTexture, blurbuffer); - Graphics.Blit(blurbuffer,accumTexture); - RenderTexture.ReleaseTemporary(blurbuffer); - } - - // Clamp the motion blur variable, so it can never leave permanent trails in the image - blurAmount = Mathf.Clamp( blurAmount, 0.0f, 0.92f ); - - // Setup the texture and floating point values in the shader - material.SetTexture("_MainTex", accumTexture); - material.SetFloat("_AccumOrig", 1.0F-blurAmount); - - // We are accumulating motion over frames without clear/discard - // by design, so silence any performance warnings from Unity - accumTexture.MarkRestoreExpected(); - - // Render the image using the motion blur shader - Graphics.Blit (source, accumTexture, material); - Graphics.Blit (accumTexture, destination); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs.meta deleted file mode 100644 index 5fe9ed8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/MotionBlur.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 478a2083ad114a07d000fbfb8d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: e9ba2083ad114a07d000fbfb8d76c639, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs deleted file mode 100644 index 3230bdb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Noise/Noise And Grain (Filmic)")] - public class NoiseAndGrain : PostEffectsBase - { - - public float intensityMultiplier = 0.25f; - - public float generalIntensity = 0.5f; - public float blackIntensity = 1.0f; - public float whiteIntensity = 1.0f; - public float midGrey = 0.2f; - - public bool dx11Grain = false; - public float softness = 0.0f; - public bool monochrome = false; - - public Vector3 intensities = new Vector3(1.0f, 1.0f, 1.0f); - public Vector3 tiling = new Vector3(64.0f, 64.0f, 64.0f); - public float monochromeTiling = 64.0f; - - public FilterMode filterMode = FilterMode.Bilinear; - - public Texture2D noiseTexture; - - public Shader noiseShader; - private Material noiseMaterial = null; - - public Shader dx11NoiseShader; - private Material dx11NoiseMaterial = null; - - private static float TILE_AMOUNT = 64.0f; - - - public override bool CheckResources () - { - CheckSupport (false); - - noiseMaterial = CheckShaderAndCreateMaterial (noiseShader, noiseMaterial); - - if (dx11Grain && supportDX11) - { -#if UNITY_EDITOR - dx11NoiseShader = Shader.Find("Hidden/NoiseAndGrainDX11"); -#endif - dx11NoiseMaterial = CheckShaderAndCreateMaterial (dx11NoiseShader, dx11NoiseMaterial); - } - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources()==false || (null==noiseTexture)) - { - Graphics.Blit (source, destination); - if (null==noiseTexture) { - Debug.LogWarning("Noise & Grain effect failing as noise texture is not assigned. please assign.", transform); - } - return; - } - - softness = Mathf.Clamp(softness, 0.0f, 0.99f); - - if (dx11Grain && supportDX11) - { - // We have a fancy, procedural noise pattern in this version, so no texture needed - - dx11NoiseMaterial.SetFloat("_DX11NoiseTime", Time.frameCount); - dx11NoiseMaterial.SetTexture ("_NoiseTex", noiseTexture); - dx11NoiseMaterial.SetVector ("_NoisePerChannel", monochrome ? Vector3.one : intensities); - dx11NoiseMaterial.SetVector ("_MidGrey", new Vector3(midGrey, 1.0f/(1.0f-midGrey), -1.0f/midGrey)); - dx11NoiseMaterial.SetVector ("_NoiseAmount", new Vector3(generalIntensity, blackIntensity, whiteIntensity) * intensityMultiplier); - - if (softness > Mathf.Epsilon) - { - RenderTexture rt = RenderTexture.GetTemporary((int) (source.width * (1.0f-softness)), (int) (source.height * (1.0f-softness))); - DrawNoiseQuadGrid (source, rt, dx11NoiseMaterial, noiseTexture, monochrome ? 3 : 2); - dx11NoiseMaterial.SetTexture("_NoiseTex", rt); - Graphics.Blit(source, destination, dx11NoiseMaterial, 4); - RenderTexture.ReleaseTemporary(rt); - } - else - DrawNoiseQuadGrid (source, destination, dx11NoiseMaterial, noiseTexture, (monochrome ? 1 : 0)); - } - else - { - // normal noise (DX9 style) - - if (noiseTexture) { - noiseTexture.wrapMode = TextureWrapMode.Repeat; - noiseTexture.filterMode = filterMode; - } - - noiseMaterial.SetTexture ("_NoiseTex", noiseTexture); - noiseMaterial.SetVector ("_NoisePerChannel", monochrome ? Vector3.one : intensities); - noiseMaterial.SetVector ("_NoiseTilingPerChannel", monochrome ? Vector3.one * monochromeTiling : tiling); - noiseMaterial.SetVector ("_MidGrey", new Vector3(midGrey, 1.0f/(1.0f-midGrey), -1.0f/midGrey)); - noiseMaterial.SetVector ("_NoiseAmount", new Vector3(generalIntensity, blackIntensity, whiteIntensity) * intensityMultiplier); - - if (softness > Mathf.Epsilon) - { - RenderTexture rt2 = RenderTexture.GetTemporary((int) (source.width * (1.0f-softness)), (int) (source.height * (1.0f-softness))); - DrawNoiseQuadGrid (source, rt2, noiseMaterial, noiseTexture, 2); - noiseMaterial.SetTexture("_NoiseTex", rt2); - Graphics.Blit(source, destination, noiseMaterial, 1); - RenderTexture.ReleaseTemporary(rt2); - } - else - DrawNoiseQuadGrid (source, destination, noiseMaterial, noiseTexture, 0); - } - } - - static void DrawNoiseQuadGrid (RenderTexture source, RenderTexture dest, Material fxMaterial, Texture2D noise, int passNr) - { - RenderTexture.active = dest; - - float noiseSize = (noise.width * 1.0f); - float subDs = (1.0f * source.width) / TILE_AMOUNT; - - fxMaterial.SetTexture ("_MainTex", source); - - GL.PushMatrix (); - GL.LoadOrtho (); - - float aspectCorrection = (1.0f * source.width) / (1.0f * source.height); - float stepSizeX = 1.0f / subDs; - float stepSizeY = stepSizeX * aspectCorrection; - float texTile = noiseSize / (noise.width * 1.0f); - - fxMaterial.SetPass (passNr); - - GL.Begin (GL.QUADS); - - for (float x1 = 0.0f; x1 < 1.0f; x1 += stepSizeX) - { - for (float y1 = 0.0f; y1 < 1.0f; y1 += stepSizeY) - { - float tcXStart = Random.Range (0.0f, 1.0f); - float tcYStart = Random.Range (0.0f, 1.0f); - - //Vector3 v3 = Random.insideUnitSphere; - //Color c = new Color(v3.x, v3.y, v3.z); - - tcXStart = Mathf.Floor(tcXStart*noiseSize) / noiseSize; - tcYStart = Mathf.Floor(tcYStart*noiseSize) / noiseSize; - - float texTileMod = 1.0f / noiseSize; - - GL.MultiTexCoord2 (0, tcXStart, tcYStart); - GL.MultiTexCoord2 (1, 0.0f, 0.0f); - //GL.Color( c ); - GL.Vertex3 (x1, y1, 0.1f); - GL.MultiTexCoord2 (0, tcXStart + texTile * texTileMod, tcYStart); - GL.MultiTexCoord2 (1, 1.0f, 0.0f); - //GL.Color( c ); - GL.Vertex3 (x1 + stepSizeX, y1, 0.1f); - GL.MultiTexCoord2 (0, tcXStart + texTile * texTileMod, tcYStart + texTile * texTileMod); - GL.MultiTexCoord2 (1, 1.0f, 1.0f); - //GL.Color( c ); - GL.Vertex3 (x1 + stepSizeX, y1 + stepSizeY, 0.1f); - GL.MultiTexCoord2 (0, tcXStart, tcYStart + texTile * texTileMod); - GL.MultiTexCoord2 (1, 0.0f, 1.0f); - //GL.Color( c ); - GL.Vertex3 (x1, y1 + stepSizeY, 0.1f); - } - } - - GL.End (); - GL.PopMatrix (); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs.meta deleted file mode 100644 index 6d740fc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndGrain.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9191284b058eef549b7108b5f04e1117 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - noiseTexture: {fileID: 2800000, guid: 7a632f967e8ad42f5bd275898151ab6a, type: 3} - - noiseShader: {fileID: 4800000, guid: b0249d8c935344451aa4de6db76f0688, type: 3} - - dx11NoiseShader: {fileID: 4800000, guid: 8b30686bb4322ab42ad5eb50a0210b58, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs deleted file mode 100644 index 4f894a9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using UnityEngine; -using Random = UnityEngine.Random; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu("Image Effects/Noise/Noise and Scratches")] - public class NoiseAndScratches : MonoBehaviour - { - /// Monochrome noise just adds grain. Non-monochrome noise - /// more resembles VCR as it adds noise in YUV color space, - /// thus introducing magenta/green colors. - public bool monochrome = true; - private bool rgbFallback = false; - - // Noise grain takes random intensity from Min to Max. - [Range(0.0f,5.0f)] - public float grainIntensityMin = 0.1f; - [Range(0.0f, 5.0f)] - public float grainIntensityMax = 0.2f; - - /// The size of the noise grains (1 = one pixel). - [Range(0.1f, 50.0f)] - public float grainSize = 2.0f; - - // Scratches take random intensity from Min to Max. - [Range(0.0f, 5.0f)] - public float scratchIntensityMin = 0.05f; - [Range(0.0f, 5.0f)] - public float scratchIntensityMax = 0.25f; - - /// Scratches jump to another locations at this times per second. - [Range(1.0f, 30.0f)] - public float scratchFPS = 10.0f; - /// While scratches are in the same location, they jitter a bit. - [Range(0.0f, 1.0f)] - public float scratchJitter = 0.01f; - - public Texture grainTexture; - public Texture scratchTexture; - public Shader shaderRGB; - public Shader shaderYUV; - private Material m_MaterialRGB; - private Material m_MaterialYUV; - - private float scratchTimeLeft = 0.0f; - private float scratchX, scratchY; - - protected void Start () - { - // Disable if we don't support image effects - if (!SystemInfo.supportsImageEffects) { - enabled = false; - return; - } - - if ( shaderRGB == null || shaderYUV == null ) - { - Debug.Log( "Noise shaders are not set up! Disabling noise effect." ); - enabled = false; - } - else - { - if ( !shaderRGB.isSupported ) // disable effect if RGB shader is not supported - enabled = false; - else if ( !shaderYUV.isSupported ) // fallback to RGB if YUV is not supported - rgbFallback = true; - } - } - - protected Material material { - get { - if ( m_MaterialRGB == null ) { - m_MaterialRGB = new Material( shaderRGB ); - m_MaterialRGB.hideFlags = HideFlags.HideAndDontSave; - } - if ( m_MaterialYUV == null && !rgbFallback ) { - m_MaterialYUV = new Material( shaderYUV ); - m_MaterialYUV.hideFlags = HideFlags.HideAndDontSave; - } - return (!rgbFallback && !monochrome) ? m_MaterialYUV : m_MaterialRGB; - } - } - - protected void OnDisable() { - if ( m_MaterialRGB ) - DestroyImmediate( m_MaterialRGB ); - if ( m_MaterialYUV ) - DestroyImmediate( m_MaterialYUV ); - } - - private void SanitizeParameters() - { - grainIntensityMin = Mathf.Clamp( grainIntensityMin, 0.0f, 5.0f ); - grainIntensityMax = Mathf.Clamp( grainIntensityMax, 0.0f, 5.0f ); - scratchIntensityMin = Mathf.Clamp( scratchIntensityMin, 0.0f, 5.0f ); - scratchIntensityMax = Mathf.Clamp( scratchIntensityMax, 0.0f, 5.0f ); - scratchFPS = Mathf.Clamp( scratchFPS, 1, 30 ); - scratchJitter = Mathf.Clamp( scratchJitter, 0.0f, 1.0f ); - grainSize = Mathf.Clamp( grainSize, 0.1f, 50.0f ); - } - - // Called by the camera to apply the image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - SanitizeParameters(); - - if ( scratchTimeLeft <= 0.0f ) - { - scratchTimeLeft = Random.value * 2 / scratchFPS; // we have sanitized it earlier, won't be zero - scratchX = Random.value; - scratchY = Random.value; - } - scratchTimeLeft -= Time.deltaTime; - - Material mat = material; - - mat.SetTexture("_GrainTex", grainTexture); - mat.SetTexture("_ScratchTex", scratchTexture); - float grainScale = 1.0f / grainSize; // we have sanitized it earlier, won't be zero - mat.SetVector("_GrainOffsetScale", new Vector4( - Random.value, - Random.value, - (float)Screen.width / (float)grainTexture.width * grainScale, - (float)Screen.height / (float)grainTexture.height * grainScale - )); - mat.SetVector("_ScratchOffsetScale", new Vector4( - scratchX + Random.value*scratchJitter, - scratchY + Random.value*scratchJitter, - (float)Screen.width / (float) scratchTexture.width, - (float)Screen.height / (float) scratchTexture.height - )); - mat.SetVector("_Intensity", new Vector4( - Random.Range(grainIntensityMin, grainIntensityMax), - Random.Range(scratchIntensityMin, scratchIntensityMax), - 0, 0 )); - Graphics.Blit (source, destination, mat); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs.meta deleted file mode 100644 index 6d5b821..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/NoiseAndScratches.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a88a26a276b4e47619ce2c5adad33fab -MonoImporter: - serializedVersion: 2 - defaultReferences: - - grainTexture: {fileID: 2800000, guid: ffa9c02760c2b4e8eb9814ec06c4b05b, type: 3} - - scratchTexture: {fileID: 2800000, guid: 6205c27cc031f4e66b8ea90d1bfaa158, type: 3} - - shaderRGB: {fileID: 4800000, guid: 5d7f4c401ae8946bcb0d6ff68a9e7466, type: 3} - - shaderYUV: {fileID: 4800000, guid: 0e447868506ba49f0a73235b8a8b647a, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs deleted file mode 100644 index 9dc4be9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs +++ /dev/null @@ -1,261 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - public class PostEffectsBase : MonoBehaviour - { - protected bool supportHDRTextures = true; - protected bool supportDX11 = false; - protected bool isSupported = true; - - private List createdMaterials = new List (); - - protected Material CheckShaderAndCreateMaterial ( Shader s, Material m2Create) - { - if (!s) - { - Debug.Log("Missing shader in " + ToString ()); - enabled = false; - return null; - } - - if (s.isSupported && m2Create && m2Create.shader == s) - return m2Create; - - if (!s.isSupported) - { - NotSupported (); - Debug.Log("The shader " + s.ToString() + " on effect "+ToString()+" is not supported on this platform!"); - return null; - } - - m2Create = new Material (s); - createdMaterials.Add (m2Create); - m2Create.hideFlags = HideFlags.DontSave; - - return m2Create; - } - - - protected Material CreateMaterial (Shader s, Material m2Create) - { - if (!s) - { - Debug.Log ("Missing shader in " + ToString ()); - return null; - } - - if (m2Create && (m2Create.shader == s) && (s.isSupported)) - return m2Create; - - if (!s.isSupported) - { - return null; - } - - m2Create = new Material (s); - createdMaterials.Add (m2Create); - m2Create.hideFlags = HideFlags.DontSave; - - return m2Create; - } - - void OnEnable () - { - isSupported = true; - } - - void OnDestroy () - { - RemoveCreatedMaterials (); - } - - private void RemoveCreatedMaterials () - { - while (createdMaterials.Count > 0) - { - Material mat = createdMaterials[0]; - createdMaterials.RemoveAt (0); -#if UNITY_EDITOR - DestroyImmediate (mat); -#else - Destroy(mat); -#endif - } - } - - protected bool CheckSupport () - { - return CheckSupport (false); - } - - - public virtual bool CheckResources () - { - Debug.LogWarning ("CheckResources () for " + ToString() + " should be overwritten."); - return isSupported; - } - - - protected void Start () - { - CheckResources (); - } - - protected bool CheckSupport (bool needDepth) - { - isSupported = true; - supportHDRTextures = SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBHalf); - supportDX11 = SystemInfo.graphicsShaderLevel >= 50 && SystemInfo.supportsComputeShaders; - - if (!SystemInfo.supportsImageEffects) - { - NotSupported (); - return false; - } - - if (needDepth && !SystemInfo.SupportsRenderTextureFormat (RenderTextureFormat.Depth)) - { - NotSupported (); - return false; - } - - if (needDepth) - GetComponent().depthTextureMode |= DepthTextureMode.Depth; - - return true; - } - - protected bool CheckSupport (bool needDepth, bool needHdr) - { - if (!CheckSupport(needDepth)) - return false; - - if (needHdr && !supportHDRTextures) - { - NotSupported (); - return false; - } - - return true; - } - - - public bool Dx11Support () - { - return supportDX11; - } - - - protected void ReportAutoDisable () - { - Debug.LogWarning ("The image effect " + ToString() + " has been disabled as it's not supported on the current platform."); - } - - // deprecated but needed for old effects to survive upgrading - bool CheckShader (Shader s) - { - Debug.Log("The shader " + s.ToString () + " on effect "+ ToString () + " is not part of the Unity 3.2+ effects suite anymore. For best performance and quality, please ensure you are using the latest Standard Assets Image Effects (Pro only) package."); - if (!s.isSupported) - { - NotSupported (); - return false; - } - else - { - return false; - } - } - - - protected void NotSupported () - { - enabled = false; - isSupported = false; - return; - } - - - protected void DrawBorder (RenderTexture dest, Material material) - { - float x1; - float x2; - float y1; - float y2; - - RenderTexture.active = dest; - bool invertY = true; // source.texelSize.y < 0.0ff; - // Set up the simple Matrix - GL.PushMatrix(); - GL.LoadOrtho(); - - for (int i = 0; i < material.passCount; i++) - { - material.SetPass(i); - - float y1_; float y2_; - if (invertY) - { - y1_ = 1.0f; y2_ = 0.0f; - } - else - { - y1_ = 0.0f; y2_ = 1.0f; - } - - // left - x1 = 0.0f; - x2 = 0.0f + 1.0f/(dest.width*1.0f); - y1 = 0.0f; - y2 = 1.0f; - GL.Begin(GL.QUADS); - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - // right - x1 = 1.0f - 1.0f/(dest.width*1.0f); - x2 = 1.0f; - y1 = 0.0f; - y2 = 1.0f; - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - // top - x1 = 0.0f; - x2 = 1.0f; - y1 = 0.0f; - y2 = 0.0f + 1.0f/(dest.height*1.0f); - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - // bottom - x1 = 0.0f; - x2 = 1.0f; - y1 = 1.0f - 1.0f/(dest.height*1.0f); - y2 = 1.0f; - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - GL.End(); - } - - GL.PopMatrix(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs.meta deleted file mode 100644 index a310534..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsBase.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b6f4318ec6c2bf643a0f9edfeeaba0ec -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs deleted file mode 100644 index 156370f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - class PostEffectsHelper : MonoBehaviour - { - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - Debug.Log("OnRenderImage in Helper called ..."); - } - - static void DrawLowLevelPlaneAlignedWithCamera ( - float dist , - RenderTexture source, RenderTexture dest , - Material material , - Camera cameraForProjectionMatrix ) - { - // Make the destination texture the target for all rendering - RenderTexture.active = dest; - // Assign the source texture to a property from a shader - material.SetTexture("_MainTex", source); - bool invertY = true; // source.texelSize.y < 0.0f; - // Set up the simple Matrix - GL.PushMatrix(); - GL.LoadIdentity(); - GL.LoadProjectionMatrix(cameraForProjectionMatrix.projectionMatrix); - - float fovYHalfRad = cameraForProjectionMatrix.fieldOfView * 0.5f * Mathf.Deg2Rad; - float cotangent = Mathf.Cos(fovYHalfRad) / Mathf.Sin(fovYHalfRad); - float asp = cameraForProjectionMatrix.aspect; - - float x1 = asp/-cotangent; - float x2 = asp/cotangent; - float y1 = 1.0f/-cotangent; - float y2 = 1.0f/cotangent; - - float sc = 1.0f; // magic constant (for now) - - x1 *= dist * sc; - x2 *= dist * sc; - y1 *= dist * sc; - y2 *= dist * sc; - - float z1 = -dist; - - for (int i = 0; i < material.passCount; i++) - { - material.SetPass(i); - - GL.Begin(GL.QUADS); - float y1_; float y2_; - if (invertY) - { - y1_ = 1.0f; y2_ = 0.0f; - } - else - { - y1_ = 0.0f; y2_ = 1.0f; - } - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, z1); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, z1); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, z1); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, z1); - GL.End(); - } - - GL.PopMatrix(); - } - - static void DrawBorder ( - RenderTexture dest , - Material material ) - { - float x1; - float x2; - float y1; - float y2; - - RenderTexture.active = dest; - bool invertY = true; // source.texelSize.y < 0.0ff; - // Set up the simple Matrix - GL.PushMatrix(); - GL.LoadOrtho(); - - for (int i = 0; i < material.passCount; i++) - { - material.SetPass(i); - - float y1_; float y2_; - if (invertY) - { - y1_ = 1.0f; y2_ = 0.0f; - } - else - { - y1_ = 0.0f; y2_ = 1.0f; - } - - // left - x1 = 0.0f; - x2 = 0.0f + 1.0f/(dest.width*1.0f); - y1 = 0.0f; - y2 = 1.0f; - GL.Begin(GL.QUADS); - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - // right - x1 = 1.0f - 1.0f/(dest.width*1.0f); - x2 = 1.0f; - y1 = 0.0f; - y2 = 1.0f; - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - // top - x1 = 0.0f; - x2 = 1.0f; - y1 = 0.0f; - y2 = 0.0f + 1.0f/(dest.height*1.0f); - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - // bottom - x1 = 0.0f; - x2 = 1.0f; - y1 = 1.0f - 1.0f/(dest.height*1.0f); - y2 = 1.0f; - - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - - GL.End(); - } - - GL.PopMatrix(); - } - - static void DrawLowLevelQuad ( float x1, float x2, float y1, float y2, RenderTexture source, RenderTexture dest, Material material ) - { - // Make the destination texture the target for all rendering - RenderTexture.active = dest; - // Assign the source texture to a property from a shader - material.SetTexture("_MainTex", source); - bool invertY = true; // source.texelSize.y < 0.0f; - // Set up the simple Matrix - GL.PushMatrix(); - GL.LoadOrtho(); - - for (int i = 0; i < material.passCount; i++) - { - material.SetPass(i); - - GL.Begin(GL.QUADS); - float y1_; float y2_; - if (invertY) - { - y1_ = 1.0f; y2_ = 0.0f; - } - else - { - y1_ = 0.0f; y2_ = 1.0f; - } - GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f); - GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f); - GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f); - GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f); - GL.End(); - } - - GL.PopMatrix(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs.meta deleted file mode 100644 index 4ccd033..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/PostEffectsHelper.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 50b03df8f04b5c441aaac5b7fccb4734 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs deleted file mode 100644 index 3d2caca..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using UnityEngine; -using Object = UnityEngine.Object; - -// same as Triangles but creates quads instead which generally -// saves fillrate at the expense for more triangles to issue -namespace UnityStandardAssets.ImageEffects -{ - class Quads - { - static Mesh[] meshes; - static int currentQuads = 0; - - static bool HasMeshes () - { - if (meshes == null) - return false; - foreach (Mesh m in meshes) - if (null == m) - return false; - return true; - } - - - public static void Cleanup () - { - if (meshes == null) - return; - - for (int i = 0; i < meshes.Length; i++) - { - if (null != meshes[i]) - { - Object.DestroyImmediate (meshes[i]); - meshes[i] = null; - } - } - meshes = null; - } - - - public static Mesh[] GetMeshes ( int totalWidth, int totalHeight) - { - if (HasMeshes () && (currentQuads == (totalWidth * totalHeight))) { - return meshes; - } - - int maxQuads = 65000 / 6; - int totalQuads = totalWidth * totalHeight; - currentQuads = totalQuads; - - int meshCount = Mathf.CeilToInt ((1.0f * totalQuads) / (1.0f * maxQuads)); - - meshes = new Mesh [meshCount]; - - int i = 0; - int index = 0; - for (i = 0; i < totalQuads; i += maxQuads) - { - int quads = Mathf.FloorToInt (Mathf.Clamp ((totalQuads-i), 0, maxQuads)); - - meshes[index] = GetMesh (quads, i, totalWidth, totalHeight); - index++; - } - - return meshes; - } - - static Mesh GetMesh (int triCount, int triOffset, int totalWidth, int totalHeight) - { - var mesh = new Mesh (); - mesh.hideFlags = HideFlags.DontSave; - - var verts = new Vector3[triCount * 4]; - var uvs = new Vector2[triCount * 4]; - var uvs2 = new Vector2[triCount * 4]; - var tris = new int[triCount * 6]; - - for (int i = 0; i < triCount; i++) - { - int i4 = i * 4; - int i6 = i * 6; - - int vertexWithOffset = triOffset + i; - - float x = Mathf.Floor (vertexWithOffset % totalWidth) / totalWidth; - float y = Mathf.Floor (vertexWithOffset / totalWidth) / totalHeight; - - Vector3 position = new Vector3 (x * 2 - 1, y * 2 - 1, 1.0f); - - verts[i4 + 0] = position; - verts[i4 + 1] = position; - verts[i4 + 2] = position; - verts[i4 + 3] = position; - - uvs[i4 + 0] = new Vector2 (0.0f, 0.0f); - uvs[i4 + 1] = new Vector2 (1.0f, 0.0f); - uvs[i4 + 2] = new Vector2 (0.0f, 1.0f); - uvs[i4 + 3] = new Vector2 (1.0f, 1.0f); - - uvs2[i4 + 0] = new Vector2 (x, y); - uvs2[i4 + 1] = new Vector2 (x, y); - uvs2[i4 + 2] = new Vector2 (x, y); - uvs2[i4 + 3] = new Vector2 (x, y); - - tris[i6 + 0] = i4 + 0; - tris[i6 + 1] = i4 + 1; - tris[i6 + 2] = i4 + 2; - - tris[i6 + 3] = i4 + 1; - tris[i6 + 4] = i4 + 2; - tris[i6 + 5] = i4 + 3; - - } - - mesh.vertices = verts; - mesh.triangles = tris; - mesh.uv = uvs; - mesh.uv2 = uvs2; - - return mesh; - } - - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs.meta deleted file mode 100644 index 14c9d59..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Quads.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a20852ce049f64e4695a48b6a354be83 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs deleted file mode 100644 index 790593c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Other/Screen Overlay")] - public class ScreenOverlay : PostEffectsBase - { - public enum OverlayBlendMode - { - Additive = 0, - ScreenBlend = 1, - Multiply = 2, - Overlay = 3, - AlphaBlend = 4, - } - - public OverlayBlendMode blendMode = OverlayBlendMode.Overlay; - public float intensity = 1.0f; - public Texture2D texture = null; - - public Shader overlayShader = null; - private Material overlayMaterial = null; - - - public override bool CheckResources () - { - CheckSupport (false); - - overlayMaterial = CheckShaderAndCreateMaterial (overlayShader, overlayMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (CheckResources() == false) - { - Graphics.Blit (source, destination); - return; - } - - Vector4 UV_Transform = new Vector4(1, 0, 0, 1); - - #if UNITY_WP8 - // WP8 has no OS support for rotating screen with device orientation, - // so we do those transformations ourselves. - if (Screen.orientation == ScreenOrientation.LandscapeLeft) { - UV_Transform = new Vector4(0, -1, 1, 0); - } - if (Screen.orientation == ScreenOrientation.LandscapeRight) { - UV_Transform = new Vector4(0, 1, -1, 0); - } - if (Screen.orientation == ScreenOrientation.PortraitUpsideDown) { - UV_Transform = new Vector4(-1, 0, 0, -1); - } - #endif - - overlayMaterial.SetVector("_UV_Transform", UV_Transform); - overlayMaterial.SetFloat ("_Intensity", intensity); - overlayMaterial.SetTexture ("_Overlay", texture); - Graphics.Blit (source, destination, overlayMaterial, (int) blendMode); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs.meta deleted file mode 100644 index 75c03f9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenOverlay.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6f19108706fdce9469603d07980eb8ad -MonoImporter: - serializedVersion: 2 - defaultReferences: - - texture: {instanceID: 0} - - overlayShader: {fileID: 4800000, guid: 8c81db0e527d24acc9bcec04e87781bd, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs deleted file mode 100644 index c6b7949..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Rendering/Screen Space Ambient Obscurance")] - class ScreenSpaceAmbientObscurance : PostEffectsBase { - [Range (0,3)] - public float intensity = 0.5f; - [Range (0.1f,3)] - public float radius = 0.2f; - [Range (0,3)] - public int blurIterations = 1; - [Range (0,5)] - public float blurFilterDistance = 1.25f; - [Range (0,1)] - public int downsample = 0; - - public Texture2D rand = null; - public Shader aoShader= null; - - private Material aoMaterial = null; - - public override bool CheckResources () { - CheckSupport (true); - - aoMaterial = CheckShaderAndCreateMaterial (aoShader, aoMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnDisable () { - if (aoMaterial) - DestroyImmediate (aoMaterial); - aoMaterial = null; - } - - [ImageEffectOpaque] - void OnRenderImage (RenderTexture source, RenderTexture destination) { - if (CheckResources () == false) { - Graphics.Blit (source, destination); - return; - } - Camera camera = GetComponent(); - - Matrix4x4 P = camera.projectionMatrix; - var invP= P.inverse; - Vector4 projInfo = new Vector4 - ((-2.0f / P[0,0]), - (-2.0f / P[1,1]), - ((1.0f - P[0,2]) / P[0,0]), - ((1.0f + P[1,2]) / P[1,1])); - - if (camera.stereoEnabled) - { - Matrix4x4 P0 = camera.GetStereoProjectionMatrix(Camera.StereoscopicEye.Left); - Matrix4x4 P1 = camera.GetStereoProjectionMatrix(Camera.StereoscopicEye.Right); - - Vector4 projInfo0 = new Vector4 - ((-2.0f / (P0[0, 0])), - (-2.0f / (P0[1, 1])), - ((1.0f - P0[0, 2]) / P0[0, 0]), - ((1.0f + P0[1, 2]) / P0[1, 1])); - - Vector4 projInfo1 = new Vector4 - ((-2.0f / (P1[0, 0])), - (-2.0f / (P1[1, 1])), - ((1.0f - P1[0, 2]) / P1[0, 0]), - ((1.0f + P1[1, 2]) / P1[1, 1])); - - aoMaterial.SetVector("_ProjInfoLeft", projInfo0); // used for unprojection - aoMaterial.SetVector("_ProjInfoRight", projInfo1); // used for unprojection - } - - aoMaterial.SetVector ("_ProjInfo", projInfo); // used for unprojection - aoMaterial.SetMatrix ("_ProjectionInv", invP); // only used for reference - aoMaterial.SetTexture ("_Rand", rand); // not needed for DX11 :) - aoMaterial.SetFloat ("_Radius", radius); - aoMaterial.SetFloat ("_Radius2", radius*radius); - aoMaterial.SetFloat ("_Intensity", intensity); - aoMaterial.SetFloat ("_BlurFilterDistance", blurFilterDistance); - - int rtW = source.width; - int rtH = source.height; - - RenderTexture tmpRt = RenderTexture.GetTemporary (rtW>>downsample, rtH>>downsample); - RenderTexture tmpRt2; - - Graphics.Blit (source, tmpRt, aoMaterial, 0); - - if (downsample > 0) { - tmpRt2 = RenderTexture.GetTemporary (rtW, rtH); - Graphics.Blit(tmpRt, tmpRt2, aoMaterial, 4); - RenderTexture.ReleaseTemporary (tmpRt); - tmpRt = tmpRt2; - - // @NOTE: it's probably worth a shot to blur in low resolution - // instead with a bilat-upsample afterwards ... - } - - for (int i = 0; i < blurIterations; i++) { - aoMaterial.SetVector("_Axis", new Vector2(1.0f,0.0f)); - tmpRt2 = RenderTexture.GetTemporary (rtW, rtH); - Graphics.Blit (tmpRt, tmpRt2, aoMaterial, 1); - RenderTexture.ReleaseTemporary (tmpRt); - - aoMaterial.SetVector("_Axis", new Vector2(0.0f,1.0f)); - tmpRt = RenderTexture.GetTemporary (rtW, rtH); - Graphics.Blit (tmpRt2, tmpRt, aoMaterial, 1); - RenderTexture.ReleaseTemporary (tmpRt2); - } - - aoMaterial.SetTexture ("_AOTex", tmpRt); - Graphics.Blit (source, destination, aoMaterial, 2); - - RenderTexture.ReleaseTemporary (tmpRt); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs.meta deleted file mode 100644 index 99d4452..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientObscurance.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 75febd242c999f04d9654522a10c006b -MonoImporter: - serializedVersion: 2 - defaultReferences: - - rand: {fileID: 2800000, guid: a181ca8e3c62f3e4b8f183f6c586b032, type: 3} - - aoShader: {fileID: 4800000, guid: 95616c020c5604dda96cf76afbbc0272, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs deleted file mode 100644 index 7981ff8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs +++ /dev/null @@ -1,205 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu("Image Effects/Rendering/Screen Space Ambient Occlusion")] - public class ScreenSpaceAmbientOcclusion : MonoBehaviour - { - public enum SSAOSamples - { - Low = 0, - Medium = 1, - High = 2, - } - - [Range(0.05f, 1.0f)] - public float m_Radius = 0.4f; - public SSAOSamples m_SampleCount = SSAOSamples.Medium; - [Range(0.5f, 4.0f)] - public float m_OcclusionIntensity = 1.5f; - [Range(0, 4)] - public int m_Blur = 2; - [Range(1,6)] - public int m_Downsampling = 2; - [Range(0.2f, 2.0f)] - public float m_OcclusionAttenuation = 1.0f; - [Range(0.00001f, 0.5f)] - public float m_MinZ = 0.01f; - - public Shader m_SSAOShader; - private Material m_SSAOMaterial; - - public Texture2D m_RandomTexture; - - private bool m_Supported; - - private static Material CreateMaterial (Shader shader) - { - if (!shader) - return null; - Material m = new Material (shader); - m.hideFlags = HideFlags.HideAndDontSave; - return m; - } - private static void DestroyMaterial (Material mat) - { - if (mat) - { - DestroyImmediate (mat); - mat = null; - } - } - - - void OnDisable() - { - DestroyMaterial (m_SSAOMaterial); - } - - void Start() - { - if (!SystemInfo.supportsImageEffects || !SystemInfo.SupportsRenderTextureFormat (RenderTextureFormat.Depth)) - { - m_Supported = false; - enabled = false; - return; - } - - CreateMaterials (); - if (!m_SSAOMaterial || m_SSAOMaterial.passCount != 5) - { - m_Supported = false; - enabled = false; - return; - } - - //CreateRandomTable (26, 0.2f); - - m_Supported = true; - } - - void OnEnable () { - GetComponent().depthTextureMode |= DepthTextureMode.DepthNormals; - } - - private void CreateMaterials () - { - if (!m_SSAOMaterial && m_SSAOShader.isSupported) - { - m_SSAOMaterial = CreateMaterial (m_SSAOShader); - m_SSAOMaterial.SetTexture ("_RandomTexture", m_RandomTexture); - } - } - - [ImageEffectOpaque] - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if (!m_Supported || !m_SSAOShader.isSupported) { - enabled = false; - return; - } - CreateMaterials (); - - m_Downsampling = Mathf.Clamp (m_Downsampling, 1, 6); - m_Radius = Mathf.Clamp (m_Radius, 0.05f, 1.0f); - m_MinZ = Mathf.Clamp (m_MinZ, 0.00001f, 0.5f); - m_OcclusionIntensity = Mathf.Clamp (m_OcclusionIntensity, 0.5f, 4.0f); - m_OcclusionAttenuation = Mathf.Clamp (m_OcclusionAttenuation, 0.2f, 2.0f); - m_Blur = Mathf.Clamp (m_Blur, 0, 4); - - // Render SSAO term into a smaller texture - RenderTexture rtAO = RenderTexture.GetTemporary (source.width / m_Downsampling, source.height / m_Downsampling, 0); - float fovY = GetComponent().fieldOfView; - float far = GetComponent().farClipPlane; - float y = Mathf.Tan (fovY * Mathf.Deg2Rad * 0.5f) * far; - float x = y * GetComponent().aspect; - m_SSAOMaterial.SetVector ("_FarCorner", new Vector3(x,y,far)); - int noiseWidth, noiseHeight; - if (m_RandomTexture) { - noiseWidth = m_RandomTexture.width; - noiseHeight = m_RandomTexture.height; - } else { - noiseWidth = 1; noiseHeight = 1; - } - m_SSAOMaterial.SetVector ("_NoiseScale", new Vector3 ((float)rtAO.width / noiseWidth, (float)rtAO.height / noiseHeight, 0.0f)); - m_SSAOMaterial.SetVector ("_Params", new Vector4( - m_Radius, - m_MinZ, - 1.0f / m_OcclusionAttenuation, - m_OcclusionIntensity)); - - bool doBlur = m_Blur > 0; - Graphics.Blit (doBlur ? null : source, rtAO, m_SSAOMaterial, (int)m_SampleCount); - - if (doBlur) - { - // Blur SSAO horizontally - RenderTexture rtBlurX = RenderTexture.GetTemporary (source.width, source.height, 0); - m_SSAOMaterial.SetVector ("_TexelOffsetScale", - new Vector4 ((float)m_Blur / source.width, 0,0,0)); - m_SSAOMaterial.SetTexture ("_SSAO", rtAO); - Graphics.Blit (null, rtBlurX, m_SSAOMaterial, 3); - RenderTexture.ReleaseTemporary (rtAO); // original rtAO not needed anymore - - // Blur SSAO vertically - RenderTexture rtBlurY = RenderTexture.GetTemporary (source.width, source.height, 0); - m_SSAOMaterial.SetVector ("_TexelOffsetScale", - new Vector4 (0, (float)m_Blur/source.height, 0,0)); - m_SSAOMaterial.SetTexture ("_SSAO", rtBlurX); - Graphics.Blit (source, rtBlurY, m_SSAOMaterial, 3); - RenderTexture.ReleaseTemporary (rtBlurX); // blurX RT not needed anymore - - rtAO = rtBlurY; // AO is the blurred one now - } - - // Modulate scene rendering with SSAO - m_SSAOMaterial.SetTexture ("_SSAO", rtAO); - Graphics.Blit (source, destination, m_SSAOMaterial, 4); - - RenderTexture.ReleaseTemporary (rtAO); - } - - /* - private void CreateRandomTable (int count, float minLength) - { - Random.seed = 1337; - Vector3[] samples = new Vector3[count]; - // initial samples - for (int i = 0; i < count; ++i) - samples[i] = Random.onUnitSphere; - // energy minimization: push samples away from others - int iterations = 100; - while (iterations-- > 0) { - for (int i = 0; i < count; ++i) { - Vector3 vec = samples[i]; - Vector3 res = Vector3.zero; - // minimize with other samples - for (int j = 0; j < count; ++j) { - Vector3 force = vec - samples[j]; - float fac = Vector3.Dot (force, force); - if (fac > 0.00001f) - res += force * (1.0f / fac); - } - samples[i] = (samples[i] + res * 0.5f).normalized; - } - } - // now scale samples between minLength and 1.0 - for (int i = 0; i < count; ++i) { - samples[i] = samples[i] * Random.Range (minLength, 1.0f); - } - - string table = string.Format ("#define SAMPLE_COUNT {0}\n", count); - table += "const float3 RAND_SAMPLES[SAMPLE_COUNT] = {\n"; - for (int i = 0; i < count; ++i) { - Vector3 v = samples[i]; - table += string.Format("\tfloat3({0},{1},{2}),\n", v.x, v.y, v.z); - } - table += "};\n"; - Debug.Log (table); - } - */ - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs.meta deleted file mode 100644 index 8fda23b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/ScreenSpaceAmbientOcclusion.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b0923359e9e352a4b9b11c7b7161ad67 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - m_SSAOShader: {fileID: 4800000, guid: 43ca18288c424f645aaa1e9e07f04c50, type: 3} - - m_RandomTexture: {fileID: 2800000, guid: a181ca8e3c62f3e4b8f183f6c586b032, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs deleted file mode 100644 index 86ac0c1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Color Adjustments/Sepia Tone")] - public class SepiaTone : ImageEffectBase - { - // Called by camera to apply image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - Graphics.Blit (source, destination, material); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs.meta deleted file mode 100644 index 94ff94c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SepiaTone.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a07a781cad112c75d0008dfa8d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: b6aa781cad112c75d0008dfa8d76c639, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs deleted file mode 100644 index d9ce6bb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Rendering/Sun Shafts")] - public class SunShafts : PostEffectsBase - { - public enum SunShaftsResolution - { - Low = 0, - Normal = 1, - High = 2, - } - - public enum ShaftsScreenBlendMode - { - Screen = 0, - Add = 1, - } - - - public SunShaftsResolution resolution = SunShaftsResolution.Normal; - public ShaftsScreenBlendMode screenBlendMode = ShaftsScreenBlendMode.Screen; - - public Transform sunTransform; - public int radialBlurIterations = 2; - public Color sunColor = Color.white; - public Color sunThreshold = new Color(0.87f,0.74f,0.65f); - public float sunShaftBlurRadius = 2.5f; - public float sunShaftIntensity = 1.15f; - - public float maxRadius = 0.75f; - - public bool useDepthTexture = true; - - public Shader sunShaftsShader; - private Material sunShaftsMaterial; - - public Shader simpleClearShader; - private Material simpleClearMaterial; - - - public override bool CheckResources () { - CheckSupport (useDepthTexture); - - sunShaftsMaterial = CheckShaderAndCreateMaterial (sunShaftsShader, sunShaftsMaterial); - simpleClearMaterial = CheckShaderAndCreateMaterial (simpleClearShader, simpleClearMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) { - if (CheckResources()==false) { - Graphics.Blit (source, destination); - return; - } - - // we actually need to check this every frame - if (useDepthTexture) - GetComponent().depthTextureMode |= DepthTextureMode.Depth; - - int divider = 4; - if (resolution == SunShaftsResolution.Normal) - divider = 2; - else if (resolution == SunShaftsResolution.High) - divider = 1; - - Vector3 v = Vector3.one * 0.5f; - if (sunTransform) - v = GetComponent().WorldToViewportPoint (sunTransform.position); - else - v = new Vector3(0.5f, 0.5f, 0.0f); - - int rtW = source.width / divider; - int rtH = source.height / divider; - - RenderTexture lrColorB; - RenderTexture lrDepthBuffer = RenderTexture.GetTemporary (rtW, rtH, 0); - - // mask out everything except the skybox - // we have 2 methods, one of which requires depth buffer support, the other one is just comparing images - - sunShaftsMaterial.SetVector ("_BlurRadius4", new Vector4 (1.0f, 1.0f, 0.0f, 0.0f) * sunShaftBlurRadius ); - sunShaftsMaterial.SetVector ("_SunPosition", new Vector4 (v.x, v.y, v.z, maxRadius)); - sunShaftsMaterial.SetVector ("_SunThreshold", sunThreshold); - - if (!useDepthTexture) { -#if UNITY_5_6_OR_NEWER - var format= GetComponent().allowHDR ? RenderTextureFormat.DefaultHDR: RenderTextureFormat.Default; -#else - var format = GetComponent().hdr ? RenderTextureFormat.DefaultHDR : RenderTextureFormat.Default; -#endif - RenderTexture tmpBuffer = RenderTexture.GetTemporary (source.width, source.height, 0, format); - RenderTexture.active = tmpBuffer; - GL.ClearWithSkybox (false, GetComponent()); - - sunShaftsMaterial.SetTexture ("_Skybox", tmpBuffer); - Graphics.Blit (source, lrDepthBuffer, sunShaftsMaterial, 3); - RenderTexture.ReleaseTemporary (tmpBuffer); - } - else { - Graphics.Blit (source, lrDepthBuffer, sunShaftsMaterial, 2); - } - - // paint a small black small border to get rid of clamping problems - DrawBorder (lrDepthBuffer, simpleClearMaterial); - - // radial blur: - - radialBlurIterations = Mathf.Clamp (radialBlurIterations, 1, 4); - - float ofs = sunShaftBlurRadius * (1.0f / 768.0f); - - sunShaftsMaterial.SetVector ("_BlurRadius4", new Vector4 (ofs, ofs, 0.0f, 0.0f)); - sunShaftsMaterial.SetVector ("_SunPosition", new Vector4 (v.x, v.y, v.z, maxRadius)); - - for (int it2 = 0; it2 < radialBlurIterations; it2++ ) { - // each iteration takes 2 * 6 samples - // we update _BlurRadius each time to cheaply get a very smooth look - - lrColorB = RenderTexture.GetTemporary (rtW, rtH, 0); - Graphics.Blit (lrDepthBuffer, lrColorB, sunShaftsMaterial, 1); - RenderTexture.ReleaseTemporary (lrDepthBuffer); - ofs = sunShaftBlurRadius * (((it2 * 2.0f + 1.0f) * 6.0f)) / 768.0f; - sunShaftsMaterial.SetVector ("_BlurRadius4", new Vector4 (ofs, ofs, 0.0f, 0.0f) ); - - lrDepthBuffer = RenderTexture.GetTemporary (rtW, rtH, 0); - Graphics.Blit (lrColorB, lrDepthBuffer, sunShaftsMaterial, 1); - RenderTexture.ReleaseTemporary (lrColorB); - ofs = sunShaftBlurRadius * (((it2 * 2.0f + 2.0f) * 6.0f)) / 768.0f; - sunShaftsMaterial.SetVector ("_BlurRadius4", new Vector4 (ofs, ofs, 0.0f, 0.0f) ); - } - - // put together: - - if (v.z >= 0.0f) - sunShaftsMaterial.SetVector ("_SunColor", new Vector4 (sunColor.r, sunColor.g, sunColor.b, sunColor.a) * sunShaftIntensity); - else - sunShaftsMaterial.SetVector ("_SunColor", Vector4.zero); // no backprojection ! - sunShaftsMaterial.SetTexture ("_ColorBuffer", lrDepthBuffer); - Graphics.Blit (source, destination, sunShaftsMaterial, (screenBlendMode == ShaftsScreenBlendMode.Screen) ? 0 : 4); - - RenderTexture.ReleaseTemporary (lrDepthBuffer); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs.meta deleted file mode 100644 index acf1863..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/SunShafts.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 60e318a6043c1cb4a8ce1c8805bab930 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - sunTransform: {instanceID: 0} - - sunShaftsShader: {fileID: 4800000, guid: d3b1c8c1036784176946f5cfbfb7fe4c, type: 3} - - simpleClearShader: {fileID: 4800000, guid: f688f89ed5eb847c5b19c934a0f1e772, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs deleted file mode 100644 index c5a23c9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Camera/Tilt Shift (Lens Blur)")] - class TiltShift : PostEffectsBase { - public enum TiltShiftMode - { - TiltShiftMode, - IrisMode, - } - public enum TiltShiftQuality - { - Preview, - Low, - Normal, - High, - } - - public TiltShiftMode mode = TiltShiftMode.TiltShiftMode; - public TiltShiftQuality quality = TiltShiftQuality.Normal; - - [Range(0.0f, 15.0f)] - public float blurArea = 1.0f; - - [Range(0.0f, 25.0f)] - public float maxBlurSize = 5.0f; - - [Range(0, 1)] - public int downsample = 0; - - public Shader tiltShiftShader = null; - private Material tiltShiftMaterial = null; - - - public override bool CheckResources () { - CheckSupport (false); - - tiltShiftMaterial = CheckShaderAndCreateMaterial (tiltShiftShader, tiltShiftMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - void OnRenderImage (RenderTexture source, RenderTexture destination) { - if (CheckResources() == false) { - Graphics.Blit (source, destination); - return; - } - - tiltShiftMaterial.SetFloat("_BlurSize", maxBlurSize < 0.0f ? 0.0f : maxBlurSize); - tiltShiftMaterial.SetFloat("_BlurArea", blurArea); - source.filterMode = FilterMode.Bilinear; - - RenderTexture rt = destination; - if (downsample > 0f) { - rt = RenderTexture.GetTemporary (source.width>>downsample, source.height>>downsample, 0, source.format); - rt.filterMode = FilterMode.Bilinear; - } - - int basePassNr = (int) quality; basePassNr *= 2; - Graphics.Blit (source, rt, tiltShiftMaterial, mode == TiltShiftMode.TiltShiftMode ? basePassNr : basePassNr + 1); - - if (downsample > 0) { - tiltShiftMaterial.SetTexture ("_Blurred", rt); - Graphics.Blit (source, destination, tiltShiftMaterial, 8); - } - - if (rt != destination) - RenderTexture.ReleaseTemporary (rt); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs.meta deleted file mode 100644 index 6fb44f4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/TiltShift.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a22b3a7095a744a428c134b5e26ad68e -MonoImporter: - serializedVersion: 2 - defaultReferences: - - tiltShiftShader: {fileID: 4800000, guid: bf34d2a25450349699e8ae6456fa7ca9, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs deleted file mode 100644 index 665ee98..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs +++ /dev/null @@ -1,274 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent(typeof (Camera))] - [AddComponentMenu("Image Effects/Color Adjustments/Tonemapping")] - public class Tonemapping : PostEffectsBase - { - public enum TonemapperType - { - SimpleReinhard, - UserCurve, - Hable, - Photographic, - OptimizedHejiDawson, - AdaptiveReinhard, - AdaptiveReinhardAutoWhite, - }; - - public enum AdaptiveTexSize - { - Square16 = 16, - Square32 = 32, - Square64 = 64, - Square128 = 128, - Square256 = 256, - Square512 = 512, - Square1024 = 1024, - }; - - public TonemapperType type = TonemapperType.Photographic; - public AdaptiveTexSize adaptiveTextureSize = AdaptiveTexSize.Square256; - - // CURVE parameter - public AnimationCurve remapCurve; - private Texture2D curveTex = null; - - // UNCHARTED parameter - public float exposureAdjustment = 1.5f; - - // REINHARD parameter - public float middleGrey = 0.4f; - public float white = 2.0f; - public float adaptionSpeed = 1.5f; - - // usual & internal stuff - public Shader tonemapper = null; - public bool validRenderTextureFormat = true; - private Material tonemapMaterial = null; - private RenderTexture rt = null; - private RenderTextureFormat rtFormat = RenderTextureFormat.ARGBHalf; - - - public override bool CheckResources() - { - CheckSupport(false, true); - - tonemapMaterial = CheckShaderAndCreateMaterial(tonemapper, tonemapMaterial); - if (!curveTex && type == TonemapperType.UserCurve) - { - curveTex = new Texture2D(256, 1, TextureFormat.ARGB32, false, true); - curveTex.filterMode = FilterMode.Bilinear; - curveTex.wrapMode = TextureWrapMode.Clamp; - curveTex.hideFlags = HideFlags.DontSave; - } - - if (!isSupported) - ReportAutoDisable(); - return isSupported; - } - - - public float UpdateCurve() - { - float range = 1.0f; - if (remapCurve.keys.Length < 1) - remapCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(2, 1)); - if (remapCurve != null) - { - if (remapCurve.length > 0) - range = remapCurve[remapCurve.length - 1].time; - for (float i = 0.0f; i <= 1.0f; i += 1.0f/255.0f) - { - float c = remapCurve.Evaluate(i*1.0f*range); - curveTex.SetPixel((int) Mathf.Floor(i*255.0f), 0, new Color(c, c, c)); - } - curveTex.Apply(); - } - return 1.0f/range; - } - - - private void OnDisable() - { - if (rt) - { - DestroyImmediate(rt); - rt = null; - } - if (tonemapMaterial) - { - DestroyImmediate(tonemapMaterial); - tonemapMaterial = null; - } - if (curveTex) - { - DestroyImmediate(curveTex); - curveTex = null; - } - } - - - private bool CreateInternalRenderTexture() - { - if (rt) - { - return false; - } - rtFormat = SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.RGHalf) ? RenderTextureFormat.RGHalf : RenderTextureFormat.ARGBHalf; - rt = new RenderTexture(1, 1, 0, rtFormat); - rt.hideFlags = HideFlags.DontSave; - return true; - } - - - // attribute indicates that the image filter chain will continue in LDR - [ImageEffectTransformsToLDR] - private void OnRenderImage(RenderTexture source, RenderTexture destination) - { - if (CheckResources() == false) - { - Graphics.Blit(source, destination); - return; - } - -#if UNITY_EDITOR - validRenderTextureFormat = true; - if (source.format != RenderTextureFormat.ARGBHalf) - { - validRenderTextureFormat = false; - } -#endif - - // clamp some values to not go out of a valid range - - exposureAdjustment = exposureAdjustment < 0.001f ? 0.001f : exposureAdjustment; - - // SimpleReinhard tonemappers (local, non adaptive) - - if (type == TonemapperType.UserCurve) - { - float rangeScale = UpdateCurve(); - tonemapMaterial.SetFloat("_RangeScale", rangeScale); - tonemapMaterial.SetTexture("_Curve", curveTex); - Graphics.Blit(source, destination, tonemapMaterial, 4); - return; - } - - if (type == TonemapperType.SimpleReinhard) - { - tonemapMaterial.SetFloat("_ExposureAdjustment", exposureAdjustment); - Graphics.Blit(source, destination, tonemapMaterial, 6); - return; - } - - if (type == TonemapperType.Hable) - { - tonemapMaterial.SetFloat("_ExposureAdjustment", exposureAdjustment); - Graphics.Blit(source, destination, tonemapMaterial, 5); - return; - } - - if (type == TonemapperType.Photographic) - { - tonemapMaterial.SetFloat("_ExposureAdjustment", exposureAdjustment); - Graphics.Blit(source, destination, tonemapMaterial, 8); - return; - } - - if (type == TonemapperType.OptimizedHejiDawson) - { - tonemapMaterial.SetFloat("_ExposureAdjustment", 0.5f*exposureAdjustment); - Graphics.Blit(source, destination, tonemapMaterial, 7); - return; - } - - // still here? - // => adaptive tone mapping: - // builds an average log luminance, tonemaps according to - // middle grey and white values (user controlled) - - // AdaptiveReinhardAutoWhite will calculate white value automagically - - bool freshlyBrewedInternalRt = CreateInternalRenderTexture(); // this retrieves rtFormat, so should happen before rt allocations - - RenderTexture rtSquared = RenderTexture.GetTemporary((int) adaptiveTextureSize, (int) adaptiveTextureSize, 0, rtFormat); - Graphics.Blit(source, rtSquared); - - int downsample = (int) Mathf.Log(rtSquared.width*1.0f, 2); - - int div = 2; - var rts = new RenderTexture[downsample]; - for (int i = 0; i < downsample; i++) - { - rts[i] = RenderTexture.GetTemporary(rtSquared.width/div, rtSquared.width/div, 0, rtFormat); - div *= 2; - } - - // downsample pyramid - - var lumRt = rts[downsample - 1]; - Graphics.Blit(rtSquared, rts[0], tonemapMaterial, 1); - if (type == TonemapperType.AdaptiveReinhardAutoWhite) - { - for (int i = 0; i < downsample - 1; i++) - { - Graphics.Blit(rts[i], rts[i + 1], tonemapMaterial, 9); - lumRt = rts[i + 1]; - } - } - else if (type == TonemapperType.AdaptiveReinhard) - { - for (int i = 0; i < downsample - 1; i++) - { - Graphics.Blit(rts[i], rts[i + 1]); - lumRt = rts[i + 1]; - } - } - - // we have the needed values, let's apply adaptive tonemapping - - adaptionSpeed = adaptionSpeed < 0.001f ? 0.001f : adaptionSpeed; - tonemapMaterial.SetFloat("_AdaptionSpeed", adaptionSpeed); - - rt.MarkRestoreExpected(); // keeping luminance values between frames, RT restore expected - -#if UNITY_EDITOR - if (Application.isPlaying && !freshlyBrewedInternalRt) - Graphics.Blit(lumRt, rt, tonemapMaterial, 2); - else - Graphics.Blit(lumRt, rt, tonemapMaterial, 3); -#else - Graphics.Blit (lumRt, rt, tonemapMaterial, freshlyBrewedInternalRt ? 3 : 2); -#endif - - middleGrey = middleGrey < 0.001f ? 0.001f : middleGrey; - tonemapMaterial.SetVector("_HdrParams", new Vector4(middleGrey, middleGrey, middleGrey, white*white)); - tonemapMaterial.SetTexture("_SmallTex", rt); - if (type == TonemapperType.AdaptiveReinhard) - { - Graphics.Blit(source, destination, tonemapMaterial, 0); - } - else if (type == TonemapperType.AdaptiveReinhardAutoWhite) - { - Graphics.Blit(source, destination, tonemapMaterial, 10); - } - else - { - Debug.LogError("No valid adaptive tonemapper type found!"); - Graphics.Blit(source, destination); // at least we get the TransformToLDR effect - } - - // cleanup for adaptive - - for (int i = 0; i < downsample; i++) - { - RenderTexture.ReleaseTemporary(rts[i]); - } - RenderTexture.ReleaseTemporary(rtSquared); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs.meta deleted file mode 100644 index 4443b42..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Tonemapping.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e50e925fb93c78246bf995d9dc3a2330 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - tonemapper: {fileID: 4800000, guid: 003377fc2620a44939dadde6fe3f8190, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs deleted file mode 100644 index 516bded..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using UnityEngine; -using Object = UnityEngine.Object; - -namespace UnityStandardAssets.ImageEffects -{ - class Triangles - { - private static Mesh[] meshes; - private static int currentTris = 0; - - static bool HasMeshes() - { - if (meshes == null) - return false; - for (int i = 0; i < meshes.Length; i++) - if (null == meshes[i]) - return false; - - return true; - } - - static void Cleanup() - { - if (meshes == null) - return; - - for (int i = 0; i < meshes.Length; i++) - { - if (null != meshes[i]) - { - Object.DestroyImmediate(meshes[i]); - meshes[i] = null; - } - } - meshes = null; - } - - static Mesh[] GetMeshes(int totalWidth, int totalHeight) - { - if (HasMeshes() && (currentTris == (totalWidth * totalHeight))) - { - return meshes; - } - - int maxTris = 65000 / 3; - int totalTris = totalWidth * totalHeight; - currentTris = totalTris; - - int meshCount = Mathf.CeilToInt((1.0f * totalTris) / (1.0f * maxTris)); - - meshes = new Mesh[meshCount]; - - int i = 0; - int index = 0; - for (i = 0; i < totalTris; i += maxTris) - { - int tris = Mathf.FloorToInt(Mathf.Clamp((totalTris - i), 0, maxTris)); - - meshes[index] = GetMesh(tris, i, totalWidth, totalHeight); - index++; - } - - return meshes; - } - - static Mesh GetMesh(int triCount, int triOffset, int totalWidth, int totalHeight) - { - var mesh = new Mesh(); - mesh.hideFlags = HideFlags.DontSave; - - var verts = new Vector3[triCount * 3]; - var uvs = new Vector2[triCount * 3]; - var uvs2 = new Vector2[triCount * 3]; - var tris = new int[triCount * 3]; - - for (int i = 0; i < triCount; i++) - { - int i3 = i * 3; - int vertexWithOffset = triOffset + i; - - float x = Mathf.Floor(vertexWithOffset % totalWidth) / totalWidth; - float y = Mathf.Floor(vertexWithOffset / totalWidth) / totalHeight; - - Vector3 position = new Vector3(x * 2 - 1, y * 2 - 1, 1.0f); - - verts[i3 + 0] = position; - verts[i3 + 1] = position; - verts[i3 + 2] = position; - - uvs[i3 + 0] = new Vector2(0.0f, 0.0f); - uvs[i3 + 1] = new Vector2(1.0f, 0.0f); - uvs[i3 + 2] = new Vector2(0.0f, 1.0f); - - uvs2[i3 + 0] = new Vector2(x, y); - uvs2[i3 + 1] = new Vector2(x, y); - uvs2[i3 + 2] = new Vector2(x, y); - - tris[i3 + 0] = i3 + 0; - tris[i3 + 1] = i3 + 1; - tris[i3 + 2] = i3 + 2; - } - - mesh.vertices = verts; - mesh.triangles = tris; - mesh.uv = uvs; - mesh.uv2 = uvs2; - - return mesh; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs.meta deleted file mode 100644 index 2ea56f0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Triangles.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 18b91636de2ba3445913e4cf38528dc8 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs deleted file mode 100644 index a7b57e9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Displacement/Twirl")] - public class Twirl : ImageEffectBase - { - public Vector2 radius = new Vector2(0.3F,0.3F); - [Range(0.0f,360.0f)] - public float angle = 50; - public Vector2 center = new Vector2 (0.5F, 0.5F); - - - // Called by camera to apply image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - ImageEffects.RenderDistortion (material, source, destination, angle, center, radius); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs.meta deleted file mode 100644 index 4b0b6c8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Twirl.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bdda781cad112c75d0008dfa8d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: 641b781cad112c75d0008dfa8d76c639, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs deleted file mode 100644 index e34321b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [RequireComponent (typeof(Camera))] - [AddComponentMenu ("Image Effects/Camera/Vignette and Chromatic Aberration")] - public class VignetteAndChromaticAberration : PostEffectsBase - { - public enum AberrationMode - { - Simple = 0, - Advanced = 1, - } - - - public AberrationMode mode = AberrationMode.Simple; - public float intensity = 0.036f; // intensity == 0 disables pre pass (optimization) - public float chromaticAberration = 0.2f; - public float axialAberration = 0.5f; - public float blur = 0.0f; // blur == 0 disables blur pass (optimization) - public float blurSpread = 0.75f; - public float luminanceDependency = 0.25f; - public float blurDistance = 2.5f; - public Shader vignetteShader; - public Shader separableBlurShader; - public Shader chromAberrationShader; - - - private Material m_VignetteMaterial; - private Material m_SeparableBlurMaterial; - private Material m_ChromAberrationMaterial; - - - public override bool CheckResources () - { - CheckSupport (false); - - m_VignetteMaterial = CheckShaderAndCreateMaterial (vignetteShader, m_VignetteMaterial); - m_SeparableBlurMaterial = CheckShaderAndCreateMaterial (separableBlurShader, m_SeparableBlurMaterial); - m_ChromAberrationMaterial = CheckShaderAndCreateMaterial (chromAberrationShader, m_ChromAberrationMaterial); - - if (!isSupported) - ReportAutoDisable (); - return isSupported; - } - - - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - if ( CheckResources () == false) - { - Graphics.Blit (source, destination); - return; - } - - int rtW = source.width; - int rtH = source.height; - - bool doPrepass = (Mathf.Abs(blur)>0.0f || Mathf.Abs(intensity)>0.0f); - - float widthOverHeight = (1.0f * rtW) / (1.0f * rtH); - const float oneOverBaseSize = 1.0f / 512.0f; - - RenderTexture color = null; - RenderTexture color2A = null; - - if (doPrepass) - { - color = RenderTexture.GetTemporary (rtW, rtH, 0, source.format); - - // Blur corners - if (Mathf.Abs (blur)>0.0f) - { - color2A = RenderTexture.GetTemporary (rtW / 2, rtH / 2, 0, source.format); - - Graphics.Blit (source, color2A, m_ChromAberrationMaterial, 0); - - for(int i = 0; i < 2; i++) - { // maybe make iteration count tweakable - m_SeparableBlurMaterial.SetVector ("offsets",new Vector4 (0.0f, blurSpread * oneOverBaseSize, 0.0f, 0.0f)); - RenderTexture color2B = RenderTexture.GetTemporary (rtW / 2, rtH / 2, 0, source.format); - Graphics.Blit (color2A, color2B, m_SeparableBlurMaterial); - RenderTexture.ReleaseTemporary (color2A); - - m_SeparableBlurMaterial.SetVector ("offsets",new Vector4 (blurSpread * oneOverBaseSize / widthOverHeight, 0.0f, 0.0f, 0.0f)); - color2A = RenderTexture.GetTemporary (rtW / 2, rtH / 2, 0, source.format); - Graphics.Blit (color2B, color2A, m_SeparableBlurMaterial); - RenderTexture.ReleaseTemporary (color2B); - } - } - - m_VignetteMaterial.SetFloat("_Intensity", (1.0f / (1.0f - intensity) - 1.0f)); // intensity for vignette - m_VignetteMaterial.SetFloat("_Blur", (1.0f / (1.0f - blur)) - 1.0f); // blur intensity - m_VignetteMaterial.SetTexture ("_VignetteTex", color2A); // blurred texture - - Graphics.Blit (source, color, m_VignetteMaterial, 0); // prepass blit: darken & blur corners - } - - m_ChromAberrationMaterial.SetFloat ("_ChromaticAberration", chromaticAberration); - m_ChromAberrationMaterial.SetFloat ("_AxialAberration", axialAberration); - m_ChromAberrationMaterial.SetVector ("_BlurDistance", new Vector2 (-blurDistance, blurDistance)); - m_ChromAberrationMaterial.SetFloat ("_Luminance", 1.0f/Mathf.Max(Mathf.Epsilon, luminanceDependency)); - - if (doPrepass) color.wrapMode = TextureWrapMode.Clamp; - else source.wrapMode = TextureWrapMode.Clamp; - Graphics.Blit (doPrepass ? color : source, destination, m_ChromAberrationMaterial, mode == AberrationMode.Advanced ? 2 : 1); - - RenderTexture.ReleaseTemporary (color); - RenderTexture.ReleaseTemporary (color2A); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs.meta deleted file mode 100644 index 6b6a813..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/VignetteAndChromaticAberration.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: dd6d4281e5d7cd44d8c6e38bc2c1b8d8 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - vignetteShader: {fileID: 4800000, guid: 627943dc7a9a74286b70a4f694a0acd5, type: 3} - - separableBlurShader: {fileID: 4800000, guid: e97c14fbb5ea04c3a902cc533d7fc5d1, - type: 3} - - chromAberrationShader: {fileID: 4800000, guid: 2b4f29398d9484ccfa9fd220449f5eee, - type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs deleted file mode 100644 index 8a2d866..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using UnityEngine; - -namespace UnityStandardAssets.ImageEffects -{ - [ExecuteInEditMode] - [AddComponentMenu("Image Effects/Displacement/Vortex")] - public class Vortex : ImageEffectBase - { - public Vector2 radius = new Vector2(0.4F,0.4F); - public float angle = 50; - public Vector2 center = new Vector2(0.5F, 0.5F); - - // Called by camera to apply image effect - void OnRenderImage (RenderTexture source, RenderTexture destination) - { - ImageEffects.RenderDistortion (material, source, destination, angle, center, radius); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs.meta deleted file mode 100644 index f6b8089..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Scripts/Vortex.cs.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a94b781cad112c75d0008dfa8d76c639 -MonoImporter: - serializedVersion: 2 - defaultReferences: - - shader: {fileID: 4800000, guid: 708b781cad112c75d0008dfa8d76c639, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders.meta deleted file mode 100644 index b68c7f9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: b2145489f7c704db8acb14a52bddeee9 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader deleted file mode 100644 index 1910244..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader +++ /dev/null @@ -1,138 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/BlendModesOverlay" { - Properties { - _MainTex ("Screen Blended", 2D) = "" {} - _Overlay ("Color", 2D) = "grey" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv[2] : TEXCOORD0; - }; - - sampler2D _Overlay; - half4 _Overlay_ST; - - sampler2D _MainTex; - half4 _MainTex_ST; - - half _Intensity; - half4 _MainTex_TexelSize; - half4 _UV_Transform = half4(1, 0, 0, 1); - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - - o.uv[0] = UnityStereoScreenSpaceUVAdjust(float2( - dot(v.texcoord.xy, _UV_Transform.xy), - dot(v.texcoord.xy, _UV_Transform.zw) - ), _Overlay_ST); - - #if UNITY_UV_STARTS_AT_TOP - if(_MainTex_TexelSize.y<0.0) - o.uv[0].y = 1.0-o.uv[0].y; - #endif - - o.uv[1] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - return o; - } - - half4 fragAddSub (v2f i) : SV_Target { - half4 toAdd = tex2D(_Overlay, i.uv[0]) * _Intensity; - return tex2D(_MainTex, i.uv[1]) + toAdd; - } - - half4 fragMultiply (v2f i) : SV_Target { - half4 toBlend = tex2D(_Overlay, i.uv[0]) * _Intensity; - return tex2D(_MainTex, i.uv[1]) * toBlend; - } - - half4 fragScreen (v2f i) : SV_Target { - half4 toBlend = (tex2D(_Overlay, i.uv[0]) * _Intensity); - return 1-(1-toBlend)*(1-(tex2D(_MainTex, i.uv[1]))); - } - - half4 fragOverlay (v2f i) : SV_Target { - half4 m = (tex2D(_Overlay, i.uv[0]));// * 255.0; - half4 color = (tex2D(_MainTex, i.uv[1]));//* 255.0; - - // overlay blend mode - //color.rgb = (color.rgb/255.0) * (color.rgb + ((2*m.rgb)/( 255.0 )) * (255.0-color.rgb)); - //color.rgb /= 255.0; - - /* -if (Target > ½) R = 1 - (1-2x(Target-½)) x (1-Blend) -if (Target <= ½) R = (2xTarget) x Blend - */ - - float3 check = step(half3(0.5,0.5,0.5), color.rgb); - float3 result = 0; - - result = check * (half3(1,1,1) - ( (half3(1,1,1) - 2*(color.rgb-0.5)) * (1-m.rgb))); - result += (1-check) * (2*color.rgb) * m.rgb; - - return half4(lerp(color.rgb, result.rgb, (_Intensity)), color.a); - } - - half4 fragAlphaBlend (v2f i) : SV_Target { - half4 toAdd = tex2D(_Overlay, i.uv[0]) ; - return lerp(tex2D(_MainTex, i.uv[1]), toAdd, toAdd.a * _Intensity); - } - - - ENDCG - -Subshader { - ZTest Always Cull Off ZWrite Off - ColorMask RGB - - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAddSub - ENDCG - } - - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragScreen - ENDCG - } - - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragMultiply - ENDCG - } - - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragOverlay - ENDCG - } - - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAlphaBlend - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader.meta deleted file mode 100644 index ebf8628..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlendModesOverlay.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 8c81db0e527d24acc9bcec04e87781bd -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader deleted file mode 100644 index 743667d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader +++ /dev/null @@ -1,54 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/BlurEffectConeTap" { - Properties { _MainTex ("", any) = "" {} } - CGINCLUDE - #include "UnityCG.cginc" - struct v2f { - float4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half2 taps[4] : TEXCOORD1; - }; - sampler2D _MainTex; - half4 _MainTex_TexelSize; - half4 _MainTex_ST; - half4 _BlurOffsets; - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - - o.uv = v.texcoord - _BlurOffsets.xy * _MainTex_TexelSize.xy; // hack, see BlurEffect.cs for the reason for this. let's make a new blur effect soon -#ifdef UNITY_SINGLE_PASS_STEREO - // we need to keep texel size correct after the uv adjustment. - o.taps[0] = UnityStereoScreenSpaceUVAdjust(o.uv + _MainTex_TexelSize * _BlurOffsets.xy * (1.0f / _MainTex_ST.xy), _MainTex_ST); - o.taps[1] = UnityStereoScreenSpaceUVAdjust(o.uv - _MainTex_TexelSize * _BlurOffsets.xy * (1.0f / _MainTex_ST.xy), _MainTex_ST); - o.taps[2] = UnityStereoScreenSpaceUVAdjust(o.uv + _MainTex_TexelSize * _BlurOffsets.xy * half2(1, -1) * (1.0f / _MainTex_ST.xy), _MainTex_ST); - o.taps[3] = UnityStereoScreenSpaceUVAdjust(o.uv - _MainTex_TexelSize * _BlurOffsets.xy * half2(1, -1) * (1.0f / _MainTex_ST.xy), _MainTex_ST); -#else - o.taps[0] = o.uv + _MainTex_TexelSize * _BlurOffsets.xy; - o.taps[1] = o.uv - _MainTex_TexelSize * _BlurOffsets.xy; - o.taps[2] = o.uv + _MainTex_TexelSize * _BlurOffsets.xy * half2(1,-1); - o.taps[3] = o.uv - _MainTex_TexelSize * _BlurOffsets.xy * half2(1,-1); -#endif - return o; - } - half4 frag(v2f i) : SV_Target { - half4 color = tex2D(_MainTex, i.taps[0]); - color += tex2D(_MainTex, i.taps[1]); - color += tex2D(_MainTex, i.taps[2]); - color += tex2D(_MainTex, i.taps[3]); - return color * 0.25; - } - ENDCG - SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - ENDCG - } - } - Fallback off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader.meta deleted file mode 100644 index 5d9fd5e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/BlurEffectConeTaps.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 57e6deea7c2924e22a5138e2b70bb4dc -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CameraMotionBlur.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CameraMotionBlur.shader deleted file mode 100644 index c9afc63..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CameraMotionBlur.shader +++ /dev/null @@ -1,534 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - /* - CAMERA MOTION BLUR IMAGE EFFECTS - - Reconstruction Filter: - Based on "Plausible Motion Blur" - http://graphics.cs.williams.edu/papers/MotionBlurI3D12/ - - CameraMotion: - Based on Alex Vlacho's technique in - http://www.valvesoftware.com/publications/2008/GDC2008_PostProcessingInTheOrangeBox.pdf - - SimpleBlur: - Straightforward sampling along velocities - - ScatterFromGather: - Combines Reconstruction with depth of field type defocus - */ - - Shader "Hidden/CameraMotionBlur" { - Properties { - _MainTex ("-", 2D) = "" {} - _NoiseTex ("-", 2D) = "grey" {} - _VelTex ("-", 2D) = "black" {} - _NeighbourMaxTex ("-", 2D) = "black" {} - _TileTexDebug ("-", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - // 's' in paper (# of samples for reconstruction) - #define NUM_SAMPLES (11) - // # samples for valve style blur - #define MOTION_SAMPLES (16) - // 'k' in paper - float _MaxRadiusOrKInPaper; - - static const int SmallDiscKernelSamples = 12; - static const float2 SmallDiscKernel[SmallDiscKernelSamples] = - { - float2(-0.326212,-0.40581), - float2(-0.840144,-0.07358), - float2(-0.695914,0.457137), - float2(-0.203345,0.620716), - float2(0.96234,-0.194983), - float2(0.473434,-0.480026), - float2(0.519456,0.767022), - float2(0.185461,-0.893124), - float2(0.507431,0.064425), - float2(0.89642,0.412458), - float2(-0.32194,-0.932615), - float2(-0.791559,-0.59771) - }; - - struct v2f - { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - sampler2D_float _CameraDepthTexture; - sampler2D _VelTex; - sampler2D _NeighbourMaxTex; - sampler2D _NoiseTex; - sampler2D _TileTexDebug; - - float4 _MainTex_TexelSize; - float4 _CameraDepthTexture_TexelSize; - float4 _VelTex_TexelSize; - - half4 _MainTex_ST; - half4 _CameraDepthTexture_ST; - half4 _VelTex_ST; - - float4x4 _InvViewProj; // inverse view-projection matrix - float4x4 _PrevViewProj; // previous view-projection matrix - float4x4 _ToPrevViewProjCombined; // combined - float4x4 _StereoToPrevViewProjCombined0; // combined stereo versions. - float4x4 _StereoToPrevViewProjCombined1; // combined stereo versions. - - float _Jitter; - - float _VelocityScale; - float _DisplayVelocityScale; - - float _MaxVelocity; - float _MinVelocity; - - float4 _BlurDirectionPacked; - - float _SoftZDistance; - - v2f vert(appdata_img v) - { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - return o; - } - - float4x4 GetPrevViewProjCombined() - { -#ifdef UNITY_SINGLE_PASS_STEREO - return unity_StereoEyeIndex == 0 ? _StereoToPrevViewProjCombined0 : _StereoToPrevViewProjCombined1; -#else - return _ToPrevViewProjCombined; -#endif - } - - float4 CameraVelocity(v2f i) : SV_Target - { - float2 depth_uv = i.uv; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - depth_uv.y = 1 - depth_uv.y; - #endif - - // read depth - float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, depth_uv); - - // calculate position from pixel from depth - float3 clipPos = float3(i.uv.x*2.0-1.0, (i.uv.y)*2.0-1.0, d); - - // only 1 matrix mul: - float4 prevClipPos = mul(GetPrevViewProjCombined(), float4(clipPos, 1.0)); - prevClipPos.xyz /= prevClipPos.w; - - /* - float4 ws = mul(_InvViewProj, float4(clipPos, 1.0)); - ws /= ws.w; - prevClipPos = mul(_PrevViewProj,ws); - prevClipPos.xyz /= prevClipPos.w; - */ - - /* - float2 vel = _VelocityScale *(clipPos.xy - prevClipPos.xy) / 2.f; - // clamp to maximum velocity (in pixels) - float maxVel = length(_MainTex_TexelSize.xy*_MaxVelocity); - if (length(vel) > maxVel) { - vel = normalize(vel) * maxVel; - } - return float4(vel, 0.0, 0.0); - */ - - float2 vel = _MainTex_TexelSize.zw * _VelocityScale * (clipPos.xy - prevClipPos.xy) / 2.f; - float vellen = length(vel); - float maxVel = _MaxVelocity; - float2 velOut = vel * max(0.5, min(vellen, maxVel)) / (vellen + 1e-2f); - velOut *= _MainTex_TexelSize.xy; - return float4(velOut, 0.0, 0.0); - - } - - // vector with largest magnitude - float2 vmax(float2 a, float2 b) - { - float ma = dot(a, a); - float mb = dot(b, b); - return (ma > mb) ? a : b; - } - - // find dominant velocity for each tile - float4 TileMax(v2f i) : SV_Target - { - float2 uvCorner = i.uv - _MainTex_TexelSize.xy * (_MaxRadiusOrKInPaper * 0.5); - float2 maxvel = float2(0,0); - float4 baseUv = float4(uvCorner,0,0); - float4 uvScale = float4(_MainTex_TexelSize.xy, 0, 0); - - for(int l=0; l<(int)_MaxRadiusOrKInPaper; l++) - { - for(int k=0; k<(int)_MaxRadiusOrKInPaper; k++) - { - maxvel = vmax(maxvel, tex2Dlod(_MainTex, baseUv + float4(l,k,0,0) * uvScale).xy); - } - } - return float4(maxvel, 0, 1); - } - - // find maximum velocity in any adjacent tile - float4 NeighbourMax(v2f i) : SV_Target - { - float2 x_ = i.uv; - - // to fetch all neighbours, we need 3x3 point filtered samples - - float2 nx = tex2D(_MainTex, x_+float2(1.0, 1.0)*_MainTex_TexelSize.xy).xy; - nx = vmax(nx, tex2D(_MainTex, x_+float2(1.0, 0.0)*_MainTex_TexelSize.xy).xy); - nx = vmax(nx, tex2D(_MainTex, x_+float2(1.0,-1.0)*_MainTex_TexelSize.xy).xy); - nx = vmax(nx, tex2D(_MainTex, x_+float2(0.0, 1.0)*_MainTex_TexelSize.xy).xy); - nx = vmax(nx, tex2D(_MainTex, x_+float2(0.0, 0.0)*_MainTex_TexelSize.xy).xy); - nx = vmax(nx, tex2D(_MainTex, x_+float2(0.0,-1.0)*_MainTex_TexelSize.xy).xy); - nx = vmax(nx, tex2D(_MainTex, x_+float2(-1.0, 1.0)*_MainTex_TexelSize.xy).xy); - nx = vmax(nx, tex2D(_MainTex, x_+float2(-1.0, 0.0)*_MainTex_TexelSize.xy).xy); - nx = vmax(nx, tex2D(_MainTex, x_+float2(-1.0,-1.0)*_MainTex_TexelSize.xy).xy); - - return float4(nx, 0, 0); - } - - float4 Debug(v2f i) : SV_Target - { - return saturate( float4(tex2D(_MainTex, i.uv).x,abs(tex2D(_MainTex, i.uv).y),-tex2D(_MainTex, i.uv).xy) * _DisplayVelocityScale); - } - - // classification filters - float cone(float2 px, float2 py, float2 v) - { - return clamp(1.0 - (length(px - py) / length(v)), 0.0, 1.0); - } - - float cylinder(float2 x, float2 y, float2 v) - { - float lv = length(v); - return 1.0 - smoothstep(0.95*lv, 1.05*lv, length(x - y)); - } - - // is zb closer than za? - float softDepthCompare(float za, float zb) - { - return clamp(1.0 - (za - zb) / _SoftZDistance, 0.0, 1.0); - } - - float4 SimpleBlur (v2f i) : SV_Target - { - float2 x = i.uv; - float2 xf = x; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - xf.y = 1 - xf.y; - #endif - - float2 vx = tex2D(_VelTex, xf).xy; // vel at x - - float4 sum = float4(0, 0, 0, 0); - for(int l=0; l _MaxVelocity) { - blurDir *= (_MaxVelocity / velMag); - velMag = _MaxVelocity; - } - - float4 centerTap = tex2D(_MainTex, x); - float4 sum = centerTap; - - blurDir *= smoothstep(_MinVelocity * 0.25f, _MinVelocity * 2.5, velMag); - - blurDir *= _MainTex_TexelSize.xy; - blurDir /= MOTION_SAMPLES; - - for(int i=0; i mb) ? a : b; - } - - // find dominant velocity in each tile - float4 TileMax(v2f i) : SV_Target - { - float2 tilemax = float2(0.0, 0.0); - float2 srcPos = i.uv - _MainTex_TexelSize.xy * _MaxRadiusOrKInPaper * 0.5; - - for(int y=0; y<(int)_MaxRadiusOrKInPaper; y++) { - for(int x=0; x<(int)_MaxRadiusOrKInPaper; x++) { - float2 v = tex2D(_MainTex, srcPos + float2(x,y) * _MainTex_TexelSize.xy).xy; - tilemax = vmax(tilemax, v); - } - } - return float4(tilemax, 0, 1); - } - - // find maximum velocity in any adjacent tile - float4 NeighbourMax(v2f i) : SV_Target - { - float2 maxvel = float2(0.0, 0.0); - for(int y=-1; y<=1; y++) { - for(int x=-1; x<=1; x++) { - float2 v = tex2D(_MainTex, i.uv + float2(x,y) * _MainTex_TexelSize.xy).xy; - maxvel = vmax(maxvel, v); - } - } - return float4(maxvel, 0, 1); - } - - float cone(float2 px, float2 py, float2 v) - { - return clamp(1.0 - (length(px - py) / length(v)), 0.0, 1.0); - } - - float cylinder(float2 x, float2 y, float2 v) - { - float lv = length(v); - return 1.0 - smoothstep(0.95*lv, 1.05*lv, length(x - y)); - } - - float softDepthCompare(float za, float zb) - { - return clamp(1.0 - (za - zb) / _SoftZDistance, 0.0, 1.0); - } - - float4 ReconstructFilterBlur(v2f i) : SV_Target - { - float2 x = i.uv; - float2 xf = x; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - xf.y = 1-xf.y; - #endif - - float2 x2 = xf; - - float2 vn = tex2D(_NeighbourMaxTex, x2).xy; // largest velocity in neighbourhood - float4 cx = tex2D(_MainTex, x); // color at x - - float zx = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, x); - zx = -Linear01Depth(zx); // depth at x - float2 vx = tex2D(_VelTex, xf).xy; // vel at x - - // random offset [-0.5, 0.5] - float j = (tex2D(_NoiseTex, i.uv * 11.0f ).r*2-1) * _Jitter; - - // sample current pixel - float weight = 1.0; - float4 sum = cx * weight; - - int centerSample = (int)(NUM_SAMPLES-1) / 2; - - // in DX11 county we take more samples and interleave with sampling along vx direction to break up "patternized" look - - for(int l=0; l0.99999) - return half4(1,1,1,1); - else - return EncodeFloatRGBA(d); - } - - ENDCG - -Subshader { - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ConvertDepth.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ConvertDepth.shader.meta deleted file mode 100644 index 8b325fa..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ConvertDepth.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 14768d3865b1342e3a861fbe19ba2db2 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader deleted file mode 100644 index bc61eab..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader +++ /dev/null @@ -1,65 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - - -Shader "Hidden/CreaseApply" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _HrDepthTex ("Base (RGB)", 2D) = "white" {} - _LrDepthTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" - -sampler2D _MainTex; -sampler2D _HrDepthTex; -sampler2D _LrDepthTex; - -uniform float4 _MainTex_TexelSize; -half4 _MainTex_ST; -half4 _HrDepthTex_ST; -half4 _LrDepthTex_ST; -uniform float intensity; - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; -}; - -v2f vert( appdata_img v ) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv.xy = v.texcoord.xy; - return o; -} - -half4 frag (v2f i) : SV_Target -{ - float4 hrDepth = tex2D(_HrDepthTex, UnityStereoScreenSpaceUVAdjust(i.uv, _HrDepthTex_ST)); - float4 lrDepth = tex2D(_LrDepthTex, UnityStereoScreenSpaceUVAdjust(i.uv, _LrDepthTex_ST)); - - hrDepth.a = DecodeFloatRGBA(hrDepth); - lrDepth.a = DecodeFloatRGBA(lrDepth); - - float4 color = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - - return color * (1.0-abs(hrDepth.a-lrDepth.a)*intensity); -} - -ENDCG - - - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader.meta deleted file mode 100644 index 648c60a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/CreaseApply.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: b59984d82af624bd3b0c777f038276f2 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader deleted file mode 100644 index 2954499..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader +++ /dev/null @@ -1,331 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -Shader "Hidden/EdgeDetect" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv[5] : TEXCOORD0; - }; - - struct v2fd { - float4 pos : SV_POSITION; - float2 uv[2] : TEXCOORD0; - }; - - sampler2D _MainTex; - uniform float4 _MainTex_TexelSize; - half4 _MainTex_ST; - - sampler2D _CameraDepthNormalsTexture; - half4 _CameraDepthNormalsTexture_ST; - - sampler2D_float _CameraDepthTexture; - half4 _CameraDepthTexture_ST; - - uniform half4 _Sensitivity; - uniform half4 _BgColor; - uniform half _BgFade; - uniform half _SampleDistance; - uniform float _Exponent; - - uniform float _Threshold; - - struct v2flum { - float4 pos : SV_POSITION; - float2 uv[3] : TEXCOORD0; - }; - - v2flum vertLum (appdata_img v) - { - v2flum o; - o.pos = UnityObjectToClipPos (v.vertex); - float2 uv = MultiplyUV( UNITY_MATRIX_TEXTURE0, v.texcoord ); - o.uv[0] = UnityStereoScreenSpaceUVAdjust(uv, _MainTex_ST); - o.uv[1] = UnityStereoScreenSpaceUVAdjust(uv + float2(-_MainTex_TexelSize.x, -_MainTex_TexelSize.y) * _SampleDistance, _MainTex_ST); - o.uv[2] = UnityStereoScreenSpaceUVAdjust(uv + float2(+_MainTex_TexelSize.x, -_MainTex_TexelSize.y) * _SampleDistance, _MainTex_ST); - return o; - } - - - fixed4 fragLum (v2flum i) : SV_Target - { - fixed4 original = tex2D(_MainTex, i.uv[0]); - - // a very simple cross gradient filter - - half3 p1 = original.rgb; - half3 p2 = tex2D(_MainTex, i.uv[1]).rgb; - half3 p3 = tex2D(_MainTex, i.uv[2]).rgb; - - half3 diff = p1 * 2 - p2 - p3; - half len = dot(diff, diff); - len = step(len, _Threshold); - //if(len >= _Threshold) - // original.rgb = 0; - - return len * lerp(original, _BgColor, _BgFade); - } - - inline half CheckSame (half2 centerNormal, float centerDepth, half4 theSample) - { - // difference in normals - // do not bother decoding normals - there's no need here - half2 diff = abs(centerNormal - theSample.xy) * _Sensitivity.y; - int isSameNormal = (diff.x + diff.y) * _Sensitivity.y < 0.1; - // difference in depth - float sampleDepth = DecodeFloatRG (theSample.zw); - float zdiff = abs(centerDepth-sampleDepth); - // scale the required threshold by the distance - int isSameDepth = zdiff * _Sensitivity.x < 0.09 * centerDepth; - - // return: - // 1 - if normals and depth are similar enough - // 0 - otherwise - - return isSameNormal * isSameDepth ? 1.0 : 0.0; - } - - v2f vertRobert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - - float2 uv = v.texcoord.xy; - o.uv[0] = UnityStereoScreenSpaceUVAdjust(uv, _MainTex_ST); - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - uv.y = 1-uv.y; - #endif - - // calc coord for the X pattern - // maybe nicer TODO for the future: 'rotated triangles' - - o.uv[1] = UnityStereoScreenSpaceUVAdjust(uv + _MainTex_TexelSize.xy * half2(1,1) * _SampleDistance, _MainTex_ST); - o.uv[2] = UnityStereoScreenSpaceUVAdjust(uv + _MainTex_TexelSize.xy * half2(-1,-1) * _SampleDistance, _MainTex_ST); - o.uv[3] = UnityStereoScreenSpaceUVAdjust(uv + _MainTex_TexelSize.xy * half2(-1,1) * _SampleDistance, _MainTex_ST); - o.uv[4] = UnityStereoScreenSpaceUVAdjust(uv + _MainTex_TexelSize.xy * half2(1,-1) * _SampleDistance, _MainTex_ST); - - return o; - } - - v2f vertThin( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - - float2 uv = v.texcoord.xy; - o.uv[0] = UnityStereoScreenSpaceUVAdjust(uv, _MainTex_ST); - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - uv.y = 1-uv.y; - #endif - - o.uv[1] = UnityStereoScreenSpaceUVAdjust(uv, _MainTex_ST); - o.uv[4] = UnityStereoScreenSpaceUVAdjust(uv, _MainTex_ST); - - // offsets for two additional samples - o.uv[2] = UnityStereoScreenSpaceUVAdjust(uv + float2(-_MainTex_TexelSize.x, -_MainTex_TexelSize.y) * _SampleDistance, _MainTex_ST); - o.uv[3] = UnityStereoScreenSpaceUVAdjust(uv + float2(+_MainTex_TexelSize.x, -_MainTex_TexelSize.y) * _SampleDistance, _MainTex_ST); - - return o; - } - - v2fd vertD( appdata_img v ) - { - v2fd o; - o.pos = UnityObjectToClipPos (v.vertex); - - float2 uv = v.texcoord.xy; - o.uv[0] = uv; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - uv.y = 1-uv.y; - #endif - - o.uv[1] = uv; - - return o; - } - - float4 fragDCheap(v2fd i) : SV_Target - { - // inspired by borderlands implementation of popular "sobel filter" - - float centerDepth = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv[1])); - float4 depthsDiag; - float4 depthsAxis; - - float2 uvDist = _SampleDistance * _MainTex_TexelSize.xy; - - depthsDiag.x = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist, _CameraDepthTexture_ST))); // TR - depthsDiag.y = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist*float2(-1,1), _CameraDepthTexture_ST))); // TL - depthsDiag.z = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist*float2(-1,1), _CameraDepthTexture_ST))); // BR - depthsDiag.w = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist, _CameraDepthTexture_ST))); // BL - - depthsAxis.x = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist*float2(0,1), _CameraDepthTexture_ST))); // T - depthsAxis.y = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist*float2(1,0), _CameraDepthTexture_ST))); // L - depthsAxis.z = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist*float2(1,0), _CameraDepthTexture_ST))); // R - depthsAxis.w = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist*float2(0,1), _CameraDepthTexture_ST))); // B - - depthsDiag -= centerDepth; - depthsAxis /= centerDepth; - - const float4 HorizDiagCoeff = float4(1,1,-1,-1); - const float4 VertDiagCoeff = float4(-1,1,-1,1); - const float4 HorizAxisCoeff = float4(1,0,0,-1); - const float4 VertAxisCoeff = float4(0,1,-1,0); - - float4 SobelH = depthsDiag * HorizDiagCoeff + depthsAxis * HorizAxisCoeff; - float4 SobelV = depthsDiag * VertDiagCoeff + depthsAxis * VertAxisCoeff; - - float SobelX = dot(SobelH, float4(1,1,1,1)); - float SobelY = dot(SobelV, float4(1,1,1,1)); - float Sobel = sqrt(SobelX * SobelX + SobelY * SobelY); - - Sobel = 1.0-pow(saturate(Sobel), _Exponent); - return Sobel * lerp(tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)), _BgColor, _BgFade); - } - - // pretty much also just a sobel filter, except for that edges "outside" the silhouette get discarded - // which makes it compatible with other depth based post fx - - float4 fragD(v2fd i) : SV_Target - { - // inspired by borderlands implementation of popular "sobel filter" - - float centerDepth = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1], _CameraDepthTexture_ST))); - float4 depthsDiag; - float4 depthsAxis; - - float2 uvDist = _SampleDistance * _MainTex_TexelSize.xy; - - depthsDiag.x = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist, _CameraDepthTexture_ST))); // TR - depthsDiag.y = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist*float2(-1,1), _CameraDepthTexture_ST))); // TL - depthsDiag.z = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist*float2(-1,1), _CameraDepthTexture_ST))); // BR - depthsDiag.w = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist, _CameraDepthTexture_ST))); // BL - - depthsAxis.x = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist*float2(0,1), _CameraDepthTexture_ST))); // T - depthsAxis.y = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist*float2(1,0), _CameraDepthTexture_ST))); // L - depthsAxis.z = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]+uvDist*float2(1,0), _CameraDepthTexture_ST))); // R - depthsAxis.w = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv[1]-uvDist*float2(0,1), _CameraDepthTexture_ST))); // B - - // make it work nicely with depth based image effects such as depth of field: - depthsDiag = (depthsDiag > centerDepth.xxxx) ? depthsDiag : centerDepth.xxxx; - depthsAxis = (depthsAxis > centerDepth.xxxx) ? depthsAxis : centerDepth.xxxx; - - depthsDiag -= centerDepth; - depthsAxis /= centerDepth; - - const float4 HorizDiagCoeff = float4(1,1,-1,-1); - const float4 VertDiagCoeff = float4(-1,1,-1,1); - const float4 HorizAxisCoeff = float4(1,0,0,-1); - const float4 VertAxisCoeff = float4(0,1,-1,0); - - float4 SobelH = depthsDiag * HorizDiagCoeff + depthsAxis * HorizAxisCoeff; - float4 SobelV = depthsDiag * VertDiagCoeff + depthsAxis * VertAxisCoeff; - - float SobelX = dot(SobelH, float4(1,1,1,1)); - float SobelY = dot(SobelV, float4(1,1,1,1)); - float Sobel = sqrt(SobelX * SobelX + SobelY * SobelY); - - Sobel = 1.0-pow(saturate(Sobel), _Exponent); - return Sobel * lerp(tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)), _BgColor, _BgFade); - } - - half4 fragRobert(v2f i) : SV_Target { - half4 sample1 = tex2D(_CameraDepthNormalsTexture, i.uv[1].xy); - half4 sample2 = tex2D(_CameraDepthNormalsTexture, i.uv[2].xy); - half4 sample3 = tex2D(_CameraDepthNormalsTexture, i.uv[3].xy); - half4 sample4 = tex2D(_CameraDepthNormalsTexture, i.uv[4].xy); - - half edge = 1.0; - - edge *= CheckSame(sample1.xy, DecodeFloatRG(sample1.zw), sample2); - edge *= CheckSame(sample3.xy, DecodeFloatRG(sample3.zw), sample4); - - return edge * lerp(tex2D(_MainTex, i.uv[0]), _BgColor, _BgFade); - } - - half4 fragThin (v2f i) : SV_Target - { - half4 original = tex2D(_MainTex, i.uv[0]); - - half4 center = tex2D (_CameraDepthNormalsTexture, i.uv[1]); - half4 sample1 = tex2D (_CameraDepthNormalsTexture, i.uv[2]); - half4 sample2 = tex2D (_CameraDepthNormalsTexture, i.uv[3]); - - // encoded normal - half2 centerNormal = center.xy; - // decoded depth - float centerDepth = DecodeFloatRG (center.zw); - - half edge = 1.0; - - edge *= CheckSame(centerNormal, centerDepth, sample1); - edge *= CheckSame(centerNormal, centerDepth, sample2); - - return edge * lerp(original, _BgColor, _BgFade); - } - - ENDCG - -Subshader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vertThin - #pragma fragment fragThin - ENDCG - } - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vertRobert - #pragma fragment fragRobert - ENDCG - } - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma target 3.0 - #pragma vertex vertD - #pragma fragment fragDCheap - ENDCG - } - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma target 3.0 - #pragma vertex vertD - #pragma fragment fragD - ENDCG - } - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma target 3.0 - #pragma vertex vertLum - #pragma fragment fragLum - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader.meta deleted file mode 100644 index 328c9db..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/EdgeDetectNormals.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 0d1644bdf064147baa97f235fc5b4903 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader deleted file mode 100644 index 0021042..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader +++ /dev/null @@ -1,61 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/FisheyeShader" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - // Shader code pasted into all further CGPROGRAM blocks - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - half4 _MainTex_ST; - - float2 intensity; - - v2f vert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - return o; - } - - half4 frag(v2f i) : SV_Target - { - half2 coords = i.uv; - coords = (coords - 0.5) * 2.0; - - half2 realCoordOffs; - realCoordOffs.x = (1-coords.y * coords.y) * intensity.y * (coords.x); - realCoordOffs.y = (1-coords.x * coords.x) * intensity.x * (coords.y); - - half4 color = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv - realCoordOffs, _MainTex_ST)); - - return color; - } - - ENDCG - -Subshader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - ENDCG - } - -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader.meta deleted file mode 100644 index 8eb2318..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/FisheyeShader.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 874ceab4425f64bccb1d14032f4452b1 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader deleted file mode 100644 index 397453d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader +++ /dev/null @@ -1,194 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/GlobalFog" { -Properties { - _MainTex ("Base (RGB)", 2D) = "black" {} -} - -CGINCLUDE - - #include "UnityCG.cginc" - - uniform sampler2D _MainTex; - uniform sampler2D_float _CameraDepthTexture; - - // x = fog height - // y = FdotC (CameraY-FogHeight) - // z = k (FdotC > 0.0) - // w = a/2 - uniform float4 _HeightParams; - - // x = start distance - uniform float4 _DistanceParams; - - int4 _SceneFogMode; // x = fog mode, y = use radial flag - float4 _SceneFogParams; - #ifndef UNITY_APPLY_FOG - half4 unity_FogColor; - half4 unity_FogDensity; - #endif - - uniform float4 _MainTex_TexelSize; - - // for fast world space reconstruction - uniform float4x4 _FrustumCornersWS; - uniform float4 _CameraWS; - - struct appdata_fog - { - float4 vertex : POSITION; - half2 texcoord : TEXCOORD0; - }; - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uv_depth : TEXCOORD1; - float4 interpolatedRay : TEXCOORD2; - }; - - v2f vert (appdata_fog v) - { - v2f o; - v.vertex.z = 0.1; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - o.uv_depth = v.texcoord.xy; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - o.uv.y = 1-o.uv.y; - #endif - - int frustumIndex = v.texcoord.x + (2 * o.uv.y); - o.interpolatedRay = _FrustumCornersWS[frustumIndex]; - o.interpolatedRay.w = frustumIndex; - - return o; - } - - // Applies one of standard fog formulas, given fog coordinate (i.e. distance) - half ComputeFogFactor (float coord) - { - float fogFac = 0.0; - if (_SceneFogMode.x == 1) // linear - { - // factor = (end-z)/(end-start) = z * (-1/(end-start)) + (end/(end-start)) - fogFac = coord * _SceneFogParams.z + _SceneFogParams.w; - } - if (_SceneFogMode.x == 2) // exp - { - // factor = exp(-density*z) - fogFac = _SceneFogParams.y * coord; fogFac = exp2(-fogFac); - } - if (_SceneFogMode.x == 3) // exp2 - { - // factor = exp(-(density*z)^2) - fogFac = _SceneFogParams.x * coord; fogFac = exp2(-fogFac*fogFac); - } - return saturate(fogFac); - } - - // Distance-based fog - float ComputeDistance (float3 camDir, float zdepth) - { - float dist; - if (_SceneFogMode.y == 1) - dist = length(camDir); - else - dist = zdepth * _ProjectionParams.z; - // Built-in fog starts at near plane, so match that by - // subtracting the near value. Not a perfect approximation - // if near plane is very large, but good enough. - dist -= _ProjectionParams.y; - return dist; - } - - // Linear half-space fog, from https://www.terathon.com/lengyel/Lengyel-UnifiedFog.pdf - float ComputeHalfSpace (float3 wsDir) - { - float3 wpos = _CameraWS + wsDir; - float FH = _HeightParams.x; - float3 C = _CameraWS; - float3 V = wsDir; - float3 P = wpos; - float3 aV = _HeightParams.w * V; - float FdotC = _HeightParams.y; - float k = _HeightParams.z; - float FdotP = P.y-FH; - float FdotV = wsDir.y; - float c1 = k * (FdotP + FdotC); - float c2 = (1-2*k) * FdotP; - float g = min(c2, 0.0); - g = -length(aV) * (c1 - g * g / abs(FdotV+1.0e-5f)); - return g; - } - - half4 ComputeFog (v2f i, bool distance, bool height) : SV_Target - { - half4 sceneColor = tex2D(_MainTex, UnityStereoTransformScreenSpaceTex(i.uv)); - - // Reconstruct world space position & direction - // towards this screen pixel. - float rawDepth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoTransformScreenSpaceTex(i.uv_depth)); - float dpth = Linear01Depth(rawDepth); - float4 wsDir = dpth * i.interpolatedRay; - float4 wsPos = _CameraWS + wsDir; - - // Compute fog distance - float g = _DistanceParams.x; - if (distance) - g += ComputeDistance (wsDir, dpth); - if (height) - g += ComputeHalfSpace (wsDir); - - // Compute fog amount - half fogFac = ComputeFogFactor (max(0.0,g)); - // Do not fog skybox - if (dpth == _DistanceParams.y) - fogFac = 1.0; - //return fogFac; // for debugging - - // Lerp between fog color & original scene color - // by fog amount - return lerp (unity_FogColor, sceneColor, fogFac); - } - -ENDCG - -SubShader -{ - ZTest Always Cull Off ZWrite Off Fog { Mode Off } - - // 0: distance + height - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - half4 frag (v2f i) : SV_Target { return ComputeFog (i, true, true); } - ENDCG - } - // 1: distance - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - half4 frag (v2f i) : SV_Target { return ComputeFog (i, true, false); } - ENDCG - } - // 2: height - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - half4 frag (v2f i) : SV_Target { return ComputeFog (i, false, true); } - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader.meta deleted file mode 100644 index bcb93d2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GlobalFog.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 70d8568987ac0499f952b54c7c13e265 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader deleted file mode 100644 index ca45941..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader +++ /dev/null @@ -1,37 +0,0 @@ -Shader "Hidden/Grayscale Effect" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _RampTex ("Base (RGB)", 2D) = "grayscaleRamp" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert_img -#pragma fragment frag -#include "UnityCG.cginc" - -uniform sampler2D _MainTex; -uniform sampler2D _RampTex; -uniform half _RampOffset; -half4 _MainTex_ST; - -fixed4 frag (v2f_img i) : SV_Target -{ - fixed4 original = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - fixed grayscale = Luminance(original.rgb); - half2 remap = half2 (grayscale + _RampOffset, .5); - fixed4 output = tex2D(_RampTex, remap); - output.a = original.a; - return output; -} -ENDCG - - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader.meta deleted file mode 100644 index 5fbca77..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/GrayscaleEffect.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: daf9781cad112c75d0008dfa8d76c639 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader deleted file mode 100644 index 2242495..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader +++ /dev/null @@ -1,122 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/MotionBlur" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _AccumOrig("AccumOrig", Float) = 0.65 -} - - SubShader { - ZTest Always Cull Off ZWrite Off - Pass { - Blend SrcAlpha OneMinusSrcAlpha - ColorMask RGB - BindChannels { - Bind "vertex", vertex - Bind "texcoord", texcoord - } - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata_t { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD; - }; - - struct v2f { - float4 vertex : SV_POSITION; - float2 texcoord : TEXCOORD; - }; - - float4 _MainTex_ST; - float _AccumOrig; - - v2f vert (appdata_t v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); - return o; - } - - sampler2D _MainTex; - - half4 frag (v2f i) : SV_Target - { - return half4(tex2D(_MainTex, i.texcoord).rgb, _AccumOrig ); - } - ENDCG - } - - Pass { - Blend One Zero - ColorMask A - - BindChannels { - Bind "vertex", vertex - Bind "texcoord", texcoord - } - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct appdata_t { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD; - }; - - struct v2f { - float4 vertex : SV_POSITION; - float2 texcoord : TEXCOORD; - }; - - float4 _MainTex_ST; - - v2f vert (appdata_t v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); - return o; - } - - sampler2D _MainTex; - - half4 frag (v2f i) : SV_Target - { - return tex2D(_MainTex, i.texcoord); - } - ENDCG - } - - } - -SubShader { - ZTest Always Cull Off ZWrite Off - Pass { - Blend SrcAlpha OneMinusSrcAlpha - ColorMask RGB - SetTexture [_MainTex] { - ConstantColor (0,0,0,[_AccumOrig]) - Combine texture, constant - } - } - Pass { - Blend One Zero - ColorMask A - SetTexture [_MainTex] { - Combine texture - } - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader.meta deleted file mode 100644 index 281af89..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlur.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: e9ba2083ad114a07d000fbfb8d76c639 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader deleted file mode 100644 index 24dea58..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader +++ /dev/null @@ -1,60 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -Shader "Hidden/MotionBlurClear" -{ - -Properties { } - -SubShader { -Pass { - //ZTest LEqual - ZTest Always // lame depth test - ZWrite Off // lame depth test - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - struct vs_input { - float4 vertex : POSITION; - }; - - struct ps_input { - float4 pos : SV_POSITION; - float4 screen : TEXCOORD0; - }; - - sampler2D_float _CameraDepthTexture; - - ps_input vert (vs_input v) - { - ps_input o; - o.pos = UnityObjectToClipPos (v.vertex); - o.screen = ComputeScreenPos(o.pos); - COMPUTE_EYEDEPTH(o.screen.z); - return o; - } - - float4 frag (ps_input i) : SV_Target - { - // superlame: manual depth test needed as we can't bind depth, FIXME for 4.x - // alternatively implement SM > 3 version where we write out custom depth - - float d = SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.screen)); - d = LinearEyeDepth(d); - - clip(d - i.screen.z + 1e-2f); - return float4(0, 0, 0, 0); - } - - ENDCG - - } -} - -Fallback Off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader.meta deleted file mode 100644 index 3e9e48f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/MotionBlurClear.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 7699c5fbfa27745a1abe111ab7bf9785 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader deleted file mode 100644 index 9afe47a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader +++ /dev/null @@ -1,160 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/NoiseAndGrain" { - Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _NoiseTex ("Noise (RGB)", 2D) = "white" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - sampler2D _MainTex; - sampler2D _NoiseTex; - float4 _NoiseTex_TexelSize; - - uniform float4 _MainTex_TexelSize; - - uniform float3 _NoisePerChannel; - uniform float3 _NoiseTilingPerChannel; - uniform float3 _NoiseAmount; - uniform float3 _ThreshholdRGB; - uniform float3 _MidGrey; - - struct v2f - { - float4 pos : SV_POSITION; - float2 uv_screen : TEXCOORD0; - float4 uvRg : TEXCOORD1; - float2 uvB : TEXCOORD2; - }; - - struct appdata_img2 - { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD0; - float2 texcoord1 : TEXCOORD1; - }; - - inline float3 Overlay(float3 m, float3 color) { - color = saturate(color); - float3 check = step(float3(0.5,0.5,0.5), color.rgb); - float3 result = check * (float3(1,1,1) - ((float3(1,1,1) - 2*(color.rgb-0.5)) * (1-m.rgb))); - result += (1-check) * (2*color.rgb) * m.rgb; - return result; - } - - v2f vert (appdata_img2 v) - { - v2f o; - - o.pos = UnityObjectToClipPos (v.vertex); - - #if UNITY_UV_STARTS_AT_TOP - o.uv_screen = v.vertex.xyxy; - if (_MainTex_TexelSize.y < 0) - o.uv_screen.y = 1-o.uv_screen.y; - #else - o.uv_screen = v.vertex.xy; - #endif - - o.uv_screen = UnityStereoTransformScreenSpaceTex(o.uv_screen); - - // different tiling for 3 channels - o.uvRg = v.texcoord.xyxy + v.texcoord1.xyxy * _NoiseTilingPerChannel.rrgg * _NoiseTex_TexelSize.xyxy; - o.uvB = v.texcoord.xy + v.texcoord1.xy * _NoiseTilingPerChannel.bb * _NoiseTex_TexelSize.xy; - - return o; - } - - float4 frag ( v2f i ) : SV_Target - { - float4 color = (tex2D (_MainTex, i.uv_screen.xy)); - - // black & white intensities - float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey - blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); - - float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - - // fetching & scaling noise (COMPILER BUG WORKAROUND) - float3 m = float3(0,0,0); - m += (tex2D(_NoiseTex, i.uvRg.xy) * float4(1,0,0,0)).rgb; - m += (tex2D(_NoiseTex, i.uvRg.zw) * float4(0,1,0,0)).rgb; - m += (tex2D(_NoiseTex, i.uvB.xy) * float4(0,0,1,0)).rgb; - - m = saturate(lerp(float3(0.5,0.5,0.5), m, _NoisePerChannel.rgb * float3(finalIntensity,finalIntensity,finalIntensity) )); - - return float4(Overlay(m, color.rgb), color.a); - } - - float4 fragTmp ( v2f i ) : SV_Target - { - float4 color = (tex2D (_MainTex, i.uv_screen.xy)); - - // black & white intensities - float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey - blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); - - float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - - // fetching & scaling noise (COMPILER BUG WORKAROUND) - float3 m = float3(0,0,0); - m += (tex2D(_NoiseTex, i.uvRg.xy) * float4(1,0,0,0)).rgb; - m += (tex2D(_NoiseTex, i.uvRg.zw) * float4(0,1,0,0)).rgb; - m += (tex2D(_NoiseTex, i.uvB.xy) * float4(0,0,1,0)).rgb; - - m = saturate(lerp(float3(0.5,0.5,0.5), m, _NoisePerChannel.rgb * float3(finalIntensity,finalIntensity,finalIntensity))); - - return float4(m.rgb, color.a); - } - - float4 fragOverlayBlend ( v2f i ) : SV_Target - { - float4 color = tex2D(_MainTex, i.uv_screen.xy); - float4 m = tex2D(_NoiseTex, i.uv_screen.xy); - - return float4(Overlay(m, color.rgb), color.a); - } - - ENDCG - - SubShader { - ZTest Always Cull Off ZWrite Off Blend Off - - Pass { - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - - ENDCG - - } - - Pass { - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragOverlayBlend - - ENDCG - - } - - Pass { - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragTmp - - ENDCG - - } - } - FallBack Off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader.meta deleted file mode 100644 index 4f9286a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrain.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: b0249d8c935344451aa4de6db76f0688 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader deleted file mode 100644 index 04d277f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader +++ /dev/null @@ -1,239 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/NoiseAndGrainDX11" { - Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _NoiseTex ("Noise (RGB)", 2D) = "white" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - sampler2D _MainTex; - sampler2D _NoiseTex; - float4 _NoiseTex_TexelSize; - - uniform float4 _MainTex_TexelSize; - - uniform float3 _NoisePerChannel; - uniform float3 _NoiseTilingPerChannel; - uniform float3 _NoiseAmount; - uniform float3 _ThreshholdRGB; - uniform float3 _MidGrey; - uniform float _DX11NoiseTime; - - // DX11 noise helper functions, credit: rgba/iq - - int ihash(int n) - { - n = (n<<13)^n; - return (n*(n*n*15731+789221)+1376312589) & 2147483647; - } - - float frand(int n) - { - return ihash(n) / 2147483647.0; - } - - float cellNoise1f(int3 p) - { - return frand(p.z*65536 + p.y*256 + p.x);//*2.0-1.0; - } - - float3 cellNoise3f(int3 p) - { - int i = p.z*65536 + p.y*256 + p.x; - return float3(frand(i), frand(i + 57), frand(i + 113));//*2.0-1.0; - } - - struct v2f - { - float4 pos : SV_POSITION; - float2 uv_screen : TEXCOORD0; - float4 uvRg : TEXCOORD1; - float2 uvB : TEXCOORD2; - float2 uvOffsets : TEXCOORD4; - }; - - struct appdata_img2 - { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD0; - float2 texcoord1 : TEXCOORD1; - }; - - inline float3 Overlay(float3 m, float3 color) { - float3 check = step(0.5, color.rgb); - float3 result = check * (float3(1,1,1) - ((float3(1,1,1) - 2*(color.rgb-0.5)) * (1-m.rgb))); - result += (1-check) * (2*color.rgb) * m.rgb; - return result; - } - - v2f vert (appdata_img2 v) - { - v2f o; - - o.pos = UnityObjectToClipPos (v.vertex); - - #if UNITY_UV_STARTS_AT_TOP - o.uv_screen = v.vertex.xyxy; - if (_MainTex_TexelSize.y < 0) - o.uv_screen.y = 1-o.uv_screen.y; - #else - o.uv_screen = v.vertex.xy; - #endif - - // different tiling for 3 channels - o.uvRg = v.texcoord.xyxy + v.texcoord1.xyxy * _NoiseTilingPerChannel.rrgg * _NoiseTex_TexelSize.xyxy; - o.uvB = v.texcoord.xy + v.texcoord1.xy * _NoiseTilingPerChannel.bb * _NoiseTex_TexelSize.xy; - - o.uvOffsets = v.texcoord.xy; - - return o; - } - - float4 fragDX11 ( v2f i ) : SV_Target - { - float4 color = saturate(tex2D (_MainTex, UnityStereoTransformScreenSpaceTex(i.uv_screen.xy))); - - // black & white intensities - float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey - blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); - - float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - - float3 m = cellNoise3f(float3( (i.uv_screen.xy + i.uvOffsets) * _MainTex_TexelSize.zw, _DX11NoiseTime)); - m = saturate(lerp(float3(0.5,0.5,0.5), m, _NoisePerChannel.rgb * finalIntensity)); - - return float4(Overlay(m, color.rgb), color.a); - } - - float4 fragDX11Monochrome ( v2f i ) : SV_Target - { - float4 color = saturate(tex2D (_MainTex, UnityStereoTransformScreenSpaceTex(i.uv_screen.xy))); - - // black & white intensities - float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey - blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); - - float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - - float3 m = cellNoise1f(float3( (i.uv_screen.xy + i.uvOffsets) * _MainTex_TexelSize.zw, _DX11NoiseTime)); - m = saturate(lerp(float3(0.5,0.5,0.5), m, finalIntensity)); - - return float4(Overlay(m, color.rgb), color.a); - } - - float4 fragDX11Tmp ( v2f i ) : SV_Target - { - float4 color = saturate(tex2D (_MainTex, UnityStereoTransformScreenSpaceTex(i.uv_screen.xy))); - - // black & white intensities - float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey - blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); - - float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - - float3 m = cellNoise3f(float3( (i.uv_screen.xy + i.uvOffsets) * _MainTex_TexelSize.zw, _DX11NoiseTime)); - m = saturate(lerp(float3(0.5,0.5,0.5), m, _NoisePerChannel.rgb * finalIntensity)); - - return float4(m.rgb, color.a); - } - - float4 fragDX11MonochromeTmp ( v2f i ) : SV_Target - { - float4 color = saturate(tex2D (_MainTex, UnityStereoTransformScreenSpaceTex(i.uv_screen.xy))); - - // black & white intensities - float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey - blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); - - float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - - float3 m = cellNoise1f(float3( (i.uv_screen.xy + i.uvOffsets) * _MainTex_TexelSize.zw, _DX11NoiseTime)); - m = saturate(lerp(float3(0.5,0.5,0.5), m, finalIntensity)); - - return float4(m.rgb, color.a); - } - - float4 fragOverlayBlend ( v2f i ) : SV_Target - { - float4 color = saturate(tex2D (_MainTex, UnityStereoTransformScreenSpaceTex(i.uv_screen.xy))); - float4 m = saturate(tex2D (_NoiseTex, i.uv_screen.xy)); - - return float4(Overlay(m, color.rgb), color.a); - } - - ENDCG - - SubShader { - ZTest Always Cull Off ZWrite Off Blend Off - - Pass { - - CGPROGRAM - - #pragma exclude_renderers gles xbox360 ps3 d3d9 - #pragma target 5.0 - #pragma vertex vert - #pragma fragment fragDX11 - - ENDCG - - } - - Pass { - - CGPROGRAM - - #pragma exclude_renderers gles xbox360 ps3 d3d9 - #pragma target 5.0 - #pragma vertex vert - #pragma fragment fragDX11Monochrome - - ENDCG - - } - - Pass { - - CGPROGRAM - - #pragma exclude_renderers gles xbox360 ps3 d3d9 - #pragma target 5.0 - #pragma vertex vert - #pragma fragment fragDX11Tmp - - ENDCG - - } - - Pass { - - CGPROGRAM - - #pragma exclude_renderers gles xbox360 ps3 d3d9 - #pragma target 5.0 - #pragma vertex vert - #pragma fragment fragDX11MonochromeTmp - - ENDCG - - } - - Pass { - - CGPROGRAM - - #pragma exclude_renderers gles xbox360 ps3 d3d9 - #pragma target 5.0 - #pragma vertex vert - #pragma fragment fragOverlayBlend - - ENDCG - - } - } - FallBack Off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader.meta deleted file mode 100644 index 829e8e3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseAndGrainDX11.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 8b30686bb4322ab42ad5eb50a0210b58 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader deleted file mode 100644 index ca35d64..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader +++ /dev/null @@ -1,66 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/Noise Shader RGB" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _GrainTex ("Base (RGB)", 2D) = "gray" {} - _ScratchTex ("Base (RGB)", 2D) = "gray" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uvg : TEXCOORD1; // grain - float2 uvs : TEXCOORD2; // scratch -}; - -uniform sampler2D _MainTex; -uniform sampler2D _GrainTex; -uniform sampler2D _ScratchTex; - -uniform float4 _GrainOffsetScale; -uniform float4 _ScratchOffsetScale; -uniform fixed4 _Intensity; // x=grain, y=scratch - -half4 _MainTex_ST; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(MultiplyUV (UNITY_MATRIX_TEXTURE0, v.texcoord), _MainTex_ST); - o.uvg = v.texcoord.xy * _GrainOffsetScale.zw + _GrainOffsetScale.xy; - o.uvs = v.texcoord.xy * _ScratchOffsetScale.zw + _ScratchOffsetScale.xy; - return o; -} - -fixed4 frag (v2f i) : SV_Target -{ - fixed4 col = tex2D(_MainTex, i.uv); - - // sample noise texture and do a signed add - fixed3 grain = tex2D(_GrainTex, i.uvg).rgb * 2 - 1; - col.rgb += grain * _Intensity.x; - - // sample scratch texture and do a signed add - fixed3 scratch = tex2D(_ScratchTex, i.uvs).rgb * 2 - 1; - col.rgb += scratch * _Intensity.y; - - return col; -} -ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader.meta deleted file mode 100644 index e11fb85..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderRGB.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 5d7f4c401ae8946bcb0d6ff68a9e7466 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader deleted file mode 100644 index 200f97a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader +++ /dev/null @@ -1,77 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/Noise Shader YUV" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _GrainTex ("Base (RGB)", 2D) = "gray" {} - _ScratchTex ("Base (RGB)", 2D) = "gray" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uvg : TEXCOORD1; // grain - float2 uvs : TEXCOORD2; // scratch -}; - -uniform sampler2D _MainTex; -uniform sampler2D _GrainTex; -uniform sampler2D _ScratchTex; - -uniform float4 _GrainOffsetScale; -uniform float4 _ScratchOffsetScale; -uniform fixed4 _Intensity; // x=grain, y=scratch - -half4 _MainTex_ST; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(MultiplyUV (UNITY_MATRIX_TEXTURE0, v.texcoord), _MainTex_ST); - o.uvg = v.texcoord.xy * _GrainOffsetScale.zw + _GrainOffsetScale.xy; - o.uvs = v.texcoord.xy * _ScratchOffsetScale.zw + _ScratchOffsetScale.xy; - return o; -} - -fixed4 frag (v2f i) : SV_Target -{ - fixed4 col = tex2D(_MainTex, i.uv); - - // convert to YUV - fixed3 yuv; - yuv.x = dot( col.rgb, half3(0.299,0.587,0.114) ); - yuv.y = (col.b-yuv.x)*0.492; - yuv.z = (col.r-yuv.x)*0.877; - - // sample noise texture and do a signed add - fixed3 grain = tex2D(_GrainTex, i.uvg).rgb * 2 - 1; - yuv.rgb += grain * _Intensity.x; - - // convert back to rgb - col.r = yuv.z * 1.140 + yuv.x; - col.g = yuv.z * (-0.581) + yuv.y * (-0.395) + yuv.x; - col.b = yuv.y * 2.032 + yuv.x; - - // sample scratch texture and add - fixed3 scratch = tex2D(_ScratchTex, i.uvs).rgb * 2 - 1; - col.rgb += scratch * _Intensity.y; - - return col; -} -ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader.meta deleted file mode 100644 index b817ce9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/NoiseEffectShaderYUV.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 0e447868506ba49f0a73235b8a8b647a -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader deleted file mode 100644 index 5c8891a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader +++ /dev/null @@ -1,99 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -Shader "Hidden/PrepareSunShaftsBlur" { - Properties { - _MainTex ("Base", 2D) = "" {} - _Skybox ("Skybox", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - sampler2D _Skybox; - sampler2D_float _CameraDepthTexture; - - uniform half _NoSkyBoxMask; - uniform half4 _SunPosition; - - v2f vert (appdata_img v) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - return o; - } - - half TransformColor (half4 skyboxValue) { - return max (skyboxValue.a, _NoSkyBoxMask * dot (skyboxValue.rgb, float3 (0.59,0.3,0.11))); - } - - half4 frag (v2f i) : SV_Target { - float depthSample = SAMPLE_DEPTH_TEXTURE( _CameraDepthTexture, i.uv.xy); - half4 tex = tex2D (_MainTex, i.uv.xy); - - depthSample = Linear01Depth (depthSample); - - // consider maximum radius - half2 vec = _SunPosition.xy - i.uv.xy; - half dist = saturate (_SunPosition.w - length (vec.xy)); - - half4 outColor = 0; - - // consider shafts blockers - if (depthSample > 0.99) - outColor = TransformColor (tex) * dist; - - return outColor; - } - - half4 fragNoDepthNeeded (v2f i) : SV_Target { - float4 sky = (tex2D (_Skybox, i.uv.xy)); - float4 tex = (tex2D (_MainTex, i.uv.xy)); - - // consider maximum radius - half2 vec = _SunPosition.xy - i.uv.xy; - half dist = saturate (_SunPosition.w - length (vec)); - - half4 outColor = 0; - - if (Luminance ( abs(sky.rgb - tex.rgb)) < 0.2) - outColor = TransformColor (sky) * dist; - - return outColor; - } - - ENDCG - -Subshader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - - ENDCG - } - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragNoDepthNeeded - - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader.meta deleted file mode 100644 index e32df02..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/PrepareSunShaftsBlur.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 9ad381ed8492840ab9f165df743e4826 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader deleted file mode 100644 index 5e0025c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader +++ /dev/null @@ -1,73 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/RadialBlur" -{ - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - // Shader code pasted into all further CGPROGRAM blocks - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 blurVector : TEXCOORD1; - }; - - sampler2D _MainTex; - - float4 _BlurRadius4; - float4 _SunPosition; - - float4 _MainTex_TexelSize; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv.xy = v.texcoord.xy; - - o.blurVector = (_SunPosition.xy - v.texcoord.xy) * _BlurRadius4.xy; - - return o; - } - - #define SAMPLES_FLOAT 6.0f - #define SAMPLES_INT 6 - - half4 frag(v2f i) : SV_Target - { - half4 color = half4(0,0,0,0); - - for(int j = 0; j < SAMPLES_INT; j++) - { - half4 tmpColor = tex2D(_MainTex, i.uv.xy); - color += tmpColor; - - i.uv.xy += i.blurVector; - } - - return color / SAMPLES_FLOAT; - } - - ENDCG - -Subshader -{ - Blend One Zero - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - - ENDCG - } // Pass -} // Subshader - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader.meta deleted file mode 100644 index a8725c4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/RadialBlur.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: f58445347fe2e4b8396487ed2bfa02ad -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader deleted file mode 100644 index 1b579fe..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader +++ /dev/null @@ -1,285 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/SSAO" { -Properties { - _MainTex ("", 2D) = "" {} - _RandomTexture ("", 2D) = "" {} - _SSAO ("", 2D) = "" {} -} -Subshader { - ZTest Always Cull Off ZWrite Off - -CGINCLUDE -// Common code used by several SSAO passes below -#include "UnityCG.cginc" -struct v2f_ao { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uvr : TEXCOORD1; -}; - -uniform float2 _NoiseScale; -float4 _CameraDepthNormalsTexture_ST; - -v2f_ao vert_ao (appdata_img v) -{ - v2f_ao o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = TRANSFORM_TEX(v.texcoord, _CameraDepthNormalsTexture); - o.uvr = v.texcoord.xy * _NoiseScale; - return o; -} - -sampler2D _CameraDepthNormalsTexture; -sampler2D _RandomTexture; -float4 _Params; // x=radius, y=minz, z=attenuation power, w=SSAO power - -// HLSL and GLSL do not support arbitrarily sized arrays as function parameters (eg. float bla[]), whereas Cg does. -#if !defined(UNITY_COMPILER_CG) - -# define INPUT_SAMPLE_COUNT 8 -# include "frag_ao.cginc" -# undef INPUT_SAMPLE_COUNT - -# define INPUT_SAMPLE_COUNT 14 -# include "frag_ao.cginc" -# undef INPUT_SAMPLE_COUNT - -# define INPUT_SAMPLE_COUNT 26 -# include "frag_ao.cginc" -# undef INPUT_SAMPLE_COUNT - -# define INPUT_SAMPLE_COUNT 34 -# include "frag_ao.cginc" -# undef INPUT_SAMPLE_COUNT - -#else -# define INPUT_SAMPLE_COUNT -# include "frag_ao.cginc" -#endif - -ENDCG - - // ---- SSAO pass, 8 samples - Pass { - -CGPROGRAM -#pragma vertex vert_ao -#pragma fragment frag -#pragma target 3.0 - - -half4 frag (v2f_ao i) : SV_Target -{ - #define SAMPLE_COUNT 8 - const float3 RAND_SAMPLES[SAMPLE_COUNT] = { - float3(0.01305719,0.5872321,-0.119337), - float3(0.3230782,0.02207272,-0.4188725), - float3(-0.310725,-0.191367,0.05613686), - float3(-0.4796457,0.09398766,-0.5802653), - float3(0.1399992,-0.3357702,0.5596789), - float3(-0.2484578,0.2555322,0.3489439), - float3(0.1871898,-0.702764,-0.2317479), - float3(0.8849149,0.2842076,0.368524), - }; - return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); -} -ENDCG - - } - -// ---- SSAO pass, 14 samples - Pass { - -CGPROGRAM -#pragma vertex vert_ao -#pragma fragment frag -#pragma target 3.0 - - -half4 frag (v2f_ao i) : SV_Target -{ - #define SAMPLE_COUNT 14 - const float3 RAND_SAMPLES[SAMPLE_COUNT] = { - float3(0.4010039,0.8899381,-0.01751772), - float3(0.1617837,0.1338552,-0.3530486), - float3(-0.2305296,-0.1900085,0.5025396), - float3(-0.6256684,0.1241661,0.1163932), - float3(0.3820786,-0.3241398,0.4112825), - float3(-0.08829653,0.1649759,0.1395879), - float3(0.1891677,-0.1283755,-0.09873557), - float3(0.1986142,0.1767239,0.4380491), - float3(-0.3294966,0.02684341,-0.4021836), - float3(-0.01956503,-0.3108062,-0.410663), - float3(-0.3215499,0.6832048,-0.3433446), - float3(0.7026125,0.1648249,0.02250625), - float3(0.03704464,-0.939131,0.1358765), - float3(-0.6984446,-0.6003422,-0.04016943), - }; - return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); -} -ENDCG - - } - -// ---- SSAO pass, 26 samples - Pass { - -CGPROGRAM -#pragma vertex vert_ao -#pragma fragment frag -#pragma target 3.0 - - -half4 frag (v2f_ao i) : SV_Target -{ - #define SAMPLE_COUNT 26 - const float3 RAND_SAMPLES[SAMPLE_COUNT] = { - float3(0.2196607,0.9032637,0.2254677), - float3(0.05916681,0.2201506,-0.1430302), - float3(-0.4152246,0.1320857,0.7036734), - float3(-0.3790807,0.1454145,0.100605), - float3(0.3149606,-0.1294581,0.7044517), - float3(-0.1108412,0.2162839,0.1336278), - float3(0.658012,-0.4395972,-0.2919373), - float3(0.5377914,0.3112189,0.426864), - float3(-0.2752537,0.07625949,-0.1273409), - float3(-0.1915639,-0.4973421,-0.3129629), - float3(-0.2634767,0.5277923,-0.1107446), - float3(0.8242752,0.02434147,0.06049098), - float3(0.06262707,-0.2128643,-0.03671562), - float3(-0.1795662,-0.3543862,0.07924347), - float3(0.06039629,0.24629,0.4501176), - float3(-0.7786345,-0.3814852,-0.2391262), - float3(0.2792919,0.2487278,-0.05185341), - float3(0.1841383,0.1696993,-0.8936281), - float3(-0.3479781,0.4725766,-0.719685), - float3(-0.1365018,-0.2513416,0.470937), - float3(0.1280388,-0.563242,0.3419276), - float3(-0.4800232,-0.1899473,0.2398808), - float3(0.6389147,0.1191014,-0.5271206), - float3(0.1932822,-0.3692099,-0.6060588), - float3(-0.3465451,-0.1654651,-0.6746758), - float3(0.2448421,-0.1610962,0.1289366), - }; - return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); -} -ENDCG - - } - -// ---- Blur pass - Pass { -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#pragma target 3.0 -#include "UnityCG.cginc" - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; -}; - -float4 _MainTex_ST; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = TRANSFORM_TEX (v.texcoord, _CameraDepthNormalsTexture); - return o; -} - -sampler2D _SSAO; -float3 _TexelOffsetScale; - -inline half CheckSame (half4 n, half4 nn) -{ - // difference in normals - half2 diff = abs(n.xy - nn.xy); - half sn = (diff.x + diff.y) < 0.1; - // difference in depth - float z = DecodeFloatRG (n.zw); - float zz = DecodeFloatRG (nn.zw); - float zdiff = abs(z-zz) * _ProjectionParams.z; - half sz = zdiff < 0.2; - return sn * sz; -} - - -half4 frag( v2f i ) : SV_Target -{ - #define NUM_BLUR_SAMPLES 4 - - float2 o = _TexelOffsetScale.xy; - - half sum = tex2D(_SSAO, i.uv).r * (NUM_BLUR_SAMPLES + 1); - half denom = NUM_BLUR_SAMPLES + 1; - - half4 geom = tex2D (_CameraDepthNormalsTexture, i.uv); - - for (int s = 0; s < NUM_BLUR_SAMPLES; ++s) - { - float2 nuv = i.uv + o * (s+1); - half4 ngeom = tex2D (_CameraDepthNormalsTexture, nuv.xy); - half coef = (NUM_BLUR_SAMPLES - s) * CheckSame (geom, ngeom); - sum += tex2D (_SSAO, nuv.xy).r * coef; - denom += coef; - } - for (int s = 0; s < NUM_BLUR_SAMPLES; ++s) - { - float2 nuv = i.uv - o * (s+1); - half4 ngeom = tex2D (_CameraDepthNormalsTexture, nuv.xy); - half coef = (NUM_BLUR_SAMPLES - s) * CheckSame (geom, ngeom); - sum += tex2D (_SSAO, nuv.xy).r * coef; - denom += coef; - } - return sum / denom; -} -ENDCG - } - - // ---- Composite pass - Pass { -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" - -struct v2f { - float4 pos : SV_POSITION; - float2 uv[2] : TEXCOORD0; -}; - -sampler2D _MainTex; -half4 _MainTex_ST; - -sampler2D _SSAO; -half4 _SSAO_ST; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv[0] = UnityStereoScreenSpaceUVAdjust(MultiplyUV (UNITY_MATRIX_TEXTURE0, v.texcoord), _MainTex_ST); - o.uv[1] = UnityStereoScreenSpaceUVAdjust(MultiplyUV (UNITY_MATRIX_TEXTURE1, v.texcoord), _SSAO_ST); - return o; -} - - -half4 frag( v2f i ) : SV_Target -{ - half4 c = tex2D (_MainTex, i.uv[0]); - half ao = tex2D (_SSAO, i.uv[1]).r; - ao = pow (ao, _Params.w); - c.rgb *= ao; - return c; -} -ENDCG - } - -} - -Fallback off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader.meta deleted file mode 100644 index 0e2cdcc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SSAOShader.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 43ca18288c424f645aaa1e9e07f04c50 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader deleted file mode 100644 index f6e4488..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader +++ /dev/null @@ -1,417 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -// This Ambient Occlusion image effect is based on "Scalable Ambient Obscurance": - -/** - -\author Morgan McGuire and Michael Mara, NVIDIA and Williams College, http://research.nvidia.com, http://graphics.cs.williams.edu - -Open Source under the "BSD" license: http://www.opensource.org/licenses/bsd-license.php - -Copyright (c) 2011-2012, NVIDIA -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 HOLDER 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. - -*/ - -Shader "Hidden/ScreenSpaceAmbientObscurance" -{ - Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _AOTex("", 2D) = "" {} - _Rand("", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - #if defined(SHADER_API_D3D11) || defined(SHADER_API_GLCORE) - #define NUM_SAMPLES (15) - #else - #define NUM_SAMPLES (11) - #endif - - #define FAR_PLANE_Z (300.0) - #define NUM_SPIRAL_TURNS (7) - #define bias (0.01) - - float _Radius; - float _Radius2; // _Radius * _Radius; - float _Intensity; - float4 _ProjInfo; - float4 _ProjInfoLeft; - float4 _ProjInfoRight; - float4x4 _ProjectionInv; // ref only - - sampler2D_float _CameraDepthTexture; - sampler2D _Rand; - sampler2D _AOTex; - sampler2D _MainTex; - - float4 _MainTex_TexelSize; - half4 _MainTex_ST; - - half4 _AOTex_ST; - half4 _CameraDepthTexture_ST; - - static const float gaussian[5] = { 0.153170, 0.144893, 0.122649, 0.092902, 0.062970 }; // stddev = 2.0 - - float2 _Axis; - - /** Increase to make edges crisper. Decrease to reduce temporal flicker. */ - #define EDGE_SHARPNESS (1.0) - - float _BlurFilterDistance; - #define SCALE _BlurFilterDistance - - /** Filter _Radius in pixels. This will be multiplied by SCALE. */ - #define R (4) - - struct v2f - { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uv2 : TEXCOORD1; - }; - - v2f vert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - o.uv2 = v.texcoord.xy; - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - o.uv2.y = 1-o.uv2.y; - #endif - return o; - } - - float3 ReconstructCSPosition(float2 S, float z) - { - float linEyeZ = LinearEyeDepth(z); -#ifdef UNITY_SINGLE_PASS_STEREO - float4 projInfo = (unity_StereoEyeIndex == 0) ? _ProjInfoLeft : _ProjInfoRight; - return float3((S.xy * projInfo.xy + projInfo.zw) * linEyeZ, linEyeZ); -#else - return float3(( S.xy * _ProjInfo.xy + _ProjInfo.zw) * linEyeZ, linEyeZ); -#endif - - /* - // for reference - float4 clipPos = float4(S*2.0-1.0, (z*2-1), 1); - float4 viewPos; - viewPos.x = dot((float4)_ProjectionInv[0], clipPos); - viewPos.y = dot((float4)_ProjectionInv[1], clipPos); - viewPos.w = dot((float4)_ProjectionInv[3], clipPos); - viewPos.z = z; - viewPos = viewPos/viewPos.w; - return viewPos.xyz; - */ - } - - float3 ReconstructCSFaceNormal(float3 C) { - return normalize(cross(ddy(C), ddx(C))); - } - - - /** Returns a unit vector and a screen-space _Radius for the tap on a unit disk (the caller should scale by the actual disk _Radius) */ - - float2 TapLocation(int sampleNumber, float spinAngle, out float ssR){ - // Radius relative to ssR - float alpha = float(sampleNumber + 0.5) * (1.0 / NUM_SAMPLES); - float angle = alpha * (NUM_SPIRAL_TURNS * 6.28) + spinAngle; - - ssR = alpha; - return float2(cos(angle), sin(angle)); - } - - /** Used for packing Z into the GB channels */ - float CSZToKey(float z) { - return saturate(z * (1.0 / FAR_PLANE_Z)); - } - - /** Used for packing Z into the GB channels */ - void packKey(float key, out float2 p) { - // Round to the nearest 1/256.0 - float temp = floor(key * 256.0); - - // Integer part - p.x = temp * (1.0 / 256.0); - - // Fractional part - p.y = key * 256.0 - temp; - } - - /** Returns a number on (0, 1) */ - float UnpackKey(float2 p) - { - return p.x * (256.0 / 257.0) + p.y * (1.0 / 257.0); - } - - - /** Read the camera-space position of the point at screen-space pixel ssP */ - float3 GetPosition(float2 ssP) { - float3 P; - - P.z = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(ssP.xy, _CameraDepthTexture_ST)); - - // Offset to pixel center - P = ReconstructCSPosition(float2(ssP) /*+ float2(0.5, 0.5)*/, P.z); - return P; - } - - /** Read the camera-space position of the point at screen-space pixel ssP + unitOffset * ssR. Assumes length(unitOffset) == 1 */ - float3 GetOffsetPosition(float2 ssC, float2 unitOffset, float ssR) - { - float2 ssP = saturate(float2(ssR*unitOffset) + ssC); - - float3 P; - P.z = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(ssP.xy, _CameraDepthTexture_ST)); - - // Offset to pixel center - P = ReconstructCSPosition(float2(ssP)/* + float2(0.5, 0.5)*/, P.z); - - return P; - } - - /** Compute the occlusion due to sample with index \a i about the pixel at \a ssC that corresponds - to camera-space point \a C with unit normal \a n_C, using maximum screen-space sampling _Radius \a ssDiskRadius */ - - float SampleAO(in float2 ssC, in float3 C, in float3 n_C, in float ssDiskRadius, in int tapIndex, in float randomPatternRotationAngle) - { - // Offset on the unit disk, spun for this pixel - float ssR; - float2 unitOffset = TapLocation(tapIndex, randomPatternRotationAngle, ssR); - ssR *= ssDiskRadius; - - // The occluding point in camera space - float3 Q = GetOffsetPosition(ssC, unitOffset, ssR); - - float3 v = Q - C; - - float vv = dot(v, v); - float vn = dot(v, n_C); - - const float epsilon = 0.01; - float f = max(_Radius2 - vv, 0.0); - return f * f * f * max((vn - bias) / (epsilon + vv), 0.0); - } - - float4 fragAO(v2f i) : SV_Target - { - float4 fragment = fixed4(1,1,1,1); - - // Pixel being shaded - float2 ssC = i.uv2.xy;// * _MainTex_TexelSize.zw; - - // View space point being shaded - float3 C = GetPosition(ssC); - - //return abs(float4(C.xyz,0)); - //if(abs(C.z)<0.31) - // return 1; - //return abs(C.z); - - packKey(CSZToKey(C.z), fragment.gb); - //packKey(CSZToKey(C.z), bilateralKey); - - float randomPatternRotationAngle = 1.0; - #if defined(SHADER_API_D3D11) || defined(SHADER_API_GLCORE) - int2 ssCInt = ssC.xy * _MainTex_TexelSize.zw; - randomPatternRotationAngle = frac(sin(dot(i.uv, float2(12.9898, 78.233))) * 43758.5453) * 1000.0; - #else - // TODO: make dx9 rand better - randomPatternRotationAngle = tex2D(_Rand, i.uv*12.0).x * 1000.0; - #endif - - // Reconstruct normals from positions. These will lead to 1-pixel black lines - // at depth discontinuities, however the blur will wipe those out so they are not visible - // in the final image. - float3 n_C = ReconstructCSFaceNormal(C); - - //return float4((n_C),0); - - // Choose the screen-space sample _Radius - // proportional to the projected area of the sphere - float ssDiskRadius = -_Radius / C.z; // -projScale * _Radius / C.z; // <::::: - - float sum = 0.0; - for (int l = 0; l < NUM_SAMPLES; ++l) { - sum += SampleAO(ssC, C, n_C, (ssDiskRadius), l, randomPatternRotationAngle); - } - - float temp = _Radius2 * _Radius; - sum /= temp * temp; - - float A = max(0.0, 1.0 - sum * _Intensity * (5.0 / NUM_SAMPLES)); - fragment.ra = float2(A,A); - - return fragment; - } - - float4 fragUpsample (v2f i) : SV_Target - { - float4 fragment = fixed4(1,1,1,1); - - // View space point being shaded - float3 C = GetPosition(i.uv.xy); - - packKey(CSZToKey(C.z), fragment.gb); - fragment.ra = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)).ra; - - return fragment; - } - - float4 fragApply (v2f i) : SV_Target - { - float4 ao = tex2D(_AOTex, UnityStereoScreenSpaceUVAdjust(i.uv2.xy, _AOTex_ST)); - return tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)) * ao.rrrr; - } - - float4 fragApplySoft (v2f i) : SV_Target - { - float4 color = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - - float ao = tex2D(_AOTex, UnityStereoScreenSpaceUVAdjust(i.uv2.xy, _AOTex_ST)).r; - ao += tex2D(_AOTex, UnityStereoScreenSpaceUVAdjust(i.uv2.xy, _AOTex_ST) + _MainTex_TexelSize.xy * 0.75).r; - ao += tex2D(_AOTex, UnityStereoScreenSpaceUVAdjust(i.uv2.xy, _AOTex_ST) - _MainTex_TexelSize.xy * 0.75).r; - ao += tex2D(_AOTex, UnityStereoScreenSpaceUVAdjust(i.uv2.xy, _AOTex_ST) + _MainTex_TexelSize.xy * float2(-0.75,0.75)).r; - ao += tex2D(_AOTex, UnityStereoScreenSpaceUVAdjust(i.uv2.xy, _AOTex_ST) - _MainTex_TexelSize.xy * float2(-0.75,0.75)).r; - - return color * float4(ao,ao,ao,5)/5; - } - - float4 fragBlurBL (v2f i) : SV_Target - { - float4 fragment = float4(1,1,1,1); - - float2 ssC = UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST); - - float4 temp = tex2Dlod(_MainTex, float4(UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST),0,0)); - - float2 passthrough2 = temp.gb; - float key = UnpackKey(passthrough2); - - float sum = temp.r; - - /* - if (key >= 0.999) { - // Sky pixel (if you aren't using depth keying, disable this test) - fragment.gb = passthrough2; - return fragment; - } - */ - - // Base weight for depth falloff. Increase this for more blurriness, decrease it for better edge discrimination - - float BASE = gaussian[0] * 0.5; // ole: i decreased - float totalWeight = BASE; - sum *= totalWeight; - - for (int r = -R; r <= R; ++r) { - // We already handled the zero case above. This loop should be unrolled and the branch discarded - if (r != 0) { - temp = tex2Dlod(_MainTex, float4(ssC + _Axis * _MainTex_TexelSize.xy * (r * SCALE),0,0) ); - float tapKey = UnpackKey(temp.gb); - float value = temp.r; - - // spatial domain: offset gaussian tap - float weight = 0.3 + gaussian[abs(r)]; - - // range domain (the "bilateral" weight). As depth difference increases, decrease weight. - weight *= max(0.0, 1.0 - (2000.0 * EDGE_SHARPNESS) * abs(tapKey - key)); - - sum += value * weight; - totalWeight += weight; - } - } - - const float epsilon = 0.0001; - fragment = sum / (totalWeight + epsilon); - - fragment.gb = passthrough2; - - return fragment; - } - - ENDCG - -SubShader { - - // 0: get ao - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragAO - #pragma target 3.0 - - ENDCG - } - - // 1: bilateral blur - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragBlurBL - #pragma target 3.0 - - ENDCG - } - - // 2: apply ao - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragApply - #pragma target 3.0 - - ENDCG - } - - // 3: apply with a slight box filter - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragApplySoft - #pragma target 3.0 - - ENDCG - } - - // 4: in case you want to blur in high rez for nicer z borders - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragUpsample - #pragma target 3.0 - - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader.meta deleted file mode 100644 index dbe9a72..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceAmbientObscurance.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 95616c020c5604dda96cf76afbbc0272 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc deleted file mode 100644 index 5397f38..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc +++ /dev/null @@ -1,261 +0,0 @@ -/** -\author Michael Mara and Morgan McGuire, Casual Effects. 2015. -*/ - -#ifndef SCREEN_SPACE_RAYTRACE_INCLUDED -#define SCREEN_SPACE_RAYTRACE_INCLUDED - - -sampler2D_float _CameraDepthTexture; - - -float distanceSquared(float2 A, float2 B) { - A -= B; - return dot(A, A); -} - -float distanceSquared(float3 A, float3 B) { - A -= B; - return dot(A, A); -} - -void swap(inout float v0, inout float v1) { - float temp = v0; - v0 = v1; - v1 = temp; -} - - -bool isIntersecting(float rayZMin, float rayZMax, float sceneZ, float layerThickness) { - return (rayZMax >= sceneZ - layerThickness) && (rayZMin <= sceneZ); -} - -void rayIterations(inout float2 P, inout float stepDirection, inout float end, inout int stepCount, inout int maxSteps, inout bool intersecting, - inout float sceneZ, inout float2 dP, inout float3 Q, inout float3 dQ, inout float k, inout float dk, - inout float rayZMin, inout float rayZMax, inout float prevZMaxEstimate, inout bool permute, inout float2 hitPixel, - inout float2 invSize, inout float layerThickness) { - - UNITY_LOOP - for (; - ( (P.x * stepDirection) <= end) && - (stepCount < maxSteps) && - (!intersecting); - P += dP, Q.z += dQ.z, k += dk, stepCount += 1) { - - // The depth range that the ray covers within this loop iteration. - // Assume that the ray is moving in increasing z and swap if backwards. - rayZMin = prevZMaxEstimate; - //rayZMin = (dQ.z * -0.5 + Q.z) / (dk * -0.5 + k); - // Compute the value at 1/2 pixel into the future - rayZMax = (dQ.z * 0.5 + Q.z) / (dk * 0.5 + k); - prevZMaxEstimate = rayZMax; - if (rayZMin > rayZMax) { swap(rayZMin, rayZMax); } - - // Undo the homogeneous operation to obtain the camera-space - // Q at each point - hitPixel = permute ? P.yx : P; - - sceneZ = tex2Dlod(_CameraDepthTexture, float4(hitPixel * invSize,0,0)).r; - sceneZ = -LinearEyeDepth(sceneZ); - - intersecting = isIntersecting(rayZMin, rayZMax, sceneZ, layerThickness); - - } // pixel on ray - P -= dP, Q.z -= dQ.z, k -= dk; -} - -/** - \param csOrigin must have z < -0.01, and project within the valid screen rectangle - \param stepRate Set to 1.0 by default, higher to step faster - */ -bool castDenseScreenSpaceRay - (float3 csOrigin, - float3 csDirection, - float4x4 projectToPixelMatrix, - float2 csZBufferSize, - float3 clipInfo, - float jitterFraction, - int maxSteps, - float layerThickness, - float maxRayTraceDistance, - out float2 hitPixel, - int stepRate, - bool refine, - out float3 csHitPoint, - out float stepCount) { - - float2 invSize = float2(1.0 / csZBufferSize.x, 1.0 / csZBufferSize.y); - - // Initialize to off screen - hitPixel = float2(-1, -1); - - float nearPlaneZ = -0.01; - // Clip ray to a near plane in 3D (doesn't have to be *the* near plane, although that would be a good idea) - float rayLength = ((csOrigin.z + csDirection.z * maxRayTraceDistance) > nearPlaneZ) ? - ((nearPlaneZ - csOrigin.z) / csDirection.z) : - maxRayTraceDistance; - - float3 csEndPoint = csDirection * rayLength + csOrigin; - - // Project into screen space - // This matrix has a lot of zeroes in it. We could expand - // out these multiplies to avoid multiplying by zero - // ...but 16 MADDs are not a big deal compared to what's ahead - float4 H0 = mul(projectToPixelMatrix, float4(csOrigin, 1.0)); - float4 H1 = mul(projectToPixelMatrix, float4(csEndPoint, 1.0)); - - // There are a lot of divisions by w that can be turned into multiplications - // at some minor precision loss...and we need to interpolate these 1/w values - // anyway. - // - // Because the caller was required to clip to the near plane, - // this homogeneous division (projecting from 4D to 2D) is guaranteed - // to succeed. - float k0 = 1.0 / H0.w; - float k1 = 1.0 / H1.w; - - // Screen-space endpoints - float2 P0 = H0.xy * k0; - float2 P1 = H1.xy * k1; - - // Switch the original points to values that interpolate linearly in 2D: - float3 Q0 = csOrigin * k0; - float3 Q1 = csEndPoint * k1; - -#if 1 // Clipping to the screen coordinates. We could simply modify maxSteps instead - float yMax = csZBufferSize.y - 0.5; - float yMin = 0.5; - float xMax = csZBufferSize.x - 0.5; - float xMin = 0.5; - - // 2D interpolation parameter - float alpha = 0.0; - // P0 must be in bounds - if (P1.y > yMax || P1.y < yMin) { - float yClip = (P1.y > yMax) ? yMax : yMin; - float yAlpha = (P1.y - yClip) / (P1.y - P0.y); // Denominator is not zero, since P0 != P1 (or P0 would have been clipped!) - alpha = yAlpha; - } - - // P0 must be in bounds - if (P1.x > xMax || P1.x < xMin) { - float xClip = (P1.x > xMax) ? xMax : xMin; - float xAlpha = (P1.x - xClip) / (P1.x - P0.x); // Denominator is not zero, since P0 != P1 (or P0 would have been clipped!) - alpha = max(alpha, xAlpha); - } - - // These are all in homogeneous space, so they interpolate linearly - P1 = lerp(P1, P0, alpha); - k1 = lerp(k1, k0, alpha); - Q1 = lerp(Q1, Q0, alpha); -#endif - - // We're doing this to avoid divide by zero (rays exactly parallel to an eye ray) - P1 = (distanceSquared(P0, P1) < 0.0001) ? P0 + float2(0.01, 0.01) : P1; - - float2 delta = P1 - P0; - - // Assume horizontal - bool permute = false; - if (abs(delta.x) < abs(delta.y)) { - // More-vertical line. Create a permutation that swaps x and y in the output - permute = true; - - // Directly swizzle the inputs - delta = delta.yx; - P1 = P1.yx; - P0 = P0.yx; - } - - // From now on, "x" is the primary iteration direction and "y" is the secondary one - - float stepDirection = sign(delta.x); - float invdx = stepDirection / delta.x; - float2 dP = float2(stepDirection, invdx * delta.y); - - // Track the derivatives of Q and k - float3 dQ = (Q1 - Q0) * invdx; - float dk = (k1 - k0) * invdx; - - dP *= stepRate; - dQ *= stepRate; - dk *= stepRate; - - P0 += dP * jitterFraction; - Q0 += dQ * jitterFraction; - k0 += dk * jitterFraction; - - // Slide P from P0 to P1, (now-homogeneous) Q from Q0 to Q1, and k from k0 to k1 - float3 Q = Q0; - float k = k0; - - // We track the ray depth at +/- 1/2 pixel to treat pixels as clip-space solid - // voxels. Because the depth at -1/2 for a given pixel will be the same as at - // +1/2 for the previous iteration, we actually only have to compute one value - // per iteration. - float prevZMaxEstimate = csOrigin.z; - stepCount = 0.0; - float rayZMax = prevZMaxEstimate, rayZMin = prevZMaxEstimate; - float sceneZ = 100000; - - // P1.x is never modified after this point, so pre-scale it by - // the step direction for a signed comparison - float end = P1.x * stepDirection; - - bool intersecting = isIntersecting(rayZMin, rayZMax, sceneZ, layerThickness); - // We only advance the z field of Q in the inner loop, since - // Q.xy is never used until after the loop terminates - - //int rayIterations = min(maxSteps, stepsToGetOffscreen); - - - float2 P = P0; - - int originalStepCount = 0; - rayIterations(P, stepDirection, end, originalStepCount, maxSteps, intersecting, - sceneZ, dP, Q, dQ, k, dk, - rayZMin, rayZMax, prevZMaxEstimate, permute, hitPixel, - invSize, layerThickness); - - - stepCount = originalStepCount; - if (refine && intersecting && stepRate > 1) { - - - // We're going back a step. - P -= dP, Q.z -= dQ.z, k -= dk; - prevZMaxEstimate = Q.z / k; - rayZMin = prevZMaxEstimate; - rayZMax = prevZMaxEstimate; - - intersecting = false; - int refinementStepCount = 0; - int refinementMaxSteps = stepRate; - - float refinementConstant = 1.0 / stepRate; - dQ.z *= refinementConstant; - dP *= refinementConstant; - dk *= refinementConstant; - - // Refinement - rayIterations(P, stepDirection, end, refinementStepCount, refinementMaxSteps, intersecting, - sceneZ, dP, Q, dQ, k, dk, - rayZMin, rayZMax, prevZMaxEstimate, permute, hitPixel, - invSize, layerThickness); - stepCount += refinementStepCount * refinementConstant - 1.0; - //stepCount = refinementStepCount; - intersecting = true; - } - - - // Loop only advanced the Z component. Now that we know where we are going - // update xy - Q.xy += dQ.xy * stepCount; - // Q is a vector, so we are trying to get by with 1 division instead of 3. - csHitPoint = Q * (1.0 / k); - - return intersecting; -} - - -#endif // SCREEN_SPACE_RAYTRACE_INCLUDED diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc.meta deleted file mode 100644 index 88f5b49..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ScreenSpaceRaytrace.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 26c67b7245085cf438e3d42d50d94f55 -timeCreated: 1425661779 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader deleted file mode 100644 index 692e676..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader +++ /dev/null @@ -1,39 +0,0 @@ -Shader "Hidden/Sepiatone Effect" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert_img -#pragma fragment frag -#include "UnityCG.cginc" - -uniform sampler2D _MainTex; -half4 _MainTex_ST; - -fixed4 frag (v2f_img i) : SV_Target -{ - fixed4 original = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - - // get intensity value (Y part of YIQ color space) - fixed Y = dot (fixed3(0.299, 0.587, 0.114), original.rgb); - - // Convert to Sepia Tone by adding constant - fixed4 sepiaConvert = float4 (0.191, -0.054, -0.221, 0.0); - fixed4 output = sepiaConvert + Y; - output.a = original.a; - - return output; -} -ENDCG - - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader.meta deleted file mode 100644 index 34528f5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SepiaToneEffect.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: b6aa781cad112c75d0008dfa8d76c639 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader deleted file mode 100644 index 00e0d42..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader +++ /dev/null @@ -1,56 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - - -Shader "Hidden/ShowAlphaChannel" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _EdgeTex ("_EdgeTex", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag - -#include "UnityCG.cginc" - -uniform sampler2D _MainTex; -uniform sampler2D _EdgeTex; - -uniform float4 _MainTex_TexelSize; - -float filterRadius; - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; -}; - -v2f vert( appdata_img v ) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = v.texcoord.xy; - - return o; -} - -half4 frag (v2f i) : SV_Target -{ - - half4 color = tex2D(_MainTex, i.uv.xy); - half edges = color.a; - - return edges; -} -ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader.meta deleted file mode 100644 index 37d3f86..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/ShowAlphaChannel.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: da310021e2a4142429d95c537846dc38 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader deleted file mode 100644 index 4d4cec9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader +++ /dev/null @@ -1,43 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - - -Shader "Hidden/SimpleClear" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" - -uniform sampler2D _MainTex; -uniform float4 _MainTex_TexelSize; - -struct v2f { - float4 pos : SV_POSITION; -}; - -v2f vert( appdata_img v ) -{ - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - return o; -} - -half4 frag (v2f i) : SV_Target -{ - return half4(0,0,0,0); -} -ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader.meta deleted file mode 100644 index eba30cb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SimpleClear.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: f688f89ed5eb847c5b19c934a0f1e772 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader deleted file mode 100644 index 6db882e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader +++ /dev/null @@ -1,229 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/SunShaftsComposite" { - Properties { - _MainTex ("Base", 2D) = "" {} - _ColorBuffer ("Color", 2D) = "" {} - _Skybox ("Skybox", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - #if UNITY_UV_STARTS_AT_TOP - float2 uv1 : TEXCOORD1; - #endif - }; - - struct v2f_radial { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 blurVector : TEXCOORD1; - }; - - sampler2D _MainTex; - sampler2D _ColorBuffer; - sampler2D _Skybox; - sampler2D_float _CameraDepthTexture; - - uniform half4 _SunThreshold; - - uniform half4 _SunColor; - uniform half4 _BlurRadius4; - uniform half4 _SunPosition; - uniform half4 _MainTex_TexelSize; - half4 _MainTex_ST; - half4 _ColorBuffer_ST; - half4 _Skybox_ST; - half4 _CameraDepthTexture_ST; - - - #define SAMPLES_FLOAT 6.0f - #define SAMPLES_INT 6 - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - - #if UNITY_UV_STARTS_AT_TOP - o.uv1 = v.texcoord.xy; - if (_MainTex_TexelSize.y < 0) - o.uv1.y = 1-o.uv1.y; - #endif - - return o; - } - - half4 fragScreen(v2f i) : SV_Target { - half4 colorA = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - #if UNITY_UV_STARTS_AT_TOP - half4 colorB = tex2D (_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _ColorBuffer_ST)); - #else - half4 colorB = tex2D (_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _ColorBuffer_ST)); - #endif - half4 depthMask = saturate (colorB * _SunColor); - return 1.0f - (1.0f-colorA) * (1.0f-depthMask); - } - - half4 fragAdd(v2f i) : SV_Target { - half4 colorA = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - #if UNITY_UV_STARTS_AT_TOP - half4 colorB = tex2D (_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _ColorBuffer_ST)); - #else - half4 colorB = tex2D (_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _ColorBuffer_ST)); - #endif - half4 depthMask = saturate (colorB * _SunColor); - return colorA + depthMask; - } - - v2f_radial vert_radial( appdata_img v ) { - v2f_radial o; - o.pos = UnityObjectToClipPos(v.vertex); - - o.uv.xy = v.texcoord.xy; - o.blurVector = (_SunPosition.xy - v.texcoord.xy) * _BlurRadius4.xy; - - return o; - } - - half4 frag_radial(v2f_radial i) : SV_Target - { - half4 color = half4(0,0,0,0); - for(int j = 0; j < SAMPLES_INT; j++) - { - half4 tmpColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - color += tmpColor; - i.uv.xy += i.blurVector; - } - return color / SAMPLES_FLOAT; - } - - half TransformColor (half4 skyboxValue) { - return dot(max(skyboxValue.rgb - _SunThreshold.rgb, half3(0,0,0)), half3(1,1,1)); // threshold and convert to greyscale - } - - half4 frag_depth (v2f i) : SV_Target { - #if UNITY_UV_STARTS_AT_TOP - float depthSample = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _CameraDepthTexture_ST)); - #else - float depthSample = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _CameraDepthTexture_ST)); - #endif - - half4 tex = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - - depthSample = Linear01Depth (depthSample); - - // consider maximum radius - #if UNITY_UV_STARTS_AT_TOP - half2 vec = _SunPosition.xy - i.uv1.xy; - #else - half2 vec = _SunPosition.xy - i.uv.xy; - #endif - half dist = saturate (_SunPosition.w - length (vec.xy)); - - half4 outColor = 0; - - // consider shafts blockers - if (depthSample > 0.99) - outColor = TransformColor (tex) * dist; - - return outColor; - } - - half4 frag_nodepth (v2f i) : SV_Target { - #if UNITY_UV_STARTS_AT_TOP - float4 sky = (tex2D (_Skybox, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _Skybox_ST))); - #else - float4 sky = (tex2D (_Skybox, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _Skybox_ST))); - #endif - - float4 tex = (tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST))); - - // consider maximum radius - #if UNITY_UV_STARTS_AT_TOP - half2 vec = _SunPosition.xy - i.uv1.xy; - #else - half2 vec = _SunPosition.xy - i.uv.xy; - #endif - half dist = saturate (_SunPosition.w - length (vec)); - - half4 outColor = 0; - - // find unoccluded sky pixels - // consider pixel values that differ significantly between framebuffer and sky-only buffer as occluded - if (Luminance ( abs(sky.rgb - tex.rgb)) < 0.2) - outColor = TransformColor (sky) * dist; - - return outColor; - } - - - - ENDCG - -Subshader { - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragScreen - - ENDCG - } - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert_radial - #pragma fragment frag_radial - - ENDCG - } - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag_depth - - ENDCG - } - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag_nodepth - - ENDCG - } - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragAdd - - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader.meta deleted file mode 100644 index 82a0680..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/SunShaftsComposite.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: d3b1c8c1036784176946f5cfbfb7fe4c -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader deleted file mode 100644 index fac29f1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader +++ /dev/null @@ -1,357 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/Tonemapper" { - Properties { - _MainTex ("", 2D) = "black" {} - _SmallTex ("", 2D) = "grey" {} - _Curve ("", 2D) = "black" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - sampler2D _SmallTex; - sampler2D _Curve; - - float4 _HdrParams; - float2 intensity; - float4 _MainTex_TexelSize; - half4 _MainTex_ST; - float _AdaptionSpeed; - float _ExposureAdjustment; - float _RangeScale; - - v2f vert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - return o; - } - - float4 fragLog(v2f i) : SV_Target - { - const float EPSILON = 1e-4h; - - float fLogLumSum = 0.0f; - - fLogLumSum += log( max( EPSILON, Luminance(tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2(-1,-1), _MainTex_ST)).rgb))); - fLogLumSum += log( max( EPSILON, Luminance(tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2( 1, 1), _MainTex_ST)).rgb))); - fLogLumSum += log( max( EPSILON, Luminance(tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2(-1, 1), _MainTex_ST)).rgb))); - fLogLumSum += log( max( EPSILON, Luminance(tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2( 1,-1), _MainTex_ST)).rgb))); - - float avg = fLogLumSum / 4.0; - return float4(avg, avg, avg, avg); - } - - float4 fragExp(v2f i) : SV_Target - { - float2 lum = float2(0.0f, 0.0f); - - lum += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2(-1,-1), _MainTex_ST)).xy; - lum += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2(1,1), _MainTex_ST)).xy; - lum += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2(1,-1), _MainTex_ST)).xy; - lum += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize.xy * float2(-1,1), _MainTex_ST)).xy; - - lum = exp(lum / 4.0f); - - return float4(lum.x, lum.y, lum.x, saturate(0.0125 * _AdaptionSpeed)); - } - - float3 ToCIE(float3 FullScreenImage) - { - // RGB -> XYZ conversion - // http://www.w3.org/Graphics/Color/sRGB - // The official sRGB to XYZ conversion matrix is (following ITU-R BT.709) - // 0.4125 0.3576 0.1805 - // 0.2126 0.7152 0.0722 - // 0.0193 0.1192 0.9505 - - float3x3 RGB2XYZ = {0.5141364, 0.3238786, 0.16036376, 0.265068, 0.67023428, 0.06409157, 0.0241188, 0.1228178, 0.84442666}; - - float3 XYZ = mul(RGB2XYZ, FullScreenImage.rgb); - - // XYZ -> Yxy conversion - - float3 Yxy; - - Yxy.r = XYZ.g; - - // x = X / (X + Y + Z) - // y = X / (X + Y + Z) - - float temp = dot(float3(1.0,1.0,1.0), XYZ.rgb); - - Yxy.gb = XYZ.rg / temp; - - return Yxy; - } - - float3 FromCIE(float3 Yxy) - { - float3 XYZ; - // Yxy -> XYZ conversion - XYZ.r = Yxy.r * Yxy.g / Yxy. b; - - // X = Y * x / y - XYZ.g = Yxy.r; - - // copy luminance Y - XYZ.b = Yxy.r * (1 - Yxy.g - Yxy.b) / Yxy.b; - - // Z = Y * (1-x-y) / y - - // XYZ -> RGB conversion - // The official XYZ to sRGB conversion matrix is (following ITU-R BT.709) - // 3.2410 -1.5374 -0.4986 - // -0.9692 1.8760 0.0416 - // 0.0556 -0.2040 1.0570 - - float3x3 XYZ2RGB = { 2.5651,-1.1665,-0.3986, -1.0217, 1.9777, 0.0439, 0.0753, -0.2543, 1.1892}; - - return mul(XYZ2RGB, XYZ); - } - - // NOTE/OPTIMIZATION: we're not going the extra CIE detour anymore, but - // scale with the OUT/IN luminance ratio,this is sooooo much faster - - float4 fragAdaptive(v2f i) : SV_Target - { - float avgLum = tex2D(_SmallTex, i.uv).x; - float4 color = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - - float cieLum = max(0.000001, Luminance(color.rgb)); //ToCIE(color.rgb); - - float lumScaled = cieLum * _HdrParams.z / (0.001 + avgLum.x); - - lumScaled = (lumScaled * (1.0f + lumScaled / (_HdrParams.w)))/(1.0f + lumScaled); - - //cie.r = lumScaled; - - color.rgb = color.rgb * (lumScaled / cieLum); - - //color.rgb = FromCIE(cie); - return color; - } - - float4 fragAdaptiveAutoWhite(v2f i) : SV_Target - { - float2 avgLum = tex2D(_SmallTex, i.uv).xy; - float4 color = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - - float cieLum = max(0.000001, Luminance(color.rgb)); //ToCIE(color.rgb); - - float lumScaled = cieLum * _HdrParams.z / (0.001 + avgLum.x); - - lumScaled = (lumScaled * (1.0f + lumScaled / (avgLum.y*avgLum.y)))/(1.0f + lumScaled); - - //cie.r = lumScaled; - - color.rgb = color.rgb * (lumScaled / cieLum); - - //color.rgb = FromCIE(cie); - return color; - } - - float4 fragCurve(v2f i) : SV_Target - { - float4 color = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - float3 cie = ToCIE(color.rgb); - - // Remap to new lum range - float newLum = tex2D(_Curve, float2(cie.r * _RangeScale, 0.5)).r; - cie.r = newLum; - color.rgb = FromCIE(cie); - - return color; - } - - float4 fragHable(v2f i) : SV_Target - { - const float A = 0.15; - const float B = 0.50; - const float C = 0.10; - const float D = 0.20; - const float E = 0.02; - const float F = 0.30; - const float W = 11.2; - - float3 texColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)).rgb; - texColor *= _ExposureAdjustment; - - float ExposureBias = 2.0; - float3 x = ExposureBias*texColor; - float3 curr = ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F; - - x = W; - float3 whiteScale = 1.0f/(((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F); - float3 color = curr*whiteScale; - - // float3 retColor = pow(color,1/2.2); // we have SRGB write enabled at this stage - - return float4(color, 1.0); - } - - // we are doing it on luminance here (better color preservation, but some other problems like very fast saturation) - float4 fragSimpleReinhard(v2f i) : SV_Target - { - float4 texColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - float lum = Luminance(texColor.rgb); - float lumTm = lum * _ExposureAdjustment; - float scale = lumTm / (1+lumTm); - return float4(texColor.rgb * scale / lum, texColor.a); - } - - float4 fragOptimizedHejiDawson(v2f i) : SV_Target - { - float4 texColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - texColor *= _ExposureAdjustment; - float4 X = max(float4(0.0,0.0,0.0,0.0), texColor-0.004); - float4 retColor = (X*(6.2*X+.5))/(X*(6.2*X+1.7)+0.06); - return retColor*retColor; - } - - float4 fragPhotographic(v2f i) : SV_Target - { - float4 texColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - return 1-exp2(-_ExposureAdjustment * texColor); - } - - float4 fragDownsample(v2f i) : SV_Target - { - float4 tapA = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize * 0.5, _MainTex_ST)); - float4 tapB = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv - _MainTex_TexelSize * 0.5, _MainTex_ST)); - float4 tapC = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv + _MainTex_TexelSize * float2(0.5,-0.5), _MainTex_ST)); - float4 tapD = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv - _MainTex_TexelSize * float2(0.5,-0.5), _MainTex_ST)); - - float4 average = (tapA+tapB+tapC+tapD)/4; - average.y = max(max(tapA.y,tapB.y), max(tapC.y,tapD.y)); - - return average; - } - - ENDCG - -Subshader { - // adaptive reinhhard apply - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAdaptive - ENDCG - } - - // 1 - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragLog - ENDCG - } - // 2 - Pass { - ZTest Always Cull Off ZWrite Off - Blend SrcAlpha OneMinusSrcAlpha - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragExp - ENDCG - } - // 3 - Pass { - ZTest Always Cull Off ZWrite Off - - Blend Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragExp - ENDCG - } - - // 4 user controllable tonemap curve - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragCurve - ENDCG - } - - // 5 tonemapping in uncharted - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragHable - ENDCG - } - - // 6 simple tonemapping based reinhard - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragSimpleReinhard - ENDCG - } - - // 7 OptimizedHejiDawson - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragOptimizedHejiDawson - ENDCG - } - - // 8 Photographic - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragPhotographic - ENDCG - } - - // 9 Downsample with auto white detection - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragDownsample - ENDCG - } - - // 10 adaptive reinhhard apply with auto white - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAdaptiveAutoWhite - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader.meta deleted file mode 100644 index 370e284..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/Tonemapper.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 003377fc2620a44939dadde6fe3f8190 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader deleted file mode 100644 index 555988a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader +++ /dev/null @@ -1,55 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/Twirt Effect Shader" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" - -uniform sampler2D _MainTex; -uniform float4 _MainTex_TexelSize; -half4 _MainTex_ST; -uniform float4 _CenterRadius; -uniform float4x4 _RotationMatrix; - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; -}; - -v2f vert( appdata_img v ) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = v.texcoord - _CenterRadius.xy; - return o; -} - -float4 frag (v2f i) : SV_Target -{ - float2 offset = i.uv; - float2 distortedOffset = MultiplyUV (_RotationMatrix, offset.xy); - float2 tmp = offset / _CenterRadius.zw; - float t = min (1, length(tmp)); - - offset = lerp (distortedOffset, offset, t); - offset += _CenterRadius.xy; - - return tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(offset, _MainTex_ST)); -} -ENDCG - - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader.meta deleted file mode 100644 index a11709f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/TwirlEffect.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 641b781cad112c75d0008dfa8d76c639 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader deleted file mode 100644 index ade5c9a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader +++ /dev/null @@ -1,73 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/Vignetting" { - Properties { - _MainTex ("Base", 2D) = "white" {} - _VignetteTex ("Vignette", 2D) = "white" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uv2 : TEXCOORD1; - }; - - sampler2D _MainTex; - sampler2D _VignetteTex; - - half _Intensity; - half _Blur; - - float4 _MainTex_TexelSize; - half4 _MainTex_ST; - half4 _VignetteTex_ST; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - o.uv2 = v.texcoord.xy; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - o.uv2.y = 1.0 - o.uv2.y; - #endif - - return o; - } - - half4 frag(v2f i) : SV_Target { - half2 coords = i.uv; - half2 uv = i.uv; - - coords = (coords - 0.5) * 2.0; - half coordDot = dot (coords,coords); - half4 color = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(uv, _MainTex_ST)); - - float mask = 1.0 - coordDot * _Intensity; - - half4 colorBlur = tex2D (_VignetteTex, UnityStereoScreenSpaceUVAdjust(i.uv2, _VignetteTex_ST)); - color = lerp (color, colorBlur, saturate (_Blur * coordDot)); - - return color * mask; - } - - ENDCG - -Subshader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - ENDCG - } -} - -Fallback off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader.meta deleted file mode 100644 index 2ecd872..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VignettingShader.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 627943dc7a9a74286b70a4f694a0acd5 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader deleted file mode 100644 index 208d1ac..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader +++ /dev/null @@ -1,67 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/Twist Effect" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader -{ - Pass - { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag - -#include "UnityCG.cginc" - -uniform sampler2D _MainTex; - -uniform float4 _MainTex_ST; - -uniform float4 _MainTex_TexelSize; -uniform float _Angle; -uniform float4 _CenterRadius; - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uvOrig : TEXCOORD1; -}; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - float2 uv = v.texcoord.xy - _CenterRadius.xy; - o.uv = TRANSFORM_TEX(uv, _MainTex); //MultiplyUV (UNITY_MATRIX_TEXTURE0, uv); - o.uvOrig = uv; - return o; -} - -float4 frag (v2f i) : SV_Target -{ - float2 offset = i.uvOrig; - float angle = 1.0 - length(offset / _CenterRadius.zw); - angle = max (0, angle); - angle = angle * angle * _Angle; - float cosLength, sinLength; - sincos (angle, sinLength, cosLength); - - float2 uv; - uv.x = cosLength * offset[0] - sinLength * offset[1]; - uv.y = sinLength * offset[0] + cosLength * offset[1]; - uv += _CenterRadius.xy; - - return tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv, _MainTex_ST)); -} -ENDCG - - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader.meta deleted file mode 100644 index 78ded6f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/VortexEffect.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 708b781cad112c75d0008dfa8d76c639 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing.meta deleted file mode 100644 index 34cabb7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 6d55b5e91b95c41739cdf4f804dd383d diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader deleted file mode 100644 index 5c8f44b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader +++ /dev/null @@ -1,347 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -// -// modified and adapted DLAA code based on Dmitry Andreev's -// Directionally Localized Anti-Aliasing (DLAA) -// -// as seen in "The Force Unleashed 2" -// - -Shader "Hidden/DLAA" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -CGINCLUDE - - #include "UnityCG.cginc" - - uniform sampler2D _MainTex; - uniform float4 _MainTex_TexelSize; - half4 _MainTex_ST; - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - #define LD( o, dx, dy ) o = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(texCoord + float2( dx, dy ) * _MainTex_TexelSize.xy, _MainTex_ST) ); - - float GetIntensity( float3 col ) - { - return dot( col, float3( 0.33f, 0.33f, 0.33f ) ); - } - - float4 highPassPre( float2 texCoord ) - { - LD(float4 sCenter, 0.0,0.0) - LD(float4 sUpLeft, -1.0,-1.0) - LD(float4 sUpRight, 1.0,-1.0) - LD(float4 sDownLeft, -1.0,1.0) - LD(float4 sDownRight, 1.0,1.0) - - float4 diff = 4.0f * abs( (sUpLeft + sUpRight + sDownLeft + sDownRight) - 4.0f * sCenter ); - float edgeMask = GetIntensity(diff.xyz); - - return float4(sCenter.rgb, edgeMask); - } - - // Softer (5-pixel wide high-pass) - /* - void HighPassEdgeHV (out float4 edge_h, out float4 edge_v, float4 center, float4 w_h, float4 w_v, float2 texCoord) { - edge_h = abs( w_h - 4.0f * center ) / 4.0f; - edge_v = abs( w_v - 4.0f * center ) / 4.0f; - } - - // Sharper (3-pixel wide high-pass) - void EdgeHV (out float4 edge_h, out float4 edge_v, float4 center, float2 texCoord) { - float4 left, right, top, bottom; - - LD( left, -1, 0 ) - LD( right, 1, 0 ) - LD( top, 0, -1 ) - LD( bottom, 0, 1 ) - - edge_h = abs( left + right - 2.0f * center ) / 2.0f; - edge_v = abs( top + bottom - 2.0f * center ) / 2.0f; - } - */ - - float4 edgeDetectAndBlur( float2 texCoord ) - { - float lambda = 3.0f; - float epsilon = 0.1f; - - // - // Short Edges - // - - float4 center, left_01, right_01, top_01, bottom_01; - - // sample 5x5 cross - LD( center, 0, 0 ) - LD( left_01, -1.5, 0 ) - LD( right_01, 1.5, 0 ) - LD( top_01, 0,-1.5 ) - LD( bottom_01, 0, 1.5 ) - - - float4 w_h = 2.0f * ( left_01 + right_01 ); - float4 w_v = 2.0f * ( top_01 + bottom_01 ); - - - // Softer (5-pixel wide high-pass) - float4 edge_h = abs( w_h - 4.0f * center ) / 4.0f; - float4 edge_v = abs( w_v - 4.0f * center ) / 4.0f; - - - float4 blurred_h = ( w_h + 2.0f * center ) / 6.0f; - float4 blurred_v = ( w_v + 2.0f * center ) / 6.0f; - - float edge_h_lum = GetIntensity( edge_h.xyz ); - float edge_v_lum = GetIntensity( edge_v.xyz ); - float blurred_h_lum = GetIntensity( blurred_h.xyz ); - float blurred_v_lum = GetIntensity( blurred_v.xyz ); - - float edge_mask_h = saturate( ( lambda * edge_h_lum - epsilon ) / blurred_v_lum ); - float edge_mask_v = saturate( ( lambda * edge_v_lum - epsilon ) / blurred_h_lum ); - - float4 clr = center; - clr = lerp( clr, blurred_h, edge_mask_v ); - clr = lerp( clr, blurred_v, edge_mask_h ); // blurrier version - - // - // Long Edges - // - - float4 h0, h1, h2, h3, h4, h5, h6, h7; - float4 v0, v1, v2, v3, v4, v5, v6, v7; - - // sample 16x16 cross (sparse-sample on X360, incremental kernel update on SPUs) - LD( h0, 1.5, 0 ) LD( h1, 3.5, 0 ) LD( h2, 5.5, 0 ) LD( h3, 7.5, 0 ) LD( h4, -1.5,0 ) LD( h5, -3.5,0 ) LD( h6, -5.5,0 ) LD( h7, -7.5,0 ) - LD( v0, 0, 1.5 ) LD( v1, 0, 3.5 ) LD( v2, 0, 5.5 ) LD( v3, 0, 7.5 ) LD( v4, 0,-1.5 ) LD( v5, 0,-3.5 ) LD( v6, 0,-5.5 ) LD( v7, 0,-7.5 ) - - float long_edge_mask_h = ( h0.a + h1.a + h2.a + h3.a + h4.a + h5.a + h6.a + h7.a ) / 8.0f; - float long_edge_mask_v = ( v0.a + v1.a + v2.a + v3.a + v4.a + v5.a + v6.a + v7.a ) / 8.0f; - - long_edge_mask_h = saturate( long_edge_mask_h * 2.0f - 1.0f ); - long_edge_mask_v = saturate( long_edge_mask_v * 2.0f - 1.0f ); - - float4 left, right, top, bottom; - - LD( left, -1, 0 ) - LD( right, 1, 0 ) - LD( top, 0, -1 ) - LD( bottom, 0, 1 ) - - if ( long_edge_mask_h > 0 || long_edge_mask_v > 0 ) // faster but less resistant to noise (TFU2 X360) - //if ( abs( long_edge_mask_h - long_edge_mask_v ) > 0.2f ) // resistant to noise (TFU2 SPUs) - { - float4 long_blurred_h = ( h0 + h1 + h2 + h3 + h4 + h5 + h6 + h7 ) / 8.0f; - float4 long_blurred_v = ( v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7 ) / 8.0f; - - float lb_h_lum = GetIntensity( long_blurred_h.xyz ); - float lb_v_lum = GetIntensity( long_blurred_v.xyz ); - - float center_lum = GetIntensity( center.xyz ); - float left_lum = GetIntensity( left.xyz ); - float right_lum = GetIntensity( right.xyz ); - float top_lum = GetIntensity( top.xyz ); - float bottom_lum = GetIntensity( bottom.xyz ); - - float4 clr_v = center; - float4 clr_h = center; - - // we had to hack this because DIV by 0 gives some artefacts on different platforms - float hx = center_lum == top_lum ? 0.0 : saturate( 0 + ( lb_h_lum - top_lum ) / ( center_lum - top_lum ) ); - float hy = center_lum == bottom_lum ? 0.0 : saturate( 1 + ( lb_h_lum - center_lum ) / ( center_lum - bottom_lum ) ); - float vx = center_lum == left_lum ? 0.0 : saturate( 0 + ( lb_v_lum - left_lum ) / ( center_lum - left_lum ) ); - float vy = center_lum == right_lum ? 0.0 : saturate( 1 + ( lb_v_lum - center_lum ) / ( center_lum - right_lum ) ); - - float4 vhxy = float4( vx, vy, hx, hy ); - //vhxy = vhxy == float4( 0, 0, 0, 0 ) ? float4( 1, 1, 1, 1 ) : vhxy; - - clr_v = lerp( left , clr_v, vhxy.x ); - clr_v = lerp( right , clr_v, vhxy.y ); - clr_h = lerp( top , clr_h, vhxy.z ); - clr_h = lerp( bottom, clr_h, vhxy.w ); - - clr = lerp( clr, clr_v, long_edge_mask_v ); - clr = lerp( clr, clr_h, long_edge_mask_h ); - } - - return clr; - } - - float4 edgeDetectAndBlurSharper(float2 texCoord) - { - float lambda = 3.0f; - float epsilon = 0.1f; - - // - // Short Edges - // - - float4 center, left_01, right_01, top_01, bottom_01; - - // sample 5x5 cross - LD( center, 0, 0 ) - LD( left_01, -1.5, 0 ) - LD( right_01, 1.5, 0 ) - LD( top_01, 0,-1.5 ) - LD( bottom_01, 0, 1.5 ) - - - float4 w_h = 2.0f * ( left_01 + right_01 ); - float4 w_v = 2.0f * ( top_01 + bottom_01 ); - - // Sharper (3-pixel wide high-pass) - float4 left, right, top, bottom; - - LD( left, -1, 0 ) - LD( right, 1, 0 ) - LD( top, 0, -1 ) - LD( bottom, 0, 1 ) - - float4 edge_h = abs( left + right - 2.0f * center ) / 2.0f; - float4 edge_v = abs( top + bottom - 2.0f * center ) / 2.0f; - - float4 blurred_h = ( w_h + 2.0f * center ) / 6.0f; - float4 blurred_v = ( w_v + 2.0f * center ) / 6.0f; - - float edge_h_lum = GetIntensity( edge_h.xyz ); - float edge_v_lum = GetIntensity( edge_v.xyz ); - float blurred_h_lum = GetIntensity( blurred_h.xyz ); - float blurred_v_lum = GetIntensity( blurred_v.xyz ); - - float edge_mask_h = saturate( ( lambda * edge_h_lum - epsilon ) / blurred_v_lum ); - float edge_mask_v = saturate( ( lambda * edge_v_lum - epsilon ) / blurred_h_lum ); - - float4 clr = center; - clr = lerp( clr, blurred_h, edge_mask_v ); - clr = lerp( clr, blurred_v, edge_mask_h * 0.5f ); // TFU2 uses 1.0f instead of 0.5f - - // - // Long Edges - // - - float4 h0, h1, h2, h3, h4, h5, h6, h7; - float4 v0, v1, v2, v3, v4, v5, v6, v7; - - // sample 16x16 cross (sparse-sample on X360, incremental kernel update on SPUs) - LD( h0, 1.5, 0 ) LD( h1, 3.5, 0 ) LD( h2, 5.5, 0 ) LD( h3, 7.5, 0 ) LD( h4, -1.5,0 ) LD( h5, -3.5,0 ) LD( h6, -5.5,0 ) LD( h7, -7.5,0 ) - LD( v0, 0, 1.5 ) LD( v1, 0, 3.5 ) LD( v2, 0, 5.5 ) LD( v3, 0, 7.5 ) LD( v4, 0,-1.5 ) LD( v5, 0,-3.5 ) LD( v6, 0,-5.5 ) LD( v7, 0,-7.5 ) - - float long_edge_mask_h = ( h0.a + h1.a + h2.a + h3.a + h4.a + h5.a + h6.a + h7.a ) / 8.0f; - float long_edge_mask_v = ( v0.a + v1.a + v2.a + v3.a + v4.a + v5.a + v6.a + v7.a ) / 8.0f; - - long_edge_mask_h = saturate( long_edge_mask_h * 2.0f - 1.0f ); - long_edge_mask_v = saturate( long_edge_mask_v * 2.0f - 1.0f ); - - //if ( long_edge_mask_h > 0 || long_edge_mask_v > 0 ) // faster but less resistant to noise (TFU2 X360) - if ( abs( long_edge_mask_h - long_edge_mask_v ) > 0.2f ) // resistant to noise (TFU2 SPUs) - { - float4 long_blurred_h = ( h0 + h1 + h2 + h3 + h4 + h5 + h6 + h7 ) / 8.0f; - float4 long_blurred_v = ( v0 + v1 + v2 + v3 + v4 + v5 + v6 + v7 ) / 8.0f; - - float lb_h_lum = GetIntensity( long_blurred_h.xyz ); - float lb_v_lum = GetIntensity( long_blurred_v.xyz ); - - float center_lum = GetIntensity( center.xyz ); - float left_lum = GetIntensity( left.xyz ); - float right_lum = GetIntensity( right.xyz ); - float top_lum = GetIntensity( top.xyz ); - float bottom_lum = GetIntensity( bottom.xyz ); - - float4 clr_v = center; - float4 clr_h = center; - - // we had to hack this because DIV by 0 gives some artefacts on different platforms - float hx = center_lum == top_lum ? 0.0 : saturate( 0 + ( lb_h_lum - top_lum ) / ( center_lum - top_lum ) ); - float hy = center_lum == bottom_lum ? 0.0 : saturate( 1 + ( lb_h_lum - center_lum ) / ( center_lum - bottom_lum ) ); - float vx = center_lum == left_lum ? 0.0 : saturate( 0 + ( lb_v_lum - left_lum ) / ( center_lum - left_lum ) ); - float vy = center_lum == right_lum ? 0.0 : saturate( 1 + ( lb_v_lum - center_lum ) / ( center_lum - right_lum ) ); - - float4 vhxy = float4( vx, vy, hx, hy ); - //vhxy = vhxy == float4( 0, 0, 0, 0 ) ? float4( 1, 1, 1, 1 ) : vhxy; - - clr_v = lerp( left , clr_v, vhxy.x ); - clr_v = lerp( right , clr_v, vhxy.y ); - clr_h = lerp( top , clr_h, vhxy.z ); - clr_h = lerp( bottom, clr_h, vhxy.w ); - - clr = lerp( clr, clr_v, long_edge_mask_v ); - clr = lerp( clr, clr_h, long_edge_mask_h ); - } - - return clr; - } - - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - - float2 uv = v.texcoord.xy; - o.uv.xy = uv; - - return o; - } - - half4 fragFirst (v2f i) : SV_Target { - return highPassPre (i.uv); - } - - half4 fragSecond (v2f i) : SV_Target { - return edgeDetectAndBlur( i.uv ); - } - - half4 fragThird (v2f i) : SV_Target { - return edgeDetectAndBlurSharper( i.uv ); - } - -ENDCG - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragFirst - #pragma exclude_renderers d3d11_9x - - ENDCG - } - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragSecond - #pragma target 3.0 - #pragma exclude_renderers d3d11_9x - - ENDCG - } - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragThird - #pragma target 3.0 - - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader.meta deleted file mode 100644 index 8db070d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/DLAA.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 017ca72b9e8a749058d13ebd527e98fa -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader deleted file mode 100644 index 093ea9e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader +++ /dev/null @@ -1,191 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/FXAA II" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM - -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" -#pragma target 3.0 - -#define FXAA_HLSL_3 1 - -/*============================================================================ - - FXAA v2 CONSOLE by TIMOTHY LOTTES @ NVIDIA - -============================================================================*/ - -/*============================================================================ - API PORTING -============================================================================*/ -#ifndef FXAA_GLSL_120 - #define FXAA_GLSL_120 0 -#endif -#ifndef FXAA_GLSL_130 - #define FXAA_GLSL_130 0 -#endif -#ifndef FXAA_HLSL_3 - #define FXAA_HLSL_3 0 -#endif -#ifndef FXAA_HLSL_4 - #define FXAA_HLSL_4 0 -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_GLSL_120 - // Requires, - // #version 120 - // #extension GL_EXT_gpu_shader4 : enable - #define int2 ivec2 - #define float2 vec2 - #define float3 vec3 - #define float4 vec4 - #define FxaaInt2 ivec2 - #define FxaaFloat2 vec2 - #define FxaaSat(a) clamp((a), 0.0, 1.0) - #define FxaaTex sampler2D - #define FxaaTexLod0(t, p) texture2DLod(t, p, 0.0) - #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o) -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_GLSL_130 - // Requires "#version 130" or better - #define int2 ivec2 - #define float2 vec2 - #define float3 vec3 - #define float4 vec4 - #define FxaaInt2 ivec2 - #define FxaaFloat2 vec2 - #define FxaaSat(a) clamp((a), 0.0, 1.0) - #define FxaaTex sampler2D - #define FxaaTexLod0(t, p) textureLod(t, p, 0.0) - #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o) -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_HLSL_3 - #define int2 float2 - #define FxaaInt2 float2 - #define FxaaFloat2 float2 - #define FxaaSat(a) saturate((a)) - #define FxaaTex sampler2D - #define FxaaTexLod0(t, p) tex2Dlod(t, float4(UnityStereoScreenSpaceUVAdjust(p, _MainTex_ST), 0.0, 0.0)) - #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(UnityStereoScreenSpaceUVAdjust(p + (o * r), _MainTex_ST), 0, 0)) -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_HLSL_4 - #define FxaaInt2 int2 - #define FxaaFloat2 float2 - #define FxaaSat(a) saturate((a)) - struct FxaaTex { SamplerState smpl; Texture2D tex; }; - #define FxaaTexLod0(t, p) t.tex.SampleLevel(t.smpl, UnityStereoScreenSpaceUVAdjust(p, _MainTex_ST), 0.0) - #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, UnityStereoScreenSpaceUVAdjust(p, _MainTex_ST), 0.0, o) -#endif - - -/*============================================================================ - - VERTEX SHADER - -============================================================================*/ -float4 FxaaVertexShader( -float2 pos, // Both x and y range {-1.0 to 1.0 across screen}. -float2 rcpFrame) { // {1.0/frameWidth, 1.0/frameHeight} -/*--------------------------------------------------------------------------*/ - #define FXAA_SUBPIX_SHIFT (1.0/4.0) -/*--------------------------------------------------------------------------*/ - float4 posPos; - posPos.xy = (pos.xy * 0.5) + 0.5; - posPos.zw = posPos.xy - (rcpFrame * (0.5 + FXAA_SUBPIX_SHIFT)); - return posPos; } - -/*============================================================================ - - PIXEL SHADER - -============================================================================*/ -half4 _MainTex_ST; - -float3 FxaaPixelShader( -float4 posPos, // Output of FxaaVertexShader interpolated across screen. -FxaaTex tex, // Input texture. -float2 rcpFrame) { // Constant {1.0/frameWidth, 1.0/frameHeight}. -/*--------------------------------------------------------------------------*/ - #define FXAA_REDUCE_MIN (1.0/128.0) - #define FXAA_REDUCE_MUL (1.0/8.0) - #define FXAA_SPAN_MAX 8.0 -/*--------------------------------------------------------------------------*/ - float3 rgbNW = FxaaTexLod0(tex, posPos.zw).xyz; - float3 rgbNE = FxaaTexOff(tex, posPos.zw, FxaaInt2(1,0), rcpFrame.xy).xyz; - float3 rgbSW = FxaaTexOff(tex, posPos.zw, FxaaInt2(0,1), rcpFrame.xy).xyz; - float3 rgbSE = FxaaTexOff(tex, posPos.zw, FxaaInt2(1,1), rcpFrame.xy).xyz; - float3 rgbM = FxaaTexLod0(tex, posPos.xy).xyz; -/*--------------------------------------------------------------------------*/ - float3 luma = float3(0.299, 0.587, 0.114); - float lumaNW = dot(rgbNW, luma); - float lumaNE = dot(rgbNE, luma); - float lumaSW = dot(rgbSW, luma); - float lumaSE = dot(rgbSE, luma); - float lumaM = dot(rgbM, luma); -/*--------------------------------------------------------------------------*/ - float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE))); - float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE))); -/*--------------------------------------------------------------------------*/ - float2 dir; - dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE)); - dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE)); -/*--------------------------------------------------------------------------*/ - float dirReduce = max( - (lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), - FXAA_REDUCE_MIN); - float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce); - dir = min(FxaaFloat2( FXAA_SPAN_MAX, FXAA_SPAN_MAX), - max(FxaaFloat2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), - dir * rcpDirMin)) * rcpFrame.xy; -/*--------------------------------------------------------------------------*/ - float3 rgbA = (1.0/2.0) * ( - FxaaTexLod0(tex, posPos.xy + dir * (1.0/3.0 - 0.5)).xyz + - FxaaTexLod0(tex, posPos.xy + dir * (2.0/3.0 - 0.5)).xyz); - float3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * ( - FxaaTexLod0(tex, posPos.xy + dir * (0.0/3.0 - 0.5)).xyz + - FxaaTexLod0(tex, posPos.xy + dir * (3.0/3.0 - 0.5)).xyz); - float lumaB = dot(rgbB, luma); - if((lumaB < lumaMin) || (lumaB > lumaMax)) return rgbA; - return rgbB; } - - -struct v2f { - float4 pos : SV_POSITION; - float4 uv : TEXCOORD0; -}; - -float4 _MainTex_TexelSize; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = FxaaVertexShader (v.texcoord.xy*2-1, _MainTex_TexelSize.xy); - return o; -} - -sampler2D _MainTex; - -float4 frag (v2f i) : SV_Target -{ - return float4(FxaaPixelShader(i.uv, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); -} - -ENDCG - } -} - -Fallback off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader.meta deleted file mode 100644 index 365db5f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA2.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: cd5b323dcc592457790ff18b528f5e67 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader deleted file mode 100644 index d0fe765..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader +++ /dev/null @@ -1,175 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - - -/*============================================================================ - -source taken from - - - NVIDIA FXAA 3.11 by TIMOTHY LOTTES - - -and adapted and ported to Unity by Unity Technologies - - ------------------------------------------------------------------------------- -COPYRIGHT (C) 2010, 2011 NVIDIA CORPORATION. ALL RIGHTS RESERVED. ------------------------------------------------------------------------------- -TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED -*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA -OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR -CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR -LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, -OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE -THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - -============================================================================*/ - - -Shader "Hidden/FXAA III (Console)" { - Properties { - _MainTex ("-", 2D) = "white" {} - _EdgeThresholdMin ("Edge threshold min",float) = 0.125 - _EdgeThreshold("Edge Threshold", float) = 0.25 - _EdgeSharpness("Edge sharpness",float) = 4.0 - } - SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #pragma target 3.0 - - #include "UnityCG.cginc" - - uniform sampler2D _MainTex; - uniform half _EdgeThresholdMin; - uniform half _EdgeThreshold; - uniform half _EdgeSharpness; - half4 _MainTex_ST; - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 interpolatorA : TEXCOORD1; - float4 interpolatorB : TEXCOORD2; - float4 interpolatorC : TEXCOORD3; - }; - - float4 _MainTex_TexelSize; - - v2f vert (appdata_img v) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = v.texcoord.xy; - - float4 extents; - float2 offset = ( _MainTex_TexelSize.xy ) * 0.5f; - extents.xy = v.texcoord.xy - offset; - extents.zw = v.texcoord.xy + offset; - - float4 rcpSize; - rcpSize.xy = -_MainTex_TexelSize.xy * 0.5f; - rcpSize.zw = _MainTex_TexelSize.xy * 0.5f; -#if defined (SHADER_API_PSP2) - //cg compiler linker bug workaround - float almostzero = v.texcoord.x*0.000001f; - rcpSize.x += almostzero; -#endif - o.interpolatorA = extents; - o.interpolatorB = rcpSize; - o.interpolatorC = rcpSize; - - o.interpolatorC.xy *= 4.0; - o.interpolatorC.zw *= 4.0; - - return o; - } - -// hacky support for NaCl -#if defined(SHADER_API_GLES) && defined(SHADER_API_DESKTOP) - #define FxaaTexTop(t, p) tex2D(t, UnityStereoScreenSpaceUVAdjust(p, _MainTex_ST)) -#else - #define FxaaTexTop(t, p) tex2Dlod(t, float4(UnityStereoScreenSpaceUVAdjust(p, _MainTex_ST), 0.0, 0.0)) -#endif - - inline half TexLuminance( float2 uv ) - { - return Luminance(FxaaTexTop(_MainTex, uv).rgb); - } - - half3 FxaaPixelShader(float2 pos, float4 extents, float4 rcpSize, float4 rcpSize2) - { - half lumaNw = TexLuminance(extents.xy); - half lumaSw = TexLuminance(extents.xw); - half lumaNe = TexLuminance(extents.zy); - half lumaSe = TexLuminance(extents.zw); - - half3 centre = FxaaTexTop(_MainTex, pos).rgb; - half lumaCentre = Luminance(centre); - - half lumaMaxNwSw = max( lumaNw , lumaSw ); - lumaNe += 1.0/384.0; - half lumaMinNwSw = min( lumaNw , lumaSw ); - - half lumaMaxNeSe = max( lumaNe , lumaSe ); - half lumaMinNeSe = min( lumaNe , lumaSe ); - - half lumaMax = max( lumaMaxNeSe, lumaMaxNwSw ); - half lumaMin = min( lumaMinNeSe, lumaMinNwSw ); - - half lumaMaxScaled = lumaMax * _EdgeThreshold; - - half lumaMinCentre = min( lumaMin , lumaCentre ); - half lumaMaxScaledClamped = max( _EdgeThresholdMin , lumaMaxScaled ); - half lumaMaxCentre = max( lumaMax , lumaCentre ); - half dirSWMinusNE = lumaSw - lumaNe; - half lumaMaxCMinusMinC = lumaMaxCentre - lumaMinCentre; - half dirSEMinusNW = lumaSe - lumaNw; - - if(lumaMaxCMinusMinC < lumaMaxScaledClamped) - return centre; - - half2 dir; - dir.x = dirSWMinusNE + dirSEMinusNW; - dir.y = dirSWMinusNE - dirSEMinusNW; - - dir = normalize(dir); - half3 col1 = FxaaTexTop(_MainTex, pos.xy - dir * rcpSize.zw).rgb; - half3 col2 = FxaaTexTop(_MainTex, pos.xy + dir * rcpSize.zw).rgb; - - half dirAbsMinTimesC = min( abs( dir.x ) , abs( dir.y ) ) * _EdgeSharpness; - dir = clamp(dir.xy/dirAbsMinTimesC, -2.0, 2.0); - - half3 col3 = FxaaTexTop(_MainTex, pos.xy - dir * rcpSize2.zw).rgb; - half3 col4 = FxaaTexTop(_MainTex, pos.xy + dir * rcpSize2.zw).rgb; - - half3 rgbyA = col1 + col2; - half3 rgbyB = ((col3 + col4) * 0.25) + (rgbyA * 0.25); - - if((Luminance(rgbyA) < lumaMin) || (Luminance(rgbyB) > lumaMax)) - return rgbyA * 0.5; - else - return rgbyB; - } - - half4 frag (v2f i) : SV_Target - { - half3 color = FxaaPixelShader(i.uv, i.interpolatorA, i.interpolatorB, i.interpolatorC); - return half4(color, 1.0); - } - - ENDCG - } - } - FallBack Off -} - diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader.meta deleted file mode 100644 index 6306815..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAA3Console.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: c547503fff0e8482ea5793727057041c -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader deleted file mode 100644 index 9dd3f4d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader +++ /dev/null @@ -1,831 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/FXAA Preset 2" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" -#pragma target 3.0 - -// doesn't make sense to have this on consoles, it'll fallback to FXAA2 -#pragma exclude_renderers xbox360 ps3 gles - - -#define FXAA_HLSL_3 1 -#define FXAA_PRESET 2 - - -// Copyright (c) 2010 NVIDIA Corporation. All rights reserved. -// -// TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED -// *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS -// OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS -// BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES -// WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, -// BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) -// ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS -// BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -/*============================================================================ - - FXAA - -============================================================================*/ - -/*============================================================================ - API PORTING -============================================================================*/ -#ifndef FXAA_GLSL_120 - #define FXAA_GLSL_120 0 -#endif -#ifndef FXAA_GLSL_130 - #define FXAA_GLSL_130 0 -#endif -#ifndef FXAA_HLSL_3 - #define FXAA_HLSL_3 0 -#endif -#ifndef FXAA_HLSL_4 - #define FXAA_HLSL_4 0 -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_GLSL_120 - // Requires, - // #version 120 - // #extension GL_EXT_gpu_shader4 : enable - #define int2 ivec2 - #define float2 vec2 - #define float3 vec3 - #define float4 vec4 - #define FxaaBool3 bvec3 - #define FxaaInt2 ivec2 - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaBool2Float(a) mix(0.0, 1.0, (a)) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) mix((f), (t), (b)) - #define FxaaTex sampler2D -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_GLSL_130 - // Requires "#version 130" or better - #define int2 ivec2 - #define float2 vec2 - #define float3 vec3 - #define float4 vec4 - #define FxaaBool3 bvec3 - #define FxaaInt2 ivec2 - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaBool2Float(a) mix(0.0, 1.0, (a)) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) mix((f), (t), (b)) - #define FxaaTex sampler2D -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_HLSL_3 - #define int2 float2 - #define FxaaInt2 float2 - #define FxaaFloat2 float2 - #define FxaaFloat3 float3 - #define FxaaFloat4 float4 - #define FxaaBool2Float(a) (a) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) ((f)*(!b) + (t)*(b)) - #define FxaaTex sampler2D -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_HLSL_4 - #define FxaaInt2 int2 - #define FxaaFloat2 float2 - #define FxaaFloat3 float3 - #define FxaaFloat4 float4 - #define FxaaBool2Float(a) (a) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) ((f)*(!b) + (t)*(b)) - struct FxaaTex { SamplerState smpl; Texture2D tex; }; -#endif -/*--------------------------------------------------------------------------*/ -#define FxaaToFloat3(a) FxaaFloat3((a), (a), (a)) -/*--------------------------------------------------------------------------*/ -half4 _MainTex_ST; - -float4 FxaaTexLod0(FxaaTex tex, float2 pos) { - #if FXAA_GLSL_120 - return texture2DLod(tex, pos.xy, 0.0); - #endif - #if FXAA_GLSL_130 - return textureLod(tex, pos.xy, 0.0); - #endif - #if FXAA_HLSL_3 - return tex2Dlod(tex, float4(UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), 0.0, 0.0)); - #endif - #if FXAA_HLSL_4 - return tex.tex.SampleLevel(tex.smpl, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), 0.0); - #endif -} -/*--------------------------------------------------------------------------*/ -float4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) { - #if FXAA_GLSL_120 - return texture2DGrad(tex, pos.xy, grad, grad); - #endif - #if FXAA_GLSL_130 - return textureGrad(tex, pos.xy, grad, grad); - #endif - #if FXAA_HLSL_3 - return tex2Dgrad(tex, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), grad, grad); - #endif - #if FXAA_HLSL_4 - return tex.tex.SampleGrad(tex.smpl, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), grad, grad); - #endif -} -/*--------------------------------------------------------------------------*/ -float4 FxaaTexOff(FxaaTex tex, float2 pos, int2 off, float2 rcpFrame) { - #if FXAA_GLSL_120 - return texture2DLodOffset(tex, pos.xy, 0.0, off.xy); - #endif - #if FXAA_GLSL_130 - return textureLodOffset(tex, pos.xy, 0.0, off.xy); - #endif - #if FXAA_HLSL_3 - return tex2Dlod(tex, float4(UnityStereoScreenSpaceUVAdjust(pos.xy + (off * rcpFrame), _MainTex_ST), 0, 0)); - #endif - #if FXAA_HLSL_4 - return tex.tex.SampleLevel(tex.smpl, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), 0.0, off.xy); - #endif -} - -/*============================================================================ - SRGB KNOBS ------------------------------------------------------------------------------- -FXAA_SRGB_ROP - Set to 1 when applying FXAA to an sRGB back buffer (DX10/11). - This will do the sRGB to linear transform, - as ROP will expect linear color from this shader, - and this shader works in non-linear color. -============================================================================*/ -#define FXAA_SRGB_ROP 0 - -/*============================================================================ - DEBUG KNOBS ------------------------------------------------------------------------------- -All debug knobs draw FXAA-untouched pixels in FXAA computed luma (monochrome). - -FXAA_DEBUG_PASSTHROUGH - Red for pixels which are filtered by FXAA with a - yellow tint on sub-pixel aliasing filtered by FXAA. -FXAA_DEBUG_HORZVERT - Blue for horizontal edges, gold for vertical edges. -FXAA_DEBUG_PAIR - Blue/green for the 2 pixel pair choice. -FXAA_DEBUG_NEGPOS - Red/blue for which side of center of span. -FXAA_DEBUG_OFFSET - Red/blue for -/+ x, gold/skyblue for -/+ y. -============================================================================*/ -#ifndef FXAA_DEBUG_PASSTHROUGH - #define FXAA_DEBUG_PASSTHROUGH 0 -#endif -#ifndef FXAA_DEBUG_HORZVERT - #define FXAA_DEBUG_HORZVERT 0 -#endif -#ifndef FXAA_DEBUG_PAIR - #define FXAA_DEBUG_PAIR 0 -#endif -#ifndef FXAA_DEBUG_NEGPOS - #define FXAA_DEBUG_NEGPOS 0 -#endif -#ifndef FXAA_DEBUG_OFFSET - #define FXAA_DEBUG_OFFSET 0 -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_DEBUG_PASSTHROUGH || FXAA_DEBUG_HORZVERT || FXAA_DEBUG_PAIR - #define FXAA_DEBUG 1 -#endif -#if FXAA_DEBUG_NEGPOS || FXAA_DEBUG_OFFSET - #define FXAA_DEBUG 1 -#endif -#ifndef FXAA_DEBUG - #define FXAA_DEBUG 0 -#endif - -/*============================================================================ - COMPILE-IN KNOBS ------------------------------------------------------------------------------- -FXAA_PRESET - Choose compile-in knob preset 0-5. ------------------------------------------------------------------------------- -FXAA_EDGE_THRESHOLD - The minimum amount of local contrast required - to apply algorithm. - 1.0/3.0 - too little - 1.0/4.0 - good start - 1.0/8.0 - applies to more edges - 1.0/16.0 - overkill ------------------------------------------------------------------------------- -FXAA_EDGE_THRESHOLD_MIN - Trims the algorithm from processing darks. - Perf optimization. - 1.0/32.0 - visible limit (smaller isn't visible) - 1.0/16.0 - good compromise - 1.0/12.0 - upper limit (seeing artifacts) ------------------------------------------------------------------------------- -FXAA_SEARCH_STEPS - Maximum number of search steps for end of span. ------------------------------------------------------------------------------- -FXAA_SEARCH_ACCELERATION - How much to accelerate search, - 1 - no acceleration - 2 - skip by 2 pixels - 3 - skip by 3 pixels - 4 - skip by 4 pixels ------------------------------------------------------------------------------- -FXAA_SEARCH_THRESHOLD - Controls when to stop searching. - 1.0/4.0 - seems to be the best quality wise ------------------------------------------------------------------------------- -FXAA_SUBPIX_FASTER - Turn on lower quality but faster subpix path. - Not recomended, but used in preset 0. ------------------------------------------------------------------------------- -FXAA_SUBPIX - Toggle subpix filtering. - 0 - turn off - 1 - turn on - 2 - turn on full (ignores FXAA_SUBPIX_TRIM and CAP) ------------------------------------------------------------------------------- -FXAA_SUBPIX_TRIM - Controls sub-pixel aliasing removal. - 1.0/2.0 - low removal - 1.0/3.0 - medium removal - 1.0/4.0 - default removal - 1.0/8.0 - high removal - 0.0 - complete removal ------------------------------------------------------------------------------- -FXAA_SUBPIX_CAP - Insures fine detail is not completely removed. - This is important for the transition of sub-pixel detail, - like fences and wires. - 3.0/4.0 - default (medium amount of filtering) - 7.0/8.0 - high amount of filtering - 1.0 - no capping of sub-pixel aliasing removal -============================================================================*/ -#ifndef FXAA_PRESET - #define FXAA_PRESET 3 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 0) - #define FXAA_EDGE_THRESHOLD (1.0/4.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/12.0) - #define FXAA_SEARCH_STEPS 2 - #define FXAA_SEARCH_ACCELERATION 4 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 1 - #define FXAA_SUBPIX_CAP (2.0/3.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 1) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/16.0) - #define FXAA_SEARCH_STEPS 4 - #define FXAA_SEARCH_ACCELERATION 3 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 2) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 8 - #define FXAA_SEARCH_ACCELERATION 2 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 3) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 16 - #define FXAA_SEARCH_ACCELERATION 1 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 4) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 24 - #define FXAA_SEARCH_ACCELERATION 1 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 5) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 32 - #define FXAA_SEARCH_ACCELERATION 1 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#define FXAA_SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_SUBPIX_TRIM)) - -/*============================================================================ - HELPERS -============================================================================*/ -// Return the luma, the estimation of luminance from rgb inputs. -// This approximates luma using one FMA instruction, -// skipping normalization and tossing out blue. -// FxaaLuma() will range 0.0 to 2.963210702. -float FxaaLuma(float3 rgb) { - return rgb.y * (0.587/0.299) + rgb.x; } -/*--------------------------------------------------------------------------*/ -float3 FxaaLerp3(float3 a, float3 b, float amountOfA) { - return (FxaaToFloat3(-amountOfA) * b) + - ((a * FxaaToFloat3(amountOfA)) + b); } -/*--------------------------------------------------------------------------*/ -// Support any extra filtering before returning color. -float3 FxaaFilterReturn(float3 rgb) { - #if FXAA_SRGB_ROP - // Do sRGB encoded value to linear conversion. - return FxaaSel3( - rgb * FxaaToFloat3(1.0/12.92), - FxaaPow3( - rgb * FxaaToFloat3(1.0/1.055) + FxaaToFloat3(0.055/1.055), - FxaaToFloat3(2.4)), - rgb > FxaaToFloat3(0.04045)); - #else - return rgb; - #endif -} - -/*============================================================================ - VERTEX SHADER -============================================================================*/ -float2 FxaaVertexShader( -// Both x and y range {-1.0 to 1.0 across screen}. -float2 inPos) { - float2 pos; - pos.xy = (inPos.xy * FxaaFloat2(0.5, 0.5)) + FxaaFloat2(0.5, 0.5); - return pos; } - -/*============================================================================ - - PIXEL SHADER - -============================================================================*/ -float3 FxaaPixelShader( -// Output of FxaaVertexShader interpolated across screen. -// xy -> actual texture position {0.0 to 1.0} -float2 pos, -// Input texture. -FxaaTex tex, -// RCPFRAME SHOULD PIXEL SHADER CONSTANTS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// {1.0/frameWidth, 1.0/frameHeight} -float2 rcpFrame) { - -/*---------------------------------------------------------------------------- - EARLY EXIT IF LOCAL CONTRAST BELOW EDGE DETECT LIMIT ------------------------------------------------------------------------------- -Majority of pixels of a typical image do not require filtering, -often pixels are grouped into blocks which could benefit from early exit -right at the beginning of the algorithm. -Given the following neighborhood, - - N - W M E - S - -If the difference in local maximum and minimum luma (contrast "range") -is lower than a threshold proportional to the maximum local luma ("rangeMax"), -then the shader early exits (no visible aliasing). -This threshold is clamped at a minimum value ("FXAA_EDGE_THRESHOLD_MIN") -to avoid processing in really dark areas. -----------------------------------------------------------------------------*/ - float3 rgbN = FxaaTexOff(tex, pos.xy, FxaaInt2( 0,-1), rcpFrame).xyz; - float3 rgbW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 0), rcpFrame).xyz; - float3 rgbM = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 0), rcpFrame).xyz; - float3 rgbE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 0), rcpFrame).xyz; - float3 rgbS = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 1), rcpFrame).xyz; - float lumaN = FxaaLuma(rgbN); - float lumaW = FxaaLuma(rgbW); - float lumaM = FxaaLuma(rgbM); - float lumaE = FxaaLuma(rgbE); - float lumaS = FxaaLuma(rgbS); - float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE))); - float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE))); - float range = rangeMax - rangeMin; - #if FXAA_DEBUG - float lumaO = lumaM / (1.0 + (0.587/0.299)); - #endif - if(range < max(FXAA_EDGE_THRESHOLD_MIN, rangeMax * FXAA_EDGE_THRESHOLD)) { - #if FXAA_DEBUG - return FxaaFilterReturn(FxaaToFloat3(lumaO)); - #endif - return FxaaFilterReturn(rgbM); } - #if FXAA_SUBPIX > 0 - #if FXAA_SUBPIX_FASTER - float3 rgbL = (rgbN + rgbW + rgbE + rgbS + rgbM) * - FxaaToFloat3(1.0/5.0); - #else - float3 rgbL = rgbN + rgbW + rgbM + rgbE + rgbS; - #endif - #endif - -/*---------------------------------------------------------------------------- - COMPUTE LOWPASS ------------------------------------------------------------------------------- -FXAA computes a local neighborhood lowpass value as follows, - - (N + W + E + S)/4 - -Then uses the ratio of the contrast range of the lowpass -and the range found in the early exit check, -as a sub-pixel aliasing detection filter. -When FXAA detects sub-pixel aliasing (such as single pixel dots), -it later blends in "blendL" amount -of a lowpass value (computed in the next section) to the final result. -----------------------------------------------------------------------------*/ - #if FXAA_SUBPIX != 0 - float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25; - float rangeL = abs(lumaL - lumaM); - #endif - #if FXAA_SUBPIX == 1 - float blendL = max(0.0, - (rangeL / range) - FXAA_SUBPIX_TRIM) * FXAA_SUBPIX_TRIM_SCALE; - blendL = min(FXAA_SUBPIX_CAP, blendL); - #endif - #if FXAA_SUBPIX == 2 - float blendL = rangeL / range; - #endif - #if FXAA_DEBUG_PASSTHROUGH - #if FXAA_SUBPIX == 0 - float blendL = 0.0; - #endif - return FxaaFilterReturn( - FxaaFloat3(1.0, blendL/FXAA_SUBPIX_CAP, 0.0)); - #endif - -/*---------------------------------------------------------------------------- - CHOOSE VERTICAL OR HORIZONTAL SEARCH ------------------------------------------------------------------------------- -FXAA uses the following local neighborhood, - - NW N NE - W M E - SW S SE - -To compute an edge amount for both vertical and horizontal directions. -Note edge detect filters like Sobel fail on single pixel lines through M. -FXAA takes the weighted average magnitude of the high-pass values -for rows and columns as an indication of local edge amount. - -A lowpass value for anti-sub-pixel-aliasing is computed as - (N+W+E+S+M+NW+NE+SW+SE)/9. -This full box pattern has higher quality than other options. - -Note following this block, both vertical and horizontal cases -flow in parallel (reusing the horizontal variables). -----------------------------------------------------------------------------*/ - float3 rgbNW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1,-1), rcpFrame).xyz; - float3 rgbNE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1,-1), rcpFrame).xyz; - float3 rgbSW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 1), rcpFrame).xyz; - float3 rgbSE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 1), rcpFrame).xyz; - #if (FXAA_SUBPIX_FASTER == 0) && (FXAA_SUBPIX > 0) - rgbL += (rgbNW + rgbNE + rgbSW + rgbSE); - rgbL *= FxaaToFloat3(1.0/9.0); - #endif - float lumaNW = FxaaLuma(rgbNW); - float lumaNE = FxaaLuma(rgbNE); - float lumaSW = FxaaLuma(rgbSW); - float lumaSE = FxaaLuma(rgbSE); - float edgeVert = - abs((0.25 * lumaNW) + (-0.5 * lumaN) + (0.25 * lumaNE)) + - abs((0.50 * lumaW ) + (-1.0 * lumaM) + (0.50 * lumaE )) + - abs((0.25 * lumaSW) + (-0.5 * lumaS) + (0.25 * lumaSE)); - float edgeHorz = - abs((0.25 * lumaNW) + (-0.5 * lumaW) + (0.25 * lumaSW)) + - abs((0.50 * lumaN ) + (-1.0 * lumaM) + (0.50 * lumaS )) + - abs((0.25 * lumaNE) + (-0.5 * lumaE) + (0.25 * lumaSE)); - bool horzSpan = edgeHorz >= edgeVert; - #if FXAA_DEBUG_HORZVERT - if(horzSpan) return FxaaFilterReturn(FxaaFloat3(1.0, 0.75, 0.0)); - else return FxaaFilterReturn(FxaaFloat3(0.0, 0.50, 1.0)); - #endif - float lengthSign = horzSpan ? -rcpFrame.y : -rcpFrame.x; - if(!horzSpan) lumaN = lumaW; - if(!horzSpan) lumaS = lumaE; - float gradientN = abs(lumaN - lumaM); - float gradientS = abs(lumaS - lumaM); - lumaN = (lumaN + lumaM) * 0.5; - lumaS = (lumaS + lumaM) * 0.5; - -/*---------------------------------------------------------------------------- - CHOOSE SIDE OF PIXEL WHERE GRADIENT IS HIGHEST ------------------------------------------------------------------------------- -This chooses a pixel pair. -For "horzSpan == true" this will be a vertical pair, - - [N] N - [M] or [M] - S [S] - -Note following this block, both {N,M} and {S,M} cases -flow in parallel (reusing the {N,M} variables). - -This pair of image rows or columns is searched below -in the positive and negative direction -until edge status changes -(or the maximum number of search steps is reached). -----------------------------------------------------------------------------*/ - bool pairN = gradientN >= gradientS; - #if FXAA_DEBUG_PAIR - if(pairN) return FxaaFilterReturn(FxaaFloat3(0.0, 0.0, 1.0)); - else return FxaaFilterReturn(FxaaFloat3(0.0, 1.0, 0.0)); - #endif - if(!pairN) lumaN = lumaS; - if(!pairN) gradientN = gradientS; - if(!pairN) lengthSign *= -1.0; - float2 posN; - posN.x = pos.x + (horzSpan ? 0.0 : lengthSign * 0.5); - posN.y = pos.y + (horzSpan ? lengthSign * 0.5 : 0.0); - -/*---------------------------------------------------------------------------- - CHOOSE SEARCH LIMITING VALUES ------------------------------------------------------------------------------- -Search limit (+/- gradientN) is a function of local gradient. -----------------------------------------------------------------------------*/ - gradientN *= FXAA_SEARCH_THRESHOLD; - -/*---------------------------------------------------------------------------- - SEARCH IN BOTH DIRECTIONS UNTIL FIND LUMA PAIR AVERAGE IS OUT OF RANGE ------------------------------------------------------------------------------- -This loop searches either in vertical or horizontal directions, -and in both the negative and positive direction in parallel. -This loop fusion is faster than searching separately. - -The search is accelerated using FXAA_SEARCH_ACCELERATION length box filter -via anisotropic filtering with specified texture gradients. -----------------------------------------------------------------------------*/ - float2 posP = posN; - float2 offNP = horzSpan ? - FxaaFloat2(rcpFrame.x, 0.0) : - FxaaFloat2(0.0f, rcpFrame.y); - float lumaEndN = lumaN; - float lumaEndP = lumaN; - bool doneN = false; - bool doneP = false; - #if FXAA_SEARCH_ACCELERATION == 1 - posN += offNP * FxaaFloat2(-1.0, -1.0); - posP += offNP * FxaaFloat2( 1.0, 1.0); - #endif - #if FXAA_SEARCH_ACCELERATION == 2 - posN += offNP * FxaaFloat2(-1.5, -1.5); - posP += offNP * FxaaFloat2( 1.5, 1.5); - offNP *= FxaaFloat2(2.0, 2.0); - #endif - #if FXAA_SEARCH_ACCELERATION == 3 - posN += offNP * FxaaFloat2(-2.0, -2.0); - posP += offNP * FxaaFloat2( 2.0, 2.0); - offNP *= FxaaFloat2(3.0, 3.0); - #endif - #if FXAA_SEARCH_ACCELERATION == 4 - posN += offNP * FxaaFloat2(-2.5, -2.5); - posP += offNP * FxaaFloat2( 2.5, 2.5); - offNP *= FxaaFloat2(4.0, 4.0); - #endif - for(int i = 0; i < FXAA_SEARCH_STEPS; i++) { - #if FXAA_SEARCH_ACCELERATION == 1 - if(!doneN) lumaEndN = - FxaaLuma(FxaaTexLod0(tex, posN.xy).xyz); - if(!doneP) lumaEndP = - FxaaLuma(FxaaTexLod0(tex, posP.xy).xyz); - #else - if(!doneN) lumaEndN = - FxaaLuma(FxaaTexGrad(tex, posN.xy, offNP).xyz); - if(!doneP) lumaEndP = - FxaaLuma(FxaaTexGrad(tex, posP.xy, offNP).xyz); - #endif - doneN = doneN || (abs(lumaEndN - lumaN) >= gradientN); - doneP = doneP || (abs(lumaEndP - lumaN) >= gradientN); - if(doneN && doneP) break; - if(!doneN) posN -= offNP; - if(!doneP) posP += offNP; } - -/*---------------------------------------------------------------------------- - HANDLE IF CENTER IS ON POSITIVE OR NEGATIVE SIDE ------------------------------------------------------------------------------- -FXAA uses the pixel's position in the span -in combination with the values (lumaEnd*) at the ends of the span, -to determine filtering. - -This step computes which side of the span the pixel is on. -On negative side if dstN < dstP, - - posN pos posP - |-----------|------|------------------| - | | | | - |<--dstN--->|<---------dstP---------->| - | - span center - -----------------------------------------------------------------------------*/ - float dstN = horzSpan ? pos.x - posN.x : pos.y - posN.y; - float dstP = horzSpan ? posP.x - pos.x : posP.y - pos.y; - bool directionN = dstN < dstP; - #if FXAA_DEBUG_NEGPOS - if(directionN) return FxaaFilterReturn(FxaaFloat3(1.0, 0.0, 0.0)); - else return FxaaFilterReturn(FxaaFloat3(0.0, 0.0, 1.0)); - #endif - lumaEndN = directionN ? lumaEndN : lumaEndP; - -/*---------------------------------------------------------------------------- - CHECK IF PIXEL IS IN SECTION OF SPAN WHICH GETS NO FILTERING ------------------------------------------------------------------------------- -If both the pair luma at the end of the span (lumaEndN) -and middle pixel luma (lumaM) -are on the same side of the middle pair average luma (lumaN), -then don't filter. - -Cases, - -(1.) "L", - - lumaM - | - V XXXXXXXX <- other line averaged - XXXXXXX[X]XXXXXXXXXXX <- source pixel line - | . | - -------------------------- - [ ]xxxxxx[x]xx[X]XXXXXX <- pair average - -------------------------- - ^ ^ ^ ^ - | | | | - . |<---->|<---------- no filter region - . | | | - . center | | - . | lumaEndN - . | . - . lumaN . - . . - |<--- span -->| - - -(2.) "^" and "-", - - <- other line averaged - XXXXX[X]XXX <- source pixel line - | | | - -------------------------- - [ ]xxxx[x]xx[ ] <- pair average - -------------------------- - | | | - |<--->|<--->|<---------- filter both sides - - -(3.) "v" and inverse of "-", - - XXXXXX XXXXXXXXX <- other line averaged - XXXXXXXXXXX[X]XXXXXXXXXXXX <- source pixel line - | | | - -------------------------- - XXXX[X]xxxx[x]xx[X]XXXXXXX <- pair average - -------------------------- - | | | - |<--->|<--->|<---------- don't filter both! - - -Note the "v" case for FXAA requires no filtering. -This is because the inverse of the "-" case is the "v". -Filtering "v" case turns open spans like this, - - XXXXXXXXX - -Into this (which is not desired), - - x+. .+x - XXXXXXXXX - -----------------------------------------------------------------------------*/ - if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0)) - lengthSign = 0.0; - -/*---------------------------------------------------------------------------- - COMPUTE SUB-PIXEL OFFSET AND FILTER SPAN ------------------------------------------------------------------------------- -FXAA filters using a bilinear texture fetch offset -from the middle pixel M towards the center of the pair (NM below). -Maximum filtering will be half way between pair. -Reminder, at this point in the code, -the {N,M} pair is also reused for all cases: {S,M}, {W,M}, and {E,M}. - - +-------+ - | | 0.5 offset - | N | | - | | V - +-------+....--- - | | - | M...|....--- - | | ^ - +-------+ | - . . 0.0 offset - . S . - . . - ......... - -Position on span is used to compute sub-pixel filter offset using simple ramp, - - posN posP - |\ |<------- 0.5 pixel offset into pair pixel - | \ | - | \ | - ---.......|...\..........|<------- 0.25 pixel offset into pair pixel - ^ | ^\ | - | | | \ | - V | | \ | - ---.......|===|==========|<------- 0.0 pixel offset (ie M pixel) - ^ . | ^ . - | . pos | . - | . . | . - | . . center . - | . . . - | |<->|<---------.-------- dstN - | . . . - | . |<-------->|<------- dstP - | . . - | |<------------>|<------- spanLength - | - subPixelOffset - -----------------------------------------------------------------------------*/ - float spanLength = (dstP + dstN); - dstN = directionN ? dstN : dstP; - float subPixelOffset = (0.5 + (dstN * (-1.0/spanLength))) * lengthSign; - #if FXAA_DEBUG_OFFSET - float ox = horzSpan ? 0.0 : subPixelOffset*2.0/rcpFrame.x; - float oy = horzSpan ? subPixelOffset*2.0/rcpFrame.y : 0.0; - if(ox < 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(1.0, 0.0, 0.0), -ox)); - if(ox > 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(0.0, 0.0, 1.0), ox)); - if(oy < 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(1.0, 0.6, 0.2), -oy)); - if(oy > 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(0.2, 0.6, 1.0), oy)); - return FxaaFilterReturn(FxaaFloat3(lumaO, lumaO, lumaO)); - #endif - float3 rgbF = FxaaTexLod0(tex, FxaaFloat2( - pos.x + (horzSpan ? 0.0 : subPixelOffset), - pos.y + (horzSpan ? subPixelOffset : 0.0))).xyz; - #if FXAA_SUBPIX == 0 - return FxaaFilterReturn(rgbF); - #else - return FxaaFilterReturn(FxaaLerp3(rgbL, rgbF, blendL)); - #endif -} - - - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; -}; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = v.texcoord.xy; - return o; -} - -sampler2D _MainTex; -float4 _MainTex_TexelSize; - -float4 frag (v2f i) : SV_Target -{ - return float4(FxaaPixelShader(i.uv.xy, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); -} - -ENDCG - } -} - -Fallback "Hidden/FXAA II" -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader.meta deleted file mode 100644 index a0d603d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset2.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 6f1418cffd12146f2a83be795f6fa5a7 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader deleted file mode 100644 index e93f454..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader +++ /dev/null @@ -1,830 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/FXAA Preset 3" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#include "UnityCG.cginc" -#pragma target 3.0 - -// Not very practical on consoles/mobile, and PS3 Cg takes ages to compile this :( -#pragma exclude_renderers xbox360 ps3 gles - -#define FXAA_HLSL_3 1 -#define FXAA_PRESET 3 - - -// Copyright (c) 2010 NVIDIA Corporation. All rights reserved. -// -// TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED -// *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS -// OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS -// BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES -// WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, -// BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) -// ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS -// BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -/*============================================================================ - - FXAA - -============================================================================*/ - -/*============================================================================ - API PORTING -============================================================================*/ -#ifndef FXAA_GLSL_120 - #define FXAA_GLSL_120 0 -#endif -#ifndef FXAA_GLSL_130 - #define FXAA_GLSL_130 0 -#endif -#ifndef FXAA_HLSL_3 - #define FXAA_HLSL_3 0 -#endif -#ifndef FXAA_HLSL_4 - #define FXAA_HLSL_4 0 -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_GLSL_120 - // Requires, - // #version 120 - // #extension GL_EXT_gpu_shader4 : enable - #define int2 ivec2 - #define float2 vec2 - #define float3 vec3 - #define float4 vec4 - #define FxaaBool3 bvec3 - #define FxaaInt2 ivec2 - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaBool2Float(a) mix(0.0, 1.0, (a)) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) mix((f), (t), (b)) - #define FxaaTex sampler2D -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_GLSL_130 - // Requires "#version 130" or better - #define int2 ivec2 - #define float2 vec2 - #define float3 vec3 - #define float4 vec4 - #define FxaaBool3 bvec3 - #define FxaaInt2 ivec2 - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaBool2Float(a) mix(0.0, 1.0, (a)) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) mix((f), (t), (b)) - #define FxaaTex sampler2D -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_HLSL_3 - #define int2 float2 - #define FxaaInt2 float2 - #define FxaaFloat2 float2 - #define FxaaFloat3 float3 - #define FxaaFloat4 float4 - #define FxaaBool2Float(a) (a) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) ((f)*(!b) + (t)*(b)) - #define FxaaTex sampler2D -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_HLSL_4 - #define FxaaInt2 int2 - #define FxaaFloat2 float2 - #define FxaaFloat3 float3 - #define FxaaFloat4 float4 - #define FxaaBool2Float(a) (a) - #define FxaaPow3(x, y) pow(x, y) - #define FxaaSel3(f, t, b) ((f)*(!b) + (t)*(b)) - struct FxaaTex { SamplerState smpl; Texture2D tex; }; -#endif -/*--------------------------------------------------------------------------*/ -#define FxaaToFloat3(a) FxaaFloat3((a), (a), (a)) -/*--------------------------------------------------------------------------*/ -half4 _MainTex_ST; - -float4 FxaaTexLod0(FxaaTex tex, float2 pos) { - #if FXAA_GLSL_120 - return texture2DLod(tex, pos.xy, 0.0); - #endif - #if FXAA_GLSL_130 - return textureLod(tex, pos.xy, 0.0); - #endif - #if FXAA_HLSL_3 - return tex2Dlod(tex, float4(UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), 0.0, 0.0)); - #endif - #if FXAA_HLSL_4 - return tex.tex.SampleLevel(tex.smpl, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), 0.0); - #endif -} -/*--------------------------------------------------------------------------*/ -float4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) { - #if FXAA_GLSL_120 - return texture2DGrad(tex, pos.xy, grad, grad); - #endif - #if FXAA_GLSL_130 - return textureGrad(tex, pos.xy, grad, grad); - #endif - #if FXAA_HLSL_3 - return tex2Dgrad(tex, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), grad, grad); - #endif - #if FXAA_HLSL_4 - return tex.tex.SampleGrad(tex.smpl, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), grad, grad); - #endif -} -/*--------------------------------------------------------------------------*/ -float4 FxaaTexOff(FxaaTex tex, float2 pos, int2 off, float2 rcpFrame) { - #if FXAA_GLSL_120 - return texture2DLodOffset(tex, pos.xy, 0.0, off.xy); - #endif - #if FXAA_GLSL_130 - return textureLodOffset(tex, pos.xy, 0.0, off.xy); - #endif - #if FXAA_HLSL_3 - return tex2Dlod(tex, float4(UnityStereoScreenSpaceUVAdjust(pos.xy + (off * rcpFrame), _MainTex_ST), 0, 0)); - #endif - #if FXAA_HLSL_4 - return tex.tex.SampleLevel(tex.smpl, UnityStereoScreenSpaceUVAdjust(pos.xy, _MainTex_ST), 0.0, off.xy); - #endif -} - -/*============================================================================ - SRGB KNOBS ------------------------------------------------------------------------------- -FXAA_SRGB_ROP - Set to 1 when applying FXAA to an sRGB back buffer (DX10/11). - This will do the sRGB to linear transform, - as ROP will expect linear color from this shader, - and this shader works in non-linear color. -============================================================================*/ -#define FXAA_SRGB_ROP 0 - -/*============================================================================ - DEBUG KNOBS ------------------------------------------------------------------------------- -All debug knobs draw FXAA-untouched pixels in FXAA computed luma (monochrome). - -FXAA_DEBUG_PASSTHROUGH - Red for pixels which are filtered by FXAA with a - yellow tint on sub-pixel aliasing filtered by FXAA. -FXAA_DEBUG_HORZVERT - Blue for horizontal edges, gold for vertical edges. -FXAA_DEBUG_PAIR - Blue/green for the 2 pixel pair choice. -FXAA_DEBUG_NEGPOS - Red/blue for which side of center of span. -FXAA_DEBUG_OFFSET - Red/blue for -/+ x, gold/skyblue for -/+ y. -============================================================================*/ -#ifndef FXAA_DEBUG_PASSTHROUGH - #define FXAA_DEBUG_PASSTHROUGH 0 -#endif -#ifndef FXAA_DEBUG_HORZVERT - #define FXAA_DEBUG_HORZVERT 0 -#endif -#ifndef FXAA_DEBUG_PAIR - #define FXAA_DEBUG_PAIR 0 -#endif -#ifndef FXAA_DEBUG_NEGPOS - #define FXAA_DEBUG_NEGPOS 0 -#endif -#ifndef FXAA_DEBUG_OFFSET - #define FXAA_DEBUG_OFFSET 0 -#endif -/*--------------------------------------------------------------------------*/ -#if FXAA_DEBUG_PASSTHROUGH || FXAA_DEBUG_HORZVERT || FXAA_DEBUG_PAIR - #define FXAA_DEBUG 1 -#endif -#if FXAA_DEBUG_NEGPOS || FXAA_DEBUG_OFFSET - #define FXAA_DEBUG 1 -#endif -#ifndef FXAA_DEBUG - #define FXAA_DEBUG 0 -#endif - -/*============================================================================ - COMPILE-IN KNOBS ------------------------------------------------------------------------------- -FXAA_PRESET - Choose compile-in knob preset 0-5. ------------------------------------------------------------------------------- -FXAA_EDGE_THRESHOLD - The minimum amount of local contrast required - to apply algorithm. - 1.0/3.0 - too little - 1.0/4.0 - good start - 1.0/8.0 - applies to more edges - 1.0/16.0 - overkill ------------------------------------------------------------------------------- -FXAA_EDGE_THRESHOLD_MIN - Trims the algorithm from processing darks. - Perf optimization. - 1.0/32.0 - visible limit (smaller isn't visible) - 1.0/16.0 - good compromise - 1.0/12.0 - upper limit (seeing artifacts) ------------------------------------------------------------------------------- -FXAA_SEARCH_STEPS - Maximum number of search steps for end of span. ------------------------------------------------------------------------------- -FXAA_SEARCH_ACCELERATION - How much to accelerate search, - 1 - no acceleration - 2 - skip by 2 pixels - 3 - skip by 3 pixels - 4 - skip by 4 pixels ------------------------------------------------------------------------------- -FXAA_SEARCH_THRESHOLD - Controls when to stop searching. - 1.0/4.0 - seems to be the best quality wise ------------------------------------------------------------------------------- -FXAA_SUBPIX_FASTER - Turn on lower quality but faster subpix path. - Not recomended, but used in preset 0. ------------------------------------------------------------------------------- -FXAA_SUBPIX - Toggle subpix filtering. - 0 - turn off - 1 - turn on - 2 - turn on full (ignores FXAA_SUBPIX_TRIM and CAP) ------------------------------------------------------------------------------- -FXAA_SUBPIX_TRIM - Controls sub-pixel aliasing removal. - 1.0/2.0 - low removal - 1.0/3.0 - medium removal - 1.0/4.0 - default removal - 1.0/8.0 - high removal - 0.0 - complete removal ------------------------------------------------------------------------------- -FXAA_SUBPIX_CAP - Insures fine detail is not completely removed. - This is important for the transition of sub-pixel detail, - like fences and wires. - 3.0/4.0 - default (medium amount of filtering) - 7.0/8.0 - high amount of filtering - 1.0 - no capping of sub-pixel aliasing removal -============================================================================*/ -#ifndef FXAA_PRESET - #define FXAA_PRESET 3 -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 0) - #define FXAA_EDGE_THRESHOLD (1.0/4.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/12.0) - #define FXAA_SEARCH_STEPS 2 - #define FXAA_SEARCH_ACCELERATION 4 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 1 - #define FXAA_SUBPIX_CAP (2.0/3.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 1) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/16.0) - #define FXAA_SEARCH_STEPS 4 - #define FXAA_SEARCH_ACCELERATION 3 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 2) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 8 - #define FXAA_SEARCH_ACCELERATION 2 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 3) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 16 - #define FXAA_SEARCH_ACCELERATION 1 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 4) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 24 - #define FXAA_SEARCH_ACCELERATION 1 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#if (FXAA_PRESET == 5) - #define FXAA_EDGE_THRESHOLD (1.0/8.0) - #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) - #define FXAA_SEARCH_STEPS 32 - #define FXAA_SEARCH_ACCELERATION 1 - #define FXAA_SEARCH_THRESHOLD (1.0/4.0) - #define FXAA_SUBPIX 1 - #define FXAA_SUBPIX_FASTER 0 - #define FXAA_SUBPIX_CAP (3.0/4.0) - #define FXAA_SUBPIX_TRIM (1.0/4.0) -#endif -/*--------------------------------------------------------------------------*/ -#define FXAA_SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_SUBPIX_TRIM)) - -/*============================================================================ - HELPERS -============================================================================*/ -// Return the luma, the estimation of luminance from rgb inputs. -// This approximates luma using one FMA instruction, -// skipping normalization and tossing out blue. -// FxaaLuma() will range 0.0 to 2.963210702. -float FxaaLuma(float3 rgb) { - return rgb.y * (0.587/0.299) + rgb.x; } -/*--------------------------------------------------------------------------*/ -float3 FxaaLerp3(float3 a, float3 b, float amountOfA) { - return (FxaaToFloat3(-amountOfA) * b) + - ((a * FxaaToFloat3(amountOfA)) + b); } -/*--------------------------------------------------------------------------*/ -// Support any extra filtering before returning color. -float3 FxaaFilterReturn(float3 rgb) { - #if FXAA_SRGB_ROP - // Do sRGB encoded value to linear conversion. - return FxaaSel3( - rgb * FxaaToFloat3(1.0/12.92), - FxaaPow3( - rgb * FxaaToFloat3(1.0/1.055) + FxaaToFloat3(0.055/1.055), - FxaaToFloat3(2.4)), - rgb > FxaaToFloat3(0.04045)); - #else - return rgb; - #endif -} - -/*============================================================================ - VERTEX SHADER -============================================================================*/ -float2 FxaaVertexShader( -// Both x and y range {-1.0 to 1.0 across screen}. -float2 inPos) { - float2 pos; - pos.xy = (inPos.xy * FxaaFloat2(0.5, 0.5)) + FxaaFloat2(0.5, 0.5); - return pos; } - -/*============================================================================ - - PIXEL SHADER - -============================================================================*/ -float3 FxaaPixelShader( -// Output of FxaaVertexShader interpolated across screen. -// xy -> actual texture position {0.0 to 1.0} -float2 pos, -// Input texture. -FxaaTex tex, -// RCPFRAME SHOULD PIXEL SHADER CONSTANTS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// {1.0/frameWidth, 1.0/frameHeight} -float2 rcpFrame) { - -/*---------------------------------------------------------------------------- - EARLY EXIT IF LOCAL CONTRAST BELOW EDGE DETECT LIMIT ------------------------------------------------------------------------------- -Majority of pixels of a typical image do not require filtering, -often pixels are grouped into blocks which could benefit from early exit -right at the beginning of the algorithm. -Given the following neighborhood, - - N - W M E - S - -If the difference in local maximum and minimum luma (contrast "range") -is lower than a threshold proportional to the maximum local luma ("rangeMax"), -then the shader early exits (no visible aliasing). -This threshold is clamped at a minimum value ("FXAA_EDGE_THRESHOLD_MIN") -to avoid processing in really dark areas. -----------------------------------------------------------------------------*/ - float3 rgbN = FxaaTexOff(tex, pos.xy, FxaaInt2( 0,-1), rcpFrame).xyz; - float3 rgbW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 0), rcpFrame).xyz; - float3 rgbM = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 0), rcpFrame).xyz; - float3 rgbE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 0), rcpFrame).xyz; - float3 rgbS = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 1), rcpFrame).xyz; - float lumaN = FxaaLuma(rgbN); - float lumaW = FxaaLuma(rgbW); - float lumaM = FxaaLuma(rgbM); - float lumaE = FxaaLuma(rgbE); - float lumaS = FxaaLuma(rgbS); - float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE))); - float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE))); - float range = rangeMax - rangeMin; - #if FXAA_DEBUG - float lumaO = lumaM / (1.0 + (0.587/0.299)); - #endif - if(range < max(FXAA_EDGE_THRESHOLD_MIN, rangeMax * FXAA_EDGE_THRESHOLD)) { - #if FXAA_DEBUG - return FxaaFilterReturn(FxaaToFloat3(lumaO)); - #endif - return FxaaFilterReturn(rgbM); } - #if FXAA_SUBPIX > 0 - #if FXAA_SUBPIX_FASTER - float3 rgbL = (rgbN + rgbW + rgbE + rgbS + rgbM) * - FxaaToFloat3(1.0/5.0); - #else - float3 rgbL = rgbN + rgbW + rgbM + rgbE + rgbS; - #endif - #endif - -/*---------------------------------------------------------------------------- - COMPUTE LOWPASS ------------------------------------------------------------------------------- -FXAA computes a local neighborhood lowpass value as follows, - - (N + W + E + S)/4 - -Then uses the ratio of the contrast range of the lowpass -and the range found in the early exit check, -as a sub-pixel aliasing detection filter. -When FXAA detects sub-pixel aliasing (such as single pixel dots), -it later blends in "blendL" amount -of a lowpass value (computed in the next section) to the final result. -----------------------------------------------------------------------------*/ - #if FXAA_SUBPIX != 0 - float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25; - float rangeL = abs(lumaL - lumaM); - #endif - #if FXAA_SUBPIX == 1 - float blendL = max(0.0, - (rangeL / range) - FXAA_SUBPIX_TRIM) * FXAA_SUBPIX_TRIM_SCALE; - blendL = min(FXAA_SUBPIX_CAP, blendL); - #endif - #if FXAA_SUBPIX == 2 - float blendL = rangeL / range; - #endif - #if FXAA_DEBUG_PASSTHROUGH - #if FXAA_SUBPIX == 0 - float blendL = 0.0; - #endif - return FxaaFilterReturn( - FxaaFloat3(1.0, blendL/FXAA_SUBPIX_CAP, 0.0)); - #endif - -/*---------------------------------------------------------------------------- - CHOOSE VERTICAL OR HORIZONTAL SEARCH ------------------------------------------------------------------------------- -FXAA uses the following local neighborhood, - - NW N NE - W M E - SW S SE - -To compute an edge amount for both vertical and horizontal directions. -Note edge detect filters like Sobel fail on single pixel lines through M. -FXAA takes the weighted average magnitude of the high-pass values -for rows and columns as an indication of local edge amount. - -A lowpass value for anti-sub-pixel-aliasing is computed as - (N+W+E+S+M+NW+NE+SW+SE)/9. -This full box pattern has higher quality than other options. - -Note following this block, both vertical and horizontal cases -flow in parallel (reusing the horizontal variables). -----------------------------------------------------------------------------*/ - float3 rgbNW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1,-1), rcpFrame).xyz; - float3 rgbNE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1,-1), rcpFrame).xyz; - float3 rgbSW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 1), rcpFrame).xyz; - float3 rgbSE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 1), rcpFrame).xyz; - #if (FXAA_SUBPIX_FASTER == 0) && (FXAA_SUBPIX > 0) - rgbL += (rgbNW + rgbNE + rgbSW + rgbSE); - rgbL *= FxaaToFloat3(1.0/9.0); - #endif - float lumaNW = FxaaLuma(rgbNW); - float lumaNE = FxaaLuma(rgbNE); - float lumaSW = FxaaLuma(rgbSW); - float lumaSE = FxaaLuma(rgbSE); - float edgeVert = - abs((0.25 * lumaNW) + (-0.5 * lumaN) + (0.25 * lumaNE)) + - abs((0.50 * lumaW ) + (-1.0 * lumaM) + (0.50 * lumaE )) + - abs((0.25 * lumaSW) + (-0.5 * lumaS) + (0.25 * lumaSE)); - float edgeHorz = - abs((0.25 * lumaNW) + (-0.5 * lumaW) + (0.25 * lumaSW)) + - abs((0.50 * lumaN ) + (-1.0 * lumaM) + (0.50 * lumaS )) + - abs((0.25 * lumaNE) + (-0.5 * lumaE) + (0.25 * lumaSE)); - bool horzSpan = edgeHorz >= edgeVert; - #if FXAA_DEBUG_HORZVERT - if(horzSpan) return FxaaFilterReturn(FxaaFloat3(1.0, 0.75, 0.0)); - else return FxaaFilterReturn(FxaaFloat3(0.0, 0.50, 1.0)); - #endif - float lengthSign = horzSpan ? -rcpFrame.y : -rcpFrame.x; - if(!horzSpan) lumaN = lumaW; - if(!horzSpan) lumaS = lumaE; - float gradientN = abs(lumaN - lumaM); - float gradientS = abs(lumaS - lumaM); - lumaN = (lumaN + lumaM) * 0.5; - lumaS = (lumaS + lumaM) * 0.5; - -/*---------------------------------------------------------------------------- - CHOOSE SIDE OF PIXEL WHERE GRADIENT IS HIGHEST ------------------------------------------------------------------------------- -This chooses a pixel pair. -For "horzSpan == true" this will be a vertical pair, - - [N] N - [M] or [M] - S [S] - -Note following this block, both {N,M} and {S,M} cases -flow in parallel (reusing the {N,M} variables). - -This pair of image rows or columns is searched below -in the positive and negative direction -until edge status changes -(or the maximum number of search steps is reached). -----------------------------------------------------------------------------*/ - bool pairN = gradientN >= gradientS; - #if FXAA_DEBUG_PAIR - if(pairN) return FxaaFilterReturn(FxaaFloat3(0.0, 0.0, 1.0)); - else return FxaaFilterReturn(FxaaFloat3(0.0, 1.0, 0.0)); - #endif - if(!pairN) lumaN = lumaS; - if(!pairN) gradientN = gradientS; - if(!pairN) lengthSign *= -1.0; - float2 posN; - posN.x = pos.x + (horzSpan ? 0.0 : lengthSign * 0.5); - posN.y = pos.y + (horzSpan ? lengthSign * 0.5 : 0.0); - -/*---------------------------------------------------------------------------- - CHOOSE SEARCH LIMITING VALUES ------------------------------------------------------------------------------- -Search limit (+/- gradientN) is a function of local gradient. -----------------------------------------------------------------------------*/ - gradientN *= FXAA_SEARCH_THRESHOLD; - -/*---------------------------------------------------------------------------- - SEARCH IN BOTH DIRECTIONS UNTIL FIND LUMA PAIR AVERAGE IS OUT OF RANGE ------------------------------------------------------------------------------- -This loop searches either in vertical or horizontal directions, -and in both the negative and positive direction in parallel. -This loop fusion is faster than searching separately. - -The search is accelerated using FXAA_SEARCH_ACCELERATION length box filter -via anisotropic filtering with specified texture gradients. -----------------------------------------------------------------------------*/ - float2 posP = posN; - float2 offNP = horzSpan ? - FxaaFloat2(rcpFrame.x, 0.0) : - FxaaFloat2(0.0f, rcpFrame.y); - float lumaEndN = lumaN; - float lumaEndP = lumaN; - bool doneN = false; - bool doneP = false; - #if FXAA_SEARCH_ACCELERATION == 1 - posN += offNP * FxaaFloat2(-1.0, -1.0); - posP += offNP * FxaaFloat2( 1.0, 1.0); - #endif - #if FXAA_SEARCH_ACCELERATION == 2 - posN += offNP * FxaaFloat2(-1.5, -1.5); - posP += offNP * FxaaFloat2( 1.5, 1.5); - offNP *= FxaaFloat2(2.0, 2.0); - #endif - #if FXAA_SEARCH_ACCELERATION == 3 - posN += offNP * FxaaFloat2(-2.0, -2.0); - posP += offNP * FxaaFloat2( 2.0, 2.0); - offNP *= FxaaFloat2(3.0, 3.0); - #endif - #if FXAA_SEARCH_ACCELERATION == 4 - posN += offNP * FxaaFloat2(-2.5, -2.5); - posP += offNP * FxaaFloat2( 2.5, 2.5); - offNP *= FxaaFloat2(4.0, 4.0); - #endif - for(int i = 0; i < FXAA_SEARCH_STEPS; i++) { - #if FXAA_SEARCH_ACCELERATION == 1 - if(!doneN) lumaEndN = - FxaaLuma(FxaaTexLod0(tex, posN.xy).xyz); - if(!doneP) lumaEndP = - FxaaLuma(FxaaTexLod0(tex, posP.xy).xyz); - #else - if(!doneN) lumaEndN = - FxaaLuma(FxaaTexGrad(tex, posN.xy, offNP).xyz); - if(!doneP) lumaEndP = - FxaaLuma(FxaaTexGrad(tex, posP.xy, offNP).xyz); - #endif - doneN = doneN || (abs(lumaEndN - lumaN) >= gradientN); - doneP = doneP || (abs(lumaEndP - lumaN) >= gradientN); - if(doneN && doneP) break; - if(!doneN) posN -= offNP; - if(!doneP) posP += offNP; } - -/*---------------------------------------------------------------------------- - HANDLE IF CENTER IS ON POSITIVE OR NEGATIVE SIDE ------------------------------------------------------------------------------- -FXAA uses the pixel's position in the span -in combination with the values (lumaEnd*) at the ends of the span, -to determine filtering. - -This step computes which side of the span the pixel is on. -On negative side if dstN < dstP, - - posN pos posP - |-----------|------|------------------| - | | | | - |<--dstN--->|<---------dstP---------->| - | - span center - -----------------------------------------------------------------------------*/ - float dstN = horzSpan ? pos.x - posN.x : pos.y - posN.y; - float dstP = horzSpan ? posP.x - pos.x : posP.y - pos.y; - bool directionN = dstN < dstP; - #if FXAA_DEBUG_NEGPOS - if(directionN) return FxaaFilterReturn(FxaaFloat3(1.0, 0.0, 0.0)); - else return FxaaFilterReturn(FxaaFloat3(0.0, 0.0, 1.0)); - #endif - lumaEndN = directionN ? lumaEndN : lumaEndP; - -/*---------------------------------------------------------------------------- - CHECK IF PIXEL IS IN SECTION OF SPAN WHICH GETS NO FILTERING ------------------------------------------------------------------------------- -If both the pair luma at the end of the span (lumaEndN) -and middle pixel luma (lumaM) -are on the same side of the middle pair average luma (lumaN), -then don't filter. - -Cases, - -(1.) "L", - - lumaM - | - V XXXXXXXX <- other line averaged - XXXXXXX[X]XXXXXXXXXXX <- source pixel line - | . | - -------------------------- - [ ]xxxxxx[x]xx[X]XXXXXX <- pair average - -------------------------- - ^ ^ ^ ^ - | | | | - . |<---->|<---------- no filter region - . | | | - . center | | - . | lumaEndN - . | . - . lumaN . - . . - |<--- span -->| - - -(2.) "^" and "-", - - <- other line averaged - XXXXX[X]XXX <- source pixel line - | | | - -------------------------- - [ ]xxxx[x]xx[ ] <- pair average - -------------------------- - | | | - |<--->|<--->|<---------- filter both sides - - -(3.) "v" and inverse of "-", - - XXXXXX XXXXXXXXX <- other line averaged - XXXXXXXXXXX[X]XXXXXXXXXXXX <- source pixel line - | | | - -------------------------- - XXXX[X]xxxx[x]xx[X]XXXXXXX <- pair average - -------------------------- - | | | - |<--->|<--->|<---------- don't filter both! - - -Note the "v" case for FXAA requires no filtering. -This is because the inverse of the "-" case is the "v". -Filtering "v" case turns open spans like this, - - XXXXXXXXX - -Into this (which is not desired), - - x+. .+x - XXXXXXXXX - -----------------------------------------------------------------------------*/ - if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0)) - lengthSign = 0.0; - -/*---------------------------------------------------------------------------- - COMPUTE SUB-PIXEL OFFSET AND FILTER SPAN ------------------------------------------------------------------------------- -FXAA filters using a bilinear texture fetch offset -from the middle pixel M towards the center of the pair (NM below). -Maximum filtering will be half way between pair. -Reminder, at this point in the code, -the {N,M} pair is also reused for all cases: {S,M}, {W,M}, and {E,M}. - - +-------+ - | | 0.5 offset - | N | | - | | V - +-------+....--- - | | - | M...|....--- - | | ^ - +-------+ | - . . 0.0 offset - . S . - . . - ......... - -Position on span is used to compute sub-pixel filter offset using simple ramp, - - posN posP - |\ |<------- 0.5 pixel offset into pair pixel - | \ | - | \ | - ---.......|...\..........|<------- 0.25 pixel offset into pair pixel - ^ | ^\ | - | | | \ | - V | | \ | - ---.......|===|==========|<------- 0.0 pixel offset (ie M pixel) - ^ . | ^ . - | . pos | . - | . . | . - | . . center . - | . . . - | |<->|<---------.-------- dstN - | . . . - | . |<-------->|<------- dstP - | . . - | |<------------>|<------- spanLength - | - subPixelOffset - -----------------------------------------------------------------------------*/ - float spanLength = (dstP + dstN); - dstN = directionN ? dstN : dstP; - float subPixelOffset = (0.5 + (dstN * (-1.0/spanLength))) * lengthSign; - #if FXAA_DEBUG_OFFSET - float ox = horzSpan ? 0.0 : subPixelOffset*2.0/rcpFrame.x; - float oy = horzSpan ? subPixelOffset*2.0/rcpFrame.y : 0.0; - if(ox < 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(1.0, 0.0, 0.0), -ox)); - if(ox > 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(0.0, 0.0, 1.0), ox)); - if(oy < 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(1.0, 0.6, 0.2), -oy)); - if(oy > 0.0) return FxaaFilterReturn( - FxaaLerp3(FxaaToFloat3(lumaO), - FxaaFloat3(0.2, 0.6, 1.0), oy)); - return FxaaFilterReturn(FxaaFloat3(lumaO, lumaO, lumaO)); - #endif - float3 rgbF = FxaaTexLod0(tex, FxaaFloat2( - pos.x + (horzSpan ? 0.0 : subPixelOffset), - pos.y + (horzSpan ? subPixelOffset : 0.0))).xyz; - #if FXAA_SUBPIX == 0 - return FxaaFilterReturn(rgbF); - #else - return FxaaFilterReturn(FxaaLerp3(rgbL, rgbF, blendL)); - #endif -} - - - -struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; -}; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = v.texcoord.xy; - return o; -} - -sampler2D _MainTex; -float4 _MainTex_TexelSize; - -float4 frag (v2f i) : SV_Target -{ - return float4(FxaaPixelShader(i.uv.xy, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); -} - -ENDCG - } -} - -Fallback "Hidden/FXAA II" -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader.meta deleted file mode 100644 index 053bdbf..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/FXAAPreset3.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: c182fa94a5a0a4c02870641efcd38cd5 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader deleted file mode 100644 index 567b33a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader +++ /dev/null @@ -1,151 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -Shader "Hidden/NFAA" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _BlurTex ("Base (RGB)", 2D) = "white" {} - -} - -CGINCLUDE - -#include "UnityCG.cginc" - -uniform sampler2D _MainTex; -uniform float4 _MainTex_TexelSize; -half4 _MainTex_ST; -uniform float _OffsetScale; -uniform float _BlurRadius; - -struct v2f { - float4 pos : SV_POSITION; - float2 uv[8] : TEXCOORD0; -}; - - v2f vert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - - float2 uv = v.texcoord.xy; - - float2 up = float2(0.0, _MainTex_TexelSize.y) * _OffsetScale; - float2 right = float2(_MainTex_TexelSize.x, 0.0) * _OffsetScale; - - o.uv[0].xy = uv + up; - o.uv[1].xy = uv - up; - o.uv[2].xy = uv + right; - o.uv[3].xy = uv - right; - o.uv[4].xy = uv - right + up; - o.uv[5].xy = uv - right -up; - o.uv[6].xy = uv + right + up; - o.uv[7].xy = uv + right -up; - - return o; - } - - half4 frag (v2f i) : SV_Target - { - // get luminance values - // maybe: experiment with different luminance calculations - float topL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0], _MainTex_ST)).rgb ); - float bottomL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1], _MainTex_ST)).rgb ); - float rightL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[2], _MainTex_ST)).rgb ); - float leftL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[3], _MainTex_ST)).rgb ); - float leftTopL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4], _MainTex_ST)).rgb ); - float leftBottomL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[5], _MainTex_ST)).rgb ); - float rightBottomL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[6], _MainTex_ST)).rgb ); - float rightTopL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[7], _MainTex_ST)).rgb ); - - // 2 triangle subtractions - float sum0 = dot(float3(1,1,1), float3(rightTopL,bottomL,leftTopL)); - float sum1 = dot(float3(1,1,1), float3(leftBottomL,topL,rightBottomL)); - float sum2 = dot(float3(1,1,1), float3(leftTopL,rightL,leftBottomL)); - float sum3 = dot(float3(1,1,1), float3(rightBottomL,leftL,rightTopL)); - - // figure out "normal" - float2 blurDir = half2((sum0-sum1), (sum3-sum2)); - blurDir *= _MainTex_TexelSize.xy * _BlurRadius; - - // reconstruct normal uv - float2 uv_ = (i.uv[0] + i.uv[1]) * 0.5; - - float4 returnColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_, _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_+ blurDir.xy, _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_ - blurDir.xy, _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_ + float2(blurDir.x, -blurDir.y), _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_ - float2(blurDir.x, -blurDir.y), _MainTex_ST)); - - return returnColor * 0.2; - } - - half4 fragDebug (v2f i) : SV_Target - { - // get luminance values - // maybe: experiment with different luminance calculations - float topL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0], _MainTex_ST)).rgb ); - float bottomL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1], _MainTex_ST)).rgb ); - float rightL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[2], _MainTex_ST)).rgb ); - float leftL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[3], _MainTex_ST)).rgb ); - float leftTopL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4], _MainTex_ST)).rgb ); - float leftBottomL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[5], _MainTex_ST)).rgb ); - float rightBottomL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[6], _MainTex_ST)).rgb ); - float rightTopL = Luminance( tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[7], _MainTex_ST)).rgb ); - - // 2 triangle subtractions - float sum0 = dot(float3(1,1,1), float3(rightTopL,bottomL,leftTopL)); - float sum1 = dot(float3(1,1,1), float3(leftBottomL,topL,rightBottomL)); - float sum2 = dot(float3(1,1,1), float3(leftTopL,rightL,leftBottomL)); - float sum3 = dot(float3(1,1,1), float3(rightBottomL,leftL,rightTopL)); - - // figure out "normal" - float2 blurDir = half2((sum0-sum1), (sum3-sum2)); - blurDir *= _MainTex_TexelSize.xy * _BlurRadius; - - // reconstruct normal uv - float2 uv_ = (i.uv[0] + i.uv[1]) * 0.5; - - float4 returnColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_, _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_+ blurDir.xy, _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_ - blurDir.xy, _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_ + float2(blurDir.x, -blurDir.y), _MainTex_ST)); - returnColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(uv_ - float2(blurDir.x, -blurDir.y), _MainTex_ST)); - - blurDir = half2((sum0-sum1), (sum3-sum2)) * _BlurRadius; - return half4(normalize( half3(blurDir,1) * 0.5 + 0.5), 1); - return returnColor * 0.2; - } - -ENDCG - -SubShader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - #pragma target 3.0 - #pragma exclude_renderers d3d11_9x - - ENDCG - } - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragDebug - #pragma target 3.0 - #pragma exclude_renderers d3d11_9x - - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader.meta deleted file mode 100644 index af7b4b6..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/NFAA.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: ce0cb2621f6d84e21a87414e471a3cce -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader deleted file mode 100644 index d4029d2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader +++ /dev/null @@ -1,88 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -Shader "Hidden/SSAA" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} -} - -// very simple & fast AA by Emmanuel Julien - -SubShader { - Pass { - - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - - #include "UnityCG.cginc" - - uniform sampler2D _MainTex; - uniform float4 _MainTex_TexelSize; - half4 _MainTex_ST; - - struct v2f { - float4 pos : SV_POSITION; - float2 uv[5] : TEXCOORD0; - }; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - - float2 uv = v.texcoord.xy; - - float w = 1.75; - - float2 up = float2(0.0, _MainTex_TexelSize.y) * w; - float2 right = float2(_MainTex_TexelSize.x, 0.0) * w; - - o.uv[0].xy = uv - up; - o.uv[1].xy = uv - right; - o.uv[2].xy = uv + right; - o.uv[3].xy = uv + up; - - o.uv[4].xy = uv; - - return o; - } - - half4 frag (v2f i) : SV_Target - { - half4 outColor; - - float t = Luminance( tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0], _MainTex_ST)).xyz ); - float l = Luminance( tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1], _MainTex_ST)).xyz); - float r = Luminance( tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[2], _MainTex_ST)).xyz); - float b = Luminance( tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[3], _MainTex_ST)).xyz); - - half2 n = half2( -( t - b ), r - l ); - float nl = length( n ); - - if ( nl < (1.0 / 16.0) ) - outColor = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4], _MainTex_ST) ); - else { - n *= _MainTex_TexelSize.xy / nl; - - half4 o = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4], _MainTex_ST)); - half4 t0 = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4] + n * 0.5, _MainTex_ST)) * 0.9; - half4 t1 = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4] - n * 0.5, _MainTex_ST)) * 0.9; - half4 t2 = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4] + n, _MainTex_ST)) * 0.75; - half4 t3 = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4] - n, _MainTex_ST)) * 0.75; - - outColor = (o + t0 + t1 + t2 + t3) / 4.3; - } - - return outColor; - } - - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader.meta deleted file mode 100644 index e972317..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_Antialiasing/SSAA.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: b3728d1488b02490cbd196c7941bf1f8 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares.meta deleted file mode 100644 index 3bdce38..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d6ef58fc6f637406bbe6814a19c377f8 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader deleted file mode 100644 index 3505652..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader +++ /dev/null @@ -1,118 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/Blend" { - Properties { - _MainTex ("Screen Blended", 2D) = "" {} - _ColorBuffer ("Color", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv[2] : TEXCOORD0; - }; - struct v2f_mt { - float4 pos : SV_POSITION; - float2 uv[4] : TEXCOORD0; - }; - - sampler2D _ColorBuffer; - sampler2D _MainTex; - - half _Intensity; - half4 _ColorBuffer_TexelSize; - half4 _ColorBuffer_ST; - half4 _MainTex_TexelSize; - half4 _MainTex_ST; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv[0] = v.texcoord.xy; - o.uv[1] = v.texcoord.xy; - - #if UNITY_UV_STARTS_AT_TOP - if (_ColorBuffer_TexelSize.y < 0) - o.uv[1].y = 1-o.uv[1].y; - #endif - - return o; - } - - v2f_mt vertMultiTap( appdata_img v ) { - v2f_mt o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv[0] = v.texcoord.xy + _MainTex_TexelSize.xy * 0.5; - o.uv[1] = v.texcoord.xy - _MainTex_TexelSize.xy * 0.5; - o.uv[2] = v.texcoord.xy - _MainTex_TexelSize.xy * half2(1,-1) * 0.5; - o.uv[3] = v.texcoord.xy + _MainTex_TexelSize.xy * half2(1,-1) * 0.5; - return o; - } - - half4 fragScreen (v2f i) : SV_Target { - half4 toBlend = saturate (tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0], _MainTex_ST)) * _Intensity); - return 1-(1-toBlend)*(1-tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[1], _ColorBuffer_ST))); - } - - half4 fragAdd (v2f i) : SV_Target { - return tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)) * _Intensity + tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[1], _ColorBuffer_ST)); - } - - half4 fragVignetteBlend (v2f i) : SV_Target { - return tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)) * tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[0], _ColorBuffer_ST)); - } - - half4 fragMultiTap (v2f_mt i) : SV_Target { - half4 outColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)); - outColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1].xy, _MainTex_ST)); - outColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[2].xy, _MainTex_ST)); - outColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[3].xy, _MainTex_ST)); - return outColor * 0.25; - } - - ENDCG - -Subshader { - ZTest Always Cull Off ZWrite Off - - // 0: nicer & softer "screen" blend mode - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragScreen - ENDCG - } - - // 1: simple "add" blend mode - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAdd - ENDCG - } - // 2: used for "stable" downsampling - Pass { - - CGPROGRAM - #pragma vertex vertMultiTap - #pragma fragment fragMultiTap - ENDCG - } - // 3: vignette blending - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragVignetteBlend - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader.meta deleted file mode 100644 index e9a742b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/Blend.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 53b3960ee3d3d4a5caa8d5473d120187 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader deleted file mode 100644 index a1b020c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader +++ /dev/null @@ -1,224 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/BlendForBloom" { - Properties { - _MainTex ("Screen Blended", 2D) = "" {} - _ColorBuffer ("Color", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv[2] : TEXCOORD0; - }; - struct v2f_mt { - float4 pos : SV_POSITION; - float2 uv[5] : TEXCOORD0; - }; - - sampler2D _ColorBuffer; - sampler2D _MainTex; - - half _Intensity; - half4 _ColorBuffer_TexelSize; - half4 _ColorBuffer_ST; - half4 _MainTex_TexelSize; - half4 _MainTex_ST; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv[0] = v.texcoord.xy; - o.uv[1] = v.texcoord.xy; - - #if UNITY_UV_STARTS_AT_TOP - if (_ColorBuffer_TexelSize.y < 0) - o.uv[1].y = 1-o.uv[1].y; - #endif - - return o; - } - - v2f_mt vertMultiTap( appdata_img v ) { - v2f_mt o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv[4] = v.texcoord.xy; - o.uv[0] = v.texcoord.xy + _MainTex_TexelSize.xy * 0.5; - o.uv[1] = v.texcoord.xy - _MainTex_TexelSize.xy * 0.5; - o.uv[2] = v.texcoord.xy - _MainTex_TexelSize.xy * half2(1,-1) * 0.5; - o.uv[3] = v.texcoord.xy + _MainTex_TexelSize.xy * half2(1,-1) * 0.5; - return o; - } - - half4 fragScreen (v2f i) : SV_Target { - half4 addedbloom = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)) * _Intensity; - half4 screencolor = tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[1], _ColorBuffer_ST)); - return 1-(1-addedbloom)*(1-screencolor); - } - - half4 fragScreenCheap(v2f i) : SV_Target { - half4 addedbloom = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)) * _Intensity; - half4 screencolor = tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[1], _ColorBuffer_ST)); - return 1-(1-addedbloom)*(1-screencolor); - } - - half4 fragAdd (v2f i) : SV_Target { - half4 addedbloom = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)); - half4 screencolor = tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[1], _ColorBuffer_ST)); - return _Intensity * addedbloom + screencolor; - } - - half4 fragAddCheap (v2f i) : SV_Target { - half4 addedbloom = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)); - half4 screencolor = tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[1], _ColorBuffer_ST)); - return _Intensity * addedbloom + screencolor; - } - - half4 fragVignetteMul (v2f i) : SV_Target { - return tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)) * tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[0], _ColorBuffer_ST)); - } - - half4 fragVignetteBlend (v2f i) : SV_Target { - return half4(1,1,1, tex2D(_ColorBuffer, UnityStereoScreenSpaceUVAdjust(i.uv[0], _ColorBuffer_ST)).r); - } - - half4 fragClear (v2f i) : SV_Target { - return 0; - } - - half4 fragAddOneOne (v2f i) : SV_Target { - half4 addedColors = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)); - return addedColors * _Intensity; - } - - half4 frag1Tap (v2f i) : SV_Target { - return tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)); - } - - half4 fragMultiTapMax (v2f_mt i) : SV_Target { - half4 outColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[4].xy, _MainTex_ST)); - outColor = max(outColor, tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST))); - outColor = max(outColor, tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1].xy, _MainTex_ST))); - outColor = max(outColor, tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[2].xy, _MainTex_ST))); - outColor = max(outColor, tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[3].xy, _MainTex_ST))); - return outColor; - } - - half4 fragMultiTapBlur (v2f_mt i) : SV_Target { - half4 outColor = 0; - outColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy, _MainTex_ST)); - outColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1].xy, _MainTex_ST)); - outColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[2].xy, _MainTex_ST)); - outColor += tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[3].xy, _MainTex_ST)); - return outColor/4; - } - - ENDCG - -Subshader { - ZTest Always Cull Off ZWrite Off - - // 0: nicer & softer "screen" blend mode - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragScreen - ENDCG - } - - // 1: "add" blend mode - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAdd - ENDCG - } - // 2: several taps, maxxed - Pass { - - CGPROGRAM - #pragma vertex vertMultiTap - #pragma fragment fragMultiTapMax - ENDCG - } - // 3: vignette blending - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragVignetteMul - ENDCG - } - // 4: nicer & softer "screen" blend mode(cheapest) - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragScreenCheap - ENDCG - } - // 5: "add" blend mode (cheapest) - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAddCheap - ENDCG - } - // 6: used for "stable" downsampling (blur) - Pass { - - CGPROGRAM - #pragma vertex vertMultiTap - #pragma fragment fragMultiTapBlur - ENDCG - } - // 7: vignette blending (blend to dest) - Pass { - - Blend Zero SrcAlpha - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragVignetteBlend - ENDCG - } - // 8: clear - Pass { - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragClear - ENDCG - } - // 9: fragAddOneOne - Pass { - - Blend One One - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAddOneOne - ENDCG - } - // 10: max blend - Pass { - - BlendOp Max - Blend One One - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag1Tap - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader.meta deleted file mode 100644 index 1737d9f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendForBloom.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 7856cbff0a0ca45c787d5431eb805bb0 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader deleted file mode 100644 index 8b4620a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader +++ /dev/null @@ -1,51 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/BlendOneOne" { - Properties { - _MainTex ("-", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - half4 _MainTex_ST; - half _Intensity; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - return o; - } - - half4 frag(v2f i) : SV_Target { - return tex2D(_MainTex, i.uv) * _Intensity; - } - - ENDCG - -Subshader { - - Pass { - BlendOp Add - Blend One One - - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader.meta deleted file mode 100644 index 007df7f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlendOneOne.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: f7898d203e9b94c0dbe2bf9dd5cb32c0 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader deleted file mode 100644 index c525eeb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader +++ /dev/null @@ -1,205 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/BlurAndFlares" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - _NonBlurredTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - }; - - struct v2f_opts { - half4 pos : SV_POSITION; - half2 uv[7] : TEXCOORD0; - }; - - struct v2f_blur { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half4 uv01 : TEXCOORD1; - half4 uv23 : TEXCOORD2; - half4 uv45 : TEXCOORD3; - half4 uv67 : TEXCOORD4; - }; - - half4 _Offsets; - half4 _TintColor; - - half _StretchWidth; - half2 _Threshhold; - half _Saturation; - - half4 _MainTex_TexelSize; - half4 _MainTex_ST; - - sampler2D _MainTex; - sampler2D _NonBlurredTex; - - v2f vert (appdata_img v) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - return o; - } - - v2f_blur vertWithMultiCoords2 (appdata_img v) { - v2f_blur o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv.xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - o.uv01 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * half4(1,1, -1,-1), _MainTex_ST); - o.uv23 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * half4(1,1, -1,-1) * 2.0, _MainTex_ST); - o.uv45 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * half4(1,1, -1,-1) * 3.0, _MainTex_ST); - o.uv67 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * half4(1,1, -1,-1) * 4.0, _MainTex_ST); - o.uv67 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * half4(1,1, -1,-1) * 5.0, _MainTex_ST); - return o; - } - - v2f_opts vertStretch (appdata_img v) { - v2f_opts o; - o.pos = UnityObjectToClipPos(v.vertex); - half b = _StretchWidth; - o.uv[0] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - o.uv[1] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + b * 2.0 * _Offsets.xy, _MainTex_ST); - o.uv[2] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - b * 2.0 * _Offsets.xy, _MainTex_ST); - o.uv[3] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + b * 4.0 * _Offsets.xy, _MainTex_ST); - o.uv[4] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - b * 4.0 * _Offsets.xy, _MainTex_ST); - o.uv[5] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + b * 6.0 * _Offsets.xy, _MainTex_ST); - o.uv[6] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - b * 6.0 * _Offsets.xy, _MainTex_ST); - return o; - } - - v2f_opts vertWithMultiCoords (appdata_img v) { - v2f_opts o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv[0] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - o.uv[1] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 0.5 * _MainTex_TexelSize.xy * _Offsets.xy, _MainTex_ST); - o.uv[2] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - 0.5 * _MainTex_TexelSize.xy * _Offsets.xy, _MainTex_ST); - o.uv[3] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 1.5 * _MainTex_TexelSize.xy * _Offsets.xy, _MainTex_ST); - o.uv[4] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - 1.5 * _MainTex_TexelSize.xy * _Offsets.xy, _MainTex_ST); - o.uv[5] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 2.5 * _MainTex_TexelSize.xy * _Offsets.xy, _MainTex_ST); - o.uv[6] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - 2.5 * _MainTex_TexelSize.xy * _Offsets.xy, _MainTex_ST); - return o; - } - - half4 fragPostNoBlur (v2f i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv); - return color * 1.0/(1.0 + Luminance(color.rgb) + 0.5); // this also makes it a little noisy - } - - half4 fragGaussBlur (v2f_blur i) : SV_Target { - half4 color = half4 (0,0,0,0); - color += 0.225 * tex2D (_MainTex, i.uv); - color += 0.150 * tex2D (_MainTex, i.uv01.xy); - color += 0.150 * tex2D (_MainTex, i.uv01.zw); - color += 0.110 * tex2D (_MainTex, i.uv23.xy); - color += 0.110 * tex2D (_MainTex, i.uv23.zw); - color += 0.075 * tex2D (_MainTex, i.uv45.xy); - color += 0.075 * tex2D (_MainTex, i.uv45.zw); - color += 0.0525 * tex2D (_MainTex, i.uv67.xy); - color += 0.0525 * tex2D (_MainTex, i.uv67.zw); - return color; - } - - half4 fragPreAndCut (v2f_opts i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv[0]); - color += tex2D (_MainTex, i.uv[1]); - color += tex2D (_MainTex, i.uv[2]); - color += tex2D (_MainTex, i.uv[3]); - color += tex2D (_MainTex, i.uv[4]); - color += tex2D (_MainTex, i.uv[5]); - color += tex2D (_MainTex, i.uv[6]); - color = max(color / 7.0 - _Threshhold.xxxx, float4(0,0,0,0)); - half lum = Luminance(color.rgb); - color.rgb = lerp(half3(lum,lum,lum), color.rgb, _Saturation) * _TintColor.rgb; - return color; - } - - half4 fragStretch (v2f_opts i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv[0]); - color = max (color, tex2D (_MainTex, i.uv[1])); - color = max (color, tex2D (_MainTex, i.uv[2])); - color = max (color, tex2D (_MainTex, i.uv[3])); - color = max (color, tex2D (_MainTex, i.uv[4])); - color = max (color, tex2D (_MainTex, i.uv[5])); - color = max (color, tex2D (_MainTex, i.uv[6])); - return color; - } - - half4 fragPost (v2f_opts i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv[0]); - color += tex2D (_MainTex, i.uv[1]); - color += tex2D (_MainTex, i.uv[2]); - color += tex2D (_MainTex, i.uv[3]); - color += tex2D (_MainTex, i.uv[4]); - color += tex2D (_MainTex, i.uv[5]); - color += tex2D (_MainTex, i.uv[6]); - return color * 1.0/(7.0 + Luminance(color.rgb) + 0.5); // this also makes it a little noisy - } - - ENDCG - -Subshader { - ZTest Always Cull Off ZWrite Off - Pass { - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragPostNoBlur - - ENDCG - } - - Pass { - - CGPROGRAM - - #pragma vertex vertStretch - #pragma fragment fragStretch - - ENDCG - } - - // 2 - Pass { - - CGPROGRAM - - #pragma vertex vertWithMultiCoords - #pragma fragment fragPreAndCut - - ENDCG - } - - // 3 - Pass { - - CGPROGRAM - - #pragma vertex vertWithMultiCoords - #pragma fragment fragPost - - ENDCG - } - // 4 - Pass { - - CGPROGRAM - - #pragma vertex vertWithMultiCoords2 - #pragma fragment fragGaussBlur - - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader.meta deleted file mode 100644 index a0ed0ba..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BlurAndFlares.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: be6e39cf196f146d5be72fbefb18ed75 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader deleted file mode 100644 index 7f0404f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader +++ /dev/null @@ -1,60 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/BrightPassFilterForBloom" -{ - Properties - { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f - { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - half4 _MainTex_ST; - - half4 threshold; - half useSrcAlphaAsMask; - - v2f vert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - return o; - } - - half4 frag(v2f i) : SV_Target - { - half4 color = tex2D(_MainTex, i.uv); - //color = color * saturate((color-threshhold.x) * 75.0); // didn't go well with HDR and din't make sense - color = color * lerp(1.0, color.a, useSrcAlphaAsMask); - color = max(half4(0,0,0,0), color-threshold.x); - return color; - } - - ENDCG - - Subshader - { - Pass - { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - - ENDCG - } - } - Fallback off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta deleted file mode 100644 index 35204d1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 186c4c0d31e314f049595dcbaf4ca129 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader deleted file mode 100644 index b076e92..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader +++ /dev/null @@ -1,77 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/BrightPassFilter2" -{ - Properties - { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f - { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - half4 _MainTex_ST; - - half4 _Threshhold; - - v2f vert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - return o; - } - - half4 fragScalarThresh(v2f i) : SV_Target - { - half4 color = tex2D(_MainTex, i.uv); - color.rgb = color.rgb; - color.rgb = max(half3(0,0,0), color.rgb-_Threshhold.xxx); - return color; - } - - half4 fragColorThresh(v2f i) : SV_Target - { - half4 color = tex2D(_MainTex, i.uv); - color.rgb = max(half3(0,0,0), color.rgb-_Threshhold.rgb); - return color; - } - - ENDCG - - Subshader - { - Pass - { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragScalarThresh - - ENDCG - } - - Pass - { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragColorThresh - - ENDCG - } - } - Fallback off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader.meta deleted file mode 100644 index b55de0e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/BrightPassFilter2.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 0aeaa4cb29f5d4e9c8455f04c8575c8c -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader deleted file mode 100644 index bacc63f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader +++ /dev/null @@ -1,63 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/LensFlareCreate" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv[4] : TEXCOORD0; - }; - - fixed4 colorA; - fixed4 colorB; - fixed4 colorC; - fixed4 colorD; - - sampler2D _MainTex; - half4 _MainTex_ST; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - - o.uv[0] = UnityStereoScreenSpaceUVAdjust(( ( v.texcoord.xy - 0.5 ) * -0.85 ) + 0.5, _MainTex_ST); - o.uv[1] = UnityStereoScreenSpaceUVAdjust(( ( v.texcoord.xy - 0.5 ) * -1.45 ) + 0.5, _MainTex_ST); - o.uv[2] = UnityStereoScreenSpaceUVAdjust(( ( v.texcoord.xy - 0.5 ) * -2.55 ) + 0.5, _MainTex_ST); - o.uv[3] = UnityStereoScreenSpaceUVAdjust(( ( v.texcoord.xy - 0.5 ) * -4.15 ) + 0.5, _MainTex_ST); - return o; - } - - fixed4 frag(v2f i) : SV_Target { - fixed4 color = float4 (0,0,0,0); - color += tex2D(_MainTex, i.uv[0] ) * colorA; - color += tex2D(_MainTex, i.uv[1] ) * colorB; - color += tex2D(_MainTex, i.uv[2] ) * colorC; - color += tex2D(_MainTex, i.uv[3] ) * colorD; - return color; - } - - ENDCG - -Subshader { - Blend One One - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta deleted file mode 100644 index cd9c241..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 459fe69d2f6d74ddb92f04dbf45a866b -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader deleted file mode 100644 index 4152986..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader +++ /dev/null @@ -1,289 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -Shader "Hidden/FastBloom" { - Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _Bloom ("Bloom (RGB)", 2D) = "black" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - sampler2D _MainTex; - sampler2D _Bloom; - - uniform half4 _MainTex_TexelSize; - half4 _MainTex_ST; - - uniform half4 _Parameter; - uniform half4 _OffsetsA; - uniform half4 _OffsetsB; - - #define ONE_MINUS_THRESHHOLD_TIMES_INTENSITY _Parameter.w - #define THRESHHOLD _Parameter.z - - struct v2f_simple - { - float4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - - #if UNITY_UV_STARTS_AT_TOP - half2 uv2 : TEXCOORD1; - #endif - }; - - v2f_simple vertBloom ( appdata_img v ) - { - v2f_simple o; - - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(v.texcoord, _MainTex_ST); - - #if UNITY_UV_STARTS_AT_TOP - o.uv2 = o.uv; - if (_MainTex_TexelSize.y < 0.0) - o.uv.y = 1.0 - o.uv.y; - #endif - - return o; - } - - struct v2f_tap - { - float4 pos : SV_POSITION; - half2 uv20 : TEXCOORD0; - half2 uv21 : TEXCOORD1; - half2 uv22 : TEXCOORD2; - half2 uv23 : TEXCOORD3; - }; - - v2f_tap vert4Tap ( appdata_img v ) - { - v2f_tap o; - - o.pos = UnityObjectToClipPos (v.vertex); - o.uv20 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy, _MainTex_ST); - o.uv21 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h,-0.5h), _MainTex_ST); - o.uv22 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy * half2(0.5h,-0.5h), _MainTex_ST); - o.uv23 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h,0.5h), _MainTex_ST); - - return o; - } - - fixed4 fragBloom ( v2f_simple i ) : SV_Target - { - #if UNITY_UV_STARTS_AT_TOP - - fixed4 color = tex2D(_MainTex, i.uv2); - return color + tex2D(_Bloom, i.uv); - - #else - - fixed4 color = tex2D(_MainTex, i.uv); - return color + tex2D(_Bloom, i.uv); - - #endif - } - - fixed4 fragDownsample ( v2f_tap i ) : SV_Target - { - fixed4 color = tex2D (_MainTex, i.uv20); - color += tex2D (_MainTex, i.uv21); - color += tex2D (_MainTex, i.uv22); - color += tex2D (_MainTex, i.uv23); - return max(color/4 - THRESHHOLD, 0) * ONE_MINUS_THRESHHOLD_TIMES_INTENSITY; - } - - // weight curves - - static const half curve[7] = { 0.0205, 0.0855, 0.232, 0.324, 0.232, 0.0855, 0.0205 }; // gauss'ish blur weights - - static const half4 curve4[7] = { half4(0.0205,0.0205,0.0205,0), half4(0.0855,0.0855,0.0855,0), half4(0.232,0.232,0.232,0), - half4(0.324,0.324,0.324,1), half4(0.232,0.232,0.232,0), half4(0.0855,0.0855,0.0855,0), half4(0.0205,0.0205,0.0205,0) }; - - struct v2f_withBlurCoords8 - { - float4 pos : SV_POSITION; - half4 uv : TEXCOORD0; - half2 offs : TEXCOORD1; - }; - - struct v2f_withBlurCoordsSGX - { - float4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half4 offs[3] : TEXCOORD1; - }; - - v2f_withBlurCoords8 vertBlurHorizontal (appdata_img v) - { - v2f_withBlurCoords8 o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = half4(v.texcoord.xy,1,1); - o.offs = _MainTex_TexelSize.xy * half2(1.0, 0.0) * _Parameter.x; - - return o; - } - - v2f_withBlurCoords8 vertBlurVertical (appdata_img v) - { - v2f_withBlurCoords8 o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = half4(v.texcoord.xy,1,1); - o.offs = _MainTex_TexelSize.xy * half2(0.0, 1.0) * _Parameter.x; - - return o; - } - - half4 fragBlur8 ( v2f_withBlurCoords8 i ) : SV_Target - { - half2 uv = i.uv.xy; - half2 netFilterWidth = i.offs; - half2 coords = uv - netFilterWidth * 3.0; - - half4 color = 0; - for( int l = 0; l < 7; l++ ) - { - half4 tap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(coords, _MainTex_ST)); - color += tap * curve4[l]; - coords += netFilterWidth; - } - return color; - } - - - v2f_withBlurCoordsSGX vertBlurHorizontalSGX (appdata_img v) - { - v2f_withBlurCoordsSGX o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = v.texcoord.xy; - - half offsetMagnitude = _MainTex_TexelSize.x * _Parameter.x; - o.offs[0] = v.texcoord.xyxy + offsetMagnitude * half4(-3.0h, 0.0h, 3.0h, 0.0h); - o.offs[1] = v.texcoord.xyxy + offsetMagnitude * half4(-2.0h, 0.0h, 2.0h, 0.0h); - o.offs[2] = v.texcoord.xyxy + offsetMagnitude * half4(-1.0h, 0.0h, 1.0h, 0.0h); - - return o; - } - - v2f_withBlurCoordsSGX vertBlurVerticalSGX (appdata_img v) - { - v2f_withBlurCoordsSGX o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = half4(v.texcoord.xy,1,1); - - half offsetMagnitude = _MainTex_TexelSize.y * _Parameter.x; - o.offs[0] = v.texcoord.xyxy + offsetMagnitude * half4(0.0h, -3.0h, 0.0h, 3.0h); - o.offs[1] = v.texcoord.xyxy + offsetMagnitude * half4(0.0h, -2.0h, 0.0h, 2.0h); - o.offs[2] = v.texcoord.xyxy + offsetMagnitude * half4(0.0h, -1.0h, 0.0h, 1.0h); - - return o; - } - - half4 fragBlurSGX ( v2f_withBlurCoordsSGX i ) : SV_Target - { - half2 uv = i.uv.xy; - - half4 color = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)) * curve4[3]; - - for( int l = 0; l < 3; l++ ) - { - half4 tapA = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.offs[l].xy, _MainTex_ST)); - half4 tapB = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.offs[l].zw, _MainTex_ST)); - color += (tapA + tapB) * curve4[l]; - } - - return color; - - } - - ENDCG - - SubShader { - ZTest Off Cull Off ZWrite Off Blend Off - - // 0 - Pass { - - CGPROGRAM - #pragma vertex vertBloom - #pragma fragment fragBloom - - ENDCG - - } - - // 1 - Pass { - - CGPROGRAM - - #pragma vertex vert4Tap - #pragma fragment fragDownsample - - ENDCG - - } - - // 2 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurVertical - #pragma fragment fragBlur8 - - ENDCG - } - - // 3 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurHorizontal - #pragma fragment fragBlur8 - - ENDCG - } - - // alternate blur - // 4 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurVerticalSGX - #pragma fragment fragBlurSGX - - ENDCG - } - - // 5 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurHorizontalSGX - #pragma fragment fragBlurSGX - - ENDCG - } - } - - FallBack Off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader.meta deleted file mode 100644 index db93b36..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBloom.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 68a00c837b82e4c6d92e7da765dc5f1d -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader deleted file mode 100644 index f51ccce..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader +++ /dev/null @@ -1,236 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -Shader "Hidden/FastBlur" { - Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _Bloom ("Bloom (RGB)", 2D) = "black" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - sampler2D _MainTex; - sampler2D _Bloom; - - uniform half4 _MainTex_TexelSize; - half4 _MainTex_ST; - - half4 _Bloom_ST; - - uniform half4 _Parameter; - - - - struct v2f_tap - { - float4 pos : SV_POSITION; - half2 uv20 : TEXCOORD0; - half2 uv21 : TEXCOORD1; - half2 uv22 : TEXCOORD2; - half2 uv23 : TEXCOORD3; - }; - - v2f_tap vert4Tap ( appdata_img v ) - { - v2f_tap o; - - o.pos = UnityObjectToClipPos (v.vertex); - o.uv20 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy, _MainTex_ST); - o.uv21 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h,-0.5h), _MainTex_ST); - o.uv22 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy * half2(0.5h,-0.5h), _MainTex_ST); - o.uv23 = UnityStereoScreenSpaceUVAdjust(v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h,0.5h), _MainTex_ST); - - return o; - } - - fixed4 fragDownsample ( v2f_tap i ) : SV_Target - { - fixed4 color = tex2D (_MainTex, i.uv20); - color += tex2D (_MainTex, i.uv21); - color += tex2D (_MainTex, i.uv22); - color += tex2D (_MainTex, i.uv23); - return color / 4; - } - - // weight curves - - static const half curve[7] = { 0.0205, 0.0855, 0.232, 0.324, 0.232, 0.0855, 0.0205 }; // gauss'ish blur weights - - static const half4 curve4[7] = { half4(0.0205,0.0205,0.0205,0), half4(0.0855,0.0855,0.0855,0), half4(0.232,0.232,0.232,0), - half4(0.324,0.324,0.324,1), half4(0.232,0.232,0.232,0), half4(0.0855,0.0855,0.0855,0), half4(0.0205,0.0205,0.0205,0) }; - - struct v2f_withBlurCoords8 - { - float4 pos : SV_POSITION; - half4 uv : TEXCOORD0; - half2 offs : TEXCOORD1; - }; - - struct v2f_withBlurCoordsSGX - { - float4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half4 offs[3] : TEXCOORD1; - }; - - v2f_withBlurCoords8 vertBlurHorizontal (appdata_img v) - { - v2f_withBlurCoords8 o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = half4(v.texcoord.xy,1,1); - o.offs = _MainTex_TexelSize.xy * half2(1.0, 0.0) * _Parameter.x; - - return o; - } - - v2f_withBlurCoords8 vertBlurVertical (appdata_img v) - { - v2f_withBlurCoords8 o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = half4(v.texcoord.xy,1,1); - o.offs = _MainTex_TexelSize.xy * half2(0.0, 1.0) * _Parameter.x; - - return o; - } - - half4 fragBlur8 ( v2f_withBlurCoords8 i ) : SV_Target - { - half2 uv = i.uv.xy; - half2 netFilterWidth = i.offs; - half2 coords = uv - netFilterWidth * 3.0; - - half4 color = 0; - for( int l = 0; l < 7; l++ ) - { - half4 tap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(coords, _MainTex_ST)); - color += tap * curve4[l]; - coords += netFilterWidth; - } - return color; - } - - - v2f_withBlurCoordsSGX vertBlurHorizontalSGX (appdata_img v) - { - v2f_withBlurCoordsSGX o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - - half offsetMagnitude = _MainTex_TexelSize.x * _Parameter.x; - o.offs[0] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsetMagnitude * half4(-3.0h, 0.0h, 3.0h, 0.0h), _MainTex_ST); - o.offs[1] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsetMagnitude * half4(-2.0h, 0.0h, 2.0h, 0.0h), _MainTex_ST); - o.offs[2] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsetMagnitude * half4(-1.0h, 0.0h, 1.0h, 0.0h), _MainTex_ST); - - return o; - } - - v2f_withBlurCoordsSGX vertBlurVerticalSGX (appdata_img v) - { - v2f_withBlurCoordsSGX o; - o.pos = UnityObjectToClipPos (v.vertex); - - o.uv = half4(UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST),1,1); - - half offsetMagnitude = _MainTex_TexelSize.y * _Parameter.x; - o.offs[0] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsetMagnitude * half4(0.0h, -3.0h, 0.0h, 3.0h), _MainTex_ST); - o.offs[1] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsetMagnitude * half4(0.0h, -2.0h, 0.0h, 2.0h), _MainTex_ST); - o.offs[2] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsetMagnitude * half4(0.0h, -1.0h, 0.0h, 1.0h), _MainTex_ST); - - return o; - } - - half4 fragBlurSGX ( v2f_withBlurCoordsSGX i ) : SV_Target - { - half2 uv = i.uv.xy; - - half4 color = tex2D(_MainTex, i.uv) * curve4[3]; - - for( int l = 0; l < 3; l++ ) - { - half4 tapA = tex2D(_MainTex, i.offs[l].xy); - half4 tapB = tex2D(_MainTex, i.offs[l].zw); - color += (tapA + tapB) * curve4[l]; - } - - return color; - - } - - ENDCG - - SubShader { - ZTest Off Cull Off ZWrite Off Blend Off - - // 0 - Pass { - - CGPROGRAM - - #pragma vertex vert4Tap - #pragma fragment fragDownsample - - ENDCG - - } - - // 1 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurVertical - #pragma fragment fragBlur8 - - ENDCG - } - - // 2 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurHorizontal - #pragma fragment fragBlur8 - - ENDCG - } - - // alternate blur - // 3 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurVerticalSGX - #pragma fragment fragBlurSGX - - ENDCG - } - - // 4 - Pass { - ZTest Always - Cull Off - - CGPROGRAM - - #pragma vertex vertBlurHorizontalSGX - #pragma fragment fragBlurSGX - - ENDCG - } - } - - FallBack Off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader.meta deleted file mode 100644 index 6770288..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MobileBlur.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: f9d5fa183cd6b45eeb1491f74863cd91 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader deleted file mode 100644 index 1516913..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader +++ /dev/null @@ -1,157 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/MultipassHollywoodFlares" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - _NonBlurredTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - }; - - struct v2f_opts { - half4 pos : SV_POSITION; - half2 uv[7] : TEXCOORD0; - }; - - half4 offsets; - half4 tintColor; - - half stretchWidth; - half2 _Threshhold; - - half4 _MainTex_TexelSize; - half4 _MainTex_ST; - - sampler2D _MainTex; - sampler2D _NonBlurredTex; - - v2f vert (appdata_img v) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.texcoord.xy; - return o; - } - - v2f_opts vertStretch (appdata_img v) { - v2f_opts o; - o.pos = UnityObjectToClipPos(v.vertex); - half b = stretchWidth; - o.uv[0] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - o.uv[1] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + b * 2.0 * offsets.xy, _MainTex_ST); - o.uv[2] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - b * 2.0 * offsets.xy, _MainTex_ST); - o.uv[3] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + b * 4.0 * offsets.xy, _MainTex_ST); - o.uv[4] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - b * 4.0 * offsets.xy, _MainTex_ST); - o.uv[5] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + b * 6.0 * offsets.xy, _MainTex_ST); - o.uv[6] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - b * 6.0 * offsets.xy, _MainTex_ST); - return o; - } - - v2f_opts vertVerticalCoords (appdata_img v) { - v2f_opts o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv[0] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - o.uv[1] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 0.5 * _MainTex_TexelSize.xy * half2(0,1), _MainTex_ST); - o.uv[2] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - 0.5 * _MainTex_TexelSize.xy * half2(0,1), _MainTex_ST); - o.uv[3] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 1.5 * _MainTex_TexelSize.xy * half2(0,1), _MainTex_ST); - o.uv[4] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - 1.5 * _MainTex_TexelSize.xy * half2(0,1), _MainTex_ST); - o.uv[5] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 2.5 * _MainTex_TexelSize.xy * half2(0,1), _MainTex_ST); - o.uv[6] = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy - 2.5 * _MainTex_TexelSize.xy * half2(0,1), _MainTex_ST); - return o; - } - - // deprecated - half4 fragPrepare (v2f i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv); - half4 colorNb = tex2D (_NonBlurredTex, i.uv); - return color * tintColor * 0.5 + colorNb * normalize (tintColor) * 0.5; - } - - - half4 fragPreAndCut (v2f_opts i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv[0]); - color += tex2D (_MainTex, i.uv[1]); - color += tex2D (_MainTex, i.uv[2]); - color += tex2D (_MainTex, i.uv[3]); - color += tex2D (_MainTex, i.uv[4]); - color += tex2D (_MainTex, i.uv[5]); - color += tex2D (_MainTex, i.uv[6]); - return max(color / 7.0 - _Threshhold.x, 0.0) * _Threshhold.y * tintColor; - } - - half4 fragStretch (v2f_opts i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv[0]); - color = max (color, tex2D (_MainTex, i.uv[1])); - color = max (color, tex2D (_MainTex, i.uv[2])); - color = max (color, tex2D (_MainTex, i.uv[3])); - color = max (color, tex2D (_MainTex, i.uv[4])); - color = max (color, tex2D (_MainTex, i.uv[5])); - color = max (color, tex2D (_MainTex, i.uv[6])); - return color; - } - - half4 fragPost (v2f_opts i) : SV_Target { - half4 color = tex2D (_MainTex, i.uv[0]); - color += tex2D (_MainTex, i.uv[1]); - color += tex2D (_MainTex, i.uv[2]); - color += tex2D (_MainTex, i.uv[3]); - color += tex2D (_MainTex, i.uv[4]); - color += tex2D (_MainTex, i.uv[5]); - color += tex2D (_MainTex, i.uv[6]); - return color * 1.0/(7.0 + Luminance(color.rgb) + 0.5); // this also makes it a little noisy - } - - ENDCG - -Subshader { - ZTest Always Cull Off ZWrite Off - Pass { - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragPrepare - - ENDCG - } - - Pass { - - CGPROGRAM - - #pragma vertex vertStretch - #pragma fragment fragStretch - - ENDCG - } - - Pass { - - CGPROGRAM - - #pragma vertex vertVerticalCoords - #pragma fragment fragPreAndCut - - ENDCG - } - - Pass { - - CGPROGRAM - - #pragma vertex vertVerticalCoords - #pragma fragment fragPost - - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta deleted file mode 100644 index 62c6a79..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: e2baf3cae8edc4daf94c9adc2154be00 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader deleted file mode 100644 index ba3c60b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader +++ /dev/null @@ -1,72 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/SeparableBlurPlus" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half4 uv01 : TEXCOORD1; - half4 uv23 : TEXCOORD2; - half4 uv45 : TEXCOORD3; - half4 uv67 : TEXCOORD4; - }; - - half4 offsets; - - sampler2D _MainTex; - half4 _MainTex_ST; - - v2f vert (appdata_img v) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - - o.uv.xy = v.texcoord.xy; - - o.uv01 = v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1); - o.uv23 = v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1) * 2.0; - o.uv45 = v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1) * 3.0; - o.uv67 = v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1) * 4.5; - o.uv67 = v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1) * 6.5; - - return o; - } - - half4 frag (v2f i) : SV_Target { - half4 color = half4 (0,0,0,0); - - color += 0.225 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST)); - color += 0.150 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv01.xy, _MainTex_ST)); - color += 0.150 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv01.zw, _MainTex_ST)); - color += 0.110 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv23.xy, _MainTex_ST)); - color += 0.110 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv23.zw, _MainTex_ST)); - color += 0.075 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv45.xy, _MainTex_ST)); - color += 0.075 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv45.zw, _MainTex_ST)); - color += 0.0525 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv67.xy, _MainTex_ST)); - color += 0.0525 * tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv67.zw, _MainTex_ST)); - - return color; - } - - ENDCG - -Subshader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta deleted file mode 100644 index f675def..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: a9df009a214e24a5ebbf271595f8d5b6 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader deleted file mode 100644 index cf3624f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader +++ /dev/null @@ -1,59 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/VignetteShader" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - }; - - sampler2D _MainTex; - - float4 _MainTex_TexelSize; - float vignetteIntensity; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - - o.uv = v.texcoord.xy; - return o; - } - - half4 frag(v2f i) : SV_Target { - half2 coords = i.uv; - half2 uv = i.uv; - - coords = (coords - 0.5) * 2.0; - half coordDot = dot (coords,coords); - half4 color = tex2D (_MainTex, uv); - - float mask = 1.0 - coordDot * vignetteIntensity; - return color * mask; - } - - ENDCG - -Subshader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader.meta deleted file mode 100644 index 63b6b76..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_BloomAndFlares/VignetteShader.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 562f620336e024ac99992ff05725a89a -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField.meta deleted file mode 100644 index 955cea4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d9cccf980fcb7441d85b8b3b5c2d2c34 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader deleted file mode 100644 index 7fdb621..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader +++ /dev/null @@ -1,79 +0,0 @@ - -Shader "Hidden/Dof/Bokeh34" { -Properties { - _MainTex ("Base (RGB)", 2D) = "white" {} - _Source ("Base (RGB)", 2D) = "black" {} -} - -SubShader { - CGINCLUDE - - #include "UnityCG.cginc" - - sampler2D _MainTex; - sampler2D _Source; - - uniform half4 _ArScale; - uniform half _Intensity; - uniform half4 _Source_TexelSize; - half4 _Source_ST; - - struct v2f { - half4 pos : SV_POSITION; - half2 uv2 : TEXCOORD0; - half4 source : TEXCOORD1; - }; - - #define COC bokeh.a - - v2f vert (appdata_full v) - { - v2f o; - - o.pos = v.vertex; - - o.uv2.xy = v.texcoord.xy;// * 2.0; <- needed when using Triangles.js and not Quads.js - - #if UNITY_UV_STARTS_AT_TOP - float4 bokeh = tex2Dlod (_Source, half4 (UnityStereoScreenSpaceUVAdjust(v.texcoord1.xy * half2(1,-1) + half2(0,1), _Source_ST), 0, 0)); - #else - float4 bokeh = tex2Dlod (_Source, half4 (UnityStereoScreenSpaceUVAdjust(v.texcoord1.xy, _Source_ST), 0, 0)); - #endif - - o.source = bokeh; - - o.pos.xy += (v.texcoord.xy * 2.0 - 1.0) * _ArScale.xy * COC;// + _ArScale.zw * coc; - o.source.rgb *= _Intensity; - - return o; - } - - - half4 frag (v2f i) : SV_Target - { - half4 color = tex2D (_MainTex, i.uv2.xy); - color.rgb *= i.source.rgb; - color.a *= Luminance(i.source.rgb*0.25); - return color; - } - - ENDCG - - Pass { - Blend OneMinusDstColor One - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment frag - - ENDCG - } - -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader.meta deleted file mode 100644 index f8047da..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/Bokeh34.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 57cdacf9b217546aaa18edf39a6151c0 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader deleted file mode 100644 index 77efdfe..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader +++ /dev/null @@ -1,481 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - Shader "Hidden/Dof/DepthOfField34" { - Properties { - _MainTex ("Base", 2D) = "" {} - _TapLowBackground ("TapLowBackground", 2D) = "" {} - _TapLowForeground ("TapLowForeground", 2D) = "" {} - _TapMedium ("TapMedium", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - half4 pos : SV_POSITION; - half2 uv1 : TEXCOORD0; - }; - - struct v2fDofApply { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - }; - - struct v2fRadius { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half4 uv1[4] : TEXCOORD1; - }; - - struct v2fDown { - half4 pos : SV_POSITION; - half2 uv0 : TEXCOORD0; - half2 uv[2] : TEXCOORD1; - }; - - sampler2D _MainTex; - sampler2D_float _CameraDepthTexture; - sampler2D _TapLowBackground; - sampler2D _TapLowForeground; - sampler2D _TapMedium; - - half4 _CurveParams; - half _ForegroundBlurExtrude; - uniform half3 _Threshhold; - uniform float4 _MainTex_TexelSize; - half4 _MainTex_ST; - uniform float2 _InvRenderTargetSize; - half4 _CameraDepthTexture_ST; - half4 _TapLowBackground_ST; - half4 _TapLowForeground_ST; - half4 _TapMedium_ST; - - v2f vert( appdata_img v ) { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv1.xy = v.texcoord.xy; - return o; - } - - v2fRadius vertWithRadius( appdata_img v ) { - v2fRadius o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv.xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - - const half2 blurOffsets[4] = { - half2(-0.5, +1.5), - half2(+0.5, -1.5), - half2(+1.5, +0.5), - half2(-1.5, -0.5) - }; - - o.uv1[0].xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 5.0 * _MainTex_TexelSize.xy * blurOffsets[0], _MainTex_ST); - o.uv1[1].xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 5.0 * _MainTex_TexelSize.xy * blurOffsets[1], _MainTex_ST); - o.uv1[2].xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 5.0 * _MainTex_TexelSize.xy * blurOffsets[2], _MainTex_ST); - o.uv1[3].xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 5.0 * _MainTex_TexelSize.xy * blurOffsets[3], _MainTex_ST); - - o.uv1[0].zw = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 3.0 * _MainTex_TexelSize.xy * blurOffsets[0], _MainTex_ST); - o.uv1[1].zw = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 3.0 * _MainTex_TexelSize.xy * blurOffsets[1], _MainTex_ST); - o.uv1[2].zw = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 3.0 * _MainTex_TexelSize.xy * blurOffsets[2], _MainTex_ST); - o.uv1[3].zw = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy + 3.0 * _MainTex_TexelSize.xy * blurOffsets[3], _MainTex_ST); - - return o; - } - - v2fDofApply vertDofApply( appdata_img v ) { - v2fDofApply o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv.xy = v.texcoord.xy; - return o; - } - - v2fDown vertDownsampleWithCocConserve(appdata_img v) { - v2fDown o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv0.xy = v.texcoord.xy; - o.uv[0].xy = v.texcoord.xy + half2(-1.0,-1.0) * _InvRenderTargetSize; - o.uv[1].xy = v.texcoord.xy + half2(1.0,-1.0) * _InvRenderTargetSize; - return o; - } - - half4 BokehPrereqs (sampler2D tex, half4 uv1[4], half4 center, half considerCoc) { - - // @NOTE 1: - // we are checking for 3 things in order to create a bokeh. - // goal is to get the highest bang for the buck. - // 1.) contrast/frequency should be very high (otherwise bokeh mostly unvisible) - // 2.) luminance should be high - // 3.) no occluder nearby (stored in alpha channel) - - // @NOTE 2: about the alpha channel in littleBlur: - // the alpha channel stores an heuristic on how likely it is - // that there is no bokeh occluder nearby. - // if we didn't' check for that, we'd get very noise bokeh - // popping because of the sudden contrast changes - - half4 sampleA = tex2D(tex, uv1[0].zw); - half4 sampleB = tex2D(tex, uv1[1].zw); - half4 sampleC = tex2D(tex, uv1[2].zw); - half4 sampleD = tex2D(tex, uv1[3].zw); - - half4 littleBlur = 0.125 * (sampleA + sampleB + sampleC + sampleD); - - sampleA = tex2D(tex, uv1[0].xy); - sampleB = tex2D(tex, uv1[1].xy); - sampleC = tex2D(tex, uv1[2].xy); - sampleD = tex2D(tex, uv1[3].xy); - - littleBlur += 0.125 * (sampleA + sampleB + sampleC + sampleD); - - littleBlur = lerp (littleBlur, center, saturate(100.0 * considerCoc * abs(littleBlur.a - center.a))); - - return littleBlur; - } - - half4 fragDownsampleWithCocConserve(v2fDown i) : SV_Target { - half2 rowOfs[4]; - - rowOfs[0] = half2(0.0, 0.0); - rowOfs[1] = half2(0.0, _InvRenderTargetSize.y); - rowOfs[2] = half2(0.0, _InvRenderTargetSize.y) * 2.0; - rowOfs[3] = half2(0.0, _InvRenderTargetSize.y) * 3.0; - - half4 color = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv0.xy, _MainTex_ST)); - - half4 sampleA = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy + rowOfs[0], _MainTex_ST)); - half4 sampleB = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1].xy + rowOfs[0], _MainTex_ST)); - half4 sampleC = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[0].xy + rowOfs[2], _MainTex_ST)); - half4 sampleD = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv[1].xy + rowOfs[2], _MainTex_ST)); - - color += sampleA + sampleB + sampleC + sampleD; - color *= 0.2; - - // @NOTE we are doing max on the alpha channel for 2 reasons: - // 1) foreground blur likes a slightly bigger radius - // 2) otherwise we get an ugly outline between high blur- and medium blur-areas - // drawback: we get a little bit of color bleeding - - color.a = max(max(sampleA.a, sampleB.a), max(sampleC.a, sampleD.a)); - - return color; - } - - half4 fragDofApplyBg (v2fDofApply i) : SV_Target { - half4 tapHigh = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - i.uv.xy = i.uv.xy * half2(1,-1)+half2(0,1); - #endif - - half4 tapLow = tex2D (_TapLowBackground, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapLowBackground_ST)); // already mixed with medium blur - tapHigh = lerp (tapHigh, tapLow, tapHigh.a); - return tapHigh; - } - - half4 fragDofApplyBgDebug (v2fDofApply i) : SV_Target { - half4 tapHigh = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - - half4 tapLow = tex2D (_TapLowBackground, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapLowBackground_ST)); - - half4 tapMedium = tex2D (_TapMedium, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapMedium_ST)); - tapMedium.rgb = (tapMedium.rgb + half3 (1, 1, 0)) * 0.5; - tapLow.rgb = (tapLow.rgb + half3 (0, 1, 0)) * 0.5; - - tapLow = lerp (tapMedium, tapLow, saturate (tapLow.a * tapLow.a)); - tapLow = tapLow * 0.5 + tex2D (_TapLowBackground, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapLowBackground_ST)) * 0.5; - - return lerp (tapHigh, tapLow, tapHigh.a); - } - - half4 fragDofApplyFg (v2fDofApply i) : SV_Target { - half4 fgBlur = tex2D(_TapLowForeground, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapLowForeground_ST)); - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - i.uv.xy = i.uv.xy * half2(1,-1)+half2(0,1); - #endif - - half4 fgColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - - //fgBlur.a = saturate(fgBlur.a*_ForegroundBlurWeight+saturate(fgColor.a-fgBlur.a)); - //fgBlur.a = max (fgColor.a, (2.0 * fgBlur.a - fgColor.a)) * _ForegroundBlurExtrude; - fgBlur.a = max(fgColor.a, fgBlur.a * _ForegroundBlurExtrude); //max (fgColor.a, (2.0*fgBlur.a-fgColor.a)) * _ForegroundBlurExtrude; - - return lerp (fgColor, fgBlur, saturate(fgBlur.a)); - } - - half4 fragDofApplyFgDebug (v2fDofApply i) : SV_Target { - half4 fgBlur = tex2D(_TapLowForeground, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapLowForeground_ST)); - - half4 fgColor = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - - fgBlur.a = max(fgColor.a, fgBlur.a * _ForegroundBlurExtrude); //max (fgColor.a, (2.0*fgBlur.a-fgColor.a)) * _ForegroundBlurExtrude; - - half4 tapMedium = half4 (1, 1, 0, fgBlur.a); - tapMedium.rgb = 0.5 * (tapMedium.rgb + fgColor.rgb); - - fgBlur.rgb = 0.5 * (fgBlur.rgb + half3(0,1,0)); - fgBlur.rgb = lerp (tapMedium.rgb, fgBlur.rgb, saturate (fgBlur.a * fgBlur.a)); - - return lerp ( fgColor, fgBlur, saturate(fgBlur.a)); - } - - half4 fragCocBg (v2f i) : SV_Target { - - float d = SAMPLE_DEPTH_TEXTURE (_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - d = Linear01Depth (d); - half coc = 0.0; - - half focalDistance01 = _CurveParams.w + _CurveParams.z; - - if (d > focalDistance01) - coc = (d - focalDistance01); - - coc = saturate (coc * _CurveParams.y); - return coc; - } - - half4 fragCocFg (v2f i) : SV_Target { - half4 color = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - color.a = 0.0; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - i.uv1.xy = i.uv1.xy * half2(1,-1)+half2(0,1); - #endif - - float d = SAMPLE_DEPTH_TEXTURE (_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - d = Linear01Depth (d); - - half focalDistance01 = (_CurveParams.w - _CurveParams.z); - - if (d < focalDistance01) - color.a = (focalDistance01 - d); - - color.a = saturate (color.a * _CurveParams.x); - return color; - } - - // not being used atm - - half4 fragMask (v2f i) : SV_Target { - return half4(0,0,0,0); - } - - // used for simple one one blend - - half4 fragAddBokeh (v2f i) : SV_Target { - half4 from = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST) ); - return from; - } - - half4 fragAddFgBokeh (v2f i) : SV_Target { - half4 from = tex2D( _MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST) ); - return from; - } - - half4 fragDarkenForBokeh(v2fRadius i) : SV_Target { - half4 fromOriginal = tex2D(_MainTex, i.uv.xy); - half4 lowRez = BokehPrereqs (_MainTex, i.uv1, fromOriginal, _Threshhold.z); - half4 outColor = half4(0,0,0, fromOriginal.a); - half modulate = fromOriginal.a; - - // this code imitates the if-then-else conditions below - half2 conditionCheck = half2( dot(abs(fromOriginal.rgb-lowRez.rgb), half3(0.3,0.5,0.2)), Luminance(fromOriginal.rgb)); - conditionCheck *= fromOriginal.a; - conditionCheck = saturate(_Threshhold.xy - conditionCheck); - outColor = lerp (outColor, fromOriginal, saturate (dot(conditionCheck, half2(1000.0,1000.0)))); - - /* - if ( abs(dot(fromOriginal.rgb - lowRez.rgb, half3 (0.3,0.5,0.2))) * modulate < _Threshhold.x) - outColor = fromOriginal; // no darkening - if (Luminance(fromOriginal.rgb) * modulate < _Threshhold.y) - outColor = fromOriginal; // no darkening - if (lowRez.a < _Threshhold.z) // need to make foreground not cast false bokeh's - outColor = fromOriginal; // no darkenin - */ - - return outColor; - } - - half4 fragExtractAndAddToBokeh (v2fRadius i) : SV_Target { - half4 from = tex2D(_MainTex, i.uv.xy); - half4 lowRez = BokehPrereqs(_MainTex, i.uv1, from, _Threshhold.z); - half4 outColor = from; - - // this code imitates the if-then-else conditions below - half2 conditionCheck = half2( dot(abs(from.rgb-lowRez.rgb), half3(0.3,0.5,0.2)), Luminance(from.rgb)); - conditionCheck *= from.a; - conditionCheck = saturate(_Threshhold.xy - conditionCheck); - outColor = lerp (outColor, half4(0,0,0,0), saturate (dot(conditionCheck, half2(1000.0,1000.0)))); - - /* - if ( abs(dot(from.rgb - lowRez.rgb, half3 (0.3,0.5,0.2))) * modulate < _Threshhold.x) - outColor = half4(0,0,0,0); // don't add - if (Luminance(from.rgb) * modulate < _Threshhold.y) - outColor = half4(0,0,0,0); // don't add - if (lowRez.a < _Threshhold.z) // need to make foreground not cast false bokeh's - outColor = half4(0,0,0,0); // don't add - */ - - return outColor; - } - - ENDCG - -Subshader { - - // pass 0 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vertDofApply - #pragma fragment fragDofApplyBg - ENDCG - } - - // pass 1 - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask RGB - - CGPROGRAM - #pragma vertex vertDofApply - #pragma fragment fragDofApplyFgDebug - ENDCG - } - - // pass 2 - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask RGB - - CGPROGRAM - #pragma vertex vertDofApply - #pragma fragment fragDofApplyBgDebug - ENDCG - } - - - - // pass 3 - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask A - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragCocBg - ENDCG - } - - - // pass 4 - - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask RGB - //Blend One One - - CGPROGRAM - #pragma vertex vertDofApply - #pragma fragment fragDofApplyFg - ENDCG - } - - // pass 5 - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask ARGB - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragCocFg - ENDCG - } - - // pass 6 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vertDownsampleWithCocConserve - #pragma fragment fragDownsampleWithCocConserve - ENDCG - } - - // pass 7 - // not being used atm - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask RGBA - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragMask - ENDCG - } - - // pass 8 - - Pass { - ZTest Always Cull Off ZWrite Off - Blend SrcAlpha OneMinusSrcAlpha - ColorMask RGB - - CGPROGRAM - #pragma vertex vert - #pragma fragment fragAddBokeh - ENDCG - } - - // pass 9 - - Pass { - ZTest Always Cull Off ZWrite Off - Blend One One - ColorMask RGB - - CGPROGRAM - #pragma vertex vertWithRadius - #pragma fragment fragExtractAndAddToBokeh - ENDCG - } - - // pass 10 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vertWithRadius - #pragma fragment fragDarkenForBokeh - ENDCG - } - - // pass 11 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vertWithRadius - #pragma fragment fragExtractAndAddToBokeh - ENDCG - } - } - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader.meta deleted file mode 100644 index b86195b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfField34.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 987fb0677d01f43ce8a9dbf12271e668 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader deleted file mode 100644 index b62ca13..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader +++ /dev/null @@ -1,261 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - -/* - DX11 Depth Of Field - pretty much just does bokeh texture splatting - - basic algorithm: - - * find bright spots - * verify high frequency (otherwise dont care) - * if possitive, replace with black pixel and add to append buffer - * box blur buffer (thus smearing black pixels) - * blend bokeh texture sprites via append buffer on top of box blurred buffer - * composite with frame buffer -*/ - -Shader "Hidden/Dof/DX11Dof" -{ - Properties - { - _MainTex ("", 2D) = "white" {} - _BlurredColor ("", 2D) = "white" {} - _FgCocMask ("", 2D) = "white" {} - } - - CGINCLUDE - - #define BOKEH_ZERO_VEC (float4(0,0,0,0)) - #define BOKEH_ONE_VEC (float4(1,1,1,1)) - - float4 _BokehParams; // legend: dx11BokehScale, dx11BokehIntensity,dx11BokehThreshhold, internalBlurWidth - float4 _MainTex_TexelSize; - float3 _Screen; - float _SpawnHeuristic; - - sampler2D_float _CameraDepthTexture; - sampler2D _BlurredColor; - sampler2D _MainTex; - sampler2D _FgCocMask; - - half4 _MainTex_ST; - - - struct appendStruct { - float3 pos; - float4 color; - }; - - struct gs_out { - float4 pos : SV_POSITION; - float3 uv : TEXCOORD0; - float4 color : TEXCOORD1; - float4 misc : TEXCOORD2; - }; - - // TODO: activate border clamp tex sampler state instead? - inline float4 clampBorderColor(float2 uv) - { -#if 1 - if(uv.x<=0) return BOKEH_ZERO_VEC; if(uv.x>=1) return BOKEH_ZERO_VEC; - if(uv.y<=0) return BOKEH_ZERO_VEC; if(uv.y>=1) return BOKEH_ZERO_VEC; -#endif - return BOKEH_ONE_VEC; - } - - struct vs_out { - float4 pos : SV_POSITION; - float4 color : TEXCOORD1; - float cocOverlap : TEXCOORD2; - }; - - StructuredBuffer pointBuffer; - - vs_out vertApply (uint id : SV_VertexID) - { - vs_out o; - float2 pos = pointBuffer[id].pos.xy ; - o.pos = float4(pos * 2.0 - 1.0, 0, 1); - o.color = pointBuffer[id].color; - #if UNITY_UV_STARTS_AT_TOP - o.pos.y *= -1; - #endif - o.cocOverlap = pointBuffer[id].pos.z; - - return o; - } - - [maxvertexcount(4)] - void geom (point vs_out input[1], inout TriangleStream outStream) - { - // NEW ENERGY CONSERVATION: - - float2 scale2 = _BokehParams.ww * input[0].color.aa * _BokehParams.xx; - float4 offs = 0; - offs.xy = float2(3.0, 3.0) + 2.0f * floor(scale2 + float2(0.5,0.5)); - - float2 rs = ((float2(1.0, 1.0) + 2.0f * (scale2 + float2(0.5,0.5))));; - float2 f2 = offs.xy / rs; - - float energyAdjustment = (_BokehParams.y) / (rs.x*rs.y); - offs.xy *= _Screen.xy; - - gs_out output; - - output.pos = input[0].pos + offs*float4(-1,1,0,0); - output.misc = float4(f2,0,0); - output.uv = float3(0, 1, input[0].cocOverlap); - output.color = input[0].color * energyAdjustment; - outStream.Append (output); - - output.pos = input[0].pos + offs*float4(1,1,0,0); - output.misc = float4(f2,0,0); - output.uv = float3(1, 1, input[0].cocOverlap); - output.color = input[0].color * energyAdjustment; - outStream.Append (output); - - output.pos = input[0].pos + offs*float4(-1,-1,0,0); - output.misc = float4(f2,0,0); - output.uv = float3(0, 0, input[0].cocOverlap); - output.color = input[0].color * energyAdjustment; - outStream.Append (output); - - output.pos = input[0].pos + offs*float4(1,-1,0,0); - output.misc = float4(f2,0,0); - output.uv = float3(1, 0, input[0].cocOverlap); - output.color = input[0].color * energyAdjustment; - outStream.Append (output); - - outStream.RestartStrip(); - } - -ENDCG - -SubShader -{ - -// pass 0: append buffer "collect" - -Pass -{ - ZWrite Off ZTest Always Cull Off - - CGPROGRAM - - #pragma vertex vert - #pragma fragment frag - #pragma target 5.0 - - #include "UnityCG.cginc" - - struct appdata { - float4 vertex : POSITION; - float2 texcoord : TEXCOORD0; - }; - - struct v2f { - float4 pos : SV_POSITION; - float2 uv_flip : TEXCOORD0; - float2 uv : TEXCOORD1; - }; - - v2f vert (appdata v) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv = UnityStereoScreenSpaceUVAdjust(v.texcoord, _MainTex_ST); - o.uv_flip = UnityStereoScreenSpaceUVAdjust(v.texcoord, _MainTex_ST); - #if UNITY_UV_STARTS_AT_TOP - if(_MainTex_TexelSize.y<0) - o.uv_flip.y = 1.0-o.uv_flip.y; - if(_MainTex_TexelSize.y<0) - o.pos.y *= -1.0; - #endif - return o; - } - - AppendStructuredBuffer pointBufferOutput : register(u1); - - float4 frag (v2f i) : SV_Target - { - float4 c = tex2D (_MainTex, i.uv_flip); - float lumc = Luminance (c.rgb); - - float4 cblurred = tex2D (_BlurredColor, i.uv); - float lumblurred = Luminance (cblurred.rgb); - - float fgCoc = tex2D(_FgCocMask, i.uv).a; - - [branch] - if (c.a * _BokehParams.w > 1 && cblurred.a > 0.1 && lumc > _BokehParams.z && abs(lumc-lumblurred) > _SpawnHeuristic) - { - appendStruct append; - append.pos = float3(i.uv, fgCoc); - append.color.rgba = float4(c.rgb * saturate(c.a*4), c.a); - pointBufferOutput.Append (append); - return float4(c.rgb * saturate(1-c.a*4), c.a); - } - - return c; - } - ENDCG -} - -// pass 1: bokeh splatting (low resolution) - -Pass { - - ZWrite Off ZTest Always Cull Off - Blend One One, One One - ColorMask RGBA - - CGPROGRAM - - #pragma target 5.0 - #pragma vertex vertApply - #pragma geometry geom - #pragma fragment frag - - #include "UnityCG.cginc" - - fixed4 frag (gs_out i) : SV_Target - { - float2 uv = UnityStereoScreenSpaceUVAdjust((i.uv.xy) * i.misc.xy + (float2(1,1)-i.misc.xy) * 0.5, _MainTex_ST); // smooth uv scale - return float4(i.color.rgb, 1) * float4(tex2D(_MainTex, uv.xy).rgb, i.uv.z) * clampBorderColor (uv); - } - - ENDCG -} - -// pass 2: bokeh splatting (high resolution) - -Pass { - - ZWrite Off ZTest Always Cull Off - BlendOp Add, Add - Blend DstAlpha One, Zero One - ColorMask RGBA - - CGPROGRAM - - #pragma target 5.0 - #pragma vertex vertApply - #pragma geometry geom - #pragma fragment frag - - #include "UnityCG.cginc" - - fixed4 frag (gs_out i) : SV_Target - { - float2 uv = UnityStereoScreenSpaceUVAdjust((i.uv.xy) * i.misc.xy + (float2(1,1)-i.misc.xy) * 0.5, _MainTex_ST); // smooth uv scale - return float4(i.color.rgb, 1) * float4(tex2D(_MainTex, uv.xy).rgb, i.uv.z) * clampBorderColor (uv); - } - - ENDCG -} - -} - -Fallback Off -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader.meta deleted file mode 100644 index 15935f1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldDX11.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: d8e82664aa8686642a424c88ab10164a -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader deleted file mode 100644 index 6623699..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader +++ /dev/null @@ -1,941 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - Shader "Hidden/Dof/DepthOfFieldHdr" { - Properties { - _MainTex ("-", 2D) = "black" {} - _FgOverlap ("-", 2D) = "black" {} - _LowRez ("-", 2D) = "black" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uv1 : TEXCOORD1; - }; - - struct v2fRadius { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 uv1[4] : TEXCOORD1; - }; - - struct v2fBlur { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 uv01 : TEXCOORD1; - float4 uv23 : TEXCOORD2; - float4 uv45 : TEXCOORD3; - float4 uv67 : TEXCOORD4; - float4 uv89 : TEXCOORD5; - }; - - uniform sampler2D _MainTex; - uniform sampler2D_float _CameraDepthTexture; - uniform sampler2D _FgOverlap; - uniform sampler2D _LowRez; - uniform float4 _CurveParams; - uniform float4 _MainTex_TexelSize; - half4 _MainTex_ST; - uniform float4 _Offsets; - - half4 _CameraDepthTexture_ST; - half4 _LowRez_ST; - half4 _FgOverlap_ST; - - v2f vert( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv1.xy = v.texcoord.xy; - o.uv.xy = v.texcoord.xy; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - o.uv.y = 1-o.uv.y; - #endif - - return o; - } - - v2f vertFlip( appdata_img v ) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv1.xy = v.texcoord.xy; - o.uv.xy = v.texcoord.xy; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - o.uv.y = 1-o.uv.y; - if (_MainTex_TexelSize.y < 0) - o.uv1.y = 1-o.uv1.y; - #endif - - return o; - } - - v2fBlur vertBlurPlusMinus (appdata_img v) - { - v2fBlur o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv.xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - o.uv01 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * float4(1,1, -1,-1) * _MainTex_TexelSize.xyxy / 6.0, _MainTex_ST); - o.uv23 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * float4(2,2, -2,-2) * _MainTex_TexelSize.xyxy / 6.0, _MainTex_ST); - o.uv45 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * float4(3,3, -3,-3) * _MainTex_TexelSize.xyxy / 6.0, _MainTex_ST); - o.uv67 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * float4(4,4, -4,-4) * _MainTex_TexelSize.xyxy / 6.0, _MainTex_ST); - o.uv89 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + _Offsets.xyxy * float4(5,5, -5,-5) * _MainTex_TexelSize.xyxy / 6.0, _MainTex_ST); - return o; - } - - #define SCATTER_OVERLAP_SMOOTH (-0.265) - - inline float BokehWeightDisc(float4 theSample, float sampleDistance, float4 centerSample) - { - return smoothstep(SCATTER_OVERLAP_SMOOTH, 0.0, theSample.a - centerSample.a*sampleDistance); - } - - inline float2 BokehWeightDisc2(float4 sampleA, float4 sampleB, float2 sampleDistance2, float4 centerSample) - { - return smoothstep(float2(SCATTER_OVERLAP_SMOOTH, SCATTER_OVERLAP_SMOOTH), float2(0.0,0.0), float2(sampleA.a, sampleB.a) - centerSample.aa*sampleDistance2); } - - static const int SmallDiscKernelSamples = 12; - static const float2 SmallDiscKernel[SmallDiscKernelSamples] = - { - float2(-0.326212,-0.40581), - float2(-0.840144,-0.07358), - float2(-0.695914,0.457137), - float2(-0.203345,0.620716), - float2(0.96234,-0.194983), - float2(0.473434,-0.480026), - float2(0.519456,0.767022), - float2(0.185461,-0.893124), - float2(0.507431,0.064425), - float2(0.89642,0.412458), - float2(-0.32194,-0.932615), - float2(-0.791559,-0.59771) - }; - - static const int NumDiscSamples = 28; - static const float3 DiscKernel[NumDiscSamples] = - { - float3(0.62463,0.54337,0.82790), - float3(-0.13414,-0.94488,0.95435), - float3(0.38772,-0.43475,0.58253), - float3(0.12126,-0.19282,0.22778), - float3(-0.20388,0.11133,0.23230), - float3(0.83114,-0.29218,0.88100), - float3(0.10759,-0.57839,0.58831), - float3(0.28285,0.79036,0.83945), - float3(-0.36622,0.39516,0.53876), - float3(0.75591,0.21916,0.78704), - float3(-0.52610,0.02386,0.52664), - float3(-0.88216,-0.24471,0.91547), - float3(-0.48888,-0.29330,0.57011), - float3(0.44014,-0.08558,0.44838), - float3(0.21179,0.51373,0.55567), - float3(0.05483,0.95701,0.95858), - float3(-0.59001,-0.70509,0.91938), - float3(-0.80065,0.24631,0.83768), - float3(-0.19424,-0.18402,0.26757), - float3(-0.43667,0.76751,0.88304), - float3(0.21666,0.11602,0.24577), - float3(0.15696,-0.85600,0.87027), - float3(-0.75821,0.58363,0.95682), - float3(0.99284,-0.02904,0.99327), - float3(-0.22234,-0.57907,0.62029), - float3(0.55052,-0.66984,0.86704), - float3(0.46431,0.28115,0.54280), - float3(-0.07214,0.60554,0.60982), - }; - - float4 fragBlurInsaneMQ (v2f i) : SV_Target - { - float4 centerTap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - float4 sum = centerTap; - float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; - - float sampleCount = max(centerTap.a * 0.25, _Offsets.z); // <- weighing with 0.25 looks nicer for small high freq spec - sum *= sampleCount; - - float weights = 0; - - for(int l=0; l < NumDiscSamples; l++) - { - float2 sampleUV = i.uv1.xy + DiscKernel[l].xy * poissonScale.xy; - float4 sample0 = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(sampleUV.xy, _MainTex_ST)); - - if( sample0.a > 0.0 ) - { - weights = BokehWeightDisc(sample0, DiscKernel[l].z, centerTap); - sum += sample0 * weights; - sampleCount += weights; - } - } - - float4 returnValue = sum / sampleCount; - returnValue.a = centerTap.a; - - return returnValue; - } - - float4 fragBlurInsaneHQ (v2f i) : SV_Target - { - float4 centerTap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - float4 sum = centerTap; - float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; - - float sampleCount = max(centerTap.a * 0.25, _Offsets.z); // <- weighing with 0.25 looks nicer for small high freq spec - sum *= sampleCount; - - float2 weights = 0; - - for(int l=0; l < NumDiscSamples; l++) - { - float4 sampleUV = i.uv1.xyxy + DiscKernel[l].xyxy * poissonScale.xyxy / float4(1.2,1.2,DiscKernel[l].zz); - - float4 sample0 = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(sampleUV.xy, _MainTex_ST)); - float4 sample1 = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(sampleUV.zw, _MainTex_ST)); - - if( (sample0.a + sample1.a) > 0.0 ) - { - weights = BokehWeightDisc2(sample0, sample1, float2(DiscKernel[l].z/1.2, 1.0), centerTap); - sum += sample0 * weights.x + sample1 * weights.y; - sampleCount += dot(weights, 1); - } - } - - float4 returnValue = sum / sampleCount; - returnValue.a = centerTap.a; - - return returnValue; - } - - inline float4 BlendLowWithHighHQ(float coc, float4 low, float4 high) - { - float blend = smoothstep(0.65,0.85, coc); - return lerp(low, high, blend); - } - - inline float4 BlendLowWithHighMQ(float coc, float4 low, float4 high) - { - float blend = smoothstep(0.4,0.6, coc); - return lerp(low, high, blend); - } - - float4 fragBlurUpsampleCombineHQ (v2f i) : SV_Target - { - float4 bigBlur = tex2D(_LowRez, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _LowRez_ST)); - float4 centerTap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - - float4 smallBlur = centerTap; - float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w ; - - float sampleCount = max(centerTap.a * 0.25, 0.1f); // <- weighing with 0.25 looks nicer for small high freq spec - smallBlur *= sampleCount; - - for(int l=0; l < NumDiscSamples; l++) - { - float2 sampleUV = i.uv1.xy + DiscKernel[l].xy * poissonScale.xy; - - float4 sample0 = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(sampleUV, _MainTex_ST)); - float weight0 = BokehWeightDisc(sample0, DiscKernel[l].z, centerTap); - smallBlur += sample0 * weight0; sampleCount += weight0; - } - - smallBlur /= (sampleCount+1e-5f); - smallBlur = BlendLowWithHighHQ(centerTap.a, smallBlur, bigBlur); - - return centerTap.a < 1e-2f ? centerTap : float4(smallBlur.rgb,centerTap.a); - } - - float4 fragBlurUpsampleCombineMQ (v2f i) : SV_Target - { - float4 bigBlur = tex2D(_LowRez, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _LowRez_ST)); - float4 centerTap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - - float4 smallBlur = centerTap; - float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w ; - - float sampleCount = max(centerTap.a * 0.25, 0.1f); // <- weighing with 0.25 looks nicer for small high freq spec - smallBlur *= sampleCount; - - for(int l=0; l < SmallDiscKernelSamples; l++) - { - float2 sampleUV = i.uv1.xy + SmallDiscKernel[l].xy * poissonScale.xy*1.1; - - float4 sample0 = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(sampleUV, _MainTex_ST)); - float weight0 = BokehWeightDisc(sample0, length(SmallDiscKernel[l].xy*1.1), centerTap); - smallBlur += sample0 * weight0; sampleCount += weight0; - } - - smallBlur /= (sampleCount+1e-5f); - - smallBlur = BlendLowWithHighMQ(centerTap.a, smallBlur, bigBlur); - - return centerTap.a < 1e-2f ? centerTap : float4(smallBlur.rgb,centerTap.a); - } - - float4 fragBlurUpsampleCheap (v2f i) : SV_Target - { - float4 centerTap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - float4 bigBlur = tex2D(_LowRez, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _LowRez_ST)); - - float fgCoc = tex2D(_FgOverlap, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _FgOverlap_ST)).a; - float4 smallBlur = lerp(centerTap, bigBlur, saturate( max(centerTap.a,fgCoc)*8.0 )); - - return float4(smallBlur.rgb, centerTap.a); - } - - float4 fragBlurBox (v2f i) : SV_Target - { - const int TAPS = 12; - - float4 centerTap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - - // TODO: important ? breaks when HR blur is being used - //centerTap.a = max(centerTap.a, 0.1f); - - float sampleCount = centerTap.a; - float4 sum = centerTap * sampleCount; - - float2 lenStep = centerTap.aa * (1.0 / (TAPS-1.0)); - float4 steps = (_Offsets.xyxy * _MainTex_TexelSize.xyxy) * lenStep.xyxy * float4(1,1, -1,-1); - - for(int l=1; l 1e-5f) outColor.rgb = color.rgb/sumWeights; - - return outColor; - } - - float4 fragCaptureColorAndSignedCoc (v2f i) : SV_Target - { - float4 color = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _CameraDepthTexture_ST)); - d = Linear01Depth (d); - color.a = _CurveParams.z * abs(d - _CurveParams.w) / (d + 1e-5f); - color.a = clamp( max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x) * sign(d - _CurveParams.w); - - return color; - } - - float4 fragCaptureCoc (v2f i) : SV_Target - { - float4 color = float4(0,0,0,0); //tex2D (_MainTex, i.uv1.xy); - float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _CameraDepthTexture_ST)); - d = Linear01Depth (d); - color.a = _CurveParams.z * abs(d - _CurveParams.w) / (d + 1e-5f); - color.a = clamp( max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); - - return color; - } - - float4 AddFgCoc (v2f i) : SV_Target - { - return tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - } - - float4 fragMergeCoc (v2f i) : SV_Target - { - float4 color = tex2D (_FgOverlap, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _FgOverlap_ST)); // this is the foreground overlap value - float fgCoc = color.a; - - float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _CameraDepthTexture_ST)); - d = Linear01Depth (d); - color.a = _CurveParams.z * abs(d - _CurveParams.w) / (d + 1e-5f); - color.a = clamp( max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); - - return max(color.aaaa, float4(fgCoc,fgCoc,fgCoc,fgCoc)); - } - - float4 fragCombineCocWithMaskBlur (v2f i) : SV_Target - { - float bgAndFgCoc = tex2D (_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)).a; - float fgOverlapCoc = tex2D (_FgOverlap, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _FgOverlap_ST)).a; - - return (bgAndFgCoc < 0.01) * saturate(fgOverlapCoc-bgAndFgCoc); - } - - float4 fragCaptureForegroundCoc (v2f i) : SV_Target - { - float4 color = float4(0,0,0,0); //tex2D (_MainTex, i.uv1.xy); - float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _CameraDepthTexture_ST)); - d = Linear01Depth (d); - color.a = _CurveParams.z * (_CurveParams.w-d) / (d + 1e-5f); - color.a = clamp(max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); - - return color; - } - - float4 fragCaptureForegroundCocMask (v2f i) : SV_Target - { - float4 color = float4(0,0,0,0); - float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _CameraDepthTexture_ST)); - d = Linear01Depth (d); - color.a = _CurveParams.z * (_CurveParams.w-d) / (d + 1e-5f); - color.a = clamp(max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); - - return color.a > 0; - } - - float4 fragBlendInHighRez (v2f i) : SV_Target - { - float4 tapHighRez = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - return float4(tapHighRez.rgb, 1.0-saturate(tapHighRez.a*5.0)); - } - - float4 fragBlendInLowRezParts (v2f i) : SV_Target - { - float4 from = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - from.a = saturate(from.a * _Offsets.w) / (_CurveParams.x + 1e-5f); - float square = from.a * from.a; - from.a = square * square * _CurveParams.x; - return from; - } - - float4 fragUpsampleWithAlphaMask(v2f i) : SV_Target - { - float4 c = tex2D(_MainTex, i.uv1.xy); - return c; - } - - float4 fragAlphaMask(v2f i) : SV_Target - { - float4 c = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _MainTex_ST)); - c.a = saturate(c.a*100.0); - return c; - } - - ENDCG - -Subshader -{ - - // pass 0 - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask A - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragCaptureCoc - - ENDCG - } - - // pass 1 - - Pass - { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vertBlurPlusMinus - #pragma fragment fragGaussBlur - - ENDCG - } - - // pass 2 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vertBlurPlusMinus - #pragma fragment fragBlurForFgCoc - - ENDCG - } - - - // pass 3 - - Pass - { - ZTest Always Cull Off ZWrite Off - ColorMask A - BlendOp Max, Max - Blend One One, One One - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment AddFgCoc - - ENDCG - } - - - // pass 4 - - Pass - { - ZTest Always Cull Off ZWrite Off - ColorMask A - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragCaptureForegroundCoc - - ENDCG - } - - // pass 5 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBlurBox - - ENDCG - } - - // pass 6 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment frag4TapBlurForLRSpawn - - ENDCG - } - - // pass 7 - - Pass { - ZTest Always Cull Off ZWrite Off - ColorMask RGB - Blend SrcAlpha OneMinusSrcAlpha - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBlendInHighRez - - ENDCG - } - - // pass 8 - - Pass - { - ZTest Always Cull Off ZWrite Off - ColorMask A - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragCaptureForegroundCocMask - - ENDCG - } - - - // pass 9 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBlurUpsampleCheap - - ENDCG - } - - // pass 10 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragCaptureColorAndSignedCoc - - ENDCG - } - - // pass 11 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBlurInsaneMQ - - ENDCG - } - - // pass 12 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBlurUpsampleCombineMQ - - ENDCG - } - - // pass 13 - Pass { - ZTest Always Cull Off ZWrite Off - - ColorMask A - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragMergeCoc - - ENDCG - } - - // pass 14 - - Pass { - ZTest Always Cull Off ZWrite Off - - ColorMask A - BlendOp Max, Max - Blend One One, One One - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragCombineCocWithMaskBlur - - ENDCG - } - - // pass 15 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBoxDownsample - - ENDCG - } - - // pass 16 - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragVisualize - - ENDCG - } - - // pass 17 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBlurInsaneHQ - - ENDCG - } - - // pass 18 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragBlurUpsampleCombineHQ - - ENDCG - } - - // pass 19 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vertBlurPlusMinus - #pragma fragment fragBlurAlphaWeighted - - ENDCG - } - - // pass 20 - - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragAlphaMask - - ENDCG - } - - // pass 21 - - Pass { - ZTest Always Cull Off ZWrite Off - - BlendOp Add, Add - Blend DstAlpha OneMinusDstAlpha, Zero One - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vertFlip - #pragma fragment fragBlurBox - - ENDCG - } - - // pass 22 - - Pass { - ZTest Always Cull Off ZWrite Off - - // destination alpha needs to stay intact as we have layed alpha before - BlendOp Add, Add - Blend DstAlpha One, Zero One - - CGPROGRAM - - #pragma target 3.0 - #pragma vertex vert - #pragma fragment fragUpsampleWithAlphaMask - - ENDCG - } -} - -Fallback off - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta deleted file mode 100644 index b38c974..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: acd613035ff3e455e8abf23fdc8c8c24 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader deleted file mode 100644 index 7c8713e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader +++ /dev/null @@ -1,69 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/SeparableBlur" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - - float4 uv01 : TEXCOORD1; - float4 uv23 : TEXCOORD2; - float4 uv45 : TEXCOORD3; - }; - - float4 offsets; - - sampler2D _MainTex; - half4 _MainTex_ST; - - v2f vert (appdata_img v) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - - o.uv.xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - - o.uv01 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsets.xyxy * float4(1,1, -1,-1), _MainTex_ST); - o.uv23 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsets.xyxy * float4(1,1, -1,-1) * 2.0, _MainTex_ST); - o.uv45 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsets.xyxy * float4(1,1, -1,-1) * 3.0, _MainTex_ST); - - return o; - } - - half4 frag (v2f i) : SV_Target { - half4 color = float4 (0,0,0,0); - - color += 0.40 * tex2D (_MainTex, i.uv); - color += 0.15 * tex2D (_MainTex, i.uv01.xy); - color += 0.15 * tex2D (_MainTex, i.uv01.zw); - color += 0.10 * tex2D (_MainTex, i.uv23.xy); - color += 0.10 * tex2D (_MainTex, i.uv23.zw); - color += 0.05 * tex2D (_MainTex, i.uv45.xy); - color += 0.05 * tex2D (_MainTex, i.uv45.zw); - - return color; - } - - ENDCG - -Subshader { - Pass { - ZTest Always Cull Off ZWrite Off - - CGPROGRAM - #pragma vertex vert - #pragma fragment frag - ENDCG - } -} - -Fallback off - - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader.meta deleted file mode 100644 index b9f6a84..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableBlur.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: e97c14fbb5ea04c3a902cc533d7fc5d1 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader deleted file mode 100644 index 1fe8cfb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader +++ /dev/null @@ -1,244 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - -Shader "Hidden/SeparableWeightedBlurDof34" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - _TapMedium ("TapMedium (RGB)", 2D) = "" {} - _TapLow ("TapLow (RGB)", 2D) = "" {} - _TapHigh ("TapHigh (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - half4 offsets; - half4 _Threshhold; - sampler2D _MainTex; - sampler2D _TapHigh; - - half4 _MainTex_ST; - - struct v2f { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half4 uv01 : TEXCOORD1; - half4 uv23 : TEXCOORD2; - half4 uv45 : TEXCOORD3; - }; - - struct v2fSingle { - half4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - }; - - // - // VERT PROGRAMS - // - - v2f vert (appdata_img v) { - v2f o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv.xy = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); - o.uv01 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1), _MainTex_ST); - o.uv23 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1) * 2.0, _MainTex_ST); - o.uv45 = UnityStereoScreenSpaceUVAdjust(v.texcoord.xyxy + offsets.xyxy * half4(1,1, -1,-1) * 3.0, _MainTex_ST); - - return o; - } - - v2fSingle vertSingleTex (appdata_img v) { - v2fSingle o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv.xy = v.texcoord.xy; - return o; - } - - // - // FRAG PROGRAMS - // - - // mostly used for foreground, so more gaussian-like - - half4 fragBlurUnweighted (v2f i) : SV_Target { - half4 blurredColor = half4 (0,0,0,0); - - half4 sampleA = tex2D(_MainTex, i.uv.xy); - half4 sampleB = tex2D(_MainTex, i.uv01.xy); - half4 sampleC = tex2D(_MainTex, i.uv01.zw); - half4 sampleD = tex2D(_MainTex, i.uv23.xy); - half4 sampleE = tex2D(_MainTex, i.uv23.zw); - - blurredColor += sampleA; - blurredColor += sampleB; - blurredColor += sampleC; - blurredColor += sampleD; - blurredColor += sampleE; - - blurredColor *= 0.2; - - blurredColor.a = max(UNITY_SAMPLE_1CHANNEL(_TapHigh, i.uv.xy), blurredColor.a); - - return blurredColor; - } - - // used for background, so more bone curve-like - - half4 fragBlurWeighted (v2f i) : SV_Target { - half4 blurredColor = half4 (0,0,0,0); - - half4 sampleA = tex2D(_MainTex, i.uv.xy); - half4 sampleB = tex2D(_MainTex, i.uv01.xy); - half4 sampleC = tex2D(_MainTex, i.uv01.zw); - half4 sampleD = tex2D(_MainTex, i.uv23.xy); - half4 sampleE = tex2D(_MainTex, i.uv23.zw); - - half sum = sampleA.a + dot (half4 (1.25, 1.25, 1.5, 1.5), half4 (sampleB.a,sampleC.a,sampleD.a,sampleE.a)); - - sampleA.rgb = sampleA.rgb * sampleA.a; - sampleB.rgb = sampleB.rgb * sampleB.a * 1.25; - sampleC.rgb = sampleC.rgb * sampleC.a * 1.25; - sampleD.rgb = sampleD.rgb * sampleD.a * 1.5; - sampleE.rgb = sampleE.rgb * sampleE.a * 1.5; - - blurredColor += sampleA; - blurredColor += sampleB; - blurredColor += sampleC; - blurredColor += sampleD; - blurredColor += sampleE; - - blurredColor /= sum; - half4 color = blurredColor; - - color.a = sampleA.a; - - return color; - } - - half4 fragBlurDark (v2f i) : SV_Target { - half4 blurredColor = half4 (0,0,0,0); - - half4 sampleA = tex2D(_MainTex, i.uv.xy); - half4 sampleB = tex2D(_MainTex, i.uv01.xy); - half4 sampleC = tex2D(_MainTex, i.uv01.zw); - half4 sampleD = tex2D(_MainTex, i.uv23.xy); - half4 sampleE = tex2D(_MainTex, i.uv23.zw); - - half sum = sampleA.a + dot (half4 (0.75, 0.75, 0.5, 0.5), half4 (sampleB.a,sampleC.a,sampleD.a,sampleE.a)); - - sampleA.rgb = sampleA.rgb * sampleA.a; - sampleB.rgb = sampleB.rgb * sampleB.a * 0.75; - sampleC.rgb = sampleC.rgb * sampleC.a * 0.75; - sampleD.rgb = sampleD.rgb * sampleD.a * 0.5; - sampleE.rgb = sampleE.rgb * sampleE.a * 0.5; - - blurredColor += sampleA; - blurredColor += sampleB; - blurredColor += sampleC; - blurredColor += sampleD; - blurredColor += sampleE; - - blurredColor /= sum; - half4 color = blurredColor; - - color.a = sampleA.a; - - return color; - } - - // not used atm - - half4 fragBlurUnweightedDark (v2f i) : SV_Target { - half4 blurredColor = half4 (0,0,0,0); - - half4 sampleA = tex2D(_MainTex, i.uv.xy); - half4 sampleB = tex2D(_MainTex, i.uv01.xy); - half4 sampleC = tex2D(_MainTex, i.uv01.zw); - half4 sampleD = tex2D(_MainTex, i.uv23.xy); - half4 sampleE = tex2D(_MainTex, i.uv23.zw); - - blurredColor += sampleA; - blurredColor += sampleB * 0.75; - blurredColor += sampleC * 0.75; - blurredColor += sampleD * 0.5; - blurredColor += sampleE * 0.5; - - blurredColor /= 3.5; - - blurredColor.a = max(UNITY_SAMPLE_1CHANNEL(_TapHigh, i.uv.xy), blurredColor.a); - - return blurredColor; - } - - // fragMixMediumAndLowTap - // happens before applying final coc/blur result to screen, - // mixes defocus buffers of different resolutions / bluriness - - sampler2D _TapMedium; - sampler2D _TapLow; - - half4 _TapMedium_ST; - half4 _TapLow_ST; - - half4 fragMixMediumAndLowTap (v2fSingle i) : SV_Target - { - half4 tapMedium = tex2D (_TapMedium, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapMedium_ST)); - half4 tapLow = tex2D (_TapLow, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _TapLow_ST)); - tapMedium.a *= tapMedium.a; - - tapLow.rgb = lerp (tapMedium.rgb, tapLow.rgb, (tapMedium.a * tapMedium.a)); - return tapLow; - } - - ENDCG - -Subshader { - ZTest Always Cull Off ZWrite Off - - Pass { - - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragBlurWeighted - ENDCG - } - Pass { - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragBlurUnweighted - ENDCG - } - - // 2 - - Pass { - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragBlurUnweightedDark - ENDCG - } - Pass { - CGPROGRAM - - #pragma vertex vertSingleTex - #pragma fragment fragMixMediumAndLowTap - ENDCG - } - - // 4 - - Pass { - CGPROGRAM - - #pragma vertex vert - #pragma fragment fragBlurDark - ENDCG - } -} - -Fallback off - -} // shader diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta deleted file mode 100644 index 2fae7fc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: bb4af680337344a4abad65a4e8873c50 -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/TiltShiftHdrLensBlur.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/TiltShiftHdrLensBlur.shader deleted file mode 100644 index 5d2c3c1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/_DepthOfField/TiltShiftHdrLensBlur.shader +++ /dev/null @@ -1,382 +0,0 @@ -// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' - - - Shader "Hidden/Dof/TiltShiftHdrLensBlur" { - Properties { - _MainTex ("-", 2D) = "" {} - _Blurred ("-", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f - { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float2 uv1 : TEXCOORD1; - }; - - sampler2D _MainTex; - sampler2D _Blurred; - - float4 _MainTex_TexelSize; - half4 _MainTex_ST; - half4 _Blurred_ST; - float _BlurSize; - float _BlurArea; - - #if defined(SHADER_API_D3D11) || defined(SHADER_API_GLCORE) || defined(SHADER_API_METAL) - #define SAMPLE_TEX(sampler, uv) tex2Dlod(sampler, float4(uv,0,1)) - #else - #define SAMPLE_TEX(sampler, uv) tex2D(sampler, uv) - #endif - - v2f vert (appdata_img v) - { - v2f o; - o.pos = UnityObjectToClipPos (v.vertex); - o.uv.xy = v.texcoord; - o.uv1.xy = v.texcoord; - - #if UNITY_UV_STARTS_AT_TOP - if (_MainTex_TexelSize.y < 0) - o.uv1.y = 1-o.uv1.y; - #else - - #endif - - return o; - } - - static const int SmallDiscKernelSamples = 12; - static const float2 SmallDiscKernel[SmallDiscKernelSamples] = - { - float2(-0.326212,-0.40581), - float2(-0.840144,-0.07358), - float2(-0.695914,0.457137), - float2(-0.203345,0.620716), - float2(0.96234,-0.194983), - float2(0.473434,-0.480026), - float2(0.519456,0.767022), - float2(0.185461,-0.893124), - float2(0.507431,0.064425), - float2(0.89642,0.412458), - float2(-0.32194,-0.932615), - float2(-0.791559,-0.59771) - }; - - static const int NumDiscSamples = 28; - static const float3 DiscKernel[NumDiscSamples] = - { - float3(0.62463,0.54337,0.82790), - float3(-0.13414,-0.94488,0.95435), - float3(0.38772,-0.43475,0.58253), - float3(0.12126,-0.19282,0.22778), - float3(-0.20388,0.11133,0.23230), - float3(0.83114,-0.29218,0.88100), - float3(0.10759,-0.57839,0.58831), - float3(0.28285,0.79036,0.83945), - float3(-0.36622,0.39516,0.53876), - float3(0.75591,0.21916,0.78704), - float3(-0.52610,0.02386,0.52664), - float3(-0.88216,-0.24471,0.91547), - float3(-0.48888,-0.29330,0.57011), - float3(0.44014,-0.08558,0.44838), - float3(0.21179,0.51373,0.55567), - float3(0.05483,0.95701,0.95858), - float3(-0.59001,-0.70509,0.91938), - float3(-0.80065,0.24631,0.83768), - float3(-0.19424,-0.18402,0.26757), - float3(-0.43667,0.76751,0.88304), - float3(0.21666,0.11602,0.24577), - float3(0.15696,-0.85600,0.87027), - float3(-0.75821,0.58363,0.95682), - float3(0.99284,-0.02904,0.99327), - float3(-0.22234,-0.57907,0.62029), - float3(0.55052,-0.66984,0.86704), - float3(0.46431,0.28115,0.54280), - float3(-0.07214,0.60554,0.60982), - }; - - float WeightFieldMode (float2 uv) - { - float2 tapCoord = uv*2.0-1.0; - return (abs(tapCoord.y * _BlurArea)); - } - - float WeightIrisMode (float2 uv) - { - float2 tapCoord = (uv*2.0-1.0); - return dot(tapCoord, tapCoord) * _BlurArea; - } - - float4 fragIrisPreview (v2f i) : SV_Target - { - return WeightIrisMode(i.uv.xy) * 0.5; - } - - float4 fragFieldPreview (v2f i) : SV_Target - { - return WeightFieldMode(i.uv.xy) * 0.5; - } - - float4 fragUpsample (v2f i) : SV_Target - { - float4 blurred = tex2D(_Blurred, UnityStereoScreenSpaceUVAdjust(i.uv1.xy, _Blurred_ST)); - float4 frame = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - - return lerp(frame, blurred, saturate(blurred.a)); - } - - float4 fragIrisLow(v2f i) : SV_Target - { - float4 centerTap = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv.xy, _MainTex_ST)); - float4 sum = centerTap; - - float w = clamp(WeightIrisMode(i.uv.xy), 0, _BlurSize); - - float4 poissonScale = _MainTex_TexelSize.xyxy * w; - -#ifndef SHADER_API_D3D9 - if (w<1e-2f) - return sum; -#endif - - for (int l = 0; l _Params.y) { - // This sample occludes, contribute to occlusion - occ += pow(1-zd,_Params.z); // sc2 - //occ += 1.0-saturate(pow(1.0 - zd, 11.0) + zd); // nullsq - //occ += 1.0/(1.0+zd*zd*10); // iq - } - } - occ /= sampleCount; - return 1-occ; -} - diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/frag_ao.cginc.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/frag_ao.cginc.meta deleted file mode 100644 index 604d5f5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Shaders/frag_ao.cginc.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 51ae11a5cd82fda468a85179946d672a -ShaderImporter: - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures.meta deleted file mode 100644 index f926ce3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: f9372f23586ef470b97d53856af88487 -folderAsset: yes -DefaultImporter: - userData: - assetBundleName: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/ContrastEnhanced3D16.png b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/ContrastEnhanced3D16.png deleted file mode 100644 index c112c759136f7175470e2f3530677ec5b85d93b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2935 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

^*B{)~s32{pfnun$6&`Gv{zTr~Z?1oCGC& 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�ac0WR6N^*{V8-(sYK?Q~1m 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�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 NfBXOc-~SgR@P92b81Dc8 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/HexShape.psd.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/HexShape.psd.meta deleted file mode 100644 index fec782b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/HexShape.psd.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: a4cdca73d61814d33ac1587f6c163bca -TextureImporter: - 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 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 64 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: -1 - buildTargetSettings: [] - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/MotionBlurJitter.png b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/MotionBlurJitter.png deleted file mode 100644 index a601a2e95b1c1a6219bb506e42c18054b51f509a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14549 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 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/MotionBlurJitter.png.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/MotionBlurJitter.png.meta deleted file mode 100644 index 2e825d5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/MotionBlurJitter.png.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: 31f5a8611c4ed1245b18456206e798dc -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 2 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: 3 - maxTextureSize: 1024 - textureSettings: - filterMode: 1 - aniso: 1 - mipBias: -1 - wrapMode: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - textureType: -1 - buildTargetSettings: [] - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Neutral3D16.png b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Neutral3D16.png deleted file mode 100644 index fc0f026e0048e1f233152303be58b79c5c32ac97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2848 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 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Neutral3D16.png.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Neutral3D16.png.meta deleted file mode 100644 index 43038ad..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Neutral3D16.png.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: a4b474cd484494a4aaa4bbf928219d09 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 1 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -3 - maxTextureSize: 2048 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 5 - buildTargetSettings: [] - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Noise.png b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Noise.png deleted file mode 100644 index a601a2e95b1c1a6219bb506e42c18054b51f509a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14549 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 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Noise.png.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Noise.png.meta deleted file mode 100644 index b48fd5f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/Noise.png.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: e80c3c84ea861404d8a427db8b7abf04 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 2 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: 3 - maxTextureSize: 64 - textureSettings: - filterMode: 2 - aniso: 1 - mipBias: -1 - wrapMode: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - textureType: -1 - buildTargetSettings: [] - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseAndGrain.png b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseAndGrain.png deleted file mode 100644 index 9faabd49190a258b735bf34d8cb9af295b5da0b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5734 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 YzoV)8GOSV{EC2ui07*qoM6N<$f=NJfRsaA1 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseAndGrain.png.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseAndGrain.png.meta deleted file mode 100644 index 387edde..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseAndGrain.png.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: 7a632f967e8ad42f5bd275898151ab6a -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 1 - correctGamma: 1 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 1 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 64 - textureSettings: - filterMode: -1 - aniso: -1 - mipBias: -1 - wrapMode: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - textureType: 5 - buildTargetSettings: [] - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectGrain.png b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectGrain.png deleted file mode 100644 index ba027b44360be4ec8d36ae018b138dd11280101d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128100 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

dzqhA53S>`+ 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 z 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 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectGrain.png.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectGrain.png.meta deleted file mode 100644 index 47510da..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectGrain.png.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: ffa9c02760c2b4e8eb9814ec06c4b05b -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 2 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: 3 - maxTextureSize: 1024 - textureSettings: - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapMode: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - textureType: -1 - buildTargetSettings: [] - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectScratch.png b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/NoiseEffectScratch.png deleted file mode 100644 index 6ac0d5352d2aa59ec54fff6216452053912b61e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2996 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 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/RandomVectors.png.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/RandomVectors.png.meta deleted file mode 100644 index 3c35afc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/RandomVectors.png.meta +++ /dev/null @@ -1,35 +0,0 @@ -fileFormatVersion: 2 -guid: a181ca8e3c62f3e4b8f183f6c586b032 -TextureImporter: - serializedVersion: 2 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - linearTexture: 0 - correctGamma: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapFadeDistanceStart: 2 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: .25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 0 - seamlessCubemap: 0 - textureFormat: 3 - maxTextureSize: 1024 - textureSettings: - filterMode: 0 - aniso: 1 - mipBias: -1 - wrapMode: 0 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - textureType: -1 - buildTargetSettings: [] - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/SphereShape.psd b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Effects/ImageEffects/Textures/SphereShape.psd deleted file mode 100644 index a100649160719b85b695058e36dcc0d725bdcf69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492716 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∋_-ezr-! zVdt4O@}XJRWmo~}fLHze$ISy-BG!d5dKDLekmT#8MZsoeT1i=V;^wG zYy9N~kh;vKpqcNm#4*JuR3!9cIIbT)L%x$oHN54^w36DiBSy)T<8J5D9~ zupjz2TGEkLhqgxcQ`v^Hv?jp3lK?#Sh*8)@zqg{6!DAshB#WG#5L(ni;bCI7p+|Zs zg#6?$hGRD57uVa-V8GT(IlB^tva~4BoRXhpAVi;||HaY}IK`&MNRsdrBkHKd!I>7q z_E87b1#1_*dDpa2y(p#5mVfyusWeX40TZuz?9;W3&{+Gr*fDESz}$J`aV=U}N`HgP zG?jC5A}zL}sz(I6=ETV;wX2p49>mx@kq;+XLvTMbx2d0k| z3(3o7XBK2SXH{$NHh9VnGry^ZsYk-pX%WZj^Ii(Hxkqa$dS`>`X>1BmPwbAY)~0HX zNgSr5Xoh)n44!ezfJiYO)(PRur`4(5tpEIpYbOp+O-njxcBT?U$~yEI zcK)sZn7f6vQs?cx{I2Rvs}e=gUY5tp+93+jgg-+hp5H9J{-YrwmK6zTDJ+9up_*t8 zljz8M*^6ElVjE4r*;d*kjUoh57DM?o2|XVGJ!yZ&Ef zO%j_?q!>sO*LwLX?FdH4yByoM@w?}4JZG@CZ2lz(5@@$$uTj(Pe0{;z1Db^8IFYp= z3}tHUl(N=C^k9dRdtAq!X6F3oB`3++I>rwPO_eY_mL^%S?yOzBOEIr>Rqer0$g|F9OC>K&kgVTMEias|T2N^P zE1jLUS}SRr6&j`0ph`XHQajFdUqlN66O@{nw_krIEHms82BB4^VID>!m%>m6p$!+i zSjr_Kjce!~4Czof=!74Hr7s&sGLV*6EE`btW$EG8O&^I;eA%|(^*g7H>fKTLCIfYJRVeRz#w=#A@;C8C(S-tUB*m=)bGfecQZdd- z+_tCqy4(TwC&UszIR4|D;ROU3F1;zzt1}3WW;u-AO=4WgxfmObLCAt1#O%-LF`hsc zn#1XnEGxGpAgRb!E{G~SIX((4B8p_i8G4GcC5~xd;J*XZMZu-&oxfZ@#;Nn0Ooi0j zx#W%mC(U^LGliC7Z6%CGrJ==Ib)*DVUP;X(yP)!PMJHuUt+2t30RWBw7!j!AE)R%Q93S`3NIK@mmK){U@e$;;GGaOqFA^Tc?_?>DY2YLo1pwuuhJ{#1$5NyUC`DG zbBp7uQfTxnigT7s!lO0ND1pVy$0zEz0P;xPiVq&Ta(w?T#-qR!K_czD4?gFHXTPo9 zqsU8YtU_)#LOXa(z8J;F&Q|@lw?p|cq3lG zm9FzJ2a;}SHW|lpoJK3h$)I84DFYmVZ0Vr$uvZ%z)32U~Q>PQDW-1E{+8C+EOOmD8 zWf+VQDc0gzmA;FDwo~Jg`n8`ue(j`z)-C}NSF?ncm*##?XgRYOY*lTr>UWwKnci0! z%6o5%7iDy;pPFFC|4L4Agmp92i zGP-mca+&WJLEr}@yJ?h7d4gqFt6EF+0-Xg>L7_OM|5fc#fY2FWhSz*Y9fdiHSb9g& zKPl&ci0-u2vkt7b5HIXxir(ew>hZ#O6-(n zXJyX{JD1=4_M&Zs-`04vR4WY+s@w6ZGCxM%Hk`GjU|J9!s)vX;O4aC_kFG{QL5ioS zKO;IEj;6WCwie0as-W`dcY=m7eVW;bd`A)zPG>Lb9wQS>NAM;+h&0 zX2z=Fz@QcBx-=ZvTKUFZm!8>&szLS(9jSH$>7;S30TZu!=>4U&2W_N=2@yxb{Dsql z->ZXfO-3XdMAAVj6$7yvi@J=8&=!l8?ki`v5MvTWu^PUG4T^v?vR?5m%&9ocAtX&Q znMhNj3k=rmu?NMQ-s3JBXbN+JMu3CqM>VP}_w8n}SK-AE*RESXfLU9PL~KK&2G%fb zmO`;@(cAZ?@%M8PJ3YzT=P#Lp|uA*3B?>)|yVy_=g(NUPMup z=|JrgBy@kO3YW49bC;yN1LaBd8II2Sco<2e41hpP4c@N{(?6&4esGHw67&Mpn9j7dH2mx{WEL^ds|CDr|W!P{9d5j7m`vjul;I9OZt&-*pc$^USxt z+U|oU&3NqNmCE_k24R>&Q(?_jnXQ)PT0Yys3Xvwv{JsvwkP01?6R#Jzxsg5AS~D7V zwOdv#Dn?3Vc@}$dy%@b+rh^#IaTAG2jhuc49>IF(nnAZneoiqo2RcxgNET!lE{Ya+ zOH+BzR5w)rhi|z6C~67|6rn_Yuy)D&4@y*!oW)rXNV1)kopm2P`S(wLwpy|@ZtQ2N zi9?X)XDTjg!{h2Q?nPU^75Q4&(5oa>1k>qk^snZs#TDXc8t@3<}Rq)?$@Cj{u?#Zgt)KnJTy-Q@yq z5+>1GN6rAqq1t7$9=Y1H)yM#ev%fA?x;pfn8=n4rjR5hp=BdoGqc04p7$6ou1xUxD zuAs`n4PREg7dz&aYM$0*ukwB*y9VP;1>^;X6@;`d)VfU;>NT?XRE{Yw;N$qaaKaFB zGKiMu5B~;8vA`jcfF-`7LpJ{N7G6ISSJw4m(0PLmhj7gnDy zg=EL_43Wcv62G&LKCYL(}M3 znGmNn%7uE4q$FOLT_nk!NMI(*x)wV)8;lnFr1KR;0FDFzx-=Zxx#FY8W=!_<{Ufcv zfRA+SHT?XWXMX9+AB>*TwHDU(W%-aIHes~5ZcPUx3gd~w;_M<1r}&T$Eu$$Y>R=}hov6l~1zV6-Fe_8{%Cst>SyZX# zn<+dnq>Ix2g`HM0vM}eMJlea)>Z5WFOWs@PLP*rD{N(ZLCJ(V1>Ho}pV@OC?jyV73 zX9E&RLw750Y2L)zT07K=h-=!VNOZ6?&FG>~m09c~IfaU5Ij<+#@TJUJ>!op@h4uetK##OZH*DCmK2u$LYt312#0j6 zc-1Riw1$*zE}~`o>sEdG#P6pJF$wvh7M<5a4z=j8{mR_!dJba*29UJ;+k1L%77ncY z)V_+WaPM7u7au_p~r1h-B=DLhA?_0H|aBox>a~AHB>g zJi8)V+QWy`rV{DR&nv=sCpK^E?jBU2&-_XeZ-}egbJ-g`qS~RhZVW!vfmWnDSiAhA z$AiVk*$*;bv|{`lpZR>1DWm^z%Cr8p&jT6fiSesDNEx}!uZ&l;p?F8Sb5c;04NW@SEWS^5o6e!N_jTF&1cBM~6xL3-A7Mh9)qm@dQu zls9*>pl|0{7;BMHDgv=~go+%WViF0TYnC>mG7^K7;~fJsV+t=yrsXfdMdDx&LU65s z%#jsnYMVS zn2^hpADA7af{tJPfsjUg-sQp`e4sGga68XVx_D9B!J=+-Qd9tA@}6W1I$(0TB5$RF zp5_5^0URKu{kXb|-TDX-C_CC+--Y}LBCyaW2JCw5z}7|oeDLZ?gDv*S2xetI78jTo z44pFLk@u^%9Z)qXY3LaWk45<>?yu>~p#UT?X`!>A1%3^+~KjPCzffa8L{!64dU~>7;arcVJ@5J$N#%mC|x5Ge*TS!BA&} z5Cv`g*c+cl2_}R)nG!ghD#7lJNB7k%c>De1H1YjUoP$u9RyJ}xqCC#KqQduJ3(75K}5;;e_^o$}q zrb;mIqufKrv3Fm`kUV={(4+Cl-p%E2+&g{3z-|tPq47U6-8K3~203WrmG`|>@%^47 zg2O~%3s=+;B>S2;2nHex;Uub&MZt)&OhHoYE$vbf$&)jRYX~53J|)H*X70pD{YO4& zj}r0}2{ZDJIVOWCa1*xPfpi*!;hpqn0o_3&0mHGX8fUQ*Po`t#3fUz~qh)8bVht6O zHh*uePNxl%$Q}H?Af-$4nJx{7>#OIya@XbK`h!cHeJ3+3)76S7113zr=e0T2yQrch z4c&?^6WFu8$4?cN;_A*D)_ZZm1XH9kTbWlLxv>{s3x_ZCy%9R(zCWZ%P+pY*K(Qxc zu}C}6s3|(Cw^)vYC@7G~UgvgTN!Yn$G87pj3gQb&;m^3LMEqG;enty@STV`;lOm|O z3k2FOO&8SmRJySCo4?6m_$7a}3?er6cm@UH#GUUtXdzh1Lb9Y50PA`)Iv>boN- zM>h_?5|#E>w7ea4B?^v_QYbnYl0EE^h=8Tk6ilr-@z=}^oVv&)u8E6(sfpZf=$nh-tI^ET={*e|`V#)IgJPiNk8 z(V2ZIFBP=<_pk%i75k08_?DTUF0VasG-~YXi!Wx5eI=V2-XeEY=4|D73m?&nww69F zUR+p|mxi$UWs7*?P%<8@8rrwpb;N%17PZIoX+~_Up%+=E3>qAf4Ts9ihV+zI73Lrb zL!sHyhC~meNt7}polE2g@k(pV*boG{VhVu>A|#84k|Vv-*8j2n+p0cz{D!F``*bz~ z5Hq}!dDl_s(r4uPH$479)z+7NS#E*BJFvsW`&iAeW<~1-A6dWm}z?98ch#gxN{PW>!rwr?*(GUfX zNafXcGXHO;8#d9o_waLOJoL{6TlP9#CP&*B;TS4SQD-S7*BWl3ofq_Vh#yOr$}~b7+yaIbja_)@U(gLMGLTQY3KCLOFjZ0^K7bVoor(Jc zP0MBR@_0q5q{QlYO^M7QuKo{e`%^nGK9EZk1y!jhRNWhn)Nh*i#(h^#8q%YqVeq=v zpJcm|QuQ1%>B_&nKCgQBp@yijV=J%dZuD5pCdCO7F3=;1m8;AAl5CaSf_a%l5Bm^7 z=F5K+1UdRMYVJDI*^bHsBI2l4>EXmzt@Mi7OxeC*Q%;@}@sT!WX}om`%F#*&@!BD# z6|~`j0G$0~{t{1WPD(sw8ychI%9`uefA`XzS4c! zW+xnwG_*^tzY~Murlm!JaZT?apiDv8YVG)Lyre|YAa6$qa@w1dj*QNb!|(vO%KzaKSpvCLj%3}}^)^pvqdjKYTB-az?5i>*`8l@T zwejeI+7+KaciXfv7V`?W(t?VFUCP>b?KkG)TW5Z#QD*-x#1U(KRfkKb_qNaOmv ztv{!oE^8;6n|l3U->uwSe?)fOwm~VAbkHvk7PBT_zInFsz1g*|e_6aVv!tM;F{5xt zi(`Q%3T2`{+S0AqW648g%g4PjV{NgyGDo!LtNN)wIt5DnXyJbOsw!@>@aBbO)=pg( zEl*Y?E89^IqDUTBm#8!n*Yu}p#-c4pY%PWxk0)C8k@}7E-hAMiKxsKG`=2U~;m)0V z4V!%ReXq^lAh8oQmdTw}6ig0{3e^HE97Wu!Y>oo-v3E>7UJ_~DxU`=oDpaaYro~GN zY7JPoiyr(K0@r{1s>PE_huqR`nzfy0;o5P9G~``Qd)} zj%JRGP3e43Jw2447l@T1+48N6s3@;F(%32{CF-A@QkgtbsW6e5D`Acq`q6Lg9uN7v zPOw_gBjiyG%6a9_GQdQyCW?h;^98}L;Wh1gRY9GAvpIcfwNM67*!p5&#I%hEGxvBV z(n$=l_)KG$Bm1^5|7_;1)5e<1pSJbKtiP;7xBg=;y7{RO7jM~fSTmGV@?)o}s^*(0xl6FO^)3%H1;+i(L?zp<6w5`>Ktw6}a z8I09c137)|j3h2LUy#Fd@`Iq>Y;5Q2j^>|cm#x&HXK0sKROrQA)TIKyC|$YJ!uFo` zE5D0GCDGEeybS2mM(Ji7zXy85(M4}w4@}DdrSN;_)!)2)?^TnBqF%Du7cy_C_TLlb z(sS@x)9-lU^JQBlT~PB$!|;j=68&CXR2V=i;@=nl^+qsrqU#2FeZKlDFV^Btjgp-XlSL!E8;Utn5l~VXAEX|AHI;Nz) zZo`JCy3@wZA*|Kb?u_etn0#f~mcFp#(eXBoNA_%4-0{PwZ@qN8E`VqG5~_tqW133ir+cu(n3n)M6b9y**L^Z+uS)Q z6)W#+r6F0-Qp==OHq3dWz(}OXr`@yrN1^cMD;|r(AXK%U`dC&l-o5u+b4d ze277_eR~ls=+h9!Im{)67H??l3T;(kWkL;DiCd%{7VmoI=4T(Z!)j3Ew3BuOv7B~( zUR+l=ww^Aqs=)hOLK;O%DjYs#_ zuK41GKexN$tRcO~M&j)AnU}RfcC%xTLE|sE_34imZ>c}rFp^=K0v(ZnB9rPdIc;Wk)#_+XvUaqS^CosPq+PYXpQ#=R{M@MhY~OHb_ofB!KYrtd zZAbU-Mu3X5&t+bc@v2hQzFWUhQ^ixW*X}sbS34Rqa0^gHijM2L6gQNlqqy9)@tRl* zE|Kz%mu0lx=BjpdG#2Xr^@I({w4W+YHSH`e$!Cj^$#e-F%kH9R zE7p;1QLbAX1-^=xXO^u zFtwzNlCg3LknRJ8wmFBbmSLRi%EH7v6D0$JY zOYdQmrr-Wd*@p`^?LK7b(*O^&zB=)duTC*X?5pLKXe;AQv?bbytz5G@lFLRb5^ZIK z&uWdNR6p9Zh9)+&tr?YB)HjsPQUjCi=5?i+IyOD4chWf}SFQ(@JGYTD4iPr^(1_TQ*V0n(kJB$AF_XCCV%GEw!!9wyjCk z4^~Dwt>xNfJ<4~r#Gj;%JBWeEy%eE*B3I6tEH9C8inPdBgcPsq9{4vxNTQfBdHf4nc*)6e(Umg=e^blR(UvZ4(n9x}TnbJK{r;li z$o|^3bKd^zP1D8=>Z$!KDapp!|I9om0xq-7>^FYYdDquJf6F{0A1#GvJNFtq{*s#>dE>iP+m-Vdw0~Vgb&sXdA&TqU82!YxCGyay zCc8!c8C!_StdG}~C=tZQva4mS1zBqWU8Cilva|>xueE5mGE4KSi(A!#0%al_&8SQ( zmt2uuxhlU}W?;LQm=H=fbtvxN_PDlt>1{rzrFpLS(Vk2`?gHXv=lRq5B#E4Kyf<_MD%^Uxg#S{ zA*$romZ-Yh%y=;z5^EphWv6AY5e0WGkyR0H5*zPOhxYE$ULli*9sMoypITz3 zq`P*q=Rk4JeJ_2!UY%XDHd>dgg+}wT%rbZs6_9MrZqv?X zcZf^-SgNwua+RWaicPh54Mz{uRWJPHg}bjhcVxfr#K>6ZUH_JOQVZ*)y=&jK_t1%# z-2CVp-z?v<`ydJ^ZtQOE=c3m6G_Egm2aIYM{|ml2bv|LKXhzgt;Tf2hSW+Zur$5QDa} z5Gm0f@60Gi(dsbHWJ^ZInQTh5yjaV#P#Le!tSgx0E39gkFGf(!${Z`T@;4=Lf`MMO zzOyS-FClD-HfMdyl5H6+tgRd4?zp~t2n{U`7i(d^XgqqTzGm51uRU_}Ws`>W=}K^j zY-N8FY4(CwdJH)8+$;b5)Vp(5Z`-4Fv1>^~uQc?h++rpf)wK@^$+oQpt*p!=VNTpB zf)RffWM1)_=GAa~UVEdUw(7K2l381@(3V-B+n`r(Og1Oq$6FFvUWt4v>`z)x3N`JEv=G;o`4SXO_a_J17q=pANLU1Wv31p) zcb~fbcjt^6-~lY3ZMH>3l3|!x`>wqPkG?MP?C0amcOX2%ub9U3lQz8j{&vlvg&FkXzrxepNa{Qn4&2f=jb!KC36FZQY z@5g3H=KR@RGNd+UNb!N>U~;IVQ(N$obOG`nG0^=+LDb`+fH@-?N1j>4u$?(zcxbVJkn z%=)GcKUNnuW;bn)zE_RMJX?xBlI0{j#FBOP#XIcT8+hwre5lO7c?! zJEGcTd$cX1Er{h3rVnG8(aGvqTk%tMcB6iibI)xKCa)jak=Ys5wcE8Dv9m`;-vL^3 zlZlU(2=Z9rBx(GGjAq-Kd9$9qd&WiMhq?#H%1H{vubyQ4WB=yM{YOl?^alI-IDnj4 z(8mqgW3rz%7GI(RrNq#yoGP~m4NqvbnAl|3FJ&^hL9q6UZ|6qO1>bbL?yXU%#CJgJ_ z&ErR2z&Du#U_Y^(z#>WKo?6Hy*WdTzhx1q0>^^YhSWcVJ);HmBd`PBwpv={IL5`qL z*FHo$6754l`%tKfAl)soh_}6bS_UJViZ&HCXEqnUFKpJ|Z)ws-B+4KniEI6AU9u~) zTTZnn(`p4JvY~VdtE~96zitUt5jR zLq*gJ`pQX3KYi!UJ^BrsaM6rApM2wsh3mK1ALM8#7NlP5u~;U=ch=S(&?kj29XSgL z{Jb3a^tNbgQWI^>$vm32X7oET)ArNmqz-YuKC>qd5GOK{=C4H2zcI@7F=(wp@-ulQ(AInO1?LVS(&T;s* zku;-!+sOPi*&D-|Lbz;a-A)<(53-d+4AQJGm~79~7PgltA;`%Z;+@S!Yl!q!q4LbZ zNMAJ$))1Lv_C9uaf8F;h=FEEWft#*4XY`=n3a%#h4%l~XZ26wudJh^s(yC2DD`E!3Ve1I_P>!cG_V#oB4;IdiyB zG*EV0QF4!M_0xC%{*p-}2c$%|*S=AMIK%e2Lzi9yMoyY`-Ca+;@x_9*Tk$WLf|SC) zk(PQWwr}M7+*Dtpc==OZVP~c;zq26bD(w7GASJt-J*-v2~Y_G4rkwB_h zUH<8-kKKOtg%gJN>(LoS9A)>|S30Ijf8XFO!zWyD)vXWzeb(${8*A(NN^xW6xS$TU z7n|P~Y&UZX9eJUY+m)${^}RB6xm|hjSt1vX^nG&rJ|L8CTIN`!gtu_KZ{x8e2kN(P zsQUKZ=O4Iv`gvoA^zClnC(iB)-zT3vBZ!I4-TMw6J>{}L-2K!WpUq#ndFS4Pz$Bdb zPRX%?cCH1dX7dMj??-*FOnvk2Mzi$%zG%O`bMc#iOhH;;fTnYf9Ne>G|Ll#Y@4a#Q zdEq_Mv&cYl5Drj_Miy#3q*f4uU-i6emneIc1w zYkRXN93eC;I&|&XZ|ImQmtObhM_%~nmlZ2F$z=4oLZcwhip-Al`tY1S{P2P7etrHA z2cm+l}aWUiJ~oKJrHjhff`9K3IB4 zQ9U|%%GTX{Brj?%$Q*O}^nrr>;J&)8>zB;=9lCVy zGjPPXbEaK=%Y9G1GVANg6&q@_)qJ#twd2kD@aAJpM~@#lZJ(p|q&_R(*sN8a!G|5t zhizD1@zr}TJ#o)XS6)1M?63j7yLC3}D#__7-YEH(4%X$Mw@MIP1)z{d;xqobD`cRUJN6kBDV(2zne|TBZ-~+^tu?A!kmUdfByqyyvga zzoAcFzW)2|b$j&DbngoK>=OCik7{T%H=NWW?UDdhf)DJe+rD|-Qv1|L?z-vfOU|7z za&X_CT|2jzLCK7(^mP1<5sJwh(kv1`vh1BZ{9biO|Q?nj?{eb(o* z7p|<{vc0Ze*Zf<>I&M5ECDGiN952ug-k< z&YP~jbn027hYje{U1p6pYkQM_`x?Sre{(w1q;GMiAZXvAOShhV2kBc(z3l3n?s(vd z7vKEwt2qmnt=+VBM_s*e;Csl4;zpe4q&nAe#vku` z=!xfFd+)Pv=Pz8cYQvW8;mKo%4oj10C`fjut#4|~G&D6til}3>4K@R_bKBsPN>x~Sq`pU-;h<>#Mz6UHl4i^ZDWPe=r+3m-Tn< z+PzobfkQ`*nRw2Hm;LVA8*UW_&;I?@H~;y;XWz`NTvVl#hW_+pRf!px+Nxqh&6Y`) zkn1El$D)>2EvlIF^{2DmdE=EAXFm48owr8W;;QRzxaIb{?tk>jXJ7os%dfui);sUb z`skC-KL6s&ufP2+{#VI&-+VRU%P&6v^pg)~z4y*rufO{8KVEqD$w%(H^R}C>pK;~o z7oB_d_%S1g4(i{hXLq45f4~w8+3)PL7iUfh`=m4}8?6uS(78*u9=-bX8#rXdnPVrM zea_U2E}eeWwb%XOhMWF)+n?{e`!Dz1|Gy?5Vn`)z-` z>4rbdxaP_$F1hf$$!CopGivzY0eySx)4Fuj$7#1qV=>LQ;q!808vUow{FT&|Fd|Z7OSSn`xUX%a=CGQen-X#M1uxv-Q(I$$v7L zMkSyuFxym8(EnyiPG(=TuQ*%(%-fyR4`%f8B+~}66(kvbzz^9M|J$n|q8x!%|K&wU zh3wPzns4;y-TJSfpNrJS0RaAPo4!uo{`5EN1ho7fTIE&$|Ns4;5cp5qyeJ_2mi}~9 zXlCS$|F@yW-!uy2jQ;kg;@|Ddo>cK6&iMO@Nk-|16(8;*`fdYh4DZ6S}2ox9*$y?XcUi(?HLGHm#W5hF*9 zI&<`xF=NM!8GU9lDjE47BZdtfGI-EHcQHJSPY_MCEsO2#KexA@gRRQ!&9Q#z?+#6f zn+6XVK63OpIO5!?7hE*$(#xm+_IFoab@jC~;_FIgTzmDHtFHXrZ>L{=>9mV3m@2lI zG-2H6k;8`!8qlv#FHwcO8A@_Zpv5>VEfmxg5R#H{$dHr=`-=xhkDD}Q>V=nFe&vko zZ@%^RJMOyoJ~80qPd@$3%x9l}@$d0JO8)-BbH93a<}*(}`S_y`J#gPWcinOOtv6qP z?e8w1cENd5&Kh^-@F4^JlUum3kUgc(TV(6puHPNij_G13kAGdY#{Oddv1d&=f7^G`nh zVAi{Dz53!ak3DqX-GBb$_19c+@zlu^$Br6i>@S`KX4BUcPg=eK8ERCbdjS-Cq(2ma z75}DOaM_i=zxnoi9(wYH*WQ`+$rs(j(*^`H&lq zRXbkpMjPgJwJMJ4 z-y)YC&o=-GDS<&F#-4rtrB_{l`~6Qm|LQ+K{-(TY<+_bEwY&7$Hg81c({wy@B6mDK zQF8LciP96tkDoX#X*O1xklOcw{d?+aw^XlNxp@B9AHDO+vyc7dwmi%1J7 z9@~a+`+Cb)AlX3RDrk4YV)e z8kq;Zq+h}#Tbvycu;|)D(pcZ)iW#@u``8O_ef(|tlC_&n8Iu#JQl<50PX2J>Wch+0VN9iQeM-&Y2M0)&3ZAEmVU>`i(rn)4_ zwdxg>-+uh2KK75-T$-i@p8rJI)wbdq^ZlWGBB{^tv6C;p@}|2Vd-3g0XD?c{aa&zT zF^?b5ooG6qYdo$rGio^5kdp{MeIh;6*u3TWBbmtAfyn=O^)YNO^8d3{Qu;qS;E zT?VcPC2);Jxiz2oSeT5-lY>)NCV8@V0``CY$QLdoVQ}5;8_1qKVd%8Y@X5$|^6?jl zoS%7g>e2pV&uy6`OgC#Z#b*zm9s^#3b+SiE6@2UbE>^Ep!FY>cAB**v96zjr=Dqei z^c5$){+tj0`-Q)}^s?*kFo(oSw{1g1dEcj|_|*R6lUw?aO^|OJCa*pI$isX|u3{F+ z;oc+9@i68}Dr4c}9`dxno5)&!`?V{`mwfKLcbs{`k%#O{DvNwcZ~U$x@F)lvOAlrp zNM&qi5(h6|_`0`!;4}a6i$7gP?x+=JdJ1mx6;nypOp>U0?%`)28hd!`;lV@CnbRX- z(;FphDvvhsA-1sHI`a3t86n`okK%$y7U;ptQDVu)sMZJe!*gW>&^P8X9JVnmP1RANW;Lu0S zd%WtveEx%c{?gz5;42?L_l>6my$8Qfa_Rz%U-h;gddYiW2KWo$dn zNXBk-3Qo_B_6YUp`rI>rrkte<3+)rKbi@&V7b;D+Q3r(|B z`J^{W?sw191CqgglNH>8u64k>Qo7WX>Jo=-_Ind2}Xyffy z{q>jM{PcU?c+$%c+$#lF2x%*aJe|j~;=0eFN1gW8^SXfT!-BMXyAUlGt<9YbI^0yU&V4mBg$#j9~|6 zmc-oA!PEN!-s2D7zwWxFzxmGR-uI@HDQxF42d%=S`ftZ7S`_m^k2(GAAO7->|8)7< z^=_#vMcli>L)9ovqgZ%Qh9h>+ih8yXFvTKb&!LRyYku*bfK9dr6S zKJwL{{pG4VHkMxUoTUjC!sb~^wd<5rIN_Z+pmu{#HpBl~wg zM^&sxxoMChQ-9+uYQK=y2O^u+m@J2lp~6+V1D9?4Ve8eGdvCqsk3ag-hu(VHQHQ)F zJsgAaC-T$=$(9TDEp!h%_OK#r6(QFL_W0b>&^s4yC zWAs4u*G>7L6xpY!mX6&%MYWeo@a@)8`~0zZZ9$J(J=&#!%&p?}sGv7&03u96K?9aFq3X1f zU_h;Jwl(-pdJs((F?f3KZFJ||f9F-K;a}fs?*rY3+(@{!Eup7*z+xSI)amco;qgmo z=2Ydnil?{Oo`L4xZj;8|JNh_*0Lp_L=eVZB2so059Rh$zBH@dCFTp{MBD9 zN`sR$Mb#WUx$AWE10p}zysOaDK(jH0R9XPiK-0HY-8!ApOv%&F;w+5){Cyfx`svP^ zxMdbCdXwyktpu~^+BjyVXNv|0)WDuCS7NhP z|K`C>t#@mRj^7@gS+scGIB`?&<{r&-ww#TzJv~}Ihj-1j8JoTcH3UPuX=X>wV9Oi= z72>6ldb^q{|MY|N-}Cz8TYJYiNj2HiVI&`-*Za~}_ukKa{|{H*8Le3wkbu1VWAE&7%1YnsteV~f`CCYm?tX6n-xG(}V3*mZW4KYK&}#;KczHxF109o@H~ zL1_=dC#1>7z1g8VXkI#1C<2skA8h*v+`uFE-FEpU7k>KPXV_!IahI+~J2mh^RALD7ea?s2j!a8^ zdOatv8_)?kync+nv!Q)w*AH&sP!Rv4JJ59v)=scVv#aBgw!nL6{jdk8S{`ZU?0OzY z?VNg!!M441ZyRq}aq)kA;+)fuIw(D>)UVAl+8ju`%DkP?oYUU%iEsb*vb7r?%EAU) z=eKIimew+nb``u7es@kCh8W;*Y28QE=6WE4-c=rw2jzfI&TO(Rtf|LJ{Cmu!4cG8D z?e*K~5u9Z8Hc29!w}46x0!%js_Ntk44F8RP8EoFUYk6!NHr%=|F$lx2H?O~O>3@FX zBX2$Vh-w^XWqnpwy{bpx2={y0iElpdtG`-y^9GuZ%N}=irY3j&%{y`6`2PF)8|UUE zPjw#05{%KrWozI>>pdQNpohNdDbC*vJ?mmqr+==ZKi7WTtLrEIYiDt0wl;To(}b3z z_2Jq}J%;_W_wmr!zw$t>Uv;#1>03c2X~wzBYvpLOl)zsBPAfWaC+MTbn**phj>8e(;`ExTyXYIUOIh5q7q~5w+s(ZZF zD<#`I!dlH@9v8=+;3v23wKeV4fBfFRz3a8Dy}GjRW8+_;k$g_9$sW7zf8=TJ{N#m~ zTz=s}tjJ*foH}basNTW>J-RlN)0;|nuFFO5I1Z5ZaC*t-a0-V* zY5g@5R}MXyMw5Jxwq(1j?H`|aZ4RSeix_aeD-vu^qDNWEg4&Zf_pbC=qnZaa@3!N~ zq_*09w&pn2#ozeITTVVA$Ll<;!~efB_J2Z&=GYLo_n|u<|Hcn~^_RDGJ$Fk3djHxvESpW9Qbat0MISd-c6j@)>@UT;)>l3loqgEhB$h{m zhfnW?<9m4h4S)N|7v6i;v4>>R!(jaX82jef{MuG_b^ba3_PtB5xqI`Lw$gv-q__+# zu1+kkfR-A ztDK$g2`rB%)fAKd)w8a;5;g8|DAC)BC$FEElg}^!PeJUgC_B|8?Y;{~nu{EJIJBCv zONWj*&XW4*D&BTj=wCI7JX ziAOfBUG|GFy^oEBSiKi%}5(e+Tv^BHf#xX8vHC*L{;hk32VZy0ZJ$^Fh z3fAd_yR7y4$HN&lB$E67@fI;BN5f0;k-iNetG#o95|OPoKT<_(S*Jbyhm> zyY+DkEGaQ)>MLG*?&m!+I;)u{)70IO!a5==(axFCcI26Jz_`^po+I!)PkgFRdd>LN zs4T{Z<#|MVHREvE)U8>c$AB5F?>X6Qv(r000_;t2L#Nza;W>5>1aXuEA~m%*%&WthvnM0H; zcg2v)l~ypgnuCU%pdDkQU*PvWR9Q!xBpmqQZYl}k;yz7tqqmvSkqsU^d_WyyuO>jP z6eG!QzwF|#eem_i%sXgLTgt~dQ~5(A*dEnAWW4(xaq2ri^TS0E6?jBg+5^$>f1#cUTiP?%Tr zaunLlo?6*oF#v-BxHupbXgrPQ5wAYJX`Z7RT($hMzjp7auJ*YdQbVetjR$%jSXS@vgH`i58O#4yaH`z{-_9?YTH$R; z&$g5M0fdEen)Grf17e1d_8p0Lcrwa4$UQuLRD&qkYip>Cy-Wq0@1*KV)b^g=>WtydOI@3qk&uf z>t{P+X$tq+*PpEMknALWwf4&e>vNRf{_+8{D2D9i77I1Sik(3-hR@l~#8&sQ z$9k9}=w+}7txH=zTt2~Yjup#$SuT?)v|TK@cUgw(IDevl#r*hSk6jLO=(|=tSUbCB z3mp+@-cTw$O*A6RMlw%tV*v9FyZ+_-pL+W#hwoFe{B2g;a+L`4>p#fwf^`aWBJQHe zkGaPfD%>r}r(FclO zrzUM@t0(#6fH*|C4JOK{*-2Q(5V9$i99+A5jT5R@qknt*$u$CRF#g@KpJvTY2|Mb{ z4}9%6P6ITCz#Ka?>G0-j<7`7NJnns`6GrL)EyHsL*YBi>%JFB;ZlkfD(w8zl%jWf2 z&5)IFTPD}OJ3HNy*Iwf4XxZC|&Nbg>)Z) z58i{3a38twkJoK@1iO{InGX2TokE)_8Eo2XG+3S)D}mtV!A-N(;lXt~0l`(o1>@cr z?F1bu@&uEhYaCP!1nz@Ce_1cn0Sf_^y?h13bGq5l4hbCc8_%qGflbHEw=0H>9$9w( zn&ZkDXE0iup#7rBGR-};Z67|pr_-dbzT_JpJnQHKYqCr&+hV|h-1fZJAt$``(?49y zps-ptvt{C)c9J*aonBJjsk7DPgb8#x9Ny1dZKq|y7f@*DAJz=SNmkxl#-vwVl4}~E z+dHnjrl(~nY#&h==2u+$3oDo!ua$FFOU6A&!7ywm8c`%-L)UK)G1M9d{gRiSe9rm5Sjn7RV&MhT&Uv?3ZYgGlClv?D z>Y1cJxPDhBC-F4S1YHwFA6qqv&@(m%o6U42#=^3y*~>BjjzL2C=MX%&BdEzgn$O&5 zq+bNQLWKdE#ZmYkih}&l*Ft7Eo}_HJW?_L4P8JkKAdDE9^I77voASf15=Cu7_dosC z6P%YeYyA6Tzordzw=#C;e(B;hcQ?gf5Zalk;yY!m_+aBpHk7N5=c-X@H#o-vb8dK; ziCNp({BHS^YUdn>K>4|>gUUm2bKXgZ@bqCL13AmkeLv> z)TSF~IFjaIX-Y9rNlM1i6e-izy(Gqt42aV{&p(HGSzh<}f3w`4k(9$<&-}nQF1ZFR zXT~@ltZ^}f{cs#uan2VBJ9a(!8G>3xeHIbZ3#)pKk;uE40q3|^h9K8^83N0gcn7IF zBwhJm;xyC=2E}DMZ0ta^UgIcGj?%*5)x3NrpIkofbqTKwOEVu-VTTkg$%2q?3|#_B zV=IRFMmxcBy)!jKJIMh;(1#H(}5LrN77U!ha?hd+gWj zuanXJGvr$(;d^2JD(1?VcqfAlt~e&cmrM?^a92J<$VrhTlx{Q)8Q;H)vtVf(uKoQ5 zA3W=*%sU<*|8ea5aMrHgr^IwqWd%sSocu#?aE zJQfam>Kt4%BMCn$hQ4oa_q|O#)~n@~Xp`^rbZK5AHo?OYSs84sT*0tYopdIiGq#zf zGvJxqt@Z6}c!qs1=KcV_qcU)f2ws4@GnUQA5@sMK+Q5}K$ozbjL+Z0qUbhpms_C=g z>IF4yOtt6YzsNp%zi*R$s2wmEcbZywlzGSdn@W-6$X;)al{>_duj6zW{|4EASpu<_ zp30R0v2#QvGf}8~*gqirk{kBlT$ooTH3#Q3%<(H$Z*K{MsSN$om~sCD+uQfrG}h-j zWAvGlU$c$507=(3#-QgOzpR3&1;WDJ8JP$V=i#Nhs0FG)378z0foq6@bE@hl&T@CR z-=5iHJF5SD-CdMmu#HJZjL84R`CJ)L2>cWTl0(AN9e&z-zWTeed_z+CSiac#%6{Iv zVSdcK_okRNa{VOiy**@f;XJ!DMJVamKSkTIriDQd2|yK;3x>T97S{}HZy0n2v{!88 zx?6U85=+5lLO`%HKV$c^^a@a2_Z;>f1sLo&>zl+` zbrAz5JG<^(nS{E}5vRZRYrnrPMsIHoK1Q#L%P{xr*U#15n++s)#8eTE#8_~FWh482 zFASNyj3g0j&gNyVw;SjcXcLR4V6k2l;7;>L)%SLQ0-&ZGdxK&oAV&&vbp$gMxkHNe zV?4w0`>_H$Wg2YXiT7pnYu9VAbICnMAGtrMvAj<1v3$8J<)wQQ%=E|q-`tfk>;`=w zdB*!M_`?kwAB*W5-HhP$7}?DRwtcv6Uj)A;Shxuwf>o=L z`Pjd~H3wen^^qOPYY|e>faGbN5&t_j~r6|(z`Y7R+Jbvx~L^-2Ji z9}D2k2Br0Vq#bI*MGx3JHQ%YQazQCS%Ax*Cj&b>te5OZUUiNNq^?_cT$g*!@hD*nC zQWId;cPmy`s%~a{_op7)c>V9c{@&Lfu}?;V)~b>C-S$8FjUTz_ueZe4nF%jNFFqTI z*UlY)o+r;V8vEO<{p!_Ij?p7t^>&7k@mjWbVtKFI3;gZ9!(JN1Ub0+gT$`C;lksdU zQ5}C)XKyyfm_WVOwGFO1;A%pcvgx_^s^t>Z>)m&_`mWZv<-QyL_{|TTaU}PHGWPVB z5$x>j{zsqvvF|sB&NzT9GHM+b*Npk?yU*BINF2$1@*}wg%0YUB7>>Vml&`|rqO{yu z?%sL>wVuvvmAUPS3qK~-#YKiEV`GQkA{l#+}-v&`i&p|!IImERR&uRXaue; zn&f|pGX{Jo{MXGlS&U5jkOcOc*>!1yarqztXYuj@lyul`K2=6p(qPGR4DEK^FL1rr zRMc9t_6&Q<-)O(GKIZ0Q>vLyT+iN2>Z#iU|YNq`j5GEssOAZQ&9vSh&Ansn-&}?`m z7PoHMbjx2Z{Lq<4BGB{~c;gedVXDPPzwu)~SbF<|<|YnoCcNE@Ta3LNH`Sb73C>I+ zUdvuznQTPH2zuM!AaS=MjOF!4x4O)SMR{?FcR#u2rx5IR<73p-tD{j{*6)?UQ{H3X z4IX}3cP5(FF!O4*f@savhr}MB8#7MpWIa~gC~d<_4O?pUF!y+Fcm45AYyZmXU+(Jb z)~{SwvBT;e2hfgbOiypG)!(*uPj0H0uN$mjyRl!Pm2j&tw`5+5p+QI4Jr|8o$2MWe zu*mJ}=UL$#d>VMPAA^OL;$ijqmHyIgg@bOru1-|?Wj0)WU=Wj<-~sXEt$t9FUw3BT zv;OczZbD#Uj^L#Uz~c`H!5Kn;8~a~lm%?F>K>)C5ANzg;pi9hDZgtv&g}GtS_B3c= z`xCNo-Eo?5fnF6WSlGRQ@B${lT%{(!TYwRSmbX9;25aXAg}d%~`T9bk3_I>jDic8v zh4Vmx&=nH*ovP2kIL-;Gp>>~``{KP1Kpzv$mHO9d!;<)w5>w_Z+NQ2fsq{iDY zCzo({1t0h|8xd2hqaKzo~P2frGtDqEOzXK!) z#$en#K>OpzH;dRz1CTWTUhJ;Lbfa+g=9_jFl4~Wj4As26;*F`5yO^J4yf<8Q8P>2a zd{r(GeYAs3j=>*-o4|O(!-RoPHa(!I8-vC3<#YLVyajmmmedtUJs<`YgW_Bq$_=zY z!d)pLe|u^&8U--1dp&(<^Y9a~7e{8)WefVsTFUu$fW!nxASs@|>%K?DS|TNbt^dPQ zF!J5HBu=*1tc87K=*rGQqOHU!YAuG`>azei49&Qe$pB}HH7h4|gGF8IQa8RXTFj5e zaDvJXmm39#NXioQX|Q-UzmS(n{q!Ej2XX@?N;|?t{iH|Cb_I_9$^*-Sh6x4^2$9Ca z=Vmg8bE_1~Gr3s?Z#j&7Z&Zf!Drl z??l7D1C5!;E2_^25eX|9H(aCGBSdAfdHaNv7^#Qjqh36P7 znk^Kl#$s85rqZl0q5?J*`)!YO6c9UiKrC5|f+;V>m`gggM=~HKvW=zNNt^U=tqyYT zt=_AwX^V~oz@GDU|C38^AdouM7Xz^AmP^0+zSq1o_vig??5|_T(P28*o0C8A?Z4d$ zq38@L>rX(mF{RkM>gGI2)QyhLoOO+zYCCzwILlWYtUXq|ul{5SQI2bZ|yC^q;;g_%snon{F@kV_? z5!e`4eG-(t!^C)NA1J6krQECpj9B{STMnuUKQ>fl=|E{=^kCaAPi@(F?QgzNcdri^ z+^`JtwJW#9aToo&zjDd-_Zf8jPb}yN6u5WQwBZ~TN}?))0_EUBDBVe~NC)9zY`)&8p(gMw znk4KB0LZ&n>v=sfDwCkAv;m8|7_(B8U8R_n)ti};y~XT!Ik^=^@2pvA)*4beT(w6e zLwyM=z2U~;%?BmJUO+@&W_nj@3Qs+{;mTiq=AVw)Z#SEl{y#*cKfa5ZhU4CL{>9gL z9r4y96PYx1iDY!8gaSgxnp|QEDCE>&qboqd%{8zXM7Ik zMmeXJXCe_4LdKYR|aZ-pP!hFH(LiLQ?^iWPlCbP;EDxFI+=94;rL2A zHK|ztzo8nG6W3q<(@(zf6_t|sBVY_@LYxclI{Q<XExv{NTf9Lcz$ri;LGG%z&2yz60bIjZ6Eh&Huwsg%133zS8ZTKxR-Irb%1 zYtx_sGi3F;Qi-TYm~xFhFt6Bcac5j54@ts_Q;CsGgFjKR0o+`Bp@Y_5L~96#urOq0 zd1ES671k7*+ZD^W;ld`F+JSd6a*E`5Qt#<$FY^DDQm?%s}~fP^FWvK z@9ivHqv_8Dtld^?x^9Z)%`x5)9PP>&2#T0SL@1(OyvhVGnG&@VaFigWEx+vFWow80 zTJih3F=)ONUjIYtYZgh6;dRHF1kuKn^bq8A3_ke}Yd2e;c<`1#ef`{%581<_<)7(7 z9U9@y-}8`@&;9zJZfPWCRJvknSUI1>yH&3{r%x9({(-h$_8tC>C`E3!d4RcN@B;r#ww;g2mGleW=UmG)FS1gQbuJ;$_S_SOO+EXgW*KeCJ2bw0{Ee6C$@knfqD>Pr;dRUe-zzhR`?kO z)-XJB@bm(B0q*dc<86SkB5Zz~&_~BzygyAJ)&ZY>8YXk~uRn{sN+#{EW0zr}|Iz%( zac}wDudl{$n=6rxUfSOKSgWh*h(%T<+4{6C|;O|icaRnzb->3I>5|` z>T|4gNzIg|8Op)~mTx6R-VPW0!53oG# zRlB#+p$ zIhwHr%8-VcAPGvSG@76G_f^4RvM}ndm3Q6$VDYR)nsIHG>Z%$-f+AEpyI{<_*^yH& zj*`X-h|u^dPNj@rapi)_L}|hYYhRHf^9V5JC{~6xfIV{e${&3Aj3X+T7O-87qT=3G z#JzKOnkZn!eOo=izHQ7W%eBGo%p+??)C0uE?p)2lZDEt#)5e9%vjiT*)W2FqL0#W6z zRlC->ZUg85y+FmRFKHVz+h!$8l=R$E$I4bV3(dMGL4s3+X8uO?N+<(7sR3AJu1=k_9@ zX{8S;AJ_fY`ENN^a}73^V~9?LH|~4%Th71uTEb4PwdVR!Xd}!>a1x0tH8Iu|VqvQ> zLj=GpdMQ$Ek3EH&L=3Ptz)}WTShNLn=ZT9EX&7R%QTp<7ep7^F5~H%;MyOkix=r6` zbEMar{UNqm?j*<3_4BQ`OPW1-F^v+SGFUm=SmV{$=$wqY8j-2|o&8)b{7lf*5u$BR zJ+|SBpMByDN4|vIU7xvQ!gAW|`FkI6*2jN(IZ;MO7>h5?@L|dfC44g7NQ?*aY^;g5 z*CcBjRep`G2@3w|3LkxK1g575U^OqY96eTfsUpe6qGXp-N%fEc%%X>jo(3)q(IV}$ zLa0Nx!%yh=EH^;7{CNH}aLA^a-J|)5!x$8ZkAqT&4>b=z%4->#SEmoo>yf*bfA754 zz7#VfHfwP3C(WL>$DyZv;G$*g9-hXA2+aO_B&JNU4*n+VLxf*BtH=Q;z(Hax0^6SJ z!}*|wji#!*N7fz}Jf`>U`U0tKwbx~0rw}B|#L*3YJ7S{;D*|Mh}%Pda$_xr~cj z2|z8_M&h|3FN)YhcR=se2N zXh!u?_-^YRI9%7QKdWVy8dVOf$FGQMmDCHJ3T!3Yy0Qw&6cs)ffS%^v^zOWiTFqC; z7kg#pHSk=vDwMi+5~!?X2?2X4CL3vWGkKe$gX@a%#s-+7;--u&7B zx_;B+$#WI;spMb8$EI)5xv@)STv1nmuhe}fO9eQjc9I&OU>U{(B^qURT(Z`=YHhXO z+7r@PeQl}O#V(D}E()hXW=s+Lw=Xp_WbF-%x0_Yxn+mJ!*?zh--R65;Y?3AUljXq#ybI_|UVmV$iA(AF&*ulmI&U;lFXP9Ko29D6k&&EM-~ zXME(xm#+_r)@Q|;Ct!^)ud@MkQArLXLaR9sus{|aW|&PguW!t#85W}_H5e{3IzZ4A z%h^;SG1RjWGrrVpB+U^Utmz&sn#^~-l$Lj^R1yU`C=DvC4xwY_Sfx{)3(y@XxaROF zz7!?YMsu;?!Zn@SGR{cIT0vQt6*G%Wl=0}@E57@|(+(wIg+PnXF5}psLr(dZZ!Nmh zY)55*x_CZbi-1fKGS|`Ip`?P-qV6`Q@R2ZAj@t}`210xCl;Fg&VtLH`B{vj+#>j{i zI>x1}Nl5srjJ3&gRRsf%)#)wn+7^7fD&?t|)b8?LQcY#GI6Hf@bROx$6`rR9n^hc` zJJAd(F+J`pQJ6v4-Rl#wf=*7^q&|rOy6w+jdlvyKHSEFoWn))?&a64R?tk3dzxex` z9zew?O~$92BO{m(6RZGCvP_wFK&MU-9_jKBzs~jB1&;xd(daPbM4r~CVB-FoBa8eD z7E6 zO|l)(L9>X~Z+A?THQUpCm!bTo>o5Myn_Ap;+1S;X=96YGc*&7({M0Y5ymu6vK3d7c z=DO}oWSWFBrKn1Aa8686tV0=%8u-L1ZDkAPZ9H)W-lHxDzi$$>N-)AFWakh;XAVPV7xnoumure%U9?4 z6^;67@-o>WP6QA|JNROG{4(B*V1|&!ls2(Mf5oZk`>o1^al6e@<=A7CZTGC2M5)zN z58tuqKi+e)am2t87MG7*qgkH2>;5PF^Edu-+vdt6wy3?VG8KQ#j%gsvR>)77kJy-Y z-pMo|%c)j%?PP(X4JhaCl9K7*XIdBI1%4eQSe51@Vi$V@IJUc1KBqtsx@Q1l`;vJY zWZr|tuyutdXc0 z#<~cj*~JHL{{0u;cFew}rV*%XQM!{+x>vmEbHBM^)8h#-I#*WNGa`&wBjqWLG?F1x z(ml>RByK0C&Yo+C3N#;C)?3a#a)4UeEuz~otT4QmRHt`z%6C+hPo#~jFI>+^ssB_KMIUY%AGn+Rk8qYwlWE{7}= z-tzhS|DS*2te2^Tf$Wsh!GHbH?%GMO8p-qE{G$gYs4X}1(ZNL2hCZmR z5(E1&OUz1OT(V}pWXnXF;@~?9tNLXfs8WrU^${jbpoV^qA}XHsHb!yomv%3;_Xd)a zKNf}%P$6mwN9a;hz+^y15!;iS*Z$#)rGS0rHeWADvls0B@;83wzfi!z)+0u_#!-kL zi?04DO_hrsteR6iGQ=O{Vin1NEvKI<#+Wtfkc2S072cRSkp@n-C}}Vns7MM(?0P1%Sh5TSJ)D2jV+Ki$|;^` zp&ZHsxpP-mTbDTTgn2fCCwRCntsgA3(D}a@#P4IZ;GbZo71QTSJmsf71K04=I_d=n z$$G)T_tvR4KOq#gDSnh%E2}jzry!aZ=aoG^z^4E;q#ZV6$@;RXRVQHLQA0R`l%WfG zp$t@zv{tQcdYf!~>9^iu+PzB%csb5`tf9C^Jf1E}LJC&y5q}XKRRg#5?yGwX)9tS&u zK)||HipeGO${sInavCEl727z*#oGY-vDQ@-=_Y2F1Ao8?POUuI2yX|p?xHA%G*JhP9%(vVS+>~IlX z(VFBT=+NV99i(I*%$9j7e?U9LNrIy}_ZW)WmITV*<=<>ReRSQT3*NnO|6P%!HDfo$ z;qAQdv2XwKAJ=Xs@NKp{RsLW@Cs{IY750`XhklYP795p??Z%!akk67Nm*y|rRgn<^ zpIR7=F`jQhjNk7n0Y%5`s;aV2DV|Yr5Yrvv<9*A;Ww6cI>h2WZreMJ8h9F_1WT+-7 z6ABO^>JcmH!&`lLWGFZ#M}Q3Nn1+L`51!uT$p>%z&1cSj`QG!9p)0{@Aq;BI!_WNq z&#&6pm26wRzq8!M3(TIhT5XR3AHXy(3>czQ8_e?pf%PpPS4q&_xL}2-QbFnt2Y95- z{>X2~kz<^mTavt!(O_BQs{H#dd4+ww^dSm=rDY}>?{YJc;%4e}4g8Ut#7&}U9s#q+ zeKH)Xgh|t#ifuIQMcf>-#BrAmtG@riQx73k2}n1Op=fhL&=T;O$_+N@>3+40ED{PUSmz0 z27vU|go%%;MT;DfZlZ2gI7$t` zDz>e7%a<*GE(uE2UI5JCN+^49y{>$(v|yns9!$Db$>G<<2P?wQ!3IiDgnT=8L~WhM zC^%ar7jEG-WDHiyppj-5Iu=Njn(`3P1LM0Olv0H#jpWGSxQZszS%VfEw|wQ}_h0=B znGzQJsMu2n>}c)Y|_VI)YP}~4W9PtdcZamf$wU1 zq-eI>d-)H~JN4iY`0K`Q9Xr;N%znqc`!a=?x$uJ!i18y*+sw;EtZxtM(6wsurW!#K|oy{K{@T(yXN%2*sL9A*9<-*nB- zKYIG1vJ3R^wy{%FhB)Ee3s*F+@c84cQTM)kZ7iq`|6mlakgQ*-SNbIFTI{fo-^1=` zk=2{BM0v`5ZKHcpRcI*-mkCI?w-e#k0Ii9 zV|R|d#zD!m=kImI8$R>fn>Wv3V`)*{pc6IfG276R4aA5MDQoJM`85~DC~hXJ)v(CL zG&H(2a|JSpVo-7~N;6BIjnVfMMaxj}Dq7_h>kp|e%e<&?Xz@XQDgwy+3%JJX1uWnT zDI*tJlM$SPBGsA%IaP+Jwp}B@)X*!VP-(p<9=PsTAAel}K%w|Yps;1p?_<1rI&)O`rcgVc#@Uk8D&vxD0el2UjafwdD?U5Il08X>o~g zBDE+<@o-tZNg~`EfVtov$zb!LQ~7>!qgj#bA~}WUFV9!2>@R~wEml}$Ac#e8acnX# zFRHJ~DOd@N5lu~6K8BB|?jQ>fAY-m&+!`? zJ|Un#yu5{bBXfLT@uyB;MhPfXM||jsL3MqU>gy9FPZb%bP*Q5RxK>01Y$6`olF}sp z*6k@?hHr7>$`BIAe@)a>rxQODDUR%#atS#?kfNm(5HB(iG;L`vYs#%DD+6Xzi&0|& zNrj6%4d0*5yO>32VU1Y?2W^^=8l^V9hA;;P;7D7ytY7}^b4em-nQt6hhdg-(>m^6M z^-F)ctrhvYGZdv@+M4tUf|nWLreG8oQ803bZl`ewk1g{q)H0qTmcg2f5>oA?3nCX0 z5PiSGSeZ8i5Q)A*C5htD{}P2GsHL`SD5Q&%+PX1GFLWK2T5Zqp5g&+(?@}pEzb4J+ zCqniCR%@6X4?D!eD9*k@y!#2D>%dZSpVePDa&a?K#GWm<`L~~W!x7YJIvg1VzWbrC z`S4G!ypQmZuGEp-wYVo)Jy-xJ5+B0aN$ahou4Ut#iz|fu?-=m&eZ6KS6Yiub%D^1uABKP=)%Px9vlEg^dJv3o*8j>=^K1aX(tAD0e zqYW#g&QPQoMm_EgsIKCw>_DZ066VCi$q}b9@n7?!O0KH$K9>9>2+@ekDx;j>=>ZIc z!OOZGFAfAC(}UI^EDs-*;V(?6s6+e<^6M_skO5h0P62#vK$6! z{=bg>k-bIA-D-jkP*A&`XSswEsDnGKVEFwqU*QfI`c&}T`38|y2Tfp9(pQv7@oK>0 z6A4m+bJx3??rE{E{DlmTod~(qcnO!Lzq!y5DZXBQa>Q!&<>eW*WpD)*@E#L1JBrno zdslt;eJ346=rVp2s10z86*>Q<3Dpzfn5|2y^(qv_tW>c=MGCf|CJJ4&5_^yo#7z7q zQ;V4ZM_GitufJ%g*uC(AWCJR7BPEw^sftqwkCv@ig5Q+g$4Dz6%*qjewr8>`>t zm6PH3z5K~!x_^ZgACQ;`FTnc=BRf*?btyn=&04VLIGs@I=nsfR1u_WT`6YA(pY{u( z`{~sRoo7xH#x#`-<&4mc+@?ZT@R{jHJ(R6fdYAIB#ws1dOqA9-7+9OJoX99SNd&f} zvzV%S?nFWszYZ=MGFSvMD2jf!601c$h$9gvg~`MNZ>(hpt5N*u=fx-Z%EDXBdPpt* z&QBG_{<42m$uVt3STp|BNXG!Wj&z{8=?$57r}wV<-uq5U_U7giLK+;7dfQk2a_1wh zOjvPFm;91^lni#hG$>Bu1FYq>G7fqMd=q&-l_jNAjhMXMe|FFbqj@l6K^uNcqg<{k zZhV6uK%iPDNyN<83-JV7QHern%Fs3e?1ZnCAqw;q43@w7J-&`_5w6;#oS3gzhdu+2 zb}U>4!&h&uW88d8J9Red%CBHYzp1S|Vy}7dk6S>jB@9pdSLNB3PW*zJcoypp?btmqhQ$x1~wG#;fUh&p1|GCLo7Zo)*^ZZLX`bH-hng?|hZZU8d zERPZkEfGqilMp&hR<*JLV}sb_x5fdB1)v>vpgR z$WlGN&)3Oad1Po|!BXYuWcyNIot7d@zDt2$IEO>GjM-uTEQqKBj7pIGWGN;essT@kUZCekH8c+B;L*{U%P%91 zjbee&mS8O?a#->Tkw)Li{yn;ifp%NoD-C|hS)jMPHcWyI@skA+o5fc#?m$jxfs1!M z+^fnp5_30Yo6g5{AyNuIYk&8d*B`!z7E0mS*-pO$PyWCU*GTMN)*5Kj1DSe;CSChf z`FP1#((yf-PKfaIgesZ|g(9sW#274MC7$zH*6F5N;pjAuBM+>Z%uS7_@uY`&CV5?) zY7DaM+<{mzNkFW`@TM3bR1lR5fu*SN3~yci>wJoPgEZ%FDn-5Jr|Rm;+qG;2$xlnr zqnM|PJ?1{G&fmN8!hb$)-vxv`0>fCFd3zmk_WA#P>xjgUDuyLJ_U$J{mBfrD2qk9H zQRp!#cB8an4aT@JluAkAWBQ6Ow<8W+YEzNWZ6QD~*Y0G9QBuv~z@_WO54{V|)Qs@DkXLS4j$Y?xV7MI=hj3TiA6ndldL;hl-75~S)8|?y z4fqrgKEv0#0!fON3JbKT8sHVHCSgqvHCkXbLa=)hh0nflVss+8A<;H$AB#?!7U|gxhclv%!c?gyD+UGBReFURV`)$^e=G~Lo2ybW67U`2 zQ)c8(+j(#8n6Tv}Hg8P(64GbhRsC;mB>EOV%b0(Jsxn!Dn(*1qB7V#iIlim)+c-kT zr^}F4RV+N;2BZhB{n@{sW`$?Gha|XwR%+seb8g!gFQ{^@J2W6E$&d~ADj5^y&5hy><;WiTN?66?h;EgW#1Fc| zKH29sXaH7Dx{J=cQl#rz$G;1K>vfdxpuL*M9Vu*KI03vE{LDf&`8; zy%IXk$X_MQ5~72kNk9E16p(#)UGaqC6k}cxX}+hLmw2X>mRIcI3*qPq>0P=eN&Lky z93ui)2{&S)q83IB+PJd&RhEl|jbK+*Ln|pkX~oA5#^Tb-B681LxWA@IdO(<-oK?pr zR=+0G@~h0)W%aATQM}{6H9vTNf}~00Px#;+L`h%$>zy>4a5$^XG7Z4q9!R(+@KlEd=i8E9*2JW8L^;Rc#Xk=ExrX0806Cs-v)S9ww zMl~>^pkwG=Ya0H|u}AW(=er_n$2ZEl#m2LWESDc?uNfxa1Q07l>sUbMEqF`v5oSY_ z7fqf-uNvKy8v0P2%%HbY%4+w_tF>OUdeT;D!bS$Xounqr-#f-O3j5~MMRA+FwqnXo zL*=#iUiO`H7s_h~2V5z*TjCYE# zfbL;To03<5%94#Oa|$7cborCs{}*6%Iza_dRUIgRfp2@ra71KT)AcxA-mgx27Kw57 z9dvaV%7|gUhOs5%s%)p$OIa!zhhBrIIxWu@H*KsRR+y1_fz`oB2CI&%)}3lJOkJ); zKO*-kJi=jTeEK)Hbd1ErkIBcbzFkEWiC*Zb)tnH*tI=X{*T(I;Wj<}2nF_}l?t+REVH_d?{;t0g8htCr? zk0EMr2sWc6ZoK_<@{p&|s!qNtRw}hBmtcCv>=5k`N)LWj^+^`7b9b#pRfq8$?`Z6i z_=A6I$m+PS5s39H4V)YfuqOF6aVl0qI*-Ulj1aCQx9u{CLV}SMlP+MWp0GRr^o2LQ zd@sA8*9D{=K)sSM^q^Bd^s{R>rOl)(FPXs@`OGu~NO=c2LB4`&K*C|4kB5=sD)>4& zM}(S`$wdOf#jY>fh7eY*Gce3V>^Y>7q9sTLsHJW`yp0eoc3nHERA#OL-?dRzpsf4} zjvjbQrd{wpr@;bnWUBpIQk9r~r%V#7kLYbv!?m|#x`b*6aU!L0`6#7v*9fW;>BxE6 z+5i5hN^96bmlmdEHF6qwMu1fbMT|70CbBLPLZ!uM2`HXlsQeS0Txo)AOd0D_6Uw)i z3L5P*@;WDa01FwD{>oBJ2U(KR_Gpb1D{)f?Wwq0 zEXRXKzOu^!B{Rl>c3G?mYFAY8b`KS#@6WZGhE|Id2!-FlcNO{!<2a2HS_gRSof>HD z&+B80lNKuxl}doD2-#qnWUagK3~w=wo6=>?-WW-CSlDU&Dx+dX$z9XHnrG2y;E6~m zHR#B~wjeZ#A#>O3XvKhMMAoKr{p*)rP$4K3?I8wr+Uk19Yd?N*Ytrd7669Ko4q`T) z{;=9>Q_2vdQ}sl(XM(WFMqPxjJf90g@Nk>j7q}#ky&Ykcw2o$3i-_+6^kAhXS zke>*uotTA`zgZDbvIFLa1WUuNS}OR|zTkFJN8wc1e32w=jPb%n$(+JN1~!DYJNeR8 zml~gKU2=EYWF0?!Ig!lenO{KA0*}RdAmh>M<92_IXC0T}Q1N}69 zvPWNAA00?%3Xvzvdxk$cH_5v~hb$FrF-#yV&3uj@ft}s`&*Z1-V zjxtBs7EOeCF!EoqkL9X(pnb|TY9g+{mWi|$T^41ye6V6++76O1YUNFpb$wi@O$Qx4 zBUSmWchOP@J-a)|ooplU8K3&?+8MdZQ4ZI3x(YapomIa9*$$FB8WjH&vr?iec-Du8 zWsI5y{aKgzPSFSvb@(Yhb16TvUWAz7Fv+O(F!&{c4NZkkF{$9e{;Ls`CL$3ZGUEJB zIBQ;B!mSDyFHXKvebD+gc`p@^YO55n7brQ(l7Maom{>me2nDD+lfaD6AO&KRzh~HP z_{E1$J;)Yy!PM|k7z8{Y5Drglfec@?T)+Z18IjG z_eA#wXlVyoP_)_Lr(()zFb>(jwSlhCD{65W$jB7$Fxdup<1q`BtT3^gu>mJ6eQS|V zqRk>spKIY1Ltd+JYDUurmf3J4#j#pA@Vx$}N<^(cY#XpJE4GH@B0G#z0{d70Nww7`>zLt=$s z!NFmdQc%)9PhyCLnb3WPkl%qjdUTuws(CX0YTlb;uq?(+sEpxOb2T>zwj zXm38iij3wD0oVG8pH|Mt(1SI?RCw}pudb00PA++nJsj)+-i*_4x343@PoH{9GRdHC zdt&42i_T5q;cgu7VEh#M-5Wmp`TzbTJxvjnD*6#Z~eK&y_weiDymaiJwhxMV*TCl_jilHofyaQIo%9_M+!) z%!_J3{6rN(2cJVEd`OyUU@xZJ5q4#b-`>V=z8a`k7}$5I-#Vddvmbg}R4@~^!-ZQqD5cQQbT^)1IH<#H-+hu*LJ*GR~RTG37&)X^4O64flM0K@BQpE(b zy7H^YNQ5gE4AdTHy~qpMHIaPI@GGlNbjd4nc@@8-OLAp}mJU{=l3U}Oe5p@2VN#t5 z!Jt}nq(^?fp;jA^8;#&&o|8t#3dc%B1Ki3uGyv@{J()P)vV-jkmK_p^-C~nbEMJ#A z$M6y5KX%t&zVzlJ_M{Xjf+r^_cglx;dX3X7TGv|1U9!H_+tJQ7S9@O-YwE6L5<6iN zZm3%wx4^QJzCnS_=Wb8bzAc<#CX5Bu03pzBN?}}aSXyiV;-l`Fz@=55AG>IcTC;?C zS#e`_Wf|=f*}Vz*JFw}ExgN#Dw762RJJN=^=~Rc%v$-%0eKr?r;uJdC*s^SogwLJDlp zA(wJsi61VQ?+6}VF4UpWNZ)Q`&JoLIBNYeuj!?SV>3*!bH_sAj!-pp@j}=;(+Lkk# zDrum+*(#XbKoMlrjXJeRnqN@6N5U5hlkVoY410AG+wQ2o+n(Bd(|IK^4Hf^bJ~#82=0$`Vw0OgKiU~Xij3;l@ND{C#KcVD0tOy@c`8lLg z_uu@#Pb!4M$wy6Fyw;bizJ{l)yPK?BcuMPORqlxd;Vvx-U z_JNBlb8x8M#+NIH%>YS1f zsj02z;$312Rx)o28Ir2nYvx)9Qw3bAWveg5(m9cz$C~6({9TeJEBlunSAMkU2gRA{ zCMqk|xl!5gFF#BH74|DeRA%PyeH7f+P`2{{H4y7ALfJOlqAGu41o55J4IvInkaY8T zb~~g#;xx&>T;DWKX03~z7%J#4)FN;E!jHKyqAkA_szS!mH*LI5%3!>yK$U^qwHBV3 zR6{Rzk`F&lD!aXl=X}0r^7dwPY@Q5aKxR@?=CopEZyK_A&YNYsmSjeXSbp=-JO222 z`>zVJ6US%oyx)oM|KXJ$!VF}pVb`h_!{1ph`5LqXn&VN50zre#H;j+pJN6g>1jjaZJM?v*YW0Sk5{@@jRb$&m0j(hz;RC+3;#rHG*dm@$Tg3{d z+~LI>#7$|0pOtbd9Zk~wn?EIt;#zU822w*Ws)^tE+g4KrN5)d;ak~HG-6;msZSF5Ebqed@m z-})WdF+uHv*ZqtX)y{J|KwnMG@a6yXmA`rLwfR@-H)g1+cbudBnGlf-m1h$JD8=_| zd|9}9e&FDlP*dWEd0nt11*m{Z-BUtDR8y#wr6tMfG^%)!!zK9z*XuUPu47BVph7q{ z$$WZVN`zZ{QX(gw4M^bX(!}~`t;X}nC6qkmrJ5v084657ax`Pm%=(N-tEpKVIB3C4 z;;Qq+CSa`j??{}}YWUP6xBvHN&w8m@=91P|&z`@}aqs!wDe{lV;bNgjPC4tuN!yO%>7V6>-$mA^(fm2j0#1 zEbpyL0z0+3Oh~<0&}8m0H=NAKX2@+ijBdHw7hZV8p&aU z9Z4&1jgWy!xysgLmxab;Ko@}x=|EC3 z2(h55w|~k6h+IL>_xL%8#D92}j=(0H0HSG0vo4K_04-Ih(eC&*AWZ8k%tbue1OUSTtVcKrTNX`-ovMt(0!O|}a zRwbok(~9-z`P;Ub81Owxdh`2;p*AG^Cm<(1vzV=Bf1>B6sH!--`Y1aoXr!RgJRpWY z&n(W;HvOAVy!H_Ce1j%_C($2#)H}YpVnZ?pGukLp;7FU8Q)3InRjF{Gv^EKv0jOJA zA^I+j^gJq=uUtTESst-iMkFOmaXBu_BQO!czTITLgSOB=C_ljUzCg2vOOG**0g!{&ikJ5{vTcaq6%)#r5XS`ch4aKc!u@EW7}9owkMw#wb`WhEf#{QFTJLX;mOie?Syed)n9g1E~sX?|{Fi z9#nd3Mu4oqB@O}i2l?8M^DLcz=Nw&Z!6+o=yHZwsyDp@cQsvQNN8g>X91OB6eN+O! za?X$6xB9|&A49)qe|!@P?G)@?4?g`9|F!nvF5_%THypBaAaKYgiB)Pt5V2`e0cLmxzdAImPsqj&35WG?UL1|@{#p!e&QrA zwD~}1+fk>w;=$}gNMSi#W16SHT{}>vU<@j$M~eV;l>{YTJjt<|!>*yH9kQvc)iiY5 z2w1NF*?A}LzcYs)?uROp_amx1{Ec7u^SX@mcp~R}N1Z7x?}9Ci*fIRXYc7DmJ$7Oh z&!!=h&xy=4XignD8bKD_1+sSMhrO98`bU1$Iupe(IH2RLiaZ+ow{C$ZwE79P*yIEC z-hz#Pm7&wbS~`{o)lo#+ruc39s){`Evrqz^T!AO%u|pX46RW!i^hQQd$qRaT;pwwB zPd#$$?>_yyLk;&v@Xf;r{>RFDx3pSEGWB(Gq_o!PrE<-j=j~?umS$AOQeU9Yv@$la z#L@HdgP3wrOK`6!ni}=)4;Q9f!OVCG+GgY|3v~7$2Rr$Z-odC$G1NTrEon99@9jN=t&`T=-Na_Nw+LNh6RgvJ3z0T3 zrm4Ckq#lBxIN6e*;)z`h5=*RflH*boo-jbZ60hQkm@}c|LxnUmwlQo9e%`Q;L6u6D z#%k#*#T+%|IW!MSoHFa%=3(GA8sd`@;w4$14)>(4JS3p2xNkaDN|*K%_pScUyN=1^ zqWi}lr^IoL_U<(wyZDw?ubg>|uqtdsBN?EHuehv7BF4DtaTgYo6e6)G_S`tE44__5 zA18~E`VE)trNvTW7H22W?|i#ki*N~#VD=Vo&c4*Ybd)8BPqFfJfdE@&3Y2Q2lhz&- zzRtHKLhP@mw7j;pOc51)e;)(5>;!~R#40;ah*3ug3o#p6T3>cqxs&$W8OC@2*b@ZA z$79z-tkV^S6K%D=i)f|x+|mOB@i-N}h; zw}TC~D*?p-aA}IaX2G~|Nxt^HoWN3 z0>Hgq@%9UrZ|Lk@moy~~o?-7&+pR;uo;o*?B25xA=Taa^cvK3D{DnfxvcOa|mQ&Q< zS~)9|g4f0$i-YdapkM3ezx6~~a+O@$K&-vA;$c6^Es8=%?h&%Y)I3Q_c>z>0Ha}fh z`i#xE=yJf*x22UqCD3cPTo9WUax+1LIAWPZO@;@;qPxSIc81naTpO$`8Ev^|QIWm| z=W(`IEqw0}uNslQI;b)urJ7Rtm6_DyiS!|=+&K{uHOPXK>NCQC(@7B4jL0lq!jne^ z;uaAsU?|ZkYpA2iD*0O@C414%wd_{jRB4K7)f7rLpdn67>izRjR#Yqx{(aK)=e7)uW&haPJAyE7SD%L~sr zT5GAXbm*{A@<;#k=FA+f?xKGH>b!@L1*L-N=Y>QV{v($Y%Lj8h(v~nVeyAxit;59f&kfb}yc3Mo>r@ z>iVC4;Dr5*tTzShG&-O4*+1Md9a(E<@7e8nyW zpsYb26x$|pF1+N?uS@)+o=NsA$Bu83fvdruLj$syAI7<08PNZ8`geIU_uX<>3WJRn!z4vT2f=aZout>Mk1ZyCL?DV8B#7 za_etCej05xBD=*AtR^78y12^oU5;#H0qdB;>L%p8N5VtyhlxX{9VoAelz2*=rCzBK6w#{w1o7=I<fF2*&~fm@l&URX#{)}-Kg6>!M}@%reRF`qqWH>p%@C2S6C__^|}nQ7;w|U>Z6Lk z$25eSc6~OX1)AS=e>(rHw6}`sQ5H>)dDn%jHqI;nPDhQow5?=yuzF4-TIn+)Lk6$QJ>E;W1%d)TFVlaXT=#M0PD z7=vmWAnXR!N18v9!wIKsga^|6SICIU^9?22=0~kc6scK?2(1|oH^mD*xZBYiIqBLD zs8lgOwetgVpWafEG;Z&>=Zx4hhPP6Ku4{ZIVBPp*An)QH|f@k*3?>Q`&axuo7I zn}tK{_*|Y`o#*NGKqMX2cS$2YhQIYOC3!=l;VuC!dlW)-Z#&4xXvPRygQ%0Ih%4(| z#sx8zx{Zj1JZNjXa}a8_VyI6o(Q`BW#DdIst|%g*d7Zq8eFd_K<*%x2BxO}P_^Ez1 zv~*81bCJZ~o36Mhsf)q*gRz)LcBzXt>nPpmm5PKPcBe-bnwt>p%MNirYGuFjFasi038afdT$2&u4MSKd7H8d?>)G0>+r z-|(~ZPOPy60(P`j=ow7j^U<5T+^qyOhS1o@i3EF?xK(qS((uF*H{&&(HikUUWz{*U zJ!FZ4m5XvTuzmqnBPMp0NTC%p@zPP*bZBK>(}axi4$>i9stT$dm6l4|t9iz%njqs4 zlyG8;b_lvmn*!S*IKhu~I+YgT6|(jO^tr5J^?=JfUqPyZ0H|Hz4Rf#dnvS?XdfRV5 zdHTV2Wk$|`jUMZ_etl_c?`lU<(_%fNAV_x6`%HJ@;D75zZ^tTCA)Z>8LN4km2@Q^J zLnT341gNz2IrT_DfY(4UUL#RRk2Jr+gAbSjkn*(-Zd=Na16eF)EFvPEEN^Lb&Z0aQ zH>Ah*CAx7X(09`D6H3XeM2g2zT|I1xgIIYPH>FjI+ss8vE80_&w%|t2@A~uSU!SrR zkUe382>#*NcYkN~eL4G32Sp?^>E|*dd&Bi9nM8j3hl#ty~IQHB(Pzn!akor-#8M3}G#v+(Uc$fvevUGnbwQX@la@tg_h3 z+w>%BUk1SWjY+^!(a7iXy=m;KZ87Hp5Gbke3m}x7EAKQil<_Q`SMFT5VLF%svKrzi zv%T&`ky-H{62KIgRUTDywRkPtGlNnm*>mB$%xzDDx$8l%`RISvFoVp4Xqk&vdG_#I zI@24N+`cK*@(fO5uw~sPFDfoD_-LtQm>6{In*!mIg``fhO6|(ox*ShG#)vi_&3Y3F zB00WHim8aZ19kA!qC}i78zlML4(qJp2}ajB(Bg?|5^h4pQ=kz%hqlyzmpC#qAaK`a zVgi<#=p-Ta`)hvuek*>nkjN)d zL_RSZyhdL^lp=?;%pi=#+Y~r_gJ*Bdx<}TRx~m!z3$LR|;hg=I`SE7Y^J^LkACRyK znm1gr5bB(>CZm2$6G2etvHCreAU31P7S`xtcn}MdNb8}D86v$1o7b(lu;+4LV zR!vx0G^8~sHqr!=kL9juU712zGM)hu5_XM3cM2N>fuBMZvbPks66@nuRslCnkIR-# zjqD?R*EuDOBwAqT`Zyo)*b@iRNumAiOJ`d*9UtEuNjx4eecZXH%!B7|b0>*8BTv=p#BWu%M!qNJ6^NQ@NRw)?9l(!j2{nfIn%?_9C zMlt|4#PY)oJ-h9Q_Db4_>?CCai?0)jcaldC(d?cdrkyQophrsXDNE?Y!2Q*L7MZ|g zaS8qMm&R(!z3*f-hdLaJBsF>jhxlgGZ z9^C}9xdzqN5|!Q4f}yUC@LIkr9vl$j$t8vfk&6f7B`z)Vh-!2{DGg}S5)m8C(7 zRY|lc$}Ta4rWDH%%6BsDAmo#Gl45bpkq_uq;eRQ+;Af#XJfB9#nj3Nu9Z#Bxk7>0D zi*j03KEV-f!)33MNm^vh;Q;CnBO$Hq4KZq+ek*z#GeD6XWdjadsM7tew z#;1Sh$-QzzW*c^}qOI+{Che?T5hsLbm^xGj#3P0axcE|2Uj@6S{7DOh+3PI7?31>>v+u?o$-L?82gE77u6~m5nRTmYGWag6)qk#?=Jj1_0 z(q*RN1ohos9x4u*T#?Yx0B96#>)p4}7GSiUwgBmo!|(Py@@?N}hp7@d?f{;X?^gcoKnU_N?psWQGZnvEO?5wOUfkgXn2JpSyaF) znN{c#E-I)ZSrRwNL-_9H1wn_mtvI0!aqY6!MB^Z7^CJzd*b!c(Ds<;gQ}b1+P`h5? zc^MI9+Hcd~V~_ZZGkrERCsBK87mADLF=T4@KKk7k(IMKpENXg6Mt~@c9iAq?3B)-Y z1fbh_wl0P)Ez;rm%<7W+U(C9&)Mk~AH9m!E(Kp&1NNxonIVs|UUCqj2?_*ps1dIo)g) zBc<=w8$~+ypX!*4&>ahO`yBt?8SNJxbkpIZqG%sDDQ*jlb*Bm&rlF}2QaWQsr@V2@ zrC7y}Hoej`in4wt5`;a|p9et1xM=8L@zx#C6G5YrY4i%!Y8f|;rl&Fl)5rU>k+du6 z7z2J>_sK&bP!DZ5@aN&&fOr_}WJ-wR)(KvT_<25|=HhX&MytI{cMm*q->PrDJYvo>f;Fte!QJLSqcmKR$7J1W#1Va}kIJE1U)w+k`4@Yv43)Hv(2b}1QQJ-} zO7KlIRqolQ#|(U^!=_yW)u=*6mHKDron)1|1e3EdXZ+jm9sd?C-a7Wy-^0Wsao@D*G6jk4zgj3rRs0v-^xe0m4l_af3NyR@4MohQR> zY_oW$1Uh3*`9$=Ty#lR99@yKV_Lo}{!sC|9 zuW6OA?q_3UPCVZob?$~MZ3RL4=Tng>1erO$#}RM-%A)R|;Alohjl8MZ$aXAi9P9W2 zMcK@e;q#|Kj2~gK#vZJcxHe66IIpx;^lmRl^bt_OK4+zJi@cW9Z z@?E^Afb}eN&T7rLuEL`+qp4NQVEw~q&m^@r0(Q?M-~P=NqlVn-sH&n(ql#$-2UyQ( zaUdqZmQHoRR+KE0BWo${1`UAZ!-9hf=9xpr`6n6dW6x||u09}MqYP!G{5&<4mVQ@l zJrt|3>J`FoC_Sjx9lU+AOd1bhq3B6HBTOXMK@unna;`$<=jl7 z?JH76wmSb$$oe4OPy7BUAuoIp``Lk zjzpLFC;1g$mD$OO4mnwprf0oMX>n<8&pTcTI+J_HIz(Qj1~w`>h#;p*(RGY0H24(KQc_>i(feJ3`sf zqdK|;lUa_T1Eowca7$J3C=<5M_Cr(K@ie>#UCpRY@(lQ?pbtM6OnqIM zVMC{|Tp>lTmaiDBJT@_o`8EAf<=5_tElrns!!iv0NP136EEmq2zt6(=|5SorS)gfx zo(nc_zOg&~QA&?krWs^HaRftk>e+~;^v!h{#gmaE9+s76)vo8H8wvcngzy2+=oj1Ie*WzYGNTg9tuvrYKSr=uQT%K{(^6N2sbwllDYE83wBgeRIPI6V zDzYK=?s$CN-U_Ffq+7pDZ?a9G4R1;}%6HyHq(d@Yw|>;@`TL&m!JpswkjH3dlp5O% zN#bm9B+enq&ZNH;oL*0(5y2`CZAXeOcUmON>98DrYA`H~Y1N64DvgzJ$IQy=_<036 zYPP=3K)siIo6e!r_o_1rIs_>-Mz|C2h5-YBg4CDW&D7rCr^99X{GFRIWH&yG1{3 zwKJZ~VF)vd2?Rl=FoYzaKyuF6d*9#hdDnmM9kgz>bdq!S@L$h*hvyyEyDBj>!}n;z z3%roIMlEu6Z}0`BpfPDyeJRI7(4#m!Ism&;g@PXUP>D`GEZV6 z*DT5|n}(i)4+7Smnrq=zKC?je`vesus&4wv@_CwGsgv=P>_T#?Uot$B-s+B2CtuGH zEzXi^nA{CNMKMk+?gJW_2`;Wz){)++wRE-6q2ag%YvYv{GS4<-p-=82`+LRP6Ja)S zU3A2`fB(H(J@sX!qV@C}5vlgHnw7W`miIE4674AOt%-9yXQ^}z?l#IO?4(9Q+{KSO zBWDs5S0a@aXOm0BCi#?Z;z=;-ur=xF*Xc8!@#_%OvZk%=R(z|I&D^v5qYjM?+cIz5 zp0UF)xnm2R=)3kK4S@l$zjm=)3-|MTV5`I3t4sqVHBEKKO%-z1s`G zy55B&hnucXN9h=V6A>vTQ)1I+Wd(~49R*{pU3{1`Jp43uUv`?5X8si~-Go@@gIH_K zOwhK=lwt;TwsMz}BkX|xii7U*$p%P!*n{d@kvah^!pQawGNaw`Z`m?HREx@nx1aFw zF;={yOafovrQK-AiWe9b;fbpE1(7U7E8kW(7}{thq7QAlvUNcB=`+}_6{X+&f)D@5 z!-!+Go)#MwNxCkMeN88p&#>|Oq7Ka*u;gE=m_{?jE^0hzxW>PewxI*)jIfXi3TMz` zxAa%6ZU`bf1B@+m1Rj{wwt7`peH*-{SiWRjjPY6N3RrgE#JpMl7` z4~DKMb);x7_;PU!xwhxPchh&?dk)7DCnv|?JL=^h{qe84b*L&ji~|`qT?M}3DOe5W z9C{*Y(24QimBzik7rr#~qT+0+`H33DiEl^Xy3^#k3k6Iy7Hh99smN0-s=Kkwr)W*H zNIkOlcu(~>mOb@ryd>K#v}=`NP<*fg7psylDRP;ZN5>{Tr|z9|VATsL9nZ8GTZ0^( zlBT}ap@xYw2>9G|_u_sY=_`b760C61m2P{mgsP*vDQk=Lrd!-O~zC{~TUH1U;JOVM_|dOEItu z!o@n^ zj&AMFdwmjHtaFtz4W6s!VB`AhPKns12e&RMQb)%zy#0qCzF>r*vlBj*lXOG#_8bf~ zZ#Z2 zBI@gtLr~a454DWUOeJmtROPI;qKoFE4}MQ|VA|;=Maal5z^wh^bPRb7KfR&`-|Rf{ z(`yPv)wJlywQYrvrPXEX=vPXFAANZma`n6mJaqk;Uv7De8s#p;$bvlr?u8gY6PXS|l*Gkj#R5>^rj^tQKWs zjfJL?0@|^Gte4k%$V=B>*{hR69PTMM`*@`v-bFaIC1Eyo| z1Ezxm$vyCli;__>1F#HHimDN5$i>XjYI&r`jWMFI5o2tn02#^XEN2kQO4t&HY#455nXT$iqSj2BnB)7D1_Hlx;69bY(;|2Z$)+;f*R3;h6SC8XJCU@!Gk9Xpi1255K8m4mIrEr|95AIJnWwx!5hfh$X zv5|iG{GD`p*f(w_8VYyLqeUiA58-6^-06)(FuhUI7i3U&T?HTE!5w5!-6hAz2G zr5emwg`n$ZYs~PO?FucemcppoNn&zU9ujU*s~}SIwP#)=V~(7U<6qe=S&~BO+l4?P zj33F^7{hT*#x5I!>K&;7@lxfsHEymz&pou2`VybuK9$Ft`Ue!bkgg);~x^mF=Zz!Ud^Ue!LDvy^5QZs)+b?;#;TJh zcYH$CP*`)-bXFPio2Jf^$up(@809#XAfsIy@HgSSQTuu!Q zD0LRM)jb6CI8OjDXnv-2>ALV zfo+$7)`W{z=8h5F_1NZLeCltGJD?fS)92IZ<8k<57jHK_rD}B%h1k|kO`R5G|L z#?pUqs(hK2vQ=7}OvlD!U=uNlHx#|WPbYliv^ zZ_p@MAK&t;&%7q5Z<3jyf9g$NUNt zj_2fux_MWj6q+t9gDa|Hu1ja(m`;s^OwUZP78Vg?Z8a>Tyf2nJb}t{H2~bUxD<_`D zUFXZ)G^4=``>XPXUM}TME>>u^(^m2oBf zyN{%yX_vHhn}j{5EI9a-H+^OG2+ekaq*9Q#2F;p|)U)|?iXs4)dq-7uC9PMx(z?ne z0E3)+ZnQ@ckFrCaKc03Oy3Fc&Kv;o~=7KCPZxqHJa;u0KTo-jkXc0(PUIMPLYoRrI z&1$zXP52A=g4z`d6}nN^O5eM0l6q<)(`bs;yZdG0kP;3 zZa%H%nYrgI8yhg3)^PdjP8bLA&HvniXj?RCiLpB|hgWN??X8(7h+Rvc^*FL38aO4y z$Er+y$~9l)zucdyAh=iaNX%du zIyX{X<+TT9W<}5gjh2V|v@8f;;KdRpSgK@cQQU|pNM1 zIJO#th41UT0RirlKrYu*14Rs`CVU8_KQC>@(6eg&RQOzgRG<_!)wGzk^>LIta0-8x zF1ud3C_&6}W6*%BrBFPJ?vJBc_Mz;o-=$cKPZ!sBwuDU#@6UXHWmPb3iPqJJJtNft zv6pk!6@^>#sv|hRyDyWK+ANlm#xa$)%FWoR&hND5s+muhzbF(&PN|2Vd?64 z>B-0e0xJrHxem3e1iIGEmQu+O0+o+bv!%3u4m&r?R%foMK7~M)X{k` zOIoCGlkM<#fXY^HM=jh1zg-CDuS_1TW+$|eyAl|G3gMPtej5MW5^1Nv(_jCEcAB{L zHw$5!!*jEDr^CI~3rmHy%v(F|<_z{*%~sFl7cNvo zx;r4MZ8p)ez!k%B)&c++Iw18^*rZu<*d;8!)nA@L5BWGg(w7=*RTq%RRQktFY-5V} zR$QVWJ}%7Yw%u0R0vY)k_KB13CU3zIO{)bJ?CgCmQSSIpa>wSDX#pA!cDl}7L9}|6 z8KfD!*IPZWKnxFIHM$5h)nO~FOf4ym?X0s;>fcpN?I!tKp4wFuJu=Yo-_uQCwE6l+ zB^QacK&@fWnFyVr4_I=|1F^@kguG~xa%ZSmXRixWecPUzLs5gC$X}6a;g<;DHa={I zkFSV^=?Q_ajo$;l8bZ1?Bk9Lt#e_5+^*)odPx2R?3CxX}sk3BmVS_Iv|Frt(|1548 zi|GkdRAp^iBmJ&gVx%Bs6*nLUSWa^acAIMH1PILotzss=wqzxV-OzQ@YkY~ufL9}e z{>NhdoU(@51b!-}5#~w*SO`l(%w*^AS{T399yiH8EJzyTGu9`Sv9xh$2H#?qyk~b$ z#(UwHGtzY^jl+iBmJa&uc<3#hue+Rd&=Agc{|2Q5r;k1tPL}Alw}vJySeZcaG*OVS zn7_ADVR>DTtfm3c5@wfc)4|jYPK|T&u8K(*|HkJS&iHxaMf*1f6!qo@=wmvllE<)z zd=FCY#2B8W_E`exHDv5YX{?VX%DJR122|Z~TXVJx9kz`xb8tHqCiR#u=W0Fi*0pq- zRSxYG^0=@4?5~Dhe0w#URV!&V*W*g&aQMjWQp@&Pz7!p+C|K1>bj@$*8|Ck*IJKD+ zh9WD}E99q<7`xhi6+)>fIQcTwfIs*OKJ<@#NLe)CKYJ zBBP>H1_H0j3Tx$n&q5X7X`fkfz)lggy6sflT3Sf|1i6d};0P>qnxySdas;;Znove) zV@Ffw>yWem(a{QxPSa{qy(TMpgq+6&x9SnK_eq;ptiZgB@v^FoeYcfS^PI7m%XYBj zDr?#sKAXuptdT|fFQ=9!&k!wDw^RL^HH82^Wl8-OFW;3_rw`o3lfP6CJ>M1G%Zr7s zX2Fl~dmkI+xnDBxfMYNGEB?<)A5EmHwjq;EMHvR-9q=Q zBF0C^dKEKGTI>P4gHPnu(ip!^Q>%GU@@<+>f48g7d(rcc!c-m1 z2?KswVP9c|`NRU0i&D&zLzECH=&HR|v*mn)Eng55$(PrFz&IqZ_Hcdi2H#?let8&G z##_Q;S{R;G5{urm+_3;)G)s72Op{#W#(+a_~=)B{F>kFg)yVw zi0sBSy2P_OLjx9p0Q=2fl~Tp15Dr%~h@gN3Y+33o`Xs(-gfJ%4Ut+^pgVLmgWrk71 zR$l-{?e$7)Nvg4%?-OA&g9y^ErP=TJsR>=nk<-R#lAhj0B}8t+SvPj_0>NB--M zuD7JiLWpsin={F zPn7)msS3MQL4VE;&T4POn_reGNOn^cnnp}BVk+W~UKu}X8tS;1AK}Mp9!i|~l%@K- zd_@9jF@zPNf9PU7m}hA;qc%>2>u3$0gJRkM9=iFe_j$OrS%bN)Luc<3Ad%ERhhnk- z82CRBs$dMV(S=~~H6mFhvm0`t6svUNP>m^C14o`ned{P?2O=W|H7!Li>nI0Ea$GG) ziizlTv57iTLSK%_IwkkeiZ=LFW?cNVJI4CehaUX%-FQEwF|X({$8@_Gh*tzN1kx6~ zy-sFQ#x5Xl{Pug!&cMg0JZHSl|KRtXL!4d!#4)2a6-Uc8UfD)304kqE4nEm+r!kBz z)S;GPLoQVvmn%^*>5Mf)X>8L)s$7fVO%;2jNXkO;7{&W^Si8|>m#&re<{>NI0U4LW2gv@H(PG*XE++rfV>UlVK+)uy2` z6akkH(d{VN%A%wGH6$7XUMzmtNU$T#8OJ5*(ERzKnRH|J61c3qTGK+2a}KE^-?od< zuiWxDPwu3D@zOK6xi?d2UgD&R_g;02Xw|vQR@7?7Fqe2#yK)`%K$7a9&{9%VJW(nv zJY6R-W^h!`i4~nQR|e5dR9CBCv*jB(OjMzoDi=yo8W}wJl}0mUO=N7RlSKF;9aUrD z$UdK@HO;8BxC&mvCg?I?NqnQT&h*|gsp3S}xqfRe z2%mat#{<`X<8A4oRp4GSXWzrleD}9+O6Pp;iP||QvIt^^(vcFmi8uh=%2|{nBIVg@+PhcjO zSG8XAn6q-(`C=PY$^r-7&oW-D5VWgLBLIAg!yuKXq%5>qK&;{#?aI`>ZHg`7Ie4*D zM}4(%Px2&@3BgpJYKshAd_PUO{8_2Sp@RciKR~IkPvv7(kx>4?8g<4o7p~P4731eI zj)tpaQvUVg96u1(ljkfr^u=$xVl)ez?z~*elfg4x1_EC~%GY3;!v`8{w>JAZlV{TL z?PkT8m8|Fw=x>YpO8~QAA~;F7iv=jefB>WYVCfUqNAXPou|z!H$Ci{Rq@rIAOJyw_ z1!@m}ub(69JXtrc#jr_bF>9uiQE9mH((PEzue6fSmOdl1{pDwuDyIQC3B_>3YAV~i z#?RfytG@hqCm%$aPXJG0#^Vbw{@1m`I$yOn+C7oUJw%A@5|sX$eT;HIFfAUc3~RG2 z>~ca9G~?X zk|OIau$wwke^gdMYvI>R)207@Sz*^M6UfJMQ>YQt(xp4vuZOr5A=C(#8`)wqd+ew> zXR)>}`}{?o#p-agATXNNA#V4l8!zVwTDdurHwWB$Twd&eJ$JKv%6fWvnis(;Cz|f^ zq54*zpUvgBj)N|F&^##@0PJbyY4#hO$XMa@}uZE zNXcx=D|yWj<=`p?CzcK>zQ6WDxs~7vrr#C$tP*_d8R9EOkR~2AeW_j>EBc=Xu%hFn zm!i}W?PdoWEn?rRM9Uyw|Y0{S8+M!n)= zKlXa~v6v+|VkOPlb~xG)1dqor(_P{Nwz^d^vZ{-ZB7*Qrm8Z(R*7G!x)A&~}Hb&Q$ z}nz+so3;Ln|-*LfNXo$DI;d)$vBEw^aO$yl z!+?Y{)f9fE_pJ7qFh+W;*di!g0LDW z>La3uzO1IAATdjKFQLhcF6d_}3)bN#agCa0nYuQ$J0_s4=O6O=m}k!)70xwEZa|6m6Yp}p3e6wqy-o@u?h|Dl*;VU z?f>^b>$5f-|2-|q3L1D|}`AfJLg|ohDtyfhadivX?+dIb)%RHG%Hh@^@ z;`((aZz66C>oA3*VJVlUT`^kqo~8~owwRYGf!Z52*yV@D0l^LqjMAZn65CCv*-H(t z0}rN+^d;_Njq099{rQ%TTEktyLszEgP*3E=K2N|`)TO9N!sI8F6X_guDTQPS;gbZEEW7F|=717Q?X~A3QICZEtS4Z@B{^gEg1B6st@NQGwNPYD;EXV*4sCFNt zu_8MiVu3f=h5eD*xDEwthr;1ea^upAq~;!|sf;li z%3T%hJNMfiI@tC2)}^1zMVGUaj}~<49a-kNgBNtrDx?PjYSWe6CxVWks^GvDHxXQOKEYzy1Ot}! zLvkP?^Zm#;j;3;p7R#iGToQ^rSHEF)uu_Y8ah{{fkt_7Ot?~zM?XX{l;MprOJTT;8 z4Qqdow(9&$U}MrH1=9;ZDgRSnIlGo*mn}CrNS?+yYR!#Wn|APC5Zh!_kuupacp7^* z-ZoXI5a=>RQ?-#2MmhKm)dAM!GT3@`S{r4Qixz=$OR11_=JQlp6NiPHSi$*>CU~*G zuOl**6tC~lS$d(N0`5G23$|Li3Y~Kx%Q!%_DItFb}v!q8!~Mf>_YiC zu~yifnfpOs{trKdp)~AT^XAxjEBlqiu0#%_jfNT$W13ai^8WaD;Ly6HH>o@N?$pkj zov8R#Y=C-#n>0*XHp@UqM5Iu3G^N1MdL#C1h4pnWt5n;<&H0|j-4*!2QX1~}n=~@5 zWm8CBFA&u&Nw+^DQ2G)CAf`^vCzNxD)BCHufe7jIR7SeoJ@c1|mcyf_IEx22ed|4E z=Unc@L`J_1CeN6+=!o;)f7MM72E<&vQJtH0*z~qr97G=wE8EYL8NYJu8xXUHN|{H9 z;k=gVefl8F-!l)3b)h5}ulkdI1{Tra)Jj=Y@6xJWMq#&-#(zrAv&O{Qt^CW)@^Tcd zhVp5Up>Y*@Uv21<2yxsg`yoD6YTzc3tc~=O$`>=+gB-s|y%*J58z<9CLRkN7L#Ui#;2d4P@d_>MFEM21B z`eFrEG`k9R*V1hk)(>p}4pt4?`Lt@d?$Y~-)JExj$GW`vg;Esnkyx1fnKJdWzw?A4 zA5LB-cMaN-1c0Tq0%$5&>m@hv4w@l+&XQiyXsOX;nJkmVii0|}2M#A$^^JCk@!l9j zrBC`dei@Ea(f%%zS~=WY4Bo7V}p)DOJ_aO8cr!lt3*@$5F)Ee(PMVPFjbOW6|_ z2G>d_;ad>IR2`5*ZjeY$aCAD-PT|d@t1IAbee1a@zTL=FFv3;p%EtcA<2#2-=X#7^ zxJrXDYCAO=h*b*GV02|QI&O$d>96NU8vPQ;%%U2CDKZs{NMigujAZG7W%f{1?E*2I z>g%ivn=afy^}c3xDEyL`QQZbJ8L`%JON)hDN>TzjGpY)Rb$(l78rhBtRjwlJr(ms7 z57wU4?_oZMU@b$3l1O0k{9V5!(Ph%G!D^=KGr!#YXn*HP!a6!qRTR+TXD6K|Td~Xi zDKkQZr%0O4($%T+C53Gw31VF7;N=~z_-jN(Ee@Xii9Z&*>7}M?On^po@C-GxWSLSX zj+)ybTE|TNK8vIpJ~u{MnecmTrUs+~yyOpEN6C7Q|NeF&&)E6J$O(c&}SA*Mq@qpm_& zShlE%l%-bfgPmS=F|8kKO{owRBrlrBSU#Bzc3XJsinOcbN&Pqfa*Tu+Tg6G~o!(*Y z;P5z#NoxKQQ(aAU2OpD#dzs= zon?%1a@IVE+5W=L{nQq*_8`f+IM;4UY8Kz4b#rNXboH%7BzY$L8j37x`Mjz{C$50- z(Hb{OS(4)_Lrbm|a{UtLw6cpclwJH8@L@eh-&C|7_{M-rR;mnLwIt-ENpr&hwf)}J zU(pRWpvn(l{LdUV!4G#1q^1>gKviy~s>CAIdeGWV8MUc@;U=kvgVZ03Tub;AjPjHY zX6P^f3j$>X4?)$1mkhSt>nIJ2>Z!OzG8H3ZF<~VMn0N8z+9-K;6)wH^Nu4(3=N`e4 z&|^uZsPPfWE=qZTouAgvavqqU4OW~?suBjRu-R|aIg1X%IE$1v!SL~|OSlHzTM;8{ z=T358&Pf-2ZaDAL@U7G}(~zsWiMy~aVqru&qy1Np^c7{3RTB-I-cjpb)hF+u_9uo{ zds?WacE)B!(rPuGHd}`XlMx&%C|$H8hO^5She3CVDG-!`*tTJ#3w=c@zCh(~W>YPH?DtruzS*q;aMyEn%lb6^e-2>&TJcZxPSL zgh~O%iG~8Dk7^G}*Y-dR9}N)6cC)WxD6-ES4Th480a>XTfJ_7D2*_=%fpgB}16aft z8Yg>I@}JJ^t`dCB^|iU7w{}n^WP%pNL!qpuOi4)$YK3_U1u1Qp~?_G@$g?_ z5L$-!0TWzOy{n^qMRC|47TNrYJ0cVS!`I7?%P7vOeu}Nqngu%*6JjyiuBp` zAT=q-t6yffD8+Jgo&UzsY*_+!v63B!gz`yAc+^pPKWt?GkW3&lr|1@xNAp8s<`KcE zRUAPSwozIPgi)AErZT7OT7rKd4P9p22JN$v0!0$46{N2>|`Iz{ga8>Si)v@{Um zLi)38C3i*#V2zjry^>}=ieMJdH7$@-tWsJ6S^Ww=glM~e3Te;AF34k!<{9gmN;KEd zx`Ov=jPshS^tpC0a*NB0-}<%nxd5m9$!IF#Xz+I0YGzh1P$=0~9@>+_s%-}SiAMwl zbFOE$CO5luU(CBiTchXW5>OZKbljZ%1N@XryZk?1B?{!a`71)zUYOc2+hf{Mx4@g+ zF=;_Qu8=bGn;H}EltwA8h%SX!-Gm5QicW4vho#@>tvDAl3Tho}HQ%b852e&J-q!V$ zciDaU?@l?Gz~%QPd|1JgUjK#BI3a{Doe4E$e;DB@e6ylfu)zlr!rDd2g(nDE@SdQ? zX7XqT4O$xcgeYL=kS!nDdK->{wWYo;lWR=TLX3{l9jJ67Z6d)T`5a4Y>aYD?O1j@) z9;M}Dka7X@XOSpgXJ0}EJymF^ge&PBZ>}1a=gR!)aL3Mq zUwo`5rG|&hT1&s?uLRAkbp)-a^#ih92!;9lXLuGpug@5APJc#LL+S(Th}kN|EF&P)f8ebY zr+N9aC76augdxViuOc9h4j`htwYxg{EW;6i$M&*;){z;+MpW55gBY2pDgFl{^@4I#`sfZQ})Vg z4wi4{@6^bHT}iPvK>KCA!*?Um!85yvNEWBj4a7U}l)x(4!6cITJKpG`jxRNeGStzb zJLvCPxczslT0-W&NZ!6)FPF>Q`#Vo;-e8Or-+rs7wVRSAnGkBiGqK~b&843z)w9EJ z5+lTOwP#k2j5m}N|E|xgE9pd)AIfoblm(bmjJz>BsyPH~f>CjCx8|+*E)}|ZW@Rq| z7|WO+H4f|(7J`1Wr$nFRsSCCXc(xU~18kca`!+8(6?9L1sj=gE0!(Tz&)|Vlmkjk#3iPo&cVaA?pqtUn*_mU4KWlw7bRv| zEQy(`sXI2o%u-(bN>IzlHx`|X5(q&#m7w=iPRrU=Z;M7%Umc*#?%0{-9ol@LJCvLN zWT+$-&t11*l!SH1K&>p#*Yd`EoEHpr51r`ch5)YHg^B1=M{QPSowwcg!w-9owlGW; z*qcnd6v5*h`Ffzc9=0%qAE)dAh$?QsOFK(P^nnIdMm?Hkxz|t-xV{W2F{vl<^3O5w zoZ6fl%!-dZ zUEBkt{12(6vi1BDQ?lZ0m3K_=k_c!g4WqoH>09?qby;Z9J2`i1zM&&?+)j}${R(N5 zu6J@2==Imni{#O1nrZIk&?SuvnRtu4uF`!z;-g(5H0m@yx=G)vo8BH0RS#21lW zh#pMUB#F@X1y-?uM**QBb+OnQo`Uw)ggIvZuo5clfD72jixrqmEW|?YDlD0Eu4&y?Q$QDv46(uXOmcE9W4A zy+Us|>0>kQL-blKOGC%59S_}7v%@DRJM`=%T6E;O@B7ZC2c8(aYNp0ttHV*@s`{EA zSfdZw!xk%JK7RvFwrs0ZJC2WzW{E6WAQU|_ZAy*VIQ>q6W`fgR1kb}M8^Q#@QD9%8 z0LhESfm8dfJ}H{2vFa-^d8YFs+SS6$!`b+Ce3kd5m9rAE-pYAsEe^N8{)MB!)q~dY z7elJT%)IUQt^fMlD{{RTt;JuEz&q`de;H0HtG+eb59%J_lz6Mm7Qj{mSe@%Cz`Biv zu>hcaK8;q<8*-9aZ@s46@zX&~LZ@(M|5>xQ6R`f4Lnf`7-}vtGsfMlM?i4{qsIr?7 zJzN4R4j^4LC|IN;fRevdo+})a7gQ;HFtv}|WPN|b3rTev<5x@R5UN(ic#?xN|MR)m zpOl``dndL{AX_vPyyjCsuM-}1{Z7{~glyFbk8-VH#n#yhD)%pKa?nekO8Yf}3GoO_ zibm7b2$XEqz%9KyY`el|5z=w{Ico8gn$xN~LJd5+-I(&4m#3`YH>N|s_3cH&>*Q)d zCKsx$gf8+oq4zgPTm+GcUMm+A8)=}03F}kGDP0}rkdFN5Bd^r<*o0o`%3@GhvLr<#SEFe)@rkrG zEtLsX1XZtcaEWK$@+`sYP-+A`o-rp!}gUNkqPCMgmUtM!A zHQjWtj1M0p086Q-LWpo-h#W1bfoQYG*R~YY#~I!ANzbLbk$n__Rr;!IAt|9ayQ7vd+|}Z^jd4XT9?q>s8wm(=avG1>Sr_)pd#k7mOBD<)%JwB3h|e{8+)~nvJ*BTaBB?)}lqT zOaI7*@RBu zlWPc!{7b)4Fk<}ZWg4tHQ$O3OilIxN&VS`z`WeJzG9S)Ar*RfRUR$U{!eHUf*kQgd}K)Z7qlLx!S)%9kV&%LkNC@-Jr_sH?3o$z#Z>^(-W=|5iXU0JJs%)aX_UbZS2#sR&J?Id*bkeo*@8CDYn5%} z!)JlG*m+e*^L6}AM;+ARF8vNZ(9^pFzEBtAiIxsX0-2urZ@=%n+@sUMhc=)64z#(Q zBC3#<&Z@4~cuR&ZdWxt^rnq4i1~4e;h+0Zy-w0e2MHM~mSGeW;9Wim0)5*na@m061 zac5-AhA}N6KHFAg27ItLYOI|`O0oBUae}6r(xTIzVmFitYt+Qe3_}uIC>3|V(#Vd# zYb=B>P%GKS+_p?kfF2aaF<8o8%R{xnL#?Sf4OIpfznl8X#it%h_uk#eUVrk$ro?s7 zyo+O7B!&`Kai_m=A%QG(*%phZu|}rINL5Pq)iC77*~WxD#8X`ure5;=rI(3LdFA8$ z%%|qmDDP5tO{D}c)GP~*i)j>CqNm}~rJE}^|L|-DrOCjm{$d+y=!WLie!Rct4gOj` zGwh-&s!HdJxJ$-V-Es72yH$0o9j#^YhKYbXe}?8BNIP1gr$0XS6(9Klnmar%xpzNW zCcm`fM4nHe80(f9Uf5^o+7dGf1;6R80o3dibS6&ut1Ne7Ig%z~LC+=&Ge~KChXCqw zk*e+!jduNH-aot;q3V(OzM5jGb8nFgY_DCVK~&2o`DuPUi0aNGg#4UOY+xFZ$RR;^ z#WWHaUejfh(|_AqQ&L?VrSoQ2Fvbo8*X=<7HY z(^)|F&BdBul*_v4>Da-vrtY{(jAommiuAchR)$2^ zBz`4ooS)&7xJUXa?!V}*KBLQbR(JPMy1Eml;d(nC`OQx*yD-NK(9vxZvy*3|qes8& zL*Kipapv?+WFQWy6B7dP6l2>)n~iNfLqxO2%5+kTQf;ixEs;mm%x#tHDj|iGXiCvzW3>t+MA*CSO;*J{?wd5|f|fp9Q?W zxXhj(Rj_%2{>5lziPw#YSCZ^GCOKkvPjRgI`YYdaE^YC1Chx*AoIgpLbI#mFhn@b` ze_K6j8Z#*{jM{E%NdbXt&D}tTfnxQV_5^J_n1APC*=n`HJY1#?EzMt=hoArvIf(Sh zpmPTe^0Cy!f>8NhKS|aY)`RI^YE;oNKJ{H^Q8dJ_jp>|NQ5Oi>%`J2j%*Xd75RyQr z(=9g^BI({m+?a>|BK)aG)zb9T&RVD>$P_DjGSX#6$;ZaztkucHu@dsK>8kO*FZ}0Vge$FBE2IdqmZhQ+u&GDKd|f=E>sZMa?s1=wanEQ=_)XP=`{iuRgl@ zmzQ63^1%y+u$?|Sez zAj!qawYxDC+FX{JBXzC`VaPx06j0i)^k$0XQ(4#y@6d!nR->)e2%EFTuo$)2&M0FN zG1X{^da(_HThqxJfjUE3Mz20j|0~W$q5T!-sEx@lB@}2Ko3h!i&#M(ycX2xTrtg06 zf}`x&+#FF$UgYd|{riUdh@_57UPOzZDnqp`HCM?IZ%^A6W|}W)mFJ zSgXZDzS{uoz)wLC8s@K(eAdMuC-!t{km%P{` z$}_mh-+>*exw#7tKKb>Z`&FelQ+60#r0^Rv=wp^ll3^&|Xe%RSGrS6#i^mj;7SE=K z=jsQfCEBGsi~ZNzPXk|L5WLphuLy*=XzlwO zc69@@It-LAM@SI!{HNlH1e z@xGL97DLspzVU%}mTY)ER84M8KU2yO#sOkD%f_`v>wp-06DS0-6is(0S&+JxSqqZp zc@Tx^WIhXUJ*S>9+0JQ%Ml4~db+lM%#83)|dYz{JxD<69-Hw1MnT2DqvTA+r?jH;% z33L%dE0aokVCN@f+E==!6Q@?S&WIKibY~eYM^w{wU7NoBz77BWF7Ew?wTa_aKr}D6 z@Oh_S@|6{LKUxz8w0w5d4!cwy(N63dVvk{5iIdx^?5Ae^6wQ#g>*qm`Qd&_ zRE!=Fa*r*tSjJwNY**(fwS1n@SvC7CA@$LORzL0DG;@KAY&k#-9Fi>Gm2pd=MbWLS zv|(3{RN~cwI&>E1%c;WN%Cq(ozzRZJV{jcpPA8oL_~>tcarx^{@o-*m2;3QS7aVx} zt3UpuTN5c@{*p-gz3k0i#2VzfsXNVx4wKABiA`b|N-6|AHe%pe#xyzeXGvCs4NQ@y z=HiOaIud}ztD6Qj3yYK z>jvp93{-fBzJjlmBXSt8KXqa{!8$*i`Q7lOQwiJ?_uufH4_t7xF5}J!Tcy(9 z@wGMgFo%X?@vU;$-2;_e`b{?`|5mYkzj=+AU-BLGbSB|oPJ)+mJ%6gS+O=vqp{fFM zW#{7j;&fyr0!iFu83Gc=I`xMcwE~F-vOfO_Us<;9&t?kv)Z#gu%0?h59-_ZROA5Na z*C!abk;Oyxbur8VTy}vz2VGs&3|_kpu0}%3 zFA@_?bvTK?vSqiBQ@eRTpJ5hUX=0s1W4EtC{|sML<1v+JKPU34AEBHk76o5P-!v|3 zRCkpW%46VhaX^FR=f_1PO`d{-eZr%zn^D_g4&yvYbNjZji@j>+=3J2B-;X}CDC%;U!Ym!&cRbb)NF_TX^{BFDt z&)CEnaV5L2mJU{)qe-j!OgJzH+lk@nldHNyHQKb(OZTk$*SDQXb$ZU^Z@_CXc^XY4 zr@ry?zx-|H0u0YPj68vypxhfSSK)u0CYR3wh?!@MhqMLwowMh>f?zyV#cZF%LbguBbWt}IS6z)z3e>b+%ZkyOln25ntlcX`b!Mh@ z`))5OdgAvRu6WluIeQe829sybBM)@(mzUjDg+A4;1?hxRHQF~bWGWF9Lp77)h%4!l zZ_y$rsa0zgrKgLn+e)OB5D@+&>cb8Rl1pNI2gtyBg#)?~0&kjncioZb&-|fpK;ecH zeYN-+q?w8V#yDTByncn>%i(rMvh*x!>~6^<<#G#ohMbmCTIW$+1Ydm)Ramwk#Lno? zUUV`nqTireXw>J(#v9y9Z2W zj)iNQ|Lne78Ap~D5PlC6nIU*)z<#vsAMh zY1PQ1BP%?12>J*g^Bw+6c{6p<_>)Q}BuR4!5!;XnCmlkD=8EAATm?jn_iO0t!xHUd ztL8vJdrhRq(mfh>L~5_nFV^a@yO)2N4h}fzZHQEVav>>;6JK-LHMc*6vFg%2b@mEt zRgDK_tUBtxfS5b^SG3CAViz^t`g4t`)Dd*G1^e7+lRi>x^qxZNOXKEwX;s4)unKjX_a$CdIBM2c!)QgErDV%m zry@L?(HQDJP}NARRE_+W98@cjT20xbzxJ=>3Y|O^r>f&WIYH3k<_B*2{zqS(&VgGe zw%Bh=-Q!%uY3pNk?C~+pxhH_yB}LUe)x;^Sqf=8e;F7tF5g7ZEjYrx}f|m}?#iMlO z(7Cda>;a^RMc^@oE^?z9EnC!K0)uzqX=JkfK$Z3dsGdG6nxwoaP_T0TjF^HE*%>}c zEpTeyz#}A|;uIfb2G=2_l@F9R)J4%8n<$}a z^m0hV$Gc4!hw{V&H-7IUuR7j%MNA;#96EWvMyQjT#~rNA< zoLdz!p(-;(^gEQL-*>W9Ndjc)OP8FUEJ`m>ZGkE+O0&&tFZ-`sA0$<9O8NiL@9`$3 zVAT?K30X)j26)X^I%&jV}ku-8L!mfn;VZ3dtXoB}zDlVWU#{3FIy+B%*jAHp4{Sb$gSX!}z>1=)dORdwKL7rgrPTJ8jmsiL}px*e& z)R|@8&}@ERDRDXdB$L00KBS9h4fQMM9n6_@$F&?BGuvuU!hb1h&qGB<#2rwRuv12$|Z>r)`&I|H9iVS+zg9@BR2CBCSXu3Z$!@n865t}#L;fwr zAue6AhxPhz9g++36BHdku{d`{Bxc%FMc?UAO~XKmsn=y1^_mJr*^(SLi|j7w;5sju z&o*3xF$&dS{a+PlK#c7*wavp-y$&D?W79 z^^AS!+D_3som&^%Cd&jhszms_Jsrd1D=X9<(VV=6f_0sD)&$es(z3adEp7WkhS!x7SfAVE><}G~QX>a<%ugHJb zG1KyIjRhogNsg&2D2D}*VIl(Y|6ISbn<5ffigtuhmARq~Fe6m|Q?6WX0agJ7D~TKx z1Co{(we~EP6$vf39yA+(Y|6K=&Y+a{<-JKJR9Aknj6Ft^F^qn^yRa`G2bT}cR;)xT zq3zzrT(&ec<~z3C@zYQLZKW-5oVb(bg>y`Vzw86wzV^P%hZ|N3_SQa*Xtj2kDjQdl z*NivWB4kQC1O!n?<;mrgbJ7jT?Q~KmS8{^4s%nW@@z|LwwG3!UMJZTn)igNwsbRIV zdqyQ(OTvq>M=i0==i(-W-mUN%_zw2YE5?$}QTk?A%tiBH-Djrk1VYtIlqR(;B~K64 zg^E?Jd;E86zwz#KbH?C?iC-sGvXDy3<^TQbhe?&>x{YBZ8xwI_9*6s8bM+gex|+BAV>bNL^60~ z%DjQmOr=Z0&-hY-(n>bl#A~Fh3K6eG)EQv|N}BTH!zo)xTXlk%r;LeG>yjkdZ^uKo z{rHowJ;^~)lLZsKwp8febH!R1rIyJoN$VgQnkLgEUAHaQL{t?$PK6acZIu->3KB)< z^z*h5`={*#nr~aIH0hdY@oZLCu_%ufcj+KO_Bc|c2P8p~>#@?2y! zxF{~oh4YTOve-zE4=M4&3iFcIp=OVTC@Ga_X!;G5p0o&wmoQt;t8s+vj3-lah{11< z2+gc`5eQYh7RfQLE>a%vgJg; zs101Ci7H99cA`S@StX;KVTH^RXQOK#tO38e5O2aN00rUM$tpDH;WzxPPT!!U9XOJN zUJfuV*9t{|0*@rCYHc6^Iu0r`n~)5Wh9)D=c?i?ms;jCc<>ssgo{>KP)i1C!s^Gan zio`J4M6;bcYu>EC>%bik-|_R$z3Ii|(V$3y=Z;9wf`g8G<%hn#(dxGnG|WKepi|Yq zNr{ZL%aVnJol&r~t49fv7^yL`fMGwLOmW6ko7xfK5j&$5-m+p*R@%ZdGq;%WrHm$7 zl7mQ<^_2&eC-VzbH%lfEYQEC1gSVSw6Rw2Q=x1zU?6iEF>L59a@T2~kGf}g~Bx|%^ zm(H&A$S7s>*w)qGc+X2^lKsg+aJmg9xroBj^GmMp*jLc36LlXVpsnwun|caOiVb9ox@)WSa{>)b5J6I34Z#yNRHuki&bVy4P^~b?UNjLPU{L5 z&s@r&jm88c3O=$nw4TmTJvJL`D9_*y>9);miZDVO0SZqQ|U?T0ROo_fu z0}$#6QgsYqPm|l0O$kJ(%XTIf&zq)hWtS1DHKn)F76DV_WJt~(RTGw)7H!7W9OhDtSm6b`F zgX=DsOkR$kw-MO<-jta}Y8gM3LkyNbp2aI_acfJAp6wtssJ60K+3gCKg*6Tn78}9B zoM9;W?mpqkV8u(vJf4hu*eFnEr>p+m6#&e@J$(C5Kl6rDwdsY8Q-lT(@45RPbll6| z|IKyxq!3_!AWp9ttEgK`q7<`K-D=D*X^Nf%Fyd0KPJ2-1+#FJIV~vsm&{_>kuKdwr zOK_TV#EC!4!FjC0cj^)hXBI8t6(nQyapuu04v|WBXr*qcX&>Ho>A8Ty%;&=sqHPm2 znVu&}X#K%KY}n8rVX_Tn7^Rrhy?g4b?>z4)%zJP0TBJ$D%*0{dPx;%%q)uyoFy{T9 zG+Ef;T8NE;mDXobQ(VJnfT;{p@j;V{nhMvUsHj(_Ig+C0cU^0BK`KBNON6?jI(>o_ zV<{^3U%Vtw-M}P2Fg~C%4Q3q53AaJ5CLzS#uMTrS^1b0TMesF$UFJNjDvdi81-EV# z;<|P`b=UUa-*ELuE<7=W9JsEXxEa8R?G_(-)?2^4WJs&ZA0|y_SIQ8uP|sL&v*G$f z0aMS^7#tnD$ysyOC0NFD8P3h$ZHz>Mh+wq2zD~1NhahL6VQP|WTIuqAnmYL`X{{yI zp)Ov^mk0=IGMKWs2%{7s(-cS@L{O`bb(Bs=!ul(xN!pRrEVSz2*3kJ4Sr%xuq`{7d ze=W^A+@XByCT>C-FCepmHh$pB4ZmyJm@L$T_m8kjpqB{7^EOpufq+_L!B2@)Ytb^u zE1*~bQc*jfu3&zyJ1c9f`lc)?b(MaZ7BTyv8vuJS?kdP&!`sAf_j2Q)8DEPg`l0*_ zbj{Q34OOOlm|JiIEv!)4nwllIc~0v?Ne^aVvJ$>GN2p-<(XFe#{_gXSKEO*j#3?$s z@X!}t^r;`;YBcj#UGvV~N|*|!&4rAT+qaz$6sAUb&@Mt3ADksBJ`S`2CmB?C03qw` zO5Dne@)kSR=EKvFWTL9_l^XUMww<(8<(B|QktFZ5)ReLgMI)KCFPOB0Pkf_em3cH@ z)LYqG`LZcJAO9D5+E`_S22*v-*)cG5ex9tqf7ACr_BSUUvM*ys)&f%xQ)RjC(tlZo z<_#NGO^}bcR9Xxz8_+h;Uq4tkuQDsMSaw5myO8QSLkSKeZgJU$EeK8YQcY=1^_>t| z1>n#KVu9VRYYibt5kIYr9!$cNQ#$xOMxuvKER8*Hr$xx*CFDcGG*xwci!aW6a6Ju) z2L#D!W}H*#tvNxJGfSsIPi3Y0PddULje~CPc=$KJ_`=0!MB{?dtSzbsAOETke`n+G zx*Amank*s=Ig~wfkf>Y)J8&$a=DbJD7gNFGsVb#B!eXvm{i^0c?T7!BA#3)XS3IpK z@lJstgNJa1djb&H=@p+wAV?qU3ZguXZ#ELn>&(gcJ_vaSQRaQ|48Vtc3#mjCjhh2d zGnH4luA63-vTxJ4swHTc`n&eq`RLZwSG@OvV-BS7yL#frND?iWr@ishKfd{Xg1;9> z;gW#5|K9YUBtI_Iq+Q3Xua~|`6q3#C2EppED~_#1U12q#;DW3aQ__M7rWcZFSEj2g zX$C?mg0WK)$PP4rSo~vnud+g?wb4BJQmvpuBn5Hy2y{cbYi6Pz!(X_Cc8W8@ESwXP zFuU$dWU73gxlG5Z{u%SMYv<$lUH`q0zxL!q7h=XmYj*O2x$_S=>fB4e@~dCdJJ6+} zsxXC2)is-*$7+q3nG`DPM5>y{Ba}mss&cEXZ_TIQE0>QPYzd90O{TjT$uMbaEEW z?19=)^v@DxHrqwyR(A)d`+NPEOUzkZKv8UTNMw%qZ9r((584tO^QC6+n${sG8x>QP zW{(Gs`H(tulu88pSIVmZs#4sRsG(llTX%NCxa)6dUGg>KPG*!2@M1=3Q86asRZyaYnHDkSsY#w~K^j0T;}iDB!?glBuN)zjmUyUyX1RjeYM3@} zG7c2IvC=2yP!Vzv%xMBe`icKpCD^p-#!;($3I*LUGAFWYtGC~O(~mxR(F>ESTNztD zfJnZC3fRR7(Mv z*X8R>%=s z*`IhRhkK}$zw(1uuDd6-gEC6Ntb81ku!fOcQcsn8qOFs&AO@NHdCUljU}-KnN>FE1 z4Dcm1@&(gp5w-lO)d?-aT5(4N@v3jU z_hrW(Xu)L#zzuSE@vpU6r(X2QAKi3+SG^lI=bk$lhIklsXXvzsr~VW~GmJQQ(s!s; z)+m15UDo}C^(?7AF%lyRp?I}Clz7!)?^G-m7KDR0>Eo)ZEQ~2RXb;UeiG1yZO4^Nu zPM-sBH&8@`l`mqI8U@?ia3*}fES(&alxBB&#XOz!6F|xG%j5T6clF0!Q-oj$lR=Ad z@LRt4i`#ACVOZzT>vdGK6@*9mIt&=yud8OJys=VJSB2ZGBi^0}rcAc#Y5=U!nWnoG zSwT{iCe#+`vv5^0ikl8%(}>a8*sEhNc+Xdt|Mp?K zEyae;!eK9uNdf}jmdi|91)oQOo)Xmr-UYP)9Ic4eR-F}*FORLOs{lnNU_x!i)${k_ zhlcsSwzMhyQ001tRr@jv;$GR*Q4QaiJOiXseKILirp>xAZbev(Z?Q+K*PK!Tt{kb# zEp`tSF70$m9A4R^?GN4Y%P+nC+@lVV3M`vg3nt9nION0&KXm1qyEC-3!=xnx$b<(I zX=IMj;qo?c=8%Tq)sw5H=2Ex|B(0RFoS58DHL4h3-eYLh6T%`c+U#0cdC2WJco>7~ z29&N?s8qd}C_WI$2;Al|t&+AJQdHK%2BzXj4bFFs+qAAlp@xE65keKNg1jc z>TR2sf9<_5JC1zPoXMpD6Ekz=A^yE(28d0&nB70o7Zf30~ z3(aR48t}a4T6OC*A?2ClOptDgjs7e5eCXc#j68Gc7Cv*vjX#x`{fs1t)tjx4ia{|9 zam;&*#I$;pPgh1-?5m@I5Y4N!_DRD+Qwv-}6`RvC8TlxkIGyd?y7tNsUwBf&j3pDR zC-!p!{E=r~eEBtr$<8n)8$of8smQV?5fHG*fEF!pN+uW-6E$EV4ldLuv~8=HQRKfZ zRy^E$*>Ld!8Ivo;wzA`Yfzv~6D!76W>7=^Sfp`}Rs;1vnS-IVQCf`+!^V+uLt@Nbx zu({yV*RZ@GfqhH-Q%AbvH`V{vhGE*6 zu9>Ulvm-+L?c9F;DNhbW*ixYvk84u(Rvw5D=2!s@Nh`ftVU~WRbL>ZgM^_p0*LVK5fwNa?Xcy_TCmy=v zS6{jGykj6Yb0&W^v4*S%;4FIH$rpa;o2$2MqwS^+38sCL3|bYv?~Gp>%~sji-!Kn) zV~u3>M3|xbrD5pi`shS6i_KFe_zZ({!vmwLh+38&i7?ToM-N}@l!YWfjt+{J?%4Nf zkbSRy&CfH5(&};3KvcVcrefRb;7D4)utS^|BQ#4eKiF`NR@pXF`nVICZQg~+bn3!-~X^vU-z-AHqd<2-}$0AtV$9ktl!c+Rs#Eo(x{1I z0&Vv~->E6ap=(81j+u!fIgWMm7}irP%Xq|0y>>cDq3$?6|4vu3VM-Dv4WG2%fQbgH z*pgZ`h+~@>?h3;hm&-w+5U(JZfxxaM_3m&7GiuqCdIcTx|8}Z~UhpUVpFHoH~Y$EpFKA#&EiR`05!PZkEXsfgvK&HP^cT)wvBu6HA`fJwM4iXeLD@ zgEkG_?uML(CF9@o&MX0pTW12Eb1fYn=FC z>cDd14H9JJjIQlSD;z}bQF|U}V>FSH3Jy!tkK9$#*SigbsL(~fP57!uT`ziy#9og|cRIHpY6k9pRegzwzrCmPJwKzNNnqyhfB31d`{=jV+@+g7sW?nL51K<%ATT;=JWn0>Ojxkb2F0b} zqKOj|dBntuR$i#FTMO7u;8{TyksLF!?`lMj`VPO4?&**O#18$cD9YKK>&P!KC*VPD zhTKpoQDZk1F}8v$E{CoPqG>7J1lP{YPmHwb#-oSK1yZMlHA*tSZc!^KK+?!7ulT^L zPC9gvLG{ljmIRXpIGopi;;Qv`i^(|kO&?kbOS|fboM~dEjr*i*V>24#lns`Wbf`aP zmV2#`SqAlEe*uy5L%D1|Oub1Ya3CcV5@t{VC%tj?+KZAmm|1!;RxjRSa4{Py*v>H| z&MXLB{U`dQVp0must4uO1!Mavf|8Mx z?{vG#L8w=MjDe}VlqjeU5e3$2<=KGS{7lVfk;7S36_Y|rFEmY4EaqF@mg60&r}Yap z*oGE%2bt-uo;0;SSicA@g6f)EzxnyPWz0*()#19&LFVqY-^MK;P7V}gemb!Nndx~f zc<#Oj9(C56KJ~-vtcSM49gm~|&x$BiWi%W^+iSURA2WJnV|uhrmE5pis+iEJ74D+G zDAnN=>^QzP$Ir72R^~);9kv)^j1ZTkCkmGoiqr6G{ao4GLt3*A-Rq%i1fC}vs4>K- zAiHZOFe!r#i`1W@v$q^+O}KgFdt+<&M&psY*MIjDuYa*F88m(pG-m4z@PS94eaUD4 zYZJ6Br-H&#^vUIvMPrn3@Zjq{%yV$|Q!m2efJ%EX3)I82WMR*XN{k^?e@PMGBmmh zJ5Mu8hd;7)!}mV<#xn>D=VCv8GVx1fVSlpW2OV?nTR(rzjbW@#95B1U(rq6IA8E69 zDg(9YhPl^YyMZ18&|f>-$h?hexCC?}w-$73cSXd2?5EEkL(1Aob4%Tn7$qYA{SjEG zFO_~23lU673$lS(mD5z*qt%fR>*JWD3L1l)b(&nip}%o(?V`XDi*d&h(F}|R^b9!6 z-fB%-(&^Ey*M9#~Z#wI!1NW82Uo-LF6N^(DIPRsFe(|R_1&w1HfA7$ss@tU~K|{S* z(3Qb^IVv_727`Yf_ml|MnJ37B$Km28>~@x`JX_Q|Hqs=C)P>ko25|-*ep$KYj7pM<2w(do29t-ZD6E z;UUMr?44iw=}q^gKO$maX4Wo}E^l2ia8|y6>womF8_f|6Fbb}`hZgjSC1xP&X0Uam zcIY_?Rh_RXKN6BmpfcTL+ObPOV@16yF~(#M=CEsw*05+avi=?;jHsSx+jXLc)aqMf zWXxqfArZ)&V_Li)zZ8c00zu)nZM}J6JGwVFa7N1 z`&!1a(XRB-RPdG@$?dnvFBXP*C6m-&KL@ALla0nM<_sVENZ*K_Llit4>Jc?ja50K= z%NoUvOhnZ6hmE=qK`D{gcLhr1|B-)goy^^^vK%9wnR<3rfAtZq^Iw{UQK(!<4B}wR zAy&vjw4w%&H#Il_JZ|`}%inU|u?Hv0{}F1?n>=|gV4V2!cYPT!N*t0df@*b5MNloO zJ-_bXKDce-)_rd=PVvkZ^?`t)JfN5m(Wkky!Tee=&G-nTSXNRbLRF}y4+%us2?>SW z(^jgB!HWzD52xNpUnQXJasb)MUQl?|&|vipaP-$4-dgmoD;t?9NXD?657j7WBZqXn zI2Lf+d&7Ty?yVgh|8L+J%-OH-KsaI-j;bVVRW8zGWyg9a9S0*Grs@;h<0KFcOBmuY zuy!8;>O5WpTPJ9{91R_03sbQ&d%X;bVD5SvoH|@I5#~!A6dhM1I4DyMJQg!eW`Eh@ zrDpu$YZ00d3miuuV07I@J`b;iYip0~+7~x(iJ&xdsp81UtBFBD`P|zInf|26%-}xM z8tlf;%3uz5{3ZT_(~s4C)>8FK3RRuIFe5Zf2-($0_e~R&*_DH-{n32M#MD$*=P4)A z+5OxoCKt8DYL|WbWK#J7mLeclez+EmPg#Kxil>OY;C_IHHX~tChYSRmqy;G9T%(_ANN|`z zOypc;OO5uNOkn$r1{IrZ@Zyh6a|jDTnqf+DOcWI$_(l^y>j_E@!-6!OF-e$%F?XRe z2X~&d&UOre*m~`cE`Qtk$7w_QlRucahBN7NnrM9SCpZ310xl5G`x79N4qMzJwmOuC z5t&%OXV{^*YGJ{EUaWWuX;&GP`ieg6640<}O#K~R!@G}=45_C7G5f%5---l#F4wk@ z;uBF8?yv^pWHv0pu0CeX+RS(qfH12Rufi(tx*Mx;EM6sCqAOsTRNk>|>&72`_AMO( z-v@y{ml2k7{I6?nxaW}!Q)^z;P=1_c|N3BieOhs%jx282vwp5=!RZ{$Ll1aXd2sz% zj^fGMJ=V`5&LvA#`XoiOJlMt(+A&cS)><5$1I1Dg6#+&nGFl0ckxo$;@+*L%45&eB zZ_P1?L&g)@%d_dGQHY9GY{h~e*J$S6Slqqg`=7q#+(^UZAnF3=L3u=y-bwD?*X<-}FUcVb?daQxSaOqv9%UExXdMI81m43nqYC!!MoBcB=56{b{>bjCG}&o5 z8Ug4EFC?AGF26vfuY|8fY@&(E_l}AKTNV1ndnF{afKP1Ovi7RW-gNdcrTDJ5H+cXT zy3AX2$Z_Xg@~NxW-SzPH-p)g%(U0Z8$yo4xaID}RU9XLfp?~e{#(Bw2tey><^o|0o z7qJzG;Ul}c1k*N^-jpO-pY*yjmTW*#h3N@wg-LXpbhUdV#~ta8q7NQgh!=dc<4Xtb-2Tw!)!+Wa8_zoWpb)03qU!cyEjFEb%-Mf; z*;Q*cKeQc-cSu-53XvmyKP*{?uEnTLy@5&hT2jVVhdLq1Zj*x8&B}AnGm5$#i8Z~} zntv2`6TqxE#L<6AFwNFx06Z+dqU(Q%S4 zhnb_(`<2Brgd!((9XmhRIJeRZwBdNvmbLfV`dh`=9KSZ+@WEVc!fN-wT!Mc#0Gs=ci>MjnOGMWBepTy1<9GEr1{fhu$u!^Uc5b zw-3DL)FTcsnSCWNOfXI4ATC{)GjG8GN1pcD5B%GI!v&t`?L4qc-Bw_I-@S*m>}^Q~ zJTZ;%I#syi2XjQx`-rXv^;=|HG@ zkBO+11%Ol6qI>MEd=@3?7Z^1}WkEtJoM3;`Tzh@{w?7ZDFvz|OH#j7R+a8(U5)8dv z2R^ZF>-E=s={>JHqPW z*zsi>v+G4ya<0j+$?$1{Lj)&V$6(#CAk1U=g!CQg1dX4f4i7%`P=DLt(ZS<$rNuon z_gmKg;PSV>?4)F4`&o8WVgBO7PI~#JpZ)&2E&7DTopG$3t3 zHP%lTBV5IyBIBq(MrJ2h;sC96Xc%2Tfi|Qd-C+p4A(SCyRR_!Y5k<%dnPv>!a8(nyH5G|xTO@4MvwrU6TyL$Ex(VXh^t9)bJ737u2$_9^@A zdn@r;EW65(p4Vj(3^HpRBLh?ga0u;hl|yJ*W`6?&9bfeCgv(Bp?%Tb$24mM>NB@y@ z0CDec>|eWIu>l3(HWdBH<`6skA54-^+Wy3(k?}!0v3$4w>T4hR+tZIKPS6V`{}2EF z`EY`RjynByAN=YsZn|fi4ebmo3Hzf<`}me)RpFak1e8KWCtzi7cH^KLO_2V({?az3L-c$HI35GA$|1h zx_OmN>|eK!Oz`IZErVN+jrBK~swR|ZpbA}e>WLjug@bl($Kw6uEAPAT)Fa~vG5!%zgQ4Ivf(a=Z)Sxn?JL55^smSi+aR z{WITPbtgPYD8i2)ee{KoAQkZf!*XV$N(Mx7rC?#&)fjnZ9i_506RV%alx3*ov@Lar zLY52{Zp+sCN&iuknEF(;071`JoSF946@NrYtTfFwdN`ob-ge&uk_o7_mqyIB52U~O zFUL}>4?T>X2p1q(v~$-0rFi`Q+m~PYkJ!cM?VoDP*I9jU@`xD5`bu&{scn(V52_f^o#>e{JGhEE;bxf6>85pYgg6{_D>-#p~~b71;jx z$&r7y+*-@9>Q;+R6x

LW6o6=dj=&dk#Zey@xg-^fo)DXXuu?67SCT_caA%ePqri zezN-h%0E{1ECzNqg;pD%`Wq)$FK*|C`H2E^|DL##^$zANE_HwR7k;>Ib7FzPj>#vsr@sRkN8v53?Y(07 zZ*iR)n-46N@2#i1k4^5A(w!zA(D&y*jN5>CZeML6n!gedupJnq5I2n zRq7fK+r>aLIh{L^DywameQqPDDi_`F*f-3Xf{o?22VLjp-?ZZ%^!WeSdlToX%53ld zoP;D0=4NcBW@@HpXr@MdRZ6iyOD)Ax%c0a#OR?H6wbW9}w$!Vywy*jVf7)Jc%SM0N z>g)VE6GE8hnJ@(i1j0-h5)??zIeYK-^IdE2li2tE3BS6{1v8wzpY^QuUEei4>jBaO z{t!13LoVP~J=@#l&MnKzBZu|1;kqIV_bS89zl(`18|{?Ny}n#r65L{ zT{AJU=UMUM!*mzayB(hYia)>l)ruVl>GQ&}!0x(z; z)z2(XF9UO>;#Nr`7FK~zZ9a`UHbt=Z%e*td7~GBhmM8pKiAy$@-{Ln5#aOefvdBp5 zx^Vp;V`8(#nViBnUuCkx3Sgwr%HIIl+n1Dn^1@xyM)wuHA(=TV^)?#)8i=#WwG^?pS!Vhv{@2;~RTdCX0wJsO)I&+@oCiv6Yz>DeJ4vE^b8&llpZu z0bv0ouhjyei~4}VkTaMzw}gn?S1>}G{}Yh$Q}fwj;L2JzfIYmGg{{h6hf53Pse+Xu zmfXscIN^r$M!;)8V$2R+v3keuTYD`1E;@O1@20YM+CFx}`H6m~{~s2gO?NWo9yIBi z2j2K@E%0@!zDpjpmBAB(N4>+EwlJB5-famtN0lXJ(P((ErhwJwR;E{2Mk}|ZfL0|x z#Gr5kQ7o9x(p1>=DnA;Iv8(qXod1h8uOcUvzB9&yG(1jVom!SzUVwuNSaP(cHTEon z)|y+{n!~DI$(j=v?Q}MVu#!{95A9m@^{anwbNRUbUENW=%%USIgF(8Z78Xb*NGAhn2LKoIi)?eD*hsh{W!oIBiPlEz((5;b8zUAyu*F7K z?>1hd0+;z_S+l2b+CW(MZCUWIXKtNRG`yF9J50Y6FFGe@Rn)pek0IyZ@c27(*6%)? zK7KMd)!Y1)t=V@wMsHhmu)P2}uTo&JG1|~B0kqgv=U^&2L`>_-;*6PfqlfUYmK>w7 z(P=2isHV=%=Tl}=;!jAxB zf^d&sN{QBXt^WSahp#LID9W87mbj_N%2YB$?=75;@X}N>nmHXmdMq^mY$ZGR$iB@B z{`LG_)5i4cQUIQ1bpz%rssEIZX2GRbn_GM{M2e)^`Sbp+Ou}fOk&5iH>_zd z%ig)eC>d)G*zQ)w&x5s*Y+D3!S^WEiy&5S#*n48;qH9D?qIalMuE2$vQUq+rK|_-T6a% zc5Ks1xfd3kUwH~h<5HlK_T2`KzhdU!iauGiW#3Wr*zG-E>5z7Ce^^`E?6h`-Rqfer zZMWAa)(7jNwP__N!qw?jE7>eoE>#DMQFZ;vEjowsMv(MiVW~wFx?n*U73ew#$FE>% zE9>6Ktt?yxD*-Cj1Z!Ivj>)E@${{)m(xK;H``~L|F5L#4m%Vx9i$}^weAb`p%DQ zcR@k5)RF|b!^7>2qL`=NvzxWH$CZ{QqhK1zS4Dt(&iAh0+B+cvm&KUOB!jn z!wE^Zm($2BFHCj@mn2>T-IPPhNhRnq$>Nc0dE3IOwmT@CJL|038}5s0TjxD;SXY$a z$x|om4(wRIAvs?E~U68e3MrAH-Nf;z3kPdV~@cTubla}j~7(d92UtI2~*}k z6tvV*2X3-qO|++7o{((cwry*;CBjLyl9O7WMRB1Gs{?r!7AW9`mW9g{?x&V#S>8DU zV2Te~npI{1_SI{$W|{mph+HT{4p?HewM3XKRSl|(WSe{Ug|*TC=wRxQr-h^At%Oce zR+e~Z_r~%Mp1pJWxPjd*gvx3c(BdqI? zz>+T!k5uewGrVwWd$6qlVCID?rL*{qb>Z4Z%PU4u!}Q7(jW|=-7p#dduwa0SKZJqW zXf%}dv3KZr0mc}R@)GhEV2a_^Xj_Dmrgs27somk8sHTS%feu){NA{Rk)1bcd$>WD> zHZT7C)%#~m9@?vuc2N^U#U{1NEXg0KD&RBi_9x%@e#Lei59t!^ndcSAu5+*u_=%wT$5hC>YNw@OJj+vf>o)NXIG{8M#vw2 zjJ7!)6Q;FkovCz`?kw2p*b_~?=h=V$xO&I_qsMcn!jmc1*Y)3gi+HnuC)yS5 z40lAfkA?V`yg@dykxeM;X*MZZomzuy#64zK7b>_3u(j0sCfloAB{?Z%vkg@MPueyc zoYb+E<>mrQ)))&G84T*Xfho0BE53dE$vdWxALO8d!)%I|6Q;VewgQMkyUx9bO}={O z^Y71Hx9h;s<6ukpZ{DJm?b_$d*_~rO>7Bk^vb+?Q7j0@{yE1H7c5T3x<<_Lu;y&PY zLCo!F8e9z9Y_`ao?PAUHtw1$Qx7dpvYsx-&e&&_u4ei~z9m)m%H7_8O?v7%$?$EX0$ct`xXx66{ z>+SUc!SGbE1t&tm=tx^jF6}q#*_#tc2nctDJF`^7SWnCsBHrTG};#d z0%_3@HX_GHq_*eSiu9JP0hr!cSqBj0Hf4}~CI;l3nRKBb8CBe!YE~Y-w_v$61}*uX z5aD;_#SiRUH}}IA@4x;cvuv0XZ~ilH{vQ-}B3GW`(vCd_jlcBfhmrn<>ckKV?7a&G z&*9-BfA2uVS;lSB&tcxF9oeef_Q>QPY(84qfRf{su-NSO92V=E67G)tZG+l&zXGAK zt~e%nIl<7;{X5r{fArG**H0Nepu3TQAl+aut1vFhpDt#$y#|l7*PY+2>%yT3F$YJZ z!>L07JkNAx-(Ik9PilA8#hgLR;kMk?#w`t-Q=4;wT%?V}dEsz-BQGq|466%v?=jG1 zo8(%v-njsnX~ai#m3_AB z+-uOdsW(6T>L>HoR_!}nN2^o;{vkXmIR|wmu^T)T9xUL^69vI7?T)H*yK)FRK+tEm zWl;3o*3{OYd0z=QyEBZ{A*hip2DJr9I5=1+Jr0i+C9f+*j!tzwQFnOn_SJJfd`a&+ zz}{E7e8OJ%=hSbFk?^uT2aTP2KvScd+}_AREoXKW9*JUD_IJ#I z%O~p&@7u9{{uggOea|%)jO^dt-Z4lYwO2fCyoXmTDecr_z^DtZzU!}Vd^&GU)n4{p zuNcJp?zj*g33x|T%!HZRm)o1I!Mb;!X5-~R!<|GbJ99fTykBZ}W={@pp4ykSjdmHb z%A=795i>X$oyyhsp!jm^P|dcLb3U5&=7v-0p_zGu8MMY&_Z<)r7F& zpcZ+@I~?(L;2(i}bb_rpm95tnAKA|qe>eMu`)|5*!q7fl?d?M1xa95XnHeTl1+I4O zJ!JgU8??;}*YCh~^m<`_pV1w_HH8pEHd?RORLcwOJy+Aj>*e;O_GnX6HQ}BNuUANi z%f4J~us?Mm8*eUJVzLWk+5MKcJ9e;U`RR?#LA&~6u(c7;)e3((6PW8@FX;*{5$leed;CCk*S`&8-vR>@nRx8t+?4Df>2f%thDS z`RGftzh1Cz`yO89_{m1I&fs{CU6XkRhqH$=2ZIACb}qNyl`Guev_E$seGrL+NF?Mv z!edcg#`K2(kgfkMSA!hhzkBPNiZ9=J;lW!kKY!G~UR^r05l-ad7da>o2Tl}&6FvG3 zpE&i}yPuf#!FLPSZrfdZ_?Y_m0AM~U$2RGGMgtW9XhI%WmunOOQI7wdv4}v_DDT=nmH`6I>&-DEI3ye@Z11annUotdG5iz zJ1bXJd^P*!$L_xNk_p55p$KjCTnLr2elGu-_~FH^OFMS$J!sVA={Mf{#H+KvDqm5# zbMHZEgQx+!$>X!fvvuLI6Gt15WR5iQ$fmkn{K%|5lFdF?Q?+qf+2`-R#51Q(95JA0 zm-exgWefhu-3E94WUK8ub?Y;D^yKL`-1FFr?|e3A*@o?VY7bFK#bR?jG-D5Kto!*` z_GtRp(JbO^tZQOla}d@{eLqmE?&zV~-P_hL`SFvto`3kxYcHKNVnDC19ZRM02zZ<6 z*lu(zD(G8OTw)I#H0r!duf6l3=imJ3y9KK%tL%v*%KL-m^t29cdm}bp2(oa zP3(EU_&M7*uBiC-!#AFJ;I^wTo;Y$~Z+j3DJ)7PhKd6xhMTNgBDrwWcQ}^D3Mohf; zs$2i^Etm(`t|67w#rVBCJcqx)t9=(WEvF>Drw!WL+9>&28|ql;q+^7zyHaX|MAgRa~7@M zw0+l}S}tU_oO>fGbmmm5o`;<}%f1dfc|t|eBL{2u?Ao?*)xw{?{P3+8?UCn?9X_yk z_s;E0OIRomZ35y837fg#P9#)AvnAj`wwE2d_UJok__zzE&$#W+k32i;-H*R1TexEV zmL1hK`wpN*?m$AG+j#2d`dod+ynyT|I{y2*BZs*Ay?V!%b<5}f^z}#Yyz=zJGjF-( z(#d0o@%%0w+O;W>2Axf>iJzNIhXun?+172^ckI%m&%ohh&%5~Y>+kr>W6!?w_J?2m zP`+sSn#%3fx}aFoA9!{aTRd|L_jNMI^P;*Dx)g-zm8^Kv>SYVdfB5|UH(!3{(LdjQ z-DOiIjTtt8Rr6HeUj@-&dYL_X4e>%$FqB85y&b!B@6~_s$noc2a>aGG-TUy9FTDEZ zd!Kw;Hh;;GE_a8iB?0HkB zU3J|pci;c`voF2&*1PY2{N?xM3+N`cp?Mp1{%{+uLLwy8L8EPd)af6)|BN%Ui|3bp z_r*u=z4PX4FFo_vU+%p5x+^ceXwsPBgZuYJg#X5`~Ju9r-C29|8~?j zUw`%G=bwJ`!F&Jw$6J4Y{neMAd*b2y?!Nuz>#w=|lJh5w88Ku)-(KCjbkYWB+-uJ*mk39P5V^2K! zRQOE6(@#F}hsPg#^x+5Zzi;MUcieW%O*dS3^%a*+Ie+4~F(Zc!>ffhl_pY5fw2z;L zo}FXEv+*O#k#)+9Ix57zwBFM89Xj#g9=-bX8#s9A@R6g&jGHj=yz?)(=;Dhnx#ZGm z)5FUOrcb+c@YG8#o^sIzlP66WH+IaZk;8`$9?-8(uO8jHc4lFvTA6GrU~NCyrfQZ# z$YZkw{R@kViuIs2rS0^nE?v5I@7}Xl@7{g-_UqTb|A2u5!$Hx&)PSge)bF=_`}FSB zvq$%CUAuPSgWKzqTbCfUqQVRxtt?ma@tXB_HXRfMtRpIpN}|?Lo2WEw7q-uJ2s%a` zQXPW!Q9HiUCTty*q>96$sF223sa+~n-{Pab!5S3OMSNVAkINPPQk*Kz6lDstAcXF} zjIfe#Y*nA|UqR|j`eZ?_pq}5#rbVy)d;bJTa;dts(vAA5NRVa-I@^BteSR{RI%nT) z1=y*r@i4#hZvMLpDz!Oh{>#@vDNRK>V?X*I))etGznc8F9(^eOUdw+A)&BqgYnH%& zvMDEHiKye^WJ+7~KkX}TBi|I;1C`)AP5k6>r24Ua@BhS`c`9`@owW^&_~|CLt1168 zu0{Y!>U8>-f)x6i<-Z)`A2gk2vJPgYv*E+qNFu8TiUK&`}Q3=bnF;(iaO`IM4iJR&X!=j;mhYTJx za6tclW|Y`u=T03vv}@PKV9bpD9O|7|Sb47f6E zeCD|q{`TTaugrS=^*3IB?bVk@z4YSWo_`K76_WmW=3TeneBD)-U2+jHI!Y+o%N}gV z7L$eKkxi^`oLr{+3LtyX&{5+iT{!iMYj3&p-Ul9e;+Yp;dwceWAAj=M7hiw-{f~3z z(pIy81ApPNf~AWWj#)sD)!aEheD}>)Uwrn-M<4w2tywQT{rJQ8&%ER28JAyj!KASx zhYmD<;eJZ~LWmWhLP2_|ZRIllrBz2o<4RhWw(r!XyE)8B7frwV#@lB;@c47DzWv@u zpMCY+oQfr@*4vaZpC9F=lU!|jZ%tG)PDy{-AMFId#&s(f&->}yFF*U&?6+Qd_Obi# zx$TClrd>F3%y4trxJ>h01wY3xu$;Y)#8`^#`CWVV9W-nVl;yfx?|Jaa7vFgI!_U5* zyJ+S5N~YZJ+5=rWOeTz=DQo1K9z8{W3Y6(ZJ+y!C?wwWJHg8(Da^akBKKd8XeAzVWI{ z&mTWxP+xIUBM6fF5|ei=M&7_vog9iO#gD!0`a4BfdE|0-@c-EjJJLqh;d)-^vG{I_p+Rppvx^MCyOy*FNX;xD&fJN<(3!w2@s zKVQjpa}ug3hum^59NW*o&Y2|-G6@(v9x>sf%dfxd!KY{a^D~yee#@>JUWBMp1&GrP zC+aixK|`wk=LTinm^;YB;l?{QuU$It+fUwk<;nZ+;L+ot#@%9B8!>MA#759diyuhn z!Qy-MA4VK-{ap_|Gi&zeKP_HkD_20RdSS?#vkhnJPn^o|_|&O$_2&?N#9)3!9tXAP zRSSOj^xapU;97_J{=Q<lTyxv~PtThD#ZQaZZrP<6(%X$9 zo|xr_*#PX1 z()|=H6JS~FIPJQ-ANkuqKK)S-tFeGpu~kD8@zvRr1jHz`{t(y^X=N;K%&^+uk+rEi za-e4C=G6BI%Xuq3NM;|& z(y_KI>4D(H8D&n6|6JEpmp)#1=6H(7Dk={f2BBdMv={oLcWhc#_SrixK6dwYm!6jd zlW@Ui={BiQz)DFA479-fud_b*X8xKjani^isn9%Rd1vdIl#w7(&Kzwb4da%aV}rHb zA)@XpLD%l8TsiNn*{?i)&vnGg{d;uw_#8#{2%+7i^mP=E14HlsS49oWiD+>N_5N`F&ntdkuLZ z7q^mTN=qmk6CNWWapaf7nM0|=xkH&lXAVbXMU<#h8c69V$^Un!^#Ui!Ns$Vg|Mfrr z_Ry_YTrhf2udW>|Wt>j$u;(8$(*IlX6YV?q95{0F6}LY4!aHA9tl3s$xlS37K*FD` zd?NW5GC`?BzmSi^Y(0AUH;iy&)j$8G}{Iw zph}mV^}+Zha_W*-R;XK_q2s4sfA7<8el~aI7SFea^(nT1qC$&o6f5Q(8hMAt{lC;k zwdY8wW)9}4L`W8%@KuILx&3UzZ>5Gu$*L~<>7&>FdiRVe;|BLuT9r^=^YO#{Ye@Bb zS*ox{e`Im{qpy7M!?MaVZHoLW(0}rd&Jo z>9@a_zs{;7tSA-li5EzcY@w2<*#pu3CbE{{-eV+Cn@H9-lD1SrH&k;1yQFks&MFGp zr3g*!DJxa+W6iwJ{{GjyuD)>efSz8B%*L-%ZyvsWGeQqMT8AI)7&NkLd8 zG(ZdDVp1y=ldP!VZx_}E$f~iXfU@0*>J%LvXGzxwykEFC;QdGg^Mi=4fLcs|=z@GP zCe;w0?#&nkB)4tFj~~4B(9P2(4C(FZaPyV^Za=e?)N!o{+Hb_;|gs~l`R$*tG_A= zQh$`?bhmm{%d6IwfAZR6w_i4KSf8%#Rq_a9`Tb&;-&OG2t>4HCu9^AFJKrv;tUh>* z2@aB9WJz-0T~(aDj;MDGYk4{e`>Yj?0*cPzj-yp6S^?5Ks)8MQ(VSI|)MpV<`-t|p zvQ7&W#5P>D53kHb_NG0UR($lpu8j-7eDkk&UU?pG+QBpWI#^Y2XmN(O?Z$4GcI?i} z&barv**~nogs7>#qenb^(cT;ttI={|VWw)oO#)b6K zP$=Ktw4JZ)NbL-GX)nyCOuD88DkCTF?0Nr)e7m%uyR_iop3O_Y`Nz|DUqwNQMiHcI zxPIDR`5doItrG?9-hb4EGyeSidq1tJQdQ1WfX^}YlnMk#3)Nj79!wv|SLLW4Q4G)Q zD%A0yV0+`XfWCw*f2>BkwP|ax?JP|o0ooDeE1nW}gngAHjV)ej(wnQ&+fQ{A*$UA8K{onm-~in6*YqRQ-M^&Nzp8(B+=?gMolWhsdU|4p5_P^)nHdlyKt zby(GdrZnasKeBK83YKsW!tY}}fw}ngGpQcd&(gk2pWzqGxbJTt%!%J#+*dE(I{)%2 zFsRa)La9{?Rc$<|4o#&IE=rPC6L6L?zB&b)Xr@S2{-O>9E9|GX=4i#q@cv%dSL0O9 zdsw^~hgJdAbJex$wNjyP*V7GjuqJPRUcQ0Kg)d@&rk9j=MKlSd9+Joa_DQrMQS%9WMEAsmqLc_hd1*Da=V0*(`V4W<1*03?!5N(V$ z70{ELSzn}X()H`r8Vb}i28HX=aS!dV zqrB?Ti`Hdm`l4Np?zJ4f@@v*KsbQLx1?y64v+KO^D}~k-(ppZZNh|exTO*r%aJ0LX z?Nrjo7B;s+IChB|{05ynT(fEZ$1mT1-G#&ZbXF^{VkWg71&SuQ(A2&8}`*L*w4MXuYdux>9y!tzl`k{HCZ4s5PuO)Dp^+B#CYO%KX=!Tp~ zEA>>OgX)~!SH%&N?4_3W{D z)+J@6b9ghYSmCxn5V4cpk{Y&lfH08mU@)iiCo03$vz{*UkJancw0-HA{@vW8%b{yQ z5V?Xh!!p`+={M@)n;(Dshc#+uHdo%>d&H6jsYjsHHcKj44K_zRi*bo``>JVm3$3u5 zvKw1jmp=WWW>Tv&tS6#3w241wSFkSHVpA(~E9j67S2nHE;e!Z`OtvkkEU|8M>%SM4 z4@ml$6WDMB^b>T+0)N8-5A0a^&EFrs;ldG8MZABG?RuH*qE(yj&~`ngim!6WhBH;R zxad?TauCTu8#@t;=V@atl{#4klZveWbxRf(LnAX-mtEh=PDD4YNv+OttkF*f+oJrC z=kgWHY2N0z9WBi^P=VEE?buY7WrjL76>Kb^lNkqWh@wW{q!%`Y1SHo}4_Ak8- zsEjsx4?3-aGPv$>hp!+b=$yz($dV%0+H%otez$4|6D`c`M)?^(`D1{T8G{-%PIdIt1ZqFGBQyBfU_+q}^mDR@^NAX7 zkVWn2J#S*bS9S^G@6=tNS?cG-A{H9)jYylx4oYwRm|vPk`}Jwg?Z%+u#|U&jB&bfX za=6N|)}5W4{!++#`ZT(^ziQc6v+loU(jaY{_#I95uaQFJPz+~+28^A4SDWWQTDWxxcw1!|#x!Ez+@MI5x z3>2hZM}g*j@bqo$q@5;+($BF<-4$$G$`x-@BO%$x#Ui zN1NpAliIKC+!tpbayFWwY3Vu6G@e^@W^uGw=W(0ZOdY7#px}@rKB*O)l3;PTKe>*` zyaOlN{PHwXW}Jdz!og6X|MBKyF)Y!O4gLno%n|aXLb1sVM`doSckkV)If= zp3z|~CJpHCMQ0a=i*#PkmbtJ<$GR5tO`Tc}?MS_*tK^opwW$$|YS8S6?CQ3hFwhAR zJ8&Mdp+jvub(~FW_VmAlAp_}UfNse-?;WTpufsM&tl zg*QF%E@w3dn`1Y>E-xLG!uq2v{WY+ zHEDz6#w;yb6klhR<@6e7GwqA~5clttF4c0EFW0%4#+C;(b!3r-@n~}^TW?r3DxR36 z9o7~b3>i<$Z*cwbL)9G8eB`>xLwXeZNqftWy_WiaQys-Q@s4Ar&wT0gWy}^BEhLJU zT&ID88X^%NpYUC_Lrr-Y(m@}&cn&kIMtS8fB8Dw$u0rD?9m-8D)SwlcEV4jzWObu* zv@qn~sYMwrIsSKu9t4ZiOO`fqYKAi<90g*Wjt(kB&^xj4zz#YMiCw5o)$xticme6Q zhd|z;!#&!! zIYuf*3#|SAjr*@^J$?YALUdX)S#zMH=Q?(O$!*X4Yazo@0OY}z$yKe$i$(dp)@H{B z?R2ixZu7R2iAH<0(cw}~;w|>E<;)UeJF{%HMxSctUSOw>7c9_xF&{3&T^dbDL4%@@ zg#7{olk1!?gFDJm}sA4j-)}%0y4*FxPui7HIA7uVq=?lRE(Y0 z;{{na&SeP$FxXrsK(UcJejNG%bB>;uu*sA@E9U9M{W(r3YvdAl`SRrq!U-7$#C(q%*m7U_<2Flzuk%jAI#*L240h?_H4Mp|G5AIm@S?j;qfQ2@i zmo+Q(5gLA$KQ=X_y&XJ%ckU+UEUQG-3;cE{vwLlSwdSy@P0TGo?wr^lD`xzGtytbQ zTI}k~lrNT4xPTRDyrRZqF!QB?v1ghvut5LP{EUbJc$$EdT~H!n%&Vy2n_2zvLLpub z->r%JA|eC^#@1+J~>Ng8B2ub@?T+XPxsC7s6cmL$f+7QPzB3k?8vE;HcCU#79Q@cZBKUHW=17b;wYrwP}Naysh4y42UB>~-1AUYD+bastb(9Q?; zw-1uZ&C?W>!0z~%t65PDgk<4N+2HSFOqMGO1DO#Z_>T`*lz|fn1AKZ;Gwy3R;9#={ zIrp79pzjEPHvAg>!iIGH@eVeBV&-(49R?fKOc@)(0MIjo;fePuwm@Wp`c_6{7``JB z910J1Ha!sLIq1PZL(SW8+s|=J0}+G50}fd)ZZfZBn{F!)SYD3dBHH(;LgUzVMS}(- zV+LR!f7o<>z$S{L2#n=NdGysHGy`DBAk$z;!BP#96GOK{m8(j8Oq4u+8;QU@Kv>-i z5X`HBBSKyk+Cy$C%iezInh67#pvNeR*O7o`CM6?;K3&GZKvM$p9mi93zwsQOrz%ha zp?+A^k;9QrSq``p>(I2IG_iF4X6YIuSI#X25=a@B zuQ5NZkwGjPC1rLYWAF<|d|;@CTF4!6dUknho$0m#N`l1S`#EkjK#-`oEARB1^BWBf z9f`RPRxSGQshb#>=mROV7=cseE^ z6031DtUg%LUI(<9!@wvr{=d-|=8ZIB)0%$Ak~L09v+*=DPq)BnBv`<*H6u;aV!6V= zW=LTlj2>q3;z8oR0#|WDP4>twYpp?otGVbEI84g`Y!HdmA2ej~;(GBY!6a8u-w>Vd zz})OzD?b0*otF&nB@_tLT6?HTf=trYBte^-8q~Ko<(J2g4l^#!IlNJL8?AktZc;SL34N}CmGxIcOM?*oS<4xtdX+yU!g!8zqfmJh2 zwmfIc*7zmSAT2w+#6~wT&qG?TsRfo1Duvd|35fG(Fq$)ZX}r_CWXJ0}*AtsDE^ys< zul@P5(YHuIv*)Z5tF4eNfB_`KaQzcZ*4ne|}JhJ+il(`?IdaVsX~YH&Js zzF>aFre!e!kNKe73#dt{ELYpB;mE#Zzf@7sFWYChG?-|kGqV*1V4csSlm;l)k;S)S zGWas6U!M2cMA*JD=*Iz$?A>z^+WnI!yD2ZJ+CV%n)X=UV{T8z`(Rk3VL(kzC-~PfE ztGKR;i{YI2#2mL2f2VLV8zhM9*Z zj-zRRIa7F>8EaqD1bsH0&1ZHtU(pQ$s01_eBrBy{NVr(A$kFgjHPxdhs+Ck7{faGCc zelr-|_v$ZSyyN2GJ}Wu>4iwO|Koi8Te(3EvmHUpF9oU#$s|VRB zg5QDof`DXBhm#)Ry=j5wnJX?^Tx>SLkYFMk4GIo~@ochPU8pSu-J}pUJ$0_G2{7j` z4Z!$q$+}TNcSuMRWDya-KpY51RxB7SXthuyGR1&~3;ity^7KZ`hLJ%`h20P&f*zI# zSK!xh>eyb!MGFNL_-Ib>$B78~PrUvKM?sse>eDe*pRjuqqMAP1{&>WigCKVnTTClE z$Snn>WvXdrri!#K2;jKzoe=w$rZ*YQkw93qMyG2!G$IJg+h|z4h`;VMmXvhulEjfS zu#iD8T@jBNyFx^f);J@jxr%%yNVsZ%!6K-bcm#Bz+6YkoM!#NmItF8q90&mo6XSvM z@21qr-k!T7x(qn)#%Df>A+fUqf+1oIh}~rd|5X$4{G=k5E2C-`$|_qmKfwQKo>-0n zb1a4h`HdNYp&qjXb&F0Ei$OCK{n9&AeNEO+acN3CXV4sDN|*W=AMo6Omp3D14LYBz-f zi~JS%;}L-Z9HNjQs_t!RJj=kkQ)tFS*@Et{UgQLTP+sG=Dk_>{&V!A!YP*wsu4LkJ zU`j0NAV$Th?6LiTm#jEgP>2v%9TOED3s@L;qLwi>ShtC!fIHo! zpsSg)eq)_WqNrR~3b~wg2}#KPUWftJ(2!XOG^5jvA}U!5G_N-_()|%l%hXcz4DW%ZkRMcLsZjDm;N-Ko8EoslsmYgtOjUopo>S6i0wf! zu{niKvWGl55-^6!!ZSNglF+bkHp}Kgi~cLAl}P&Rr=u2op~! zZo^8SN; z;#k=;CW42fdscn+>`jvgDL4w!A23xvNDr|g@>B1A^}7vwk2R}>3&R3Ka}riFGq%(P z!&ql`FBw%3S>zlE8>*e}3b~O|^CADZ4eRLo5MVMOEkKxKLLskQhK2 zG=j5GF4As=m1n@7af`ZE$}Z{C&0D&ZFGn;Km9;X z_*>4B|3<&;rUHN=N7|&=*B|GNx)>@X!00hj?eA2~fhr^!LU)quzIpl1DMM|Tevtks z7C?NDz{u(My;-)IyeN$)_y@BGheqQG1`FG}=`v}q7xLl;xL{n7KtT~4d~QKtK0%Q$ zS2N=HxKVCyc>`+|OVF*jw)~Lg>oOg`Kfy1PKsYQ{x0!OKGIvdx4#^DUFO@&hy(^YG z0VZ1sfAGh_qTfKBtUTh0L_ks#JKNgLY|;h-#@|`G*l(FKTQE<#Z{zo`-gU7FL$df1 zWoXBZ>pe$I|I1tDTMsC7;8ebeA-TJ-2EG(K$!-phHswoVP`zU5QsO0ug1ZHcPL{pv z7Aeh3cjecuojy)pm?+Q_gV60GMv$CPyAZg7#aIKL)O5k3DjcPTnv!y0^%PM=92GwF zh?%p~Mtr2@%UOLV(MH*V=T3peu%UhZ@!HBCXWf1AP)tGHiXW%GvgMbw?=fQ9eaZ64 zmo}p!c935_Fc8_q-8g7M3&Lg0+jpvDp|L!4~t!kSLLt`4<{Ud!C~Yf9=*g8irrQEB!`f9m@bapQB8kh zDHDfI6~|?w`s4de96|<(b^I_vTzTj6Shuh&UKPVi+RPCb26(?sWYRy#FY_`r^^!}6Ct?@cudLl zgt|7IfyMFer_cmxiB=7_%u7T!vB|FZ`kV}Zq!_xwuQh&E|C@(Q;wxQ*pNyf`AFxxT zDp=A(0r!6+lbuoZfM%J*rGBGRCX>663F@KS3cp1=xR1xJC6P(rL_HER1&8p<`K-|0 z*)vLn7AseXKER|@E(%>N$`Ci99%NQ*!G22-Yt}8cB9CWSpWOnDm1w<+v0X#Ny?^1# zb#V<(#E5H2a|ky0xHcS1iz^T!?veph(3f^K8Q8s^B9-!<*vOEb)j~|^MNFjB>Mcsy zLI$YC|HgNO=`oT4o-;;_q;iUh#4XUJhUz9LIDKlT@*PW8tRRQ~YlT^9ig zlvh5r%i?uL`;P>c-G)xR*G)k2gu-jjt$091Y)u=PB~~oMriQ-OxC>k*aTF;ac+ET* zqta&c=IIVPWlgjq1xJ!Wd@Bo^ttd*VG`=lc2qg%XsSD~9PZl}3zZ6_ig`Or?|vh=q4M z1H73t)O(8~n>=*quU!DGRfBt7PXtcd+E0G2XwZqi)0a`$5CwH z`sX`d{jqYt3Br{kx!=|V0hhLFt0D>AZcFu#Dq}|p!X+`^AnUkE!GkKZ02bO*W;fWC zD})lCmI$<1bBcUTG|R-pcccMYwvD*MW1N+XLk)ptUG0XiU$|)!_d@GD*4L?@(2?=Tr8D<| zzxbV^jJ&b9T#|&WkNQ_GUg74dm8Ig9vAYNts$K?^AGcR_v1obCEGqdoDaJBmPN0Ix zKn?-tfK22(QqXU^C)w^goO8zTRtYIxW-C!}blF6qqy_9^zOM3uT*0owrR|Ue2pT6N zhRa@*p-d#9nA58C2B4?v_OAQlnd`^*=~z;jOaC7iL}BYr{U_b@{8#H;4#1~@hI~eR z|FKaCk2G8kD@r8>%Ri|8qKn(+aS^55WpXc<3`grHc2Mvj_rM+DhK+zdhwra;oQc$MXNNUcf-cs!cZ*5 z!%r!MvQn`^gbnRZ)zz&2^vM}xdv~yYtAGxi9~?LeOFH(QaKp1-tleum(bAPT-)^Q= zawXhqOQ@k@bctaGpy9=34qsF;I}7-LvxJ z$FCmUi}i=JJkFe_-W7U_3P~pA6N{`C1C=QNTuTl*;eA~}v-7L&ZKo)LU zXc@Y%nJwf;h`9uWWtlk*$Rw%Wq;>6=y9>X<>8wnJPZx#eVQSzo5vVUO@sy)1>5{+A zOq9`DbWG&V~Ju|EK8SFbBW>Evg{oB zQxC87OBqk$!z;`tOdC8fm01}hZ&D%#X($n_8wQFz1vgrOrZ{w5t1)p{`UME^oGiJw zo%7$CdGV00P^fJB$5aJ6(H57`b@0XazBPXbw_3*|wCs-8Uu%QJVagy18LBE%A~#8B zIbXe1V)tT_k>y;p)50zNiLbaicyM^?L+2afM691iSP9EMiXVx7T z3>1yXnQUY!MXfszIRExn=WIQMY<_R5V%*a1Ii^!1ArTq}EL8PR9H{*Eg_|b!>j-}kbj(LtO1b~F z@5CFQ|7O$v<6(XOSRT*^B5)P*kVjI&G)CKiN3+^uRyb!)8A@U)ESBT$5Q2aK>3d>V`VcRE+dZk}r=&tGUd*guP8mEr z(uLvr1(9%Riu$8eHE08LYYiW0|zp8 z##5iI-RGPtpRj5cijop|k61~Ru_Rv|F0yt$@XhxLKA{~{w$fSUIo@2i-2yVKT!~D$ zw?vdRK^ToH3-PE1KY^z%^t&ujcuHczltT;7ad#XRBN;?x_4#`fJ-cIGISXB5Z<44+ zp^n~5a%#135gAT(hD9sKnD%((Bhem1US}IBiK_@$v+|?It{mBeG`7R#D=1jNOq-G@zoVD=L8 zOR;#!ek;4Bhy@mAw~WU9P%F_Qxh07wwZIZv@Q(@#VJ;s_-LsM)4%QWRC|# zu2D&y;GSCnjK{dKc(5|#s!2>IKegcPnNtQUyfx_<6u0Rzc*;!N)M20)=`i9&QN9%o zT{@)xFfuVz&xTvjf^^g{5mFP7okbNTh6H9rj-^rquN3QVxf6uK>OGxfRK8sN73uh5 z73>khxy(=l^`4krxrwQ!u5zkmq7d1^UW%lYk)-FOFT?k+ZqP2Hj%A8!F#3s-k-CvR z5g>N6L%pYQ7J#0EB=9|TczfBaw@>b`_>M_+i;dbSteJcp{_5a~u>KEuYSU6kGO;AI zv&xB+cwNpHRs8G->jf}n%wecf172D&iHk=I0do|x$>kUf#eV%PW+VfX;kf_GVNf#9 zW?6vM_I*{DBqOwGj?!oW1i1{{hVy0Tw;=!|gG{)$bco?ILQ!%=tyz+ZWy?G>BEBb| z6`pQ;@?hn+&)+b<4-_AfEWu+0ZW0EWjO<@1tsmN|I}R0ug;Lhb$r~$J}$K8ro~C46rs&CCW{k$DTX)q<)Prd+8Yo zO2D3uR{~jXF$aligg8}HkT#C|3NZxnC-2BGM`bmZL=t;EUuHqCr%D@+*RK8a@vBA& zf75f21o@$YqSEdou6+FC)iwDrFXnm8l2DEme31cBK|l~tDOJ?0!H{k<7K>t|6Kbo} z-z>V!(t#!r2_**}x5e$wk)skK2dc2Dgd!SaAY#8M(yOH^U+nfnk_iu$WZo02a?y$5 zDC4X@$>%s{WE%h_wKvG0|vx&ti{cWf*OZmzu=Dh?2QV0Z=&=>HlcK(@`3W=#sT$D zB|;>{a88NK3Qe+1TeGO-%w&96Obbyd-V!sA`;!hzp~MW;4HYSZaFfhuCu3#g8&o?8 zK?H*!y9q1>TOLMIgN>a!vZLbfcV9RF+==BifdoST$#=Xyuj;VG z)r>m(6Tg)pvraT5UQ35mQp64tm*4zNyP9!-L5jm=Bt(_!5IrD0R*U~N%d_Ci$qJQ8 zQwms5EF%@~q@sARL}^e`DU_HLtq)Es&&Fn|I9*~9RgdNs^FA0JtS4MJS(w}$ae5`s zA=zRGOHzYAEL(lBhqnIs(oGY3cTkr{d1@{2qmw_S#M`~bUH|-dn+3|mn@N7!>7fwF zFgbQyQYM3Bo$-KS@H$up|6_4tAt@2sIjX<~mUD(A^M7(!5{>-1Qr7IXvdsKtZmj$l zmam}Ivn_&VwQ9#kjIj#k(pv=1_Gt&fww0Wq*{9 zk5m1m?5Y4Jw5g>tGa1#@ta$%{sY679!u0&q>eP88ameulPJ^cW`JE-Z>6A&DhOF2{ zhQC=v;z4LPtPDbJe@l&|c+UMS z;t;|cMk%n8gs7#Mbd=1K#X0IpVNo;5)vP$Cp?uAg9ZI6uUMM;giI8@wT{)c3$t~_#>gb zf{&y|XjM{gy>%-Dq-2F;-jSR45lC(xfJ$weFbb)Y`Yc^oie???r3~u5kyV9?8iYjx zH1!Z@l_`3U&^f;8GV^#%XdYU8p%0RY3iFgYl&QMZ6dKOce>n7?h$U4lwlsf!#RYIC zqme2od2J2vXKCS`)mBusPCaWou-y2`LtDOk{<^WfND(HIDy6j8bM!S&eYsIF{*YKu zG0}EGStT{$*^XB(sX)hRRN@L?P0|ywI(eoz_LN}?-SuS|j+Q77C_`~a>Hn=|yNDvI zs0-ns)dug%`KV|w>8jdpSpI7fB?n$yNL2IYokI(Q@)9elAg7WI3#jSSD$B$eV2W$&asW5$>GG{}lJ^20#Csb-wv53T}B>n-eC0Qj$ z_#u5wNjG^=zJNx8YHD(_7qCE%2v}lLSVD#b@_V7=lvgNEwy#s@pHOgYFCV)p@IPID zta|Z3W?n=Z4cn8PqV(hfqLKj@-2J99jK&Y*`fMyG!dhiV6xND%s^!@zIF=Xaa0_r^ zeXJIBqCQ$TJvej}%ri-e3HbtrLz0vmqM;Y+p`@5EPyOOeNXvAxEW&&xJ4;o@JK&8m zc~KGN!2bCR$;vTMpYKR7w!u#DY%za{EUSEgF2PnL7cLv?@veoto8yk*q?{Z3LUn;1 z-ahA*TPF4~*09hd=8WOS7k}6y#$dNYBpKNnvTWo@EYejz7WS!gz{QGLNU-HNt{&B$G}NJS?f-a zxcD>A>_>!>?X@ttg0GZG7W_b7RIX3bJBderPrsn17d48=DJZg)uEbD{)n$oy-3*m7 zP@=D0EGsOKN90r*%V>uzkHsg7spzeg{S%6M=Yi38JK8Np!!Q03?yfpuEH!hBE$OL8 zI`zl*u6+OgO9sg@L#7R{PK`ZMe~r)}HDXI+>L8o~i_^P^9%M zhEe~3OYAJ#qCGZ5wx3FjP&sW@M6OYJU|+9GNS0ssjbExsWtzMtaSIW9ve3KtFYqS0&G5$6JIw|8^fF3|Mb@WVyDNn3sN{l$`8tK+D!G zVU}H(zM!zUL*Mi6d~;!Sp2)lPSpx#46wCH1RVR5l&GM34OM%(ZKE-^h6`J;kLZ7l? zStG&`V5`t(MFlfRlbb?0gk~$&p@*QXPzjqbk(&T1hAvdke%bwG;#Hw=e2~g1xw6yz zUQ(sV@+wd_K3e*gMHiiA5L1VEb7S-iC#sJlu4a=CZnjD9WN}3^*diCaqx_Yd$HPzy z(6jY%kl17NjAy^wqM{sk{+LZB$r+WPJUP=M{^4kVnqcSC#Sf4udMy&slGwz6&=aTF z0@-M8iF+_Lc1Z+6bLvO>aT%~Q3AmC8nOVZAEFG$13;M%nyPtDkDZgtc68T=BtZ9H3 zup*R{k`@4u4CJsA$<0%am{G_;8z6b-eIC*f> z7f)P1%raYC!Xw$W!A1v9eelE8`*4$kTEJONoI;1PT9-qM&{6%G)m?Tu3!uOwDO;ji&d05F85xFGzFy$(F=7?XOqt;@py<8|4R2BOAEcu?+926NR-LvJRKV zl2dkxWI3;>%nafX;CT(#sHLSyRnI)Dm>c17Oi6zWwvB1Y-@3089MVxJSQP&>ymy`; zrBp0nS!n|}Jt->;h_OLRD2L?KQ~?sL+7^PZTg`_6oOfd}2SwJrSt zuCr>+i`S3sY4yGpsSV~jOS_M}`suGLMPg0Y^6-`~6sxCzAt!=2m_-(O5pcsU^uBm; z-rL^YSe9{sn2ED4GCQ&$y*lS~^l!eW{Dnu;(gT6Fnor#O3jAc0?uYf;@`@e-s69u} zuUv&2u%~9FszQpK?*`!m52Vk*9>{K%x0nC1eBlDIG00e+i^(#pRH!g6)+{Yq=7IH} zJTh%a7X?XaNo!oXu%y$#Dfi7@p2U)#oe#O6pP{ix>l%nmOZ;qfD$^uKMg0kT{=i1S&#^ zfumA<21W%-k7Kk17mZ315)I7W7N#1gG)cjWL6)Q>^VOH7CK9z843LI=ubWXYx5Q;u zW|>7-V|)fCDo@Q5R8G;1CIn?6qf+q7*;w1FII2l1Y2k3`ssR=xJbXZ^oQ1w5r@}Qb!2B`Ouee(9gGG3NNlKEV zx{LH2nYL)FMp#JsqebK6{*5FnsB~%!P|1NKqxSX3_pN+S{ENz9dZo#2j1V3EwW!(= zU1@n!Fm4i#+Yr}yC(;x97j}99#HRWf#2E^Ko zAPCDd=#y1(V%)LAdePj|{Gta$NIP!xF%f!1C6$vKbhFcQOe-aC4=}`VJP;CRrJrOT z;?lW`@!SlwjAj?_;7|jQ+6Q$$?N{!PEY8s#b6>t`TrZ{PC9H^J7Da8kkG$p?k*+xF z{3|q%@yRn1%K&qR$x-03W4YR3g)ahYW7Ygu%OM30;!3l4Sgl-vz+2ABU8SXn&4o!K z5}Y(k0DjH@8$!kJc=B4$a#)XBq^!e^2h#q5V8rPJeUhK_j(_V>`Z^Ct&Vt6)t+&>@ zlC9AB9m#M4C?6ZD_j!2Jt%L~u;>yG%OL6+-!Hu6icG*w^`BkYcSn4=(&;u^I@BLN# zycXRen6xu0%0PQ*K0!35w2-n-sv62Sc}^Wc8QS;(M;Vg@h9KkaIzf0MJVP^EhD4|2 zt5>aMt~M>j)~+ZLZIoc`r*y0-kqa#oJPk_cLQ7K95}agBGR{1L_^@f9Doqlb;7*eY z7W~OrYa%up`&D2R!r=-G;1q+y_pNVz&yu(AI*)W1o?ta%^U8IPF*m$CcSlUUlFYrz zi;9!-VzctSs%M_HCwHhOgS_6!1}@11J7H_3G)1%`KZj z(W0@< zSmy=Zxbr6OF1*{M{@9K=FI;Q+SniqKn!13V$kv?)PkZFkjR*7I!b_Aj)+M@qt9w=* zM6@QhSnsI2SBSpZ3!!NiElGZQX|)Fk|Mc=n`X`v%QHCUPDlVeN(ME-zxMDehdBx?P zmejbjW)bpjiL746k4%(sY!u<(F|u}j&;5?$+0Q)EWoKeXM|nIR+AK7?V0;U3i(P^z z7#-SLdW8LJKe+EA1(hbIKM+&4?>*tR*B8V()*}77+kh=^oNBplZ%314ow1l?P;QvK zw`qd+P}g|S-26YOv1>`3|A~)zd7{yY$f4L9SUG8D z*^AeY_B7+V)Gi9(L24xG)uzj^%b)nNGFC6yruz5Q$fPz>k{EG|fVX4Y;7kOkYLXcY za&k8p%{^n1^O+B5ms^l)8QX4KFYI&SIfg0QD1Pd7C&Eo)Jf)pKEO@|=E3(z;45s$BQc z0~b5Rm8`PqKN!Wm>+L0byfe9(;VRu@eJ3U;BB*6cbIM#hh5=y-Mrr@Gy=Q=qxIb8< zBofOZFcwBh8Wz?tUyzk3jMg|#1w_IYE!Mq-%U$AB)M??l+C>G928{mGwhiK5RNRyB zKzUixjC7Xq+byI-e=<$41e?lUk6s!d42z4D)>&aCN}6xuI!Il0#j7`wsZi#6Jz~mP z!&kTAS3Ujh7HeS22T=K*b`pw;G`&4g;|I-6`q(|o=SWk?#UKX(taevZ(GNeh;98 zx_Rs?sD$Ea_AMc1u-LT7TTiS%*|@(5m=!@h;VRnt$fbiR6D8vL0}bx|&Y$`2^1a6s z>Yoq9cUfLPj+4|f=<^Aw+%kq$8gAlY*WLXY9tZ^;R(xhIjDN|_q5 zdLC0Ipk3s_l-y6kOx4>wB(K?rqBV1_Q->OFMi(C1>=r0V}1*NxbHAjb} zT&e5?4qp=gU4}S~7GmU|{6vg;CMZcikz$cvY#yJ= zGcCBY#DNi6J38Zz3s;QrG|_Fmi%tru3a|yAo|yHJy+srdYb4MYrZ=T_nlY0jnrtdb zYK>FmRv?!x$9))P%SK~~0fNPaXr#?m2=H6@bJ?CLlEal*pRqPsp~7uB2icRHr%^FC zT@hd4K?mjq7rXDKS`P%`jcKrKQV{G!jb5z{%?x-lPRTIEuHRNcUWx51rNL8^pi==6PY`#zKJeiwX`GU+4& zoWQsHM#z+P3-O$- zfKtMr>|BvGRo>zPu*K3w{SrBOHyCYc5LNS#Vl5V+p|esa;hi=MP(;MuDU}ylSaCj> z_pAK2q_#d^d4uq`=pS>f`unZpds}rXZq;et$$7(c9*-T22wJ^+Gr6_~|25Jla z3fK}snY@klV5omzscOC>)+{b6Itb#k4+myc3ZbD@1mYmP}IKnq`Tf(zAxcy3Xu+&u8Fb< zxANztIE!dvYntDhRqOq&{>XkJ0xd&KUO1Iu(N=+Fc~T#Dy89`BUF+J8U&x%g>sH zTAtB#E$%9?f`HCH2McHq*2zSpXKDr(tQ(=q@=s+`%F#ec&v9A*?MLYBzmb9B05wgJ z>fxu9=owu_x0lt>PcYzA(gAA+ z7G<1*G&@aX{VO)UmCGm=D2Fj`o=#fEMQ&4mvZCUlpstRCNi(E8mXWdlMv5{zTbndT zB*QZ_Zk|d>=#;(tHSms~5DqH7GPZ|{m6qBlSg$Rc%j6-V$Ff;H%!KcH%cJ-J9k}3c ztk}da1IU#du(1x~y9qBNJ8LaKL<*kD@a8h}m&f-kn04dm?#j(>PVGk7##xT+@vk-~ zaRLREL$N#XCYIPl89PEs+q?nI@YH+Nh@p2yy$r{--^eVUZ0cguOqmpBDfr8wh#oq* zHF-!OXV@g*acyyV>SN_0g^c06HgWolWTs*h8JR+M=)Q^G6Hsok9$*OdJZzE7T$+-d zw#mv+Vq?OzgvZ9ZwzK-bq-0MW-1zbR7xhyeK=KlzDIxpXBIPo?yDUyACPjdxnZRw+ zh*%N8f))LO5Tq+K^YUMcKD~@0eGqn7PY^%xi-}1Nz)m2UaK+TT{Hw^?nyL7-CZwGp zn115Fl@|^gdFf1q0#roHKA3kw@sl$sS<1tDHPNv^fXe&2yu|&(`4eLLx-?Jxo14u3 zjriB?n)||x5nUCyZ%NfqZ{lE9r-7F|^hunBb-vMjRNn(pJ1m=s47=o+c7=w&GnmaA z+3L)Z$(97|G8}xDn3sr^L;$7dcT~ia*(x4THjFRf){rrAIRB;<0acJw6i;?)t?AU z)hVc;UJOGg_WxaqT8|{*>yi+KR{A5#k)W7ZtJZJ1RFk?^DaN2{gZv05Q*X&xfv(Tcq{kx~G zP@yxO-fHq1tH$CB@B3g)t*TBZPk6-Xk$|SFD3BNXFt1?AG=}f#MUyHqA6__7&HEJi9NZ-Q6k*Wp@xxQgr6d8Y@6E-3m?Z-QB%306ld z&gqBwMd_GwRONg}U?yHB4Rw?xeiL6=pf=+%;6GGjwI33+08>ik6}h;44x`-+qgD8n zPH#i02rrA;^**m<^rZefV;V`%r&A5XG7(xlCB-DqlM>#_cI5q8Xb$8N+@9oXjmbD< zi}uX63~#J`M-gHoD{ns*&=@qaWCFHx*N5x#riWWJKFAe)A#%msSYB4=x}5%(;7?dGw@WF@OHH1>BIeA!>W z`L}$wH@47MOq+qS*);X5uSLV;HJ}ujL^j$-w=kEL3`{Sn=u@I_gAr=^tW?8yGf|

@9CB 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�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

3??#;yu$@u` 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 U9 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 g*J(_pNative); - Windows_Data_PropertyChangedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Data_PropertyChangedEventArgs_get_PropertyName(RootSystem.IntPtr pNative); - public string PropertyName - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("PropertyChangedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Data_PropertyChangedEventArgs_get_PropertyName(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - var managedString = RootSystem.Runtime.InteropServices.Marshal.PtrToStringUni(objectPointer); - RootSystem.Runtime.InteropServices.Marshal.FreeCoTaskMem(objectPointer); - return managedString; - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Data/PropertyChangedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Data/PropertyChangedEventArgs.cs.meta deleted file mode 100644 index 63ca36b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Data/PropertyChangedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0f717bd2a5c39cc43a49fc8904889932 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect.meta deleted file mode 100644 index 6a387a3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 03a85dc91c80f064886b50db26cbfc98 -folderAsset: yes -timeCreated: 1488532537 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs deleted file mode 100644 index f786d80..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs +++ /dev/null @@ -1,18 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.Activity - // - public enum Activity : int - { - EyeLeftClosed =0, - EyeRightClosed =1, - MouthOpen =2, - MouthMoved =3, - LookingAway =4, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs.meta deleted file mode 100644 index d07c7b6..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Activity.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ec6785f19ac6c494a9957fa63f49fcf5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs deleted file mode 100644 index 0cae6f3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs +++ /dev/null @@ -1,14 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.Appearance - // - public enum Appearance : int - { - WearingGlasses =0, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs.meta deleted file mode 100644 index 013bde3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Appearance.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 00eb0d9c4964c0b4f9e3090704ff7201 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs deleted file mode 100644 index dcbb064..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs +++ /dev/null @@ -1,240 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeam - // - public sealed partial class AudioBeam : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBeam(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBeam_AddRefObject(ref _pNative); - } - - ~AudioBeam() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeam_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeam_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_AudioBeam_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.AudioBeamMode Windows_Kinect_AudioBeam_get_AudioBeamMode(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeam_put_AudioBeamMode(RootSystem.IntPtr pNative, Windows.Kinect.AudioBeamMode audioBeamMode); - public Windows.Kinect.AudioBeamMode AudioBeamMode - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeam"); - } - - return Windows_Kinect_AudioBeam_get_AudioBeamMode(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeam"); - } - - Windows_Kinect_AudioBeam_put_AudioBeamMode(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioBeam_get_AudioSource(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioSource AudioSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeam"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioBeam_get_AudioSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.AudioSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_AudioBeam_get_BeamAngle(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeam_put_BeamAngle(RootSystem.IntPtr pNative, float beamAngle); - public float BeamAngle - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeam"); - } - - return Windows_Kinect_AudioBeam_get_BeamAngle(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeam"); - } - - Windows_Kinect_AudioBeam_put_BeamAngle(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_AudioBeam_get_BeamAngleConfidence(RootSystem.IntPtr pNative); - public float BeamAngleConfidence - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeam"); - } - - return Windows_Kinect_AudioBeam_get_BeamAngleConfidence(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_AudioBeam_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeam"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_AudioBeam_get_RelativeTime(_pNative)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeam_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_AudioBeam_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_AudioBeam_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - private void __EventCleanup() - { - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_AudioBeam_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs.meta deleted file mode 100644 index 0ae54c0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeam.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e64f7eb8de6f72e42874eb2ea7c01be5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs deleted file mode 100644 index 07e386b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs +++ /dev/null @@ -1,114 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeamFrame - // - public sealed partial class AudioBeamFrame : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBeamFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBeamFrame_AddRefObject(ref _pNative); - } - - ~AudioBeamFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrame_AddRefObject(ref RootSystem.IntPtr pNative); - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioBeamFrame_get_AudioBeam(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioBeam AudioBeam - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioBeamFrame_get_AudioBeam(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.AudioBeam(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioBeamFrame_get_AudioSource(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioSource AudioSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioBeamFrame_get_AudioSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.AudioSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_AudioBeamFrame_get_Duration(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan Duration - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_AudioBeamFrame_get_Duration(_pNative)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_AudioBeamFrame_get_RelativeTimeStart(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTimeStart - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_AudioBeamFrame_get_RelativeTimeStart(_pNative)); - } - } - - - // Public Methods - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs.meta deleted file mode 100644 index d72ed80..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8ff93fd69396b944ea1e0d067cf5b091 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs deleted file mode 100644 index 73c443b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeamFrameArrivedEventArgs - // - public sealed partial class AudioBeamFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBeamFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBeamFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~AudioBeamFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_AudioBeamFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioBeamFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioBeamFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioBeamFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.AudioBeamFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs.meta deleted file mode 100644 index 1db0509..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: bb78a9668fb2c694881a216e349cb1e9 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs deleted file mode 100644 index 757ea2e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs +++ /dev/null @@ -1,71 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeamFrameList - // - public sealed partial class AudioBeamFrameList : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBeamFrameList(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBeamFrameList_AddRefObject(ref _pNative); - } - - ~AudioBeamFrameList() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameList_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameList_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_AudioBeamFrameList_Dispose(_pNative); - } - Windows_Kinect_AudioBeamFrameList_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameList_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs.meta deleted file mode 100644 index af5290c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameList.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: fe7ef6722da9a6d42b589d3f8b35b6f9 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs deleted file mode 100644 index e7212b3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs +++ /dev/null @@ -1,309 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeamFrameReader - // - public sealed partial class AudioBeamFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBeamFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBeamFrameReader_AddRefObject(ref _pNative); - } - - ~AudioBeamFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_AudioBeamFrameReader_Dispose(_pNative); - } - Windows_Kinect_AudioBeamFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioBeamFrameReader_get_AudioSource(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioSource AudioSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioBeamFrameReader_get_AudioSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.AudioSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_AudioBeamFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrameReader"); - } - - return Windows_Kinect_AudioBeamFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrameReader"); - } - - Windows_Kinect_AudioBeamFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.AudioBeamFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReader_add_FrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate(Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_AudioBeamFrameReader_add_FrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_AudioBeamFrameReader_add_FrameArrived(_pNative, Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_AudioBeamFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_AudioBeamFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioBeamFrameReader_AcquireLatestBeamFrames_Length(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioBeamFrameReader_AcquireLatestBeamFrames(RootSystem.IntPtr pNative, [RootSystem.Runtime.InteropServices.Out] RootSystem.IntPtr[] outCollection, int outCollectionSize); - public RootSystem.Collections.Generic.IList AcquireLatestBeamFrames() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrameReader"); - } - - int outCollectionSize = Windows_Kinect_AudioBeamFrameReader_AcquireLatestBeamFrames_Length(_pNative); - var outCollection = new RootSystem.IntPtr[outCollectionSize]; - var managedCollection = new Windows.Kinect.AudioBeamFrame[outCollectionSize]; - - outCollectionSize = Windows_Kinect_AudioBeamFrameReader_AcquireLatestBeamFrames(_pNative, outCollection, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i(outCollection[i], n => new Windows.Kinect.AudioBeamFrame(n)); - - managedCollection[i] = obj; - } - return managedCollection; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_AudioBeamFrameReader_add_FrameArrived(_pNative, Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_AudioBeamFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_AudioBeamFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs.meta deleted file mode 100644 index 9f91736..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: df51c172437a76942a0ec4a4f1438a8f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs deleted file mode 100644 index 76b8091..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs +++ /dev/null @@ -1,101 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeamFrameReference - // - public sealed partial class AudioBeamFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBeamFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBeamFrameReference_AddRefObject(ref _pNative); - } - - ~AudioBeamFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_AudioBeamFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_AudioBeamFrameReference_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrameReference"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_AudioBeamFrameReference_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioBeamFrameReference_AcquireBeamFrames_Length(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioBeamFrameReference_AcquireBeamFrames(RootSystem.IntPtr pNative, [RootSystem.Runtime.InteropServices.Out] RootSystem.IntPtr[] outCollection, int outCollectionSize); - public RootSystem.Collections.Generic.IList AcquireBeamFrames() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrameReference"); - } - - int outCollectionSize = Windows_Kinect_AudioBeamFrameReference_AcquireBeamFrames_Length(_pNative); - var outCollection = new RootSystem.IntPtr[outCollectionSize]; - var managedCollection = new Windows.Kinect.AudioBeamFrame[outCollectionSize]; - - outCollectionSize = Windows_Kinect_AudioBeamFrameReference_AcquireBeamFrames(_pNative, outCollection, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i(outCollection[i], n => new Windows.Kinect.AudioBeamFrame(n)); - - managedCollection[i] = obj; - } - return managedCollection; - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs.meta deleted file mode 100644 index ed90803..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0fe91384e0a914a4985b0cc2f1026a72 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs deleted file mode 100644 index 8df2d36..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs +++ /dev/null @@ -1,15 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeamMode - // - public enum AudioBeamMode : int - { - Automatic =0, - Manual =1, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs.meta deleted file mode 100644 index 289e883..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamMode.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1f287bc065b7e7a4faa7cf96c175eabb -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs deleted file mode 100644 index 7d79042..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs +++ /dev/null @@ -1,212 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBeamSubFrame - // - public sealed partial class AudioBeamSubFrame : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBeamSubFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBeamSubFrame_AddRefObject(ref _pNative); - } - - ~AudioBeamSubFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamSubFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamSubFrame_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_AudioBeamSubFrame_Dispose(_pNative); - } - Windows_Kinect_AudioBeamSubFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.AudioBeamMode Windows_Kinect_AudioBeamSubFrame_get_AudioBeamMode(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioBeamMode AudioBeamMode - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - return Windows_Kinect_AudioBeamSubFrame_get_AudioBeamMode(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioBeamSubFrame_get_AudioBodyCorrelations(RootSystem.IntPtr pNative, [RootSystem.Runtime.InteropServices.Out] RootSystem.IntPtr[] outCollection, int outCollectionSize); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioBeamSubFrame_get_AudioBodyCorrelations_Length(RootSystem.IntPtr pNative); - public RootSystem.Collections.Generic.IList AudioBodyCorrelations - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - int outCollectionSize = Windows_Kinect_AudioBeamSubFrame_get_AudioBodyCorrelations_Length(_pNative); - var outCollection = new RootSystem.IntPtr[outCollectionSize]; - var managedCollection = new Windows.Kinect.AudioBodyCorrelation[outCollectionSize]; - - outCollectionSize = Windows_Kinect_AudioBeamSubFrame_get_AudioBodyCorrelations(_pNative, outCollection, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i(outCollection[i], n => new Windows.Kinect.AudioBodyCorrelation(n)); - - managedCollection[i] = obj; - } - return managedCollection; - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_AudioBeamSubFrame_get_BeamAngle(RootSystem.IntPtr pNative); - public float BeamAngle - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - return Windows_Kinect_AudioBeamSubFrame_get_BeamAngle(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_AudioBeamSubFrame_get_BeamAngleConfidence(RootSystem.IntPtr pNative); - public float BeamAngleConfidence - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - return Windows_Kinect_AudioBeamSubFrame_get_BeamAngleConfidence(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_AudioBeamSubFrame_get_Duration(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan Duration - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_AudioBeamSubFrame_get_Duration(_pNative)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern uint Windows_Kinect_AudioBeamSubFrame_get_FrameLengthInBytes(RootSystem.IntPtr pNative); - public uint FrameLengthInBytes - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - return Windows_Kinect_AudioBeamSubFrame_get_FrameLengthInBytes(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_AudioBeamSubFrame_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_AudioBeamSubFrame_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamSubFrame_CopyFrameDataToArray(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, int frameDataSize); - public void CopyFrameDataToArray(byte[] frameData) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - var frameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(frameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _frameData = frameDataSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_AudioBeamSubFrame_CopyFrameDataToArray(_pNative, _frameData, frameData.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBeamSubFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs.meta deleted file mode 100644 index 39df743..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBeamSubFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: e3bf3859145801247a7f6d4dcd90b2be -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs deleted file mode 100644 index a469055..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs +++ /dev/null @@ -1,68 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioBodyCorrelation - // - public sealed partial class AudioBodyCorrelation : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioBodyCorrelation(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioBodyCorrelation_AddRefObject(ref _pNative); - } - - ~AudioBodyCorrelation() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBodyCorrelation_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioBodyCorrelation_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_AudioBodyCorrelation_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern ulong Windows_Kinect_AudioBodyCorrelation_get_BodyTrackingId(RootSystem.IntPtr pNative); - public ulong BodyTrackingId - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBodyCorrelation"); - } - - return Windows_Kinect_AudioBodyCorrelation_get_BodyTrackingId(_pNative); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs.meta deleted file mode 100644 index 1846d96..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioBodyCorrelation.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: f12e3715b57390a47aeecc0046c6d6ff -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs deleted file mode 100644 index 1191d0d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs +++ /dev/null @@ -1,361 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.AudioSource - // - public sealed partial class AudioSource : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal AudioSource(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_AudioSource_AddRefObject(ref _pNative); - } - - ~AudioSource() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioSource_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioSource_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_AudioSource_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioSource_get_AudioBeams(RootSystem.IntPtr pNative, [RootSystem.Runtime.InteropServices.Out] RootSystem.IntPtr[] outCollection, int outCollectionSize); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_AudioSource_get_AudioBeams_Length(RootSystem.IntPtr pNative); - public RootSystem.Collections.Generic.IList AudioBeams - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - int outCollectionSize = Windows_Kinect_AudioSource_get_AudioBeams_Length(_pNative); - var outCollection = new RootSystem.IntPtr[outCollectionSize]; - var managedCollection = new Windows.Kinect.AudioBeam[outCollectionSize]; - - outCollectionSize = Windows_Kinect_AudioSource_get_AudioBeams(_pNative, outCollection, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i(outCollection[i], n => new Windows.Kinect.AudioBeam(n)); - - managedCollection[i] = obj; - } - return managedCollection; - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_AudioSource_get_IsActive(RootSystem.IntPtr pNative); - public bool IsActive - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - return Windows_Kinect_AudioSource_get_IsActive(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioSource_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioSource_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern uint Windows_Kinect_AudioSource_get_MaxSubFrameCount(RootSystem.IntPtr pNative); - public uint MaxSubFrameCount - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - return Windows_Kinect_AudioSource_get_MaxSubFrameCount(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_AudioSource_get_SubFrameDuration(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan SubFrameDuration - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_AudioSource_get_SubFrameDuration(_pNative)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern uint Windows_Kinect_AudioSource_get_SubFrameLengthInBytes(RootSystem.IntPtr pNative); - public uint SubFrameLengthInBytes - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - return Windows_Kinect_AudioSource_get_SubFrameLengthInBytes(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.KinectAudioCalibrationState Windows_Kinect_AudioSource_get_AudioCalibrationState(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectAudioCalibrationState AudioCalibrationState - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - return Windows_Kinect_AudioSource_get_AudioCalibrationState(_pNative); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_FrameCapturedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_FrameCapturedEventArgs_Delegate))] - private static void Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.FrameCapturedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioSource_add_FrameCaptured(RootSystem.IntPtr pNative, _Windows_Kinect_FrameCapturedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameCaptured - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_FrameCapturedEventArgs_Delegate(Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_AudioSource_add_FrameCaptured(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_AudioSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_AudioSource_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_AudioSource_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_AudioSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioSource_OpenReader(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioBeamFrameReader OpenReader() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioSource_OpenReader(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.AudioBeamFrameReader(n)); - } - - private void __EventCleanup() - { - { - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_AudioSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_AudioSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs.meta deleted file mode 100644 index d808a8e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/AudioSource.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: cb60632e999b8d44cb5cfd848e264abf -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Body.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Body.cs deleted file mode 100644 index 744d071..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Body.cs +++ /dev/null @@ -1,355 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.Body - // - public sealed partial class Body : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal Body(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_Body_AddRefObject(ref _pNative); - } - - ~Body() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_Body_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_Body_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_Body_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_Body_get_Activities(RootSystem.IntPtr pNative, [RootSystem.Runtime.InteropServices.Out] Windows.Kinect.Activity[] outKeys, [RootSystem.Runtime.InteropServices.Out] Windows.Kinect.DetectionResult[] outValues, int outCollectionSize); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_Body_get_Activities_Length(RootSystem.IntPtr pNative); - public RootSystem.Collections.Generic.Dictionary Activities - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("Body"); - } - - int outCollectionSize = Windows_Kinect_Body_get_Activities_Length(_pNative); - var outKeys = new Windows.Kinect.Activity[outCollectionSize]; - var outValues = new Windows.Kinect.DetectionResult[outCollectionSize]; - var managedDictionary = new RootSystem.Collections.Generic.Dictionary(); - - outCollectionSize = Windows_Kinect_Body_get_Activities(_pNative, outKeys, outValues, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i Appearance - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("Body"); - } - - int outCollectionSize = Windows_Kinect_Body_get_Appearance_Length(_pNative); - var outKeys = new Windows.Kinect.Appearance[outCollectionSize]; - var outValues = new Windows.Kinect.DetectionResult[outCollectionSize]; - var managedDictionary = new RootSystem.Collections.Generic.Dictionary(); - - outCollectionSize = Windows_Kinect_Body_get_Appearance(_pNative, outKeys, outValues, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i Expressions - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("Body"); - } - - int outCollectionSize = Windows_Kinect_Body_get_Expressions_Length(_pNative); - var outKeys = new Windows.Kinect.Expression[outCollectionSize]; - var outValues = new Windows.Kinect.DetectionResult[outCollectionSize]; - var managedDictionary = new RootSystem.Collections.Generic.Dictionary(); - - outCollectionSize = Windows_Kinect_Body_get_Expressions(_pNative, outKeys, outValues, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i JointOrientations - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("Body"); - } - - int outCollectionSize = Windows_Kinect_Body_get_JointOrientations_Length(_pNative); - var outKeys = new Windows.Kinect.JointType[outCollectionSize]; - var outValues = new Windows.Kinect.JointOrientation[outCollectionSize]; - var managedDictionary = new RootSystem.Collections.Generic.Dictionary(); - - outCollectionSize = Windows_Kinect_Body_get_JointOrientations(_pNative, outKeys, outValues, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i Joints - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("Body"); - } - - int outCollectionSize = Windows_Kinect_Body_get_Joints_Length(_pNative); - var outKeys = new Windows.Kinect.JointType[outCollectionSize]; - var outValues = new Windows.Kinect.Joint[outCollectionSize]; - var managedDictionary = new RootSystem.Collections.Generic.Dictionary(); - - outCollectionSize = Windows_Kinect_Body_get_Joints(_pNative, outKeys, outValues, outCollectionSize); - Helper.ExceptionHelper.CheckLastError(); - for(int i=0;i(_pNative); - - if (disposing) - { - Windows_Kinect_BodyFrame_Dispose(_pNative); - } - Windows_Kinect_BodyFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_BodyFrame_get_BodyCount(RootSystem.IntPtr pNative); - public int BodyCount - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrame"); - } - - return Windows_Kinect_BodyFrame_get_BodyCount(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrame_get_BodyFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrameSource BodyFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyFrame_get_BodyFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrame_get_FloorClipPlane(RootSystem.IntPtr pNative); - public Windows.Kinect.Vector4 FloorClipPlane - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrame"); - } - - var objectPointer = Windows_Kinect_BodyFrame_get_FloorClipPlane(_pNative); - Helper.ExceptionHelper.CheckLastError(); - var obj = (Windows.Kinect.Vector4)RootSystem.Runtime.InteropServices.Marshal.PtrToStructure(objectPointer, typeof(Windows.Kinect.Vector4)); - Windows.Kinect.KinectUnityAddinUtils.FreeMemory(objectPointer); - return obj; - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_BodyFrame_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_BodyFrame_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrame.cs.meta deleted file mode 100644 index 79c2174..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 19d23b65a55461b4c8fcfc815e9a8be5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs deleted file mode 100644 index 78c1e2e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyFrameArrivedEventArgs - // - public sealed partial class BodyFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~BodyFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_BodyFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs.meta deleted file mode 100644 index 0f5a32f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 676ce9850965f6d4fad5e20fa2a8da30 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs deleted file mode 100644 index 981d83f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs +++ /dev/null @@ -1,297 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyFrameReader - // - public sealed partial class BodyFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyFrameReader_AddRefObject(ref _pNative); - } - - ~BodyFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_BodyFrameReader_Dispose(_pNative); - } - Windows_Kinect_BodyFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrameReader_get_BodyFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrameSource BodyFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyFrameReader_get_BodyFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_BodyFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameReader"); - } - - return Windows_Kinect_BodyFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameReader"); - } - - Windows_Kinect_BodyFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_BodyFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_BodyFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.BodyFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReader_add_FrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_BodyFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_BodyFrameArrivedEventArgs_Delegate(Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyFrameReader_add_FrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyFrameReader_add_FrameArrived(_pNative, Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrameReader_AcquireLatestFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrame AcquireLatestFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyFrameReader_AcquireLatestFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrame(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyFrameReader_add_FrameArrived(_pNative, Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_BodyFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs.meta deleted file mode 100644 index 3ccd3a8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3af2f300d248d614eb0f026c16be6e51 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs deleted file mode 100644 index e6cd68a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs +++ /dev/null @@ -1,89 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyFrameReference - // - public sealed partial class BodyFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyFrameReference_AddRefObject(ref _pNative); - } - - ~BodyFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_BodyFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_BodyFrameReference_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameReference"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_BodyFrameReference_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrameReference_AcquireFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrame AcquireFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameReference"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyFrameReference_AcquireFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrame(n)); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs.meta deleted file mode 100644 index 2356956..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 083a7736def5ad3429a51cc96a6c4564 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs deleted file mode 100644 index 20bc0be..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs +++ /dev/null @@ -1,308 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyFrameSource - // - public sealed partial class BodyFrameSource : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyFrameSource(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyFrameSource_AddRefObject(ref _pNative); - } - - ~BodyFrameSource() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameSource_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameSource_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_BodyFrameSource_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_BodyFrameSource_get_BodyCount(RootSystem.IntPtr pNative); - public int BodyCount - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameSource"); - } - - return Windows_Kinect_BodyFrameSource_get_BodyCount(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_BodyFrameSource_get_IsActive(RootSystem.IntPtr pNative); - public bool IsActive - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameSource"); - } - - return Windows_Kinect_BodyFrameSource_get_IsActive(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrameSource_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyFrameSource_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_FrameCapturedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_FrameCapturedEventArgs_Delegate))] - private static void Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.FrameCapturedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameSource_add_FrameCaptured(RootSystem.IntPtr pNative, _Windows_Kinect_FrameCapturedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameCaptured - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_FrameCapturedEventArgs_Delegate(Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyFrameSource_add_FrameCaptured(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameSource_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyFrameSource_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyFrameSource_OpenReader(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrameReader OpenReader() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyFrameSource_OpenReader(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrameReader(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameSource_OverrideHandTracking(RootSystem.IntPtr pNative, ulong trackingId); - public void OverrideHandTracking(ulong trackingId) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameSource"); - } - - Windows_Kinect_BodyFrameSource_OverrideHandTracking(_pNative, trackingId); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyFrameSource_OverrideHandTracking_1(RootSystem.IntPtr pNative, ulong oldTrackingId, ulong newTrackingId); - public void OverrideHandTracking(ulong oldTrackingId, ulong newTrackingId) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrameSource"); - } - - Windows_Kinect_BodyFrameSource_OverrideHandTracking_1(_pNative, oldTrackingId, newTrackingId); - Helper.ExceptionHelper.CheckLastError(); - } - - private void __EventCleanup() - { - { - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs.meta deleted file mode 100644 index 1757146..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyFrameSource.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3679e372811a218438e365b6da52873c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs deleted file mode 100644 index 46f8311..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs +++ /dev/null @@ -1,147 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyIndexFrame - // - public sealed partial class BodyIndexFrame : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyIndexFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyIndexFrame_AddRefObject(ref _pNative); - } - - ~BodyIndexFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrame_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_BodyIndexFrame_Dispose(_pNative); - } - Windows_Kinect_BodyIndexFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrame_get_BodyIndexFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrameSource BodyIndexFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrame_get_BodyIndexFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrame_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrame_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_BodyIndexFrame_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_BodyIndexFrame_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrame_CopyFrameDataToArray(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, int frameDataSize); - public void CopyFrameDataToArray(byte[] frameData) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrame"); - } - - var frameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(frameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _frameData = frameDataSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_BodyIndexFrame_CopyFrameDataToArray(_pNative, _frameData, frameData.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs.meta deleted file mode 100644 index 89d8a61..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 31029a9c200fe984790d50a6d2875e32 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs deleted file mode 100644 index 5f61069..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyIndexFrameArrivedEventArgs - // - public sealed partial class BodyIndexFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyIndexFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyIndexFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~BodyIndexFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_BodyIndexFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs.meta deleted file mode 100644 index c367ea9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 673826e3a38138946b030da95a1d0f95 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs deleted file mode 100644 index d12ae3f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs +++ /dev/null @@ -1,297 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyIndexFrameReader - // - public sealed partial class BodyIndexFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyIndexFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyIndexFrameReader_AddRefObject(ref _pNative); - } - - ~BodyIndexFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_BodyIndexFrameReader_Dispose(_pNative); - } - Windows_Kinect_BodyIndexFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrameReader_get_BodyIndexFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrameSource BodyIndexFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrameReader_get_BodyIndexFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_BodyIndexFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameReader"); - } - - return Windows_Kinect_BodyIndexFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameReader"); - } - - Windows_Kinect_BodyIndexFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.BodyIndexFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReader_add_FrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate(Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyIndexFrameReader_add_FrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyIndexFrameReader_add_FrameArrived(_pNative, Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyIndexFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyIndexFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrameReader_AcquireLatestFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrame AcquireLatestFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrameReader_AcquireLatestFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrame(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyIndexFrameReader_add_FrameArrived(_pNative, Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_BodyIndexFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyIndexFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs.meta deleted file mode 100644 index 197c659..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0a9ba9eb393e51241bb15db5d3bf3390 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs deleted file mode 100644 index 822a944..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs +++ /dev/null @@ -1,89 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyIndexFrameReference - // - public sealed partial class BodyIndexFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyIndexFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyIndexFrameReference_AddRefObject(ref _pNative); - } - - ~BodyIndexFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_BodyIndexFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_BodyIndexFrameReference_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameReference"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_BodyIndexFrameReference_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrameReference_AcquireFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrame AcquireFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameReference"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrameReference_AcquireFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrame(n)); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs.meta deleted file mode 100644 index 7ae48af..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3ee08767e1297454a93a5759b975860d -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs deleted file mode 100644 index e6747ad..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs +++ /dev/null @@ -1,289 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.BodyIndexFrameSource - // - public sealed partial class BodyIndexFrameSource : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal BodyIndexFrameSource(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_BodyIndexFrameSource_AddRefObject(ref _pNative); - } - - ~BodyIndexFrameSource() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameSource_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameSource_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_BodyIndexFrameSource_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrameSource_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrameSource_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_BodyIndexFrameSource_get_IsActive(RootSystem.IntPtr pNative); - public bool IsActive - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameSource"); - } - - return Windows_Kinect_BodyIndexFrameSource_get_IsActive(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrameSource_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrameSource_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_FrameCapturedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_FrameCapturedEventArgs_Delegate))] - private static void Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.FrameCapturedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameSource_add_FrameCaptured(RootSystem.IntPtr pNative, _Windows_Kinect_FrameCapturedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameCaptured - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_FrameCapturedEventArgs_Delegate(Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyIndexFrameSource_add_FrameCaptured(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyIndexFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_BodyIndexFrameSource_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_BodyIndexFrameSource_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_BodyIndexFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrameSource_OpenReader(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrameReader OpenReader() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrameSource_OpenReader(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrameReader(n)); - } - - private void __EventCleanup() - { - { - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyIndexFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_BodyIndexFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs.meta deleted file mode 100644 index d0b7ed9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/BodyIndexFrameSource.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7568d115ed2fcca4ba26af8d7e3252c6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs deleted file mode 100644 index 3add3d3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs +++ /dev/null @@ -1,58 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.CameraIntrinsics - // - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct CameraIntrinsics - { - public float FocalLengthX { get; set; } - public float FocalLengthY { get; set; } - public float PrincipalPointX { get; set; } - public float PrincipalPointY { get; set; } - public float RadialDistortionSecondOrder { get; set; } - public float RadialDistortionFourthOrder { get; set; } - public float RadialDistortionSixthOrder { get; set; } - - public override int GetHashCode() - { - return FocalLengthX.GetHashCode() ^ FocalLengthY.GetHashCode() ^ - PrincipalPointX.GetHashCode() ^ PrincipalPointY.GetHashCode() ^ - RadialDistortionSecondOrder.GetHashCode() ^ RadialDistortionFourthOrder.GetHashCode() ^ - RadialDistortionSixthOrder.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is CameraIntrinsics)) - { - return false; - } - - return this.Equals((CameraIntrinsics)obj); - } - - public bool Equals(CameraIntrinsics obj) - { - return FocalLengthX.Equals(obj.FocalLengthX) && FocalLengthY.Equals(obj.FocalLengthY) && - PrincipalPointX.Equals(obj.PrincipalPointX) && PrincipalPointY.Equals(obj.PrincipalPointY) && - RadialDistortionSecondOrder.Equals(obj.RadialDistortionSecondOrder) && - RadialDistortionFourthOrder.Equals(obj.RadialDistortionFourthOrder) && - RadialDistortionSixthOrder.Equals(obj.RadialDistortionSixthOrder); - } - - public static bool operator ==(CameraIntrinsics a, CameraIntrinsics b) - { - return a.Equals(b); - } - - public static bool operator !=(CameraIntrinsics a, CameraIntrinsics b) - { - return !(a.Equals(b)); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs.meta deleted file mode 100644 index 830faec..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraIntrinsics.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: bc11ab9581163ba44b721acb44ce8763 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs deleted file mode 100644 index 16818a0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs +++ /dev/null @@ -1,47 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.CameraSpacePoint - // - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct CameraSpacePoint - { - public float X { get; set; } - public float Y { get; set; } - public float Z { get; set; } - - public override int GetHashCode() - { - return X.GetHashCode() ^ Y.GetHashCode() ^ Z.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is CameraSpacePoint)) - { - return false; - } - - return this.Equals((CameraSpacePoint)obj); - } - - public bool Equals(CameraSpacePoint obj) - { - return X.Equals(obj.X) && Y.Equals(obj.Y) && Z.Equals(obj.Z); - } - - public static bool operator ==(CameraSpacePoint a, CameraSpacePoint b) - { - return a.Equals(b); - } - - public static bool operator !=(CameraSpacePoint a, CameraSpacePoint b) - { - return !(a.Equals(b)); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs.meta deleted file mode 100644 index ede69a0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CameraSpacePoint.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ef37675a811881f44be680e69695e9e3 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs deleted file mode 100644 index e730778..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Helper -{ - class CollectionMap : Helper.ThreadSafeDictionary where TValue : new() - { - public bool TryAddDefault(TKey key) - { - lock (_impl) - { - if (!_impl.ContainsKey(key)) - { - _impl.Add(key, new TValue()); - return true; - } - else - { - return false; - } - } - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs.meta deleted file mode 100644 index 6859795..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CollectionMap.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b404867256ddca245871a9152fd54294 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs deleted file mode 100644 index 4d248a9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs +++ /dev/null @@ -1,113 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorCameraSettings - // - public sealed partial class ColorCameraSettings : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal ColorCameraSettings(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_ColorCameraSettings_AddRefObject(ref _pNative); - } - - ~ColorCameraSettings() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorCameraSettings_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorCameraSettings_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_ColorCameraSettings_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_ColorCameraSettings_get_ExposureTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan ExposureTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorCameraSettings"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_ColorCameraSettings_get_ExposureTime(_pNative)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_ColorCameraSettings_get_FrameInterval(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan FrameInterval - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorCameraSettings"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_ColorCameraSettings_get_FrameInterval(_pNative)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_ColorCameraSettings_get_Gain(RootSystem.IntPtr pNative); - public float Gain - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorCameraSettings"); - } - - return Windows_Kinect_ColorCameraSettings_get_Gain(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_ColorCameraSettings_get_Gamma(RootSystem.IntPtr pNative); - public float Gamma - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorCameraSettings"); - } - - return Windows_Kinect_ColorCameraSettings_get_Gamma(_pNative); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs.meta deleted file mode 100644 index 68f467e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorCameraSettings.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1f199f6bb5e11b941b4c707a6783daaa -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs deleted file mode 100644 index 9f3a6dd..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs +++ /dev/null @@ -1,218 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorFrame - // - public sealed partial class ColorFrame : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal ColorFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_ColorFrame_AddRefObject(ref _pNative); - } - - ~ColorFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrame_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_ColorFrame_Dispose(_pNative); - } - Windows_Kinect_ColorFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrame_get_ColorCameraSettings(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorCameraSettings ColorCameraSettings - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrame_get_ColorCameraSettings(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorCameraSettings(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrame_get_ColorFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrameSource ColorFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrame_get_ColorFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrame_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrame_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.ColorImageFormat Windows_Kinect_ColorFrame_get_RawColorImageFormat(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorImageFormat RawColorImageFormat - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - return Windows_Kinect_ColorFrame_get_RawColorImageFormat(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_ColorFrame_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_ColorFrame_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrame_CopyRawFrameDataToArray(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, int frameDataSize); - public void CopyRawFrameDataToArray(byte[] frameData) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - var frameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(frameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _frameData = frameDataSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_ColorFrame_CopyRawFrameDataToArray(_pNative, _frameData, frameData.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrame_CopyConvertedFrameDataToArray(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, int frameDataSize, Windows.Kinect.ColorImageFormat colorFormat); - public void CopyConvertedFrameDataToArray(byte[] frameData, Windows.Kinect.ColorImageFormat colorFormat) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - var frameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(frameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _frameData = frameDataSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_ColorFrame_CopyConvertedFrameDataToArray(_pNative, _frameData, frameData.Length, colorFormat); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrame_CreateFrameDescription(RootSystem.IntPtr pNative, Windows.Kinect.ColorImageFormat format); - public Windows.Kinect.FrameDescription CreateFrameDescription(Windows.Kinect.ColorImageFormat format) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrame_CreateFrameDescription(_pNative, format); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs.meta deleted file mode 100644 index 2a35329..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 4e3ef938a829c1d4385d938971be0b73 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs deleted file mode 100644 index c0481d9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorFrameArrivedEventArgs - // - public sealed partial class ColorFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal ColorFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_ColorFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~ColorFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_ColorFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs.meta deleted file mode 100644 index 4e92e1d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 383ab6b5e32edbc4ca3eca80db481330 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs deleted file mode 100644 index 5e6ab54..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs +++ /dev/null @@ -1,297 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorFrameReader - // - public sealed partial class ColorFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal ColorFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_ColorFrameReader_AddRefObject(ref _pNative); - } - - ~ColorFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_ColorFrameReader_Dispose(_pNative); - } - Windows_Kinect_ColorFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameReader_get_ColorFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrameSource ColorFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameReader_get_ColorFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_ColorFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameReader"); - } - - return Windows_Kinect_ColorFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameReader"); - } - - Windows_Kinect_ColorFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_ColorFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_ColorFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.ColorFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReader_add_FrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_ColorFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_ColorFrameArrivedEventArgs_Delegate(Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_ColorFrameReader_add_FrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_ColorFrameReader_add_FrameArrived(_pNative, Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_ColorFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_ColorFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameReader_AcquireLatestFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrame AcquireLatestFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameReader_AcquireLatestFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrame(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_ColorFrameReader_add_FrameArrived(_pNative, Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_ColorFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_ColorFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs.meta deleted file mode 100644 index 3d9ef38..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6c8a043d45b0ce641bfe872c2654ec00 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs deleted file mode 100644 index ccd0b14..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs +++ /dev/null @@ -1,89 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorFrameReference - // - public sealed partial class ColorFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal ColorFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_ColorFrameReference_AddRefObject(ref _pNative); - } - - ~ColorFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_ColorFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_ColorFrameReference_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameReference"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_ColorFrameReference_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameReference_AcquireFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrame AcquireFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameReference"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameReference_AcquireFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrame(n)); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs.meta deleted file mode 100644 index 59e874e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 05fb49d39d96f5a4ea512141fab5cff6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs deleted file mode 100644 index 4f4e4ba..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs +++ /dev/null @@ -1,308 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorFrameSource - // - public sealed partial class ColorFrameSource : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal ColorFrameSource(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_ColorFrameSource_AddRefObject(ref _pNative); - } - - ~ColorFrameSource() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameSource_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameSource_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_ColorFrameSource_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameSource_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameSource_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_ColorFrameSource_get_IsActive(RootSystem.IntPtr pNative); - public bool IsActive - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameSource"); - } - - return Windows_Kinect_ColorFrameSource_get_IsActive(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameSource_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameSource_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_FrameCapturedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_FrameCapturedEventArgs_Delegate))] - private static void Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.FrameCapturedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameSource_add_FrameCaptured(RootSystem.IntPtr pNative, _Windows_Kinect_FrameCapturedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameCaptured - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_FrameCapturedEventArgs_Delegate(Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_ColorFrameSource_add_FrameCaptured(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_ColorFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_ColorFrameSource_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_ColorFrameSource_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_ColorFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameSource_OpenReader(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrameReader OpenReader() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameSource_OpenReader(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrameReader(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrameSource_CreateFrameDescription(RootSystem.IntPtr pNative, Windows.Kinect.ColorImageFormat format); - public Windows.Kinect.FrameDescription CreateFrameDescription(Windows.Kinect.ColorImageFormat format) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrameSource_CreateFrameDescription(_pNative, format); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - - private void __EventCleanup() - { - { - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_ColorFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_ColorFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs.meta deleted file mode 100644 index f91b172..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorFrameSource.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 31be1a3a8cdc0d1408a7eada947fe966 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs deleted file mode 100644 index 7c2f7c9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs +++ /dev/null @@ -1,19 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorImageFormat - // - public enum ColorImageFormat : int - { - None =0, - Rgba =1, - Yuv =2, - Bgra =3, - Bayer =4, - Yuy2 =5, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs.meta deleted file mode 100644 index cbde2ca..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorImageFormat.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a203492c798220244927d338800eec2f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs deleted file mode 100644 index d72c563..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs +++ /dev/null @@ -1,46 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.ColorSpacePoint - // - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct ColorSpacePoint - { - public float X { get; set; } - public float Y { get; set; } - - public override int GetHashCode() - { - return X.GetHashCode() ^ Y.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is ColorSpacePoint)) - { - return false; - } - - return this.Equals((ColorSpacePoint)obj); - } - - public bool Equals(ColorSpacePoint obj) - { - return X.Equals(obj.X) && Y.Equals(obj.Y); - } - - public static bool operator ==(ColorSpacePoint a, ColorSpacePoint b) - { - return a.Equals(b); - } - - public static bool operator !=(ColorSpacePoint a, ColorSpacePoint b) - { - return !(a.Equals(b)); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs.meta deleted file mode 100644 index cfcf600..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ColorSpacePoint.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 9eb5711cb5d886b45883ead06f286283 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs deleted file mode 100644 index 811213b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs +++ /dev/null @@ -1,336 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.CoordinateMapper - // - public sealed partial class CoordinateMapper : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal CoordinateMapper(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_CoordinateMapper_AddRefObject(ref _pNative); - } - - ~CoordinateMapper() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_CoordinateMapper_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate))] - private static void Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.CoordinateMappingChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_add_CoordinateMappingChanged(RootSystem.IntPtr pNative, _Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler CoordinateMappingChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate(Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handler); - _Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_CoordinateMapper_add_CoordinateMappingChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_CoordinateMapper_add_CoordinateMappingChanged(_pNative, Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handler, true); - _Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_CoordinateMapper_MapCameraPointToDepthSpace(RootSystem.IntPtr pNative, Windows.Kinect.CameraSpacePoint cameraPoint); - public Windows.Kinect.DepthSpacePoint MapCameraPointToDepthSpace(Windows.Kinect.CameraSpacePoint cameraPoint) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var objectPointer = Windows_Kinect_CoordinateMapper_MapCameraPointToDepthSpace(_pNative, cameraPoint); - Helper.ExceptionHelper.CheckLastError(); - var obj = (Windows.Kinect.DepthSpacePoint)RootSystem.Runtime.InteropServices.Marshal.PtrToStructure(objectPointer, typeof(Windows.Kinect.DepthSpacePoint)); - RootSystem.Runtime.InteropServices.Marshal.FreeHGlobal(objectPointer); - return obj; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_CoordinateMapper_MapCameraPointToColorSpace(RootSystem.IntPtr pNative, Windows.Kinect.CameraSpacePoint cameraPoint); - public Windows.Kinect.ColorSpacePoint MapCameraPointToColorSpace(Windows.Kinect.CameraSpacePoint cameraPoint) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var objectPointer = Windows_Kinect_CoordinateMapper_MapCameraPointToColorSpace(_pNative, cameraPoint); - Helper.ExceptionHelper.CheckLastError(); - var obj = (Windows.Kinect.ColorSpacePoint)RootSystem.Runtime.InteropServices.Marshal.PtrToStructure(objectPointer, typeof(Windows.Kinect.ColorSpacePoint)); - RootSystem.Runtime.InteropServices.Marshal.FreeHGlobal(objectPointer); - return obj; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_CoordinateMapper_MapDepthPointToCameraSpace(RootSystem.IntPtr pNative, Windows.Kinect.DepthSpacePoint depthPoint, ushort depth); - public Windows.Kinect.CameraSpacePoint MapDepthPointToCameraSpace(Windows.Kinect.DepthSpacePoint depthPoint, ushort depth) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var objectPointer = Windows_Kinect_CoordinateMapper_MapDepthPointToCameraSpace(_pNative, depthPoint, depth); - Helper.ExceptionHelper.CheckLastError(); - var obj = (Windows.Kinect.CameraSpacePoint)RootSystem.Runtime.InteropServices.Marshal.PtrToStructure(objectPointer, typeof(Windows.Kinect.CameraSpacePoint)); - RootSystem.Runtime.InteropServices.Marshal.FreeHGlobal(objectPointer); - return obj; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_CoordinateMapper_MapDepthPointToColorSpace(RootSystem.IntPtr pNative, Windows.Kinect.DepthSpacePoint depthPoint, ushort depth); - public Windows.Kinect.ColorSpacePoint MapDepthPointToColorSpace(Windows.Kinect.DepthSpacePoint depthPoint, ushort depth) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var objectPointer = Windows_Kinect_CoordinateMapper_MapDepthPointToColorSpace(_pNative, depthPoint, depth); - Helper.ExceptionHelper.CheckLastError(); - var obj = (Windows.Kinect.ColorSpacePoint)RootSystem.Runtime.InteropServices.Marshal.PtrToStructure(objectPointer, typeof(Windows.Kinect.ColorSpacePoint)); - RootSystem.Runtime.InteropServices.Marshal.FreeHGlobal(objectPointer); - return obj; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapCameraPointsToDepthSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr cameraPoints, int cameraPointsSize, RootSystem.IntPtr depthPoints, int depthPointsSize); - public void MapCameraPointsToDepthSpace(Windows.Kinect.CameraSpacePoint[] cameraPoints, Windows.Kinect.DepthSpacePoint[] depthPoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var cameraPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(cameraPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _cameraPoints = cameraPointsSmartGCHandle.AddrOfPinnedObject(); - var depthPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthPoints = depthPointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapCameraPointsToDepthSpace(_pNative, _cameraPoints, cameraPoints.Length, _depthPoints, depthPoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapCameraPointsToColorSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr cameraPoints, int cameraPointsSize, RootSystem.IntPtr colorPoints, int colorPointsSize); - public void MapCameraPointsToColorSpace(Windows.Kinect.CameraSpacePoint[] cameraPoints, Windows.Kinect.ColorSpacePoint[] colorPoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var cameraPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(cameraPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _cameraPoints = cameraPointsSmartGCHandle.AddrOfPinnedObject(); - var colorPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(colorPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _colorPoints = colorPointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapCameraPointsToColorSpace(_pNative, _cameraPoints, cameraPoints.Length, _colorPoints, colorPoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapDepthPointsToCameraSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr depthPoints, int depthPointsSize, RootSystem.IntPtr depths, int depthsSize, RootSystem.IntPtr cameraPoints, int cameraPointsSize); - public void MapDepthPointsToCameraSpace(Windows.Kinect.DepthSpacePoint[] depthPoints, ushort[] depths, Windows.Kinect.CameraSpacePoint[] cameraPoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var depthPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthPoints = depthPointsSmartGCHandle.AddrOfPinnedObject(); - var depthsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depths, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depths = depthsSmartGCHandle.AddrOfPinnedObject(); - var cameraPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(cameraPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _cameraPoints = cameraPointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapDepthPointsToCameraSpace(_pNative, _depthPoints, depthPoints.Length, _depths, depths.Length, _cameraPoints, cameraPoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapDepthPointsToColorSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr depthPoints, int depthPointsSize, RootSystem.IntPtr depths, int depthsSize, RootSystem.IntPtr colorPoints, int colorPointsSize); - public void MapDepthPointsToColorSpace(Windows.Kinect.DepthSpacePoint[] depthPoints, ushort[] depths, Windows.Kinect.ColorSpacePoint[] colorPoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var depthPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthPoints = depthPointsSmartGCHandle.AddrOfPinnedObject(); - var depthsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depths, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depths = depthsSmartGCHandle.AddrOfPinnedObject(); - var colorPointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(colorPoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _colorPoints = colorPointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapDepthPointsToColorSpace(_pNative, _depthPoints, depthPoints.Length, _depths, depths.Length, _colorPoints, colorPoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapDepthFrameToCameraSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr depthFrameData, int depthFrameDataSize, RootSystem.IntPtr cameraSpacePoints, int cameraSpacePointsSize); - public void MapDepthFrameToCameraSpace(ushort[] depthFrameData, Windows.Kinect.CameraSpacePoint[] cameraSpacePoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var depthFrameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthFrameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthFrameData = depthFrameDataSmartGCHandle.AddrOfPinnedObject(); - var cameraSpacePointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(cameraSpacePoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _cameraSpacePoints = cameraSpacePointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapDepthFrameToCameraSpace(_pNative, _depthFrameData, depthFrameData.Length, _cameraSpacePoints, cameraSpacePoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapDepthFrameToColorSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr depthFrameData, int depthFrameDataSize, RootSystem.IntPtr colorSpacePoints, int colorSpacePointsSize); - public void MapDepthFrameToColorSpace(ushort[] depthFrameData, Windows.Kinect.ColorSpacePoint[] colorSpacePoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var depthFrameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthFrameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthFrameData = depthFrameDataSmartGCHandle.AddrOfPinnedObject(); - var colorSpacePointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(colorSpacePoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _colorSpacePoints = colorSpacePointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapDepthFrameToColorSpace(_pNative, _depthFrameData, depthFrameData.Length, _colorSpacePoints, colorSpacePoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapColorFrameToDepthSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr depthFrameData, int depthFrameDataSize, RootSystem.IntPtr depthSpacePoints, int depthSpacePointsSize); - public void MapColorFrameToDepthSpace(ushort[] depthFrameData, Windows.Kinect.DepthSpacePoint[] depthSpacePoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var depthFrameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthFrameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthFrameData = depthFrameDataSmartGCHandle.AddrOfPinnedObject(); - var depthSpacePointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthSpacePoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthSpacePoints = depthSpacePointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapColorFrameToDepthSpace(_pNative, _depthFrameData, depthFrameData.Length, _depthSpacePoints, depthSpacePoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMapper_MapColorFrameToCameraSpace(RootSystem.IntPtr pNative, RootSystem.IntPtr depthFrameData, int depthFrameDataSize, RootSystem.IntPtr cameraSpacePoints, int cameraSpacePointsSize); - public void MapColorFrameToCameraSpace(ushort[] depthFrameData, Windows.Kinect.CameraSpacePoint[] cameraSpacePoints) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var depthFrameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(depthFrameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _depthFrameData = depthFrameDataSmartGCHandle.AddrOfPinnedObject(); - var cameraSpacePointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(cameraSpacePoints, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _cameraSpacePoints = cameraSpacePointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_MapColorFrameToCameraSpace(_pNative, _depthFrameData, depthFrameData.Length, _cameraSpacePoints, cameraSpacePoints.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - private void __EventCleanup() - { - { - Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_CoordinateMapper_add_CoordinateMappingChanged(_pNative, Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_CoordinateMappingChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs.meta deleted file mode 100644 index 9afe067..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMapper.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 452370c006443bb40bc44aa5d4bd8def -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs deleted file mode 100644 index e1b02ac..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs +++ /dev/null @@ -1,51 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.CoordinateMappingChangedEventArgs - // - public sealed partial class CoordinateMappingChangedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal CoordinateMappingChangedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_CoordinateMappingChangedEventArgs_AddRefObject(ref _pNative); - } - - ~CoordinateMappingChangedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMappingChangedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_CoordinateMappingChangedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_CoordinateMappingChangedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs.meta deleted file mode 100644 index ff3b4c3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/CoordinateMappingChangedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 82cb5d8afd91cba43a5380999e22e2cb -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs deleted file mode 100644 index 03535d7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs +++ /dev/null @@ -1,177 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.DepthFrame - // - public sealed partial class DepthFrame : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal DepthFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_DepthFrame_AddRefObject(ref _pNative); - } - - ~DepthFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrame_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_DepthFrame_Dispose(_pNative); - } - Windows_Kinect_DepthFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrame_get_DepthFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrameSource DepthFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrame_get_DepthFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern ushort Windows_Kinect_DepthFrame_get_DepthMaxReliableDistance(RootSystem.IntPtr pNative); - public ushort DepthMaxReliableDistance - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - return Windows_Kinect_DepthFrame_get_DepthMaxReliableDistance(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern ushort Windows_Kinect_DepthFrame_get_DepthMinReliableDistance(RootSystem.IntPtr pNative); - public ushort DepthMinReliableDistance - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - return Windows_Kinect_DepthFrame_get_DepthMinReliableDistance(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrame_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrame_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_DepthFrame_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_DepthFrame_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrame_CopyFrameDataToArray(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, int frameDataSize); - public void CopyFrameDataToArray(ushort[] frameData) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - var frameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(frameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _frameData = frameDataSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_DepthFrame_CopyFrameDataToArray(_pNative, _frameData, frameData.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs.meta deleted file mode 100644 index d09734a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1cc3d786ee7037e40b806839fdca184a -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs deleted file mode 100644 index 17c4046..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.DepthFrameArrivedEventArgs - // - public sealed partial class DepthFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal DepthFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_DepthFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~DepthFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_DepthFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs.meta deleted file mode 100644 index 1efa195..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c09496fb04e3d9c43b5fbf4ac998ff6e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs deleted file mode 100644 index 3e589a8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs +++ /dev/null @@ -1,297 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.DepthFrameReader - // - public sealed partial class DepthFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal DepthFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_DepthFrameReader_AddRefObject(ref _pNative); - } - - ~DepthFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_DepthFrameReader_Dispose(_pNative); - } - Windows_Kinect_DepthFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrameReader_get_DepthFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrameSource DepthFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrameReader_get_DepthFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_DepthFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameReader"); - } - - return Windows_Kinect_DepthFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameReader"); - } - - Windows_Kinect_DepthFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_DepthFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_DepthFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.DepthFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReader_add_FrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_DepthFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_DepthFrameArrivedEventArgs_Delegate(Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_DepthFrameReader_add_FrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_DepthFrameReader_add_FrameArrived(_pNative, Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_DepthFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_DepthFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrameReader_AcquireLatestFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrame AcquireLatestFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrameReader_AcquireLatestFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrame(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_DepthFrameReader_add_FrameArrived(_pNative, Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_DepthFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_DepthFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs.meta deleted file mode 100644 index 46bbf37..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 19e437f0dfc211640b0b56e1e0221a8f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs deleted file mode 100644 index e9ebd58..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs +++ /dev/null @@ -1,89 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.DepthFrameReference - // - public sealed partial class DepthFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal DepthFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_DepthFrameReference_AddRefObject(ref _pNative); - } - - ~DepthFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_DepthFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_DepthFrameReference_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameReference"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_DepthFrameReference_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrameReference_AcquireFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrame AcquireFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameReference"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrameReference_AcquireFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrame(n)); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs.meta deleted file mode 100644 index 6fc0e5b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: f53daf0889b08bf4494ecbd1914a99d6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs deleted file mode 100644 index 829f946..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs +++ /dev/null @@ -1,319 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.DepthFrameSource - // - public sealed partial class DepthFrameSource : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal DepthFrameSource(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_DepthFrameSource_AddRefObject(ref _pNative); - } - - ~DepthFrameSource() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameSource_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameSource_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_DepthFrameSource_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern ushort Windows_Kinect_DepthFrameSource_get_DepthMaxReliableDistance(RootSystem.IntPtr pNative); - public ushort DepthMaxReliableDistance - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameSource"); - } - - return Windows_Kinect_DepthFrameSource_get_DepthMaxReliableDistance(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern ushort Windows_Kinect_DepthFrameSource_get_DepthMinReliableDistance(RootSystem.IntPtr pNative); - public ushort DepthMinReliableDistance - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameSource"); - } - - return Windows_Kinect_DepthFrameSource_get_DepthMinReliableDistance(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrameSource_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrameSource_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_DepthFrameSource_get_IsActive(RootSystem.IntPtr pNative); - public bool IsActive - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameSource"); - } - - return Windows_Kinect_DepthFrameSource_get_IsActive(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrameSource_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrameSource_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_FrameCapturedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_FrameCapturedEventArgs_Delegate))] - private static void Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.FrameCapturedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameSource_add_FrameCaptured(RootSystem.IntPtr pNative, _Windows_Kinect_FrameCapturedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameCaptured - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_FrameCapturedEventArgs_Delegate(Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_DepthFrameSource_add_FrameCaptured(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_DepthFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_DepthFrameSource_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_DepthFrameSource_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_DepthFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrameSource_OpenReader(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrameReader OpenReader() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrameSource_OpenReader(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrameReader(n)); - } - - private void __EventCleanup() - { - { - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_DepthFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_DepthFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs.meta deleted file mode 100644 index 0977ef2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthFrameSource.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ec16a6a3c150d4c479a008f45c1851ec -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs deleted file mode 100644 index fc94cfe..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs +++ /dev/null @@ -1,46 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.DepthSpacePoint - // - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct DepthSpacePoint - { - public float X { get; set; } - public float Y { get; set; } - - public override int GetHashCode() - { - return X.GetHashCode() ^ Y.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is DepthSpacePoint)) - { - return false; - } - - return this.Equals((DepthSpacePoint)obj); - } - - public bool Equals(DepthSpacePoint obj) - { - return X.Equals(obj.X) && Y.Equals(obj.Y); - } - - public static bool operator ==(DepthSpacePoint a, DepthSpacePoint b) - { - return a.Equals(b); - } - - public static bool operator !=(DepthSpacePoint a, DepthSpacePoint b) - { - return !(a.Equals(b)); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs.meta deleted file mode 100644 index 789f96c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DepthSpacePoint.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 87a047e9c131269479b899f8dd9cac89 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs deleted file mode 100644 index 6558bf7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs +++ /dev/null @@ -1,17 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.DetectionResult - // - public enum DetectionResult : int - { - Unknown =0, - No =1, - Maybe =2, - Yes =3, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs.meta deleted file mode 100644 index 1abbbd1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/DetectionResult.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6f242e10b172a6340a49529ef0ad2d90 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs deleted file mode 100644 index c2dc3c0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Linq; - -namespace Helper -{ - internal class EventPump : UnityEngine.MonoBehaviour - { - private static object s_Lock = new object(); - private Queue m_Queue = new Queue(); - - public static EventPump Instance - { - get; - private set; - } - - public static void EnsureInitialized() - { - try - { - if (EventPump.Instance == null) - { - lock (s_Lock) - { - if (EventPump.Instance == null) - { - UnityEngine.GameObject parent = new UnityEngine.GameObject("Kinect Desktop Event Pump"); - EventPump.Instance = parent.AddComponent(); - DontDestroyOnLoad(parent); - } - } - } - } - catch - { - UnityEngine.Debug.LogError("Events must be registered on the main thread."); - return; - } - } - - private void Update() - { - lock (m_Queue) - { - while (m_Queue.Count > 0) - { - var action = m_Queue.Dequeue(); - try - { - action.Invoke(); - } - catch { } - } - } - } - - private void OnApplicationQuit() - { - var sensor = Windows.Kinect.KinectSensor.GetDefault(); - if (sensor != null && sensor.IsOpen) - { - sensor.Close(); - } - - NativeObjectCache.Flush(); - } - - public void Enqueue(Action action) - { - lock (m_Queue) - { - m_Queue.Enqueue(action); - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs.meta deleted file mode 100644 index e3f4298..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/EventPump.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: debd3e6b79ccfa7439ef3bc59b8d30e6 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs deleted file mode 100644 index 4d89ac3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Helper -{ - public static class ExceptionHelper - { - private const int E_NOTIMPL = unchecked((int)0x80004001); - private const int E_OUTOFMEMORY = unchecked((int)0x8007000E); - private const int E_INVALIDARG = unchecked((int)0x80070057); - private const int E_POINTER = unchecked((int) 0x80004003); - private const int E_PENDING = unchecked((int)0x8000000A); - private const int E_FAIL = unchecked((int)0x80004005); - - public static void CheckLastError() - { - int hr = Marshal.GetLastWin32Error(); - - if ((hr == E_PENDING) || (hr == E_FAIL)) - { - // Ignore E_PENDING/E_FAIL - We use this to indicate no pending or missed frames - return; - } - - if (hr < 0) - { - Exception exception = Marshal.GetExceptionForHR(hr); - string message = string.Format("This API has returned an exception from an HRESULT: 0x{0:X}", hr); - - switch (hr) - { - case E_NOTIMPL: - throw new NotImplementedException(message, exception); - - case E_OUTOFMEMORY: - throw new OutOfMemoryException(message, exception); - - case E_INVALIDARG: - throw new ArgumentException(message, exception); - - case E_POINTER: - throw new ArgumentNullException(message, exception); - - default: - throw new InvalidOperationException(message, exception); - } - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs.meta deleted file mode 100644 index 09c2e28..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ExceptionHelper.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 86085617855511d45b0648e6b62e1584 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs deleted file mode 100644 index 5d4bb22..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs +++ /dev/null @@ -1,15 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.Expression - // - public enum Expression : int - { - Neutral =0, - Happy =1, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs.meta deleted file mode 100644 index e8006c9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Expression.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 13c84518ab4fa60499742f896207e91e -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs deleted file mode 100644 index 307b970..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs +++ /dev/null @@ -1,98 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.FrameCapturedEventArgs - // - public sealed partial class FrameCapturedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal FrameCapturedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_FrameCapturedEventArgs_AddRefObject(ref _pNative); - } - - ~FrameCapturedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_FrameCapturedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_FrameCapturedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_FrameCapturedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.FrameCapturedStatus Windows_Kinect_FrameCapturedEventArgs_get_FrameStatus(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameCapturedStatus FrameStatus - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameCapturedEventArgs"); - } - - return Windows_Kinect_FrameCapturedEventArgs_get_FrameStatus(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.FrameSourceTypes Windows_Kinect_FrameCapturedEventArgs_get_FrameType(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameSourceTypes FrameType - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameCapturedEventArgs"); - } - - return Windows_Kinect_FrameCapturedEventArgs_get_FrameType(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_FrameCapturedEventArgs_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameCapturedEventArgs"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_FrameCapturedEventArgs_get_RelativeTime(_pNative)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs.meta deleted file mode 100644 index 059623c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 085ec75a343f958408701e00ba2168ce -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs deleted file mode 100644 index a42cf71..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs +++ /dev/null @@ -1,16 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.FrameCapturedStatus - // - public enum FrameCapturedStatus : int - { - Unknown =0, - Queued =1, - Dropped =2, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs.meta deleted file mode 100644 index d8947c1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameCapturedStatus.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: ccf1cabe437c4764d9818a2fd30827f0 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs deleted file mode 100644 index 25d46ab..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs +++ /dev/null @@ -1,158 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.FrameDescription - // - public sealed partial class FrameDescription : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal FrameDescription(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_FrameDescription_AddRefObject(ref _pNative); - } - - ~FrameDescription() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_FrameDescription_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_FrameDescription_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_FrameDescription_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern uint Windows_Kinect_FrameDescription_get_BytesPerPixel(RootSystem.IntPtr pNative); - public uint BytesPerPixel - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameDescription"); - } - - return Windows_Kinect_FrameDescription_get_BytesPerPixel(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_FrameDescription_get_DiagonalFieldOfView(RootSystem.IntPtr pNative); - public float DiagonalFieldOfView - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameDescription"); - } - - return Windows_Kinect_FrameDescription_get_DiagonalFieldOfView(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_FrameDescription_get_Height(RootSystem.IntPtr pNative); - public int Height - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameDescription"); - } - - return Windows_Kinect_FrameDescription_get_Height(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_FrameDescription_get_HorizontalFieldOfView(RootSystem.IntPtr pNative); - public float HorizontalFieldOfView - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameDescription"); - } - - return Windows_Kinect_FrameDescription_get_HorizontalFieldOfView(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern uint Windows_Kinect_FrameDescription_get_LengthInPixels(RootSystem.IntPtr pNative); - public uint LengthInPixels - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameDescription"); - } - - return Windows_Kinect_FrameDescription_get_LengthInPixels(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern float Windows_Kinect_FrameDescription_get_VerticalFieldOfView(RootSystem.IntPtr pNative); - public float VerticalFieldOfView - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameDescription"); - } - - return Windows_Kinect_FrameDescription_get_VerticalFieldOfView(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern int Windows_Kinect_FrameDescription_get_Width(RootSystem.IntPtr pNative); - public int Width - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("FrameDescription"); - } - - return Windows_Kinect_FrameDescription_get_Width(_pNative); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs.meta deleted file mode 100644 index 2a2a7ff..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameDescription.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 855fcb405500ab14b8902d15d27ed0ab -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs deleted file mode 100644 index 4751626..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs +++ /dev/null @@ -1,19 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.FrameEdges - // - [RootSystem.Flags] - public enum FrameEdges : uint - { - None =0, - Right =1, - Left =2, - Top =4, - Bottom =8, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs.meta deleted file mode 100644 index f775dcd..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameEdges.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 34cd6f0c5382cd9458b3b1ef06e001ba -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs deleted file mode 100644 index cb639bb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs +++ /dev/null @@ -1,22 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.FrameSourceTypes - // - [RootSystem.Flags] - public enum FrameSourceTypes : uint - { - None =0, - Color =1, - Infrared =2, - LongExposureInfrared =4, - Depth =8, - BodyIndex =16, - Body =32, - Audio =64, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs.meta deleted file mode 100644 index 507d3f9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/FrameSourceTypes.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: bbb237f869b7c684aa4bff904d74ceed -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs deleted file mode 100644 index 6ae6efc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs +++ /dev/null @@ -1,18 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.HandState - // - public enum HandState : int - { - Unknown =0, - NotTracked =1, - Open =2, - Closed =3, - Lasso =4, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs.meta deleted file mode 100644 index 5da3a2c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/HandState.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 61c6c0071af9a08459843e571124cbef -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs deleted file mode 100644 index 32a562c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Linq; - -namespace Helper -{ - internal interface INativeWrapper - { - System.IntPtr nativePtr { get; } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs.meta deleted file mode 100644 index 2813b4a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/INativeWrapper.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 010db25b57d940546a60549c96171b70 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs deleted file mode 100644 index e097592..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs +++ /dev/null @@ -1,147 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.InfraredFrame - // - public sealed partial class InfraredFrame : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal InfraredFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_InfraredFrame_AddRefObject(ref _pNative); - } - - ~InfraredFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrame_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_InfraredFrame_Dispose(_pNative); - } - Windows_Kinect_InfraredFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrame_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrame_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrame_get_InfraredFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrameSource InfraredFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrame_get_InfraredFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_InfraredFrame_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_InfraredFrame_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrame_CopyFrameDataToArray(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, int frameDataSize); - public void CopyFrameDataToArray(ushort[] frameData) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrame"); - } - - var frameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(frameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _frameData = frameDataSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_InfraredFrame_CopyFrameDataToArray(_pNative, _frameData, frameData.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs.meta deleted file mode 100644 index cb29b92..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 716d52dd0cd344f439914ed99e62b0e5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs deleted file mode 100644 index 443b235..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.InfraredFrameArrivedEventArgs - // - public sealed partial class InfraredFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal InfraredFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_InfraredFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~InfraredFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_InfraredFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs.meta deleted file mode 100644 index 5068e4b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 47e956b7b74fcd447a28c068f2fcaf56 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs deleted file mode 100644 index 5bda30b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs +++ /dev/null @@ -1,297 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.InfraredFrameReader - // - public sealed partial class InfraredFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal InfraredFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_InfraredFrameReader_AddRefObject(ref _pNative); - } - - ~InfraredFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_InfraredFrameReader_Dispose(_pNative); - } - Windows_Kinect_InfraredFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrameReader_get_InfraredFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrameSource InfraredFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrameReader_get_InfraredFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_InfraredFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameReader"); - } - - return Windows_Kinect_InfraredFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameReader"); - } - - Windows_Kinect_InfraredFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.InfraredFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReader_add_FrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate(Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_InfraredFrameReader_add_FrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_InfraredFrameReader_add_FrameArrived(_pNative, Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_InfraredFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_InfraredFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrameReader_AcquireLatestFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrame AcquireLatestFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrameReader_AcquireLatestFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrame(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_InfraredFrameReader_add_FrameArrived(_pNative, Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_InfraredFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_InfraredFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs.meta deleted file mode 100644 index 0d7e833..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0937005bb1a679a40a0bffab4f8fa84b -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs deleted file mode 100644 index 38d5466..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs +++ /dev/null @@ -1,89 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.InfraredFrameReference - // - public sealed partial class InfraredFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal InfraredFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_InfraredFrameReference_AddRefObject(ref _pNative); - } - - ~InfraredFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_InfraredFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_InfraredFrameReference_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameReference"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_InfraredFrameReference_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrameReference_AcquireFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrame AcquireFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameReference"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrameReference_AcquireFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrame(n)); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs.meta deleted file mode 100644 index e9a1dd0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 89acda427f65cc64dbe156710db8760f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs deleted file mode 100644 index 45e150b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs +++ /dev/null @@ -1,289 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.InfraredFrameSource - // - public sealed partial class InfraredFrameSource : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal InfraredFrameSource(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_InfraredFrameSource_AddRefObject(ref _pNative); - } - - ~InfraredFrameSource() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameSource_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameSource_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_InfraredFrameSource_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrameSource_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrameSource_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_InfraredFrameSource_get_IsActive(RootSystem.IntPtr pNative); - public bool IsActive - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameSource"); - } - - return Windows_Kinect_InfraredFrameSource_get_IsActive(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrameSource_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrameSource_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_FrameCapturedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_FrameCapturedEventArgs_Delegate))] - private static void Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.FrameCapturedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameSource_add_FrameCaptured(RootSystem.IntPtr pNative, _Windows_Kinect_FrameCapturedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameCaptured - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_FrameCapturedEventArgs_Delegate(Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_InfraredFrameSource_add_FrameCaptured(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_InfraredFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_InfraredFrameSource_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_InfraredFrameSource_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_InfraredFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrameSource_OpenReader(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrameReader OpenReader() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrameSource_OpenReader(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrameReader(n)); - } - - private void __EventCleanup() - { - { - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_InfraredFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_InfraredFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs.meta deleted file mode 100644 index 04dfe5f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/InfraredFrameSource.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8b41da8047304434eb12d404c2f99979 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs deleted file mode 100644 index 981c366..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs +++ /dev/null @@ -1,68 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.IsAvailableChangedEventArgs - // - public sealed partial class IsAvailableChangedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal IsAvailableChangedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_IsAvailableChangedEventArgs_AddRefObject(ref _pNative); - } - - ~IsAvailableChangedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_IsAvailableChangedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_IsAvailableChangedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_IsAvailableChangedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_IsAvailableChangedEventArgs_get_IsAvailable(RootSystem.IntPtr pNative); - public bool IsAvailable - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("IsAvailableChangedEventArgs"); - } - - return Windows_Kinect_IsAvailableChangedEventArgs_get_IsAvailable(_pNative); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs.meta deleted file mode 100644 index cea9771..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/IsAvailableChangedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 65a7600b04976b84db9c9ec171a5d71f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs deleted file mode 100644 index 419ea98..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs +++ /dev/null @@ -1,47 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.Joint - // - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct Joint - { - public Windows.Kinect.JointType JointType { get; set; } - public Windows.Kinect.CameraSpacePoint Position { get; set; } - public Windows.Kinect.TrackingState TrackingState { get; set; } - - public override int GetHashCode() - { - return JointType.GetHashCode() ^ Position.GetHashCode() ^ TrackingState.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is Joint)) - { - return false; - } - - return this.Equals((Joint)obj); - } - - public bool Equals(Joint obj) - { - return JointType.Equals(obj.JointType) && Position.Equals(obj.Position) && TrackingState.Equals(obj.TrackingState); - } - - public static bool operator ==(Joint a, Joint b) - { - return a.Equals(b); - } - - public static bool operator !=(Joint a, Joint b) - { - return !(a.Equals(b)); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs.meta deleted file mode 100644 index dd7d318..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Joint.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c6ab2966f653a9b439da02f3ae85c867 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs deleted file mode 100644 index 03e2fd8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs +++ /dev/null @@ -1,46 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.JointOrientation - // - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct JointOrientation - { - public Windows.Kinect.JointType JointType { get; set; } - public Windows.Kinect.Vector4 Orientation { get; set; } - - public override int GetHashCode() - { - return JointType.GetHashCode() ^ Orientation.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is JointOrientation)) - { - return false; - } - - return this.Equals((JointOrientation)obj); - } - - public bool Equals(JointOrientation obj) - { - return JointType.Equals(obj.JointType) && Orientation.Equals(obj.Orientation); - } - - public static bool operator ==(JointOrientation a, JointOrientation b) - { - return a.Equals(b); - } - - public static bool operator !=(JointOrientation a, JointOrientation b) - { - return !(a.Equals(b)); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs.meta deleted file mode 100644 index 1edbe03..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointOrientation.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d616618770c2c84469f5aaa5f72ca2ca -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs deleted file mode 100644 index 4f3f3bf..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs +++ /dev/null @@ -1,38 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.JointType - // - public enum JointType : int - { - SpineBase =0, - SpineMid =1, - Neck =2, - Head =3, - ShoulderLeft =4, - ElbowLeft =5, - WristLeft =6, - HandLeft =7, - ShoulderRight =8, - ElbowRight =9, - WristRight =10, - HandRight =11, - HipLeft =12, - KneeLeft =13, - AnkleLeft =14, - FootLeft =15, - HipRight =16, - KneeRight =17, - AnkleRight =18, - FootRight =19, - SpineShoulder =20, - HandTipLeft =21, - ThumbLeft =22, - HandTipRight =23, - ThumbRight =24, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs.meta deleted file mode 100644 index 537cbbb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/JointType.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1791e2ee3f5ea1343a2694b4e1b3f00f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs deleted file mode 100644 index d259d22..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs +++ /dev/null @@ -1,16 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.KinectAudioCalibrationState - // - public enum KinectAudioCalibrationState : int - { - Unknown =0, - CalibrationRequired =1, - Calibrated =2, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs.meta deleted file mode 100644 index a5f0137..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectAudioCalibrationState.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 87d856dfd833c524381664b12e58813a -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs deleted file mode 100644 index c62cb42..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs +++ /dev/null @@ -1,129 +0,0 @@ -using RootSystem = System; -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace Windows.Kinect -{ - // NOTE: This uses an IBuffer under the covers, it is renamed here to give parity to our managed APIs. - public class KinectBuffer : Helper.INativeWrapper, IDisposable - { - internal RootSystem.IntPtr _pNative; - - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal KinectBuffer(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Storage_Streams_IBuffer_AddRefObject(ref _pNative); - } - - ~KinectBuffer() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private static extern void Windows_Storage_Streams_IBuffer_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private static extern void Windows_Storage_Streams_IBuffer_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Storage_Streams_IBuffer_Dispose(_pNative); - } - - Windows_Storage_Streams_IBuffer_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern uint Windows_Storage_Streams_IBuffer_get_Capacity(RootSystem.IntPtr pNative); - public uint Capacity - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectBuffer"); - } - - uint capacity = Windows_Storage_Streams_IBuffer_get_Capacity(_pNative); - Helper.ExceptionHelper.CheckLastError(); - return capacity; - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern uint Windows_Storage_Streams_IBuffer_get_Length(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern void Windows_Storage_Streams_IBuffer_put_Length(RootSystem.IntPtr pNative, uint value); - public uint Length - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectBuffer"); - } - - uint length = Windows_Storage_Streams_IBuffer_get_Length(_pNative); - Helper.ExceptionHelper.CheckLastError(); - return length; - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectBuffer"); - } - - Windows_Storage_Streams_IBuffer_put_Length(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private static extern void Windows_Storage_Streams_IBuffer_Dispose(RootSystem.IntPtr pNative); - // Constructors and Finalizers - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectBuffer"); - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Storage_Streams_IBuffer_get_UnderlyingBuffer(RootSystem.IntPtr pNative); - public IntPtr UnderlyingBuffer - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectBuffer"); - } - - RootSystem.IntPtr value = Windows_Storage_Streams_IBuffer_get_UnderlyingBuffer(_pNative); - Helper.ExceptionHelper.CheckLastError(); - return value; - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs.meta deleted file mode 100644 index 0e2c2d0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectBuffer.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a27f97f1b27134f4bbee290cf18c791c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs deleted file mode 100644 index ab516af..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs +++ /dev/null @@ -1,20 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.KinectCapabilities - // - [RootSystem.Flags] - public enum KinectCapabilities : uint - { - None =0, - Vision =1, - Audio =2, - Face =4, - Expressions =8, - Gamechat =16, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs.meta deleted file mode 100644 index 05181f5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectCapabilities.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6dcba0f7ec870d94c849f4d8ed860377 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs deleted file mode 100644 index 9b41cf3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs +++ /dev/null @@ -1,498 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.KinectSensor - // - public sealed partial class KinectSensor : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal KinectSensor(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_KinectSensor_AddRefObject(ref _pNative); - } - - ~KinectSensor() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_KinectSensor_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_KinectSensor_AddRefObject(ref RootSystem.IntPtr pNative); - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_AudioSource(RootSystem.IntPtr pNative); - public Windows.Kinect.AudioSource AudioSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_AudioSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.AudioSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_BodyFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrameSource BodyFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_BodyFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_BodyIndexFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrameSource BodyIndexFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_BodyIndexFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_ColorFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrameSource ColorFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_ColorFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_CoordinateMapper(RootSystem.IntPtr pNative); - public Windows.Kinect.CoordinateMapper CoordinateMapper - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_CoordinateMapper(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.CoordinateMapper(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_DepthFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrameSource DepthFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_DepthFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_InfraredFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrameSource InfraredFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_InfraredFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_KinectSensor_get_IsAvailable(RootSystem.IntPtr pNative); - public bool IsAvailable - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - return Windows_Kinect_KinectSensor_get_IsAvailable(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_KinectSensor_get_IsOpen(RootSystem.IntPtr pNative); - public bool IsOpen - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - return Windows_Kinect_KinectSensor_get_IsOpen(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.KinectCapabilities Windows_Kinect_KinectSensor_get_KinectCapabilities(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectCapabilities KinectCapabilities - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - return Windows_Kinect_KinectSensor_get_KinectCapabilities(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_LongExposureInfraredFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrameSource LongExposureInfraredFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_LongExposureInfraredFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_get_UniqueKinectId(RootSystem.IntPtr pNative); - public string UniqueKinectId - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_get_UniqueKinectId(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - var managedString = RootSystem.Runtime.InteropServices.Marshal.PtrToStringUni(objectPointer); - RootSystem.Runtime.InteropServices.Marshal.FreeCoTaskMem(objectPointer); - return managedString; - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_IsAvailableChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_IsAvailableChangedEventArgs_Delegate))] - private static void Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.IsAvailableChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_KinectSensor_add_IsAvailableChanged(RootSystem.IntPtr pNative, _Windows_Kinect_IsAvailableChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler IsAvailableChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_IsAvailableChangedEventArgs_Delegate(Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handler); - _Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_KinectSensor_add_IsAvailableChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_KinectSensor_add_IsAvailableChanged(_pNative, Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handler, true); - _Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_KinectSensor_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_KinectSensor_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_KinectSensor_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Static Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_GetDefault(); - public static Windows.Kinect.KinectSensor GetDefault() - { - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_GetDefault(); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_KinectSensor_Open(RootSystem.IntPtr pNative); - public void Open() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - Windows_Kinect_KinectSensor_Open(_pNative); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_KinectSensor_Close(RootSystem.IntPtr pNative); - public void Close() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - Windows_Kinect_KinectSensor_Close(_pNative); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_KinectSensor_OpenMultiSourceFrameReader(RootSystem.IntPtr pNative, Windows.Kinect.FrameSourceTypes enabledFrameSourceTypes); - public Windows.Kinect.MultiSourceFrameReader OpenMultiSourceFrameReader(Windows.Kinect.FrameSourceTypes enabledFrameSourceTypes) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("KinectSensor"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_KinectSensor_OpenMultiSourceFrameReader(_pNative, enabledFrameSourceTypes); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.MultiSourceFrameReader(n)); - } - - private void __EventCleanup() - { - { - Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_IsAvailableChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_KinectSensor_add_IsAvailableChanged(_pNative, Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_IsAvailableChangedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_KinectSensor_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs.meta deleted file mode 100644 index bc14513..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSensor.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a5a5ec3f3f1b0064fae54e1512e12887 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs deleted file mode 100644 index 09a668b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs +++ /dev/null @@ -1,604 +0,0 @@ -using RootSystem = System; -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace Windows.Kinect -{ - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct PointF - { - public float X { get; set; } - public float Y { get; set; } - - public override int GetHashCode() - { - return X.GetHashCode() ^ Y.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is PointF)) - { - return false; - } - - return this.Equals((ColorSpacePoint)obj); - } - - public bool Equals(ColorSpacePoint obj) - { - return (X == obj.X) && (Y == obj.Y); - } - - public static bool operator ==(PointF a, PointF b) - { - return a.Equals(b); - } - - public static bool operator !=(PointF a, PointF b) - { - return !(a.Equals(b)); - } - } - - public sealed partial class AudioBeamSubFrame - { - [RootSystem.Runtime.InteropServices.DllImport( - "KinectUnityAddin", - EntryPoint = "Windows_Kinect_AudioBeamSubFrame_CopyFrameDataToArray", - CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, - SetLastError = true)] - private static extern void Windows_Kinect_AudioBeamSubFrame_CopyFrameDataToIntPtr(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, uint frameDataSize); - public void CopyFrameDataToIntPtr(RootSystem.IntPtr frameData, uint size) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - Windows_Kinect_AudioBeamSubFrame_CopyFrameDataToIntPtr(_pNative, frameData, size); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_AudioBeamSubFrame_LockAudioBuffer(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectBuffer LockAudioBuffer() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamSubFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_AudioBeamSubFrame_LockAudioBuffer(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectBuffer(n)); - } - } - - public sealed partial class AudioBeamFrame - { - private Windows.Kinect.AudioBeamSubFrame[] _subFrames = null; - - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - if (_subFrames != null) - { - foreach (var subFrame in _subFrames) - { - subFrame.Dispose(); - } - - _subFrames = null; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_AudioBeamFrame_ReleaseObject(ref _pNative); - - if (disposing) - { - Windows_Kinect_AudioBeamFrame_Dispose(_pNative); - } - - _pNative = RootSystem.IntPtr.Zero; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private static extern void Windows_Kinect_AudioBeamFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern int Windows_Kinect_AudioBeamFrame_get_SubFrames(RootSystem.IntPtr pNative, [RootSystem.Runtime.InteropServices.Out] RootSystem.IntPtr[] outCollection, int outCollectionSize); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private static extern int Windows_Kinect_AudioBeamFrame_get_SubFrames_Length(RootSystem.IntPtr pNative); - public RootSystem.Collections.Generic.IList SubFrames - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("AudioBeamFrame"); - } - - if (_subFrames == null) - { - int collectionSize = Windows_Kinect_AudioBeamFrame_get_SubFrames_Length(_pNative); - var outCollection = new RootSystem.IntPtr[collectionSize]; - _subFrames = new Windows.Kinect.AudioBeamSubFrame[collectionSize]; - - collectionSize = Windows_Kinect_AudioBeamFrame_get_SubFrames(_pNative, outCollection, collectionSize); - Helper.ExceptionHelper.CheckLastError(); - - for (int i = 0; i < collectionSize; i++) - { - if (outCollection[i] == RootSystem.IntPtr.Zero) - { - continue; - } - - var obj = Helper.NativeObjectCache.GetObject(outCollection[i]); - if (obj == null) - { - obj = new Windows.Kinect.AudioBeamSubFrame(outCollection[i]); - Helper.NativeObjectCache.AddObject(outCollection[i], obj); - } - - _subFrames[i] = obj; - } - } - - return _subFrames; - } - } - } - - public sealed partial class BodyFrame - { - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern void Windows_Kinect_BodyFrame_GetAndRefreshBodyData(RootSystem.IntPtr pNative, [RootSystem.Runtime.InteropServices.Out] RootSystem.IntPtr[] bodies, int bodiesSize); - public void GetAndRefreshBodyData(RootSystem.Collections.Generic.IList bodies) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyFrame"); - } - - int _bodies_idx = 0; - var _bodies = new RootSystem.IntPtr[bodies.Count]; - for (int i = 0; i < bodies.Count; i++) - { - if (bodies[i] == null) - { - bodies[i] = new Body(); - } - - _bodies[_bodies_idx] = bodies[i].GetIntPtr(); - _bodies_idx++; - } - - Windows_Kinect_BodyFrame_GetAndRefreshBodyData(_pNative, _bodies, bodies.Count); - Helper.ExceptionHelper.CheckLastError(); - - for (int i = 0; i < bodies.Count; i++) - { - bodies[i].SetIntPtr(_bodies[i]); - } - } - } - - public sealed partial class Body - { - internal void SetIntPtr(RootSystem.IntPtr value) { _pNative = value; } - internal RootSystem.IntPtr GetIntPtr() { return _pNative; } - - internal Body() { } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_Body_get_Lean(RootSystem.IntPtr pNative); - public Windows.Kinect.PointF Lean - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("Body"); - } - - var objectPointer = Windows_Kinect_Body_get_Lean(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - var obj = (Windows.Kinect.PointF)RootSystem.Runtime.InteropServices.Marshal.PtrToStructure(objectPointer, typeof(Windows.Kinect.PointF)); - RootSystem.Runtime.InteropServices.Marshal.FreeHGlobal(objectPointer); - return obj; - } - } - } - - public sealed partial class ColorFrame - { - [RootSystem.Runtime.InteropServices.DllImport( - "KinectUnityAddin", - EntryPoint = "Windows_Kinect_ColorFrame_CopyRawFrameDataToArray", - CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, - SetLastError = true)] - private static extern void Windows_Kinect_ColorFrame_CopyRawFrameDataToIntPtr(RootSystem.IntPtr pNative, IntPtr frameData, uint frameDataSize); - public void CopyRawFrameDataToIntPtr(RootSystem.IntPtr frameData, uint size) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - Windows_Kinect_ColorFrame_CopyRawFrameDataToIntPtr(_pNative, frameData, size); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport( - "KinectUnityAddin", - EntryPoint = "Windows_Kinect_ColorFrame_CopyConvertedFrameDataToArray", - CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, - SetLastError = true)] - private static extern void Windows_Kinect_ColorFrame_CopyConvertedFrameDataToIntPtr(RootSystem.IntPtr pNative, IntPtr frameData, uint frameDataSize, Windows.Kinect.ColorImageFormat colorFormat); - public void CopyConvertedFrameDataToIntPtr(RootSystem.IntPtr frameData, uint size, Windows.Kinect.ColorImageFormat colorFormat) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - Windows_Kinect_ColorFrame_CopyConvertedFrameDataToIntPtr(_pNative, frameData, size, colorFormat); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_ColorFrame_LockRawImageBuffer(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectBuffer LockRawImageBuffer() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("ColorFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_ColorFrame_LockRawImageBuffer(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectBuffer(n)); - } - - } - - public sealed partial class DepthFrame - { - [RootSystem.Runtime.InteropServices.DllImport( - "KinectUnityAddin", - EntryPoint = "Windows_Kinect_DepthFrame_CopyFrameDataToArray", - CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, - SetLastError = true)] - private static extern void Windows_Kinect_DepthFrame_CopyFrameDataToIntPtr(RootSystem.IntPtr pNative, IntPtr frameData, uint frameDataSize); - public void CopyFrameDataToIntPtr(RootSystem.IntPtr frameData, uint size) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - Windows_Kinect_DepthFrame_CopyFrameDataToIntPtr(_pNative, frameData, size / sizeof(ushort)); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_DepthFrame_LockImageBuffer(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectBuffer LockImageBuffer() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("DepthFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_DepthFrame_LockImageBuffer(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectBuffer(n)); - } - } - - public sealed partial class BodyIndexFrame - { - [RootSystem.Runtime.InteropServices.DllImport( - "KinectUnityAddin", - EntryPoint = "Windows_Kinect_BodyIndexFrame_CopyFrameDataToArray", - CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, - SetLastError = true)] - private static extern void Windows_Kinect_BodyIndexFrame_CopyFrameDataToIntPtr(RootSystem.IntPtr pNative, IntPtr frameData, uint frameDataSize); - public void CopyFrameDataToIntPtr(RootSystem.IntPtr frameData, uint size) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrame"); - } - - Windows_Kinect_BodyIndexFrame_CopyFrameDataToIntPtr(_pNative, frameData, size); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_BodyIndexFrame_LockImageBuffer(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectBuffer LockImageBuffer() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("BodyIndexFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_BodyIndexFrame_LockImageBuffer(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectBuffer(n)); - } - - } - - public sealed partial class InfraredFrame - { - [RootSystem.Runtime.InteropServices.DllImport( - "KinectUnityAddin", - EntryPoint = "Windows_Kinect_InfraredFrame_CopyFrameDataToArray", - CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, - SetLastError = true)] - private static extern void Windows_Kinect_InfraredFrame_CopyFrameDataToIntPtr(RootSystem.IntPtr pNative, IntPtr frameData, uint frameDataSize); - public void CopyFrameDataToIntPtr(RootSystem.IntPtr frameData, uint size) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrame"); - } - - Windows_Kinect_InfraredFrame_CopyFrameDataToIntPtr(_pNative, frameData, size / sizeof(ushort)); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_InfraredFrame_LockImageBuffer(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectBuffer LockImageBuffer() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("InfraredFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_InfraredFrame_LockImageBuffer(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectBuffer(n)); - } - - } - - public sealed partial class KinectSensor - { - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - if (IsOpen) - { - Close(); - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_KinectSensor_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - } - - public sealed partial class LongExposureInfraredFrame - { - [RootSystem.Runtime.InteropServices.DllImport( - "KinectUnityAddin", - EntryPoint = "Windows_Kinect_LongExposureInfraredFrame_CopyFrameDataToArray", - CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, - SetLastError = true)] - private static extern void Windows_Kinect_LongExposureInfraredFrame_CopyFrameDataToIntPtr(RootSystem.IntPtr pNative, IntPtr frameData, uint frameDataSize); - public void CopyFrameDataToIntPtr(RootSystem.IntPtr frameData, uint size) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrame"); - } - - Windows_Kinect_LongExposureInfraredFrame_CopyFrameDataToIntPtr(_pNative, frameData, size / sizeof(ushort)); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrame_LockImageBuffer(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectBuffer LockImageBuffer() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrame_LockImageBuffer(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectBuffer(n)); - } - - } - - public sealed partial class CoordinateMapper - { - private PointF[] _DepthFrameToCameraSpaceTable = null; - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern RootSystem.IntPtr Windows_Kinect_CoordinateMapper_GetDepthCameraIntrinsics(RootSystem.IntPtr pNative); - public Windows.Kinect.CameraIntrinsics GetDepthCameraIntrinsics() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - var objectPointer = Windows_Kinect_CoordinateMapper_GetDepthCameraIntrinsics(_pNative); - Helper.ExceptionHelper.CheckLastError(); - - var obj = (Windows.Kinect.CameraIntrinsics)RootSystem.Runtime.InteropServices.Marshal.PtrToStructure(objectPointer, typeof(Windows.Kinect.CameraIntrinsics)); - RootSystem.Runtime.InteropServices.Marshal.FreeHGlobal(objectPointer); - return obj; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern int Windows_Kinect_CoordinateMapper_GetDepthFrameToCameraSpaceTable(RootSystem.IntPtr pNative, RootSystem.IntPtr outCollection, uint outCollectionSize); - public Windows.Kinect.PointF[] GetDepthFrameToCameraSpaceTable() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - if (_DepthFrameToCameraSpaceTable == null) - { - var desc = KinectSensor.GetDefault().DepthFrameSource.FrameDescription; - _DepthFrameToCameraSpaceTable = new PointF[desc.Width * desc.Height]; - - var pointsSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(_DepthFrameToCameraSpaceTable, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _points = pointsSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_CoordinateMapper_GetDepthFrameToCameraSpaceTable(_pNative, _points, (uint)_DepthFrameToCameraSpaceTable.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - return _DepthFrameToCameraSpaceTable; - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern void Windows_Kinect_CoordinateMapper_MapColorFrameToDepthSpace( - RootSystem.IntPtr pNative, - RootSystem.IntPtr depthFrameData, - uint depthFrameDataSize, - RootSystem.IntPtr depthSpacePoints, - uint depthSpacePointsSize); - public void MapColorFrameToDepthSpaceUsingIntPtr(RootSystem.IntPtr depthFrameData, uint depthFrameSize, RootSystem.IntPtr depthSpacePoints, uint depthSpacePointsSize) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - uint length = depthFrameSize / sizeof(UInt16); - Windows_Kinect_CoordinateMapper_MapColorFrameToDepthSpace(_pNative, depthFrameData, length, depthSpacePoints, depthSpacePointsSize); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern void Windows_Kinect_CoordinateMapper_MapColorFrameToCameraSpace( - RootSystem.IntPtr pNative, - RootSystem.IntPtr depthFrameData, - uint depthFrameDataSize, - RootSystem.IntPtr cameraSpacePoints, - uint cameraSpacePointsSize); - public void MapColorFrameToCameraSpaceUsingIntPtr(RootSystem.IntPtr depthFrameData, int depthFrameSize, RootSystem.IntPtr cameraSpacePoints, uint cameraSpacePointsSize) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - uint length = (uint)depthFrameSize / sizeof(UInt16); - Windows_Kinect_CoordinateMapper_MapColorFrameToCameraSpace(_pNative, depthFrameData, length, cameraSpacePoints, cameraSpacePointsSize); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern void Windows_Kinect_CoordinateMapper_MapDepthFrameToColorSpace( - RootSystem.IntPtr pNative, - RootSystem.IntPtr depthFrameData, - uint depthFrameDataSize, - RootSystem.IntPtr colorSpacePoints, - uint colorSpacePointsSize); - public void MapDepthFrameToColorSpaceUsingIntPtr(RootSystem.IntPtr depthFrameData, int depthFrameSize, RootSystem.IntPtr colorSpacePoints, uint colorSpacePointsSize) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - uint length = (uint)depthFrameSize / sizeof(UInt16); - Windows_Kinect_CoordinateMapper_MapDepthFrameToColorSpace(_pNative, depthFrameData, length, colorSpacePoints, colorSpacePointsSize); - Helper.ExceptionHelper.CheckLastError(); - } - - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention = RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError = true)] - private static extern void Windows_Kinect_CoordinateMapper_MapDepthFrameToCameraSpace( - RootSystem.IntPtr pNative, - IntPtr depthFrameData, - uint depthFrameDataSize, - RootSystem.IntPtr cameraSpacePoints, - uint cameraSpacePointsSize); - public void MapDepthFrameToCameraSpaceUsingIntPtr(RootSystem.IntPtr depthFrameData, int depthFrameSize, RootSystem.IntPtr cameraSpacePoints, uint cameraSpacePointsSize) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("CoordinateMapper"); - } - - uint length = (uint)depthFrameSize / sizeof(UInt16); - Windows_Kinect_CoordinateMapper_MapDepthFrameToCameraSpace(_pNative, depthFrameData, length, cameraSpacePoints, cameraSpacePointsSize); - Helper.ExceptionHelper.CheckLastError(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs.meta deleted file mode 100644 index dfad668..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectSpecialCases.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: c59b79770236fae42a76e291570f2447 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs deleted file mode 100644 index 7423048..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs +++ /dev/null @@ -1,19 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.KinectUnityAddinUtils - // - public sealed partial class KinectUnityAddinUtils - { - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void KinectUnityAddin_FreeMemory(RootSystem.IntPtr pToDealloc); - public static void FreeMemory(RootSystem.IntPtr pToDealloc) - { - KinectUnityAddin_FreeMemory(pToDealloc); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs.meta deleted file mode 100644 index 2703ba2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/KinectUnityAddinUtils.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 985cae59f29daa947acc082d310c3492 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs deleted file mode 100644 index b5bf431..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs +++ /dev/null @@ -1,147 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.LongExposureInfraredFrame - // - public sealed partial class LongExposureInfraredFrame : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal LongExposureInfraredFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_LongExposureInfraredFrame_AddRefObject(ref _pNative); - } - - ~LongExposureInfraredFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrame_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_LongExposureInfraredFrame_Dispose(_pNative); - } - Windows_Kinect_LongExposureInfraredFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrame_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrame_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrame_get_LongExposureInfraredFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrameSource LongExposureInfraredFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrame_get_LongExposureInfraredFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrameSource(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_LongExposureInfraredFrame_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrame"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_LongExposureInfraredFrame_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrame_CopyFrameDataToArray(RootSystem.IntPtr pNative, RootSystem.IntPtr frameData, int frameDataSize); - public void CopyFrameDataToArray(ushort[] frameData) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrame"); - } - - var frameDataSmartGCHandle = new Helper.SmartGCHandle(RootSystem.Runtime.InteropServices.GCHandle.Alloc(frameData, RootSystem.Runtime.InteropServices.GCHandleType.Pinned)); - var _frameData = frameDataSmartGCHandle.AddrOfPinnedObject(); - Windows_Kinect_LongExposureInfraredFrame_CopyFrameDataToArray(_pNative, _frameData, frameData.Length); - Helper.ExceptionHelper.CheckLastError(); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrame_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs.meta deleted file mode 100644 index 477fb21..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 62e292d05e1f99d4695e2306db22e75f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs deleted file mode 100644 index b22dd21..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.LongExposureInfraredFrameArrivedEventArgs - // - public sealed partial class LongExposureInfraredFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal LongExposureInfraredFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~LongExposureInfraredFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs.meta deleted file mode 100644 index e3d2c5b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: dbaaf8e0d23f24848ab81331f4379722 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs deleted file mode 100644 index 9ebfb47..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs +++ /dev/null @@ -1,297 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.LongExposureInfraredFrameReader - // - public sealed partial class LongExposureInfraredFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal LongExposureInfraredFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_LongExposureInfraredFrameReader_AddRefObject(ref _pNative); - } - - ~LongExposureInfraredFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_LongExposureInfraredFrameReader_Dispose(_pNative); - } - Windows_Kinect_LongExposureInfraredFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_LongExposureInfraredFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameReader"); - } - - return Windows_Kinect_LongExposureInfraredFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameReader"); - } - - Windows_Kinect_LongExposureInfraredFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrameReader_get_LongExposureInfraredFrameSource(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrameSource LongExposureInfraredFrameSource - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrameReader_get_LongExposureInfraredFrameSource(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrameSource(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.LongExposureInfraredFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReader_add_FrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate(Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_LongExposureInfraredFrameReader_add_FrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_LongExposureInfraredFrameReader_add_FrameArrived(_pNative, Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_LongExposureInfraredFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_LongExposureInfraredFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrameReader_AcquireLatestFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrame AcquireLatestFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrameReader_AcquireLatestFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrame(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_LongExposureInfraredFrameReader_add_FrameArrived(_pNative, Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_LongExposureInfraredFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_LongExposureInfraredFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs.meta deleted file mode 100644 index 98e65b1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 78a6e9053bd545d4f948fa1d8ced5879 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs deleted file mode 100644 index 84ce8e8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs +++ /dev/null @@ -1,89 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.LongExposureInfraredFrameReference - // - public sealed partial class LongExposureInfraredFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal LongExposureInfraredFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_LongExposureInfraredFrameReference_AddRefObject(ref _pNative); - } - - ~LongExposureInfraredFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_LongExposureInfraredFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern long Windows_Kinect_LongExposureInfraredFrameReference_get_RelativeTime(RootSystem.IntPtr pNative); - public RootSystem.TimeSpan RelativeTime - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameReference"); - } - - return RootSystem.TimeSpan.FromMilliseconds(Windows_Kinect_LongExposureInfraredFrameReference_get_RelativeTime(_pNative)); - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrameReference_AcquireFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrame AcquireFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameReference"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrameReference_AcquireFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrame(n)); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs.meta deleted file mode 100644 index a66847f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 91cd9161c056061438655504e2f2f7f4 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs deleted file mode 100644 index c0c2f44..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs +++ /dev/null @@ -1,289 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.LongExposureInfraredFrameSource - // - public sealed partial class LongExposureInfraredFrameSource : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal LongExposureInfraredFrameSource(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_LongExposureInfraredFrameSource_AddRefObject(ref _pNative); - } - - ~LongExposureInfraredFrameSource() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameSource_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameSource_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_LongExposureInfraredFrameSource_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrameSource_get_FrameDescription(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameDescription FrameDescription - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrameSource_get_FrameDescription(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.FrameDescription(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_LongExposureInfraredFrameSource_get_IsActive(RootSystem.IntPtr pNative); - public bool IsActive - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameSource"); - } - - return Windows_Kinect_LongExposureInfraredFrameSource_get_IsActive(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrameSource_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrameSource_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_FrameCapturedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_FrameCapturedEventArgs_Delegate))] - private static void Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.FrameCapturedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameSource_add_FrameCaptured(RootSystem.IntPtr pNative, _Windows_Kinect_FrameCapturedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler FrameCaptured - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_FrameCapturedEventArgs_Delegate(Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_LongExposureInfraredFrameSource_add_FrameCaptured(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_LongExposureInfraredFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_LongExposureInfraredFrameSource_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_LongExposureInfraredFrameSource_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_LongExposureInfraredFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_LongExposureInfraredFrameSource_OpenReader(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrameReader OpenReader() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("LongExposureInfraredFrameSource"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_LongExposureInfraredFrameSource_OpenReader(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrameReader(n)); - } - - private void __EventCleanup() - { - { - Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_FrameCapturedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_LongExposureInfraredFrameSource_add_FrameCaptured(_pNative, Windows_Kinect_FrameCapturedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_FrameCapturedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_LongExposureInfraredFrameSource_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs.meta deleted file mode 100644 index 6380a8e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/LongExposureInfraredFrameSource.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: cdcf249c89943864ca06ab517b1d74f5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs deleted file mode 100644 index c5e3b4d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs +++ /dev/null @@ -1,187 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.MultiSourceFrame - // - public sealed partial class MultiSourceFrame : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal MultiSourceFrame(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_MultiSourceFrame_AddRefObject(ref _pNative); - } - - ~MultiSourceFrame() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrame_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrame_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_MultiSourceFrame_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrame_get_BodyFrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyFrameReference BodyFrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrame_get_BodyFrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyFrameReference(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrame_get_BodyIndexFrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.BodyIndexFrameReference BodyIndexFrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrame_get_BodyIndexFrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.BodyIndexFrameReference(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrame_get_ColorFrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.ColorFrameReference ColorFrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrame_get_ColorFrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.ColorFrameReference(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrame_get_DepthFrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.DepthFrameReference DepthFrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrame_get_DepthFrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.DepthFrameReference(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrame_get_InfraredFrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.InfraredFrameReference InfraredFrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrame_get_InfraredFrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.InfraredFrameReference(n)); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrame_get_LongExposureInfraredFrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.LongExposureInfraredFrameReference LongExposureInfraredFrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrame"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrame_get_LongExposureInfraredFrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.LongExposureInfraredFrameReference(n)); - } - } - - - // Public Methods - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs.meta deleted file mode 100644 index 3177fce..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrame.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: eb5e1a9a4aa7a3f4b8190ab4fab84118 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs deleted file mode 100644 index b4f8e94..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs +++ /dev/null @@ -1,75 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.MultiSourceFrameArrivedEventArgs - // - public sealed partial class MultiSourceFrameArrivedEventArgs : RootSystem.EventArgs, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal MultiSourceFrameArrivedEventArgs(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_MultiSourceFrameArrivedEventArgs_AddRefObject(ref _pNative); - } - - ~MultiSourceFrameArrivedEventArgs() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameArrivedEventArgs_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameArrivedEventArgs_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_MultiSourceFrameArrivedEventArgs_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrameArrivedEventArgs_get_FrameReference(RootSystem.IntPtr pNative); - public Windows.Kinect.MultiSourceFrameReference FrameReference - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrameArrivedEventArgs"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrameArrivedEventArgs_get_FrameReference(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.MultiSourceFrameReference(n)); - } - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs.meta deleted file mode 100644 index aed9673..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameArrivedEventArgs.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 1188dd030cd382340966a429c46ed4fe -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs deleted file mode 100644 index 6e946f4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs +++ /dev/null @@ -1,312 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.MultiSourceFrameReader - // - public sealed partial class MultiSourceFrameReader : RootSystem.IDisposable, Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal MultiSourceFrameReader(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_MultiSourceFrameReader_AddRefObject(ref _pNative); - } - - ~MultiSourceFrameReader() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReader_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReader_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - - if (disposing) - { - Windows_Kinect_MultiSourceFrameReader_Dispose(_pNative); - } - Windows_Kinect_MultiSourceFrameReader_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Properties - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern Windows.Kinect.FrameSourceTypes Windows_Kinect_MultiSourceFrameReader_get_FrameSourceTypes(RootSystem.IntPtr pNative); - public Windows.Kinect.FrameSourceTypes FrameSourceTypes - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrameReader"); - } - - return Windows_Kinect_MultiSourceFrameReader_get_FrameSourceTypes(_pNative); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern bool Windows_Kinect_MultiSourceFrameReader_get_IsPaused(RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReader_put_IsPaused(RootSystem.IntPtr pNative, bool isPaused); - public bool IsPaused - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrameReader"); - } - - return Windows_Kinect_MultiSourceFrameReader_get_IsPaused(_pNative); - } - set - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrameReader"); - } - - Windows_Kinect_MultiSourceFrameReader_put_IsPaused(_pNative, value); - Helper.ExceptionHelper.CheckLastError(); - } - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrameReader_get_KinectSensor(RootSystem.IntPtr pNative); - public Windows.Kinect.KinectSensor KinectSensor - { - get - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrameReader_get_KinectSensor(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.KinectSensor(n)); - } - } - - - // Events - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate))] - private static void Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Kinect.MultiSourceFrameArrivedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReader_add_MultiSourceFrameArrived(RootSystem.IntPtr pNative, _Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler MultiSourceFrameArrived - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate(Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handler); - _Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_MultiSourceFrameReader_add_MultiSourceFrameArrived(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_MultiSourceFrameReader_add_MultiSourceFrameArrived(_pNative, Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handler, true); - _Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - private static RootSystem.Runtime.InteropServices.GCHandle _Windows_Data_PropertyChangedEventArgs_Delegate_Handle; - [RootSystem.Runtime.InteropServices.UnmanagedFunctionPointer(RootSystem.Runtime.InteropServices.CallingConvention.Cdecl)] - private delegate void _Windows_Data_PropertyChangedEventArgs_Delegate(RootSystem.IntPtr args, RootSystem.IntPtr pNative); - private static Helper.CollectionMap>> Windows_Data_PropertyChangedEventArgs_Delegate_callbacks = new Helper.CollectionMap>>(); - [AOT.MonoPInvokeCallbackAttribute(typeof(_Windows_Data_PropertyChangedEventArgs_Delegate))] - private static void Windows_Data_PropertyChangedEventArgs_Delegate_Handler(RootSystem.IntPtr result, RootSystem.IntPtr pNative) - { - List> callbackList = null; - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryGetValue(pNative, out callbackList); - lock(callbackList) - { - var objThis = Helper.NativeObjectCache.GetObject(pNative); - var args = new Windows.Data.PropertyChangedEventArgs(result); - foreach(var func in callbackList) - { - Helper.EventPump.Instance.Enqueue(() => { try { func(objThis, args); } catch { } }); - } - } - } - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReader_add_PropertyChanged(RootSystem.IntPtr pNative, _Windows_Data_PropertyChangedEventArgs_Delegate eventCallback, bool unsubscribe); - public event RootSystem.EventHandler PropertyChanged - { - add - { - Helper.EventPump.EnsureInitialized(); - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Add(value); - if(callbackList.Count == 1) - { - var del = new _Windows_Data_PropertyChangedEventArgs_Delegate(Windows_Data_PropertyChangedEventArgs_Delegate_Handler); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle = RootSystem.Runtime.InteropServices.GCHandle.Alloc(del); - Windows_Kinect_MultiSourceFrameReader_add_PropertyChanged(_pNative, del, false); - } - } - } - remove - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - callbackList.Remove(value); - if(callbackList.Count == 0) - { - Windows_Kinect_MultiSourceFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrameReader_AcquireLatestFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.MultiSourceFrame AcquireLatestFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrameReader"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrameReader_AcquireLatestFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.MultiSourceFrame(n)); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReader_Dispose(RootSystem.IntPtr pNative); - public void Dispose() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - Dispose(true); - RootSystem.GC.SuppressFinalize(this); - } - - private void __EventCleanup() - { - { - Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_MultiSourceFrameReader_add_MultiSourceFrameArrived(_pNative, Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handler, true); - } - _Windows_Kinect_MultiSourceFrameArrivedEventArgs_Delegate_Handle.Free(); - } - } - } - { - Windows_Data_PropertyChangedEventArgs_Delegate_callbacks.TryAddDefault(_pNative); - var callbackList = Windows_Data_PropertyChangedEventArgs_Delegate_callbacks[_pNative]; - lock (callbackList) - { - if (callbackList.Count > 0) - { - callbackList.Clear(); - if (_pNative != RootSystem.IntPtr.Zero) - { - Windows_Kinect_MultiSourceFrameReader_add_PropertyChanged(_pNative, Windows_Data_PropertyChangedEventArgs_Delegate_Handler, true); - } - _Windows_Data_PropertyChangedEventArgs_Delegate_Handle.Free(); - } - } - } - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs.meta deleted file mode 100644 index 6ce3a26..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReader.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a52acb4cdb90b3a4fa3937ab27ced4ff -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs deleted file mode 100644 index 01ffec4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs +++ /dev/null @@ -1,72 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.MultiSourceFrameReference - // - public sealed partial class MultiSourceFrameReference : Helper.INativeWrapper - - { - internal RootSystem.IntPtr _pNative; - RootSystem.IntPtr Helper.INativeWrapper.nativePtr { get { return _pNative; } } - - // Constructors and Finalizers - internal MultiSourceFrameReference(RootSystem.IntPtr pNative) - { - _pNative = pNative; - Windows_Kinect_MultiSourceFrameReference_AddRefObject(ref _pNative); - } - - ~MultiSourceFrameReference() - { - Dispose(false); - } - - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReference_ReleaseObject(ref RootSystem.IntPtr pNative); - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern void Windows_Kinect_MultiSourceFrameReference_AddRefObject(ref RootSystem.IntPtr pNative); - private void Dispose(bool disposing) - { - if (_pNative == RootSystem.IntPtr.Zero) - { - return; - } - - __EventCleanup(); - - Helper.NativeObjectCache.RemoveObject(_pNative); - Windows_Kinect_MultiSourceFrameReference_ReleaseObject(ref _pNative); - - _pNative = RootSystem.IntPtr.Zero; - } - - - // Public Methods - [RootSystem.Runtime.InteropServices.DllImport("KinectUnityAddin", CallingConvention=RootSystem.Runtime.InteropServices.CallingConvention.Cdecl, SetLastError=true)] - private static extern RootSystem.IntPtr Windows_Kinect_MultiSourceFrameReference_AcquireFrame(RootSystem.IntPtr pNative); - public Windows.Kinect.MultiSourceFrame AcquireFrame() - { - if (_pNative == RootSystem.IntPtr.Zero) - { - throw new RootSystem.ObjectDisposedException("MultiSourceFrameReference"); - } - - RootSystem.IntPtr objectPointer = Windows_Kinect_MultiSourceFrameReference_AcquireFrame(_pNative); - Helper.ExceptionHelper.CheckLastError(); - if (objectPointer == RootSystem.IntPtr.Zero) - { - return null; - } - - return Helper.NativeObjectCache.CreateOrGetObject(objectPointer, n => new Windows.Kinect.MultiSourceFrame(n)); - } - - private void __EventCleanup() - { - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs.meta deleted file mode 100644 index 911a5e7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/MultiSourceFrameReference.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8e2ed2961bcca974085bf9ddcaaac6a9 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs deleted file mode 100644 index 0155367..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs +++ /dev/null @@ -1,136 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Linq; - -namespace Helper -{ - public static class NativeObjectCache - { - private static object _lock = new object(); - private static Dictionary> _objectCache = new Dictionary>(); - public static void AddObject(IntPtr nativePtr, T obj) where T : class - { - lock (_lock) - { - Dictionary objCache = null; - - if (!_objectCache.TryGetValue(typeof(T), out objCache) || objCache == null) - { - objCache = new Dictionary(); - _objectCache[typeof(T)] = objCache; - } - - objCache[nativePtr] = new WeakReference(obj); - } - } - - public static void Flush() - { - lock(_lock) - { - foreach (var byType in _objectCache.ToArray()) - { - foreach(var kvp in byType.Value.ToArray()) - { - IDisposable disp = kvp.Value.Target as IDisposable; - if(disp != null) - { - disp.Dispose(); - } - - } - } - } - } - - public static void RemoveObject(IntPtr nativePtr) - { - lock (_lock) - { - Dictionary objCache = null; - - if (!_objectCache.TryGetValue(typeof(T), out objCache) || objCache == null) - { - objCache = new Dictionary(); - _objectCache[typeof(T)] = objCache; - } - - if (objCache.ContainsKey(nativePtr)) - { - objCache.Remove(nativePtr); - } - } - } - - public static T GetObject(IntPtr nativePtr) where T : class - { - lock (_lock) - { - Dictionary objCache = null; - - if (!_objectCache.TryGetValue(typeof(T), out objCache) || objCache == null) - { - objCache = new Dictionary(); - _objectCache[typeof(T)] = objCache; - } - - WeakReference reference = null; - if (objCache.TryGetValue(nativePtr, out reference)) - { - if (reference != null) - { - T obj = reference.Target as T; - if (obj != null) - { - return (T)obj; - } - } - } - - return null; - } - } - - public static T CreateOrGetObject(IntPtr nativePtr, Func create) where T : class - { - T outputValue = null; - - lock (_lock) - { - Dictionary objCache = null; - - if (!_objectCache.TryGetValue(typeof(T), out objCache) || objCache == null) - { - objCache = new Dictionary(); - _objectCache[typeof(T)] = objCache; - } - - WeakReference reference = null; - if (objCache.TryGetValue(nativePtr, out reference)) - { - if ((reference != null) && reference.IsAlive) - { - outputValue = reference.Target as T; - } - } - - if (outputValue == null) - { - if (create != null) - { - outputValue = create(nativePtr); - objCache[nativePtr] = new WeakReference(outputValue); - } - else if(typeof(T) == typeof(System.Object)) - { - //T is an object, so lets just pass back our IntPtr, which is an object. - outputValue = (T)(System.Object)nativePtr; - } - } - } - - return outputValue; - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs.meta deleted file mode 100644 index 9058bc5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeObjectCache.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 96cf7d466b0b0bb4d92fb09d817ad613 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs deleted file mode 100644 index 1bde8c9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Linq; - -namespace Helper -{ - public static class NativeWrapper - { - public static System.IntPtr GetNativePtr(Object obj) - { - if(obj == null) - { - return System.IntPtr.Zero; - } - - var nativeWrapperIface = obj as INativeWrapper; - if(nativeWrapperIface != null) - { - return nativeWrapperIface.nativePtr; - } - else - { - throw new ArgumentException("Object must wrap native type"); - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs.meta deleted file mode 100644 index 4953afd..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/NativeWrapper.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0eb32acf7ae62044194131ae0f7e4516 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs deleted file mode 100644 index aac853b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Linq; - -namespace Helper -{ - public class SmartGCHandle : IDisposable - { - private GCHandle handle; - public SmartGCHandle(GCHandle handle) - { - this.handle = handle; - } - - ~SmartGCHandle() - { - Dispose(false); - } - - public System.IntPtr AddrOfPinnedObject() - { - return handle.AddrOfPinnedObject(); - } - - public virtual void Dispose() - { - Dispose(true); - } - - protected virtual void Dispose(bool disposing) - { - this.handle.Free(); - } - - public static implicit operator GCHandle(SmartGCHandle other) - { - - return other.handle; - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs.meta deleted file mode 100644 index d39d738..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/SmartGCHandle.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: adc912eeb5de2014f9ca670eca6ac808 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs deleted file mode 100644 index 6759a4c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Linq; - -namespace Helper -{ - public class ThreadSafeDictionary - { - protected readonly Dictionary _impl = new Dictionary(); - public TValue this[TKey key] - { - get - { - lock (_impl) - { - return _impl[key]; - } - } - set - { - lock (_impl) - { - _impl[key] = value; - } - } - } - - public void Add(TKey key, TValue value) - { - lock (_impl) - { - _impl.Add(key, value); - } - } - - public bool TryGetValue(TKey key, out TValue value) - { - lock (_impl) - { - return _impl.TryGetValue(key, out value); - } - } - - public bool Remove(TKey key) - { - lock (_impl) - { - return _impl.Remove(key); - } - } - - public void Clear() - { - lock (_impl) - { - _impl.Clear(); - } - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs.meta deleted file mode 100644 index 141ff42..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/ThreadSafeDictionary.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b31ad795626855f41842734c10d2a41f -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs deleted file mode 100644 index cdedb9e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs +++ /dev/null @@ -1,15 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.TrackingConfidence - // - public enum TrackingConfidence : int - { - Low =0, - High =1, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs.meta deleted file mode 100644 index c2d594f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingConfidence.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7fc638ac4166d2945b7efa3e6699e510 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs deleted file mode 100644 index f18ef9b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs +++ /dev/null @@ -1,16 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.TrackingState - // - public enum TrackingState : int - { - NotTracked =0, - Inferred =1, - Tracked =2, - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs.meta deleted file mode 100644 index 0082fb6..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/TrackingState.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 7448c7529f8b6564bb3357abc07b1ccf -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs deleted file mode 100644 index ea9679a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs +++ /dev/null @@ -1,48 +0,0 @@ -using RootSystem = System; -using System.Linq; -using System.Collections.Generic; -namespace Windows.Kinect -{ - // - // Windows.Kinect.Vector4 - // - [RootSystem.Runtime.InteropServices.StructLayout(RootSystem.Runtime.InteropServices.LayoutKind.Sequential)] - public struct Vector4 - { - public float X { get; set; } - public float Y { get; set; } - public float Z { get; set; } - public float W { get; set; } - - public override int GetHashCode() - { - return X.GetHashCode() ^ Y.GetHashCode() ^ Z.GetHashCode() ^ W.GetHashCode(); - } - - public override bool Equals(object obj) - { - if (!(obj is Vector4)) - { - return false; - } - - return this.Equals((Vector4)obj); - } - - public bool Equals(Vector4 obj) - { - return X.Equals(obj.X) && Y.Equals(obj.Y) && Z.Equals(obj.Z) && W.Equals(obj.W); - } - - public static bool operator ==(Vector4 a, Vector4 b) - { - return a.Equals(b); - } - - public static bool operator !=(Vector4 a, Vector4 b) - { - return !(a.Equals(b)); - } - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs.meta deleted file mode 100644 index 09244aa..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Standard Assets/Windows/Kinect/Vector4.cs.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6722a9a2a7c5eaa4f98f57c7aca7cfab -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera.meta deleted file mode 100644 index 62e0248..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d10ac49b2e099e94d9bb4ac5bf20de1a -folderAsset: yes -timeCreated: 1488333528 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs deleted file mode 100644 index e743b8a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace uc -{ - [CreateAssetMenu(menuName = "UC/FMCR/ComposerSettings")] - public sealed class ComposerSettings : ScriptableObject - { - [Tooltip("Target offset from the object's center in LOCAL space which the Composer tracks. Use this to fine-tune the tracking target position when the desired area is not in the tracked object's center.")] - public Vector3 TrackedObjectOffset; - - [SerializeField] - public float horizontalSoftDamping = 0.5f; - [SerializeField] - public float verticalSoftDamping = 0.5f; - [SerializeField] - public float dutchDamping = 0f; - - [SerializeField] - [Range(0, 1)] - float softLeft = 0.47f; - [SerializeField] - [Range(0, 1)] - float softRight = 0.53f; - [SerializeField] - [Range(0, 1)] - float softTop = 0.55f; - [SerializeField] - [Range(0, 1)] - float softBottom = 0.45f; - - [SerializeField] - [Range(0, 1)] - float hardLeft = 0.06f; - [SerializeField] - [Range(0, 1)] - float hardRight = 0.94f; - [SerializeField] - [Range(0, 1)] - float hardTop = 0.9f; - [SerializeField] - [Range(0, 1)] - float hardBottom = 0.1f; - - [SerializeField] - [Range(-180,180)] - float dutch = 0; - - public ComposerSettings() { } - - public float Dutch { get { return dutch; } } - - public float HardGuideBottom { get { return hardBottom; } } - public float HardGuideLeft { get { return hardLeft; } } - public Rect HardGuideRect { get { return new Rect(HardGuideLeft, HardGuideBottom, HardGuideRight - HardGuideLeft, HardGuideTop - HardGuideBottom); } } - public float HardGuideRight { get { return hardRight; } } - //public Vector4 HardGuideScreenPercents { get { return 0; } } - public float HardGuideTop { get { return hardTop; } } - public float HorizontalSoftTrackingSpeed { get { return horizontalSoftDamping / 10; } } - public float SoftGuideBottom { get { return softBottom; } } - public float SoftGuideLeft { get { return softLeft; } } - public Rect SoftGuideRect { get { return new Rect(SoftGuideLeft, SoftGuideBottom, SoftGuideRight - SoftGuideLeft, SoftGuideTop - SoftGuideBottom); } } - public float SoftGuideRight { get { return softRight; } } - //public Vector4 SoftGuideScreenPercents { get { return 0; } } - public float SoftGuideTop { get { return softTop; } } - public float VerticalSoftTrackingSpeed { get { return verticalSoftDamping / 10; } } - public float DutchTrackingSpeed { get { return dutchDamping / 10; } } - //public static void BlendSettings(ComposerSettings settingA, ComposerSettings settingB, float blendAmount, ref ComposerSettings blendedOutSettings) { } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs.meta deleted file mode 100644 index 95e9139..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/ComposerSettings.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4716f57de0444e1418e4e959c5e6e8aa -timeCreated: 1493192675 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig.meta deleted file mode 100644 index 94004bb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ae0f72afc42df784791032f5ff4e2fd8 -folderAsset: yes -timeCreated: 1488031767 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor.meta deleted file mode 100644 index fd21bff..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d407a8777980b0d4698ebb87e1e9b61d -folderAsset: yes -timeCreated: 1493277677 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs deleted file mode 100644 index b8ad066..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using uc; -using UnityEditor; -using UnityEngine; - -[CustomEditor(typeof(ComposerSettings))] -[CanEditMultipleObjects] -public class ComposerSettingsEditor : Editor { - SerializedProperty TrackedObjectOffset; - SerializedProperty horizontalSoftDamping; - SerializedProperty verticalSoftDamping; - SerializedProperty dutchDamping; - SerializedProperty softLeft; - SerializedProperty softRight; - SerializedProperty softTop; - SerializedProperty softBottom; - SerializedProperty hardLeft; - SerializedProperty hardRight; - SerializedProperty hardTop; - SerializedProperty hardBottom; - SerializedProperty dutch; - - private void OnEnable() - { - TrackedObjectOffset = serializedObject.FindProperty("TrackedObjectOffset"); - horizontalSoftDamping = serializedObject.FindProperty("horizontalSoftDamping"); - verticalSoftDamping = serializedObject.FindProperty("verticalSoftDamping"); - dutchDamping = serializedObject.FindProperty("dutchDamping"); - softLeft = serializedObject.FindProperty("softLeft"); - softRight = serializedObject.FindProperty("softRight"); - softTop = serializedObject.FindProperty("softTop"); - softBottom = serializedObject.FindProperty("softBottom"); - hardLeft = serializedObject.FindProperty("hardLeft"); - hardRight = serializedObject.FindProperty("hardRight"); - hardTop = serializedObject.FindProperty("hardTop"); - hardBottom = serializedObject.FindProperty("hardBottom"); - dutch = serializedObject.FindProperty("dutch"); - } - - //private Editor _editor; - - delegate void DrawMinMax(string label, SerializedProperty minV, SerializedProperty maxV, float min, float max); - - public override void OnInspectorGUI() - { - //ComposerSettings cs = target as ComposerSettings; - serializedObject.Update(); - EditorGUILayout.PropertyField(TrackedObjectOffset); - EditorGUILayout.PropertyField(horizontalSoftDamping); - EditorGUILayout.PropertyField(verticalSoftDamping); - EditorGUILayout.PropertyField(dutchDamping); - - - DrawMinMax drawMinMax = (string label, SerializedProperty minV, SerializedProperty maxV, float min, float max) => - { - float sl = minV.floatValue; - float sr = maxV.floatValue; - EditorGUILayout.MinMaxSlider(label, ref sl, ref sr, 0, 1); - minV.floatValue = sl; - maxV.floatValue = sr; - }; - - EditorGUILayout.Separator(); - EditorGUILayout.LabelField("Left Right"); - - float[] prevMin = { hardLeft.floatValue, softLeft.floatValue }; - float[] prevMax = { softRight.floatValue, hardRight.floatValue }; - - drawMinMax("Soft", softLeft, softRight, 0, 1); - drawMinMax("Hard", hardLeft, hardRight, 0, 1); - - if(hardLeft.floatValue > softLeft.floatValue) - { - if (prevMin[0] != hardLeft.floatValue) - { - softLeft.floatValue = hardLeft.floatValue; - } - else if (prevMin[1] != softLeft.floatValue) - { - hardLeft.floatValue = softLeft.floatValue; - } - } - - if (hardRight.floatValue < softRight.floatValue) - { - if (prevMax[0] != softRight.floatValue) - { - hardRight.floatValue = softRight.floatValue; - } - else if (prevMax[1] != hardRight.floatValue) - { - softRight.floatValue = hardRight.floatValue; - } - } - - EditorGUILayout.BeginHorizontal(); - hardLeft.floatValue = EditorGUILayout.FloatField(hardLeft.floatValue); - softLeft.floatValue = EditorGUILayout.FloatField(softLeft.floatValue); - softRight.floatValue = EditorGUILayout.FloatField(softRight.floatValue); - hardRight.floatValue = EditorGUILayout.FloatField(hardRight.floatValue); - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.Separator(); - EditorGUILayout.LabelField("Botton Top"); - - prevMin = new float[]{ hardBottom.floatValue, softBottom.floatValue }; - prevMax = new float[] { softTop.floatValue, hardTop.floatValue }; - - drawMinMax("Soft", softBottom, softTop, 0, 1); - drawMinMax("Hard", hardBottom, hardTop, 0, 1); - - if (hardBottom.floatValue > softBottom.floatValue) - { - if (prevMin[0] != hardBottom.floatValue) - { - softBottom.floatValue = hardBottom.floatValue; - } - else if (prevMin[1] != softBottom.floatValue) - { - hardBottom.floatValue = softBottom.floatValue; - } - } - - if (hardTop.floatValue < softTop.floatValue) - { - if (prevMax[0] != softTop.floatValue) - { - hardTop.floatValue = softTop.floatValue; - } - else if (prevMax[1] != hardTop.floatValue) - { - softTop.floatValue = hardTop.floatValue; - } - } - - EditorGUILayout.BeginHorizontal(); - hardBottom.floatValue = EditorGUILayout.FloatField(hardBottom.floatValue); - softBottom.floatValue = EditorGUILayout.FloatField(softBottom.floatValue); - softTop.floatValue = EditorGUILayout.FloatField(softTop.floatValue); - hardTop.floatValue = EditorGUILayout.FloatField(hardTop.floatValue); - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.Separator(); - EditorGUILayout.PropertyField(dutch); - - serializedObject.ApplyModifiedProperties(); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs.meta deleted file mode 100644 index fc747a6..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/ComposerSettingsEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9772279284123cb44b7ad9b9d3f8b51a -timeCreated: 1493790897 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs deleted file mode 100644 index deacf3b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System; -using uc; -using UnityEditor; -using UnityEngine; - -[CustomEditor(typeof(FMCRControl))] -[CanEditMultipleObjects] -public class MeshFilterPreview : Editor -{ - private PreviewRenderUtility _previewRenderUtility; - - SerializedProperty composerSettings; - SerializedProperty transposerSettings; - - private void OnEnable() - { - composerSettings = serializedObject.FindProperty("composerSettings"); - transposerSettings = serializedObject.FindProperty("transposerSettings"); - } - - private Editor _editor; - - public override void OnInspectorGUI() - { - serializedObject.Update(); - DrawDefaultInspector(); - serializedObject.ApplyModifiedProperties(); - - FMCRControl fmcr = target as FMCRControl; - if (fmcr == null) - return; - CreateCachedEditor(composerSettings.objectReferenceValue, null, ref _editor); - if (_editor != null) - { - EditorGUILayout.Separator(); - EditorGUILayout.BeginVertical("Box"); - EditorGUILayout.LabelField(composerSettings.displayName, EditorStyles.boldLabel); - _editor.OnInspectorGUI(); - EditorGUILayout.EndVertical(); - } - CreateCachedEditor(transposerSettings.objectReferenceValue, null, ref _editor); - if (_editor != null) - { - EditorGUILayout.Separator(); - EditorGUILayout.BeginVertical("Box"); - EditorGUILayout.LabelField(transposerSettings.displayName, EditorStyles.boldLabel); - _editor.OnInspectorGUI(); - EditorGUILayout.EndVertical(); - } - } - - private void ValidateData() - { - if (_previewRenderUtility == null) - _previewRenderUtility = new PreviewRenderUtility(true); - } - - public override bool HasPreviewGUI() - { - FMCRControl fmcrControl = target as FMCRControl; - ValidateData(); - return fmcrControl.FMCR != null; - } - - public override bool RequiresConstantRepaint() - { - if (Application.isPlaying == true) - return false; - else - return true; - } - - public override void OnPreviewGUI(Rect r, GUIStyle background) - { - FMCRControl fmcrControl = target as FMCRControl; - if (fmcrControl == null || fmcrControl.FMCR == null || fmcrControl.FMCR.FMCRCamera == null) - return; - - if (Event.current.type == EventType.Repaint) - { - _previewRenderUtility.BeginPreview(fmcrControl.FMCR.FMCRCamera.pixelRect, background); - _previewRenderUtility.camera.transform.position = fmcrControl.vCamPosition; - _previewRenderUtility.camera.transform.rotation = fmcrControl.vCamRotation; - _previewRenderUtility.camera.fieldOfView = fmcrControl.fieldOfView; - _previewRenderUtility.camera.nearClipPlane = fmcrControl.nearClipPlane; - _previewRenderUtility.camera.farClipPlane = fmcrControl.farClipPlane; - _previewRenderUtility.camera.aspect = fmcrControl.FMCR.FMCRCamera.aspect; - _previewRenderUtility.camera.Render(); - - Texture resultRender = _previewRenderUtility.EndPreview(); - - Camera cam = _previewRenderUtility.camera; - - Rect rr = cam.pixelRect.FitIntoRect(r); - - GUI.DrawTexture(rr, resultRender); - fmcrControl.DrawComposerGUI(cam, rr); - } - if (Event.current.type == EventType.Layout) - { - //Debug.Log("Layout"); - } - } - - void OnDestroy() - { - if (_previewRenderUtility != null) - _previewRenderUtility.Cleanup(); - } - - [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected)] - static void DrawGizmo_FMCRControl(FMCRControl scr, GizmoType gizmoType) - { - Vector3 position = scr.transform.position; - - Matrix4x4 m = Gizmos.matrix; - Gizmos.matrix = Matrix4x4.TRS(scr.vCamPosition, scr.vCamRotation, Vector3.one); - Color hex_color; - if (ColorUtility.TryParseHtmlString("#633F5B", out hex_color)) - { - Gizmos.color = hex_color; - Gizmos.DrawFrustum(new Vector3(0, 0, scr.nearClipPlane), scr.fieldOfView, scr.farClipPlane, scr.nearClipPlane, scr.CurrentAspect); - } - Gizmos.matrix = m; - } - - [DrawGizmo(GizmoType.Pickable)] - static void DrawGizmo_FreeMotionCameraRig(FreeMotionCameraRig scr, GizmoType gizmoType) - { - - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs.meta deleted file mode 100644 index eba4655..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/Editor/FMCRViewer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 90858f6da5f0f494f9c500ee95c7baa4 -timeCreated: 1493277204 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs deleted file mode 100644 index c408120..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs +++ /dev/null @@ -1,428 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using uc; -#if UNITY_EDITOR -using UnityEditor; -#endif -using UnityEngine; - -[ExecuteInEditMode] -public class FMCRControl : MonoBehaviour -{ - public enum BlendStrategy - { - CutCubic, - Cubic, - Akima - } - - [Header("Control")] - public bool autoAddToPriority = true; - public int priority = 0; - - [Header("Lens")] - [Range(1, 179)] - public int fieldOfView = 60; - public float nearClipPlane = 0.3f; - public float farClipPlane = 1000; - - [Header("FMCR")] - public BlendStrategy blendStrategy = BlendStrategy.CutCubic; - - public FreeMotionCameraRig FMCR; - - public ComposerSettings composerSettings; - public Transform composerTarget; - - public TransposerSettings transposerSettings; - public Transform transposerTarget; - - [SerializeField] - public static bool showCameraGuide = false; - - public Vector3 vCamPosition { get { return transposerTargetPosition; } } - public Quaternion vCamRotation - { - get - { - float fov = fieldOfView * Mathf.Deg2Rad; - - float z = 0.5f / Mathf.Tan(fov / 2); - float v_point = 0.5f; - float h_point = 0.5f; - float dutch = 0; - if (composerSettings != null) - { - v_point = composerSettings.SoftGuideBottom * 0.5f + composerSettings.SoftGuideTop * 0.5f; - h_point = composerSettings.SoftGuideLeft * 0.5f + composerSettings.SoftGuideRight * 0.5f; - dutch = composerSettings.Dutch; - } - float angle_v = Mathf.Atan2(v_point - 0.5f, z) * Mathf.Rad2Deg; - float aspect = 1; - if (FMCR != null && FMCR.FMCRCamera != null) - aspect = FMCR.FMCRCamera.aspect; - float angle_h = -Mathf.Atan2(h_point - 0.5f, z / aspect) * Mathf.Rad2Deg; - Quaternion rotation = Quaternion.identity; - Vector3 lookat = composerTargetPosition - transposerTargetPosition; - if (lookat == Vector3.zero) - rotation *= transposerTarget.rotation; - else - rotation *= Quaternion.LookRotation(lookat); - rotation *= Quaternion.Euler(angle_v, angle_h, dutch); - - return rotation; - } - } - - public class myReverserClass : IComparer - { - int IComparer.Compare(int x, int y) { return y - x; } - } - static SortedList priorityList = new SortedList(new myReverserClass()); - static FMCRControl activeControl = null; - static public FMCRControl ActiveControl { get { return activeControl; } } - - public Vector3 composerTargetPosition - { - get - { - Vector3 p = Vector3.zero; - Transform target = transform; - - if (composerTarget != null) - target = composerTarget; - else if (transposerTarget != null) - target = transposerTarget; - - p += target.position; - - //screen space?? - if (composerSettings != null) - p += target.TransformVector(composerSettings.TrackedObjectOffset); - - return p; - } - } - - Vector3 transposerTargetPosition - { - get - { - Vector3 position = Vector3.zero; - Transform target = transform; - - if (transposerTarget != null) - target = transposerTarget; - - position += target.position; - - if (transposerSettings != null) - { - switch (transposerSettings.TransposerOffsetMode) - { - case TransposerSettings.TransposerOffsetType.LocalSpaceOnTargetAssignment: - Debug.LogError("transposerTargetPosition for LocalSpaceOnTargetAssignment is not implemeted."); - break; - case TransposerSettings.TransposerOffsetType.LocalSpaceLockedUpVector: - Debug.LogError("transposerTargetPosition for LocalSpaceLockedUpVector is not implemeted."); - break; - case TransposerSettings.TransposerOffsetType.LocalSpaceLockedToTarget: - position += target.TransformVector(transposerSettings.OffsetFromTarget); - break; - case TransposerSettings.TransposerOffsetType.WorldSpace: - position += transposerSettings.OffsetFromTarget; - break; - } - } - return position; - } - } - - private void OnEnable() - { - if (priorityList.ContainsKey(priority)) - { - priorityList.Remove(priority); - } - if (autoAddToPriority) - priorityList.Add(priority, this); - UpdateActiveControl(); - } - - private void OnDisable() - { - if (priorityList.ContainsKey(priority) && priorityList[priority] == this) - { - priorityList.Remove(priority); - } - UpdateActiveControl(); - } - - void UpdateActiveControl() - { - if (priorityList.Count > 0) - { - IEnumerator> it = priorityList.GetEnumerator(); - it.MoveNext(); - activeControl = it.Current.Value; - } - } - - // Update is called once per frame - void Update() - { - if (activeControl != this || Application.isPlaying == false) - return; - - if (FMCR != null && FMCR.FMCRCamera != null) - { - FMCR.FMCRCamera.fieldOfView = fieldOfView; - FMCR.FMCRCamera.nearClipPlane = nearClipPlane; - FMCR.FMCRCamera.farClipPlane = farClipPlane; - } - UpdateTransposer(); - UpdateComposer(); - } - - Rect softRect = new Rect(0.5f, 0.5f, 0, 0); - Rect hardRect = new Rect(0,0,1,1); - float fov = 0; - float aspect = 1; - - public float CurrentAspect { get { return aspect; } } - - float hSpeed = 1; - float vSpeed = 1; - float dSpeed = 1; - float softLeftAngle = 0; - float softRightAngle = 0; - float softTopAngle = 0; - float softBottomAngle = 0; - //float hardLeftAngle = 0; - //float hardRightAngle = 0; - //float hardTopAngle = 0; - //float hardBottomAngle = 0; - float dutch = 0; - - void UpdateAngle() - { - bool needUpdate = false; - if (composerSettings != null) - { - if (softRect != composerSettings.SoftGuideRect || hardRect != composerSettings.HardGuideRect) - { - softRect = composerSettings.SoftGuideRect; - hardRect = composerSettings.HardGuideRect; - hSpeed = composerSettings.HorizontalSoftTrackingSpeed; - vSpeed = composerSettings.VerticalSoftTrackingSpeed; - dSpeed = composerSettings.DutchTrackingSpeed; - dutch = composerSettings.Dutch; - needUpdate = true; - } - } - if (FMCR != null && FMCR.FMCRCamera != null) - { - if (fov != FMCR.FMCRCamera.fieldOfView || aspect != FMCR.FMCRCamera.aspect) - { - fov = FMCR.FMCRCamera.fieldOfView; - aspect = FMCR.FMCRCamera.aspect; - needUpdate = true; - } - } - - if (needUpdate) - { - float z = 0.5f / Mathf.Tan(fov * Mathf.Deg2Rad / 2); - //hardLeftAngle = -Mathf.Atan2(hardRect.xMin - 0.5f, z / aspect) * Mathf.Rad2Deg; - //hardRightAngle = -Mathf.Atan2(hardRect.xMax - 0.5f, z / aspect) * Mathf.Rad2Deg; - softLeftAngle = -Mathf.Atan2(softRect.xMin - 0.5f, z / aspect) * Mathf.Rad2Deg; - softRightAngle = -Mathf.Atan2(softRect.xMax - 0.5f, z / aspect) * Mathf.Rad2Deg; - softTopAngle = -Mathf.Atan2(softRect.yMin - 0.5f, z) * Mathf.Rad2Deg; - softBottomAngle = -Mathf.Atan2(softRect.yMax - 0.5f, z) * Mathf.Rad2Deg; - //hardTopAngle = -Mathf.Atan2(hardRect.yMin - 0.5f, z) * Mathf.Rad2Deg; - //hardBottomAngle = -Mathf.Atan2(hardRect.yMax - 0.5f, z) * Mathf.Rad2Deg; - } - } - - void UpdateComposer() - { - if (FMCR == null || FMCR.FMCRCamera == null) - return; - - UpdateAngle(); - - Vector3 screenPoint = FMCR.FMCRCamera.WorldToViewportPoint(composerTargetPosition); - - //is this necessary? - if (screenPoint.z == 0) - return; - - float hStep = Mathf.Clamp01(Time.deltaTime / hSpeed); - float vStep = Mathf.Clamp01(Time.deltaTime / vSpeed); - float dStep = Mathf.Clamp01(Time.deltaTime / dSpeed); - - { - float sideways = FMCR.sideways; - //float angle_hl = UC.Math.Nearest360(hardLeftAngle, sideways); - //float angle_hr = UC.Math.Nearest360(hardRightAngle, sideways); - float angle_sl = UC.Math.Nearest360(softLeftAngle, sideways); - float angle_sr = UC.Math.Nearest360(softRightAngle, sideways); - //if (horizontal > angle_hl) - // FMCR.sideways = angle_sl; - //else if (horizontal < angle_hr) - // FMCR.sideways = angle_sr; - //else - if (FMCR.sideways > angle_sl) - FMCR.sideways = Mathf.Lerp(sideways, angle_sl, hStep); - else if (FMCR.sideways < angle_sr) - FMCR.sideways = Mathf.Lerp(sideways, angle_sr, hStep); - } - { - float tilt = FMCR.tilt; - //float angle_hb = UC.Math.Nearest360(hardBottomAngle, tilt); - //float angle_ht = UC.Math.Nearest360(hardTopAngle, tilt); - float angle_sb = UC.Math.Nearest360(softBottomAngle, tilt); - float angle_st = UC.Math.Nearest360(softTopAngle, tilt); - //if (vertical > angle_hb) - // FMCR.sideways = angle_sb; - //else if (vertical < angle_ht) - // FMCR.sideways = angle_st; - //else - if (FMCR.tilt > angle_sb) - FMCR.tilt = Mathf.Lerp(tilt, angle_sb, vStep); - else if (FMCR.tilt < angle_st) - FMCR.tilt = Mathf.Lerp(tilt, angle_st, vStep); - } - - FMCR.roll = Mathf.Lerp(FMCR.roll, dutch, dStep); - } - - void UpdateTransposer() - { - if (FMCR == null) - return; - - Vector3 step = Vector3.one; - - if (transposerSettings != null) - { - step.x = Mathf.Clamp01(Time.deltaTime / transposerSettings.TrackingSpeeds.x); - step.y = Mathf.Clamp01(Time.deltaTime / transposerSettings.TrackingSpeeds.y); - step.z = Mathf.Clamp01(Time.deltaTime / transposerSettings.TrackingSpeeds.z); - } - - Vector3 originTransformPosition = FMCR.NodePosition; - - bool isCutCubic = (blendStrategy == BlendStrategy.CutCubic); - FMCR.transform.position = Lerp(FMCR.transform.position, composerTargetPosition, isCutCubic ? Vector3.one : step); - - - Vector3 a = FMCR.transform.InverseTransformPoint(transposerTargetPosition); - Vector3 b = FMCR.transform.InverseTransformPoint(originTransformPosition); - - bool isAkima = (blendStrategy == BlendStrategy.Akima); - Vector3 hvdTarget = FMCR.XYZToHVDNearest(Lerp(b, a, isAkima ? Vector3.one : step)); - - //TODO - if (transposerTargetPosition == composerTargetPosition && transposerSettings != null && transposerSettings.OffsetFromTarget == Vector3.zero) - { - hvdTarget = FMCR.RotationToHVD(transposerTarget.rotation, 0.1f); - hvdTarget.z = 0; - } - - FMCR.horizon = Mathf.Lerp(FMCR.horizon, hvdTarget.x, isAkima ? step.x : 1); - FMCR.vertical = Mathf.Lerp(FMCR.vertical, hvdTarget.y, isAkima ? step.y : 1); - FMCR.distance = Mathf.Lerp(FMCR.distance, hvdTarget.z, isAkima ? step.z : 1); - } - -#if UNITY_EDITOR - private void OnGUI() - { - if (activeControl != this || showCameraGuide == false) - return; - if (FMCR == null || FMCR.FMCRCamera == null) - return; - DrawComposerGUI(FMCR.FMCRCamera, FMCR.FMCRCamera.pixelRect); - } -#endif - - delegate void DrawRect(float x, float y, float w, float h); - delegate void DrawZone(Rect rect); - - public void DrawComposerGUI(Camera cam, Rect screenRect) - { - if (cam == null) - return; - - Color hex_color; - Color originalColor = GUI.color; - - string hardColorString = "#C9615C"; - string softColorString = "#62B9CF"; - string targetColorString = "#FFF82A"; - float alpha = 0.3f; - - DrawRect drawRect = (float x, float y, float w, float h) => - { - float xx = screenRect.width * x + screenRect.x; - float yy = screenRect.height * (1 - y) + screenRect.y; - Rect r = new Rect(xx, yy, screenRect.width * w, -screenRect.height * h); - GUI.DrawTexture(r, Texture2D.whiteTexture); - }; - - DrawZone drawZone = (Rect rect) => - { - drawRect(0, 0, rect.xMin, 1); - drawRect(rect.xMax, 0, 1 - rect.xMax, 1); - drawRect(rect.xMin, 0, rect.xMax - rect.xMin, rect.yMin); - drawRect(rect.xMin, rect.yMax, rect.xMax - rect.xMin, 1 - rect.yMax); - }; - - if (ColorUtility.TryParseHtmlString(hardColorString, out hex_color)) - { - hex_color.a = alpha; - GUI.color = hex_color; - if (composerSettings != null) - drawZone(composerSettings.HardGuideRect); - } - - if (ColorUtility.TryParseHtmlString(softColorString, out hex_color)) - { - hex_color.a = alpha; - GUI.color = hex_color; - if(composerSettings != null) - drawZone(composerSettings.SoftGuideRect); - } - - if (ColorUtility.TryParseHtmlString(targetColorString, out hex_color)) - { - Vector3 pt = cam.WorldToViewportPoint(composerTargetPosition); - float hSize = screenRect.height * 0.01f; - float x = pt.x * screenRect.width + screenRect.x - hSize; - float y = (1 - pt.y) * screenRect.height - hSize + screenRect.y; - - GUI.color = hex_color; - GUI.DrawTexture(new Rect(x, y, hSize * 2, hSize * 2), Texture2D.whiteTexture); - } - - GUI.color = originalColor; - } - - static Vector3 Lerp(Vector3 a, Vector3 b, Vector3 t) - { - return new Vector3(Mathf.Lerp(a.x, b.x, t.x), Mathf.Lerp(a.y, b.y, t.y), Mathf.Lerp(a.z, b.z, t.z)); - } - - [ContextMenu("DrawCameraGuide")] - void DrawCameraGuide() - { - showCameraGuide = true; - } - - [ContextMenu("HideCameraGuide")] - void HideCameraGuide() - { - showCameraGuide = false; - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs.meta deleted file mode 100644 index 55a60b9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FMCRControl.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 03f96e3f85dbf7d46af6c5f4ecaba86e -timeCreated: 1492580746 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.FBX b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.FBX deleted file mode 100644 index ab20800d8647dfc278e9df99932b43e3596d9fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39920 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 U&fmB1A$|54BQOoP1&i trail_positions; - float stamp; - - void Start() - { - trail_positions = new List(); - stamp = Time.time; - } - - void LateUpdate() - { - if (FMCRCamera == null) - return; - - if (node_trans == null) - { - node_trans = transform.GetChild(0); - } - - if (camera_trans == null) - { - camera_trans = node_trans.GetChild(0); - } - - positionX = transform.localPosition.x; - positionY = transform.localPosition.y; - positionZ = transform.localPosition.z; - transform.localRotation = new Quaternion(); - float scale = Mathf.Max(new float[] { transform.localScale.x, transform.localScale.y, transform.localScale.z }); - transform.localScale = Vector3.one * scale; - - if (distance < 0) - distance = 0; - - node_trans.localPosition = HVDToXYZ(horizon, vertical, distance); - node_trans.localRotation = HVDToRotation(horizon, vertical, distance); - - camera_trans.localPosition = new Vector3(0, 0, slide); - camera_trans.localRotation = Quaternion.Euler(-tilt, sideways, roll); - - FMCRCamera.transform.position = camera_trans.position; - FMCRCamera.transform.rotation = camera_trans.rotation; - - float dt = Time.time - stamp; - if (dt > 1.0f / framerate) - { - stamp = Time.time; - trail_positions.Add(camera_trans.position); - int max_count = (int)(duration * framerate); - while (trail_positions.Count > max_count) - trail_positions.RemoveAt(0); - } - } - - public void Setp() - { - LateUpdate(); - } - - public Vector3 NodePosition { get { return transform.GetChild(0).position; } } - - void OnDrawGizmosSelected() - { - if (FMCRCamera == null) - return; - - Camera camera = FMCRCamera; - Gizmos.matrix = Matrix4x4.TRS(camera.transform.position, camera.transform.rotation, Vector3.one); - - if (camera.orthographic) - { - float spread = camera.farClipPlane - camera.nearClipPlane; - float center = (camera.farClipPlane + camera.nearClipPlane) * 0.5f; - Gizmos.DrawWireCube(new Vector3(0, 0, center), new Vector3(camera.orthographicSize * 2 * camera.aspect, camera.orthographicSize * 2, spread)); - } - else - { - Gizmos.DrawFrustum(new Vector3(0, 0, camera.nearClipPlane), camera.fieldOfView, camera.farClipPlane, camera.nearClipPlane, camera.aspect); - } - } - - void OnDrawGizmos() - { - if (FMCRCamera == null) - return; - - Color hex_color; - float scale = transform.localScale.x; - - Vector3 up = new Vector3(0, 0, 1); - - // main helper - if (ColorUtility.TryParseHtmlString("#0E3D59", out hex_color) && node_trans != null) - { - Gizmos.color = hex_color; - Quaternion quat = node_trans.localRotation * Quaternion.Euler(90, 0, 0); - Gizmos.DrawWireMesh(helper, transform.position, quat, transform.localScale); - - up = quat * up; - } - - // line to cc - if (ColorUtility.TryParseHtmlString("#88A61B", out hex_color) && camera_trans != null) - { - Gizmos.color = hex_color; - Gizmos.DrawLine(transform.position, camera_trans.position); - } - - // camera helper - if (ColorUtility.TryParseHtmlString("#F25C05", out hex_color) && node_trans != null) - { - Gizmos.color = hex_color; - Vector3 dir = (transform.position - node_trans.position).normalized; - Vector3 n_dir = Vector3.Cross(dir, up).normalized; - Vector3 p1 = node_trans.position + dir * 0.18f * scale; - Vector3 p2 = node_trans.position + n_dir * 0.07f * scale; - Vector3 p3 = node_trans.position - dir * 0.1f * scale; - Vector3 p4 = node_trans.position - n_dir * 0.07f * scale; - Gizmos.DrawLine(p1, p2); - Gizmos.DrawLine(p2, p3); - Gizmos.DrawLine(p3, p4); - Gizmos.DrawLine(p4, p1); - } - - // camera - if (ColorUtility.TryParseHtmlString("#D92525", out hex_color) && camera_trans != null) - { - Gizmos.color = hex_color; - Vector3 dir = camera_trans.rotation * Vector3.forward; - Vector3 n_dir = camera_trans.rotation * Vector3.right; - Vector3 dir_offset = dir * 0.04f * scale; - Vector3 p1 = camera_trans.position + dir_offset; - Vector3 p2 = camera_trans.position - dir_offset + n_dir * 0.09f * scale; - Vector3 p3 = camera_trans.position - dir_offset - n_dir * 0.09f * scale; - Gizmos.DrawLine(p1, p2); - Gizmos.DrawLine(p2, p3); - Gizmos.DrawLine(p3, p1); - } - } - - static Quaternion HVDToRotation(float horizon, float vertical, float distance) - { - Vector3 xyz = HVDToXYZ(horizon, vertical, distance + 0.01f); - return Quaternion.LookRotation(-xyz); - } - - public Vector3 RotationToHVD(Quaternion roataion, float distance) - { - Vector3 xyz = roataion * (Vector3.forward * -distance); - return XYZToHVDNearest(xyz); - } - - public static Vector3 HVDToXYZ(float horizon, float vertical, float distance) - { - float a = horizon * Mathf.Deg2Rad; - float b = vertical * Mathf.Deg2Rad; - float r = distance; - - //z up, right handed - float x = Mathf.Cos(b) * Mathf.Sin(a) * r; - float y = -Mathf.Cos(b) * Mathf.Cos(a) * r; - float z = -Mathf.Sin(b) * r; - - return new Vector3(x, z, y); - } - - Vector3 XYZToHVD(Vector3 xyz) - { - //to z up, right handed - float x = xyz.x; - float y = xyz.z; - float z = xyz.y; - - float horizon = Mathf.Atan2(x, -y) * Mathf.Rad2Deg; - float vertical = Mathf.Atan2(-z, Mathf.Sqrt(x * x + y * y)) * Mathf.Rad2Deg; - float distance = xyz.magnitude; - - return new Vector3(horizon, vertical, distance); - } - - public Vector3 XYZToHVDNearest(Vector3 xyz) - { - Vector3 hvd = XYZToHVD(xyz); - bool vertOver90 = Mathf.Repeat(vertical + 90, 360) > 180; - - float hDiff = horizon - hvd.x; - float vDiff = vertical - hvd.y; - - float hAdj = vertOver90 ? Mathf.Round(hDiff / 180) * 180 : Mathf.Round(hDiff / 360) * 360; - float vAdj = vertOver90 ? Mathf.Round((vertical + hvd.y) / 180) * 180 : Mathf.Round(vDiff / 360) * 360; - - hvd.x += hAdj; - hvd.y = vertOver90 ? -hvd.y + vAdj : hvd.y + vAdj; - - return hvd; - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.cs.meta deleted file mode 100644 index acbd1ba..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e1a5041da684df9428158c554e1d0961 -timeCreated: 1488031767 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab deleted file mode 100644 index 4b410f8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab +++ /dev/null @@ -1,123 +0,0 @@ -%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_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 1396435515457646} - m_IsPrefabParent: 1 ---- !u!1 &1075857605349078 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4114305454470350} - m_Layer: 0 - m_Name: Dummy - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1396435515457646 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4921649763249666} - - component: {fileID: 114464489650813304} - m_Layer: 0 - m_Name: FreeMotionCameraRig - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1652840592525928 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4496974893481850} - m_Layer: 0 - m_Name: Node - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4114305454470350 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1075857605349078} - m_LocalRotation: {x: -0.043619387, y: 0, z: 0, w: 0.99904823} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 4496974893481850} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4496974893481850 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1652840592525928} - m_LocalRotation: {x: 0.17364815, y: -0, z: -0, w: 0.9848078} - m_LocalPosition: {x: 0, y: 1.0260603, z: -2.819078} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4114305454470350} - m_Father: {fileID: 4921649763249666} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &4921649763249666 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1396435515457646} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 4496974893481850} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0.03, z: 0} ---- !u!114 &114464489650813304 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1396435515457646} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e1a5041da684df9428158c554e1d0961, type: 3} - m_Name: - m_EditorClassIdentifier: - helper: {fileID: 4300000, guid: 9395885296470c440b106a3203a569ef, type: 3} - FMCRCamera: {fileID: 0} - positionX: 0 - positionY: 0 - positionZ: 0 - distance: 3 - horizon: 0 - vertical: -20 - roll: 0 - tilt: 5 - sideways: 0 - slide: 0 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab.meta deleted file mode 100644 index 16dc4f2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/FreeMotionCameraRig/FreeMotionCameraRig.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0abe703e13642da418cfbe905e4d116e -timeCreated: 1488200013 -licenseType: Free -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs deleted file mode 100644 index dc08435..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace uc -{ - [CreateAssetMenu(menuName = "UC/FMCR/TransposerSettings")] - public sealed class TransposerSettings : ScriptableObject - { - [SerializeField] - Vector3 offsetFromTarget = new Vector3(0,0,-10); - - [SerializeField] - [Range(0, 20)] - float xDamping = 1f; - [SerializeField] - [Range(0, 20)] - float yDamping = 1f; - [SerializeField] - [Range(0, 20)] - float zDamping = 1f; - - [SerializeField] - TransposerOffsetType transposerOffsetMode = TransposerOffsetType.LocalSpaceLockedToTarget; - - - public TransposerSettings() { } - - public Vector3 OffsetFromTarget { get { return offsetFromTarget; } } - public Vector3 TrackingSpeeds { get { return new Vector3(xDamping / 10, yDamping / 10, zDamping / 10); } } - public TransposerOffsetType TransposerOffsetMode { get { return transposerOffsetMode; } } - - //public static bool BlendSettings(TransposerSettings transpA, TransposerSettings transpB, float blendValue, ref TransposerSettings outputSettings); - - public enum TransposerOffsetType - { - LocalSpaceOnTargetAssignment = 0, - LocalSpaceLockedUpVector = 1, - LocalSpaceLockedToTarget = 2, - WorldSpace = 3 - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs.meta deleted file mode 100644 index 3077774..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Camera/TransposerSettings.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d5dcde4503dceb14ab2af61f7eebb867 -timeCreated: 1493194694 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication.meta deleted file mode 100644 index 4935954..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 654c82c39c253bd41bc55c6152f52ff7 -folderAsset: yes -timeCreated: 1504061477 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata.meta deleted file mode 100644 index fe3e2a5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 66c0666bcb00cff4aa3917a527ae8ade -folderAsset: yes -timeCreated: 1483428829 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs deleted file mode 100644 index 73d25ec..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs +++ /dev/null @@ -1,192 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using OSC.NET; -using System; -using UnityEngine.Events; -using System.Threading; - -namespace OSCFirmata -{ - public class FirmataControl : MonoBehaviour - { - public string sendAddress = "localhost"; - public int sendPort = 3434; - public int receievePort = 3435; - - public enum ControlType - { - set_digital, - set_analog, - } - - public PinCommand[] pins; - - - public PinCommand[] inPins; - - private Dictionary inPinMap = new Dictionary(); - private bool is_receiving_thread_running = false; - private Thread receivingThread; - - // Use this for initialization - void Start() - { - _oscSender = new OSCTransmitter(sendAddress, sendPort); - _oscReceiever = new OSCReceiver(receievePort); - - receivingThread = new Thread(receivingService); - receivingThread.Start(); - // inPins = new PinCommand[1]; - } - - // Update is called once per frame - protected void Update() - { - foreach (var pin in pins) - { - if (_oscSender != null) - _oscSender.Send(pin.toOSC()); - } - - - lock (inPinMap) - { - foreach (PinCommand pin in inPins) - { - if (inPinMap.ContainsKey(pin.pin)) - { - //if (pin.value != inPinMap[pin.pin].value) - { - pin.value = inPinMap[pin.pin].value; - pin.valueChangeEvent.Invoke(pin.value); - } - } - } - } - } - private void OnDestroy() - { - is_receiving_thread_running = false; - _oscReceiever.Close(); - receivingThread.Join(); - } - - protected OSCTransmitter _oscSender; - protected OSCReceiver _oscReceiever; - - public enum CommandType - { - report_pin, - set_pin, - } - - public enum PinMode - { - DIGITAL_INPUT = 0x00, - DIGITAL_OUTPUT = 0x01, - ANALOG_INPUT = 0x02, - PWM = 0x03, - SERVO = 0x04, - SHIFT = 0x05, - I2C = 0x06, - ONEWIRE = 0x07, - STEPPER = 0x08, - ENCODER = 0x09, - SERIAL = 0x0A, - INPUT_PULLUP = 0x0B, - } - - private void processMessage(OSCMessage msg) - { - //Debug.Log(msg.ToString()); -#if true - PinCommand pin = PinCommand.fromOSC(msg); - //if(pin.pin == 8) - //Debug.Log(msg.ToString()); - - lock (inPinMap) - { - if (inPinMap.ContainsKey(pin.pin)) - { - inPinMap[pin.pin] = pin; - } - else - { - inPinMap.Add(pin.pin, pin); - } - } -#endif - } - [System.Serializable] - public class PinCommand - { - public ControlType controlType = ControlType.set_digital; - public int pin = 0; - [Range(0f, 1f)] - public float value; - [Serializable] - public class ValueChangeedEvent : UnityEvent { } - public ValueChangeedEvent valueChangeEvent; - CommandType commandType = CommandType.set_pin; - PinMode mode; - public OSCMessage toOSC() - { - string address = "/rqst/" + commandType; - OSCMessage msg = new OSCMessage(address); - switch (controlType) - { - case ControlType.set_analog: - mode = PinMode.PWM; - break; - case ControlType.set_digital: - mode = PinMode.DIGITAL_OUTPUT; - break; - } - msg.Append(pin); - msg.Append(mode.ToString()); - msg.Append(value); - return msg; - } - - public static PinCommand fromOSC(OSCMessage msg) - { - PinCommand pin = new PinCommand(); - - if (msg.Address != "/rspn/report_pin") - return null; - - pin.pin = (int)msg.Values[0]; - pin.mode = (PinMode)Enum.Parse(typeof(PinMode), (string)msg.Values[1]); - pin.value = (float)msg.Values[2]; - - return pin; - } - } - - private void receivingService() - { - is_receiving_thread_running = true; - while (is_receiving_thread_running) - { - OSCPacket packet = _oscReceiever.Receive(); - while (is_receiving_thread_running && packet != null) - { - if (packet.IsBundle()) - { - //Debug.Log("IsBundle"); - ArrayList messages = packet.Values; - for (int i = 0; i < messages.Count; i++) - { - processMessage((OSCMessage)messages[i]); - } - } - else - processMessage((OSCMessage)packet); - packet = _oscReceiever.Receive(); - } - } - Debug.Log("packet = null"); - } - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs.meta deleted file mode 100644 index 56247f5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/OSC2Firmata/FirmataControl.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8f2ed39fabc155e42a9a912ad7c2fd33 -timeCreated: 1483432037 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins.meta deleted file mode 100644 index 3a0f311..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 7abeaf0f0248a6a41bc5e65614e77bc8 -folderAsset: yes -timeCreated: 1504062107 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86.meta deleted file mode 100644 index 017bb06..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ba1da97f60a25fa44a4040421a53f7b5 -folderAsset: yes -timeCreated: 1504062412 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86/ofSerial.dll b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/Plugins/x86/ofSerial.dll deleted file mode 100644 index 66638886f773ff01d93b6b846ea50092e42a2233..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51200 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⪻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 O)T6YQ getDeviceList(); - - [DllImport("ofSerial")] - public static extern bool setupNative(uint id); - [DllImport("ofSerial")] - public static extern bool setupWithPortNameNative(uint id, [MarshalAs(UnmanagedType.LPStr)]string portName, int baudrate); - [DllImport("ofSerial")] - public static extern bool setupWithDeviceNumberNative(uint id, int deviceNumber, int baudrate); - [DllImport("ofSerial")] - public static extern bool isInitializedNative(uint id); - [DllImport("ofSerial")] - public static extern void closeNative(uint id); - [DllImport("ofSerial")] - public static extern int availableNative(uint id); - [DllImport("ofSerial")] - public static extern int readBytesNative(uint id, IntPtr buffer, int length); - [DllImport("ofSerial")] - public static extern int readByteNative(uint id); - [DllImport("ofSerial")] - public static extern int writeBytesNative(uint id, IntPtr buffer, int length); - [DllImport("ofSerial")] - public static extern bool writeByteNative(uint id, byte singleByte); - [DllImport("ofSerial")] - public static extern void flushNative(uint id, bool flushIn = true, bool flushOut = true); - [DllImport("ofSerial")] - public static extern void drainNative(uint id); - #endregion - - private uint id = 0; - -#if false - ofSerial(); - virtual ~ofSerial(); - void listDevices(); - vector getDeviceList(); - bool setup(); - bool setup(string portName, int baudrate); - bool setup(int deviceNumber, int baudrate); - bool isInitialized() const; - void close(); - int available(); - int readBytes(unsigned char* buffer, int length); - int readByte(); - int writeBytes(unsigned char* buffer, int length); - bool writeByte(unsigned char singleByte); - void flush(bool flushIn = true, bool flushOut = true); - void drain(); -#endif -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/ofSerial.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/ofSerial.cs.meta deleted file mode 100644 index 9a764c0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Communication/ofSerial.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 581774665dd56cb41a3177a93c377cb5 -timeCreated: 1504062186 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher.meta deleted file mode 100644 index 14b0615..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 65ae90d41d994cc42b3440c889f037c2 -folderAsset: yes -timeCreated: 1482216914 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor.meta deleted file mode 100644 index 359f267..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: de33e8e76b63c004780e448fd9b8c4e1 -folderAsset: yes -timeCreated: 1482229031 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs deleted file mode 100644 index ea44302..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs +++ /dev/null @@ -1,68 +0,0 @@ -#if false -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEditor; -using UnityEngine; -//[CustomEditor(typeof(ImageFileWatcher))] -public class ImageFileWatcherEditor : Editor -{ - public override void OnInspectorGUI() - { - - DrawDefaultInspector(); - /* - int selected = 0; - string[] options = new string[] - { - "Option1", "Option2", "Option3", - }; - - - selected = EditorGUILayout.Popup("Label", selected, options); - */ - ImageFileWatcher image_watcher = target as ImageFileWatcher; - //List result = new List(); - string[] file_list = Directory.GetFiles(image_watcher.originFolder); - - foreach (string f in file_list) - { - FileInfo file = new FileInfo(f); - if (file.Extension == ".meta") - continue; - GUILayout.BeginHorizontal(); - { - string typename = file.Name.Substring(0, file.Name.Length - file.Extension.Length); - GUILayout.Label(typename, GUILayout.Width(100)); - GUILayout.TextField("", GUILayout.ExpandWidth(true)); - - - - - string name = ""; - switch (Event.current.type) - { - case EventType.DragUpdated: - case EventType.DragPerform: - DragAndDrop.visualMode = DragAndDropVisualMode.Copy; - - if (Event.current.type == EventType.DragPerform) - { - name = DragAndDrop.objectReferences[0].ToString(); - - } - break; - } - - - - - } - GUILayout.EndHorizontal(); - - } - - - } -} -#endif \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs.meta deleted file mode 100644 index 842feb4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/Editor/ImageFileWatcherEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c9efed14c4f5ee94b90e3a182e9ae11e -timeCreated: 1482229050 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs deleted file mode 100644 index 92c5cbb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs +++ /dev/null @@ -1,225 +0,0 @@ -using UnityEngine; -using System.IO; -using System.Collections.Generic; -using System; -using System.Threading; -using System.Collections; -using UnityEngine.Events; - -public class ImageFileWatcher : MonoBehaviour -{ - //public string originFolder; - public static ImageFileWatcher instance; - - [Serializable] - public class TextureDataHandler : UnityEvent { }; - public TextureDataHandler TextureAddedEvent = new TextureDataHandler(); - public TextureDataHandler TextureRemovedEvent = new TextureDataHandler(); - - public int photoSize = 0; - public float photoCheckingPeriod = 0.2f; - public int maxNum = 20; - [Tooltip("the root path is unity project path")] - public string rootPath = "Scan"; - public Texture2D[] texListForDebugging; - public bool clearAfterLoaded = false; - private string todayFolder = DateTime.Now.ToString("yyyy-MM-dd"); - private Queue waiting_queue = new Queue(); - private Queue ready_queue = new Queue(); - private Queue texturePool = new Queue(); - - private Thread loadingThread; - private bool isThreadRunning = true; - private FileSystemWatcher watcher; - public Dictionary type_map = new Dictionary(); - [SerializeField] - private bool search_last_file = false; - [SerializeField] - private bool dailyFolder = true; - [SerializeField] - private bool isRelative = false; - void Awake() - { - instance = this; - //rootPath = Application.dataPath + "/"+rootPath; - } - void Start() - { - DateTime date = DateTime.Now; - - if (isRelative) - rootPath = Application.dataPath + "\\" + rootPath; - - if (search_last_file) - { - List historic_files = find_last_files(); - foreach (string file in historic_files) - { - lock (waiting_queue) - { - waiting_queue.Enqueue(new TextureData(file)); - } - } - } - - - - //string[] dir_list = {"2013.02.21","2010.06.20","1985.08.27","3820.01.02" }; - if (!Directory.Exists(rootPath)) - { - Directory.CreateDirectory(rootPath); - } - string watch_path = rootPath; - if (dailyFolder) - { - watch_path = rootPath + "/" + todayFolder; - if (!Directory.Exists(watch_path)) - { - Directory.CreateDirectory(watch_path); - } - } - watcher = new FileSystemWatcher(watch_path); - watcher.Created += onFileChanged; - - watcher.EnableRaisingEvents = true; - - loadingThread = new Thread(new ThreadStart(resizing_to_memory_service)); - loadingThread.Start(); - StartCoroutine(loadTextureFromMemory()); - /* - TextureAddedEvent += (TextureData t) => - { - //Debug.Log("Add " + t); - }; - TextureRemovedEvent += (TextureData t) => - { - //Debug.Log("Remove " + t); - };*/ - } - void OnDestroy() - { - isThreadRunning = false; - while (loadingThread.IsAlive) - { - Thread.Sleep(1); - } - loadingThread.Abort(); - } - IEnumerator loadTextureFromMemory() - { - while (true) - { - if (ready_queue.Count > 0) - { - TextureData newData = null; - lock (ready_queue) - { - newData = ready_queue.Dequeue(); - } - - if(newData.createTextureFromMemory()) - { - yield return null; - texturePool.Enqueue(newData); - TextureAddedEvent.Invoke(newData); - - if (clearAfterLoaded) - { - File.Delete(newData.filePath); - } - - - yield return null; - while (texturePool.Count > maxNum) - { - TextureData removalData = texturePool.Dequeue(); - TextureRemovedEvent.Invoke(removalData); - removalData.destroyTexture(); - } - - texListForDebugging = new Texture2D[texturePool.Count]; - int i = 0; - foreach(TextureData data in texturePool) - { - texListForDebugging[i++] = data.texture; - } - } - } - yield return new WaitForSeconds(photoCheckingPeriod); - } - } - private List find_last_files() - { - List result = new List(); - string[] dir_list = Directory.GetDirectories(rootPath); - Array.Sort(dir_list); - bool ok = false; - for (int i = dir_list.Length - 1; i >= 0; --i) - { - var png_files = Directory.GetFiles(dir_list[i], "*.png"); - var jpg_files = Directory.GetFiles(dir_list[i], "*.jpg"); - var files_list = new List(); - files_list.AddRange(png_files); - files_list.AddRange(jpg_files); - string[] file_list = files_list.ToArray(); - - //string[] file_list = Directory.GetFiles(dir_list[i], "*.png"); - Array.Sort(file_list); - - for (int j = file_list.Length - 1; j >= 0; --j) - { - result.Add(file_list[j]); - if (ok = (result.Count >= maxNum)) - break; - } - if (ok) - break; - } - result.Reverse(); - return result; - } - private void onFileChanged(object sender, FileSystemEventArgs e) - { - TextureData data = new TextureData(e.FullPath); - lock (waiting_queue) - { - waiting_queue.Enqueue(data); - } - Debug.Log("onFileChanged() "+ e.FullPath); - } - - private void resizing_to_memory_service() - { - while (isThreadRunning) - { - if (waiting_queue.Count > 0) - { - TextureData data = null; - lock (waiting_queue) - { - data = waiting_queue.Dequeue(); - } - string str = data.ToString(); - - if (data.loadToMemory(photoSize)) - { - lock (ready_queue) - { - ready_queue.Enqueue(data); - } - str = "[ OK ]" + str; - } - else - { - str = "[FAIL]" + str; - } - Debug.Log(str); - } - else - { - Thread.Sleep((int)(photoCheckingPeriod * 1000)); - } - } - } - -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs.meta deleted file mode 100644 index 3464bb1..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageFileWatcher.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9f4f2d421ffd80c4cb1dbd4eddc88495 -timeCreated: 1478857282 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs deleted file mode 100644 index 6c68576..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Imaging; -using UnityEngine; - -public class ImageUtil -{ - public static Bitmap ResizeImage(Image bitmap, int maxSize) - { - float aspect = (float)bitmap.Width / bitmap.Height; - int w; - int h; - if (aspect > 1.0f) - { - w = maxSize; - h = (int)Mathf.Round(w / aspect); - } - else - { - h = maxSize; - w = (int)Mathf.Round(h * aspect); - } - return ResizeImage(bitmap, w, h); - } - public static Bitmap ResizeImage(Image image, int width, int height) - { - var destImage = new Bitmap(width, height); - destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - using (var graphics = System.Drawing.Graphics.FromImage(destImage)) - { - graphics.CompositingMode = CompositingMode.SourceCopy; - graphics.CompositingQuality = CompositingQuality.HighQuality; - graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; - graphics.SmoothingMode = SmoothingMode.HighQuality; - graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; - using (var wrapMode = new ImageAttributes()) - { - wrapMode.SetWrapMode(System.Drawing.Drawing2D.WrapMode.Clamp); - try - { - var destRect = new Rectangle(0, 0, width, height); - graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); - }catch(Exception err) - { - Debug.Log("err:" + err.StackTrace); - } - } - } - destImage.RotateFlip(RotateFlipType.RotateNoneFlipY); - return destImage; - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs.meta deleted file mode 100644 index 4af314e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/ImageUtil.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 073bd8ab12f26224ba4c2e123962d948 -timeCreated: 1482217138 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs deleted file mode 100644 index 505ba72..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs +++ /dev/null @@ -1,183 +0,0 @@ - -using System; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Runtime.InteropServices; -using UnityEngine; - -public class TextureData -{ - public static int lastId = 0; - public string type { get { return _type; } } - public int id { get { return _id; } } - public Texture2D texture { get { return _tex; } } - public string filePath { get { return _filePath; } } - //private bool _is_decoded = false; - public TextureData(string filePath) - { - _id = lastId; - _filePath = filePath; - //string tmp = "YYYY-MM-DD-hh-mm-ss-fff-"; - //int b = _filePath.LastIndexOf("\\")+tmp.Length; - int e = _filePath.LastIndexOf("."); - int b = _filePath.LastIndexOf("+",e); - if (b != -1 && e != -1 && b < e) - _type = _filePath.Substring(b + 1, e - b - 1); - } - public override bool Equals(object obj) - { - if (obj == null || !(obj is TextureData)) - return false; - else - return this.id == ((TextureData)obj).id; - } - - public override int GetHashCode() - { - return this.id; - } - public override string ToString() - { - return _type+": "+_filePath; - } - - public bool loadToMemory(int maxSize = 0) - { - try - { -#if false - FileStream fs = File.Open(_filePath, FileMode.Open); - System.Drawing.Image img = System.Drawing.Image.FromStream(fs); - fs.Close(); -#else - using (System.Drawing.Image img = System.Drawing.Image.FromFile(_filePath)) -#endif - { - if (maxSize == 0) - maxSize = Math.Max(img.Width, img.Height); - //Bitmap resizedBitmap = new Bitmap(img);// ImageUtil.ResizeImage(img, maxSize); - Bitmap resizedBitmap = ImageUtil.ResizeImage(img, maxSize); - _width = resizedBitmap.Width; - _height = resizedBitmap.Height; - - _rawdata = createRawbytes(resizedBitmap); - //_is_decoded = true; - - } - return true; - } - catch (System.Exception err) - { - Debug.Log(err.StackTrace); - return false; - } - } -#if false - private static ImageCodecInfo GetEncoderInfo(String mimeType) - { - int j; - ImageCodecInfo[] encoders; - encoders = ImageCodecInfo.GetImageEncoders(); - for (j = 0; j < encoders.Length; ++j) - { - if (encoders[j].MimeType == mimeType) - return encoders[j]; - } - return null; - } - - public bool encode() - { - if(_rawdata == null) - { - return false; - } - Bitmap bitmap = new Bitmap(_width,_height, PixelFormat.Format32bppArgb); - BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, _width, _height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); - int length = bitmapData.Stride * bitmapData.Height; - Marshal.Copy(_rawdata,0, bitmapData.Scan0,length); - bitmap.UnlockBits(bitmapData); - - MemoryStream ms = new MemoryStream(); - - ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/png"); - - EncoderParameters myEncoderParameters = new EncoderParameters(1); - - // Save the bitmap as a JPEG file with quality level 25. - EncoderParameter myEncoderParameter = new EncoderParameter(Encoder.Quality, 90); - myEncoderParameters.Param[0] = myEncoderParameter; - - - bitmap.Save(ms, myImageCodecInfo, myEncoderParameters); - - - _compacted_data = ms.ToArray(); - _rawdata = null; - _is_decoded = false; - - return true; - } - public bool decode() - { - if (_compacted_data == null) - { - return false; - } - MemoryStream ms = new MemoryStream(); - ms.Write(_compacted_data, 0, _compacted_data.Length); - Bitmap bitmap = new Bitmap(ms); - - _rawdata = createRawbytes(bitmap); - _compacted_data = null; - _is_decoded = true; - - return true; - } -#endif - private byte[] createRawbytes(Bitmap bitmap) - { - BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, _width, _height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); - int length = bitmapData.Stride * bitmapData.Height; - byte[] result = new byte[length]; - Marshal.Copy(bitmapData.Scan0, result, 0, length); - bitmap.UnlockBits(bitmapData); - - return result; - } - public bool createTextureFromMemory() - { - destroyTexture(); - _tex = new Texture2D(_width, _height, TextureFormat.BGRA32, false); - _tex.LoadRawTextureData(_rawdata); - _tex.Compress(false); - _rawdata = null; - _tex.Apply(); - - return true; - } - public void destroyTexture() - { - //if(_tex!=null) - // UnityEngine.Object.Destroy(_tex); - _tex = null; - } - /* - public bool isDecoded() - { - return _is_decoded; - } - */ - //////////////////////////////////////////////////////////////////////////////// - private int _id=0; - private string _filePath = ""; - private string _type=""; - private byte[] _rawdata; - //private byte[] _compacted_data; - private Texture2D _tex; - private int _width; - private int _height; - - -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs.meta deleted file mode 100644 index 248a19d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ImageFileWatcher/TextureData.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bc27e4cafc85e684ca18278a6d560d51 -timeCreated: 1482216914 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate.meta deleted file mode 100644 index 1988f17..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f07fa386b76b78e41a6a2ddd7e8da42b -folderAsset: yes -timeCreated: 1490862110 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs deleted file mode 100644 index 1846b6a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class GameObjectSpawnter : MonoBehaviour { - - [AutoUI] - public bool is_pwan = true; - [AutoUI] - public int max_amount; - public int now_amount; - [AutoUI] - public float spawnterDelayTime; - public GameObject spawn_obj; - public Transform[] spawn_area; - private float timer = 0; - public bool CanSpawnPooPoo() - { - if (spawn_obj == null) - return false; - if (!is_pwan) - return false; - - if (now_amount >= max_amount) - return false; - - timer -= Time.deltaTime; - - if (timer <= 0) - { - timer = spawnterDelayTime; - return true; - } - - return false; - } - - public Vector3 spawnPosition() - { - Transform spwanTransform = spawn_area[Random.Range(0, spawn_area.Length)]; - Vector3 scale = spwanTransform.lossyScale; - Vector3 spwanPos = spawn_birth_pos(scale); - spwanPos += spwanTransform.position; - now_amount++; - return spwanPos; - } - - private Vector3 spawn_birth_pos(Vector3 v) - { - return new Vector3(Random.Range(-v.x / 2, v.x / 2), Random.Range(-v.y / 2, v.y / 2), Random.Range(-v.z / 2, v.z / 2)); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs.meta deleted file mode 100644 index d49d1bc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Instantiate/GameObjectSpawnter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b6cfecb907de4474e9d43df3b01567bc -timeCreated: 1490862136 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse.meta deleted file mode 100644 index e94c181..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b9e6b978143cd8d47aab62d0942d34c9 -folderAsset: yes -timeCreated: 1489048454 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs deleted file mode 100644 index b3855e6..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs +++ /dev/null @@ -1,69 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; -using System.Collections; -using System.Collections.Generic; -using uc; -using UnityEngine.Events; - -public class AVProQuad : MonoBehaviour -{ - public DShowClip movieFilename; - - public bool movieLoop; - public MoviePlayerPool.QueryStrategy strategy; - public Vector2 Size { get { return size; } } - [SerializeField] - private MoviePlayerBase avpro_movie; - //public AVProQuickTimeMovie AvProMovie { get { return avpro_movie; } } - private MeshRenderer meshRenderer { get { return GetComponent(); } } - private AudioSource audio_source; - private Vector2 size = Vector2.zero; - - void Awake() - { - load(movieFilename, movieLoop); - audio_source = GetComponent(); - if (audio_source != null) - { - audio_source.loop = movieLoop; - } - //meshRenderer.material = new Material(Shader.Find("Sprites/Default")); - } - - IEnumerator Start() - { - while (avpro_movie == null) - yield return null; - - if (avpro_movie != null) - { - avpro_movie.Play(); - } - - if (audio_source != null) - audio_source.Play(); - } - - public void Update() - { - if (avpro_movie != null) - { - meshRenderer.material.SetTexture("_MainTex", avpro_movie.Texture); - if(avpro_movie.Texture != null) - size = new Vector2(avpro_movie.Texture.width, avpro_movie.Texture.height); - } - } - - public void load(DShowClip filename, bool loop) - { - avpro_movie = MoviePlayerPool.Singleton.GetMoviePlayer(filename, loop, strategy); - } - - private void OnDestroy() - { - if(strategy == MoviePlayerPool.QueryStrategy.CreateNew) - { - MoviePlayerPool.Singleton.releaseMovie(avpro_movie); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs.meta deleted file mode 100644 index 009070d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AVProQuad.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a478f0e96f4dca04280827909679274f -timeCreated: 1489477867 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs deleted file mode 100644 index e05e41f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class AutoFlip : MonoBehaviour { - [SerializeField] - bool autoFlipX = false; - - [SerializeField] - bool autoFlipY = false; - - [SerializeField] - Camera referenceCamera; - - Vector2 screenPointOld; - Vector2 direction = Vector2.zero; - Vector2 directionOld = Vector2.zero; - - // Use this for initialization - void Start () { - if (referenceCamera == null) - referenceCamera = FindObjectOfType().GetComponent().worldCamera; - - screenPointOld = referenceCamera.WorldToScreenPoint(transform.position); - } - - int flipCounterX = 0; - int flipCounterY = 0; - - // Update is called once per frame - void Update () { - if (referenceCamera == null) - return; - - Vector2 screenPoint = referenceCamera.WorldToScreenPoint(transform.position); - direction = screenPoint - screenPointOld; - if (direction.x == 0) - direction.x = directionOld.x; - - if (direction.y == 0) - direction.y = directionOld.y; - - Quaternion rotation = transform.rotation; - - { //flip X - if (direction.x * directionOld.x < 0) - { - flipCounterX = 1; - } - - if (direction.x * directionOld.x > 0 && flipCounterX != 0) - { - flipCounterX += 1; - } - - - if (autoFlipX && flipCounterX >= 4) - { - rotation *= Quaternion.Euler(0, 180, 0); - flipCounterX = 0; - } - } - - { //flip Y - if (direction.y * directionOld.y < 0) - { - flipCounterY = 1; - } - - if (direction.y * directionOld.y > 0 && flipCounterY != 0) - { - flipCounterY += 1; - } - - if (autoFlipY && flipCounterY >= 4) - { - rotation *= Quaternion.Euler(180, 0, 0); - flipCounterY = 0; - } - } - - transform.rotation = rotation; - - screenPointOld = screenPoint; - - directionOld = direction; - /* - if (direction.x != 0) - directionOld.x = direction.x; - - if (direction.y != 0) - directionOld.y = direction.y; - */ - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs.meta deleted file mode 100644 index 6732341..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoFlip.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 26187b37b05257b468f1a406000e7e35 -timeCreated: 1489487975 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs deleted file mode 100644 index f57a865..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -[ExecuteInEditMode] -public class AutoScaler : MonoBehaviour { - - [SerializeField] - [TooltipAttribute("Adjust the final scale by 2^scaleFactor.")] - [Range(-2, 2)] - float scaleFactor = 0; - - [Header("Semi Auto Fields")] - [SerializeField] - Camera referenceCamera; - - [SerializeField] - Canvas canvas; - - [SerializeField] - AVProQuad avproQuad; - - [SerializeField] - float pixelsPerUnit = 100; - - void Start () { - if(referenceCamera == null) - referenceCamera = Camera.main; - if (canvas == null) - canvas = FindObjectOfType().GetComponent(); - - avproQuad = GetComponent(); - - SpriteRenderer spriteRenderer = GetComponent(); - if (spriteRenderer != null) - pixelsPerUnit = spriteRenderer.sprite.pixelsPerUnit; - } - - void Update() - { -//#if UNITY_EDITOR - if (canvas == null || referenceCamera == null) - return; - - Vector3 heading = transform.position - referenceCamera.transform.position; - Vector3 d = Vector3.one * Vector3.Dot(heading, referenceCamera.transform.forward) * pixelsPerUnit; - if (avproQuad != null) - { - d.x = d.x * avproQuad.Size.x / pixelsPerUnit; - d.y = d.y * avproQuad.Size.y / pixelsPerUnit; - } - float scale = Mathf.Pow(2, scaleFactor); - transform.localScale = d / canvas.planeDistance * scale; -//#endif - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs.meta deleted file mode 100644 index d20a75b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/AutoScaler.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bbb237ea8f1c97a4ab42c2db2c5b9b0d -timeCreated: 1489395063 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor.meta deleted file mode 100644 index d1a799c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 96904902755e10645886b30a44112fe9 -folderAsset: yes -timeCreated: 1489390627 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs deleted file mode 100644 index d5934e7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using System.IO; -using UnityEditor.ProjectWindowCallback; -using System; - -namespace IronHorse -{ - public class CreateIronHorseDataHolder - { - [MenuItem("Assets/Create/IronHorseDataHolder", priority = 201)] - static void CreateDataAsset() - { - var icon = EditorGUIUtility.FindTexture("ScriptableObject Icon"); - - ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance(), "IronHorseDataHolder.asset", icon, null); - - } - - internal static IronHorseDataHolder CreateIronHorseDataHolderProfileAtPath(string path) - { - var profile = ScriptableObject.CreateInstance(); - profile.name = Path.GetFileName(path); - AssetDatabase.CreateAsset(profile, path); - return profile; - } - } - - - class DoCreateIronHorseProfile : EndNameEditAction - { - public override void Action(int instanceId, string pathName, string resourceFile) - { - IronHorseDataHolder holder = CreateIronHorseDataHolder.CreateIronHorseDataHolderProfileAtPath(pathName); - ProjectWindowUtil.ShowCreatedAsset(holder); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs.meta deleted file mode 100644 index 2fe7fb3..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Editor/CreateIronHorseDataHolder.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 535477b593aa05b47a94d0f66dc6f85e -timeCreated: 1489390661 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs deleted file mode 100644 index 7692d3d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs +++ /dev/null @@ -1,79 +0,0 @@ -using UnityEngine; -using System.Collections; -[ExecuteInEditMode] -public class Follower : MonoBehaviour { - public Transform leader; - - public bool position = true; - public bool rotation = true; - public bool scaling = true; - public bool useInitRotation = true; - - public float pos_duration = 0.2f; - public float rot_duration = 0.2f; - public float scale_duration = 0.2f; - - Quaternion initialRotate = Quaternion.identity; - - Vector3 TargetPosition - { - get - { - if (leader == null) - return Vector3.zero; - if (biasMode == BiasMode.WorldSpace) return leader.position + bias; - else return leader.TransformPoint(bias); - } - } - public Vector3 bias; - public enum BiasMode - { - TargetLocalSpace, - WorldSpace - } - public BiasMode biasMode = BiasMode.WorldSpace; - - // Use this for initialization - void Start () { - //game.hideFlags = HideFlags.DontSave; - if(useInitRotation) - initialRotate = transform.rotation; - } - - // Update is called once per frame - void Update () { - if (leader == null) - return; - - float pos_step = Mathf.Clamp01(Time.deltaTime / pos_duration); - float rot_step = Mathf.Clamp01(Time.deltaTime / rot_duration); - float scale_step = Mathf.Clamp01(Time.deltaTime / scale_duration); - - if (Application.isPlaying == false) - pos_step = rot_step = scale_step = 1.0f; - - if (position) - transform.position = Vector3.Lerp(transform.position, TargetPosition, pos_step); - - if (rotation) - transform.rotation = Quaternion.Slerp(transform.rotation, leader.rotation * initialRotate, rot_step); - - if(scaling) - transform.localScale = Vector3.Lerp(transform.localScale, leader.localScale, scale_step); - } - - private void OnDestroy() - { - transform.rotation = initialRotate; - } - - void OnDrawGizmos() - { - Gizmos.color = Color.red; - Gizmos.DrawLine(transform.position, transform.position + transform.right); - Gizmos.color = Color.green; - Gizmos.DrawLine(transform.position, transform.position + transform.up); - Gizmos.color = Color.blue; - Gizmos.DrawLine(transform.position, transform.position + transform.forward); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs.meta deleted file mode 100644 index 6f0808e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/Follower.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: be2e1a8110137fa4489427ca12e25794 -timeCreated: 1480649878 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs deleted file mode 100644 index 96824b4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using uc.Spline; -using UnityEngine; - -public class IronHorse : MonoBehaviour { - - [SerializeField] - private IronHorseDataHolder ironHorseHolder; - - public BezierSplineComponent m_bezierSpline; - [SerializeField] - public float targetSpeed; - public Ease.Easing m_ease; - public bool playOnStart = true; - - public float speedSmooth { set { speed_smooth = value; } } - private float speed_smooth = 0.1f; - float m_speed = 1; - float m_position = 0; - BaseSpline.SplineIterator m_iter; - - public float initialPosition = 0; - - public float Progress - { - get { if(m_bezierSpline != null) return m_position / m_bezierSpline.Spline.Length; return 0; } - } - - // Use this for initialization - IEnumerator Start () - { - while (m_bezierSpline == null) - yield return null; - - m_iter = m_bezierSpline.Spline.GetIterator(); - m_iter.SetTransform(m_bezierSpline.transform); - - if (ironHorseHolder) - { - targetSpeed = ironHorseHolder.TargetSpeed; - speed_smooth = ironHorseHolder.SpeedSmooth; - m_ease = ironHorseHolder.ease; - } - if(initialPosition != 0) - m_position = initialPosition; - - - if (playOnStart) - Play(); - } - - // Update is called once per frame - void Update() - { - if (m_bezierSpline == null || m_iter == null) - return; - - m_speed = Mathf.Lerp(m_speed, targetSpeed, speed_smooth); - - if(isPlaying) - m_position += m_speed * Time.deltaTime; - - float position = Ease.EaseByType(m_ease, 0, m_bezierSpline.Spline.Length, m_position / m_bezierSpline.Spline.Length); - m_iter.SetOffset(position); - - transform.position = m_iter.GetPosition(); - - Vector3 tangent = m_iter.GetTangent(); - if(tangent != Vector3.zero) - transform.localRotation = Quaternion.LookRotation(tangent); - } - - bool isPlaying = false; - public void Play() - { - isPlaying = true; - } - - public void Pause() - { - isPlaying = false; - } - - public void Stop() - { - Pause(); - m_position = initialPosition; - } - - void OnDrawGizmos() - { - if (m_iter == null) - return; - Gizmos.matrix = transform.localToWorldMatrix; - Gizmos.color = Color.black; - float fov = 30; - float near = 0; - float far = 10; - float aspect = 2; - Gizmos.DrawFrustum(Vector3.zero, fov, far, near, aspect); - Gizmos.DrawLine(Vector3.zero, Vector3.forward * far); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs.meta deleted file mode 100644 index 68e9460..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorse.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bf7012e40088f6b4faed980b209c2b99 -timeCreated: 1482311402 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs deleted file mode 100644 index 502129b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class IronHorseDataHolder : ScriptableObject { - - public float TargetSpeed = 10; - [Range(0,1)] - public float SpeedSmooth = 0.1f; - public Ease.Easing ease = Ease.Easing.Linear; -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs.meta deleted file mode 100644 index 4bfec3e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/IronHorseDataHolder.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d43dff73f8e444546bfd0e5d4c8ef27e -timeCreated: 1489390351 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs deleted file mode 100644 index c97cd83..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs +++ /dev/null @@ -1,97 +0,0 @@ -using UnityEngine; -using System.Collections; -using UnityEngine.EventSystems; -using System; - -public class TouchMovie : MonoBehaviour, IPointerDownHandler { - - //public Texture texture; - - DShowMoviePlayer movie; - - [SerializeField] - private int MaxFrameCount = 0; - - private bool isTouch = false; - - [SerializeField] - private float MoviePlayInterval = 30; - - private float playtime; - - [SerializeField] - AudioSource audioSource; - - void Awake() - { - //audioSource = GetComponent(); - movie = GetComponent(); - } - - // Use this for initialization - void Start () { - playtime = MoviePlayInterval; - } - - // Update is called once per frame - void Update () { - - if (playtime > 0) - playtime -= Time.deltaTime; - - if(playtime<=0) - { - playtime = MoviePlayInterval; - movie.Play(); - isTouch = true; - } - - if(!isTouch) - { - if(MaxFrameCount!=0) - { - if (movie.Frame >= MaxFrameCount) - movie.Frame = 0; - } - if (audioSource != null) - { - if (audioSource.isPlaying) - audioSource.Stop(); - } - } - else - { - if (MaxFrameCount != 0) - { - if (movie.Frame >= MaxFrameCount) - { - if (audioSource != null) - { - if (!audioSource.isPlaying) - audioSource.Play(); - } - } - } - } - if(movie.IsFinished) - { - isTouch = false; - if(!movie.Loop) - { - movie.Pause(); - movie.Frame = 0; - isTouch = false; - } - } - } - - public void OnPointerDown(PointerEventData eventData) - { - if (!movie) - return; - - movie.Play(); - isTouch = true; - playtime = MoviePlayInterval; - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs.meta deleted file mode 100644 index 4e585dd..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/IronHorse/TouchMovie.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5dc058dc969334c4baed7708e33a627f -timeCreated: 1480925151 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord.meta deleted file mode 100644 index 43818a2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a4fe425bbe10c6243ac6b60f17e02ecb -folderAsset: yes -timeCreated: 1494575165 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs deleted file mode 100644 index c0c0f27..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using WriteReadXML; -using System; -using System.IO; -using UnityEngine.UI; -public class MousePositionRecorder : MonoBehaviour { - - private float startTime; - private string path; - [SerializeField] - private bool record; - - MouseRecordData recordData; - - private bool saving =false; - - [SerializeField] - GameObject InputFileName; - - // Use this for initialization - void Start () { - record = false; - recordData = new MouseRecordData(); - path = Application.dataPath + "/../TUIOData"; - } - - // Update is called once per frame - void Update () { - - if (saving) - return; - - if(Input.GetKeyDown(KeyCode.LeftControl)) - if (!record) - { - StartReocrd(); - } - if(Input.GetKeyUp(KeyCode.LeftControl)) - if (record) - StopRecord(); - - if (Input.GetKey(KeyCode.LeftControl)) - { - if(Input.GetMouseButtonDown(0)) - { - recordData.AddData(Time.time - startTime, Input.mousePosition, (int)TouchPhase.Began); - } - if (Input.GetMouseButton(0)) - { - if (record && Time.frameCount % 2 == 0) - { - recordData.AddData(Time.time - startTime, Input.mousePosition,(int)TouchPhase.Moved); - } - } - if (Input.GetMouseButtonUp(0)) - { - recordData.AddData(Time.time - startTime, Input.mousePosition, (int)TouchPhase.Ended); - } - } - } - - void StartReocrd() - { - print("start record"); - record = true; - startTime = Time.time; - recordData = new MouseRecordData(); - } - - void StopRecord() - { - print("stop record"); - record = false; - if (!Directory.Exists(path)) - { - Directory.CreateDirectory(path); - } - saving = true; - - InputFileName.GetComponentInChildren().textComponent.text = ""; - InputFileName.GetComponentInChildren().text = ""; - InputFileName.SetActive(saving); - } - - public void SaveData(string filename) - { - if(filename != "") - WriteRead_XML.write(path + "/" + filename + ".xml", recordData); - else - WriteRead_XML.write(path + "/" + DateTime.Now.ToString("yyyy-MMdd-HHmmss") + ".xml", recordData); - - saving = false; - - InputFileName.SetActive(saving); - } - -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs.meta deleted file mode 100644 index 910bbf9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MousePositionRecorder.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d5e1a69af0ded744aaf596f8621031d6 -timeCreated: 1494320228 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs deleted file mode 100644 index e3178ea..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -[System.Serializable] -public class MouseRecordData -{ - public List TimeList; - public List PosList; - public List StateList; - public float startTime; - public int currentCount; - public MouseRecordData(MouseRecordData rec) - { - TimeList = rec.TimeList; - PosList = rec.PosList; - StateList = rec.StateList; - } - - public MouseRecordData() - { - TimeList = new List(); - PosList = new List(); - StateList = new List(); - } - - public void StartUse() - { - startTime = Time.time; - currentCount = 1; - } - - public float CurrentTimeInterval { get { return TimeList[currentCount]; } } - - public Vector2 CurrentPosition { get { return PosList[currentCount]; } } - - public int CurrentState { get { return StateList[currentCount]; } } - - public void AddData(float time, Vector2 pos, int state) - { - TimeList.Add(time); - PosList.Add(new Vector2(pos.x / Screen.width, (Screen.height - pos.y) / Screen.height)); - StateList.Add(state); - } - - public void RemoveData(int i) - { - TimeList.RemoveAt(i); - PosList.RemoveAt(i); - StateList.RemoveAt(i); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs.meta deleted file mode 100644 index 207c804..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseRecordData.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ac2ef04fdb663c3498cd8398762620a3 -timeCreated: 1494485395 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab deleted file mode 100644 index a362c77..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab +++ /dev/null @@ -1,589 +0,0 @@ -%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_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 1145427747889000} - m_IsPrefabParent: 1 ---- !u!1 &1132569974689588 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224329225580626450} - - component: {fileID: 222044279332232740} - - component: {fileID: 114671723098843166} - m_Layer: 5 - m_Name: Panel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1145427747889000 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 4095985734808838} - - component: {fileID: 114419937142645754} - m_Layer: 0 - m_Name: MouseReocrd - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1174652010523566 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224756943387103046} - - component: {fileID: 222508958074881168} - - component: {fileID: 114796366647978798} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1181017128168798 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224791935485473310} - - component: {fileID: 222117994685849106} - - component: {fileID: 114955142630196180} - m_Layer: 5 - m_Name: Placeholder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1304123199519650 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224805162131864716} - - component: {fileID: 223593338526273072} - - component: {fileID: 114692739916111498} - - component: {fileID: 114841667499538072} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!1 &1368405636461710 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224195381467158958} - - component: {fileID: 222777760630519368} - - component: {fileID: 114845087309707250} - - component: {fileID: 114792416378346880} - m_Layer: 5 - m_Name: InputField - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1919748941890862 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224164156020394476} - - component: {fileID: 222205226031592332} - - component: {fileID: 114707445449251628} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4095985734808838 -Transform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1145427747889000} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -4.2876215, y: -6.8355255, z: -11.477396} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224805162131864716} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114419937142645754 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1145427747889000} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d5e1a69af0ded744aaf596f8621031d6, type: 3} - m_Name: - m_EditorClassIdentifier: - record: 0 - InputFileName: {fileID: 1304123199519650} ---- !u!114 &114671723098843166 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1132569974689588} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114692739916111498 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1304123199519650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!114 &114707445449251628 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1919748941890862} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 20 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 1 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'FileName: - -' ---- !u!114 &114792416378346880 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1368405636461710} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114845087309707250} - m_TextComponent: {fileID: 114796366647978798} - m_Placeholder: {fileID: 114955142630196180} - m_ContentType: 0 - m_InputType: 0 - m_AsteriskChar: 42 - m_KeyboardType: 0 - m_LineType: 0 - m_HideMobileInput: 0 - m_CharacterValidation: 0 - m_CharacterLimit: 0 - m_OnEndEdit: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 114419937142645754} - m_MethodName: SaveData - m_Mode: 0 - 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.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_CustomCaretColor: 0 - m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} - m_Text: - m_CaretBlinkRate: 0.85 - m_CaretWidth: 1 - m_ReadOnly: 0 ---- !u!114 &114796366647978798 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1174652010523566} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 0 - m_HorizontalOverflow: 1 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &114841667499538072 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1304123199519650} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &114845087309707250 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1368405636461710} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114955142630196180 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1181017128168798} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 2 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Enter fileName... ---- !u!222 &222044279332232740 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1132569974689588} ---- !u!222 &222117994685849106 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1181017128168798} ---- !u!222 &222205226031592332 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1919748941890862} ---- !u!222 &222508958074881168 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1174652010523566} ---- !u!222 &222777760630519368 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1368405636461710} ---- !u!223 &223593338526273072 -Canvas: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1304123199519650} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_AdditionalShaderChannelsFlag: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &224164156020394476 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1919748941890862} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224329225580626450} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -50.7, y: -3.48} - m_SizeDelta: {x: 160, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224195381467158958 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1368405636461710} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224791935485473310} - - {fileID: 224756943387103046} - m_Father: {fileID: 224329225580626450} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 51.2, y: 0} - m_SizeDelta: {x: 160, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224329225580626450 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1132569974689588} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224164156020394476} - - {fileID: 224195381467158958} - m_Father: {fileID: 224805162131864716} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 280, y: 40} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224756943387103046 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1174652010523566} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224195381467158958} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: 140, y: 17} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224791935485473310 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1181017128168798} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224195381467158958} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: 140, y: 17} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224805162131864716 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1304123199519650} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 224329225580626450} - m_Father: {fileID: 4095985734808838} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab.meta deleted file mode 100644 index 911e0c6..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/MouseReocrd.prefab.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 6f562c9dc0946e047b8542df5356ed2d -timeCreated: 1494574771 -licenseType: Pro -NativeFormatImporter: - mainObjectFileID: 100100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs deleted file mode 100644 index 0c61d79..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Xml.Serialization; -using System.IO; -using UnityEngine; -namespace WriteReadXML -{ - public class WriteRead_XML - { - public static void write(string file_name, T t) - { - StreamWriter file = new StreamWriter(file_name); - XmlSerializer _serializer = new XmlSerializer(typeof(T)); - _serializer.Serialize(file, t); - file.Close(); - } - public static T read(string file_name) - { - T result = default(T); - try - { - StreamReader file = new StreamReader(file_name); - XmlSerializer _serializer = new XmlSerializer(typeof(T)); - result = (T)_serializer.Deserialize(file); - file.Close(); - } - catch (Exception err) - { - Debug.LogWarning(err.StackTrace); - } - return result; - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs.meta deleted file mode 100644 index 07d8200..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/MouseRecord/WriteLoadXML.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3574e9465d2d90a47809d576c191c672 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD b/Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD deleted file mode 100644 index 19961d5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD +++ /dev/null @@ -1,16 +0,0 @@ -# How To Use ucDeploy -1. If Unity is just installed, you should input the serial number or choose Unity personal. You only have to do it once. -1. Copy all the files in Assets/Editor to the location of your project. -1. If you only want to output single scene(level), copy the "[template] build_single_scene.bat" to the location of your project, otherwise "[template] build_multi_scene.bat" -1. Modify the batch file. - * Setup the variable - "unity_x86_path" or "unity_x64_path" : If you install the unity to the different location like D:\, you have to modify it. - * Setup the variable - "build_path" : the location where you want to output. - * Setup the variable - "exe_filename" : execution file name. - * Setup the variable - "scene_path" : what the scene(level) you want to output. - * [Option] "show_the_log_folder_when_error_occur" : if you setup it on, when the build failed, the log folder will be open. - * [Option] "show_the_exe_folder_when_sccuess" : if you setup it on, when the build sccuess, the location of the execution will be open. - -# [Note] -1. the default location of the Unity - C:\Program Files (x86)\Unity or C:\Program Files\Unity -2. the default location of the output - C:\UC\ -3. the default build targer is x64. diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD.meta deleted file mode 100644 index f7c8781..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/ReadMe.MD.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5558220b5fe1065488e6834536eebdc0 -timeCreated: 1490336625 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder.meta deleted file mode 100644 index c7731e6..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c8ca047ad071b2e48bcee2eef0513b35 -folderAsset: yes -timeCreated: 1492414468 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs deleted file mode 100644 index 11c22c4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using NAudio.Wave; -using NAudio.Lame; -using System.Threading; -using System.Net; -using System.Security.Cryptography.X509Certificates; -using System.Net.Security; - -[RequireComponent(typeof(AudioListener))] -public class AudioListenerRecorder : MonoBehaviour { - - [SerializeField] - public SaveAudio.Savetype saveAudioType; - private int samplerate; - public int outputRate { get { return samplerate; } } - [SerializeField] - private string fileName = "recTest.wav"; - private int headerSize = 44; - private bool recOutput; - private FileStream fileStream; - - void Awake() - { - samplerate = AudioSettings.GetConfiguration().sampleRate; - - string filePath; -#if UNITY_64 - filePath = Application.dataPath + "/../libmp3lame.64.dll"; -#else - filePath = Application.dataPath + "/../libmp3lame.32.dll"; -#endif - if (!File.Exists(filePath)) - { - Thread WriteThread = new Thread(() => DownloadPlugins(filePath)); - WriteThread.Start(); - } - } - - void DownloadPlugins(string filePath) - { - ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback; -#if UNITY_64 - string remoteUri = "https://nas.ultracombos.com/share.cgi?ssid=0UBoGfN&fid=0UBoGfN&path=%2F&filename=libmp3lame.64.dll&openfolder=forcedownload&ep="; -#else - string remoteUri = "https://nas.ultracombos.com/share.cgi?ssid=0UBoGfN&fid=0UBoGfN&path=%2F&filename=libmp3lame.32.dll&openfolder=forcedownload&ep="; -#endif - var ur = new Uri(remoteUri); - - HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(ur); - HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); - - System.IO.Stream dataStream = httpResponse.GetResponseStream(); - byte[] buffer = new byte[8192]; - - FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); - int size = 0; - do - { - size = dataStream.Read(buffer, 0, buffer.Length); - if (size > 0) - fs.Write(buffer, 0, size); - } while (size > 0); - fs.Close(); - - httpResponse.Close(); - Debug.Log(remoteUri + ";Download Complete"); - } - public bool MyRemoteCertificateValidationCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { - bool isOk = true; - // If there are errors in the certificate chain, look at each error to determine the cause. - if (sslPolicyErrors != SslPolicyErrors.None) - { - for (int i = 0; i < chain.ChainStatus.Length; i++) - { - if (chain.ChainStatus[i].Status != X509ChainStatusFlags.RevocationStatusUnknown) - { - chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; - chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; - chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0); - chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; - bool chainIsValid = chain.Build((X509Certificate2)certificate); - if (!chainIsValid) - { - isOk = false; - } - } - } - } - return isOk; - } - - public void StartRecord(string filename) - { - fileName = filename; - StartWriting(fileName); - recOutput = true; - } - - public void StopRecord() - { - recOutput = false; - SaveAudio.WriteHeader(fileStream, saveAudioType); - fileStream = null; - } - - void StartWriting(string name) - { - fileStream = new FileStream(name + "."+ saveAudioType.ToString(), FileMode.Create); - byte emptyByte = new byte(); - for (int i = 0; i < headerSize; i++) //preparing the header - { - fileStream.WriteByte(emptyByte); - } - } - - void OnAudioFilterRead(float[] data, int channels) - { - if (recOutput) - { - SaveAudio.ConvertAndWrite(fileStream , data, saveAudioType); - } - } - - void OnDisable() - { - if (fileStream == null) - return; - fileStream.Dispose(); - fileStream.Close(); - } - - void OnDestroy() - { - if (fileStream == null) - return; - fileStream.Dispose(); - fileStream.Close(); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs.meta deleted file mode 100644 index 72a610e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/AudioListenerRecorder.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8d77be33a4130d1448032df96f00447f -timeCreated: 1491969221 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor.meta deleted file mode 100644 index 0fec500..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 41ede3595a014e7458fe66043d5a1f28 -folderAsset: yes -timeCreated: 1492414468 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs deleted file mode 100644 index 072fec2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using System.IO; -using System.Threading; -using System.Net; -using System; -using System.Net.Security; -using System.Security.Cryptography.X509Certificates; - -[ExecuteInEditMode] -[CustomEditor(typeof(MovieRecorder))] -public class MovieRecorderEditor : Editor { - - public bool MyRemoteCertificateValidationCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { - bool isOk = true; - // If there are errors in the certificate chain, look at each error to determine the cause. - if (sslPolicyErrors != SslPolicyErrors.None) - { - for (int i = 0; i < chain.ChainStatus.Length; i++) - { - if (chain.ChainStatus[i].Status != X509ChainStatusFlags.RevocationStatusUnknown) - { - chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; - chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; - chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0); - chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; - bool chainIsValid = chain.Build((X509Certificate2)certificate); - if (!chainIsValid) - { - isOk = false; - } - } - } - } - return isOk; - } - - void OnEnable() - { - if (!Directory.Exists(Application.streamingAssetsPath)) - Directory.CreateDirectory(Application.streamingAssetsPath); - if (!Directory.Exists(Application.streamingAssetsPath + "/FFmpegOut")) - Directory.CreateDirectory(Application.streamingAssetsPath + "/FFmpegOut"); - var filePath = Application.streamingAssetsPath + "/FFmpegOut/ffmpeg.exe"; - if (!File.Exists(filePath)) - { - Thread WriteThread = new Thread(() => Downloadffmpeg(filePath)); - WriteThread.Start(); - } - } - - void Downloadffmpeg(string path) - { - ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback; - string remoteUri = "https://nas.ultracombos.com/share.cgi?ssid=0UBoGfN&fid=0UBoGfN&path=%2F&filename=ffmpeg.exe&openfolder=forcedownload&ep="; - - var ur = new Uri(remoteUri); - - HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(ur); - HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); - - System.IO.Stream dataStream = httpResponse.GetResponseStream(); - byte[] buffer = new byte[8192]; - - FileStream fs = new FileStream(path,FileMode.Create, FileAccess.Write); - int size = 0; - do - { - size = dataStream.Read(buffer, 0, buffer.Length); - if (size > 0) - fs.Write(buffer, 0, size); - } while (size > 0); - fs.Close(); - - httpResponse.Close(); - Debug.Log(remoteUri + ";Download Complete"); - - } - - public override void OnInspectorGUI() - { - //GUILayout.Label("the most important is FPS ,take care if u do not want the mistake what happen to the audio and capture is not have synchronization!!"); - GUILayout.Label("注意一下FPS ,過低可能發生影片聲音沒同步問題 "); - EditorGUILayout.Separator(); - DrawDefaultInspector(); - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs.meta deleted file mode 100644 index 45f23eb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Editor/MovieRecorderEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 05b87e9c84ca52644b02291fa1eac698 -timeCreated: 1492411778 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder.meta deleted file mode 100644 index 01e1cd2..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 00bce3088486eb44685c4d9a514646ba -folderAsset: yes -timeCreated: 1491980326 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs deleted file mode 100644 index c2ca33a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace NAudio.Lame -{ - ///

ID3 tag content - public class ID3TagData - { - // Standard values: - /// Track title (TIT2) - public string Title; - /// Artist (TPE1) - public string Artist; - /// Album (TALB) - public string Album; - /// Year (TYER) - public string Year; - /// Comment (COMM) - public string Comment; - /// Genre (TCON) - public string Genre; - /// Track number (TRCK) - public string Track; - - // Experimental: - /// Subtitle (TIT3) - public string Subtitle; - /// AlbumArtist (TPE2) - public string AlbumArtist; - - /// Album art - PNG, JPG or GIF file content - public byte[] AlbumArt; - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs.meta deleted file mode 100644 index f0e4b35..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/ID3TagData.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e69a5c193017ee14aa5da0e724a8ea43 -timeCreated: 1492512880 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs deleted file mode 100644 index be0fdb5..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using LameDLLWrap; - -namespace NAudio.Lame -{ - /// LAME DLL version information - public class LAMEVersion - { - /* generic LAME version */ - /// LAME library major version - public int Major { get; private set; } - /// LAME library minor version - public int Minor { get; private set; } - /// LAME library 'Alpha' version flag - public bool Alpha { get; private set; } - /// LAME library 'Beta' version flag - public bool Beta { get; private set; } - - /// Psychoacoustic code major version - public int PsychoAcoustic_Major { get; private set; } - /// Psychoacoustic code minor version - public int PsychoAcoustic_Minor { get; private set; } - /// Psychoacoustic code 'Alpha' version flag - public bool PsychoAcoustic_Alpha { get; private set; } - /// Psychoacoustic code 'Beta' version flag - public bool PsychoAcoustic_Beta { get; private set; } - - /// Compile-time features string - public string Features { get; private set; } - - /// Constructor, library-local, converts - /// - internal LAMEVersion(LameDLLWrap.LAMEVersion source) - { - Major = source.major; - Minor = source.minor; - Alpha = source.alpha; - Beta = source.beta; - - PsychoAcoustic_Major = source.psy_major; - PsychoAcoustic_Minor = source.psy_minor; - PsychoAcoustic_Alpha = source.psy_alpha; - PsychoAcoustic_Beta = source.psy_beta; - - Features = source.features; - } - - // Prevent default construction - private LAMEVersion() { } - } - - /// - /// Static class providing access to context-free LAME entry points - /// - /// - /* - public static class LameDLL - { - static LameDLL() - { - Loader.Init(); - } - - #region DLL version data - /// Lame Version - public static string LameVersion { get { return LibMp3Lame.LameVersion; } } - /// Lame Short Version - public static string LameShortVersion { get { return LibMp3Lame.LameShortVersion; } } - /// Lame Very Short Version - public static string LameVeryShortVersion { get { return LibMp3Lame.LameVeryShortVersion; } } - /// Lame Psychoacoustic Version - public static string LamePsychoacousticVersion { get { return LibMp3Lame.LamePsychoacousticVersion; } } - /// Lame URL - public static string LameURL { get { return LibMp3Lame.LameURL; } } - /// Lame library bit width - 32 or 64 bit - public static string LameOSBitness { get { return LibMp3Lame.LameOSBitness; } } - - /// Get LAME version information - /// LAME version structure - public static NAudio.Lame.LAMEVersion GetLameVersion() - { - return new NAudio.Lame.LAMEVersion(LibMp3Lame.GetLameVersion()); - } - #endregion - } - */ -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs.meta deleted file mode 100644 index b80ae48..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LameDLL.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a775e1475659fa648ab534c09e089c0a -timeCreated: 1492512880 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs deleted file mode 100644 index 47cb58f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs +++ /dev/null @@ -1,2163 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2013 Corey Murtagh -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -#region Attributions -// -// Contents of the LibMp3Lame.NativeMethods class and associated enumerations -// are directly based on the lame.h v1.190, available at: -// http://lame.cvs.sourceforge.net/viewvc/lame/lame/include/lame.h?revision=1.190&content-type=text%2Fplain -// -// Source lines and comments included where useful/possible. -// -#endregion - -using UnityEngine; - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Runtime.InteropServices; - - -/* - * Native dll invocation helper by Francis R. Griffiths-Keam - * www.runningdimensions.com/blog - */ - -public static class Native -{ - public static T Invoke(IntPtr library, params object[] pars) - { - IntPtr funcPtr = GetProcAddress(library, typeof(T2).Name); - if (funcPtr == IntPtr.Zero) - { - Debug.LogWarning("Could not gain reference to method address."); - return default(T); - } - - var func = Marshal.GetDelegateForFunctionPointer(GetProcAddress(library, typeof(T2).Name), typeof(T2)); - return (T)func.DynamicInvoke(pars); - } - - public static void Invoke(IntPtr library, params object[] pars) - { - IntPtr funcPtr = GetProcAddress(library, typeof(T).Name); - if (funcPtr == IntPtr.Zero) - { - Debug.LogWarning("Could not gain reference to method address."); - return; - } - - var func = Marshal.GetDelegateForFunctionPointer(funcPtr, typeof(T)); - func.DynamicInvoke(pars); - } - - [DllImport("kernel32", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool FreeLibrary(IntPtr hModule); - - [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)] - public static extern IntPtr LoadLibrary(string lpFileName); - - [DllImport("kernel32")] - public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); -} - - -namespace LameDLLWrap -{ -// using NAudio.Lame; - - /// LAME encoding presets - internal enum LAMEPreset : int - { - //values from 8 to 320 should be reserved for abr bitrates - //for abr I'd suggest to directly use the targeted bitrate as a value - - /// 8-kbit ABR - ABR_8 = 8, - /// 16-kbit ABR - ABR_16 = 16, - /// 32-kbit ABR - ABR_32 = 32, - /// 48-kbit ABR - ABR_48 = 48, - /// 64-kbit ABR - ABR_64 = 64, - /// 96-kbit ABR - ABR_96 = 96, - /// 128-kbit ABR - ABR_128 = 128, - /// 160-kbit ABR - ABR_160 = 160, - /// 256-kbit ABR - ABR_256 = 256, - /// 320-kbit ABR - ABR_320 = 320, - - //Vx to match Lame and VBR_xx to match FhG - /// VBR Quality 9 - V9 = 410, - /// FhG: VBR Q10 - VBR_10 = 410, - /// VBR Quality 8 - V8 = 420, - /// FhG: VBR Q20 - VBR_20 = 420, - /// VBR Quality 7 - V7 = 430, - /// FhG: VBR Q30 - VBR_30 = 430, - /// VBR Quality 6 - V6 = 440, - /// FhG: VBR Q40 - VBR_40 = 440, - /// VBR Quality 5 - V5 = 450, - /// FhG: VBR Q50 - VBR_50 = 450, - /// VBR Quality 4 - V4 = 460, - /// FhG: VBR Q60 - VBR_60 = 460, - /// VBR Quality 3 - V3 = 470, - /// FhG: VBR Q70 - VBR_70 = 470, - /// VBR Quality 2 - V2 = 480, - /// FhG: VBR Q80 - VBR_80 = 480, - /// VBR Quality 1 - V1 = 490, - /// FhG: VBR Q90 - VBR_90 = 490, - /// VBR Quality 0 - V0 = 500, - /// FhG: VBR Q100 - VBR_100 = 500, - - // still there for compatibility - /// R3Mix quality - - R3MIX = 1000, - /// Standard Quality - STANDARD = 1001, - /// Extreme Quality - EXTREME = 1002, - /// Insane Quality - INSANE = 1003, - /// Fast Standard Quality - STANDARD_FAST = 1004, - /// Fast Extreme Quality - EXTREME_FAST = 1005, - /// Medium Quality - MEDIUM = 1006, - /// Fast Medium Quality - MEDIUM_FAST = 1007 - } - - /// Delegate for receiving output messages - /// Text to output - public delegate void ReportFunction(string text); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl, SetLastError = true, CharSet = CharSet.Ansi)] - internal delegate void delReportFunction(string fmt, IntPtr args); - - public delegate void GenreCallback(int index, string genre); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl, SetLastError = true, CharSet = CharSet.Ansi)] - internal delegate void delGenreCallback( - int index, - string genre, - IntPtr cookie - ); - - /// MPEG channel mode - public enum MPEGMode : uint - { - /// Stereo - Stereo = 0, - /// Joint Stereo - // JointStereo = 1, - DualChannel = 2, // LAME does not support this - /// Mono - Mono = 3, - /// Undefined - NotSet = 4 - } - - - /// Assembler optimizations - public enum ASMOptimizations : uint - { - /// Use MMX instructions - MMX = 1, - /// Use AMD 3DNow instructions - AMD_3DNow = 2, - /// Use SSE instructions - SSE = 3 - } - - /// Variable BitRate Mode - public enum VBRMode : uint - { - /// No VBR (Constant Bitrate) - Off = 0, - /// MT Algorithm (Mark Taylor). Now same as MTRH - MT, - /// RH Algorithm (Roger Hegemann) - RH, - /// ABR - Average Bitrate - ABR, - /// MTRH Algorithm (Mark Taylor & Roger Hegemann)( - MTRH, - /// Default algorithm: MTRH - Default = MTRH - } - - /// MPEG wrapper version - public enum MPEGVersion : int - { - /// MPEG 2 - MPEG2 = 0, - /// MPEG 1 - MPEG1 = 1, - /// MPEG 2.5 - MPEG2_5 = 2 - } - - /// LAME DLL version information - [StructLayout(LayoutKind.Sequential)] - public class LAMEVersion - { - /* generic LAME version */ - /// LAME library major version - public int major; - /// LAME library minor version - public int minor; - /// LAME library 'Alpha' version flag - [MarshalAs(UnmanagedType.Bool)] - public bool alpha; - /// LAME library 'Beta' version flag - [MarshalAs(UnmanagedType.Bool)] - public bool beta; - - /// Psychoacoustic code major version - public int psy_major; - /// Psychoacoustic code minor version - public int psy_minor; - /// Psychoacoustic code 'Alpha' version flag - [MarshalAs(UnmanagedType.Bool)] - public bool psy_alpha; - /// Psychoacoustic code 'Beta' version flag - [MarshalAs(UnmanagedType.Bool)] - public bool psy_beta; - - /* compile time features */ - // const char *features; /* Don't make assumptions about the contents! */ - private IntPtr features_ptr = IntPtr.Zero; - - /// Compile-time features string - public string features - { - get - { - if (features_ptr != IntPtr.Zero) - return Marshal.PtrToStringAuto(features_ptr); - return null; - } - } - } - - - [StructLayout(LayoutKind.Sequential)] - public struct mp3data - { - /// 1 if header was parsed and following data was computed - [MarshalAs(UnmanagedType.Bool)] - public bool header_parsed; - /// number of channels - public int stereo; - /// sample rate - public int samplerate; - /// bitrate - public int bitrate; - /// mp3 frame type - public int mode; - /// mp3 frame type - public int mode_ext; - /// number of samples per MP3 frame - public int framesize; - - // This data is only computed if mpglib detects a Xing VBR header - - /// number of samples in MP3 file - public ulong nsamp; - /// total number of frames in MP3 file - public int totalframes; - - // This data is not currently computed by mpglib - - /// frames decoded counter - public int framenum; - } - - - - - /// LAME interface class - public class LibMp3Lame : IDisposable - { - /// Constructor - public LibMp3Lame() - { - context = NativeMethods.lame_init(); - InitReportFunctions(); - } - - /// Destructor - ~LibMp3Lame() - { - Dispose(true); - } - - /// Dispose of object - public void Dispose() - { - Dispose(false); - } - - /// Clean up object, closing LAME context if present - /// True if called from destructor, else false - protected virtual void Dispose(bool final) - { - if (context != IntPtr.Zero) - { - NativeMethods.lame_close(context); - context = IntPtr.Zero; - } - } - - #region LAME context handle - private IntPtr context = IntPtr.Zero; - #endregion - - #region DLL version data - /// Lame Version - public static string LameVersion { get { return NativeMethods.get_lame_version(); } } - /// Lame Short Version - public static string LameShortVersion { get { return NativeMethods.get_lame_short_version(); } } - /// Lame Very Short Version - public static string LameVeryShortVersion { get { return NativeMethods.get_lame_very_short_version(); } } - /// Lame Psychoacoustic Version - public static string LamePsychoacousticVersion { get { return NativeMethods.get_psy_version(); } } - /// Lame URL - public static string LameURL { get { return NativeMethods.get_lame_url(); } } - /// Lame library bit width - 32 or 64 bit - public static string LameOSBitness { get { return NativeMethods.get_lame_os_bitness(); } } - - /// Get LAME version information - /// LAME version structure - public static LAMEVersion GetLameVersion() - { - LAMEVersion ver = new LAMEVersion(); - NativeMethods.get_lame_version_numerical(ver); - return ver; - } - #endregion - - #region Properties - delegate int setFunc(IntPtr p, T val); - - // wrapper function to simplify calling lame_set_* entry points - void setter(setFunc f, T value, string name = null) - { - int res = f(context, value); - if (res != 0) - { - if (string.IsNullOrEmpty(name)) - name = f.Method.Name; - throw new Exception(string.Format("libmp3lame: {0}({1}) returned error code: {2}", name, value, res)); - } - } - - #region Input Stream Description - /// Number of samples (optional) - public UInt64 NumSamples - { - get { return NativeMethods.lame_get_num_samples(context); } - set { setter(NativeMethods.lame_set_num_samples, value); } - } - /// Input sample rate - public int InputSampleRate - { - get { return NativeMethods.lame_get_in_samplerate(context); } - set { setter(NativeMethods.lame_set_in_samplerate, value); } - } - /// Number of channels - public int NumChannels - { - get { return NativeMethods.lame_get_num_channels(context); } - set { setter(NativeMethods.lame_set_num_channels, value); } - } - /// Global amplification factor - public float Scale - { - get { return NativeMethods.lame_get_scale(context); } - set { setter(NativeMethods.lame_set_scale, value); } - } - /// Left channel amplification - public float ScaleLeft - { - get { return NativeMethods.lame_get_scale_left(context); } - set { setter(NativeMethods.lame_set_scale_left, value); } - } - /// Right channel amplification - public float ScaleRight - { - get { return NativeMethods.lame_get_scale_right(context); } - set { setter(NativeMethods.lame_set_scale_right, value); } - } - /// Output sample rate - public int OutputSampleRate - { - get { return NativeMethods.lame_get_out_samplerate(context); } - set { setter(NativeMethods.lame_set_out_samplerate, value); } - } - #endregion - - #region General Control Parameters - /// Enable analysis - public bool Anaylysis - { - get { return NativeMethods.lame_get_analysis(context); } - set { setter(NativeMethods.lame_set_analysis, value); } - } - /// Write VBR tag to MP3 file - public bool WriteVBRTag - { - get { return NativeMethods.lame_get_bWriteVbrTag(context) != 0; } - set { setter(NativeMethods.lame_set_bWriteVbrTag, value ? 1 : 0); } - } - /// - public bool DecodeOnly - { - get { return NativeMethods.lame_get_decode_only(context) != 0; } - set { setter(NativeMethods.lame_set_decode_only, value ? 1 : 0); } - } - /// Encoding quality - public int Quality - { - get { return NativeMethods.lame_get_quality(context); } - set { setter(NativeMethods.lame_set_quality, value); } - } - /// Specify MPEG channel mode, or use best guess if false - public MPEGMode Mode - { - get { return NativeMethods.lame_get_mode(context); } - set { setter(NativeMethods.lame_set_mode, value); } - } - /// Force M/S mode - public bool ForceMS - { - get { return NativeMethods.lame_get_force_ms(context); } - set { setter(NativeMethods.lame_set_force_ms, value); } - } - /// Use free format - public bool UseFreeFormat - { - get { return NativeMethods.lame_get_free_format(context); } - set { setter(NativeMethods.lame_set_free_format, value); } - } - /// Perform replay gain analysis - public bool FindReplayGain - { - get { return NativeMethods.lame_get_findReplayGain(context); } - set { setter(NativeMethods.lame_set_findReplayGain, value); } - } - /// Decode on the fly. Search for the peak sample. If the ReplayGain analysis is enabled then perform the analysis on the decoded data stream. - public bool DecodeOnTheFly - { - get { return NativeMethods.lame_get_decode_on_the_fly(context); } - set { setter(NativeMethods.lame_set_decode_on_the_fly, value); } - } - /// Counters for gapless encoding - public int NoGapTotal - { - get { return NativeMethods.lame_get_nogap_total(context); } - set { setter(NativeMethods.lame_set_nogap_total, value); } - } - /// Counters for gapless encoding - public int NoGapCurrentIndex - { - get { return NativeMethods.lame_get_nogap_currentindex(context); } - set { setter(NativeMethods.lame_set_nogap_currentindex, value); } - } - /// Output bitrate - public int BitRate - { - get { return NativeMethods.lame_get_brate(context); } - set { setter(NativeMethods.lame_set_brate, value); } - } - /// Output compression ratio - public float CompressionRatio - { - get { return NativeMethods.lame_get_compression_ratio(context); } - set { setter(NativeMethods.lame_set_compression_ratio, value); } - } - - /// Set compression preset - public bool SetPreset(int preset) - { - int res = NativeMethods.lame_set_preset(context, (LAMEPreset) preset); - return res == 0; - } - - /// Enable/Disable optimizations - public bool SetOptimization(ASMOptimizations opt, bool enabled) - { - int res = NativeMethods.lame_set_asm_optimizations(context, opt, enabled); - return res == 0; - } - #endregion - - #region Frame parameters - /// Set output Copyright flag - public bool Copyright - { - get { return NativeMethods.lame_get_copyright(context); } - set { setter(NativeMethods.lame_set_copyright, value); } - } - /// Set output Original flag - public bool Original - { - get { return NativeMethods.lame_get_original(context); } - set { setter(NativeMethods.lame_set_original, value); } - } - /// Set error protection. Uses 2 bytes from each frame for CRC checksum - public bool ErrorProtection - { - get { return NativeMethods.lame_get_error_protection(context); } - set { setter(NativeMethods.lame_set_error_protection, value); } - } - /// MP3 'private extension' bit. Meaningless. - public bool Extension - { - get { return NativeMethods.lame_get_extension(context); } - set { setter(NativeMethods.lame_set_extension, value); } - } - /// Enforce strict ISO compliance. - public bool StrictISO - { - get { return NativeMethods.lame_get_strict_ISO(context); } - set { setter(NativeMethods.lame_set_strict_ISO, value); } - } - #endregion - - #region Quantization/Noise Shaping - /// Disable the bit reservoir. - public bool DisableReservoir { get { return NativeMethods.lame_get_disable_reservoir(context); } set { setter(NativeMethods.lame_set_disable_reservoir, value); } } - /// Set a different "best quantization" function - public int QuantComp { get { return NativeMethods.lame_get_quant_comp(context); } set { setter(NativeMethods.lame_set_quant_comp, value); } } - /// Set a different "best quantization" function - public int QuantCompShort { get { return NativeMethods.lame_get_quant_comp_short(context); } set { setter(NativeMethods.lame_set_quant_comp_short, value); } } - /// Set a different "best quantization" function - public int ExperimentalX { get { return NativeMethods.lame_get_experimentalX(context); } set { setter(NativeMethods.lame_set_experimentalX, value); } } - /// Set a different "best quantization" function - public int ExperimentalY { get { return NativeMethods.lame_get_experimentalY(context); } set { setter(NativeMethods.lame_set_experimentalY, value); } } - /// Set a different "best quantization" function - public int ExperimentalZ { get { return NativeMethods.lame_get_experimentalZ(context); } set { setter(NativeMethods.lame_set_experimentalZ, value); } } - /// Set a different "best quantization" function - public int ExperimentalNSPsyTune { get { return NativeMethods.lame_get_exp_nspsytune(context); } set { setter(NativeMethods.lame_set_exp_nspsytune, value); } } - /// Set a different "best quantization" function - public int MSFix { get { return NativeMethods.lame_get_msfix(context); } set { setter(NativeMethods.lame_set_msfix, value); } } - #endregion - - #region VBR Control - /// Set VBR mode - public VBRMode VBR { get { return NativeMethods.lame_get_VBR(context); } set { setter(NativeMethods.lame_set_VBR, value); } } - /// VBR quality level. 0 = highest, 9 = lowest. - public int VBRQualityLevel { get { return NativeMethods.lame_get_VBR_q(context); } set { setter(NativeMethods.lame_set_VBR_q, value); } } - /// VBR quality level. 0 = highest, 9 = lowest - public float VBRQuality { get { return NativeMethods.lame_get_VBR_quality(context); } set { setter(NativeMethods.lame_set_VBR_quality, value); } } - - /// ABR average bitrate - public int VBRMeanBitrateKbps { get { return NativeMethods.lame_get_VBR_mean_bitrate_kbps(context); } set { setter(NativeMethods.lame_set_VBR_mean_bitrate_kbps, value); } } - /// ABR minimum bitrate - public int VBRMinBitrateKbps { get { return NativeMethods.lame_get_VBR_min_bitrate_kbps(context); } set { setter(NativeMethods.lame_set_VBR_min_bitrate_kbps, value); } } - /// ABR maximum bitrate - public int VBRMaxBitrateKbps { get { return NativeMethods.lame_get_VBR_max_bitrate_kbps(context); } set { setter(NativeMethods.lame_set_VBR_max_bitrate_kbps, value); } } - - /// Strictly enforce minimum bitrate. Normall it will be violated for analog silence. - public bool VBRHardMin { get { return NativeMethods.lame_get_VBR_hard_min(context); } set { setter(NativeMethods.lame_set_VBR_hard_min, value); } } - #endregion - - #region Filtering control -#pragma warning disable 1591 - public int LowPassFreq { get { return NativeMethods.lame_get_lowpassfreq(context); } set { setter(NativeMethods.lame_set_lowpassfreq, value); } } - public int LowPassWidth { get { return NativeMethods.lame_get_lowpasswidth(context); } set { setter(NativeMethods.lame_set_lowpasswidth, value); } } - public int HighPassFreq { get { return NativeMethods.lame_get_highpassfreq(context); } set { setter(NativeMethods.lame_set_highpassfreq, value); } } - public int HighPassWidth { get { return NativeMethods.lame_get_highpasswidth(context); } set { setter(NativeMethods.lame_set_highpasswidth, value); } } -#pragma warning restore 1591 - #endregion - - #region Internal state variables, read only -#pragma warning disable 1591 - public MPEGVersion Version { get { return NativeMethods.lame_get_version(context); } } - public int EncoderDelay { get { return NativeMethods.lame_get_encoder_delay(context); } } - public int EncoderPadding { get { return NativeMethods.lame_get_encoder_padding(context); } } - public int MFSamplesToEncode { get { return NativeMethods.lame_get_mf_samples_to_encode(context); } } - public int MP3BufferSize { get { return NativeMethods.lame_get_size_mp3buffer(context); } } - public int FrameNumber { get { return NativeMethods.lame_get_frameNum(context); } } - public int TotalFrames { get { return NativeMethods.lame_get_totalframes(context); } } - public int RadioGain { get { return NativeMethods.lame_get_RadioGain(context); } } - public int AudiophileGain { get { return NativeMethods.lame_get_AudiophileGain(context); } } - public float PeakSample { get { return NativeMethods.lame_get_PeakSample(context); } } - public int NoClipGainChange { get { return NativeMethods.lame_get_noclipGainChange(context); } } - public float NoClipScale { get { return NativeMethods.lame_get_noclipScale(context); } } -#pragma warning restore 1591 - #endregion - - #endregion - - #region Methods - /// Initialize encoder with parameters - /// Success/fail - public bool InitParams() - { - if (context == IntPtr.Zero) - throw new InvalidOperationException("InitParams called without initializing context"); - int res = NativeMethods.lame_init_params(context); - return res == 0; - } - - /// Write 16-bit integer PCM samples to encoder - /// PCM sample data. Interleaved for stereo. - /// Number of valid samples. - /// Buffer to write encoded data to - /// Size of buffer. - /// True if mono, false if stereo. - /// Number of bytes of encoded data written to output buffer. - public int Write(short[] samples, int nSamples, byte[] output, int outputSize, bool mono) - { - int rc = -1; - if (mono) - rc = NativeMethods.lame_encode_buffer(context, samples, samples, nSamples, output, outputSize); - else - rc = NativeMethods.lame_encode_buffer_interleaved(context, samples, nSamples / 2, output, outputSize); - - return rc; - } - - // float - /// Write 32-bit floating point PCM samples to encoder - /// PCM sample data. Interleaved for stereo. - /// Number of valid samples. - /// Buffer to write encoded data to - /// Size of buffer. - /// True if mono, false if stereo. - /// Number of bytes of encoded data written to output buffer. - public int Write(float[] samples, int nSamples, byte[] output, int outputSize, bool mono) - { - int rc = -1; - if (mono) - rc = NativeMethods.lame_encode_buffer_ieee_float(context, samples, samples, nSamples, output, outputSize); - else - rc = NativeMethods.lame_encode_buffer_interleaved_ieee_float(context, samples, nSamples / 2, output, outputSize); - return rc; - } - - /// Flush encoder output - /// Buffer to write encoded data to - /// Size of buffer. - /// Number of bytes of encoded data written to output buffer. - public int Flush(byte[] output, int outputSize) - { - int res = NativeMethods.lame_encode_flush(context, output, outputSize); - return Math.Max(0, res); - } - - #endregion - - internal static class NativeMethods - { - /* - private static Delegate _get_delegate(string func_name) - { - IntPtr func_ptr = Native.GetProcAddress(_ofplugin, func_name); - //if (func_ptr == IntPtr.Zero) - // Debug.LogError("Function " + func_name + " doesn't exist."); - return Marshal.GetDelegateForFunctionPointer(func_ptr, typeof(T)); - } - static NativeMethods() - { - - _my_plugin = Native.LoadLibrary(Application.dataPath + "/Plugins/"+ libname); - lame_init = (LameInitNative)_get_delegate("lame_init"); - } - */ -#if X64 - const string libname = @"libmp3lame.64.dll"; -#else - const string libname = @"libmp3lame.32.dll"; -#endif - - public static readonly string BoundDLL = libname; - - // typedef void (*lame_report_function)(const char *format, va_list ap); - - #region Startup/Shutdown - - private static IntPtr _my_plugin; - /* - * REQUIRED: - * initialize the encoder. sets default for all encoder parameters, - * returns NULL if some malloc()'s failed - * otherwise returns pointer to structure needed for all future - * API calls. - */ - // lame_global_flags * CDECL lame_init(void); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern IntPtr lame_init(); - /* - internal delegate IntPtr LameInitNative(); - internal static LameInitNative lame_init; - */ - /* - * REQUIRED: - * final call to free all remaining buffers - */ - // int CDECL lame_close (lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_close(IntPtr context); - - #endregion - - #region LAME information - /* - * OPTIONAL: - * get the version number, in a string. of the form: - * "3.63 (beta)" or just "3.63". - */ - // const char* CDECL get_lame_version ( void ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern string get_lame_version(); - // const char* CDECL get_lame_short_version ( void ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern string get_lame_short_version(); - // const char* CDECL get_lame_very_short_version ( void ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern string get_lame_very_short_version(); - // const char* CDECL get_psy_version ( void ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern string get_psy_version(); - // const char* CDECL get_lame_url ( void ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern string get_lame_url(); - // const char* CDECL get_lame_os_bitness ( void ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern string get_lame_os_bitness(); - - // void CDECL get_lame_version_numerical(lame_version_t *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void get_lame_version_numerical([Out]LAMEVersion ver); - #endregion - - #region Input Stream Description - /* number of samples. default = 2^32-1 */ - // int CDECL lame_set_num_samples(lame_global_flags *, unsigned long); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_num_samples(IntPtr context, UInt64 num_samples); - // unsigned long CDECL lame_get_num_samples(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern UInt64 lame_get_num_samples(IntPtr context); - - /* input sample rate in Hz. default = 44100hz */ - // int CDECL lame_set_in_samplerate(lame_global_flags *, int); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_in_samplerate(IntPtr context, int value); - // int CDECL lame_get_in_samplerate(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_in_samplerate(IntPtr context); - - /* number of channels in input stream. default=2 */ - //int CDECL lame_set_num_channels(lame_global_flags *, int); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_num_channels(IntPtr context, int value); - //int CDECL lame_get_num_channels(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_num_channels(IntPtr context); - - /* - scale the input by this amount before encoding. default=1 - (not used by decoding routines) - */ - //int CDECL lame_set_scale(lame_global_flags *, float); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_scale(IntPtr context, float value); - //float CDECL lame_get_scale(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_scale(IntPtr context); - - /* - scale the channel 0 (left) input by this amount before encoding. default=1 - (not used by decoding routines) - */ - // int CDECL lame_set_scale_left(lame_global_flags *, float); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_scale_left(IntPtr context, float value); - // float CDECL lame_get_scale_left(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_scale_left(IntPtr context); - - /* - scale the channel 1 (right) input by this amount before encoding. default=1 - (not used by decoding routines) - */ - // int CDECL lame_set_scale_right(lame_global_flags *, float); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_scale_right(IntPtr context, float value); - // float CDECL lame_get_scale_right(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_scale_right(IntPtr context); - - /* - output sample rate in Hz. default = 0, which means LAME picks best value - based on the amount of compression. MPEG only allows: - MPEG1 32, 44.1, 48khz - MPEG2 16, 22.05, 24 - MPEG2.5 8, 11.025, 12 - (not used by decoding routines) - */ - // int CDECL lame_set_out_samplerate(lame_global_flags *, int); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_out_samplerate(IntPtr context, int value); - // int CDECL lame_get_out_samplerate(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_out_samplerate(IntPtr context); - - #endregion - - #region General control parameters - - /* 1=cause LAME to collect data for an MP3 frame analyzer. default=0 */ - // int CDECL lame_set_analysis(lame_global_flags *, int); - // int CDECL lame_get_analysis(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_analysis(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_analysis(IntPtr context); - - /* - 1 = write a Xing VBR header frame. - default = 1 - this variable must have been added by a Hungarian notation Windows programmer :-) - */ - // int CDECL lame_set_bWriteVbrTag(lame_global_flags *, int); - // int CDECL lame_get_bWriteVbrTag(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_bWriteVbrTag(IntPtr context, [MarshalAs(UnmanagedType.Bool)] int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_bWriteVbrTag(IntPtr context); - - /* 1=decode only. use lame/mpglib to convert mp3/ogg to wav. default=0 */ - // int CDECL lame_set_decode_only(lame_global_flags *, int); - // int CDECL lame_get_decode_only(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_decode_only(IntPtr context, [MarshalAs(UnmanagedType.Bool)] int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_decode_only(IntPtr context); - - /* - internal algorithm selection. True quality is determined by the bitrate - but this variable will effect quality by selecting expensive or cheap algorithms. - quality=0..9. 0=best (very slow). 9=worst. - recommended: 2 near-best quality, not too slow - 5 good quality, fast - 7 ok quality, really fast - */ - // int CDECL lame_set_quality(lame_global_flags *, int); - // int CDECL lame_get_quality(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_quality(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_quality(IntPtr context); - - /* - mode = 0,1,2,3 = stereo, jstereo, dual channel (not supported), mono - default: lame picks based on compression ration and input channels - */ - // int CDECL lame_set_mode(lame_global_flags *, MPEG_mode); - // MPEG_mode CDECL lame_get_mode(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_mode(IntPtr context, MPEGMode value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern MPEGMode lame_get_mode(IntPtr context); - - /* - force_ms. Force M/S for all frames. For testing only. - default = 0 (disabled) - */ - // int CDECL lame_set_force_ms(lame_global_flags *, int); - // int CDECL lame_get_force_ms(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_force_ms(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_force_ms(IntPtr context); - - /* use free_format? default = 0 (disabled) */ - // int CDECL lame_set_free_format(lame_global_flags *, int); - // int CDECL lame_get_free_format(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_free_format(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_free_format(IntPtr context); - - /* perform ReplayGain analysis? default = 0 (disabled) */ - // int CDECL lame_set_findReplayGain(lame_global_flags *, int); - // int CDECL lame_get_findReplayGain(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_findReplayGain(IntPtr context, [In, MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_findReplayGain(IntPtr context); - - /* decode on the fly. Search for the peak sample. If the ReplayGain - * analysis is enabled then perform the analysis on the decoded data - * stream. default = 0 (disabled) - * NOTE: if this option is set the build-in decoder should not be used */ - // int CDECL lame_set_decode_on_the_fly(lame_global_flags *, int); - // int CDECL lame_get_decode_on_the_fly(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_decode_on_the_fly(IntPtr context, [In, MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_decode_on_the_fly(IntPtr context); - - /* counters for gapless encoding */ - // int CDECL lame_set_nogap_total(lame_global_flags*, int); - // int CDECL lame_get_nogap_total(const lame_global_flags*); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_nogap_total(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_nogap_total(IntPtr context); - - // int CDECL lame_set_nogap_currentindex(lame_global_flags* , int); - // int CDECL lame_get_nogap_currentindex(const lame_global_flags*); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_nogap_currentindex(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_nogap_currentindex(IntPtr context); - - /* set one of brate compression ratio. default is compression ratio of 11. */ - // int CDECL lame_set_brate(lame_global_flags *, int); - // int CDECL lame_get_brate(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_brate(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_brate(IntPtr context); - - // int CDECL lame_set_compression_ratio(lame_global_flags *, float); - // float CDECL lame_get_compression_ratio(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_compression_ratio(IntPtr context, float value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_compression_ratio(IntPtr context); - - //int CDECL lame_set_preset( lame_global_flags* gfp, int ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_preset(IntPtr context, LAMEPreset value); - - //int CDECL lame_set_asm_optimizations( lame_global_flags* gfp, int, int ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_asm_optimizations(IntPtr context, ASMOptimizations opt, [MarshalAs(UnmanagedType.Bool)] bool val); - - #endregion - - #region Frame parameters - /* mark as copyright. default=0 */ - // int CDECL lame_set_copyright(lame_global_flags *, int); - // int CDECL lame_get_copyright(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_copyright(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_copyright(IntPtr context); - - /* mark as original. default=1 */ - // int CDECL lame_set_original(lame_global_flags *, int); - // int CDECL lame_get_original(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_original(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_original(IntPtr context); - - /* error_protection. Use 2 bytes from each frame for CRC checksum. default=0 */ - // int CDECL lame_set_error_protection(lame_global_flags *, int); - // int CDECL lame_get_error_protection(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_error_protection(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_error_protection(IntPtr context); - - /* MP3 'private extension' bit Meaningless. default=0 */ - // int CDECL lame_set_extension(lame_global_flags *, int); - // int CDECL lame_get_extension(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_extension(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_extension(IntPtr context); - - /* enforce strict ISO compliance. default=0 */ - // int CDECL lame_set_strict_ISO(lame_global_flags *, int); - // int CDECL lame_get_strict_ISO(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_strict_ISO(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_strict_ISO(IntPtr context); - - #endregion - - #region Quantization/Noise Shaping - /* disable the bit reservoir. For testing only. default=0 */ - // int CDECL lame_set_disable_reservoir(lame_global_flags *, int); - // int CDECL lame_get_disable_reservoir(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_disable_reservoir(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_disable_reservoir(IntPtr context); - - /* select a different "best quantization" function. default=0 */ - // int CDECL lame_set_quant_comp(lame_global_flags *, int); - // int CDECL lame_get_quant_comp(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_quant_comp(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_quant_comp(IntPtr context); - - // int CDECL lame_set_quant_comp_short(lame_global_flags *, int); - // int CDECL lame_get_quant_comp_short(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_quant_comp_short(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_quant_comp_short(IntPtr context); - - // int CDECL lame_set_experimentalX(lame_global_flags *, int); /* compatibility*/ - // int CDECL lame_get_experimentalX(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_experimentalX(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_experimentalX(IntPtr context); - - /* another experimental option. for testing only */ - // int CDECL lame_set_experimentalY(lame_global_flags *, int); - // int CDECL lame_get_experimentalY(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_experimentalY(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_experimentalY(IntPtr context); - - /* another experimental option. for testing only */ - // int CDECL lame_set_experimentalZ(lame_global_flags *, int); - // int CDECL lame_get_experimentalZ(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_experimentalZ(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_experimentalZ(IntPtr context); - - /* Naoki's psycho acoustic model. default=0 */ - // int CDECL lame_set_exp_nspsytune(lame_global_flags *, int); - // int CDECL lame_get_exp_nspsytune(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_exp_nspsytune(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_exp_nspsytune(IntPtr context); - - // void CDECL lame_set_msfix(lame_global_flags *, double); - // float CDECL lame_get_msfix(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_msfix(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_msfix(IntPtr context); - - #endregion - - #region VBR control - /* Types of VBR. default = vbr_off = CBR */ - // int CDECL lame_set_VBR(lame_global_flags *, vbr_mode); - // vbr_mode CDECL lame_get_VBR(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_VBR(IntPtr context, VBRMode value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern VBRMode lame_get_VBR(IntPtr context); - - /* VBR quality level. 0=highest 9=lowest */ - // int CDECL lame_set_VBR_q(lame_global_flags *, int); - // int CDECL lame_get_VBR_q(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_VBR_q(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_VBR_q(IntPtr context); - - /* VBR quality level. 0=highest 9=lowest, Range [0,...,10[ */ - // int CDECL lame_set_VBR_quality(lame_global_flags *, float); - // float CDECL lame_get_VBR_quality(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_VBR_quality(IntPtr context, float value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_VBR_quality(IntPtr context); - - /* Ignored except for VBR=vbr_abr (ABR mode) */ - // int CDECL lame_set_VBR_mean_bitrate_kbps(lame_global_flags *, int); - // int CDECL lame_get_VBR_mean_bitrate_kbps(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_VBR_mean_bitrate_kbps(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_VBR_mean_bitrate_kbps(IntPtr context); - - // int CDECL lame_set_VBR_min_bitrate_kbps(lame_global_flags *, int); - // int CDECL lame_get_VBR_min_bitrate_kbps(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_VBR_min_bitrate_kbps(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_VBR_min_bitrate_kbps(IntPtr context); - - // int CDECL lame_set_VBR_max_bitrate_kbps(lame_global_flags *, int); - // int CDECL lame_get_VBR_max_bitrate_kbps(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_VBR_max_bitrate_kbps(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_VBR_max_bitrate_kbps(IntPtr context); - - /* - 1=strictly enforce VBR_min_bitrate. Normally it will be violated for - analog silence - */ - // int CDECL lame_set_VBR_hard_min(lame_global_flags *, int); - // int CDECL lame_get_VBR_hard_min(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_VBR_hard_min(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_VBR_hard_min(IntPtr context); - - #endregion - - #region Filtering control - /* freq in Hz to apply lowpass. Default = 0 = lame chooses. -1 = disabled */ - // int CDECL lame_set_lowpassfreq(lame_global_flags *, int); - // int CDECL lame_get_lowpassfreq(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_lowpassfreq(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_lowpassfreq(IntPtr context); - - /* width of transition band, in Hz. Default = one polyphase filter band */ - // int CDECL lame_set_lowpasswidth(lame_global_flags *, int); - // int CDECL lame_get_lowpasswidth(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_lowpasswidth(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_lowpasswidth(IntPtr context); - - /* freq in Hz to apply highpass. Default = 0 = lame chooses. -1 = disabled */ - // int CDECL lame_set_highpassfreq(lame_global_flags *, int); - // int CDECL lame_get_highpassfreq(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_highpassfreq(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_highpassfreq(IntPtr context); - - /* width of transition band, in Hz. Default = one polyphase filter band */ - // int CDECL lame_set_highpasswidth(lame_global_flags *, int); - // int CDECL lame_get_highpasswidth(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_highpasswidth(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_highpasswidth(IntPtr context); - - #endregion - - #region Psychoacoustics and other advanced settings - /* only use ATH for masking */ - // int CDECL lame_set_ATHonly(lame_global_flags *, int); - // int CDECL lame_get_ATHonly(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_ATHonly(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_ATHonly(IntPtr context); - - /* only use ATH for short blocks */ - // int CDECL lame_set_ATHshort(lame_global_flags *, int); - // int CDECL lame_get_ATHshort(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_ATHshort(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_ATHshort(IntPtr context); - - /* disable ATH */ - // int CDECL lame_set_noATH(lame_global_flags *, int); - // int CDECL lame_get_noATH(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_noATH(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_noATH(IntPtr context); - - /* select ATH formula */ - // int CDECL lame_set_ATHtype(lame_global_flags *, int); - // int CDECL lame_get_ATHtype(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_ATHtype(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_ATHtype(IntPtr context); - - /* lower ATH by this many db */ - // int CDECL lame_set_ATHlower(lame_global_flags *, float); - // float CDECL lame_get_ATHlower(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_ATHlower(IntPtr context, float value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_ATHlower(IntPtr context); - - /* select ATH adaptive adjustment type */ - // int CDECL lame_set_athaa_type( lame_global_flags *, int); - // int CDECL lame_get_athaa_type( const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_athaa_type(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_athaa_type(IntPtr context); - - /* adjust (in dB) the point below which adaptive ATH level adjustment occurs */ - // int CDECL lame_set_athaa_sensitivity( lame_global_flags *, float); - // float CDECL lame_get_athaa_sensitivity( const lame_global_flags* ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_athaa_sensitivity(IntPtr context, float value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_athaa_sensitivity(IntPtr context); - - /* - allow blocktypes to differ between channels? - default: 0 for jstereo, 1 for stereo - */ - // int CDECL lame_set_allow_diff_short(lame_global_flags *, int); - // int CDECL lame_get_allow_diff_short(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_allow_diff_short(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_allow_diff_short(IntPtr context); - - /* use temporal masking effect (default = 1) */ - // int CDECL lame_set_useTemporal(lame_global_flags *, int); - // int CDECL lame_get_useTemporal(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_useTemporal(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_useTemporal(IntPtr context); - - /* use temporal masking effect (default = 1) */ - // int CDECL lame_set_interChRatio(lame_global_flags *, float); - // float CDECL lame_get_interChRatio(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_interChRatio(IntPtr context, float value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_interChRatio(IntPtr context); - - /* disable short blocks */ - // int CDECL lame_set_no_short_blocks(lame_global_flags *, int); - // int CDECL lame_get_no_short_blocks(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_no_short_blocks(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_no_short_blocks(IntPtr context); - - /* force short blocks */ - // int CDECL lame_set_force_short_blocks(lame_global_flags *, int); - // int CDECL lame_get_force_short_blocks(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_force_short_blocks(IntPtr context, [MarshalAs(UnmanagedType.Bool)] bool value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool lame_get_force_short_blocks(IntPtr context); - - /* Input PCM is emphased PCM (for instance from one of the rarely - emphased CDs), it is STRONGLY not recommended to use this, because - psycho does not take it into account, and last but not least many decoders - ignore these bits */ - // int CDECL lame_set_emphasis(lame_global_flags *, int); - // int CDECL lame_get_emphasis(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_emphasis(IntPtr context, int value); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_emphasis(IntPtr context); - #endregion - - #region Internal state variables, read only - /* version 0=MPEG-2 1=MPEG-1 (2=MPEG-2.5) */ - // int CDECL lame_get_version(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern MPEGVersion lame_get_version(IntPtr context); - - /* encoder delay */ - // int CDECL lame_get_encoder_delay(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_encoder_delay(IntPtr context); - - /* - padding appended to the input to make sure decoder can fully decode - all input. Note that this value can only be calculated during the - call to lame_encoder_flush(). Before lame_encoder_flush() has - been called, the value of encoder_padding = 0. - */ - // int CDECL lame_get_encoder_padding(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_encoder_padding(IntPtr context); - - /* size of MPEG frame */ - // int CDECL lame_get_framesize(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_framesize(IntPtr context); - - /* number of PCM samples buffered, but not yet encoded to mp3 data. */ - // int CDECL lame_get_mf_samples_to_encode( const lame_global_flags* gfp ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_mf_samples_to_encode(IntPtr context); - - /* - size (bytes) of mp3 data buffered, but not yet encoded. - this is the number of bytes which would be output by a call to - lame_encode_flush_nogap. NOTE: lame_encode_flush() will return - more bytes than this because it will encode the reamining buffered - PCM samples before flushing the mp3 buffers. - */ - // int CDECL lame_get_size_mp3buffer( const lame_global_flags* gfp ); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_size_mp3buffer(IntPtr context); - - /* number of frames encoded so far */ - // int CDECL lame_get_frameNum(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_frameNum(IntPtr context); - - /* - lame's estimate of the total number of frames to be encoded - only valid if calling program set num_samples - */ - // int CDECL lame_get_totalframes(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_totalframes(IntPtr context); - - /* RadioGain value. Multiplied by 10 and rounded to the nearest. */ - // int CDECL lame_get_RadioGain(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_RadioGain(IntPtr context); - - /* AudiophileGain value. Multipled by 10 and rounded to the nearest. */ - // int CDECL lame_get_AudiophileGain(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_AudiophileGain(IntPtr context); - - /* the peak sample */ - // float CDECL lame_get_PeakSample(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_PeakSample(IntPtr context); - - /* Gain change required for preventing clipping. The value is correct only if - peak sample searching was enabled. If negative then the waveform - already does not clip. The value is multiplied by 10 and rounded up. */ - // int CDECL lame_get_noclipGainChange(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_get_noclipGainChange(IntPtr context); - - /* user-specified scale factor required for preventing clipping. Value is - correct only if peak sample searching was enabled and no user-specified - scaling was performed. If negative then either the waveform already does - not clip or the value cannot be determined */ - // float CDECL lame_get_noclipScale(const lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern float lame_get_noclipScale(IntPtr context); - #endregion - - #region Processing - /* - * REQUIRED: - * sets more internal configuration based on data provided above. - * returns -1 if something failed. - */ - // int CDECL lame_init_params(lame_global_flags *); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_init_params(IntPtr context); - - /* - * input pcm data, output (maybe) mp3 frames. - * This routine handles all buffering, resampling and filtering for you. - * - * return code number of bytes output in mp3buf. Can be 0 - * -1: mp3buf was too small - * -2: malloc() problem - * -3: lame_init_params() not called - * -4: psycho acoustic problems - * - * The required mp3buf_size can be computed from num_samples, - * samplerate and encoding rate, but here is a worst case estimate: - * - * mp3buf_size in bytes = 1.25*num_samples + 7200 - * - * I think a tighter bound could be: (mt, March 2000) - * MPEG1: - * num_samples*(bitrate/8)/samplerate + 4*1152*(bitrate/8)/samplerate + 512 - * MPEG2: - * num_samples*(bitrate/8)/samplerate + 4*576*(bitrate/8)/samplerate + 256 - * - * but test first if you use that! - * - * set mp3buf_size = 0 and LAME will not check if mp3buf_size is - * large enough. - * - * NOTE: - * if gfp->num_channels=2, but gfp->mode = 3 (mono), the L & R channels - * will be averaged into the L channel before encoding only the L channel - * This will overwrite the data in buffer_l[] and buffer_r[]. - * - */ - // int CDECL lame_encode_buffer ( - // lame_global_flags* gfp, /* global context handle */ - // const short int buffer_l [], /* PCM data for left channel */ - // const short int buffer_r [], /* PCM data for right channel */ - // const int nsamples, /* number of samples per channel */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // const int mp3buf_size ); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I2)] - short[] buffer_l, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I2)] - short[] buffer_r, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* - * as above, but input has L & R channel data interleaved. - * NOTE: - * num_samples = number of samples in the L (or R) - * channel, not the total number of samples in pcm[] - */ - // int CDECL lame_encode_buffer_interleaved( - // lame_global_flags* gfp, /* global context handlei */ - // short int pcm[], /* PCM data for left and right - // channel, interleaved */ - // int num_samples, /* number of samples per channel, _not_ number of samples in pcm[] */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // int mp3buf_size ); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_interleaved(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I2)] - short[] pcm, - int num_samples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* as lame_encode_buffer, but for 'float's. - * !! NOTE: !! data must still be scaled to be in the same range as - * short int, +/- 32768 - */ - // int CDECL lame_encode_buffer_float( - // lame_global_flags* gfp, /* global context handle */ - // const float pcm_l [], /* PCM data for left channel */ - // const float pcm_r [], /* PCM data for right channel */ - // const int nsamples, /* number of samples per channel */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // const int mp3buf_size ); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_float(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R4)] - float[] pcm_l, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R4)] - float[] pcm_r, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* as lame_encode_buffer, but for 'float's. - * !! NOTE: !! data must be scaled to +/- 1 full scale - */ - // int CDECL lame_encode_buffer_ieee_float( - // lame_t gfp, - // const float pcm_l [], /* PCM data for left channel */ - // const float pcm_r [], /* PCM data for right channel */ - // const int nsamples, - // unsigned char * mp3buf, - // const int mp3buf_size); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_ieee_float(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R4)] - float[] pcm_l, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R4)] - float[] pcm_r, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - // int CDECL lame_encode_buffer_interleaved_ieee_float( - // lame_t gfp, - // const float pcm[], /* PCM data for left and right channel, interleaved */ - // const int nsamples, - // unsigned char * mp3buf, - // const int mp3buf_size); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_interleaved_ieee_float(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R4)] - - float[] pcm, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* as lame_encode_buffer, but for 'double's. - * !! NOTE: !! data must be scaled to +/- 1 full scale - */ - // int CDECL lame_encode_buffer_ieee_double( - // lame_t gfp, - // const double pcm_l [], /* PCM data for left channel */ - // const double pcm_r [], /* PCM data for right channel */ - // const int nsamples, - // unsigned char * mp3buf, - // const int mp3buf_size); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_ieee_double(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] - double[] pcm_l, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] - double[] pcm_r, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - // int CDECL lame_encode_buffer_interleaved_ieee_double( - // lame_t gfp, - // const double pcm[], /* PCM data for left and right channel, interleaved */ - // const int nsamples, - // unsigned char * mp3buf, - // const int mp3buf_size); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_interleaved_ieee_double(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8)] - double[] pcm, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* as lame_encode_buffer, but for long's - * !! NOTE: !! data must still be scaled to be in the same range as - * short int, +/- 32768 - * - * This scaling was a mistake (doesn't allow one to exploit full - * precision of type 'long'. Use lame_encode_buffer_long2() instead. - * - */ - // int CDECL lame_encode_buffer_long( - // lame_global_flags* gfp, /* global context handle */ - // const long buffer_l [], /* PCM data for left channel */ - // const long buffer_r [], /* PCM data for right channel */ - // const int nsamples, /* number of samples per channel */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // const int mp3buf_size ); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_long(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I8)] - long[] buffer_l, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I8)] - long[] buffer_r, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* Same as lame_encode_buffer_long(), but with correct scaling. - * !! NOTE: !! data must still be scaled to be in the same range as - * type 'long'. Data should be in the range: +/- 2^(8*size(long)-1) - * - */ - // int CDECL lame_encode_buffer_long2( - // lame_global_flags* gfp, /* global context handle */ - // const long buffer_l [], /* PCM data for left channel */ - // const long buffer_r [], /* PCM data for right channel */ - // const int nsamples, /* number of samples per channel */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // const int mp3buf_size ); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_bufer_long2(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I8)] - long[] buffer_l, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I8)] - long[] buffer_r, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* as lame_encode_buffer, but for int's - * !! NOTE: !! input should be scaled to the maximum range of 'int' - * If int is 4 bytes, then the values should range from - * +/- 2147483648. - * - * This routine does not (and cannot, without loosing precision) use - * the same scaling as the rest of the lame_encode_buffer() routines. - * - */ - // int CDECL lame_encode_buffer_int( - // lame_global_flags* gfp, /* global context handle */ - // const int buffer_l [], /* PCM data for left channel */ - // const int buffer_r [], /* PCM data for right channel */ - // const int nsamples, /* number of samples per channel */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // const int mp3buf_size ); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_buffer_int(IntPtr context, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I4)] - int[] buffer_l, - [In]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I4)] - int[] buffer_r, - int nSamples, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* - * REQUIRED: - * lame_encode_flush will flush the intenal PCM buffers, padding with - * 0's to make sure the final frame is complete, and then flush - * the internal MP3 buffers, and thus may return a - * final few mp3 frames. 'mp3buf' should be at least 7200 bytes long - * to hold all possible emitted data. - * - * will also write id3v1 tags (if any) into the bitstream - * - * return code = number of bytes output to mp3buf. Can be 0 - */ - // int CDECL lame_encode_flush( - // lame_global_flags * gfp, /* global context handle */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // int size); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_flush(IntPtr context, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - /* - * OPTIONAL: - * lame_encode_flush_nogap will flush the internal mp3 buffers and pad - * the last frame with ancillary data so it is a complete mp3 frame. - * - * 'mp3buf' should be at least 7200 bytes long - * to hold all possible emitted data. - * - * After a call to this routine, the outputed mp3 data is complete, but - * you may continue to encode new PCM samples and write future mp3 data - * to a different file. The two mp3 files will play back with no gaps - * if they are concatenated together. - * - * This routine will NOT write id3v1 tags into the bitstream. - * - * return code = number of bytes output to mp3buf. Can be 0 - */ - // int CDECL lame_encode_flush_nogap( - // lame_global_flags * gfp, /* global context handle */ - // unsigned char* mp3buf, /* pointer to encoded MP3 stream */ - // int size); /* number of valid octets in this stream */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_encode_flush_nogap(IntPtr context, - [In, Out]//[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1)] - byte[] mp3buf, - int mp3buf_size - ); - - - /* - * OPTIONAL: - * Normally, this is called by lame_init_params(). It writes id3v2 and - * Xing headers into the front of the bitstream, and sets frame counters - * and bitrate histogram data to 0. You can also call this after - * lame_encode_flush_nogap(). - */ - //int CDECL lame_init_bitstream( - // lame_global_flags * gfp); /* global context handle */ - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_init_bitstream(IntPtr context); - - #endregion - - #region Reporting callbacks - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_errorf(IntPtr context, delReportFunction fn); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_debugf(IntPtr context, delReportFunction fn); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int lame_set_msgf(IntPtr context, delReportFunction fn); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void lame_print_config(IntPtr context); - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void lame_print_internals(IntPtr context); - - - #endregion - - #region 'printf' support for reporting functions - [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ThrowOnUnmappableChar = true, BestFitMapping = false)] - internal static extern int _vsnprintf_s( - [In, Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder str, - int sizeOfBuffer, - int count, - [In, MarshalAs(UnmanagedType.LPStr)] String format, - [In] IntPtr va_args); - - internal static string printf(string format, IntPtr va_args) - { - StringBuilder sb = new StringBuilder(4096); - //int res = NativeMethods._vsnprintf_s(sb, sb.Capacity, sb.Capacity - 2, format.Replace("\t", "\xFF"), va_args); - return sb.ToString().Replace("\xFF", "\t"); - } - #endregion - - - #region Decoding - /// required call to initialize decoder - /// Decoder context handle - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern IntPtr hip_decode_init(); - - /// cleanup call to exit decoder - /// Decoder context - /// - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int hip_decode_exit(IntPtr decContext); - - /// Hip reporting function: error - /// Decoder context - /// Reporting function - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void hip_set_errorf(IntPtr decContext, delReportFunction f); - - /// Hip reporting function: debug - /// Decoder context - /// Reporting function - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void hip_set_debugf(IntPtr decContext, delReportFunction f); - - /// Hip reporting function: message - /// Decoder context - /// Reporting function - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void hip_set_msgf(IntPtr decContext, delReportFunction f); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int hip_decode(IntPtr decContext, [In] byte[] mp3buf, int len, [In, Out] short[] pcm_l, [In, Out] short[] pcm_r); - - // Same as hip_decode, and also returns mp3 header data - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int hip_decode_headers(IntPtr decContext, [In] byte[] mp3buf, int len, [In, Out] short[] pcm_l, [In, Out] short[] pcm_r, [Out] mp3data mp3data); - - // Same as hip_decode, but returns at most 1 frame - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int hip_decode1(IntPtr decContext, [In] byte[] mp3buf, int len, [In, Out] short[] pcm_l, [In, Out] short[] pcm_r); - - // Same as hip_decode1, but returns at most 1 frame and mp3 header data - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int hip_decode1_headers(IntPtr decContext, [In] byte[] mp3buf, int len, [In, Out] short[] pcm_l, [In, Out] short[] pcm_r, [Out] mp3data mp3data); - - // Same as hip_decode1_headers but also returns enc_delay and enc_padding - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int hip_decode(IntPtr decContext, [In] byte[] mp3buf, int len, [In, Out] short[] pcm_l, [In, Out] short[] pcm_r, [Out] mp3data mp3data, out int enc_delay, out int enc_padding); - - #endregion - - #region ID3 tag support - // utility to obtain alphabetically sorted list of genre names with numbers - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_genre_list(delGenreCallback handler, IntPtr cookie); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_init(IntPtr context); - - // force addition of ID3v2 tag - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_add_v2(IntPtr context); - - // add only a v1 tag - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_v1_only(IntPtr context); - - // add only a v2 tag - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_v2_only(IntPtr context); - - // pad version 1 tag with spaces instead of nulls - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_space_v1(IntPtr context); - - // pad version 2 tag with extra 128 bytes - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_pad_v2(IntPtr context); - - // pad version 2 tag with extra n bytes - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_set_pad(IntPtr context, int n); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_set_title(IntPtr context, string title); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_set_artist(IntPtr context, string artist); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_set_album(IntPtr context, string album); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_set_year(IntPtr context, string year); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_set_comment(IntPtr context, string comment); - - // return -1 result if track number is out of ID3v1 range and ignored for ID3v1 - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool id3tag_set_track(IntPtr context, string track); - - // return non-zero result if genre name or number is invalid - // result 0: OK - // result -1: genre number out of range - // result -2: no valid ID3v1 genre name, mapped to ID3v1 'Other' - // but taken as-is for ID3v2 genre tag - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int id3tag_set_genre(IntPtr context, string genre); - - // return non-zero result if field name is invalid - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool id3tag_set_fieldvalue(IntPtr context, string value); - - // return non-zero result if image type is invalid - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool id3tag_set_albumart(IntPtr context, [In]byte[] image, int size); - - // lame_get_id3v1_tag copies ID3v1 tag into buffer. - // Function returns number of bytes copied into buffer, or number - // of bytes required if 'size' is too small. - // Function fails, if returned value is larger than 'size' - // NOTE: - // This function does nothing, if user/LAME disabled ID3v1 tag - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int id3tag_get_id3v1_tag(IntPtr context, [In, Out]byte[] buffer, int size); - - // lame_get_id3v2_tag copies ID3v2 tag into buffer. - // Function returns number of bytes copied into buffer, or number - // of bytes required if 'size' is too small. - // Function fails, if returned value is larger than 'size' - // NOTE: - // This function does nothing, if user/LAME disabled ID3v2 tag - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern int id3tag_get_id3v2_tag(IntPtr context, [In, Out]byte[] buffer, int size); - - // normally lame_init_param writes ID3v2 tags into the audio stream - // Call lame_set_write_id3tag_automatic(gfp, 0) before lame_init_param - // to turn off this behaviour and get ID3v2 tag with above function - // write it yourself into your file. - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - internal static extern void id3tag_set_write_id3tag_automatic(IntPtr context, bool value); - - [DllImport(libname, CallingConvention = CallingConvention.Cdecl)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool id3tag_get_write_id3tag_automatic(IntPtr context); - #endregion - } - - /// Print out LAME configuration to standard output, or to registered output function - public void PrintConfig() { NativeMethods.lame_print_config(context); } - /// Print out LAME internals to standard output, or to registered output function - public void PrintInternals() { NativeMethods.lame_print_internals(context); } - - #region Reporting function support - - private ReportFunction rptError = null; - private ReportFunction rptDebug = null; - private ReportFunction rptMsg = null; - - private void error_proxy(string format, IntPtr va_args) - { - string text = NativeMethods.printf(format, va_args); - if (rptError != null) - rptError(text); - } - - private void debug_proxy(string format, IntPtr va_args) - { - string text = NativeMethods.printf(format, va_args); - if (rptDebug != null) - rptDebug(text); - } - - private void msg_proxy(string format, IntPtr va_args) - { - string text = NativeMethods.printf(format, va_args); - if (rptMsg != null) - rptMsg(text); - } - - private void InitReportFunctions() - { - NativeMethods.lame_set_errorf(context, error_proxy); - NativeMethods.lame_set_debugf(context, debug_proxy); - NativeMethods.lame_set_msgf(context, msg_proxy); - } - - /// Set reporting function for error output from LAME library - /// Reporting function - public void SetErrorFunc(ReportFunction fn) - { - rptError = fn; - } - - /// Set reporting function for debug output from LAME library - /// Reporting function - public void SetDebugFunc(ReportFunction fn) - { - rptDebug = fn; - } - - /// Set reporting function for message output from LAME library - /// Reporting function - public void SetMsgFunc(ReportFunction fn) - { - rptMsg = fn; - } - #endregion - - #region ID3 tag support - private static GenreCallback id3GenreCallback = null; - - private static void ID3Genre_proxy(int index, string genre, IntPtr cookie) - { - if (id3GenreCallback != null) - id3GenreCallback(index, genre); - } - -#if false // disabled for now, call ID3GenreList method instead - public void SetID3GenreCallback(GenreCallback fn) - { - id3GenreCallback = fn; - } -#endif - /// Utility to obtain a list of genre names with numbers - /// Dictionary containing genres - public static Dictionary ID3GenreList() - { - Dictionary res = new Dictionary(); - GenreCallback cbsave = id3GenreCallback; - id3GenreCallback = (idx, gen) => res[idx] = gen; - - NativeMethods.id3tag_genre_list(ID3Genre_proxy, IntPtr.Zero); - id3GenreCallback = null; - id3GenreCallback = cbsave; - return res; - } - - /// Initialize ID3 tag on context, clearing any existing ID3 information - public void ID3Init() - { - NativeMethods.id3tag_init(context); - } - - /// force addition of ID3v2 tag - public void ID3AddV2() - { - NativeMethods.id3tag_add_v2(context); - } - - /// add only a version 1 tag - public void ID3V1Only() - { - NativeMethods.id3tag_v1_only(context); - } - - /// add only a version 2 tag - public void ID3V2Only() - { - NativeMethods.id3tag_v2_only(context); - } - - /// pad version 1 tag with spaces instead of nulls - public void ID3SpaceV1() - { - NativeMethods.id3tag_space_v1(context); - } - - /// pad version 2 tag with extra 128 bytes - public void ID3PadV2() - { - NativeMethods.id3tag_pad_v2(context); - } - - /// pad version 2 tag with extra bytes - /// Number of bytes to pad - public void ID3SetPad(int nBytes) - { - NativeMethods.id3tag_set_pad(context, nBytes); - } - - /// Set ID3 title - /// Value to set - public void ID3SetTitle(string title) - { - NativeMethods.id3tag_set_title(context, title); - } - - public void ID3SetArtist(string artist) - { - NativeMethods.id3tag_set_artist(context, artist); - } - - public void ID3SetAlbum(string album) - { - NativeMethods.id3tag_set_album(context, album); - } - - /// Set year - /// Year value to set, as string - public void ID3SetYear(string year) - { - NativeMethods.id3tag_set_year(context, year); - } - - /// Set year - /// Year value to set, as integer - public void ID3SetYear(int year) - { - NativeMethods.id3tag_set_year(context, year.ToString()); - } - - public void ID3SetComment(string comment) - { - NativeMethods.id3tag_set_comment(context, comment); - } - - public bool ID3SetTrack(string track) - { - return !NativeMethods.id3tag_set_track(context, track); - } - - public int ID3SetGenre(string genre) - { - return NativeMethods.id3tag_set_genre(context, genre); - } - - public int ID3SetGenre(int genreIndex) - { - return NativeMethods.id3tag_set_genre(context, genreIndex.ToString()); - } - - public bool ID3SetFieldValue(string value) - { - return !NativeMethods.id3tag_set_fieldvalue(context, value); - } - - /// Set albumart of ID3 tag - /// raw image file data - /// True if successful, else false - /// Supported formats: JPG, PNG, GIF. - /// Max image size: 128KB - public bool ID3SetAlbumArt(byte[] image) - { - bool res = NativeMethods.id3tag_set_albumart(context, image, image.Length); - return !res; - } - - public byte[] ID3GetID3v1Tag() - { - int len = NativeMethods.id3tag_get_id3v1_tag(context, new byte[] { }, 0); - if (len < 1) - return null; - byte[] res = new byte[len]; - int rc = NativeMethods.id3tag_get_id3v1_tag(context, res, len); - if (rc != len) - return null; - return res; - } - - public byte[] ID3GetID3v2Tag() - { - int len = NativeMethods.id3tag_get_id3v2_tag(context, new byte[] { }, 0); - if (len < 1) - return null; - byte[] res = new byte[len]; - int rc = NativeMethods.id3tag_get_id3v2_tag(context, res, len); - if (rc != len) - return null; - return res; - } - - public bool ID3WriteTagAutomatic - { - get { return NativeMethods.id3tag_get_write_id3tag_automatic(context); } - set { NativeMethods.id3tag_set_write_id3tag_automatic(context, value); } - } - #endregion - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs.meta deleted file mode 100644 index cc10d98..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/LibMp3Lame.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 25462b0f0bcf3524ca3c94a387cc19a5 -timeCreated: 1492512880 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs deleted file mode 100644 index 8db0787..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs +++ /dev/null @@ -1,158 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2013 Corey Murtagh -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.Diagnostics; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Security; - -namespace NAudio.Lame -{ - /* - internal static class Loader - { - internal static bool Initialized = false; - internal static string LoadedName; - /// - /// / - /// - /// - /// - [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)] - public extern static IntPtr LoadLibrary(string libraryName); - - [DllImport("kernel32", SetLastError = true, CallingConvention = CallingConvention.Winapi)] - public extern static IntPtr GetProcAddress(IntPtr hwnd, string procedureName); - - private delegate bool IsWow64ProcessDelegate([In] IntPtr handle, [Out] out bool isWow64Process); - - public static bool IsOS64Bit() - { - if (IntPtr.Size == 8 || (IntPtr.Size == 4 && Is32BitProcessOn64BitProcessor())) - { - return true; - } - else - { - return false; - } - } - - private static IsWow64ProcessDelegate GetIsWow64ProcessDelegate() - { - IntPtr handle = LoadLibrary("kernel32"); - - if (handle != IntPtr.Zero) - { - IntPtr fnPtr = GetProcAddress(handle, "IsWow64Process"); - - if (fnPtr != IntPtr.Zero) - { - return (IsWow64ProcessDelegate)Marshal.GetDelegateForFunctionPointer((IntPtr)fnPtr, typeof(IsWow64ProcessDelegate)); - } - } - - return null; - } - - private static bool Is32BitProcessOn64BitProcessor() - { - IsWow64ProcessDelegate fnDelegate = GetIsWow64ProcessDelegate(); - - if (fnDelegate == null) - { - return false; - } - - bool isWow64; - bool retVal = fnDelegate.Invoke(Process.GetCurrentProcess().Handle, out isWow64); - - if (retVal == false) - { - return false; - } - - return isWow64; - } - //// - private static Assembly LoadLameWrapper(object sender, ResolveEventArgs args) - { - //Console.WriteLine("LoadLameWrapper(): {0}", args.Name); - - var asmName = new AssemblyName(args.Name).Name + ".dll"; - var srcAssembly = typeof(LameMP3FileWriter).Assembly; - - // Search resources for requested assembly - byte[] src = null; - foreach (string nxt in srcAssembly.GetManifestResourceNames()) - { - int p1 = nxt.IndexOf(IsOS64Bit() ? "x64" : "x86"); - int p2 = nxt.IndexOf(asmName); - - if (p1 < 0 || p2 < 0 || p1 >= p2) - continue; - - LoadedName = nxt; - - // Load resource into byte array - using (var strm = srcAssembly.GetManifestResourceStream(nxt)) - { - src = new byte[strm.Length]; - strm.Read(src, 0, (int)strm.Length); - break; - } - } - if (src == null) - return null; - - // Load assembly from byte array - //Console.WriteLine("Loaded {0} bytes from resource", src.Length); - try - { - var res = Assembly.Load(src, null, System.Security.Policy.Evidence.Equals() SecurityContextSource.CurrentAppDomain); - return res; - } - catch //(Exception e) - { - //Console.WriteLine("LoadLameWrapper: Failed to create assembly from buffer."); - //Console.WriteLine("Exception:"); - //Console.WriteLine("{0}", e.Message); - throw; - } - } - - public static void Init() - { - if (!Initialized) - { - // Register assembly resolver - AppDomain.CurrentDomain.AssemblyResolve += LoadLameWrapper; - Initialized = true; - } - } - } - */ -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs.meta deleted file mode 100644 index 4b5567d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/Loader.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a8bf5d81788fc044280dc57d5b39fe6b -timeCreated: 1492512880 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs deleted file mode 100644 index e75a28e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs +++ /dev/null @@ -1,714 +0,0 @@ -#region MIT license -// -// MIT license -// -// Copyright (c) 2013 Corey Murtagh -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -#endregion -using System; -using System.IO; -using System.Runtime.InteropServices; -using NAudio.Wave; -using LameDLLWrap; -using System.Collections.Generic; - -namespace NAudio.Lame -{ - /// LAME encoding presets - public enum LAMEPreset : int - { - /*values from 8 to 320 should be reserved for abr bitrates*/ - /*for abr I'd suggest to directly use the targeted bitrate as a value*/ - - /// 8-kbit ABR - ABR_8 = 8, - /// 16-kbit ABR - ABR_16 = 16, - /// 32-kbit ABR - ABR_32 = 32, - /// 48-kbit ABR - ABR_48 = 48, - /// 64-kbit ABR - ABR_64 = 64, - /// 96-kbit ABR - ABR_96 = 96, - /// 128-kbit ABR - ABR_128 = 128, - /// 160-kbit ABR - ABR_160 = 160, - /// 256-kbit ABR - ABR_256 = 256, - /// 320-kbit ABR - ABR_320 = 320, - - /*Vx to match Lame and VBR_xx to match FhG*/ - /// VBR Quality 9 - V9 = 410, - /// FhG: VBR Q10 - VBR_10 = 410, - /// VBR Quality 8 - V8 = 420, - /// FhG: VBR Q20 - VBR_20 = 420, - /// VBR Quality 7 - V7 = 430, - /// FhG: VBR Q30 - VBR_30 = 430, - /// VBR Quality 6 - V6 = 440, - /// FhG: VBR Q40 - VBR_40 = 440, - /// VBR Quality 5 - V5 = 450, - /// FhG: VBR Q50 - VBR_50 = 450, - /// VBR Quality 4 - V4 = 460, - /// FhG: VBR Q60 - VBR_60 = 460, - /// VBR Quality 3 - V3 = 470, - /// FhG: VBR Q70 - VBR_70 = 470, - /// VBR Quality 2 - V2 = 480, - /// FhG: VBR Q80 - VBR_80 = 480, - /// VBR Quality 1 - V1 = 490, - /// FhG: VBR Q90 - VBR_90 = 490, - /// VBR Quality 0 - V0 = 500, - /// FhG: VBR Q100 - VBR_100 = 500, - - /*still there for compatibility*/ - /// R3Mix quality - - R3MIX = 1000, - /// Standard Quality - STANDARD = 1001, - /// Extreme Quality - EXTREME = 1002, - /// Insane Quality - INSANE = 1003, - /// Fast Standard Quality - STANDARD_FAST = 1004, - /// Fast Extreme Quality - EXTREME_FAST = 1005, - /// Medium Quality - MEDIUM = 1006, - /// Fast Medium Quality - MEDIUM_FAST = 1007 - } - - /// Delegate for receiving output messages - /// Text to output - /// Output from the LAME library is very limited. At this stage only a few direct calls will result in output. No output is normally generated during encoding. - public delegate void OutputHandler(string text); - - /// Delegate for progress feedback from encoder - /// instance that the progress update is for - /// Total number of bytes passed to encoder - /// Total number of bytes written to output - /// True if encoding process is completed - public delegate void ProgressHandler(object writer, long inputBytes, long outputBytes, bool finished); - - /// MP3 encoding class, uses libmp3lame DLL to encode. - public class LameMP3FileWriter : Stream - { - /// Static initializer, ensures that the correct library is loaded - /* - static LameMP3FileWriter() - { - Loader.Init(); - } - */ - // Ensure that the Loader is initialized correctly - //static bool init_loader = Loader.Initialized; - - /// Union class for fast buffer conversion - /// - /// - /// Because of the way arrays work in .NET, all of the arrays will have the same - /// length value. To prevent unaware code from trying to read/write from out of - /// bounds, allocation is done at the grain of the Least Common Multiple of the - /// sizes of the contained types. In this case the LCM is 8 bytes - the size of - /// a double or a long - which simplifies allocation. - /// - /// This means that when you ask for an array of 500 bytes you will actually get - /// an array of 63 doubles - 504 bytes total. Any code that uses the length of - /// the array will see only 63 bytes, shorts, etc. - /// - /// CodeAnalysis does not like this class, with good reason. It should never be - /// exposed beyond the scope of the MP3FileWriter. - /// - /// - // uncomment to suppress CodeAnalysis warnings for the ArrayUnion class: - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Portability", "CA1900:ValueTypeFieldsShouldBePortable", Justification = "This design breaks portability, but is never exposed outside the class. Tested on x86 and x64 architectures.")] - [StructLayout(LayoutKind.Explicit)] - private class ArrayUnion - { - /// Length of the byte array - [FieldOffset(0)] - public readonly int nBytes; - - /// Array of unsigned 8-bit integer values, length will be misreported - [FieldOffset(16)] - public readonly byte[] bytes; - - /// Array of signed 16-bit integer values, length will be misreported - [FieldOffset(16)] - public readonly short[] shorts; - - /// Array of signed 32-bit integer values, length will be misreported - [FieldOffset(16)] - public readonly int[] ints; - - /// Array of signed 64-bit integer values, length will be correct - [FieldOffset(16)] - public readonly long[] longs; - - /// Array of signed 32-bit floating point values, length will be misreported - [FieldOffset(16)] - public readonly float[] floats; - - /// Array of signed 64-bit floating point values, length will be correct - /// This is the actual array allocated by the constructor - [FieldOffset(16)] - public readonly double[] doubles; - - // True sizes of the various array types, calculated from number of bytes - - /// Actual length of the 'shorts' member array - public int nShorts { get { return nBytes / 2; } } - /// Actual length of the 'ints' member array - public int nInts { get { return nBytes / 4; } } - /// Actual length of the 'longs' member array - public int nLongs { get { return nBytes / 8; } } - /// Actual length of the 'floats' member array - public int nFloats { get { return nBytes / 4; } } - /// Actual length of the 'doubles' member array - public int nDoubles { get { return doubles.Length; } } - - /// Initialize array to hold the requested number of bytes - /// Minimum byte count of array - /// - /// Since all arrays will have the same apparent count, allocation - /// is done on the array with the largest data type. This helps - /// to prevent out-of-bounds reads and writes by methods that do - /// not know about the union. - /// - public ArrayUnion(int reqBytes) - { - // Calculate smallest number of doubles required to store the - // requested byte count - int reqDoubles = (reqBytes + 7) / 8; - - this.doubles = new double[reqDoubles]; - this.nBytes = reqDoubles * 8; - } - - private ArrayUnion() - { - throw new Exception("Default constructor cannot be called for ArrayUnion"); - } - }; - - #region Properties - // LAME library context - private LibMp3Lame _lame; - - // Format of input wave data - private readonly WaveFormat inputFormat; - - // Output stream to write encoded data to - private Stream outStream; - - // Flag to control whether we should dispose of output stream - private bool disposeOutput = false; - #endregion - - #region Structors - /// Create MP3FileWriter to write to a file on disk - /// Name of file to create - /// Input WaveFormat - /// LAME quality preset - /// Optional ID3 data block - public LameMP3FileWriter(string outFileName, WaveFormat format, NAudio.Lame.LAMEPreset quality, ID3TagData id3 = null) - : this(File.Create(outFileName), format, quality, id3) - { - this.disposeOutput = true; - } - - /// Create MP3FileWriter to write to supplied stream - /// Stream to write encoded data to - /// Input WaveFormat - /// LAME quality preset - /// Optional ID3 data block - public LameMP3FileWriter(Stream outStream, WaveFormat format, NAudio.Lame.LAMEPreset quality, ID3TagData id3 = null) - : base() - { - //Loader.Init(); - //if (!Loader.Initialized) - // Loader.Initialized = false; - - // sanity check - if (outStream == null) - throw new ArgumentNullException("outStream"); - if (format == null) - throw new ArgumentNullException("format"); - - // check for unsupported wave formats - if (format.Channels != 1 && format.Channels != 2) - throw new ArgumentException(string.Format("Unsupported number of channels {0}", format.Channels), "format"); - if (format.Encoding != WaveFormatEncoding.Pcm && format.Encoding != WaveFormatEncoding.IeeeFloat) - throw new ArgumentException(string.Format("Unsupported encoding format {0}", format.Encoding.ToString()), "format"); - if (format.Encoding == WaveFormatEncoding.Pcm && format.BitsPerSample != 16) - throw new ArgumentException(string.Format("Unsupported PCM sample size {0}", format.BitsPerSample), "format"); - if (format.Encoding == WaveFormatEncoding.IeeeFloat && format.BitsPerSample != 32) - throw new ArgumentException(string.Format("Unsupported Float sample size {0}", format.BitsPerSample), "format"); - if (format.SampleRate < 8000 || format.SampleRate > 48000) - throw new ArgumentException(string.Format("Unsupported Sample Rate {0}", format.SampleRate), "format"); - - // select encoder function that matches data format - if (format.Encoding == WaveFormatEncoding.Pcm) - { - if (format.Channels == 1) - _encode = encode_pcm_16_mono; - else - _encode = encode_pcm_16_stereo; - } - else - { - if (format.Channels == 1) - _encode = encode_float_mono; - else - _encode = encode_float_stereo; - } - - // Set base properties - this.inputFormat = format; - this.outStream = outStream; - this.disposeOutput = false; - - // Allocate buffers based on sample rate - this.inBuffer = new ArrayUnion(format.AverageBytesPerSecond); - this.outBuffer = new byte[format.SampleRate * 5 / 4 + 7200]; - - // Initialize lame library - this._lame = new LibMp3Lame(); - - this._lame.InputSampleRate = format.SampleRate; - this._lame.NumChannels = format.Channels; - - this._lame.SetPreset((int)quality); - - if (id3 != null) - ApplyID3Tag(id3); - - this._lame.InitParams(); - } - - - /// Create MP3FileWriter to write to a file on disk - /// Name of file to create - /// Input WaveFormat - /// Output bit rate in kbps - /// Optional ID3 data block - public LameMP3FileWriter(string outFileName, WaveFormat format, int bitRate, ID3TagData id3 = null) - : this(File.Create(outFileName), format, bitRate, id3) - { - this.disposeOutput = true; - } - - /// Create MP3FileWriter to write to supplied stream - /// Stream to write encoded data to - /// Input WaveFormat - /// Output bit rate in kbps - /// Optional ID3 data block - public LameMP3FileWriter(Stream outStream, WaveFormat format, int bitRate, ID3TagData id3 = null) - : base() - { - //Loader.Init(); - //if (!Loader.Initialized) - // Loader.Initialized = false; - - // sanity check - if (outStream == null) - throw new ArgumentNullException("outStream"); - if (format == null) - throw new ArgumentNullException("format"); - - // check for unsupported wave formats - if (format.Channels != 1 && format.Channels != 2) - throw new ArgumentException(string.Format("Unsupported number of channels {0}", format.Channels), "format"); - if (format.Encoding != WaveFormatEncoding.Pcm && format.Encoding != WaveFormatEncoding.IeeeFloat) - throw new ArgumentException(string.Format("Unsupported encoding format {0}", format.Encoding.ToString()), "format"); - if (format.Encoding == WaveFormatEncoding.Pcm && format.BitsPerSample != 16) - throw new ArgumentException(string.Format("Unsupported PCM sample size {0}", format.BitsPerSample), "format"); - if (format.Encoding == WaveFormatEncoding.IeeeFloat && format.BitsPerSample != 32) - throw new ArgumentException(string.Format("Unsupported Float sample size {0}", format.BitsPerSample), "format"); - if (format.SampleRate < 8000 || format.SampleRate > 48000) - throw new ArgumentException(string.Format("Unsupported Sample Rate {0}", format.SampleRate), "format"); - - // select encoder function that matches data format - if (format.Encoding == WaveFormatEncoding.Pcm) - { - if (format.Channels == 1) - _encode = encode_pcm_16_mono; - else - _encode = encode_pcm_16_stereo; - } - else - { - if (format.Channels == 1) - _encode = encode_float_mono; - else - _encode = encode_float_stereo; - } - - // Set base properties - this.inputFormat = format; - this.outStream = outStream; - this.disposeOutput = false; - - // Allocate buffers based on sample rate - this.inBuffer = new ArrayUnion(format.AverageBytesPerSecond); - this.outBuffer = new byte[format.SampleRate * 5 / 4 + 7200]; - - // Initialize lame library - this._lame = new LibMp3Lame(); - - this._lame.InputSampleRate = format.SampleRate; - this._lame.NumChannels = format.Channels; - - this._lame.BitRate = bitRate; - - if (id3 != null) - ApplyID3Tag(id3); - - this._lame.InitParams(); - } - - - // Close LAME instance and output stream on dispose - /// Dispose of object - /// True if called from destructor, false otherwise - protected override void Dispose(bool final) - { - if (_lame != null && outStream != null) - Flush(); - - if (_lame != null) - { - _lame.Dispose(); - _lame = null; - } - - if (outStream != null && disposeOutput) - { - outStream.Dispose(); - outStream = null; - } - - base.Dispose(final); - } - #endregion - - /// Get internal LAME library instance - /// LAME library instance - public LibMp3Lame GetLameInstance() - { - return _lame; - } - - #region Internal encoder operations - // Input buffer - private ArrayUnion inBuffer = null; - - /// Current write position in input buffer - private int inPosition; - - /// Output buffer, size determined by call to Lame.beInitStream - protected byte[] outBuffer; - - long _inputByteCount = 0; - long _outputByteCount = 0; - - // encoder write functions, one for each supported input wave format - - private int encode_pcm_16_mono() - { - return _lame.Write(inBuffer.shorts, inPosition / 2, outBuffer, outBuffer.Length, true); - } - - private int encode_pcm_16_stereo() - { - return _lame.Write(inBuffer.shorts, inPosition / 2, outBuffer, outBuffer.Length, false); - } - - private int encode_float_mono() - { - return _lame.Write(inBuffer.floats, inPosition / 4, outBuffer, outBuffer.Length, true); - } - - private int encode_float_stereo() - { - return _lame.Write(inBuffer.floats, inPosition / 4, outBuffer, outBuffer.Length, false); - } - - // Selected encoding write function - delegate int delEncode(); - delEncode _encode = null; - - // Pass data to encoder - private void Encode() - { - // check if encoder closed - if (outStream == null || _lame == null) - throw new InvalidOperationException("Output Stream closed."); - - // If no data to encode, do nothing - if (inPosition < inputFormat.Channels * 2) - return; - - // send to encoder - int rc = _encode(); - - if (rc > 0) - { - outStream.Write(outBuffer, 0, rc); - _outputByteCount += rc; - } - - _inputByteCount += inPosition; - inPosition = 0; - - // report progress - RaiseProgress(false); - } - #endregion - - #region Stream implementation - /// Write-only stream. Always false. - public override bool CanRead { get { return false; } } - /// Non-seekable stream. Always false. - public override bool CanSeek { get { return false; } } - /// True when encoder can accept more data - public override bool CanWrite { get { return outStream != null && _lame != null; } } - - /// Dummy Position. Always 0. - public override long Position - { - get { return 0; } - set { throw new NotImplementedException(); } - } - - /// Dummy Length. Always 0. - public override long Length - { - get { return 0; } - } - - /// Add data to output buffer, sending to encoder when buffer full - /// Source buffer - /// Offset of data in buffer - /// Length of data - public override void Write(byte[] buffer, int offset, int count) - { - while (count > 0) - { - int blockSize = Math.Min(inBuffer.nBytes - inPosition, count); - Buffer.BlockCopy(buffer, offset, inBuffer.bytes, inPosition, blockSize); - - inPosition += blockSize; - count -= blockSize; - offset += blockSize; - - if (inPosition >= inBuffer.nBytes) - Encode(); - } - } - - /// Finalise compression, add final output to output stream and close encoder - public override void Flush() - { - // write remaining data - if (inPosition > 0) - Encode(); - - // finalize compression - int rc = _lame.Flush(outBuffer, outBuffer.Length); - if (rc > 0) - { - outStream.Write(outBuffer, 0, rc); - _outputByteCount += rc; - } - - // report progress - RaiseProgress(true); - - // Cannot continue after flush, so clear output stream - if (disposeOutput) - outStream.Dispose(); - outStream = null; - } - - /// Reading not supported. Throws NotImplementedException. - /// - /// - /// - /// - public override int Read(byte[] buffer, int offset, int count) - { - throw new NotImplementedException(); - } - - /// Setting length not supported. Throws NotImplementedException. - /// Length value - public override void SetLength(long value) - { - throw new NotImplementedException(); - } - - /// Seeking not supported. Throws NotImplementedException. - /// Seek offset - /// Seek origin - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotImplementedException(); - } - #endregion - - #region ID3 support - private void ApplyID3Tag(ID3TagData tag) - { - if (tag == null) - return; - - if (!string.IsNullOrEmpty(tag.Title)) - _lame.ID3SetTitle(tag.Title); - if (!string.IsNullOrEmpty(tag.Artist)) - _lame.ID3SetArtist(tag.Artist); - if (!string.IsNullOrEmpty(tag.Album)) - _lame.ID3SetAlbum(tag.Album); - if (!string.IsNullOrEmpty(tag.Year)) - _lame.ID3SetYear(tag.Year); - if (!string.IsNullOrEmpty(tag.Comment)) - _lame.ID3SetComment(tag.Comment); - if (!string.IsNullOrEmpty(tag.Genre)) - _lame.ID3SetGenre(tag.Genre); - if (!string.IsNullOrEmpty(tag.Track)) - _lame.ID3SetTrack(tag.Track); - - if (!string.IsNullOrEmpty(tag.Subtitle)) - _lame.ID3SetFieldValue(string.Format("TIT3={0}", tag.Subtitle)); - - if (!string.IsNullOrEmpty(tag.AlbumArtist)) - _lame.ID3SetFieldValue(string.Format("TPE2={0}", tag.AlbumArtist)); - - - if (tag.AlbumArt != null && tag.AlbumArt.Length > 0 && tag.AlbumArt.Length < 131072) - _lame.ID3SetAlbumArt(tag.AlbumArt); - } - - private static Dictionary _genres; - /// Dictionary of Genres supported by LAME's ID3 tag support - public static Dictionary Genres - { - get - { - if (_genres == null) - _genres = LibMp3Lame.ID3GenreList(); - return _genres; - } - } - #endregion - - #region LAME library print hooks - /// Set output function for Error output - /// Function to call for Error output - public void SetErrorFunction(OutputHandler fn) - { - GetLameInstance().SetErrorFunc(t => fn(t)); - } - - /// Set output function for Debug output - /// Function to call for Debug output - public void SetDebugFunction(OutputHandler fn) - { - GetLameInstance().SetMsgFunc(t => fn(t)); - } - - /// Set output function for Message output - /// Function to call for Message output - public void SetMessageFunction(OutputHandler fn) - { - GetLameInstance().SetMsgFunc(t => fn(t)); - } - - /// Get configuration of LAME context, results passed to Message function - public void PrintLAMEConfig() - { - GetLameInstance().PrintConfig(); - } - - /// Get internal settings of LAME context, results passed to Message function - public void PrintLAMEInternals() - { - GetLameInstance().PrintInternals(); - } - #endregion - - #region Progress event - int _minProgressTime = 100; - /// Minimimum time between progress events in ms, or 0 for no limit - /// Defaults to 100ms - public int MinProgressTime - { - get { return _minProgressTime; } - set - { - _minProgressTime = Math.Max(0, value); - } - } - - /// Called when data is written to the output file from Encode or Flush - public event ProgressHandler OnProgress; - - DateTime _lastProgress = DateTime.Now; - /// Call any registered OnProgress handlers - /// True if called at end of output - protected void RaiseProgress(bool finished) - { - var timeDelta = DateTime.Now - _lastProgress; - if (finished || timeDelta.TotalMilliseconds >= _minProgressTime) - { - _lastProgress = DateTime.Now; - var prog = OnProgress; - if (prog != null) - prog(this, _inputByteCount, _outputByteCount, finished); - } - } - #endregion - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs.meta deleted file mode 100644 index e4e1b57..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Encoder/MP3FileWriter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: dd29cf8ecdb4a1c4da54d1a9f5559bef -timeCreated: 1492512880 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut.meta deleted file mode 100644 index 07c5b3f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: cc572eb7215289d4998e2ebd1f2a2dbc -folderAsset: yes -timeCreated: 1488810210 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs deleted file mode 100644 index 4e067f7..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs +++ /dev/null @@ -1,218 +0,0 @@ -using UnityEngine; - -namespace FFmpegOut -{ - [RequireComponent(typeof(Camera))] - [AddComponentMenu("FFmpegOut/Camera Capture")] - public class CameraCapture : MonoBehaviour - { - #region Editable properties - - [SerializeField] bool _setResolution = true; - [SerializeField] int _width = 1280; - [SerializeField] int _height = 720; - [SerializeField] int _frameRate = 30; - [SerializeField] bool _allowSlowDown = true; - [SerializeField] public FFmpegPipe.Codec _codec; - - #endregion - - public void SetResolution(int w,int h) - { - _width = w; - _height = h; - } - - - #region Private members - - [SerializeField, HideInInspector] Shader _shader; - Material _material; - - FFmpegPipe _pipe; - float _elapsed; - - RenderTexture _tempTarget; - GameObject _tempBlitter; - - static int _activePipeCount; - - #endregion - - #region MonoBehavior functions - - public float recordTime; - private float updateIntervalTime; - private long CurrentFrameCount; - //private Camera RenderCamera; - void OnValidate() - { - - } - - void OnEnable() - { - if (!FFmpegConfig.CheckAvailable) - { - Debug.LogError( - "ffmpeg.exe is missing. " + - "Please refer to the installation instruction. " + - "https://github.com/keijiro/FFmpegOut" - ); - enabled = false; - } - updateIntervalTime = 1 / (float)_frameRate; - //Application.targetFrameRate = _frameRate; - //RenderCamera = GetComponent(); - SetResolution(Screen.width,Screen.height); - } - - void OnDisable() - { - if (_pipe != null) ClosePipe(); - } - - void OnDestroy() - { - if (_pipe != null) ClosePipe(); - } - - void Start() - { - _material = new Material(_shader); - //_frameRate = Application.targetFrameRate; - } - - public void StartCapture(string filename) - { - if (_pipe == null) OpenPipe(filename); - } - - public void StopCapture() - { - if (_pipe != null) ClosePipe(); - } - - - - void OnRenderImage(RenderTexture source, RenderTexture destination) - { - if (_pipe != null) - { - if ((Time.time - recordTime) / updateIntervalTime >= CurrentFrameCount) - { - var tempRT = RenderTexture.GetTemporary(source.width, source.height); - Graphics.Blit(source, tempRT, _material, 0); - - var tempTex = new Texture2D(source.width, source.height, TextureFormat.RGB24, false); - tempTex.ReadPixels(new Rect(0, 0, source.width, source.height), 0, 0, false); - tempTex.Apply(); - byte[] writeByte = tempTex.GetRawTextureData(); - _pipe.Write(writeByte); - - Destroy(tempTex); - RenderTexture.ReleaseTemporary(tempRT); - - CurrentFrameCount++; - } - } - - Graphics.Blit(source, destination); - } - - #endregion - - #region Private methods - - void OpenPipe(string filename) - { - if (_pipe != null) return; - - var camera = GetComponent(); - var width = _width; - var height = _height; - - // Apply the screen resolution settings. - if (_setResolution) - { - _tempTarget = RenderTexture.GetTemporary(width, height); - camera.targetTexture = _tempTarget; - _tempBlitter = Blitter.CreateGameObject(camera); - } - else - { - width = camera.pixelWidth; - height = camera.pixelHeight; - } - - // Open an output stream. - _pipe = new FFmpegPipe(filename, width, height, _frameRate, _codec); - _activePipeCount++; - - // Change the application frame rate on the first pipe. - if (_activePipeCount == 1) - { - if (_allowSlowDown) - Time.captureFramerate = _frameRate; - //else - //Application.targetFrameRate = _frameRate; - - } - recordTime = Time.time; - Debug.Log("Capture started (" + _pipe.Filename + ")"); - } - - void ClosePipe() - { - var camera = GetComponent(); - - // Destroy the blitter object. - if (_tempBlitter != null) - { - Destroy(_tempBlitter); - _tempBlitter = null; - } - - // Release the temporary render target. - if (_tempTarget != null && _tempTarget == camera.targetTexture) - { - camera.targetTexture = null; - RenderTexture.ReleaseTemporary(_tempTarget); - _tempTarget = null; - } - - // Close the output stream. - if (_pipe != null) - { - CurrentFrameCount = 0; - - Debug.Log("Capture ended (" + _pipe.Filename + ")"); - - StartCoroutine(_pipe.Close()); - _activePipeCount--; - - if (!string.IsNullOrEmpty(_pipe.Error)) - { - Debug.LogWarning( - "ffmpeg returned with a warning or an error message. " + - "See the following lines for details:\n" + _pipe.Error - ); - } - - _pipe = null; - - // Reset the application frame rate on the last pipe. - if (_activePipeCount == 0) - { - if (_allowSlowDown) - Time.captureFramerate = 0; - //else - //Application.targetFrameRate = -1; - //Application.targetFrameRate = _frameRate; - } - } - } - - #endregion - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs.meta deleted file mode 100644 index 87433ca..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/CameraCapture.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: a66fbd5ffe9b9d64da304996f1919f40 -timeCreated: 1488901810 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: - - _shader: {fileID: 4800000, guid: a4bd3b00ad1ed53458ec6ff07694985e, type: 3} - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor.meta deleted file mode 100644 index 5983dfc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ca9c13867ad2c7142a339af129c0f7d7 -folderAsset: yes -timeCreated: 1491148560 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs deleted file mode 100644 index 1606cca..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs +++ /dev/null @@ -1,57 +0,0 @@ -using UnityEngine; -using UnityEditor; - -namespace FFmpegOut -{ - [CanEditMultipleObjects] - [CustomEditor(typeof(CameraCapture))] - public class CameraCaptureEditor : Editor - { - SerializedProperty _setResolution; - SerializedProperty _width; - SerializedProperty _height; - SerializedProperty _frameRate; - SerializedProperty _allowSlowDown; - SerializedProperty _codec; - - static GUIContent [] _codecLabels = { - new GUIContent("ProRes (QuickTime)"), - new GUIContent("H.264 (MP4)"), - new GUIContent("VP8 (WebM)") - }; - - static int [] _codecOptions = { 0, 1, 2 }; - - void OnEnable() - { - _setResolution = serializedObject.FindProperty("_setResolution"); - _width = serializedObject.FindProperty("_width"); - _height = serializedObject.FindProperty("_height"); - _frameRate = serializedObject.FindProperty("_frameRate"); - _allowSlowDown = serializedObject.FindProperty("_allowSlowDown"); - _codec = serializedObject.FindProperty("_codec"); - } - - public override void OnInspectorGUI() - { - // Show the editor controls. - serializedObject.Update(); - - EditorGUILayout.PropertyField(_setResolution); - - if (_setResolution.hasMultipleDifferentValues || _setResolution.boolValue) - { - EditorGUI.indentLevel++; - EditorGUILayout.PropertyField(_width); - EditorGUILayout.PropertyField(_height); - EditorGUI.indentLevel--; - } - - EditorGUILayout.PropertyField(_frameRate); - EditorGUILayout.PropertyField(_allowSlowDown); - EditorGUILayout.IntPopup(_codec, _codecLabels, _codecOptions); - - serializedObject.ApplyModifiedProperties(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs.meta deleted file mode 100644 index 8dc5b52..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Editor/CameraCaptureEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5e125d1c67e59c444a1e722899c8a950 -timeCreated: 1491148560 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs deleted file mode 100644 index 003bd4d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs +++ /dev/null @@ -1,29 +0,0 @@ -using UnityEngine; - -namespace FFmpegOut -{ - public static class FFmpegConfig - { - public static string BinaryPath - { - get { - var basePath = Application.streamingAssetsPath + "/FFmpegOut"; - - if (Application.platform == RuntimePlatform.OSXPlayer || - Application.platform == RuntimePlatform.OSXEditor) - return basePath + "/OSX/ffmpeg"; - - if (Application.platform == RuntimePlatform.LinuxPlayer || - Application.platform == RuntimePlatform.LinuxEditor) - return basePath + "/Linux/ffmpeg"; - - return basePath + "/ffmpeg.exe"; - } - } - - public static bool CheckAvailable - { - get { return System.IO.File.Exists(BinaryPath); } - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs.meta deleted file mode 100644 index a12a99d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegConfig.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 663b63359cba0b647bb991893fc0c1ea -timeCreated: 1491122743 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs deleted file mode 100644 index c49f223..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs +++ /dev/null @@ -1,147 +0,0 @@ -using System.Diagnostics; -using System.IO; -using System; -using System.Collections.Generic; -using System.Threading; -using System.Collections; - -namespace FFmpegOut -{ - // A stream pipe class that invokes ffmpeg and connect to it. - public class FFmpegPipe - { - #region Public properties - - public enum Codec { ProRes, H264, VP8 } - - public string Filename { get; private set; } - public string Error { get; private set; } - - #endregion - - - List writeByteList; - static Thread thread; - - #region Public methods - - public FFmpegPipe(string name, int width, int height, int framerate, Codec codec) - { - //name += DateTime.Now.ToString(" yyyy MMdd HHmmss"); - //Filename = name.Replace(" ", "_") + GetSuffix(codec); - Filename = name + GetSuffix(codec); - var opt = "-y -f rawvideo -vcodec rawvideo -pixel_format rgb24"; - opt += " -video_size " + width + "x" + height; - opt += " -framerate " + framerate; - opt += " -loglevel warning -i - " + GetOptions(codec); - opt += " " + Filename; - - if (writeByteList == null) - writeByteList = new List(); - - writeByteList.Clear(); - GC.Collect(); - recording = true; - - var info = new ProcessStartInfo(FFmpegConfig.BinaryPath, opt); - info.UseShellExecute = false; - info.CreateNoWindow = true; - info.RedirectStandardInput = true; - info.RedirectStandardOutput = true; - info.RedirectStandardError = true; - - _subprocess = Process.Start(info); - _stdin = new BinaryWriter(_subprocess.StandardInput.BaseStream); - thread = new Thread(() => WriteStdin()); - thread.Start(); - } - - public void Write(byte[] data) - { - if (_subprocess == null) return; - - lock (writeByteList) - writeByteList.Add(data); - - //_stdin.Write(data); - //_stdin.Flush(); - } - - private static bool recording; - public void WriteStdin() - { - while (recording) - { - lock (_stdin) - { - lock (writeByteList) - { - while (writeByteList.Count > 0) - { - _stdin.Write(writeByteList[0]); - _stdin.Flush(); - writeByteList.RemoveAt(0); - } - } - } - - } - Thread.CurrentThread.Abort(); - } - - public IEnumerator Close() - { - if (_subprocess == null) yield break; - recording = false; - while (thread.IsAlive) - { - yield return null; - } - _subprocess.StandardInput.Close(); - _subprocess.WaitForExit(); - - var outputReader = _subprocess.StandardError; - Error = outputReader.ReadToEnd(); - - _subprocess.Close(); - _subprocess.Dispose(); - - outputReader.Close(); - outputReader.Dispose(); - - _subprocess = null; - _stdin = null; - } - - #endregion - - #region Private members - - Process _subprocess; - BinaryWriter _stdin; - - static string [] _suffixes = { - ".mov", - ".mp4", - ".webm" - }; - - static string [] _options = { - "-c:v prores_ks -pix_fmt yuv422p10le", - "-pix_fmt yuv420p", - "-c:v libvpx" - }; - - public static string GetSuffix(Codec codec) - { - return _suffixes[(int)codec]; - } - - static string GetOptions(Codec codec) - { - return _options[(int)codec]; - } - - #endregion - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs.meta deleted file mode 100644 index 9ed1550..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/FFmpegPipe.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fffc00cbe6345c64a8d3898031c46d8a -timeCreated: 1491121325 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal.meta deleted file mode 100644 index e29d5fa..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 88f8cafe5d48d4a4f89f22b10bbc64a4 -folderAsset: yes -timeCreated: 1491313768 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs deleted file mode 100644 index ac1a20f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs +++ /dev/null @@ -1,44 +0,0 @@ -using UnityEngine; - -namespace FFmpegOut -{ - // Simply blit a given texture to the screen. - [RequireComponent(typeof(Camera))] - internal class Blitter : MonoBehaviour - { - #region Static functions - - // A utility function for creating a blitter object. - public static GameObject CreateGameObject(Camera originalCamera) - { - var go = new GameObject("Blitter", _blitterComponents); - go.hideFlags = HideFlags.HideInHierarchy; - - var camera = go.GetComponent(); - camera.cullingMask = 0; - camera.targetDisplay = originalCamera.targetDisplay; - - var blitter = go.GetComponent(); - blitter._sourceTexture = originalCamera.targetTexture; - - return go; - } - - #endregion - - #region Private members - - static System.Type[] _blitterComponents = { - typeof(Camera), typeof(Blitter) - }; - - RenderTexture _sourceTexture; - - void OnRenderImage(RenderTexture source, RenderTexture destination) - { - Graphics.Blit(_sourceTexture, destination); - } - - #endregion - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs.meta deleted file mode 100644 index 23e50be..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Blitter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6dc134cd7da61a9438d65f309789d0d3 -timeCreated: 1491312926 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader.meta deleted file mode 100644 index ad545ef..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 3b9d23a6d19446d498b3ae54bae7b8fa -folderAsset: yes -timeCreated: 1488902130 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader deleted file mode 100644 index 3fff985..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader +++ /dev/null @@ -1,34 +0,0 @@ -Shader "Hidden/FFmpegOut/CameraCapture" -{ - Properties - { - _MainTex("", 2D) = "white" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - sampler2D _MainTex; - - fixed4 frag_flip(v2f_img i) : SV_Target - { - float2 uv = i.uv; - uv.y = 1 - uv.y; - return tex2D(_MainTex, uv); - } - - ENDCG - - SubShader - { - Cull Off ZWrite Off ZTest Always - Pass - { - CGPROGRAM - #pragma vertex vert_img - #pragma fragment frag_flip - ENDCG - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader.meta deleted file mode 100644 index 2756114..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/FFmpegOut/Internal/Shader/CameraCapture.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a4bd3b00ad1ed53458ec6ff07694985e -timeCreated: 1488901510 -licenseType: Pro -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs deleted file mode 100644 index 808f581..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs +++ /dev/null @@ -1,258 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using FFmpegOut; -using System; -using System.Diagnostics; -using System.IO; -using System.Threading; -using UnityEngine.UI; -using System.Linq; - -[RequireComponent(typeof(CameraCapture))] -[RequireComponent(typeof(AudioListenerRecorder))] -public class MovieRecorder : MonoBehaviour { - - //the most important is FPS ,take care if u do not want the mistake what happen to the audio and capture is not have synchronization - - private CameraCapture cameraCapture; - private AudioListenerRecorder audioListenerRecord; - private bool recording; - public bool IsRecord { get { return recording; } } - - #region Editable properties - [SerializeField] - private string fileName; - [SerializeField] - FFmpegPipe.Codec _codec; - [SerializeField] - public SaveAudio.Savetype saveAudioType; - [SerializeField] - private float RecordTime; - [SerializeField] - private bool reservedOriginal; - #endregion - - private float StartRecordTime; - - public delegate void RecordFinished(); - public static event RecordFinished FinishedEvent; - - #region UI - [SerializeField] - private RectTransform UIPanel; - [SerializeField] - private Text InputFileName; - [SerializeField] - private Text uiRecordTime; - [SerializeField] - private Toggle recordToggle; - [SerializeField] - private Dropdown mediaTypeDrop; - [SerializeField] - private Dropdown audioTypeDrop; - [SerializeField] - private Text InputWidth; - [SerializeField] - private Text InputHeight; - public string InputfileName { set { fileName = value; } } - private bool enableUI = false; - #endregion - - void Awake() - { - cameraCapture = GetComponent(); - audioListenerRecord = GetComponent(); - - if(UIPanel == null) - { - UIPanel = GameObject.Find("RecordUICanvas").transform.Find("Panel").GetComponent(); - } - if(UIPanel != null) - { - InputFileName = UIPanel.transform.Find("FileName").Find("InputField").GetComponent().textComponent; - uiRecordTime = UIPanel.transform.Find("RecordTime").GetChild(0).GetComponent(); - recordToggle = UIPanel.transform.Find("RecordToggle").GetComponent(); - mediaTypeDrop = UIPanel.transform.Find("MediaTypeDropdown").GetComponent(); - audioTypeDrop = UIPanel.transform.Find("AudioTypeDropdown").GetComponent(); - InputWidth = UIPanel.transform.Find("width").Find("InputField").GetComponent().textComponent; - InputHeight = UIPanel.transform.Find("height").Find("InputField").GetComponent().textComponent; - enableUI = false; - List mediaTypeOptions = new List(); - for (int i=0;i< (int)Enum.GetValues(typeof(FFmpegPipe.Codec)).Cast().Max() + 1;i++) - { - mediaTypeOptions.Add(new Dropdown.OptionData(((FFmpegPipe.Codec)i).ToString())); - } - mediaTypeDrop.AddOptions(mediaTypeOptions); - //mediaTypeDrop.onValueChanged.AddListener((v) => SetMediaType(v)); - List audioTypeOptions = new List(); - for (int i = 0; i < (int)Enum.GetValues(typeof(SaveAudio.Savetype)).Cast().Max()+1; i++) - { - audioTypeOptions.Add(new Dropdown.OptionData(((SaveAudio.Savetype)i).ToString())); - } - audioTypeDrop.AddOptions(audioTypeOptions); - //audioTypeDrop.onValueChanged.AddListener((v) => SetAudioType(v)); - } - UIPanel.gameObject.SetActive(enableUI); - } - - - // Use this for initialization - void Start () { - recording = false; - FinishedEvent += ShowReocrdTime; - } - - // Update is called once per frame - void Update () { - - if(Input.GetKeyDown(KeyCode.R)) - { - if(!recording) - { - fileName = DateTime.Now.ToString("yyyy-MMdd-HHmmss"); - StartRecord(fileName); - } - else - { - StopRecord(); - } - } - if (Input.GetKeyDown(KeyCode.F2)) - { - enableUI = !enableUI; - UIPanel.gameObject.SetActive(enableUI); - } - - - if (recording) - { - CountRecordTime(); - } - if(enableUI) - { - recordToggle.isOn = recording; - uiRecordTime.text = RecordTime.ToString(); - } - } - - void CountRecordTime() - { - RecordTime = Time.time - StartRecordTime; - } - - public void StartRecord(string filename) - { - if (recording) - return; - fileName = filename; - StartRecord(); - } - - public void StartRecord() - { - if (recording) - return; - if (enableUI) - { - fileName = InputFileName.text; - if(fileName == null || fileName == "") - fileName = DateTime.Now.ToString("yyyy-MMdd-HHmmss"); - - SetMediaType(mediaTypeDrop.value); - SetAudioType(audioTypeDrop.value); - int width; - int height; - if (Int32.TryParse(InputWidth.text, out width) && Int32.TryParse(InputHeight.text, out height)) - { - cameraCapture.SetResolution(width, height); - } - } - recording = true; - cameraCapture._codec = _codec; - audioListenerRecord.saveAudioType = saveAudioType; - cameraCapture.StartCapture("Tempmovie" + fileName); - audioListenerRecord.StartRecord("Tempaudio" + fileName); - StartRecordTime = Time.time; - } - - public void StopRecord() - { - if (!recording) - return; - CountRecordTime(); - cameraCapture.StopCapture(); - audioListenerRecord.StopRecord(); - StartCoroutine(StartCombine()); - recording = false; - } - - public void SetMediaType(int i) - { - _codec = (FFmpegPipe.Codec)i; - } - public void SetAudioType(int i) - { - saveAudioType = (SaveAudio.Savetype)i; - } - - IEnumerator StartCombine() - { - yield return new WaitForSeconds(0.5f); - - string Arguments = "-i " + "Tempmovie" + fileName + FFmpegPipe.GetSuffix(_codec) + - " -i " + "Tempaudio" + fileName + "." + audioListenerRecord.saveAudioType.ToString() + - " -c copy -map 0:0 -map 1:0 -ar " + audioListenerRecord.outputRate.ToString() + " " + fileName + FFmpegPipe.GetSuffix(_codec); - if (_codec == FFmpegPipe.Codec.H264 && audioListenerRecord.saveAudioType == SaveAudio.Savetype.wav) - Arguments = "-i " + "Tempmovie" + fileName + FFmpegPipe.GetSuffix(_codec) + - " -i " + "Tempaudio" + fileName + "." + audioListenerRecord.saveAudioType.ToString() + - " -c copy -map 0:0 -map 1:0 -acodec mp3 -vcodec copy -ar " + audioListenerRecord.outputRate.ToString() + " " + fileName + FFmpegPipe.GetSuffix(_codec); - - yield return ExcuteProcess(FFmpegConfig.BinaryPath, Arguments, (s, e) => print(e.Data)); - - if (!reservedOriginal) - { - File.Delete(Application.dataPath + "/../Tempmovie" + fileName + FFmpegPipe.GetSuffix(_codec)); - File.Delete(Application.dataPath + "/../Tempaudio" + fileName + "." +audioListenerRecord.saveAudioType.ToString()); - } - - if (FinishedEvent != null) - FinishedEvent(); - } - - void ShowReocrdTime() - { - print("RecordTime:" + RecordTime); - } - - - IEnumerator ExcuteProcess(string fileName, string arg, DataReceivedEventHandler output) - { - Thread WriteThread = new Thread(() => _ExcuteProcess(fileName, arg, output)); - WriteThread.Start(); - - while (WriteThread.IsAlive) - yield return null; - - } - - void _ExcuteProcess(string fileName, string arg, DataReceivedEventHandler output) - { - - using (var p = new Process()) - { - p.StartInfo.FileName = fileName; - p.StartInfo.Arguments = arg; - p.StartInfo.UseShellExecute = false; - p.StartInfo.CreateNoWindow = true; - p.StartInfo.RedirectStandardError = true; - p.StartInfo.RedirectStandardOutput = true; - p.OutputDataReceived += output; - p.ErrorDataReceived += output; - p.Start(); - p.BeginOutputReadLine(); - p.BeginErrorReadLine(); - p.WaitForExit(); - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs.meta deleted file mode 100644 index 485c20e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/MovieRecorder.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 1095e77e7b31753499738fac0dea2610 -timeCreated: 1492055352 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins.meta deleted file mode 100644 index 38661ea..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 14119dbedcc9e5c448c8146a15a0e88b -folderAsset: yes -timeCreated: 1492513047 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins/NAudio.dll b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins/NAudio.dll deleted file mode 100644 index 0a81726716021498dabff8e8c508837b26c3bf76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 401408 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 BQf2@E diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins/NAudio.dll.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins/NAudio.dll.meta deleted file mode 100644 index 6d3d2be..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/Plugins/NAudio.dll.meta +++ /dev/null @@ -1,25 +0,0 @@ -fileFormatVersion: 2 -guid: 61d3af59fa9054046bd93bbf9bfeaa32 -timeCreated: 1492513047 -licenseType: Pro -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - Any: - enabled: 1 - settings: {} - Editor: - enabled: 0 - settings: - DefaultValueInitialized: true - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab deleted file mode 100644 index 53cb9b0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab +++ /dev/null @@ -1,4097 +0,0 @@ -%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_ParentPrefab: {fileID: 0} - m_RootGameObject: {fileID: 1683477860202484} - m_IsPrefabParent: 1 ---- !u!1 &1046534023872206 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224978212606780970} - m_Layer: 5 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1053867868926598 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224430133987540698} - - component: {fileID: 222593529661460496} - - component: {fileID: 114255338424412804} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1071273511658648 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224136708758155110} - - component: {fileID: 222119216146662160} - - component: {fileID: 114641345758052252} - m_Layer: 5 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1114891166118942 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224917986537322898} - - component: {fileID: 222082099825021604} - - component: {fileID: 114389815384225456} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1116272002658940 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224309315879895698} - - component: {fileID: 222398817325617946} - - component: {fileID: 114798403468417846} - m_Layer: 5 - m_Name: Time - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1122039539439108 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224877248440474384} - - component: {fileID: 114876977076085766} - m_Layer: 5 - m_Name: Item - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1136734350191716 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224367983987252490} - - component: {fileID: 222006487930088898} - - component: {fileID: 114182606875202126} - m_Layer: 5 - m_Name: Item Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1146655228816972 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224661951961207604} - - component: {fileID: 222169746277937314} - - component: {fileID: 114748431494947150} - - component: {fileID: 114708852883859586} - m_Layer: 5 - m_Name: AudioTypeDropdown - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1156037266301788 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224978000126982346} - - component: {fileID: 222469912823031248} - - component: {fileID: 114868221367244812} - - component: {fileID: 114742734366898342} - m_Layer: 5 - m_Name: InputField - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1171495933492936 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224695010266021502} - - component: {fileID: 222686890273848612} - - component: {fileID: 114281223114531426} - - component: {fileID: 114077748150725256} - m_Layer: 5 - m_Name: StopRecordButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1194326070545732 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224371158476086740} - - component: {fileID: 222915711469505324} - - component: {fileID: 114095325106489608} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1194742888077830 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224036386431653190} - - component: {fileID: 114170680294214238} - - component: {fileID: 222007706455120890} - - component: {fileID: 114405193141465864} - m_Layer: 5 - m_Name: Viewport - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1205198839392206 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224535940185612886} - - component: {fileID: 222189462641508826} - - component: {fileID: 114226574336161986} - m_Layer: 5 - m_Name: width - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1205454069064386 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224343337714323566} - - component: {fileID: 222915937853727880} - - component: {fileID: 114056955898377254} - m_Layer: 5 - m_Name: Item Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1208655999314524 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224351146500051142} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1209999200843122 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224559175407133318} - - component: {fileID: 222020243885190668} - - component: {fileID: 114099107854363026} - - component: {fileID: 114825707329808734} - m_Layer: 5 - m_Name: Scrollbar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1222729158489494 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224633500127940814} - - component: {fileID: 222458881194464196} - - component: {fileID: 114410523750902432} - m_Layer: 5 - m_Name: FileName - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1223388733743224 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224424652463235604} - - component: {fileID: 222809320756377766} - - component: {fileID: 114379628466674502} - m_Layer: 5 - m_Name: Panel - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1273470284527834 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224356018411462194} - - component: {fileID: 222260356022017046} - - component: {fileID: 114647166756314526} - m_Layer: 5 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1278681269429138 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224010710242658290} - - component: {fileID: 222939621825280210} - - component: {fileID: 114147529689934280} - m_Layer: 5 - m_Name: Item Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1285287974518114 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224822666437801044} - - component: {fileID: 222773038544021408} - - component: {fileID: 114033847467111682} - m_Layer: 5 - m_Name: Item Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1319008405611144 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224083160386940978} - - component: {fileID: 222809068333485684} - - component: {fileID: 114601883818866216} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1335145532329742 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224569522200057044} - - component: {fileID: 222612771672125310} - - component: {fileID: 114788812521373876} - m_Layer: 5 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1346866193198636 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224378216432443654} - - component: {fileID: 222288253473505990} - - component: {fileID: 114779654440848942} - - component: {fileID: 114950229178183774} - m_Layer: 5 - m_Name: Template - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!1 &1365424548565418 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224657730803200132} - - component: {fileID: 114485887214570058} - m_Layer: 5 - m_Name: RecordToggle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1378521199301692 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224135309993760688} - - component: {fileID: 114528902097037526} - - component: {fileID: 222398322778389224} - - component: {fileID: 114338185181858346} - m_Layer: 5 - m_Name: Viewport - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1410875726181524 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224519098732573966} - - component: {fileID: 222138609473104568} - - component: {fileID: 114530496058363768} - m_Layer: 5 - m_Name: Placeholder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1425559644864892 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224225807032217706} - - component: {fileID: 222654125856886610} - - component: {fileID: 114750242749669068} - m_Layer: 5 - m_Name: RecordTime - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1466704086478742 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224612726749948988} - - component: {fileID: 222695757404378718} - - component: {fileID: 114048967036655052} - - component: {fileID: 114377830397789518} - m_Layer: 5 - m_Name: InputField - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1504838929722686 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224532209984060890} - m_Layer: 5 - m_Name: Content - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1611535003885486 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224397989296713888} - - component: {fileID: 222935324305847694} - - component: {fileID: 114082787451867642} - m_Layer: 5 - m_Name: Item Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1615151888271038 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224831829199822854} - - component: {fileID: 222163541359230918} - - component: {fileID: 114002951280555424} - m_Layer: 5 - m_Name: Placeholder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1615722501258778 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224478214273470164} - - component: {fileID: 222167218666973228} - - component: {fileID: 114865360280230468} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1622947744469346 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224359279674534530} - - component: {fileID: 222336695259681702} - - component: {fileID: 114986231427705664} - - component: {fileID: 114273955731409796} - m_Layer: 5 - m_Name: StartRecordButton - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1674267795944008 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224430135249139118} - - component: {fileID: 222623196383362590} - - component: {fileID: 114459953521014792} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1683477860202484 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224750055890552824} - - component: {fileID: 223970326773643042} - - component: {fileID: 114111608230438732} - - component: {fileID: 114027664712898318} - m_Layer: 5 - m_Name: RecordCanvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1718043064140678 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224551972182140916} - - component: {fileID: 222090939836976090} - - component: {fileID: 114835062998051974} - - component: {fileID: 114111054370847366} - m_Layer: 5 - m_Name: Scrollbar - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1760730277115454 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224183436407461898} - - component: {fileID: 222228502861741496} - - component: {fileID: 114219195812757004} - m_Layer: 5 - m_Name: Item Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1769716961495558 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224822186409420238} - m_Layer: 5 - m_Name: Sliding Area - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1776728768293572 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224337937757169404} - - component: {fileID: 222265661091479948} - - component: {fileID: 114543447033558644} - m_Layer: 5 - m_Name: height - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1784270305019782 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224911600951096290} - - component: {fileID: 222134767074369460} - - component: {fileID: 114375349523997916} - m_Layer: 5 - m_Name: Handle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1802008369016630 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224196978540988810} - - component: {fileID: 222193590101676760} - - component: {fileID: 114779313305812770} - m_Layer: 5 - m_Name: Placeholder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1810481247901286 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224031360883251300} - - component: {fileID: 222078791621233214} - - component: {fileID: 114752592194767684} - - component: {fileID: 114150924681350426} - m_Layer: 5 - m_Name: Template - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!1 &1817284180948944 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224931089488041446} - - component: {fileID: 114573729227398342} - m_Layer: 5 - m_Name: Item - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1880930781788236 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224553521047720506} - - component: {fileID: 222784346158662992} - - component: {fileID: 114754743962836890} - m_Layer: 5 - m_Name: Arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1903726991522894 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224865001473672088} - - component: {fileID: 222357358074655402} - - component: {fileID: 114912743825833776} - - component: {fileID: 114700176064776414} - m_Layer: 5 - m_Name: MediaTypeDropdown - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1925776657366602 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224067296964856838} - - component: {fileID: 222010682622104680} - - component: {fileID: 114691590056592400} - - component: {fileID: 114543735504840940} - m_Layer: 5 - m_Name: InputField - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1945272145171886 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224694046305952830} - - component: {fileID: 222204470525604338} - - component: {fileID: 114521704197507828} - m_Layer: 5 - m_Name: Background - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1972300622373212 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224972726501859066} - - component: {fileID: 222945716171019446} - - component: {fileID: 114593714273659410} - m_Layer: 5 - m_Name: Arrow - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1984940123108112 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224103957803610084} - - component: {fileID: 222518131569563116} - - component: {fileID: 114147838277581374} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &114002951280555424 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615151888271038} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 2 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Enter text... ---- !u!114 &114027664712898318 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1683477860202484} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: - serializedVersion: 2 - m_Bits: 4294967295 ---- !u!114 &114033847467111682 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1285287974518114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114048967036655052 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1466704086478742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114056955898377254 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1205454069064386} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114077748150725256 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1171495933492936} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114281223114531426} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: StopRecord - 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.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114082787451867642 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1611535003885486} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114095325106489608 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1194326070545732} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 0 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &114099107854363026 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1209999200843122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114111054370847366 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1718043064140678} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114255338424412804} - m_HandleRect: {fileID: 224430133987540698} - m_Direction: 2 - m_Value: 0 - m_Size: 0.2 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114111608230438732 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1683477860202484} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 ---- !u!114 &114147529689934280 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1278681269429138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Option A ---- !u!114 &114147838277581374 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1984940123108112} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 0 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &114150924681350426 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1810481247901286} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 224532209984060890} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 2 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 224036386431653190} - m_HorizontalScrollbar: {fileID: 0} - m_VerticalScrollbar: {fileID: 114825707329808734} - m_HorizontalScrollbarVisibility: 0 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: 0 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114170680294214238 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1194742888077830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!114 &114182606875202126 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1136734350191716} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Option A ---- !u!114 &114219195812757004 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1760730277115454} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114226574336161986 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1205198839392206} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'width: - -' ---- !u!114 &114255338424412804 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1053867868926598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114273955731409796 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1622947744469346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114986231427705664} - m_OnClick: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: StartRecord - m_Mode: 5 - 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.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114281223114531426 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1171495933492936} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114338185181858346 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378521199301692} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114375349523997916 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1784270305019782} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114377830397789518 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1466704086478742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114048967036655052} - m_TextComponent: {fileID: 114459953521014792} - m_Placeholder: {fileID: 114002951280555424} - m_ContentType: 0 - m_InputType: 0 - m_AsteriskChar: 42 - m_KeyboardType: 0 - m_LineType: 0 - m_HideMobileInput: 0 - m_CharacterValidation: 0 - m_CharacterLimit: 0 - m_OnEndEdit: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_CustomCaretColor: 0 - m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} - m_Text: - m_CaretBlinkRate: 0.85 - m_CaretWidth: 1 - m_ReadOnly: 0 ---- !u!114 &114379628466674502 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1223388733743224} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.378} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114389815384225456 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1114891166118942} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'StopRecord - - -' ---- !u!114 &114405193141465864 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1194742888077830} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114410523750902432 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1222729158489494} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'FileName: - -' ---- !u!114 &114459953521014792 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1674267795944008} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 0 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &114485887214570058 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1365424548565418} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114521704197507828} - toggleTransition: 1 - graphic: {fileID: 114601883818866216} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_IsOn: 0 ---- !u!114 &114521704197507828 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1945272145171886} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114528902097037526 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378521199301692} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_ShowMaskGraphic: 0 ---- !u!114 &114530496058363768 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1410875726181524} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 2 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Enter text... ---- !u!114 &114543447033558644 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1776728768293572} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'height: - -' ---- !u!114 &114543735504840940 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1925776657366602} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114691590056592400} - m_TextComponent: {fileID: 114095325106489608} - m_Placeholder: {fileID: 114530496058363768} - m_ContentType: 0 - m_InputType: 0 - m_AsteriskChar: 42 - m_KeyboardType: 0 - m_LineType: 0 - m_HideMobileInput: 0 - m_CharacterValidation: 0 - m_CharacterLimit: 0 - m_OnEndEdit: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_CustomCaretColor: 0 - m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} - m_Text: - m_CaretBlinkRate: 0.85 - m_CaretWidth: 1 - m_ReadOnly: 0 ---- !u!114 &114573729227398342 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1817284180948944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114219195812757004} - toggleTransition: 1 - graphic: {fileID: 114033847467111682} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_IsOn: 1 ---- !u!114 &114593714273659410 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1972300622373212} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114601883818866216 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1319008405611144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114641345758052252 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1071273511658648} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &114647166756314526 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1273470284527834} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'RecordState - -' ---- !u!114 &114691590056592400 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1925776657366602} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114700176064776414 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903726991522894} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 853051423, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114912743825833776} - m_Template: {fileID: 224378216432443654} - m_CaptionText: {fileID: 114641345758052252} - m_CaptionImage: {fileID: 0} - m_ItemText: {fileID: 114147529689934280} - m_ItemImage: {fileID: 0} - m_Value: 0 - m_Options: - m_Options: [] - m_OnValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 0} - m_MethodName: - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Dropdown+DropdownEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114708852883859586 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1146655228816972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 853051423, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114748431494947150} - m_Template: {fileID: 224031360883251300} - m_CaptionText: {fileID: 114788812521373876} - m_CaptionImage: {fileID: 0} - m_ItemText: {fileID: 114182606875202126} - m_ItemImage: {fileID: 0} - m_Value: 0 - m_Options: - m_Options: [] - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Dropdown+DropdownEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114742734366898342 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1156037266301788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114868221367244812} - m_TextComponent: {fileID: 114147838277581374} - m_Placeholder: {fileID: 114779313305812770} - m_ContentType: 0 - m_InputType: 0 - m_AsteriskChar: 42 - m_KeyboardType: 0 - m_LineType: 0 - m_HideMobileInput: 0 - m_CharacterValidation: 0 - m_CharacterLimit: 0 - m_OnEndEdit: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_CustomCaretColor: 0 - m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} - m_Text: - m_CaretBlinkRate: 0.85 - m_CaretWidth: 1 - m_ReadOnly: 0 ---- !u!114 &114748431494947150 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1146655228816972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114750242749669068 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1425559644864892} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0, g: 0, b: 0, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'RecordTime: - -' ---- !u!114 &114752592194767684 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1810481247901286} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114754743962836890 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1880930781788236} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114779313305812770 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1802008369016630} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 2 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Enter text... ---- !u!114 &114779654440848942 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1346866193198636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114788812521373876 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1335145532329742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &114798403468417846 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116272002658940} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 0 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: '0 - -' ---- !u!114 &114825707329808734 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1209999200843122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114375349523997916} - m_HandleRect: {fileID: 224911600951096290} - m_Direction: 2 - m_Value: 0 - m_Size: 0.2 - m_NumberOfSteps: 0 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114835062998051974 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1718043064140678} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114865360280230468 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615722501258778} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: 'StartRecord - -' ---- !u!114 &114868221367244812 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1156037266301788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114876977076085766 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1122039539439108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114056955898377254} - toggleTransition: 1 - graphic: {fileID: 114082787451867642} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_IsOn: 1 ---- !u!114 &114912743825833776 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903726991522894} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114950229178183774 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1346866193198636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Content: {fileID: 224978212606780970} - m_Horizontal: 0 - m_Vertical: 1 - m_MovementType: 2 - m_Elasticity: 0.1 - m_Inertia: 1 - m_DecelerationRate: 0.135 - m_ScrollSensitivity: 1 - m_Viewport: {fileID: 224135309993760688} - m_HorizontalScrollbar: {fileID: 0} - m_VerticalScrollbar: {fileID: 114111054370847366} - m_HorizontalScrollbarVisibility: 0 - m_VerticalScrollbarVisibility: 2 - m_HorizontalScrollbarSpacing: 0 - m_VerticalScrollbarSpacing: -3 - m_OnValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114986231427705664 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1622947744469346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!222 &222006487930088898 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1136734350191716} ---- !u!222 &222007706455120890 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1194742888077830} ---- !u!222 &222010682622104680 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1925776657366602} ---- !u!222 &222020243885190668 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1209999200843122} ---- !u!222 &222078791621233214 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1810481247901286} ---- !u!222 &222082099825021604 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1114891166118942} ---- !u!222 &222090939836976090 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1718043064140678} ---- !u!222 &222119216146662160 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1071273511658648} ---- !u!222 &222134767074369460 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1784270305019782} ---- !u!222 &222138609473104568 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1410875726181524} ---- !u!222 &222163541359230918 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615151888271038} ---- !u!222 &222167218666973228 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615722501258778} ---- !u!222 &222169746277937314 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1146655228816972} ---- !u!222 &222189462641508826 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1205198839392206} ---- !u!222 &222193590101676760 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1802008369016630} ---- !u!222 &222204470525604338 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1945272145171886} ---- !u!222 &222228502861741496 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1760730277115454} ---- !u!222 &222260356022017046 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1273470284527834} ---- !u!222 &222265661091479948 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1776728768293572} ---- !u!222 &222288253473505990 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1346866193198636} ---- !u!222 &222336695259681702 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1622947744469346} ---- !u!222 &222357358074655402 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903726991522894} ---- !u!222 &222398322778389224 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378521199301692} ---- !u!222 &222398817325617946 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116272002658940} ---- !u!222 &222458881194464196 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1222729158489494} ---- !u!222 &222469912823031248 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1156037266301788} ---- !u!222 &222518131569563116 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1984940123108112} ---- !u!222 &222593529661460496 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1053867868926598} ---- !u!222 &222612771672125310 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1335145532329742} ---- !u!222 &222623196383362590 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1674267795944008} ---- !u!222 &222654125856886610 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1425559644864892} ---- !u!222 &222686890273848612 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1171495933492936} ---- !u!222 &222695757404378718 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1466704086478742} ---- !u!222 &222773038544021408 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1285287974518114} ---- !u!222 &222784346158662992 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1880930781788236} ---- !u!222 &222809068333485684 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1319008405611144} ---- !u!222 &222809320756377766 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1223388733743224} ---- !u!222 &222915711469505324 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1194326070545732} ---- !u!222 &222915937853727880 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1205454069064386} ---- !u!222 &222935324305847694 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1611535003885486} ---- !u!222 &222939621825280210 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1278681269429138} ---- !u!222 &222945716171019446 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1972300622373212} ---- !u!223 &223970326773643042 -Canvas: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1683477860202484} - m_Enabled: 1 - serializedVersion: 2 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &224010710242658290 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1278681269429138} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224877248440474384} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 5, y: -0.5} - m_SizeDelta: {x: -30, y: -3} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224031360883251300 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1810481247901286} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224036386431653190} - - {fileID: 224559175407133318} - m_Father: {fileID: 224661951961207604} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 2} - m_SizeDelta: {x: 0, y: 150} - m_Pivot: {x: 0.5, y: 1} ---- !u!224 &224036386431653190 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1194742888077830} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224532209984060890} - m_Father: {fileID: 224031360883251300} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -18, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!224 &224067296964856838 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1925776657366602} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224519098732573966} - - {fileID: 224371158476086740} - m_Father: {fileID: 224337937757169404} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 4.4, y: 7.2} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224083160386940978 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1319008405611144} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224694046305952830} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224103957803610084 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1984940123108112} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224978000126982346} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224135309993760688 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1378521199301692} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224978212606780970} - m_Father: {fileID: 224378216432443654} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -18, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!224 &224136708758155110 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1071273511658648} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224865001473672088} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -7.5, y: -0.5} - m_SizeDelta: {x: -35, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224183436407461898 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1760730277115454} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224931089488041446} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224196978540988810 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1802008369016630} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224978000126982346} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224225807032217706 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1425559644864892} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224309315879895698} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 92.2, y: -186.5} - m_SizeDelta: {x: 160, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224309315879895698 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116272002658940} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224225807032217706} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 85.75, y: 0} - m_SizeDelta: {x: 160, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224337937757169404 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1776728768293572} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1.0000306, y: 1.0000306, z: 1.0000306} - m_Children: - - {fileID: 224067296964856838} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 583.11, y: -355.8} - m_SizeDelta: {x: 180, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224343337714323566 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1205454069064386} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224877248440474384} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224351146500051142 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1208655999314524} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224430133987540698} - m_Father: {fileID: 224551972182140916} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224356018411462194 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1273470284527834} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224657730803200132} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 9, y: -0.5} - m_SizeDelta: {x: -28, y: -3} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224359279674534530 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1622947744469346} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224478214273470164} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 85.7, y: -145} - m_SizeDelta: {x: 150, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224367983987252490 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1136734350191716} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224931089488041446} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 5, y: -0.5} - m_SizeDelta: {x: -30, y: -3} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224371158476086740 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1194326070545732} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224067296964856838} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224378216432443654 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1346866193198636} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224135309993760688} - - {fileID: 224551972182140916} - m_Father: {fileID: 224865001473672088} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 0, y: 2} - m_SizeDelta: {x: 0, y: 150} - m_Pivot: {x: 0.5, y: 1} ---- !u!224 &224397989296713888 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1611535003885486} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224877248440474384} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 10, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224424652463235604 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1223388733743224} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224633500127940814} - - {fileID: 224865001473672088} - - {fileID: 224661951961207604} - - {fileID: 224359279674534530} - - {fileID: 224695010266021502} - - {fileID: 224225807032217706} - - {fileID: 224657730803200132} - - {fileID: 224535940185612886} - - {fileID: 224337937757169404} - m_Father: {fileID: 224750055890552824} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 640, y: 480} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224430133987540698 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1053867868926598} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224351146500051142} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0.2} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224430135249139118 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1674267795944008} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224612726749948988} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224478214273470164 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615722501258778} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224359279674534530} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224519098732573966 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1410875726181524} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224067296964856838} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224532209984060890 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1504838929722686} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224931089488041446} - m_Father: {fileID: 224036386431653190} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 28} - m_Pivot: {x: 0.5, y: 1} ---- !u!224 &224535940185612886 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1205198839392206} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1.0000306, y: 1.0000306, z: 1.0000306} - m_Children: - - {fileID: 224612726749948988} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 7 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 583.5, y: -321.4} - m_SizeDelta: {x: 180, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224551972182140916 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1718043064140678} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224351146500051142} - m_Father: {fileID: 224378216432443654} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 0} - m_Pivot: {x: 1, y: 1} ---- !u!224 &224553521047720506 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1880930781788236} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224865001473672088} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -15, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224559175407133318 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1209999200843122} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224822186409420238} - m_Father: {fileID: 224031360883251300} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 0} - m_Pivot: {x: 1, y: 1} ---- !u!224 &224569522200057044 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1335145532329742} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224661951961207604} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -7.5, y: -0.5} - m_SizeDelta: {x: -35, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224612726749948988 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1466704086478742} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224831829199822854} - - {fileID: 224430135249139118} - m_Father: {fileID: 224535940185612886} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 4.31, y: 7.2} - m_SizeDelta: {x: 100, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224633500127940814 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1222729158489494} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224978000126982346} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 413, y: -288.3} - m_SizeDelta: {x: 160, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224657730803200132 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1365424548565418} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224694046305952830} - - {fileID: 224356018411462194} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 6 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 90.5, y: -205.7} - m_SizeDelta: {x: 160, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224661951961207604 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1146655228816972} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224569522200057044} - - {fileID: 224972726501859066} - - {fileID: 224031360883251300} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 88.21002, y: -109.2} - m_SizeDelta: {x: 160, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224694046305952830 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1945272145171886} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224083160386940978} - m_Father: {fileID: 224657730803200132} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 10, y: -10} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224695010266021502 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1171495933492936} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224917986537322898} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 237.6, y: -145} - m_SizeDelta: {x: 150, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224750055890552824 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1683477860202484} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_Children: - - {fileID: 224424652463235604} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!224 &224822186409420238 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1769716961495558} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224911600951096290} - m_Father: {fileID: 224559175407133318} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -20, y: -20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224822666437801044 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1285287974518114} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224931089488041446} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 10, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224831829199822854 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1615151888271038} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224612726749948988} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: -0.5} - m_SizeDelta: {x: -20, y: -13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224865001473672088 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1903726991522894} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224136708758155110} - - {fileID: 224553521047720506} - - {fileID: 224378216432443654} - m_Father: {fileID: 224424652463235604} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 88.21, y: -75.2} - m_SizeDelta: {x: 160, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224877248440474384 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1122039539439108} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224343337714323566} - - {fileID: 224397989296713888} - - {fileID: 224010710242658290} - m_Father: {fileID: 224978212606780970} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224911600951096290 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1784270305019782} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224822186409420238} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 0.2} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224917986537322898 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1114891166118942} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224695010266021502} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224931089488041446 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1817284180948944} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224183436407461898} - - {fileID: 224822666437801044} - - {fileID: 224367983987252490} - m_Father: {fileID: 224532209984060890} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224972726501859066 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1972300622373212} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 224661951961207604} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -15, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224978000126982346 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1156037266301788} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224196978540988810} - - {fileID: 224103957803610084} - m_Father: {fileID: 224633500127940814} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 88.4, y: 7.2} - m_SizeDelta: {x: 200, y: 30} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224978212606780970 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1046534023872206} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 224877248440474384} - m_Father: {fileID: 224135309993760688} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 28} - m_Pivot: {x: 0.5, y: 1} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab.meta deleted file mode 100644 index 0f4fb42..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordCanvas.prefab.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0b3e5ac109e03494e9b724109ea7c2ff -timeCreated: 1492409533 -licenseType: Pro -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs deleted file mode 100644 index c745299..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class RecordMic : MonoBehaviour { - - AudioClip myAudioClip; - - void OnGUI() - { - if (GUI.Button(new Rect(10, 10, 60, 50), "Record")) - { - myAudioClip = Microphone.Start(null, false, 10, 44100); - } - - if (GUI.Button(new Rect(10, 70, 60, 50), "Save")) - { - - for (int i = 1; ; i++) - if (System.IO.File.Exists("myfile")) - { - SaveAudio.Save("myfile" + i, myAudioClip); - } - else - { - SaveAudio.Save("myfile", myAudioClip); - // audio.Play(); - } - } - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs.meta deleted file mode 100644 index e627f53..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/RecordMic.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e592d334bb7598e4392c5c82db8d04e9 -timeCreated: 1491978737 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs deleted file mode 100644 index 00d1a8e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs +++ /dev/null @@ -1,310 +0,0 @@ -using System; -using System.IO; -using UnityEngine; -using System.Collections.Generic; -using NAudio.Wave; -using NAudio.Lame; - -public static class SaveAudio { - - public enum Savetype - { - wav, - mp3 - } - - //static int normalBitrate = 128; - //static int GoodBitrate = 320; - - static int HEADER_SIZE = 44; - //static int outputRate = 44100; - static int outputRate = 48000; - public static bool Save(string filename, AudioClip clip) - { - if (!filename.ToLower().EndsWith(".wav")) - { - filename += ".wav"; - } - - var filepath = Path.Combine(Application.persistentDataPath, filename); - - Debug.Log(filepath); - - // Make sure directory exists if user is saving to sub dir. - Directory.CreateDirectory(Path.GetDirectoryName(filepath)); - - using (var fileStream = CreateEmpty(filepath)) - { - - ConvertAndWrite(fileStream, clip); - - WriteHeader(fileStream, clip); - } - - return true; // TODO: return false if there's a failure saving the file - } - - public static AudioClip TrimSilence(AudioClip clip, float min) - { - var samples = new float[clip.samples]; - - clip.GetData(samples, 0); - - return TrimSilence(new List(samples), min, clip.channels, clip.frequency); - } - - public static AudioClip TrimSilence(List samples, float min, int channels, int hz) - { - return TrimSilence(samples, min, channels, hz, false, false); - } - - public static AudioClip TrimSilence(List samples, float min, int channels, int hz, bool _3D, bool stream) - { - int i; - - for (i = 0; i < samples.Count; i++) - { - if (Mathf.Abs(samples[i]) > min) - { - break; - } - } - - samples.RemoveRange(0, i); - - for (i = samples.Count - 1; i > 0; i--) - { - if (Mathf.Abs(samples[i]) > min) - { - break; - } - } - - samples.RemoveRange(i, samples.Count - i); - - var clip = AudioClip.Create("TempClip", samples.Count, channels, hz, stream); - - clip.SetData(samples.ToArray(), 0); - - return clip; - } - - public static FileStream CreateEmpty(string filepath) - { - var fileStream = new FileStream(filepath, FileMode.Create); - byte emptyByte = new byte(); - - for (int i = 0; i < HEADER_SIZE; i++) //preparing the header - { - fileStream.WriteByte(emptyByte); - } - - return fileStream; - } - - public static void ConvertAndWrite(FileStream fileStream, AudioClip clip) - { - - var samples = new float[clip.samples]; - - clip.GetData(samples, 0); - - Int16[] intData = new Int16[samples.Length]; - //converting in 2 float[] steps to Int16[], //then Int16[] to Byte[] - - Byte[] bytesData = new Byte[samples.Length * 2]; - //bytesData array is twice the size of - //dataSource array because a float converted in Int16 is 2 bytes. - - int rescaleFactor = 32767; //to convert float to Int16 - - for (int i = 0; i < samples.Length; i++) - { - intData[i] = (short)(samples[i] * rescaleFactor); - Byte[] byteArr = new Byte[2]; - byteArr = BitConverter.GetBytes(intData[i]); - byteArr.CopyTo(bytesData, i * 2); - } - - fileStream.Write(bytesData, 0, bytesData.Length); - } - - public static void ConvertAndWrite(FileStream fileStream,float[] dataSource ,Savetype type) - { - - Int16[] intData = new Int16[dataSource.Length]; - - Byte[] bytesData = new Byte[dataSource.Length * 2]; - - int rescaleFactor = 32767; - - for (int i = 0; i < dataSource.Length; i++) - { - intData[i] = (short)(dataSource[i] * rescaleFactor); - Byte[] byteArr = new Byte[2]; - byteArr = BitConverter.GetBytes(intData[i]); - byteArr.CopyTo(bytesData, i * 2); - } - - switch(type) - { - case Savetype.wav: - fileStream.Write(bytesData, 0, bytesData.Length); - break; - case Savetype.mp3: - if (lameMP3temp == null) - lameMP3temp = new LameMP3FileWriter(fileStream, new WaveFormat(), 128); - if (lameMP3temp !=null) - lameMP3temp.Write(bytesData, 0, bytesData.Length); - break; - default: - //fileStream.Write(bytesData, 0, bytesData.Length); - break; - } - } - private static LameMP3FileWriter lameMP3temp; - - public static void WriteHeader(FileStream fileStream, AudioClip clip) - { - - var hz = clip.frequency; - var channels = clip.channels; - var samples = clip.samples; - - fileStream.Seek(0, SeekOrigin.Begin); - - Byte[] riff = System.Text.Encoding.UTF8.GetBytes("RIFF"); - fileStream.Write(riff, 0, 4); - - Byte[] chunkSize = BitConverter.GetBytes(fileStream.Length - 8); - fileStream.Write(chunkSize, 0, 4); - - Byte[] wave = System.Text.Encoding.UTF8.GetBytes("WAVE"); - fileStream.Write(wave, 0, 4); - - Byte[] fmt = System.Text.Encoding.UTF8.GetBytes("fmt "); - fileStream.Write(fmt, 0, 4); - - Byte[] subChunk1 = BitConverter.GetBytes(16); - fileStream.Write(subChunk1, 0, 4); - - //UInt16 two = 2; - UInt16 one = 1; - - Byte[] audioFormat = BitConverter.GetBytes(one); - fileStream.Write(audioFormat, 0, 2); - - Byte[] numChannels = BitConverter.GetBytes(channels); - fileStream.Write(numChannels, 0, 2); - - Byte[] sampleRate = BitConverter.GetBytes(hz); - fileStream.Write(sampleRate, 0, 4); - - Byte[] byteRate = BitConverter.GetBytes(hz * channels * 2); // sampleRate * bytesPerSample*number of channels, here 44100*2*2 - fileStream.Write(byteRate, 0, 4); - - UInt16 blockAlign = (ushort)(channels * 2); - fileStream.Write(BitConverter.GetBytes(blockAlign), 0, 2); - - UInt16 bps = 16; - Byte[] bitsPerSample = BitConverter.GetBytes(bps); - fileStream.Write(bitsPerSample, 0, 2); - - Byte[] datastring = System.Text.Encoding.UTF8.GetBytes("data"); - fileStream.Write(datastring, 0, 4); - - Byte[] subChunk2 = BitConverter.GetBytes(samples * channels * 2); - fileStream.Write(subChunk2, 0, 4); - - // fileStream.Close(); - } - - public static void WriteHeader(FileStream fileStream, Savetype audiotype) - { - if(audiotype == Savetype.mp3) - { - lameMP3temp.Flush(); - lameMP3temp.Dispose(); - lameMP3temp.Close(); - fileStream.Close(); - lameMP3temp = null; - return; - } - - fileStream.Seek(0, SeekOrigin.Begin); - - Byte[] riff = System.Text.Encoding.UTF8.GetBytes("RIFF"); - fileStream.Write(riff, 0, 4); - - Byte[] chunkSize = BitConverter.GetBytes(fileStream.Length - 8); - fileStream.Write(chunkSize, 0, 4); - - Byte[] wave = System.Text.Encoding.UTF8.GetBytes("WAVE"); - fileStream.Write(wave, 0, 4); - - Byte[] fmt = System.Text.Encoding.UTF8.GetBytes("fmt "); - fileStream.Write(fmt, 0, 4); - - Byte[] subChunk1 = BitConverter.GetBytes(16); - fileStream.Write(subChunk1, 0, 4); - - UInt16 two = 2; - UInt16 one = 1; - - Byte[] audioFormat = BitConverter.GetBytes(one); - fileStream.Write(audioFormat, 0, 2); - - Byte[] numChannels = BitConverter.GetBytes(two); - fileStream.Write(numChannels, 0, 2); - outputRate = AudioSettings.GetConfiguration().sampleRate; - Byte[] sampleRate = BitConverter.GetBytes(outputRate); - fileStream.Write(sampleRate, 0, 4); - - Byte[] byteRate = BitConverter.GetBytes(outputRate * 4); - // sampleRate * bytesPerSample*number of channels, here 44100*2*2 - - fileStream.Write(byteRate, 0, 4); - - UInt16 four = 4; - Byte[] blockAlign = BitConverter.GetBytes(four); - fileStream.Write(blockAlign, 0, 2); - - UInt16 sixteen = 16; - Byte[] bitsPerSample = BitConverter.GetBytes(sixteen); - fileStream.Write(bitsPerSample, 0, 2); - - Byte[] dataString = System.Text.Encoding.UTF8.GetBytes("data"); - fileStream.Write(dataString, 0, 4); - - Byte[] subChunk2 = BitConverter.GetBytes(fileStream.Length - HEADER_SIZE); - - fileStream.Write(subChunk2, 0, 4); - - fileStream.Close(); - } - - /* - private static void ConvertAndWrite (AudioClip clip, string path, int bitRate, FileStream fileStream) - { - var samples = new float[fileStream.Length - HEADER_SIZE]; - - Int16[] intData = new Int16[samples.Length]; - //converting in 2 float[] steps to Int16[], //then Int16[] to Byte[] - - Byte[] bytesData = new Byte[samples.Length * 2]; - //bytesData array is twice the size of - //dataSource array because a float converted in Int16 is 2 bytes. - - float rescaleFactor = 32767; //to convert float to Int16 - - for (int i = 0; i < samples.Length; i++) { - intData [i] = (short)(samples [i] * rescaleFactor); - Byte[] byteArr = new Byte[2]; - byteArr = BitConverter.GetBytes (intData [i]); - byteArr.CopyTo (bytesData, i * 2); - } - - File.WriteAllBytes (path, ConvertWavToMp3 (bytesData,bitRate)); - } - */ -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs.meta deleted file mode 100644 index 4ab3524..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Recorder/SaveAudio.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ca80891a9df5a424fb61750ce464456e -timeCreated: 1491978927 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs deleted file mode 100644 index 7d14588..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class Singleton : MonoBehaviour where Instance : Singleton -{ - public bool isPersistant = true; - - public virtual void Awake() - { - if (instances == null) - instances = new Dictionary(); - - string scene_name = gameObject.scene.name; - - if (isPersistant) - { - if (instances.Count == 0) - { - instances.Add("", this as Instance); - DontDestroyOnLoad(gameObject); - } - else - { - DestroyObject(gameObject); - } - } - else - { - if (instances.ContainsKey(scene_name) == false) - instances.Add(scene_name, this as Instance); - } - } - - static Dictionary instances; - - /// - ///name = gameObject.scene.name - /// - public static Instance GetInstance(string name = "") - { - string key = instances.ContainsKey(name) ? name : ""; - return instances.ContainsKey(name) ? instances[key] : null; - } -} diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs.meta deleted file mode 100644 index 8b008eb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/Singleton.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 69dbab72da8940640a4ff2694874e81f -timeCreated: 1490325187 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls.meta deleted file mode 100644 index 23bc4be..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 595073269dd096c4b84c48b6d39ad419 -folderAsset: yes -timeCreated: 1493781850 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor.meta deleted file mode 100644 index d94ffcb..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 20964c15791526f42a8d6c5d8cddd918 -folderAsset: yes -timeCreated: 1493105094 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs deleted file mode 100644 index b36127c..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System; -using UnityEditor.SceneManagement; - -namespace UltraControls -{ - [CustomEditor(typeof(UltraGetter))] - [CanEditMultipleObjects] - [Serializable] - public class UltraGetterEditor : Editor - { - private UltraGetter m_master; - public SerializedProperty m_property_is_started; - public SerializedProperty m_property_name; - public SerializedProperty m_property_identifierInFile; - public SerializedProperty m_property_auto_load; - - void OnEnable() - { - if (m_master == null) - { - m_master = target as UltraGetter; - } - - m_property_is_started = serializedObject.FindProperty("m_is_started"); - m_property_name = serializedObject.FindProperty("m_name"); - //m_property_identifierInFile = serializedObject.FindProperty("m_identifierInFile"); - //m_property_auto_load = serializedObject.FindProperty("m_auto_load_after_finding_getter"); - } - - void OnDisable() - { - - } - - public override void OnInspectorGUI() - { - serializedObject.Update(); - - EditorGUILayout.PropertyField(m_property_is_started, new UnityEngine.GUIContent("Start")); - - - EditorGUI.BeginDisabledGroup(m_property_is_started.boolValue); - { - EditorGUILayout.PropertyField(m_property_name, new UnityEngine.GUIContent("Name")); - } - EditorGUI.EndDisabledGroup(); - - serializedObject.ApplyModifiedProperties(); - - m_master.is_start = m_property_is_started.boolValue; - - if (!m_master.is_start) - { - m_master.ultracontros_name = m_property_name.stringValue; - return; - } - - EditorGUILayout.Separator(); - - if (!Application.isPlaying) - { - m_master.UpdateByUltraGetterEditor(); - } - - }//OnInspectorGUI() - - }//UltraGetterEditor - -}//namespace UltraControls \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs.meta deleted file mode 100644 index 110a85e..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraGetterEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 66c9ef823e7d29e40b2f5a8bb9f30157 -timeCreated: 1494838478 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs deleted file mode 100644 index 981eaf0..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs +++ /dev/null @@ -1,160 +0,0 @@ -using UnityEngine; -using UnityEditor; -using System; -using UnityEditor.SceneManagement; - -namespace UltraControls -{ - [CustomEditor(typeof(UltraSetter))] - [CanEditMultipleObjects] - [Serializable] - public class UltraSetterEditor : Editor - { - private UltraSetter m_master; - public SerializedProperty m_property_is_started; - public SerializedProperty m_property_name; - public SerializedProperty m_property_identifierInFile; - public SerializedProperty m_property_auto_load; - - void OnEnable() - { - if (m_master == null) - { - m_master = target as UltraSetter; - } - - m_property_is_started = serializedObject.FindProperty("m_is_started"); - m_property_name = serializedObject.FindProperty("m_name"); - m_property_identifierInFile = serializedObject.FindProperty("m_identifierInFile"); - m_property_auto_load = serializedObject.FindProperty("m_auto_load_after_finding_getter"); - } - - void OnDisable() - { - - } - - public override void OnInspectorGUI() - { - bool is_modified = m_master.UpdateIdentifierInFile(); - if (is_modified) - { - EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene()); - } - - serializedObject.Update(); - - EditorGUI.BeginDisabledGroup(true); - EditorGUILayout.TextArea(m_master.filepath_settings); - EditorGUILayout.PropertyField(m_property_identifierInFile, new UnityEngine.GUIContent("IdentifierInFile")); - EditorGUI.EndDisabledGroup(); - - EditorGUILayout.PropertyField(m_property_is_started, new UnityEngine.GUIContent("Start")); - - - EditorGUI.BeginDisabledGroup(m_property_is_started.boolValue); - { - EditorGUILayout.PropertyField(m_property_name, new UnityEngine.GUIContent("Name")); - EditorGUILayout.PropertyField(m_property_auto_load, new UnityEngine.GUIContent("Auto Load")); - } - EditorGUI.EndDisabledGroup(); - - serializedObject.ApplyModifiedProperties(); - - m_master.is_start = m_property_is_started.boolValue; - - if (!m_master.is_start) - { - m_master.ultracontros_name = m_property_name.stringValue; - return; - } - - EditorGUILayout.Separator(); - - if (!Application.isPlaying) - { - m_master.UpdateByUltraSetterEditor(); - } - - Control[] controls = m_master.controls; - if (controls == null) - { - return; - } - - bool yes = EditorGUILayout.ToggleLeft("Save Settings", false); - if (yes) - { - m_master.SaveSettings(); - } - - yes = EditorGUILayout.ToggleLeft("Load Settings", false); - if (yes) - { - m_master.LoadSettings(); - } - - EditorGUILayout.Separator(); - - foreach (Control ctrl in controls) - { - switch(ctrl.ctrlType) - { - case CtrlType.Bool: - ctrl.valBool = EditorGUILayout.Toggle(ctrl.name, ctrl.valBool); - break; - - case CtrlType.Text: - ctrl.text = EditorGUILayout.TextField(ctrl.name, ctrl.text); - break; - - case CtrlType.Float: - if (ctrl.hasRange) - { - ctrl.valFloat = EditorGUILayout.Slider(ctrl.name, ctrl.valFloat, ctrl.minFloat, ctrl.maxFloat); - } - else - { - ctrl.valFloat = EditorGUILayout.FloatField(ctrl.name, ctrl.valFloat); - } - break; - - case CtrlType.Int: - if (ctrl.hasRange) - { - ctrl.valInt = (int)EditorGUILayout.Slider(ctrl.name, ctrl.valInt, ctrl.minInt, ctrl.maxInt); - } - else - { - ctrl.valInt = EditorGUILayout.IntField(ctrl.name, ctrl.valInt); - } - break; - - case CtrlType.Vec2F: - ctrl.valVector2 = EditorGUILayout.Vector2Field(ctrl.name, ctrl.valVector2); - break; - - case CtrlType.Vec3F: - ctrl.valVector3 = EditorGUILayout.Vector3Field(ctrl.name, ctrl.valVector3); - break; - - case CtrlType.Vec4F: - ctrl.valVector4 = EditorGUILayout.Vector4Field(ctrl.name, ctrl.valVector4); - break; - - case CtrlType.ColorF: - ctrl.valColor = EditorGUILayout.ColorField(ctrl.name, ctrl.valColor); - break; - - case CtrlType.Color: - ctrl.valColor32 = EditorGUILayout.ColorField(ctrl.name, ctrl.valColor32); - break; - - default: - break; - } - } - } - } - -}//namespace UltraControls \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs.meta deleted file mode 100644 index 004a4be..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Editor/UltraSetterEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 96b46e9b87a1f2b4782649d4e9c559d5 -timeCreated: 1493105169 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs deleted file mode 100644 index b3c2ec4..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs +++ /dev/null @@ -1,934 +0,0 @@ - -using System; -using System.Runtime.InteropServices; -using System.Reflection; - -namespace UltraControls -{ - public class ControlInfo - { - internal bool m_has_range; - internal Type m_type; - internal string m_name; - internal object m_value_default; - internal object m_value_min; - internal object m_value_max; - } - - public class Factroy - { - public static ControlInfo CreateInfo< T > (string name, T value) - { - Type type = typeof(T); - if (!Utils.IsSupport(type)) - { - return null; - } - - ControlInfo info = new ControlInfo(); - info.m_value_default = value; - info.m_type = type; - info.m_has_range = false; - info.m_name = name; - return info; - } - - public static ControlInfo CreateInfo(string name, T value, T min, T max) - { - Type type = typeof(T); - if (!Utils.IsSupport(type)) - { - return null; - } - - ControlInfo info = new ControlInfo(); - info.m_value_default = value; - info.m_type = type; - info.m_value_min = min; - info.m_value_max = max; - info.m_has_range = true; - info.m_name = name; - return info; - } - - } - - - - public class ParameterBase - { - internal Control m_ctrl; - internal PropertyInfo m_prop; - - public object val - { - set - { - m_prop.SetValue(m_ctrl, value, null); - } - - get - { - return m_prop.GetValue(m_ctrl, null); - } - } - } - - public class Parameter < T > : ParameterBase - { - internal Parameter(Control ctrl) - { - m_ctrl = ctrl; - string name_prop = ""; - Type type = typeof(T); - if (type != ctrl.realType) - { - throw new Exception("Control[" + ctrl.name + "]: ParamControl<" + type.ToString() + "> is not fit the type : " + ctrl.realType.ToString() + "."); - } - - if (type == typeof(string)) - { - name_prop = "text"; - } - else if (type == typeof(bool)) - { - name_prop = "valBool"; - } - else if (type == typeof(int)) - { - name_prop = "valInt"; - } - else if (type == typeof(float)) - { - name_prop = "valFloat"; - } - else if (type == typeof(UnityEngine.Vector2)) - { - name_prop = "valVector2"; - } - else if (type == typeof(UnityEngine.Vector3)) - { - name_prop = "valVector3"; - } - else if (type == typeof(UnityEngine.Vector4)) - { - name_prop = "valVector4"; - } - else if (type == typeof(UnityEngine.Color)) - { - name_prop = "valColor"; - } - else if (type == typeof(UnityEngine.Color32)) - { - name_prop = "valColor32"; - } - - if (name_prop == "") - { - throw new Exception("Control[" + ctrl.name + "]: ParamControl<" + type.ToString() + "> is not support."); - } - - m_prop = typeof(Control).GetProperty(name_prop); - if (m_prop == null) - { - throw new Exception("Control[" + ctrl.name + "]: The property[" + name_prop + "] of Control is not exist."); - } - } - } - - public class ParamSetter< T > - { - private Parameter m_param; - internal ParamSetter(Parameter param) - { - m_param = param; - } - - public T val - { - set - { - m_param.val = value; - } - } - } - - public class ParamGetter - { - private Parameter m_param; - internal ParamGetter(Parameter param) - { - m_param = param; - } - - public T val - { - get - { - return (T)m_param.val; - } - } - } - - public enum CtrlType: uint - { - Bool = 0, - Event = 1, - Float = 10, - Text = 100, - Int = 200, - Vec2F = 500, - Vec3F = 510, - Vec4F = 520, - Color = 600, - ColorF = 610, - Mat33F = 900, - Mat44F = 950, - Unknown = 0xDEADBEEF - } - - [StructLayout(LayoutKind.Sequential)] - public struct RawCtrl - { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] - public string name; - public uint type; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 236)] - public byte[] data; - } - - [StructLayout(LayoutKind.Sequential)] - public sealed class CtrlValues - { - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public float[] val; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public float[] min; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public float[] max; - } - - public sealed class Control - { - [Flags] - enum DirtyFlag - { - None = 0x00, - Data = 0x01, - Values = 0x02, - All = Data | Values, - } - - [Flags] - enum FeatureFlag - { - None = 0x00, - HasRange = 0x01, - IsAlive = 0x02, - } - - private string m_name; - private CtrlType m_type; - private byte[] m_data; - private CtrlValues m_values; - private string m_text; - private DirtyFlag m_dirty; - private FeatureFlag m_feature; - private Type m_realType; - - internal Control(ref RawCtrl raw_ctrl) - { - m_name = raw_ctrl.name; - m_type = (CtrlType)raw_ctrl.type; - m_data = raw_ctrl.data; - m_feature = FeatureFlag.IsAlive; - if (m_type == CtrlType.Text) - { - int count = 0; - while (m_data[count] != 0) - { - ++count; - } - - m_text = System.Text.Encoding.UTF8.GetString(m_data, 0, count); - m_realType = typeof(string); - } - else - { - m_values = Utils.BytesToStructure(m_data); - bool has_range = !(m_values.min[0] == 0.0f && m_values.min[1] == 0.0f && m_values.min[2] == 0.0f && m_values.min[3] == 0.0f && - m_values.max[0] == 0.0f && m_values.max[1] == 0.0f && m_values.max[2] == 0.0f && m_values.max[3] == 0.0f); - - if (has_range) - { - m_feature |= FeatureFlag.HasRange; - } - - switch (m_type) - { - case CtrlType.Bool: m_realType = typeof(bool); break; - case CtrlType.Float: m_realType = typeof(float); break; - case CtrlType.Int: m_realType = typeof(int); break; - case CtrlType.Vec2F: m_realType = typeof(UnityEngine.Vector2); break; - case CtrlType.Vec3F: m_realType = typeof(UnityEngine.Vector3); break; - case CtrlType.Vec4F: m_realType = typeof(UnityEngine.Vector4); break; - case CtrlType.Color: m_realType = typeof(UnityEngine.Color32); break; - case CtrlType.ColorF: m_realType = typeof(UnityEngine.Color); break; - - default: - UnityEngine.Debug.LogError("The type is not support"); - break; - } - } - - m_dirty = DirtyFlag.None; - } - - public void Die() - { - m_feature &= ~FeatureFlag.IsAlive; - } - - public bool IsValue() { return m_values != null; } - public bool IsBool() { return m_type == CtrlType.Bool; } - public bool IsFloat() { return m_type == CtrlType.Float; } - public bool IsString() { return m_type == CtrlType.Text; } - public bool IsInt() { return m_type == CtrlType.Int; } - public bool IsVector2() { return m_type == CtrlType.Vec2F; } - public bool IsVector3() { return m_type == CtrlType.Vec3F; } - public bool IsVector4() { return m_type == CtrlType.Vec4F; } - public bool IsColor32() { return m_type == CtrlType.Color; } - public bool IsColor() { return m_type == CtrlType.ColorF; } - //public bool IsEvent() { return m_type == CtrlType.Event; } - //public bool IsMatrix4x4() { return m_type == CtrlType.Mat44F; } - - public ParamSetter CreateParamSetter() - { - Parameter param = mf_CreateParam(); - if (param == null) - { - return null; - } - - return new ParamSetter(param); - } - - public ParamGetter CreateParamGetter() - { - Parameter param = mf_CreateParam(); - if (param == null) - { - return null; - } - - return new ParamGetter(param); - } - - public void UpdateDirty() - { - //if (m_dirty == DirtyFlag.None) - //{ - // return; - //} - // - if (IsValue()) - { - if ((m_dirty & DirtyFlag.Values) != 0) - { - Utils.StructureToBytes(m_values, m_data); - } - } - else - { - Array.Clear(m_data, 0, m_data.Length); - byte[] bytes = System.Text.Encoding.ASCII.GetBytes(m_text); - Buffer.BlockCopy(bytes, 0, m_data, 0, Math.Min(bytes.Length, m_data.Length)); - m_data[m_data.Length - 1] = 0; - } - - m_dirty = DirtyFlag.None; - } - - public CtrlType ctrlType - { - get { return m_type; } - } - - public Type realType - { - get { return m_realType; } - } - - public bool isDirty - { - get - { - return m_dirty != DirtyFlag.None; - } - } - - public bool isAlive - { - get - { - return (m_feature & FeatureFlag.IsAlive) != 0; - } - } - - public bool hasRange - { - get - { - return (m_feature & FeatureFlag.HasRange) != 0; - } - } - - - public string name - { - get - { - return m_name; - } - } - - public bool valBool - { - set - { - if (!IsValue()) - { - mf_TraceWarning("set valBool - is not value!!!"); - return; - } - - m_values.val[0] = value? 1.0f: 0.0f; - m_dirty |= DirtyFlag.All; - } - - get - { - if (!IsValue()) - { - mf_TraceWarning("get valBool - is not value!!!"); - return false; - } - - return m_values.val[0] > 0.0f? true: false; - } - } - - public string text - { - set - { - if (!IsString()) - { - mf_TraceWarning("set text - is not string!!!"); - return; - } - - m_text = value; - m_dirty |= DirtyFlag.Data; - } - - get - { - if (!IsString()) - { - mf_TraceWarning("get text - is not string!!!"); - return ""; - } - - return m_text; - } - } - - public float valFloat - { - set - { - if (!IsValue()) - { - mf_TraceWarning("set valFloat - is not value!!!"); - return; - } - - m_values.val[0] = value; - m_dirty |= DirtyFlag.All; - } - - get - { - if (!IsValue()) - { - mf_TraceWarning("get valFloat - is not value!!!"); - return 0.0f; - } - - return m_values.val[0]; - } - } - - public float minFloat - { - set - { - if (!IsValue()) - { - mf_TraceWarning("set minFloat - is not value!!!"); - return; - } - - m_values.min[0] = value; - m_dirty |= DirtyFlag.All; - } - - get - { - if (!IsValue()) - { - mf_TraceWarning("get minFloat - is not value!!!"); - return 0.0f; - } - - return m_values.min[0]; - } - } - - public float maxFloat - { - set - { - if (!IsValue()) - { - mf_TraceWarning("set maxFloat - is not value!!!"); - return; - } - - m_values.min[0] = value; - m_dirty |= DirtyFlag.All; - } - - get - { - if (!IsValue()) - { - mf_TraceWarning("get maxFloat - is not value!!!"); - return 0.0f; - } - - return m_values.max[0]; - } - } - - public int valInt - { - set - { - if (!IsValue()) - { - mf_TraceWarning("set valInt - is not value!!!"); - return; - } - - m_values.val[0] = value; - m_dirty |= DirtyFlag.All; - } - - get - { - if (!IsValue()) - { - mf_TraceWarning("get valInt - is not value!!!"); - return 0; - } - - return (int)m_values.val[0]; - } - } - - public int minInt - { - set - { - if (!IsValue()) - { - mf_TraceWarning("set minInt - is not value!!!"); - return; - } - - m_values.min[0] = value; - m_dirty |= DirtyFlag.All; - } - - get - { - if (!IsValue()) - { - mf_TraceWarning("get minInt - is not value!!!"); - return 0; - } - - return (int)m_values.min[0]; - } - } - - public int maxInt - { - set - { - if (!IsValue()) - { - mf_TraceWarning("set maxInt - is not value!!!"); - return; - } - - m_values.min[0] = value; - m_dirty |= DirtyFlag.All; - } - - get - { - if (!IsValue()) - { - mf_TraceWarning("get maxFloat - is not value!!!"); - return 0; - } - - return (int)m_values.max[0]; - } - } - - public UnityEngine.Vector2 valVector2 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec2(value, m_values.val); - } - - get - { - return IsValue() ? mf_GetVec2(m_values.val) : UnityEngine.Vector2.zero; - } - } - - public UnityEngine.Vector2 minVector2 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec2(value, m_values.min); - } - - get - { - return IsValue() ? mf_GetVec2(m_values.min) : UnityEngine.Vector2.zero; - } - } - - public UnityEngine.Vector2 maxVector2 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec2(value, m_values.max); - } - - get - { - return IsValue() ? mf_GetVec2(m_values.max) : UnityEngine.Vector2.zero; - } - } - - public UnityEngine.Vector3 valVector3 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec3(value, m_values.val); - } - - get - { - return IsValue() ? mf_GetVec3(m_values.val) : UnityEngine.Vector3.zero; - } - } - - public UnityEngine.Vector3 minVector3 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec3(value, m_values.min); - } - - get - { - return IsValue() ? mf_GetVec3(m_values.min) : UnityEngine.Vector3.zero; - } - } - - public UnityEngine.Vector3 maxVector3 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec3(value, m_values.max); - } - - get - { - return IsValue() ? mf_GetVec3(m_values.max) : UnityEngine.Vector3.zero; - } - } - - public UnityEngine.Vector4 valVector4 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec4(value, m_values.val); - } - - get - { - return IsValue() ? mf_GetVec4(m_values.val) : UnityEngine.Vector4.zero; - } - } - - public UnityEngine.Vector4 minVector4 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec4(value, m_values.min); - } - - get - { - return IsValue() ? mf_GetVec4(m_values.min) : UnityEngine.Vector4.zero; - } - } - - public UnityEngine.Vector4 maxVector4 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetVec4(value, m_values.max); - } - - get - { - return IsValue() ? mf_GetVec4(m_values.max): UnityEngine.Vector4.zero; - } - } - - public UnityEngine.Color valColor - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetColor(value, m_values.val); - } - - get - { - return IsValue() ? mf_GetColor(m_values.val) : UnityEngine.Color.black; - } - } - - public UnityEngine.Color32 valColor32 - { - set - { - if (!IsValue()) - { - return; - } - - mf_SetColor32(value); - } - - get - { - if (IsValue()) - { - return new UnityEngine.Color32(m_data[0], m_data[1], m_data[2], m_data[3]); - } - else - { - return new UnityEngine.Color32(0, 0, 0, 0); - } - } - } - - public byte[] data - { - set - { - m_data = value; - if (m_type == CtrlType.Text) - { - int count = 0; - while (m_data[count] != 0) - { - ++count; - } - - m_text = System.Text.Encoding.UTF8.GetString(m_data, 0, count); - } - else - { - m_values = Utils.BytesToStructure(m_data); - } - } - - get - { - UpdateDirty(); - return m_data; - } - } - - private void mf_SetVec2(UnityEngine.Vector2 vec2, float[] ary_f) - { - Utils.SetVec2(vec2, ary_f); - m_dirty |= DirtyFlag.All; - } - - private void mf_SetVec3(UnityEngine.Vector3 vec3, float[] ary_f) - { - Utils.SetVec3(vec3, ary_f); - m_dirty |= DirtyFlag.All; - } - - private void mf_SetVec4(UnityEngine.Vector4 vec4, float[] ary_f) - { - Utils.SetVec4(vec4, ary_f); - m_dirty |= DirtyFlag.All; - } - - private void mf_SetColor(UnityEngine.Color clr, float[] ary_f) - { - Utils.SetColor(clr, ary_f); - m_dirty |= DirtyFlag.All; - } - - private void mf_SetColor32(UnityEngine.Color32 clr32) - { - Utils.SetColor32(clr32, m_data); - m_dirty |= DirtyFlag.Data; - } - - private UnityEngine.Vector2 mf_GetVec2(float[] ary_f) { return new UnityEngine.Vector2(ary_f[0], ary_f[1]); } - private UnityEngine.Vector3 mf_GetVec3(float[] ary_f) { return new UnityEngine.Vector3(ary_f[0], ary_f[1], ary_f[2]); } - private UnityEngine.Vector4 mf_GetVec4(float[] ary_f) { return new UnityEngine.Vector4(ary_f[0], ary_f[1], ary_f[2], ary_f[3]); } - private UnityEngine.Color mf_GetColor(float[] ary_f) { return new UnityEngine.Color(ary_f[0], ary_f[1], ary_f[2], ary_f[3]); } - - private void mf_TraceWarning(string msg) - { - UnityEngine.Debug.LogWarning("[WARNING] UltraControls::Control name = " + m_name + " : " + msg); - } - - private Parameter mf_CreateParam() - { - Parameter param; - try - { - param = new Parameter(this); - } - catch (Exception ex) - { - UnityEngine.Debug.LogError("UltraControls::Control[" + m_name + "] CreateParam(): " + ex.Message); - param = null; - } - return param; - } - } - - public sealed class NativeLib - { - //Imports - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpInitLib")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpInitLib")] - public static extern int Init(); - - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpTermLib")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpTermLib")] - public static extern void Term(); - - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpCreateHandle")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpCreateHandle")] - public static extern int CreateHandle([In] string in_name, [In] uint in_max_num_ctrls, [Out] out uint out_handle); - - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpDestroyHandle")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpCreateHandle")] - public static extern int DestroyHandle([In] uint in_handle); - - //[Setter]/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpFindGetter")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpFindGetter")] - public static extern int FindGetter([In] uint in_handle, [In, Out] RawCtrl[] out_p_ary, [In] uint in_max_cnt, [Out] out uint out_p_cnt); - - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpSetControls")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpSetControls")] - public static extern int SetControls([In] uint in_handle, [In, Out] RawCtrl[] in_p_ary, [In] uint in_max_cnt); - - //[Getter]/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpCreateGetter")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpCreateGetter")] - public static extern int CreateGetter([In] uint in_handle, [In] RawCtrl[] out_p_ary, [In] uint in_max_cnt); - - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpGetControls")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpGetControls")] - public static extern int GetControls([In] uint in_handle, [In, Out] RawCtrl[] out_p_ary, [In] uint in_max_cnt, [Out] out uint out_p_cnt); - - [DllImport("NativeUltraControlsPluginD", EntryPoint = "nucpCheckControls")] - //[DllImport("NativeUltraControlsPlugin", EntryPoint = "nucpCheckControls")] - public static extern int CheckControls([In] uint in_handle, [In, Out] RawCtrl[] out_p_ary, [In] uint in_max_cnt, [Out] out uint out_p_cnt); - } -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs.meta deleted file mode 100644 index bc5f8c8..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/NativeUltraControlsWrap.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8e51281bc6aeda64fad625cfe018ab34 -timeCreated: 1490168671 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins.meta deleted file mode 100644 index 8e7d22d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a416a850e42292340b4e363b9e119ccb -folderAsset: yes -timeCreated: 1493781850 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86.meta deleted file mode 100644 index 870b685..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 275ec448152a76742abc1ae9a8f5775a -folderAsset: yes -timeCreated: 1490168671 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPlugin.dll b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPlugin.dll deleted file mode 100644 index 025728e0bfb4ac84053ef52d27bb328cb49fcc93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 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 bv#=m}0f=v-(+<1`Nw+{EJD`F8_1C`xg0uVs diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPlugin.dll.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPlugin.dll.meta deleted file mode 100644 index e044ade..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPlugin.dll.meta +++ /dev/null @@ -1,79 +0,0 @@ -fileFormatVersion: 2 -guid: 54b792c3d756ad840bb54a07314bb516 -timeCreated: 1490168675 -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: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 1 - Exclude Win: 0 - Exclude Win64: 1 - Exclude iOS: 1 - Editor: - enabled: 1 - settings: - CPU: x86 - DefaultValueInitialized: true - OS: Windows - 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 - WebGL: - enabled: 0 - settings: {} - Win: - enabled: 1 - settings: - CPU: AnyCPU - Win64: - enabled: 0 - settings: - CPU: None - iOS: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPluginD.dll b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPluginD.dll deleted file mode 100644 index 0d60425fe7d159009f1347728c1bc8d7d31218ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355840 zcmeEv3w+J>|Nq&IgRvu13ZYa&2)RU=%PGZb!%|eprCEyDB$>>y>^Sy~qEsrSi=vXk z2yKiZYA%%|CaTYIR-~1c%l^;j`~CTR&gY!%?0jbW{(ry!-yV;>&-?m%zuvF=`~A7a z4w_>Lvsf(Q_%A83ShDcTzZj90pA@6HR-?7GET2}}*(58Z@6ILz5=T#HJZ}8hhsO_l zwDIs^k3BXvx$#3I8;?(Utnui_8uz-pf8$5Tju_dhX3gqNRnRNnoqX5tTcR6k|Mo$r z8~%av_63(U_)GlS8vG-E>o)jP{MK&pGk#lkKGd)nzrSy(+i(DWM=Yq_ph)~iH#mXc z;R`$s`8#64rJ~$#^zcN^p{*#+Zn5+Ysc!k`A?tlwU4bRENsW+N7E2Y4dw7tRV?-Jy8!Jm#`c)1mYA~OseM`{kDQeJ(1Z!KizSN2p;~^C z#Zn;ppTiq=_Hg#z3#t_z}aBhgmFV-$&ubg?yaKqnJ|tvRk!jGkny;SR&y~Q{nY0)i0*i_zB~Oql@4fcqi6zTUq@^jv0%N zM;fE^BJ{fozkN&f>w((;tA9KA=ic&7n8kg#Td2i7`}Yuwdtf?}AJdTh@D`G0XDt@@ zPgTP$?k~Hc-+OIQ7rh+0k6uP{#a~D^k3-TX8V#pgBR6q7M&z^xyfY(EcNy!R`vu7d zAEG$k3Q$L0K=I%kD1P@DawB#lclNyHgQh?-cP^&=bWMn;_ZfMzP^`B*ix&nQ#p7UTc8FeKW=mAXA>DIR0}4N%{(m7}prB zOFu+$Vls+vbVR>1R@BYhgXG8Ck$mtclJ=jY%aL1QT*^5O!=JyxdA(od%X{mV>w9v zY=F8;t6-Ha$hV1e0Vz-N(r^D}h$wFz49{T#Wg$@5xn5n2_F8`In#CyQb66h=Qio$ma;SL+XwqJ+fn@q>6jP4?XtTp8zDJrq zSQB-BH%Aiv0~$W6hK85NAUE<(Bn982q0d?%`4_1>HxsQ3X}$(dMsigl8h+S~r1u9X z{;?OibNLu?Uw0JqLjeBCP$VyZhK4`?27tyR(C`KEd*>GP%OM6W|3T|@YtR}x9(6To zsWV!m7^Wb1E0_9SdnD0r^y`*@+^ibtH}YZR+E5K#r_k_D2y$;chhzq)eD_KKSiupg zTw7Kr6px%lvDSPfFHJ&S`{t;N7=Yyc?MUk0g$7F>0Cf5>d4}l778V zTz>+&3@&;x8Fd%=_TFmbdJRF{SkBg*s3iGjbbfDArJr7Epzrr2xN74vt)oE^S^y?vcNdTh$-Q+$#u=6ncW3SuaY*E9m1@16^IlLy;MdzWWu)TUo+Lt_lB?aGKtuB}7;z1CHI7>Qg`g18$e~b=p`}^< z82Yu1Mcvsr!s~^k&R8V3Mxkyv(FIA0c>D0ml(`QL-G}Uz{?5flHx?}1pV9KhmgDUQ;euhd(e_2W`2(1 zb5!SBXvmbE$PK>?xpQ4H;z^==l=}M>P5qt3@9Uq?5cf8c8uUF`tI+vl^1S8qNIFtL zR@6tb=M0i!MkDQBMe-l|k7_h1pT31*ucspS44E6k5Qa-07<(xXnpNJ$X$LGx%M<3jrJnBixfJ(5{ZR0UCN1GpxoDPi{yUB zwwG*n>7`68)zN#e?;#4&H#FCdlcth zhvEUM-*uf(>_@}+z`Mvbph4NhP0g1yjN6W*%LqnBdrqTa7M=A?)lheWqb)r5mc?rM$JI~Ze*phR@L5y>f{HlGA*>_O{k##|F` zK<@W9kn1}Z4VV3h;*WG*x75bi#DCDRX%~`PNsVe%(6E+r{}Gv&L~m6$2D!fM_sV{Z zUB$X#!;qY0-BKo(+yzh#xtJwQkn73WuB40kn{=5`8=apeN!C&}zNSW5jwAQkcSvqa zLPH2+^bbEl@t1*UeU8k_`~pcc()ns?{9`kaTpo+0h{K+xr@NCz<{DCR3~}yKADy4! z24)xS=>fXgj@*syq=+6Oru%+I-5$!&IR<<$(ZhcFJ-UpgmNjpSWd7YK#@&U6h6MV; zIn?bUlh;vHUi=%mbA%UL3rX*7NEXv@Pd$PW-`#}VfO7!Q$b%&5PSn|N#<1)mXn2Lz z`~4NjT~A#45!Ay}*zujwIdc#C-AfZ$hmLeAQQNj2U82VziQ*hd9Cp()NNk^@^Y>fP zRL3+{SC#Ic_=Yr#aM4w+ zL0ywIs5{Uc#k|`9bOq7fNn8|S)pG;tHr$4~JC30^kHZdSA=yvif43O@mU9==r4^D6 zTzM4hcCN*nf4TRh<9!bW7Xt=rsa(B_^t)aKtO9%cdl{1NxugpM_y#UD< z)6j6+F*Llf2)Tbad0sIZo}(cZ`En%3U+0L9$o=#S`dKKQ zF2-D2s0KM?*~(3*`q+_{?=sqCq{Y;GQN#?!Ay34sraprM+9zYEmi6rG9 zx-6fEVP8;uUf6&xkK2(%(g6H&19HkANY0j^*o+GHJP9%N3*_7zP&b01X$eixKiiN? zKZV>hO6ToG=rWP}kB>=+btKM<>8Lw-36fMg!+q1$Iqa(sFyh#| zfcN!GBp(ukF4rS>Eyo_Fk}Ra%eVFFqlHbvJ*GUvR(XviBj=C>hfOk2&jF^Pt>s<)% zE))~!aTaYw>u1#NXzJ=P+N(3frD{_oyC)(!%Q}Tyk1*P%*M33qZ;DD0wc?|PkxWiP zu_{p;Hym?3m5a{%iN;9Q9iV}Fq92k_##cKTn^k8+3A-HJg5;(CNRB>(Vb!>z_rF4y z&73HUUFv_0<-6ZN?yU?YV=ZVM zR2xYG?NB``;ulXM`HPM(o=aUvtDM&pT{com8d4lHIs(eo#QD~1kn5a>)&WGZDQ9Q^{?G6g?2zGv*?zlQn zQa6*PF+-5+LtpXpL9{+jZgr)({)kZ8Qr6ykAGrn8ygi4ITg0N9rgQ{#@b&wVTT9b7 zKM4&dNaw+G0ALJhpF=2J??7E1t>_8{XsLG~sdoTfdNL}lm4((OzauyK1d?aJLb9Eq z)lD>b(j~)OaM%HA2H#BDD1z6x$6&(&`WFpCqp;k|JRatobEIuhRQc;r4O8vCfQ-%;dS)dhalGLV}=$c<_tcXKq7 zy3~&XYE+-SXy`zvbR#w8KvyI$($YM{?O`UZMZGFW!WccYa-!~fy1M~2Q1{WLDDK~m zp6u4;ao{n?u zAhP=~M@;(_#rgy_k)iYBRI4$RwaZB7la!{KU!wCvL@ks&KW9U-W&^s+pj#Y5Io-Yq z$qigqj04G1BHn@ffRArP?pPM;E-OGWG#k0~)S2RIQCz$n!=~Pjd~Jx1^w9Y3ge*{YM{8wg5ne_k{78ih(ZQ_aHIc^2Nqgb@>g}S-ya%U!r zKOIKv3GVG(r0EO0QJhPmDO`bElV8#AO}g#%G`?B1aCf|e;;j#(%afdP-VroBJrE85 zY({S7S>)Q>f@CRUkZ%~8KE4!5p$DC-7NH?D2F0_#Be$Rnx};Dq58jF7dJ z=lv9)geB-VhxYl4ok&K}i>KwFp}}29@@fLqn}qjkAzHVtM()T=G_<+|$=_7OdHv9E zoPOrRw~=gajHG~8`Ke)O_=f!bco~u@v`rluJe@p>hMFr-tak$%`oDu*10r;X4GoP6 zfr}KlNP&wKxJZGE6u3x%ixjv> zfr}KlNP&wKxJZGE6u3x%ixjv>fr}KlNP&wKxJZGE6u3x%ixl{uMS%oYVOk+>2DkLT zXJF>~n39r`HEmGJB9?zFO^ge%Sk~Ozp{h-pxf4wyx9sbZlEiTjSFtJMzbq+n z{S3RY_$0cZh*lt3=!z{G;jGEF`vfzOA_rzZ^p#0EYa};CugcOJ3$*X|()-%dLij$U zI{-&DOy#e@HyevBQ~#ESNXhW3Q~CW}_DD#qHD1{b9d+bd1t|#~q`XX`YlIy=HtSUlBb9$CvQQ7cd&K%g*>f?1An01lWR z^4F}RLH_XIn4}I~7*VnY5BF-=sM6=OpYRG`UV1osp^qgqHeYG9(I9e>%CIe%|AfnK zi&H+{F8CLA;vV)3Ly2o+emYeIU6@}2E@#^FNmHdKxtvMpj%^`Mkx|8$J!|gaC~H60 z&bZ9F4ek!LDd`~5y@Pz^+7)}E-A?5cTGDbYpciN|Z3hN|CQ*%8VQGq?K%k@n@@J^IKqT`p0%~<>)T-FyStR}*1=-VA=eQCg zouOOoM?%=!na-JAnM@t-P^ZkSXR%t;%-s>Nxbs;kX*z%Cz)%~}`W+q=XkiMMHRo`Z zs8tE49Y1!fu^kmotHdZyVidJ%tK;yvWXJ+RXtKaOQNzF^R}0`72}fqxkGMy1HcT)l z_yot%1xv2L1O(hMIN%p5449ZN3zwLG191pKnwtz0#F-)uF;5K+_yD?8j3mVTWSGRf zLGTHlGE87Ijrk@RzaS*J$^h7$w2&l8!2xeWmx`0*P^ctHwcryZR(Jwpz8vvO5Rycl z7vO=x0k1-rij!mqbeEX_wJ9j(35E$8o0gJSg9AQ;E)~c85*72V!6$gdFu_pMm>)r) z5QLdM41mqc_pIQ6-RM$blIX6Hz6W7MXE2PeDm^~b_A~w$^$WEP>K|%*bU>)>PMCb{ ze_BGQ?dE$zZJG-;5f3CD-%t}llU3}6>L7%Jy-wej+y+~Wv>Z;aT!AP(J)3c0;AlZd zn861S&Hy=qu>YQ?qWHY_SsD1uLP$|je2T$^GVsyp^grdd{P@O^8u|1Sm%@c#L*FdI z*14dCI|}-fmKs@7)na*~Et+$bDxyctY^_@ocL(-JM?trm)3myKI24a(h@k-Z#2sR& z1YWa1>(*Kh1x%mO^~!)4PKbEWPC~RFv?Lbk*J=~=KGwx2(G~w+a+4HFB)@YwGV2ks58cuXR-zFgKUj1hzL}ee?y^L zCivHx8)ZNKUBjWl`FE~t{{2!0|MpaXfA4-CfPeqd=JVy>6I!(||Av-^H5at1h;Geo9#raeuqG02eRPLXO9h0nJ3GDWs`IP<-uam3=eoX0!cSD*t|eq$JF4b=nKi*2P{hp^D31AbScM{;Nhlt^=m{?0P{ye^Y#3Bs)*~te26} z1*OmX9|xe%+*Md_tTi(_!EDDL)Ac)K5OBIFNpUP^a*l40TJH;iygHpJ3Tu&!hHodKM;2jd^pxK1gQ}a&bAz^E&Qm4eJbl!8R(wLbRpC564fA}cgNbnSyjfol z-h4shs$}XNI8U{J^Bl>N>$y|R6UL$6f8bruZ913;_dMe~Gf{A)TB|1$e03ds%vN79 zn<2m#E9YQ( z!CURLw5$_oXRP9iRUA3>l(9=eZo7h$p!tBZPXM*L@ti8#hmtBmpvE7d|ZoBlsOO^r#*}3+~^(eO33PGY%YL1cG{OYQkR9MTp|&b;)=56y0i5}<7IHMlM4HqQqOl$})F~PN^3@5I8DW@Xtr(oip zF#!a#xe8|PdlXC?hhFuTCYXr-bTAQaysAMD5J3hwGsL^t8u53eq2Fg}zoZA)OIZLv zhb!#zEcD4F;dDR0(g)e=^wC6?dxNrf8>uvvSo2XB4;9&z#a?6!px$!L5$+BKWZl=J zkY_K1M60I23g3=iz#*yBYfk!fk_~3Eqto_6o19 zQzcUI+rs5A2E_oLxg`w~`Z5(+O<$sB;I);Oq%oplq))>eY?vS#`ua3vuwkTVXlH0h zo*<3PS_rdXc8U<8jg&H7b@u3p`tKdsSdc*%@V_ZP6E$*_M53zt(64hxGLKE9P_vdlS(+f2Dk zW;#Dzi)L79gHG<}F^y;KhWM0?VgFUZkX0MN^Km-#`|bPaww|00GtfS zp36jN8X1>_yL*b2=vM`2HZcFR4k5f+vPSwSS9G zCiU}rNVCw-$Ao@}?-~JbwTZT6g{EoqLr2b{YQ>~c;%4_2PSRsG6!6)KiB5Gjv$*9`)>@D`ymZTdp?FZtNK4<~YGwe(A>ey#*u{$hz>B*3C))Gi#l8B*do0Mp^Gpj9-I5%ExCikDyH)l!`9OkwBGw9aj&B(c0yD|dc+P+ICj5Grzfb2XDZMY3Rm=QKF%p zPXk^L2iGdN)Kqy7O8>*FTOp7qqipH?jT#s+^s6d1$W}V#)Kf!A7kyY@ANdQxBbC3C z(bN$zr&}SXnpeNm2Qjp_1`*k@5ko zp4T3|ii54PcOGE~o{8)nK!{6%wJ1_fzo6NpB4v~gCc@pIhBwM(C|#uV)>~gxWJ9DzOau4Hk*Njj^OYv+XEZfBSyRQ9$fs->mQrkNYx zMa`sKt~N?lVgxTncA9#*D`Ac+cDC}{JcV9CtUxK zgipabM{US=9Bb1qJM3hgVrR;1XX+e3J$K)RCAk@Qa!9;3VH+>{w`g@<^o7<-^pSl@ zpwEmzAHS+42-8O1q@&-ueDrM$J5==7Au=?Fe$*;K3-V;Qx{wU9cG~5r*?5VcSX{DJ zhlRY4I%uICcD;2(GwA8~2Pvg*a!x%w$_*$$#gI-HZuL&8$x(kkuZ2fN%1|9bg!@vf zE}(CU$xcSy7g3BmS3qjo1)2%vYgi`oSZQ-IsySSdEmK;Nd$*!XY__`<_>-4@KLrne zNv(tuzxT4&FhtG3`wGPZ4*`@jJq}&T%XC3Ml3`{B){gJsouI)Q1C-{2>^!a!BqH)OINF zge1EzCi}p-iBW#~7J}gTobJh zDm7HCtM;NsU8h()mcnTf%sfdjzrpqjo7QH^2$m0O<<3tJcw{B1C4!Spu*c{o0)$M~ zrmbg6!#Sln$GxMCYcu5vmS51you3u}rUQWI8_#U_7EnK{J&RGS(Xre=i zaDR*VQPrk5-F<+x^rYurH%`(Z;3NYu372^oc*iA0QCIuQnS|c1*1<%$AN9`ks+V23 zD45fitt=R4D_80T2ev}7W^ ze{&t@PJRcvi(UdC^**OF=dcO0xWwobtw$E>a6gFn#R}L(tl;go`U)~trD^&afh;2s ztl%1~z?r@XCEX50&B(@LB}c+kL7s;WxSDp0ti=p8{qe5(1k=wY#-ozG;vI!n)g0Ci zZ>ms~9k~q<5PKTA(%B)-x5E{1mAJ7I9n=W-QZd>P)6z+KYHBcr{gxm^7OpG2DVa4n zTwm&&z#q_7!w@v|nT`GW>HR#Zs=Mf+PJNZjKKoR@D|XJQUD%yCc3I-%IHGYK4YCLK zu*&d<^%=MZAjQMePK9tewm_%yF<1>75C&6Y=0bkF8hyVm zxc+hfyz-8uyCCi-pp`@E84XfoW zxM=<4|B#E;41h2GU8KN83S4jsi1RY<9U4txE`09LP_MUEn-3$$4eC?ke3ZsV#w}y~ z+;a%Rar*h+U*m725(!5ptfRazH-eF$zN6@+gYh?(Yv)QZO=dGPfyFFVRy-ptrnq6U zp$;a(eFsdPwxi&I9{c_(uqamkgmskDMYx-&{gQC;4A)zm0YUxXM7`eHEzAem)%s|L zBz*!RTT?|g88%%-Ho}1HI2{b`?lgo^_}rNHdMilwHnvQH##bd{_f@QP(#LW7_<+;@ zM-8q1oW<$I&6v-mdujDMStm#y;cjS{9$|;L-$P#H{fS`}Cf#J{eH>GgvKm!i6zeQj zUN`jlLhX}uv!Lp3xH65ZlH=p`&RoTyfUDSwfQEw8TC76c>X|*myNVV%mSk zrv(v;l`uoU);j+3DR!>!Z4i~e-{X`)qe@l1pOl`DR9LGGeR!jfqy_Je$Hfxj`UeP- zkxreNww`Ir1va_%29bcvkc@DlSNB~29xe417#rW@ZB1kQLvh2DYlOb9qn9d(|` zVjgkdYz@Oa6Lm0wuWFOnLh4h!SG8ATJ1kc%u7L;4&X7y7W*EExx9SNx+4$a}_BMQt$AaO^H;s!=bA^?{&p>m8W6fuyM0zIa0IaR`oi4e*dj14KnV6#f`7n zW#BkJ`3hcf&%)iY%W$I<_9ysYUPk)oAc3bITI^YvVwu?fz0*=_nKhs783}vbyox3E zsj&+c8&;GlHYO7FWsrEH9$`RzEBe!}WTO9!X)4-tSW1FYIPEiZr0_h#93VAAAmys5 zO%0^rBDiguA&{zF8YzI-gMARRv`BHnfJ?HGEA4fv_`CK)PRW(qVBLkcEK~o1uEoVQ(`Pj5BP8PNSHXOM!yM&LC)LEbhaFk+3vof0$+Ng?b?m-z4@t zosgf9JZ$(Q>R#u6(@sa|Ph(wwxTRau8|%~b2l1MEPp5Y8Gv3~E8Z?Dhrbmc@PVkiw z8~93y`=iny2BBD=C1j$2*$!}_{H-gxeyf3N17?34wIRduMHL$!*KNWsHH5cC^(s*< z#AFp1jjL-&6`2x?(k>N*Sj%6MGQSyyt% zVwosVOVE2#XNCquZ7IS@FKSDk@}gEphY;cZk2;q`ZR-uBUQR)ESM0hpHz%)=gTsjs z3rTL@3NA#(E1y7PKthkeCJzkv5^7XHY#M6V0Ccf(g#nv%9YO@Y=B@`8Z;G3$rOaKG z(txtC3wldy7^%b{=iURZy0;;bof=0uctbJ^FfSuHO>-SINi{Yga?=p{a)MuAspFDr zaOkATnt8!vSFp*NpgoBB$Q%5>D(~jothaKK#{*7MU!7#Sm_(4Fj$x9iI+zIe-<> ziTf86h}@kR=d>@!$y^t*!G$|#mG@u|g*5Z#R6P35heLp%cm)#k$XZ;P%sDfUBK35} zD_iiC1@Jm3rA>;P}U-@2k}Df{1Phr#{}XD#eMtA+h9K@1YW{&TlrwEx&XY4#tsS5r&# z_Fpbb-ZHJ*e?z5e|6#7Y0$z^&hZcE_Y|n{a0sl~kP>%h_vNii}=pMxW>pg?mf5dNI z)Rv@pQLCdvI4}D@3dY-O|G{uCp~|uU8aC4Y8?Z^&Aq2Jm@LSUUe+7n_vHv>gAod@o zRoH(RD9!#S8|*)i2YY5nJy-g_TMncR2@tp`;T${_Ww&bxbw9CPf0Gy zEpvtKKkTxX>*d)0sgyz8{!j4A;Ile}a_xUA#$Vh{SJD9p`_KEoyR3F7}!?=!V3 z_d!6#9ywW@*XAG=ljpVBe)qG+!|qdEy2FPjjTg~GEg2IEX^NWh2If*j>pyYIBP0~h zSwzjqV1vA^{D7eWx0Pc*8L14%cSeO+$=k{wfpPUp*%loi|J`8@M49+BgZWj@QrC?0 zs&7*rOsL22w(@Fv6Loi6z!`?9Gi-s~68ESTD+3KPY=m)>h#K~v#%Gxtar}Qxjs?H- zb$+)YzuTi|*zb{CqoG{jw|r-Td`*GFeU($ZuRy-S;J&Dt(=pC9pCF=EO)q*Q)K=0o zeII^|=fLm65qt1>f%n8T0|fC5GS-ZS_44%QiG{b<+pqzi_Qsm25F-z+%zFDg4a#|Z zW{Ut11Z}xO#E6>!S<-eg@LGg_d|TPp3;*}v|3CO&fqzSt^ZX0(jtf<@Vd6JjmLe*t zoF;~w(%)j`*6}4JUF_Bg6y;fnL3DkuCCpqcg4yOgFQq zX-p;NCh`3Z8ZPh+3yN2CSaZw+T^B_1hwH$wSl<$YS5bH}M z3SxaYZO9Ct3#sbTJ=hZ4>4Wqo>Z6_Ap~60^j5zOAdY3Ka^+K$75&~4idUu&xZ%=)Y z?|M19^m^;EcLnX0ccrE6S6T04;FJD1!F>er973-=dojdOJTq1-E@0kF$dzy((msFNIxj$_t&se>T3E;&~Wto=|9TC$CSPD zsv5NvVknJdH$*DNMW@I~%JqDv=hNk$TBA>y51VP6GBntf6`N0!T7ACJiN5naN558{ z2$s*Eit;l+e?^m*dJInu@2mDcZABhs;wn*p;be-Ocnu34yjlUV%&;HAIqxC7pgOs} z%v4XlL}qFxSCg4)DcEBx%0g^bJbChBP}60&xbrw-8^gt*-%!-w(eMOBjv_WnypyFR zx)%XEUJL4k{P|wqJ-IPBKefg8i4JmT8YS=73FfynL!fTVWKHg>(5n5>7) ziiIR!!eSmeh^=aMKsqEJ5xzyoicXs^DJc6c>E|Dni~HwceQ~abyo>t_;-&57E>{nx z7YTZ|1vS7P_XwPW8}+vb0hXsv{`ULdE*s^ow12=m!7M3!=V_zFN$ase$ignc_|DS_ zW3U|Uojy?;thjE6XMt7M;qf5b!uLfTJvg8&yBuhpM*IT39|R)z*htX3I9zNM=0Z4R zL>2D0pUHiM=yC(&P~=x&)JM6OvcVKuCh<8qg80b&RbYJD8}RXYpGp0S;ggLOm+4O_ z|5*@42q~|}iT$tmMu+$NH%aBMT&%ZT_zz>3qQT#bFy0q_e5K)6HNX!;Nbd{(ci6%5 zI2RoM1<-93|9It9VOFiab7Yn?hk)M(hE|@J@wVqReZdan`3YWZC2r<-i6;QW_YT<4 zv7Tx5sF^k3G+gsp!1oRgtm1)*&E1=oRINfNVYTEcNNc22!?XQ(8qngYiDE=bRTQhB z$P=+*#Z8A4Tj;dP;(iqK(8xFY*}_t6uGo6YK`U>**n^ooc#5i?a#vNYJWJGO*pDEj zIszZipAavFZI||qX7VXaRkoQN0}*q@Mk{+@8`VR#5f4Z+nFZTwaX*EtemI#ym(F5S zV{?y24R8Ob2f2)n=VY50+TiyMm`FKkq#S%J2U|%K-t>W2Mn{M<$JshMpXT{mr60gi z&b3qQE^O|zz`;0Eh#*w4(ovtOx}0gR=xB5A@EedXd|a_o#ecwJb-*k9#f*bFBi2x# zt8C-gBKT4Z1!o)LpNwwW?G6LM!Kx`@HgW-5gBn6?3*a~fR4@HfUCN(5YUV#Pl(qvn}8Gnc2 zC*|)IGxA79aSt-m1UDq8G`aFYNt5NENp;d>xuD5%NfV3O`j#X0EkTpFBu$nJn#{-T z0vYyKK$BNM6I2x|f5WnQG29;z!@E@sSApoNa@=mj&@;?~M>wOEM%+T#-}3Z>y4DmD z{+kX{@sse=a4$xQZcVoeoJQ(6RTUELi4dd}5eSVGc1GD8iU=gyGACt4s4W%$_kR*< zn~VRg_;3Dcs4X7;*S7WFfJRq3C2}LR9&8@ zlk*Gs>izba;-+Ea?e>fZmOxYR=?IAOX~=P;vLAAZU6A^*pQ`xA&t%-jv&DX#U+Tek ze*Qs!`MC#YX44YjFrTU8Sg2EG#3cA?PY;Z8iJO&i?4Pj#UJR3U@tf>XPA0%E*1@VD z>mgLC9A7NXJhHgJlW_cMF-=Co@mcoc?nCs7fO`aRjEktN!|hXHxPAXAV!o`vc>R>%K;ZH@L#^xb7E)!?r4~_`%(I zzqanM3d1Fyef;31>hL~6i$+KD>pqR~#&zGI!y8^mQv_9}%bnX3*x3n$u-XsO@?DcUc>1JA(i3KMS>ugOSz#_pA%G zJ+=O#pEl=(|Gi!&{d)oA#LvH92Z6Z|{{36*5{x1l!~JbJ{{4#kG(oL^e^1;Z{dxbhs@HaLxPo>3;A$IO&n={(eA3*G)V%|K8jW?(;fahXJm6|GppNjqC2I z!)s@NXI?I6`N8`GM=x^SNBW<~y8ZooJ1|4~_xd?_W(fcFH-_3a;s3Kup|&^}S?&Lm z+)&%#%@_UqzvsElK{n~%_s3B>eD?3RLtrk1e?R57r94iNEXTj!9Ipv#1^j#OFQtE< z#Zh2e4Cntwm$x9_AJNIZL17%uUA*$>`xI=nw(&u86t`oZg= z!&_WocwD#U-%tAOJCA|Ba@~ClaLxPoH~rwftiwCqx1#GNo|=EZ(+@7?K;pUB0N1>K z{|Eafqnw`veI>m926*P>@_j#eZ|d;EDhvbKfeQe`<)m4yE!lX@AZOz$M>`fjNcbhpN7a>->k&l^qqt0a(TK%7 zu6Eg@aiosN)bQY>@@5~QIC0{BkojsMGqW{-#4FuyVH??7gGjX%a6BkCC`%5i0JY@#>n`@3~|SY7v0@=sQ2GwOJp{pTrM)@&j(Xu#d{X6 z!9{3wUdixM^A7Tx_s(GRYD+JFe!k4#>d209+HpPHijQa|Unaz>KyF6JOJyg7$Ft9P z@cc&v*Wvw_mXJoebJ`@gupm|hfSpZQ!DXg*r1$heZa+2X6=;rMF! zjev~L-Z@f>OH!(|&Gtlk@Fs2Rtk~iV?It9ZrB-t&2!00k2V(xH4Y=jIq;8f#!U`mo zamB?Y+#S$^XjfsGhp1a-iCUvge+mOGjC{$9(DDrht6?Yb%1?R!?SgM{|LyMx!tUjp zDbsRQGK8oz6URm9a$3cA8S+C040|}(8zn&>_;*{UDz*`CaBXpEh1vKK-cx8>8J|tDO<4DsgTSt11;N)i44iSarI;6_T; z7&rh`fLnLc*_E~Up#JKA$#{y4ynoQ&;EV6Gaf;Af?N0{I{y zcs-GB-b-bS@>0(Iw7sEtzVjuOo-gIX&37+crtf_FJC<5s#D$x0duRXop1P^jd<fh+#5fg9=3q zcVIv%=Ve%jmJPNZx!+PA71jYxm^L3h`#P0)`no{`H{rB*DyoUk55n6%x z4O9!t3j$G1^3#v32TrxmKNN61{?nBj@x?Fgj;MCZs8aMF1AO#M`}2d{UxiT%0_O616iapKuu zxp8kpZ?0U&$U8UOnNHB?60gi^r>=ZHtMJOiXk|iM>?c=wuJ#@;DR`Zikn>1qlHUR6o4#!9Cq)FdR1tV`ASkrUC>TIF`xkRB_@M38m(t51`k$3rjDYFGzaz z_NP~L8-IFL5tK2P={3cl zUPU<6^OdjLAxuKEy!2{@tx73+jcCPwl3wi~rCIfUst~>Ig?YPR^vb_b^ulqOO+CLM z#nN)bS&pAl_LnBcpp-{%EJd`RQ04j9Pbt596Ws|(UI$e-$q#1e*?dj0r0!I zJp7_W1mJ_;RsRxx0|hBc)9+=lFd+T%g;VvxZ#t|;#p#!=$scUB|Nj1BeE;vq_m!hR z{QK>l4d-QiVoRP@@UuN@?gewTryWZNM6rd4M0i-|D2#ONaK0T43CP4{G9?M7&Y7MK z2(C<~&P=|mdyD-{sM^!Yo_uj>jOfWP8OiS$InzItJ;O4^>q>F;s!+M18Nn@Qr}<2s z;uAyw7p{Wi$D3T@^G0z>2WYD^eFDE3X$*hR8)I z@5my)C5O8ZkXHk^OvHaK6kTeB=o`z80cBxz3*oDwl^g4obMRyE2^TUe?01m!D;#+% z4{BitybazY)lW&p<^l1Aa31QB={4#ytmQ02%%?uzg!8MWG$u1uFE zPkwC8vA!jGT9WxisCZ?Ubmy-5ti)rIp{`8kb>|g;oC{%@~|sSS%Ggk z`iDJ0Pc69Mn|gU67H&aI%wgbeEjjU~(!fz;mj0RgBr5%P3FqTO|F=PeU@OFYum|&u z_CS3*2e=VQZWvzAabH>XK(Hr9IU@LPmEUTEuw$(j$9kFvOLAkurTsG2k8@?RR;dmx zaHew#a)`ei;+oH#Qv|cxp2u&)Q-p3HV_u8kt1FYlK9wf;d6kB@%FiAUeIq|_m55Z1 zpRXf66JfljPubWm`svfx&4aI4@^f$H`B_H<&E@fvR!X2O`FZnomE-3rTEzro^Mk8=`T3Ycq;mXRqaJJU3_#e&TZF>;=x2n96$|+^VIO0Z zhh)g_YagZNwbYOiW>IMiE9(@`{ROg(kHGtyy;fv50qyC(O;9#=K z(fe6_5|!RJKw13sXTF@MT#GODC;DbXd~`ncu(z^DTz@D}e+~$Sfi6;iPFGTYR$ptD zXZ|{4ESunGQw?vGpIsXH^0Sphq;mZ13#Ih2hXX`~kN#}FCisdaKL=EvpJCVuW5-&K ze|xEkk3DPwGE~OD{Q@mDr-MfR`R7gW^RVzVUi~}=%`xidgA$R-@iX^IKYq3YdHnSA z&#Qy4Sggl{J?yRY6A>yH))E1Q7B5PB*il19+QZgx@a5aX!6q=1ls7@|H4QaVNPEaz z2#xgq4U%4IdsrVz>7zeimG(dBav~Gilsf=TX}x|A)=`A__?^gin8=? zE=Xi$`1viy2V0%L^($RAp`V^BG*V0bY;dVBKkt%=RF0p|>PAY2^s|RQK_P;z z*sMLAqVy1F*=5?pPz@Pr4_jUy%pUeJfthK0I72s8lHN`rYSf>DkaUota`c{zHTl@X zE9#Y^cZ!_IgguPzQn~mrk=tWsIRfGGLyBC1q#hy;tz?Ke4@M-IK$TV*pBfYT6Qv=o z#)l^`tC63zBo>w9X8}mz!_WJKwehisZ=)*Ma-}^Sa6$N4AXKSs&_sN0RaOYG^7BW{#YthjM8;)v#e}OzxwW0$!{zy|d`(rLlZ%fp z3oau@HkgqAO!&J-SHXm88chVRL->kFC&!p+{Hv8iBG(kBnfDD?*Q+e)MP|fmf0q z5#m6_haS7@Tqt^E!M_;kF)0}2iqNAgE@BwvqrL=QNqQ`)DcqG2>x~eZ3nL#BtNYR; zF&N~E&|^cCFFk5V;FYAu-#{7e+enWU@RgON2jB$;Va`4*gG=z?zeFq0ddu~Uu~zy0Ir+&s=lo6p=1ONOOerV9W&ivd!omkMh<;1FAnW`8-9D@L zo8pcTY<+xgI2F&c;R_5IpMpE$8%T`p3zg?Wz$N_t0!N=`FF>RC2vLD}LwA8AwIF;# zLwukXyS+c628E|N3auxjYKP-)o>AHke_#fK$-XlmY)@fwKe=lXmO`X|L3co2mZJ}>N(^2Aiqy8?k?GT4$9CQqV4;9 zvD1FS@CuQlB-{e1l+-Q8D>v|Hc5Psw-W~Nurw&!|Y{>yUL|*ePw3gI8D*OBj6X~?) zyX^VUC96_|1v%}xj?`RBa)dh#^EpxvSd#JJ$pKV*Ch#G2ek|z#o&nDlFZSRw;7e#{ z@eulznd0m3%D&JNJl9dLsx32}A9IgWT9MBkBoL&FiH#^_x$IdudMR?nX1RKVm*fN3 zU;smHoN@?*aO~=`=Q`8(0gQHwR*_ia8HxW5>@Aw*qu)#FhS`+AYVpx;--lORu_xN? zR1(3YwA_~R*2mu?1cx@^ea@EU90!9Fj{H~1A5imKkslH_Vc5ixmLYw|4u7Pa+Y9}? zLFJ3Wo|yQ4RZ=+kZZC>ceupK*b)BSemZDZ=;>^EAw9|VxQhTRuTn8fbQ?_dZhWiW%ZJRAgZM_U6b77x&FQ2k^#hw9ut)RUAm8-eo zlD?p}#fHvBDoq<8KXK&nA(KarA6prE3i|L4J)t4Mwq(sMDEVv1nIs$Oqu|3=uvDav zjU~`WTd|Pz^y%jXqnn0X=;N==5n;5A=BiXc_3EpqQ4c-c|T` zn3q0n*clVpuz;?}UoiRG`n5nCa0K_?LoC$+I(;(ggFZD7j+(2FMi>VxZ=tQAaP!9ajalc){ z4ss9!e!;$3yBhA7q0y1nS)3+xK(V~%&Ag8@7AhV86xK{gJ&p%f{Z^iFQ}=wYBP0Yv zgW##Ds44l9{OpU_!B6O_E8gmiqdzgy=Q=rWAV;E3Sb_O|lJXO1zSYISc+Dv#KROxt zQBi*b!vAo}%LjTDSamF)eyC8X4>W^%oa!pFVNcfj5=Aa{3?^ zire;}7b|})HAic8j7Q6h`j3}hUDX4cwvNKI73Rf6i%L6k^_UCFiD`ccl9*Hv zv-U{&8w{5BXB8{Y6qX`VbvbJ}j8NHbhTq^r7ZTl9|K270gX+B*_~nEv=IEiuDP_@E z%EOzLkp~>q6yg}9D1v_o&A_^4?$R1Q89s`K-mBd#ieM)jY4Q@Gq zd!HwsjHT>4Qll-&?Ol*%%TX*tM6}~vMJ08|$hB^kmWEyBl>VoA)G+LM!ZacsU)EdXJaWacrj`01}0U>9^X|yB9rhJEJkIyvo zWiJT29NR*~Bc66hJLh4ST99^pQ?fC>vTR90N6wN^7>0?qm()#^Xw)dzMyifW_;VO5 zTV>8;e3(;4LGtU33&bz0#;K9f9+VRagah^+->#29ELBB~w8PAF18pG>I%G|GN@myx6Jbb|k z_XCUuwkpqfq!uZkBD7QmMO)(z-k+fE-wB_GFL^QIEFmu@lBQTa z{IWSic#Ewb>y#b7dKa$dOwaF{Yr%{0opYFS$r;S#91i2P5WIq@I8J#PDvl#XiGse( zEPzp{fN>W1cr8+Z>(zPFI6J)x-~9f>mGITqCoXuoiY>9=72j`<55x3XB-bNbEqIPQ zFPxuix8(Jz9xi_Eh4QDM4t@cv&iGbBwyc>0Lh4{y)-aq(bE9yK0k1vMq118Ou|xzW z$P{{ZaQ=yx%Z_2v8id6bioL~ZF+}buRZq3&m?VZt=9J=A=?ZiF^U}*e3n1+b$J?zV zouGzU!7(=zVHyl%e%IpWA^pqx0&8o7h-=ttv^(9-*>Xp0{t7A)7 zS8A~%uj?9~MgQ@(AK|Z(NCn^LYw{-b$J)&hUwXZp$?G99D47BwD^q`lQ~HehqpqUR zyNaM{bmvck*yh(|SYJ^227iD44)CS^e9x?}{_LRSmCfo3@Yj9_P`LIff`d~u4yIVs zw(xEP)TZSzqc!*CsWnSC&yT zOd#MFgQ#-Hgk$xRHMgRuoq!`=I~irO^L9A9;<77_0)!ofX+K&lC!YSez49dViMI@) zEw(W2FkbeDFPH3a#^#G#g06GfcQ~@KKgv(rh1)wAusB1VcfvUzxS<^a7D$w{yVX-q zSgjrKunGBkMEK=tal$WeBkA24S7v*`&xp&oX}Lrg7q;K57 zSPTn2&#W2xBZ9^3h{EL6TdYQnXeCDiXof_{9DEsnXz?<>!XwVNwabm=UFtIjUt=*N zVfC61(S@DMHb{PQfcX(0 zb*Yqn7Z)7(Qa&Dhr|mPCd7OIpC5DM7aGa-nhsc9BtKkfBN7|1>S04wVq#NP4KP%VNo>ig?uM#yiS1d{ z%21V@*ojq)n>6ev!C!5eHjPUYxisd2I;pqmt}AQ-{TNokq6zt;AQ68`)T~%*M)@}c z_|0EI_+Aqsm73Tj*FpCs8Lw6O$Hx%(|84% zf8b}{wBBkVC`)(aC6(qB&5v$c(H#8(5DP%ejo0}b7?6rk1>u?DXVCb{Ab&bM8PdPK zOBg+)X&VX_RzQjVudGKRAHu@{u5ApCNs%$G;^qA&S78GGq>#i(oB>W^FGI)xQ(h;h zETwUpB+6eC^N9(1xvJRIld5p-q{@*U?kd7w9xvh#$Gy*cd+?)%;`>*nL*|!QWx^I# z1|NE1qcIEM(tQYEW1HE>6-=R0M4^@myXps$1z+x7I_Wdc>>=N zN>ia5M4k91OMLqQKO??9&I4cQZ(Jqh1=q0{PbzCEA^2@e16sBaytTW6)D-p)_)V(> zevn$1RoTeBN7-1_st8tQ_$$xJY6vzTo%r%JJKgCC&ws#hpfl@?lVANgmf%s5}F+6}2iG zPYMXbR$Z-L9oY5!`c-)p@U>U|CA0JoSH}9q2Tz!qRnn`VGV}sXzT7ToqwWdMQ6cm_ zW2EpyVow<&vSr%$ZC{=rjZDx7%2TfVL0)X#E8*|3{&%->#bqw+1if59@%Lvp;}75y zW5nkGcGdE974NI^{hEOK{(7G$G@Y>uF8_w%`APjD%`wCwR#Ey=R`F;fTGU4y`=Lc1 zkxsh{ho4Ol#+3a~H_gaDo|8!aiN^;^`!!BNWBHoMaKz@5BB&>_D5W=XyV%nxy8Hb#T1w)z_? z9(o-m#t{df4;1)`Z4t1=(RgQiWAkELN{+P(LH}$?fz0(W6yP=}sh0Tj=Y~h`9Tk!=N90f?XQ=1)rVLdx^_#7ys;v21Erx@{qaYS2w z5hmC9Hid%c3(D&`fam?-jkxD?7Pl|}cs(4Mr!Fqh$0#bPe$K>{5*xw4d|dyIr=Q8Ypl5Z zJc(gt(#KMk{PaO@qSX=36!e+mPoEZS|8LS~6?~aF`pkh5KM(rc#|WS-{aUcH4Ebq+ z-lWeW{Em*bo`KT)lgP?0l_!xI{h|#ocG<$>t*&w5bsmp&ZFGGjja})BGXkDB0v9_d zV+2lnjD_6_#lZcmj?_X+vW-#D)d=&Q>FiF|z+W0xm&iHo1)^hTSZ&87JR{PEZlyQA zIQk62AVig2>;>Z+Fjz_{2pbnoWaIIjz|m^si6>HF)A}ZMS`A9aedcQ}b0C36cHZD? zE|X%#Fkf4li7{SYs$CM70CFiq`4FQ;AR8m!GD*U~zx8G91qk-f-(K$B;2XQGMY&9j z1V8y%LFr%T@s&k`u?mB~&$BCF7a|*RFEgnhg2U2}8!M5}VyAtdGXeJ-6(dxN3wQj8 zmwat?ChWkoPg<{^A;?a9mNQ`;b|>CmOPmSIT=sQ{B(iXe_W|4sy)RC2ATV&+7dR6Z zdYg8jX=|L4D4H^y3A0`HWf--@J1Uk<>63t?bN&>h-VW+m#v9J`MA2akJBYk%KJ!>d zFREH5$GcW?yyIs}SWca9T(KFhl-X**nSL)?ob&HzFOiP`m8Q8eS>f1aQQJjPN-u8L zclEGl_6>=NcM0TN0y)gLm!ba&*FRw?3+kj|r5Ub-*{EKR>aY`a{*mBaVk%U>qgD^R z2cB4&!=nPbls5HikO$WZ-c~R$DMPl-r^=Llk@4bT#5g1kBJCJ!i|%p_ym=EEbA`Hw zpbvjkV7|B3`s%={&m^77ox>D-VVrRD90j_13#+SNc>TEWeqz^mg8O`xKkC|URp%{# zBcl>u%+K3Bq&~uomaOULtB;OUt0kqjd|ahi`2e2HJrDy>9g@PE;@x+kBzMBaN;PcS zs&4mg1xPOplAv(v^D<|AhV1ceX?b%{J+(OvTm9V2c)xk|!_Sw$ZIWGHbSHc`j_Zni+F#EDP3Co@7 z)KX`{G^nR5b&lf~_z~8)5~iVF7=YC{QR5$pl(T(~b4pIQu|om?Iqixwq0o)jBbCtg zJW<7ws#qr4;A21^MLb?H_Cq1ABIqSUAf?G`Oi0lAXi?xXLLL|&NO{29xk}b_Ls7HO z`ibQkXKWGZS_8WnRW^#0xnRC~8+r@bsKsYVC?Q4em8g>vQl$I>wUiQqLkjJ2vmzyd zV>8iD6_KNPc5cIji0l(0vJa44vHPTmOt>u*R$9<5;V3M&3MfHz>YE=P?~2avrz`|- z9JviJ%9T>&4FA$O;7c4CZFSm@x?*vcs^VEpK9Czn1veBxJPK|UDTkMl8%1&poj)8~ z=*_T;hPMdyfDup2C8fZqFIG!NS;cwkK6Kv-!f|hS6#2x_7vM(J04y_QKcqc8h6Nb6 zRF|qqSKdBJ_~FZa;jda{LV5-MJcN?+W~01yMNyMC#COK?oABz;Bv;?+;dr;FZ+#d} zPf%YcHgc`llkc{;Qi`47mpc1i8eX=w5vIoB4(S|wAj&ZfbE+CFzJ=mUCn~P_A{EE9 zE=X0E*uwEwJ`wFx9hu)HRv9l0;eT`>t^s&^Q-T8f6p64@wO9X#y{`d`s<_(TkOdY9 z?g{}>u|`Fuf{Nk~G^oL{8kN`$C4v@Bx&guIFStTeUdU;=p0#1J5~S!ST_vXBh^}9L1upemf#jL?Jj%556HjT=gP40o${2)q@D26XOS%Z+YY+u{&lf`ll;r6zq_!26`@d$ zv54tL$hi+v5F(~l^%EMp#=pFy0FXZVTd1TtMk}07tN3^maxOgqs&)|H^})GANeAaf zZ-*#Y+3YBv6Dx|-e&K^q>)OM2%PGL3_Q>?wb_kPLH?&5k9La@KB)4{2$FTjfsX(L1 z|NKm-t9uI=u*236MoW(190Py@dd~wT9MF3nb`mzn_!KH?!WF~brhv){;df<|W9jAL zqNezS7cOd6TR4+Lag%0`DQXUvG=;Bi4^MfeJv{xDL+TI)n4Wo>aI6n#8k0}-@x-AK zo{sZy0CzRP0a=as^6hxl|bJ~DuN4|2uf3bRuOCAZ* zKjS*>pYhY5B+A6^A)a02tgle&>z}s1 zIlWWg-!U7+>RTc8eH$#D%D;d6QLnV`^>}?p%3EJj<*2k(-q}T!rl^p=HtGB5eySJ3 z%t!jE4@mu+H>Ydzr)2yLU3yscQx2K^OZo3pr>3pEqKnFHw%3I*npEGWX}?ZiInaIY1B4II?TpuR-GNcz42B(!^KL^2&fdTj?AXDQZ(+ z0@w2IENJR5Qin$_kmG2m`1Hj*CNB*Wvhhxz3Is%gfT>3>G%DWWfIM$!f|X|c}y z$wPAWN>(H?WgjvgD;bI6DrA(TOLfL3ozW4AobwxGd>_3K2{H(TSci$k8)#D`$ddRV zS*L>awc)^32E)Nxs3aD{!2pQDiaPQLM#(oQr(n5XN9(Q!x!XV(u3x``Fq`edqGBe( ztdZdogjpBE(-3Bb3{PeLc?-+tIQ(CBT>oXqT>Ss~&(7?S%=Wz&w!^M}-NyV_N;gD+-+L1131+Vq{yU<pE2)N@>;aiDH2Wn+Q?@yI91r6maNw#Il6L zFoF)lU(LPx?}%UuqZo#(TR9%hVL9#87J6zV!&M{jtFOch%h#|@k*{HAZNBr>@>2|7 zw7IyOSHHSAv^x9YG=6H~-!jaZ0af z-|7MQqv?~nshfcUXb=2nH(YG-=UoMiq;+Mu5@1Ij`XPBHwY+a4%B{K+5*Yiqp`hbX z>;m$@E=C+>Cu#jR!kAjQn;MM-OKZustb;wyzi0t0{S4tzWDST65sokd>#@)k_b`Pb z2a%^@7k`~VZ%LnMU$yFckRDY`+Ov8XPRVw_%_b6L0LBpf@1*&Tj$uAnlweL;3pFnk zY{a*~F8(@J_8(uZoN2Pxz2y&;~%zd1dS0%VzAFu#vM5<1g;o@++@U5goA8yTm-J1!L5 zkIo54_#28S{04UM*HJc%4!8^|C)Ds%o&eDvMW+BpU)lwH^PQ?3RbcT5VxSm&^6(iF zk`YJQQL;-BVMMLNe4h$1TqR6a)u;;#lfld#VLVhxHIH>s>+{VYrv{jHZPnR1paZ)Y zag?1fKaZw16~3RPriCL+R=?bswpN3+t2G#@6(y?}58clb6p_fzPf+}bZ;PKH1%P;V`*V_mw17Vl`!a-3`*A3kASxC}>81L?V^M=q6pZuZ|Y`rwdrg{PcPa z*2r0hWugJ*H)w`*+zNm|&Dlm(k06WT2WjM7MvXAYY+4W7xDtAp6SPn71GyAmD(cok z&OjyW0GDvuzi}NKycs3Qh8%^jAxspx$@3DzZ1PCtX+U^MS?TOWb8eaESX?@9_R=|} zjvJV=cutxBf1whVK|cShKgs;I4@B1b&}eY!j#Ph4ao+h8M!t3lhueKfJTNhk#UFE; z+VM>pprV5j96EY9*~ylEw_n#E5shfa`G^@a5LiDH94m7Ie?yT8_zmphuOUVlRJ*{A znO|#P^Pmk}NPD5jIbc9dkG){c9Yt}3w0@{pPG&1dHkJ=X zn$Su;KZdI~KZb)$!LEHi_T)-WQZt6|%2`2gW~O3whd+v>|EKHz zkL-fD?buO*W+iJxhhSaeprBLG<*tuj6IEsW%jzmj{nPL^n^Hf20@!nwEov-AGt~eL z5WIi((Q7Qy2QDV+AQgK=E8ZL0kIjPS{mpen=?IFCz=B@Lo+;7RK3wgJM zy(9HK8-bNu9PWFEU|y>CZWN+>w}gVk74s2(xxUZ=X#l*CPeFsiRs7a5s%q8Ov%z(B z*zKc6iQPW$#)N1|UCW2;Ny$Pb)RM)BBFihWEYw>qS&S&M=!umTQPs6%F`~#4i9w-u zY{_CoOX{MxXhf(@TfQ4nd@s`9=K_-DyAj3r)Ae`W<7xSBMDZQQtU8dO-dl$pFzIZR z-O-UeGH|^68SlnG&A4#UNSqZa8d2#yGF&n;+($TfBwr8OBKwP5#=oq))?25hW9H5F zZXa4wO@Eh?bz$$id~fcu>#>7fv^KxUvkbc{d0|&}(Ux#YUI^D|Hu-RW7Z_>F_~*jq zZ6Ez1?5sMl0f((#3csNG1K2bl{AI9dN*hWp@_7&*87AwEn5NDOlRHMYd;uNYascxs zG+)51M&9kk%8BA+rIKo$oQq^nv3i%{((4J8!1a<0>D?YKsa8jP=hKc#ZvagW;5u{c zGsQ>{$Vh@X_nze4eo_&dt$EiV4Uj?m-S>PG#4XJMTA+bDz2|rk+29 z)gc>e@f8EA&qbE#(b1!j!kYu{>Nmb7Ixq_SU474nUT@nHA@pq2_2Ip?bo(P_V{`1B zLF!7ul=`~ZU!qfiQ$^Q+VcK0wsLFjG2>N|b!a=-pTcRpA`F>90Qs7=NkNfEYC!{6I zY>t)5`$=M%!6+kML#*bz%I)L?KrS~nAcnfasWklvjF=TcoA+u^-tN}CcGq=wSz_Y*p zX@~Gr?7-SI=I(lz>G0)HcgGhoHEza>aegMhmTvTaWxW5xG4iGKKWJw5Ke|=-zmS|8 zLz-vyC6RnE%EbF0(`+~TKi26VV5VnhKZ-e>e?P&@l+@`}F$|JBJ$!Er>l?s4de7A8 z^!clkJN;Vb{){@kyZ!xn^f#odAx|j?aRePRdV6?)x)!7qcHmcs!ML0oFjqgoF=C?) z_V5Y20&hBS9zx&C8m`67tbfGFIK2Z(Y2bBAzu5itdAj1xjIvUnA^%dvU&Tt#Ug#q$ z`@Qzps6TpRV5P^g;wnTcLfnJ_RRRDfU-#c4u}1 zfnNjU#6q2Hf5*9hEV1A@C>C2@NAQRVoMq6U`!fMI=RZTAi0n#MC$P%vI}0MZR%M6K z25);L=hrZX!86@M)x8~zh*M2XqD*owv^MLgE^5|fl=d0(Q)Cxq{|?LXtLkTwFvgqn zzWcPA_uW_bRWJ1Oyzidb*YzU*9_c;!zI&|qARHo)fj^!iq|9o#(S7FNeaO0W02h}v z@PJeZ)V60!cz@Wt-)IL{qtX(3MW7`E6I(*OK*J);jGcB+0ym^ay68V|j{8?R-kNXq z^FV>m2|Itc;+uH#C7koS<@k$rvrFA7gIrVA=+j-m(k?!B_!B(~c~aofXIL^r&fK2r zN?eo(Cg>bS=JIry`Ez4NKmC|-xva20k#eG zPcTQMs9Jr%zgT$E-oft=LHdNfBfwWR#gURt)6|S_P#obQ=1s^`SsbZa#g!Mc7E-5b zP~$KW$=AqYa6N!jtK(uxGj&p<8i*u)qKd2Vw8yoAEKi$CgzHC`RYH;ylBmYXSV&9y z7&-o>GaoAei+zzQ!k8BER{GTC6-0cbwsfypk9FTMko}fL;A&9=F8s;KMEGeOFt)ls!Kje$9qYb__9YqvM&uWbb_XbCFlUYN zj(~;Z*rJgknWRFINhlqz;%|P*DEHm9$hOQKmXG<~Jonw(q}+&X*i(u|4lNp$uH4wt zIm-r_Wk#1y4|_*TJ!4T1EGXF}dExSrL(4~vDH(li`B*E2P!+KcJ;ga8926{q43|z? zc0^bV(fQ)4wR9{5Kb~?~Q`oVp1&-OS?2??y%gOt3#JnRyMI&221;b|)4yod^%M?5E zfXkH;Y7e;7IzKJrKH+he#( zvxBw*V*-)=5+LxE7(O^G)~7UfZJ^-FxSriS$fkmL|VSsM`j zImB`|5H&EiLqDuBVEn}borHo^mjyb*2*z(eu~)a$*Nk$SKJ@O{F#%C4eW)E<*B5$k zP0OFaF4D(Q{)Gy$mGD`J@-s-L_0px{3RJ~iyRi5j4U+p#h&yXCac3BH0(XXlh|P$C zh^3f>?KQ+ozpnQSyKK)0OM8GVTVP_#u*Q}lVA~x8drEK3ZG)uiHKE5~^{zJ;Lz>Xy zVKpd1nU5+f1=&6Jra91}8-7R{X_vK8nb6<`gPfwAd!#M*7P3`Bjb5BlZ3)+|@ z&;g;p4gQeDG%&c!%Ipcm?;WlXe7dj~L-}y|)No8dST4&#hy(0)C~`7X42#00E2Rg! zn1pQ92PIz~lf{Y$FX5r4`!T&)YkC7}ICy?{rguk7vfHRnTDR+VX&tHyO`e))Dp{1N zIvem!KfSaZVxv6f+;D-jlW{KPuY+h1eG(oB9Xn=Xuo>bLO~c+QWM>GgV65Q~Ey=-| z@ryCqa0r{v-)OZ#KCKUxY>1aKKCP5bt3xG~daDi9KXNB`2{#Wd*#Z}C z0S7Pe^|%FNXwe3yV0X~FCEvSY*+}jiZq6@Szhp?*yE;$<=cCHNOIXpb4&gcrxPO;y z0k}VM(k|K_F0YPVZ^5NcsA@R}xtVLMRJwX-No6QFS3djsS$5g7p?u4g8AGXmOJRM3 zhFo=#?;W{pOz9xKM#?W5vE*}MfgnpT0+Aat1ZG5FLM4w#)D^B`0-qhyyLp0=a65Yy zQ_y?29iC(~M?mlXwZX4)fVMBVHadq#OkDwWYzV(AUB{N@`oCE}?R@B)XQx09&{ko-jd_B9-M6v#(THu=j$vzK-jH4*Aj%33pyG0vmmSlJ zBQg)FD=9-7)G^S>q;FXx`gW*BIjv+!-*19%8%k?^$wPc6#Rt6k!f?o|??*Toc7Wtm*zXTCW2`h+yotiA^l9^uKFTd;&Iif)@AA*V78WjP{z;bFC<0-> z9DP0@yZQ&BJ4C+h=fhdeApTXL+>mnLD&pPM-$%|Kt8`h5KK z5$^AZcxhKXh}*3Kf62mBe^B3{l%>vuE&De=%IeV8!j&YxOwF&*4=ag|0wLAIwb$#hvIUebj3hgy39kNDyiRp`Hb(p&+r0 zo^6)F6ZU4AEcIwYnQbid2@C_eOjt^Wg3U+{N96a&P)S{QG8~i|&?;UGH5nH$G~%|8 zF&KJqW-4h=(*P2FO)|9}z=bk&l`86N5Mg@d@M@6ZwO580-l)sbV@o~G{s%Z~|ATZD zb?gC*t)DH?{qJ(nC!-D7&Hf*>CEHVHj58O)x7_Slys%eCT6+1FoGSd1S^qTcCuyam zlsDves`xhUa^WrrZ2X*P;^uzbe_1vg3GQcHfse=GpjiomeFE(h@8kyY`=FP0R%}Re zR-9dm-AeHy;`YYDV)YDEN4Pw@pBWHn88`kzUZq8KtE4>&=ca?ujjR&?1eEU1dMz!z zx|pxf+;;9Kt=0QUKmHo|tyT43{AtHTZ)@40HQv_B;Hl{RX#YL(7YkoTt$5ysLU!=9 z(SL%?8sj`;awpm?uj;|df}pY7*oW5GK+p#K-q6nrap4c{@ffID(7#qR&*}nA!LJ6) zCi;5;dck_XHC3M#1K?9am(M#-ek5lcu0^fM#Vb$#4O^grG(C~1fjoOFh~jm<;rzAZ zA=x9Ts3UAhf+zT;OKYaB^J)ul>k?KK?q^oJ8h&l=#B}C`D(!RW`5>~Z9fESl#lR@G zKFP_3qa6%N+{rBttZW~47f#Xg&KeF@yb2CYz7>IdZ~ICd1?BVMdmQ7UoE)>^=-|NX z;u0vx8b>xOaz&AnQR4UU(U{OTT$>Z=EL# zM?K>s;NsYy?@atJKXm*BP3_0fHY6xVsPj9b|9l;!Ap*8 zc`F_iXyPVs?0T4;x8M>;$-+n4U3;7Z$4Ru7Dj%X*XViNeKpyd)ZV)0jU{#jyZ8C`5 zU=W#XCtkI~+#`Q?zH5)ww_yb?Y z-v$OPZ{i2gKiW4DT|7B6*7EfwQWb5`OpCI5eBT*h}7_AKoV_QScKb_8qOtH**2>;?FG zEd-zH@r`$#oY-HO$}vB|vGk<**fhc%rjGM-6dE30WjXWnbaFpya@_Ijy_=95i^E4i z^=O#^>k|A8JK$tZhX3eq!I#UAF`@qo`Aw&>pCKF_G5-s?f=BtqsO$lL$uaYV5levx z8$`PrgIe)LH>G@HN~TjG&HIWg)Zc)Kc7-~CJ6x?x$UgHmbUfjQt+Lk8!031&1dw^4 z4)v11$BO1wCl;;0nMK?86y$NLt*B$CfZet+*@mOfXT)AM=3gLPA@`YY0%w%6kx@2s z!*?*jZAenS{$zB#c}*E4ZU`4NV#dG)SLlSWoJZy@XONb1LfJYQZ)R!GBHcz@C+)X^ z|M(g#lMl|n++Xt?FkTI`tvxypby{)AGjOnJrLa+d_#oXPDA~dTI)*LRO5YB!skPcC z$hJ1vz(##=)swL~8Kal))w&ohbQ-sAT~147%-ieiuBx?BpF!Wt($lx`#!vN0=vbZ4 zAjP(TwO{|#^!58v>c3Fe--RLE;5Qrfo9myn_HG;HsausFlj;igt$CzeRKC#Q?&6!F zV$9;3q08~r+LM07$v|Bg-36a6=L7ZdR}IOpkBZ%QwY)|m_grh{S_|d^N8@>R;Vx)u za>?E0Ic5}#;`Y$xbS8?4x?f|4vBTrmp)UAxYggMVxanhc$k6sbms$X|9t%dE%V!oU z2j)&Og7HmHT&#g8#O_1`m###Ojs9bc@sg?#0_VXBjje$6Qp^^-9O-S4mwpe&U}a$K z=(}#vR7{V#o&KeCi0{|Jx+rHM^?t2&3yZshqb<~ASW}ZB;ACSI+iEZHG4|8k4tdt0 zbHIRy^Z)(7XgU9X5IAY>Z~(0x7a*Es&GJRO2j|i!9=CzF&c{5|s@5#fKF#tbd*xTa z?fUvc`Ss0rsb{e;loQ*z0BSs{64=FvadMME^-r$dgRGbA#=oouHwGXSl1G}%2Ut*N zdj#AW%j$@P{CWC77qa!60(Wom2(ff6>9oQy^(|@M3)}Rcxl6KD*nkvcW&NK!E$r zk6{6B-ER&jO-R2dzFlfGHtM61MKriuwN5@MNwHppisttPJ=9a8`^TiGnuQLxiq0tp zN?pv6){!RobunLBy3oD4o#S6p*pI>I+^e~aMhXy=F*m(Dm-Lffb*g8f{4HLT9=vKUoN#GIeGZ>RVd`AOj43OP}J-;?y7&hj54yX~h%q-iB zJ>vsNOY{9BS)#L7_9Szf(-<+i@%PQZX+Mnp6Kl8 zwMKgRWk&ipFa_a)RK8IWB+{X(RrtlV6!;w!WVp-(QID||9T^>Llw3lHgQJ6t=o9#= zHymcxV8dY&zFIaMb|4DxUeE~h%*9|QPOj^?*uD#QRuC)T?Qj4VIqW;owE(UhxH*M}&3)KVs`u95+zk%DZzr__EBDH2x*D_=QPEo& z1_$Fd0)}uK0evhecQrzhqP6NMOrVjV2L@ZXqpwwUL=pSPYh^Eao$MvAm%Zc-;iC0C zBu!TfwG?`W>9GNa<$Yo;T@?}62DBA-+{rT^)6|q=a&(S%ddT;#af1lrhQ~yYE5VvL|87i4Z_7^3BEN?XwD$sTs^g(@FJ|M7*fBUaE`4NxU z_3`wk&+qyHj0lB4Of(`yXHZ5kcWtw?FPjEg(T=XeDFAfUbbQ5e^|icr1TRSVu<^J) zTmUONd~I^FrCgwW=u+^^WV%gf%sZxNy}?hXK*KQkX?>ukz^9(n^wgf{ z)di?{jCP0DZhP_@sL2kr7p$107aIXJN#6#CI|6W3fWCQ6T|}MGxPf4OwsMe+LZZW$Uc>(4CF&X0$1X&2FV#1Yu z=##u_PbyglS>T%HQ%jK?3UZ4iRCP#plnD&hYNNC|8X1hdmrGtHdAU6fyvIM69c02# z*)I1vJmDSj#)$DX z;Ru^Crf74xicLGVF(kJ*g#^6jviu+kv}{HxP8zW4{0Pam=D{y;NOB&el=Y+FS`dRiEl(p{hA`8&BFy0@zAgxp;tX#1eaXLeIN)EZ86^7sq z>K!S%+sJyayj&H+hSm!9UVhRi33qA8j?S(wM71DWT{63dfL@Vmpe_(_1FKITQARLR# zZRkxG!V?gN?^yZ5e}Vp<$X%&1;kOzfCF7}p{5B3TV?3GX#S8p0n_J3+KQ|tb1b_qF9wCkD9yPR*eU>1vO*q zXW*J3lQJ4^1wLJP&|iRm4m)f-qDF^_y`At?8+0hEZAGEAHX2|X{<1CIoV$qrSwS9;l@z9DM2uWHl^0V-n z4I`YY#X|zt5qZ^RLdDK;Bb(ZS-~L9Y7bMvzPqKl0)3EVE$x*EClqI5Tewh*9BGbNW zeyI`PV8qLfc%>2N=~k9suH(_`VD;50V-1Km8u6=)5_63BB}ROq5kJp}^Yknso?^t! z8iwn*Vb7#E$Zu8skO&EvnVy!RZ!0MDn*=V`^0p4s;Epe$K2zStH8S{PCrpqLS%#^6 zFR*G*RX|P-K)6?54QM9M_CLF(Nw~r-#>(~vVMPC$G2s*@MX%R${JYNdT2I4^G-~@y0R1J!&6Ow-D*^Ziw-6J zfCd)z%*V_xDMdyOShXd-%&2~m5x>cZqxKGEh~5pN@I6{UY( zwP>EzaZ?%M{Bd#ZusUWN4YgKicz@Xv@=)RAq#my6hs z;7b?p>qC-b0!lPOULK9`6ojuYzwt&aPi^tzzdMr+c{2Z68MW#WP&{#j&Lxv&R-){{ zU#a0wPJ!>V3E$8cBfCa(IzBHxoVk^?5*?ni$8kCj{?+0k1?=XyaCM}dz?!=PGSBtE zj=3oE(Z}v*8UwrGH=9%Gv1T?uhe}*({Y7XoTvT%l;mHfH*>x&j1Ta{^L^$lJYs=2r(d9^4?6c? z_{eE$CDt;O@xzgxV@aQ<)90UP%scmCJR% zYiiZNz79wV9F-1xYfk1>czqo>xg$4KZ%^B@4iN|F4}4D3vS!QYG%X`POK)yZZP}yx zTdYT_jJVk&L9^_Zw20kk`J4u^OD&(%AT~PoITf)S{jDV%lr`Adz4|9$18DXC<9?=c z6*`_y4i6)V4EX#Pum@uD)r*r1u0vM5&}QM0rz~GIkif^~<=613P~pHT{XG^B#`D*< zJChjBAOD!zfGhOJsCRr#*)e+jMR?x*wzCDd%HUfV!dT(T$doS+TEDoTjxa;;xpI0# z9M!Vo5bmfp$LD((faplo5490{_F-3kQDfQF z8eUxt-qXkjcwh~jw@~Unz++|r_r8vBoe^Gz@a(C#-mt)-fBzL+AoF)C zkka#O@&-lX{K`r2nREG$Oi@&AJrj~Ai=k&Q=6uSBsSx`zcpn?NqNl?qJ1!C#fu^Z2 zI+9bd`W;fk4kJKz@jDPu~ z@|=9HYl)lBJhf>)J&zc}qV=Sl=Yu@=@c7RGl&`>BAK2)0-;LQHHar~jJ5}EJXwLVx z;s(1oh!4&qh-PepiN*joHF>JMd{MP;E#`%qGUxc`%Fo4#5kI2-E%<>G%P~O zbfIi?smIyL7?thnA%>2CvprJ3caE95fgz;A`$F5z1pCatTwrItoqY!AW(yR*s{`aU_GJIanjKtM;+R=f_dKxs){w zn&)bax;iqFz;rh7W3>ax%MMB$IeK>@I@d~zUqZ#Q*B??}m+N`;9d@u|46hMr#S)2f zsz3fl`$l2XY?Z1B1f#6Ls5<@eiG;Q?VyC_E#uZLQH7Olzr#$HO@aKU)7#tQIg!0>r z$1D%}Ibr)J;1r_&U@ZmTLC9`&BLv?v(6oBe?wGt92Qj-CQA1w&v&@o-61D)v;-V^^ z%iqkh$P?4=cT{ozq+hX^m3-$z?5+> z{gvSh0U+Ey=2M2RK>EZ9%Z_FEB1@j}2xpHAmG6tMu22t`nrsS$ejX#sdZjiuty zpw^v2zbdvU9N}-MXm500XkME}5zo{00g`4J4pWqwm8Q(G5Nfd19Zcj03hQk#fw6 zJjg-I0ds#2;@hXrHF7egNTd4D$-o%Vs z5>To}G^T=SDh)}8l0O|vLo%Uso}ko(xuSGY_40KIwQfK(sn)dm>ibYvQV3z{t7-eD zh6;|i74M_-u@*2zV#TBHPpSBrbj`gjUB$;_YVM_$icbYMZbMC$u2-oQpO~&Ww^*tWK*&hUUAKIl5GhI+;=avy*Mk{{f6xpO&C7{}(|3C+TV- zDhMJUGq=}feF{Q4Uf&2v;-vbH?%n#@p*O_qs}vT{+bV`G`UINXi|w0#qP4!=sr5~? zUmx_9-^BHmidF^1N?Rv#X#KxEow|}}Pr~c!$VnX$ww%CnT+WQUaujZjxBzy=9PFA8 zfTq&o#816;B7DuWW znWpYQU1I95!RV%`e=Ed3-O?jPTh-4&2~%Ui^=^&6h+NTzV+vc<&ESbpa3p|)tN4p& z+3^cS1zzV2scX3QYG>9$fXQy35ecqGI_xJ~)mSNejO_wqlpn|qBM+81shFV#&t_cv>hczk5Z;RLNQ8X|&;By>$k|ioE%^`djm<2{ z|21D_zM#!dOSF+7)sBgXnhP-AN{sdCiI@(swB8du2^lc3TCr3O73M~&7{|?!t!g<~ zPV5lxqh}z0WX(;$=%2li#uV;0?o<(cunTA4Gm7|F9#l?a|3$sp{(Cekfd%(Pj8*<^ zKMH@farah;O|GF1s<+~aBQOIGidzc$^)Aa=&@BYQx<>LmT;2R($>4@+n(e%JI6UKspgg*UK=@E$%U5#BG*KRuz}ZXsC9jV-GBX{HNWDUBRUvsp74?3KKjiu{mvN3krv}b65|c`jVad+<4UbrUv8XVn6o4ok3WPj=7xDVw-PoT080Qb6-i$cZ7gd( z2MB1Xoz+@m+ZnSdKV}X_9S!O(sM%IF`#!`xLHfAxc2JNb2AV7JD z39?2~g*DhXjH(9Aa2!=O{SHz`mQE3RWw4JJ_L}Xmj?xtZs2;_kP}KTT%a~ehb@3t% z8dWG+aMyQ9>q~#h#y!SWOw&*B>5~v7cE8wWp)|y>dUQaQU_)#eb4+>AHNI^CYT$cB zzuv|7OP>Y4eK9|p_=@?c_vrgw_h&%g_W;zu_u;<1OW*g7=r+E*FiP9A4#5h%V={Qr zoR1UE!-%I77?!!r5ymi?7mng<80 z!L~tC=@X$mv}RDoxRDSvoWM?Pk9F$Z$Zef)OA)s(j7)iy*`6v)a|%W0FELam;))iT zUVhAR)5heZ!4uiz^2=Sz`r%9fZf8k6rSykE-N4D_{O92M#o<%Sz$e%|2U1H$5tWOb zNXL%xY@H6Nz0CHEbY6GxG&|ZRzMto82Ye6oNyPW}9iIrkdv$uZ@clYw;coRcakh!? z0pbOGr$G0$(zjoKP2aIPy<7OcI^eUz_s?AK0N>G&4OV>r$U4Cf9-ZDTd`~%Sd^3+H z3~SzZTXr-hC>A?YagX^X5wK3|dTw(ij_6H@qnFd!8e{$0MSU0-rnA zLCku>;veMy1o$`gCj5ya zpA+Es?@jpUq~iZLs_ZrTs83Vqb7^nF|1cH)J5(WijsF2GsekY3P55n?%#+}s+MDp- zhp@D+)1C*t(h|p}zVkf_-v%}GpNX2=lFq;y+LUd3^jI=?gBlF6U`2bVJ@{SNFRA~I z@RS|}-4jQ9r>SimT)5L;Y=luRdm)OFwi;p&)vUuzk(P3?CME>ztap;}$?Fb2j>EvG zYkhsU$ommi+JF0yorc@wpX&vFt`+|Iy$QcneDlQGk3NaHeB-7FE`IQ6d0=IuqYO9nHIh1bMY9nsQS8bu zag~A^jFjZ$7xTzJBkGaAN+DWS8NHFKVF^{@123KMgpQ2<)NuPwywGAWs@EJ-HwqlE zABsYHr|c^+k-#Y%B!|BHd&nx#4jW!%$-O9P+Nt*;+#9@;Onb&P{Y!h7{yAuh>2eSH z_knWXZTg?^ZUX(^ra~k1ci}^3`bQu&HT|cY0{YK_tWHn=7w{!U{~0J1r~g!xH0eJR z;m?--yL*@ZYawD8`VYCJSLII*nqr}U#orEt{wMq;f&On(q0#)051Hv7dEcb}l+Tm@ zp_HVj{|opMqyG$)vhY7jn)IKE@MlYZU!49p-yT0+ArpZ0c!eNu=4J>RVArT#8vBOBCA^kHg$pP}$kQ}VR85!C%X?m%*X z=V&0qK~3rJzoT!euNvD)e-~(Ff+TMGv+nO1jMRYVjQ-w#E(9fPG7^%8oxWKf;Xs2W<$XRklhQ)U4=%MuR?NY+=B8(GvP9_x^(y@gpr}c zmr-x|mv^}C?`^%*-*0j#G^iUuqtyOBm%~N(cLj%+rsqM7&&2V)Q3ILLV)S=k^ndjw zXLQovKZ6*6^1{9t1E?I|(%<#ckJ5WXS(~odNiINE2b08r=qmc<&E+oUHM;x*>EWBp8!c%IW4(Sn zA!X?G`>7rL3ws^oyP~ygd)1Xt8nL;)u(v4?ShY z_alz*Zug8$d}sg3iZ3Xo@%<1JqXplW4Ep{N$tJ#wz*<7z3(-m|zL$QM_!fgrWBf2F zM&B2qlvwZ`{-&mHHIhwy{{h?u-vIz&#rNBk0iOwdwMW%o)_-$Ijp zM*0?w;w&?Ly4cn);7tm=^m`JU71%u~p*?3Jvz6{5k!-goS!tB^WwvL*B^mEwl=p2} z4Iv4<)azhlT&7pLjFBIa*>MT6`0j2(#HW4^&c%L#aLJ1p7??rM0*hI%b!shE*I07- zrQBU$EnMqCsLMD~j4S$D#Xb7#8qmF*RgvK;WTht1 zV7Al$Y5avY#{7j=VWP2i*J4gQop+a=`q2EPuK`LM3GpqiBaRs3s{Od1JVhUSOuK*P ziVQ}uS>J9>Yf@haWiILq*P0r%wRPWk3tu~Lo$dXt5wZ6DV_&>Jt-)FAJF%DQ`!lI1 z?aMdl$@Xat!dl-?$%Q>_-$DO|owV(?>e2sIz_iwJWu`jp^w&ZEba`^zfd46^xE20i zDb+h`!(qUGI0^o}y$t`tB=~3aGWEu^w}!?t91X~nFN1PPvJu|lT#hV z>fnBnm{#mP8hU5Wfp+>g4u5?r{B3^}>huo$b5h~^dJ}%r|D@2Tjml2vYKqXO1~Ulu zcOtuz-~R)llQ`qB@^_)HgZ}C_dUmw-?0K0n*8<&U|EjNH9>pAOh5zas87b2(_?(%p zcsX%gE$wCaLw}zLe|Rs$zb^^?(_q#NoYQUkJd_0gs$PcQkuYwcR?e2@NvQi_>WJ8U)nqHR|x!9 zpp+%iXGpKW_fzqaDi)_!@g!BVP6env`tb0uPYq24J}o0~3^5z@02dgstE*iq7jQ#f5378f-7uJVjKOxlXPLP1=TTS1 z$2I)u$mU(AI3tahV6Mb$?rrt)TfY}S!Rexg;B#dYHE5T*A1t43tZ`m{2}MOs^#Vxt zxU19^K!R%~qx{b)1HJm1c4HmX0Wrho=Jd*$Dm(N+J04>{#t7ij1UR0GEk1_$5d`4n z*K#QJf;a*CzF-nyG>^i9D7q6%ScVqHcGcX3pwZrX%FM*}x{dZ8-n!2QfBC1uOGWOu z7A}r98a)7x&If9G<*TutoFw9xyb5$XV?8~AB>f6L`?WrT_ia<|7sL5kuB*!i>~;wEHaRF2|t&kF!}io@Q8(< z-{Dv>`j=F|y8g`HAqg}*y#7rhZ%Wig|HsBZ*CE#N4>EE5d)r}ID?c9DFvf+-=MrUH za4%ZBa)Dmai%A>(b;xf_+MI5Vd8!8Hn1B1Xw5i;H%7iYu%!?cj23-t)?V~s>dOXf; zwcnNBm$I!~#M)(0OW7FBP~PXw#vC6Tzq;9{h7OTO)$TD81 zV|XNu*F9jL#PNC}8BAm<A1s@Lx5hmHiZ-Rf z0eq|}00nI9hLzwBc2*4Uzhgpj} zr&_6s;2xDE7l8x1v0iXz_qfk!e;ngZ{1d~K+fhYGBby6k{ab(B&qE9+)+4grh|GdE z;oomWj^~$FBXTjn95Nz(@r7ltL2LXuPijDU$iab+2kgO8{IR$j&5X6L3=@J`-wH6@M;}`S?Df4= z-^pATO8X*&Xta;Zn8fgcrN^nqMc*Cgr;F zjGDMT`Wp2w5y8&-c_EIG_&i5aEOu1_idZM;X*ws#HuE|sk!~rb#xU#_zR!Z!HN7nO z9+QCYW3^@$zF!!__XY5im2Xb#0ltv$i+dn1v{1W}vN^rPxR)HCX$)B<80ZIlHuV4> zir5lE0-wRzn@(@7Dvu+cT1~6^Je6qt9c%~zJPpr$@+wuLZ<- zz;;P{#xh^$?U_aPJ#2ofXzfzp;r6uNr7a&&?`?(bc0|8G5#0~!h?Yord`QwQmp(Ma zHgSK6YUeX-Nen@<->wfAt-DrwE`5CD7sGZLchw?l=G&moJXxe#VqCLCV z8GgQFm|t%-4Mpu%F`3;ZHg@ZGs!2BL|7OyR7eG8SHKhJJ^oQ)XOrnB)7GlQrN;Hp^ z>F*Y!O$FL*(3+L zXF`1+w_`c|JB0HZOO-njJ3cu~29x|1mUH?CW7wbS!U z{2O$Q({mXZ>uLO5hQE%izQ%uj%s{XI&F*!GsQ{gcD(Zh@77Eyurw?NCkIU1G`Wo`| zbH}F0)06lO?DzfSWAfDhZfEjzHpH~Z)89J@QOnb*7=x6jVCdU8P)rH>@OI&SH34d+ zF#awqv|>Mpk8FsIp0%>ZMu2-^VQ@YN)L8NN|{)Dw0Zuu0Yv`h|& zOrGn$=U8iz33H{$DEx^DzO*?ap4Edf{U@(;nB8mR(Xm|hga^olsB6(W1D1E?5^ zr^milvayokB4lVehPaIuLua!(U-Z9*K+PndfnuwAdmB#+HuzN4FR7wBwaNZ8Bn4_# z_>AgX)vt86zJ%^Gs%=$IAhqS^U_1XfqlzX`p%Sb3;!lh!PJcR66(e=Fq$>I$wPiZ1 zm|#@#wKP?1GOIW~V=Hb;Tg45m;%}T=3ydm`NK?f_B^>u4)FI4fofB%Q&X&}Q>yX-V zFRLgts`w$-J0!BDFTV3*gHTgW#VfIekTMrvOFhGwiw}L(>6tp)>Dh>Xzq{V)DZ0+-$%Z)k zKQkBOZicCIoSrA~ZwT5~j(^fVr}DI2Hc79>X`h4~;4Yr&e)#<|+~do1OlEH=8#q!?D;e zb7553k&l>Rzl`0Nb11MfH*4j|kGS}3dQBD%c=<;>fJ=US-{C=!wPI+_!R^A+P@Aa2 z9&Ktq5!5#I{in=D*wu{w39>=2$#7+kXOH7_7)JxOS)n42Tp+)o!4WR; z>~RhpC(+twEXxqhIzyr_!P3Q;{dC?o(Giq*hpXqfi%}av$z8fgHXY{@9 z#eNaZP}3!P{mG8}-t*5gw%U`m27i@us<`a)cd zF&UbVqHNmKtJ}HEM_QrL*Lw**rw}HAYghL1)Kp4v~$K43;Gs3G7zQVC^ z-lChz{EoT3;_jHhOLii{Z<+mnxbJY+_tCgEhMuHEKO)~%Zu=heGr$hu$W-5zboklC zX9i&kKKU2|-NWbMA9W8O>}s&(*=_*%8b3renA=dwl?FbDij81wPwSo6Hn4i zQ?F8N(+j&9$?fVaOKXT5q}grc%+99~3r8geZPAlHp~OVHo$SYGu*$0o zn?aYsuoEe&Q}qwUE|7}IBkt<;O`piq^8Nyt|c-2Lf0zr8(-m82@(hL}5jNtuX zGbHb1&M!kvjo>vF|8yxWX&sMz(oq?_51)-pJ3(Lf(~^RH-i!7G?*RG^RDdVurM?h^ zw0`7W09+5CxMB$$5AC2%Ex^|`Ql{l@G}%(FII-MmDCe&RTSg*#u~(qh01=*v!Rzoq z(MbHOZf~{`JqrR?@9d4+6TH>H%LMQX2r&yHe?r68NT!yLQHy`IR8_#LE^L531Y;)> zk?5D|KV^fQksuL4>R4vl@G$Vni$t7^EClX;?pe%7ZIY6O+EA!(BuE%Wq2fr@EMPUw z$Wx7;F))7?TxFy#Lr^yY!i~IP3O9y5Cts+>yKX*tj*T% z{9Z!q51^7YK|;`aPGLFpoU5VB%)BPiUnpF}cj147FBNswU|9%>>EHk@^49eSIzAMw zL+_46cpt*-b&{eHVKM~Me}nK|(1HC~i!d=H!FM1$7U3L(e~2(imxu6XgiGhmnLDr4 zar2E!$`HI|_WUKcE^_$iESkFzsf^6N@#cl|9E;}MGS9KNbl&Wxb4ne^DyfU-K(|U1 zQU9l7HsqH`kCPu68CUHae+bpS02{wn)qWYc2vc0&_2>m3XNfORUbwov^7R8FOQ# zs8WT$6O+32!4+V9Kycs!PziGrUIMs%r=pg_Kx%6YN0>9e(79wK>kckPEG)lRom8r! zTt(=_LQkluChV;V1=;SvF8k}QRzXxh^QDU=t6A}ljpbxOdslz*aQkI)Hxsnp` zR-*G<>imtwd9&II;n{Kx>f9529PqMYa=%hl1@+W%u&x-_64nO`kOJg{#TXVAV<3ga zmSHOHMmVe-}=R_)%7sp-^-L zEJ9LHvtVVhdJi;!J{buTvhdp&aAic7nFzVjaydTi2`;d*oJJ#xIb@A|&|KGW2e|Gv zO!?`#?h4G56?L05*EIpMG5;XJ(TJi%U`CJ18!Ex!%lkiChG^x`C z)ql&kR&;fL7+eik@w`YnQVRWy^1dP_I`W10$Q*sB*+cg|$-qM~&iH z)vnEN?Zv8371=)F6_3f##547ul@}Pc;)C;&$q4EDxm`ZB2xt z)59PcdTKl~|Gd$6!i)VnJ!@p(i}`tzReo{`(DHK~<>%F)d>8W5kZ6#Tfojgfj>X9x?CQ(8 z7+2|qDhP<~v(N?@#ItGpVji@&v22M7-A(-Bh~ieMAL#_649p@WDlEBtYS;!5gZ`0F zr6OE56x9{000bOlBNTGj>CLLR0Lt4WRv;CqEl}SF+l0K;ftA&cl}940tm-b~Tzw&` z^N%(GMw&q4Vs)m5848l(;VS-4Bgh}fI)Zsr4hkpMw++$~{G%#rsnV%&>8gAcIJNu+ zpZ({=s>Jp_s@(agG$W%(ndD1Gsk)t#>SFxClgsW!O<4+>DBl#O0#U=w!f&=`b!e9MQ03ik>;X z#vS|w%LrbZcngM1eUOU~{%0xhXHFsV!C3y>jp^qaV4QyX*^4g~b&G)&l%5hG$Z?nF zxN#lv^r5V|{+Wev*)5A_%c3N882+D05qZ*u{n)r~tSf`DEwO1wUh*nBkNN|&D65ow z{M*u7ozASfOYFjTsymb5UuqwI9hgPt|4Cp*tN%FWANMmZtgsAgCOJJiL=KluUoR6t zXU^l#ealYkY|c0EJbrhbRA(jNjk=1=22MNlqi6F2A}SN^^Xb={@MmLOW4^TF{}^OI zm(!$O{7*w~C&9m@H{q8+Iw!$@8ywIZ_-8b_+h~6^m^K@PO*>xglz(f&y*(;_!fH>S zp430tGgfU`yDvd3a$^QD^?eQ6 zv$ei4pH+Qr_ep)r?oF)kmrTyEijKEX+SeB2FAq9u$D~C5!phGy7q)_b`mVxfIiS}n zn`@SYX1p^8r9Y=w-7M3C3y=PkG{H|C%MP$7E{5eb5xc__?KwOvRt8rNPq?Tlq}Pzd z18n#SS_ACUZ-B*7PaCq)Uuci9>?+5yYgE#*YbNx5s~LDPkzom0cEwA?mtBjKN?gbi z5NuClJ~U4*@o+TUi9twNY4P@By=Ed+)V4K35f+L-ni^JQgIC{+Xli8Kwo6Nkbcx-j z&*(1b<0E1pYbvJjN$bzCW-V#*4Vqnv*Y(bd~n|urRPFy zCK77TT1}{K-bj;3C41w+!arlXpwBpBl|Ua|qI3Fuit#~KSPE9K(g#jCdc-vwLy#k@ zV#0gR3~nm}NnENJQZ$**T2aavzQwArGR9{oBdFTneh z1u}g#Lwsh~V#&g^mbk_8GDc3fLae#u6eJM>yZB2Jc&^T_E!`Vc z8Dv^?yiSX4vh0k;_oP#Ku0%0Tf<^Y6^i!8^Zr-HgV05 zV=lMs_vON=LGxoXtT#J?z}(dKy5`4+!7B0Hm{r~6$G0jpKjx8)sr)#1B{wzpqQ6wm zY70x&AO%p7a$YM1@e}TIL(IfkA zN3$alsq1=-{FWR**b|Hbp%@2i`rM33ZjF4ZT)fvC{&m-rIos9Z?=kmi-Hy zRBSbOq=5hqiZ=*LzJgpl+r)l8msNRp3VPdMrFDmkcB)&UefYxOZ3$LdA2`CW(z?SX z+i0al7Gw_>PYC&NyWlqAViF>-i@)UDi|}%2l+_jOvZ6lP$CyglTj08TP+9NK z|5o0x6aFmu=MiW)o$*h#sNg-~A39H&{4+sxwl^kOyKlCF>1p@iN*DOMk2I)FCb@)o$- z!eyhuNO2`DiOWvl4AbjcrX9{opGWwOf>p~aPBS|$LbRvyDk4V|V&ds)(Y({Kmxvf# zM$r^5bk@Gfbq~BkdBXC+6+&GLVP6F8QVC1sF?<{D(uD2N>c^1Z2V?Z${I=tQ6na?J zKY3lPe~4GY`bU?@u>JwhL9%mOa0wXOx&*pVsMQR=UA^w%J^@jL1QV}kh7p8gAVZZ! zzc=8V4n!%1sP=l3!uw^|H)01{(ze#4j zYUDy5Ky|6(mXh3HMyxY;>RGQr-39>#skJjg#qg&27T;AE-wDHuONYVFjs9*mc|2F`jdqtL;iq1M*?tJn(A`5~xX(#z};^zu&u zi{hq-qaq^esS`BW25*^Tl~hcj$!*RhEq))PwH)1&SAn0=hU0W z*5aGZxj^vYf&%(NWY+|M+i^BxhPYSX2YDb#CuWrm#zY?OW88x_MyM7yzC_tW05i!Gw%Qyu!PzW7O% zj$!L?XPu_yEFc8ie_&;^que>ZCVC5x;PNO>MgkK$hE?mU?nbjrkc;tf zgui-WZ+b#i5jAWLEF^c)%L^{Gx5hnNA_S-0<$%reJ&BiK8VXQ7Ne@xqLxxM>KAZjm zLZ!fSeYEmM)y1if0{ZCi6Ej`^mkX4m`hq|izYx^s1%Y!l)!s*wWmM6G3Rd_NNzk1} zYJP}X`N0vhFCB#4V#g{#Hno*b>`PFxFoh$ZL+xI|Zrn+2M9zgURIF|)6+z;Dx-s~2 z*-(B_2PMhba*7kIeiz53>KL|Fw`wF>f$JHsN=)s?wzY*1NzMl5Jfz+)!@HMlOU4RF zFCyTMHT#Tm(>1ggkX(sdZd@(Dz{%6-P+DinzysAVAlvdN66pf<*aC77K230xPoivqrJ7Kc1E0iGF2ay1m;qHv$Egw!Au_C-qSrbVFMMT%YlcdEed z0<133_6Z%snl$d&!seo;p@Zf-(I&4M}@E~y^V7%HjMRkN&G zgsKB8D;-N0qt|t>g-a@@;qX&%I=%}j+?~O8hO5ZAf#LzZ*a{1qW|B0L?dYi`o9$w{fRSn273$U3OonAO^c_tMVu?# zt7}k(avxue*Lh#X7d>B?xeuw`NXu_?2fl&aYB)qkC^#0qt>-F+iq$VUTbzv;kzQ#`r=2k;&k1lF8ZfEC9AV zL;PU}`G4%a4PaEo)jqz21Xc)c&_ttRMFGD+ML)M)R)c)T7 zOY3It+?g|H&N*|=nKN@|V40v5ehe)Utjdo8RjV=JJCD;s@IILhj;; zC*fCZybNVfxo;##JrB&p4>8Wx1*|V4@82w*B2P6SkND$B`_<@)JadJRO3-IXxKa0@ zuRuS=URVe4?wXwh@662bc4_?5+y@03`_y5V3s88zZR#vEAaOp=B8rZ@@2lVIGap*% z>S8;@v-k@k7~Zn++djbx`S5)g?L-Tqd<-2d2SfCOcaG-{*f{=uf+h49jgK(NGr(~z zu@(sR3xY0g-uQN(-ugv|W%6JebX$VpaRgnj?&5?Qb^Rz3tdf9?{&gdE7h2AYV85ot z>;g)iN<6D{#bbK3JMRZ*9R#Oess{(MDMczP> zw8)4IkQ>sON=~(wpf=v zBYH}zlwOJwLi}q;E}mav#Nzo`ct(klETM@%j7d%W52x$5`=Ny^i<>7Kq3F#L5QS_ur}4oXW=&Ka6$u5Gd+I`S_)NuW9>Rqc65#pozYq zeB2CC`r=C?A4gCsL_Xew^0D)wiL)~BvoA|%KD3innh)cQ+9*N`kdK>&_@UL^*vYgt0$HIqq=*L^mnQLM97{dF;t z)oTs*lo7HcQ6w!gcKNuJSo~j*kLxaub@t~NtwugxwDd=bey?f!mC+w3YNa#0h4RsE zmyZLY^06pEf6SyBg?xM&j%R&&5Ef{gusLkhatylTL zjg@|v#Ffg8gbwXDe*C>rQ~8_XS4_%DrBp%HhdOg z5CNZy$aFNL{Ykr>i^s< z>>>{Fl5vykSw{jjt6uOr@U^FB-Q-^K{0S)`&xm#5{oB#!-txR1&-$RGuOJpe58?uA zdjy?H(4(shF`50bzvoQu{CmyH=Ef*J29X{o;L(bB2|cuPaT9fdoPn07u9mbuWsa;@ zG$3Aty$eCEeDpO>y((FSffqZ5R}`|$rDQqJ92(!EFWP*I#Kep5TQ7!3&nFryS-ri5 zD9&BfC^bZ~#(Nt$k=Nl=41sCHsSqb0RUDxk&r>6zw0aAkZR(~A<Dd;mh7=0oBdFs`IVpw^)y8{w!Ux=>!3tk9#<8h+_R~tDG!Zs5`AkRNL2T zKqFBuuXuJCd{JEtmr+9$iS?UcHpVzwAMee-VVXsgA`6^`eysHf=+(NW)x~}A3Ow&! zTsXWqxA#VACCh3htjk7zj8P$P)cG-j?2TLk&D^@z47SS2YK0`TV= zAVftT7h8pMeJal?+#s*6q%rgAGr1`77kK|Hs5ML?5W=crN64PWT=MM>op- zx(DE$T%o~)%m2SP=-%7{oae)Z8q6(G7emVBzD|8l>-~^*F_q=RwJLzt=MXH;v+maw zwrKP5FzDZuFQTh8$nlsZYeCQj9)%%;)({nuPw6~`hSshko}#~r7l&FejEeALEac9| z7Xw;i{^vXy=9a_+tjBzx>W?7{IVX^}$!%Qdo3E7$>2O0IIU()Zm`0g8)#~8|Kow&m z*2)MAtd_h3tw*%-0Ms{I(drTU4|B0|1t$!52{+)K7Q;r)4U8C)Q4qrsH0Th+yzgEN zAum`Dn|-Ejf2|uF)7G&WvB>IEfum&&Qmuy}Y>Oa2!uul-YaXnImRj_?P@+o3`D!?1 z$QKS%7R3rKgwvr{Cg7Cx|l#KvEX$C-ZLSZ(DN^VtUHMqLOYLJU= zY5*F9oCT}eG?G~?d?e%%^?R|k@98u?Hy^AT%3_OhKyN!9LsBtuQI5j`oF4`J$@!7r z73ZD!KM>w^7XdF9?ac(r@_Nul9?OsB;|h6;sS(#T_0T>LMAM1^g02VU*BEYg7w2>W zL0`M{0fpe($@dY!Xc7nwZ08?L^d2w|*dElTULy+(k^|t92u5bLa4n2QCm1OpmqyPxLI>e!F>)_Ky6>T$^$Dd=qv7Pm5n+Zv6G{}uWf&l1C}IG6_( zR~!)Xw#owMUeN9M&=Ynm@EShW%f%tX@(RJ{%TY%?4XVlhk#cxMx&6I)6)+U}y~>Y3 z6PAvbYuj2wSSCf2(WSB(Xcg<)2V;@n+Xw~L%E)s^!BbMejkUB>q(J$8EAK-%9NR}q zFw5iSvcVJvgp&_t`}=`}Sb0Ky9!T68I(3pS^aEbDw6zwiLC<5LO}hYu z4HdWJ2)@bCN0qgt85GQRvL7tYH)l}nK!rvS(T&#)NKZcr@u{SG1mp^O8-rzvPv;hY(=puJcmPgb@$Lwg?KDjDELsQ{ zBwP-LyJp;V2^?4(<-i7%0gJF{Z%2Rc&ho>s1p#_&Cy2d66MG64KVuyIsV<(LqgP9T zWR9Li0R%@+3s=#Sz&z!ug0qq54*9SHzcn}+d(v?@YpXhPN?LaRF9tJ!Xm(>GVV>Fr zZ^6dy^DzmptR+do?swq5kllk_=KG#n)Uf!y4e9Ti--#0COrL}%xUMon2*}et!@FEKuJ+RX4d`KIhtJQXWi0X4TKBwn(90*x`J-C=fH4l22XKMyo>a0jsm)N^c?2c%Wj8eeI#ZniUdb_jnBJ;)aJ(8ZyX>c04W9X05%z5Qqg zrM*`t>Gnb!ttB9PFMmt*oTzi`qts!0`ChBNNmT9T{&u~jU~g|!54BeorRT+jnD)N- zP4p|e+dqnDUWi{-xr6Q?O_@2BFokO`^vWEMu*TDTRYh90LZh~Y2J+|B+>UMVm<9l8 zy-z`1h7xACL0GmcgqPDLELAyYasrNB3%os^UYcI=?Wm6;8S>Ob>xtA?OEJvsf>%vaXA*=o9g_ak0Ad<@=)NQ6v5HY>o!0lP z%LqW~FVX&EcmsF9RbK{djJZ(Rlj$wCRW5Mn9fs@t0zbn$i09~+t7jth#V6YvxS(gx zcqdrafZ_@!vY)AlFm-%IsUo>? zRhl}mJqvBR-u`EfComSB(HIfsFFxVbyn>*4EaS&daUH;CbG8h0U=8;5$CbE0E(0Z2 zpt*%VTVZt(--*Oyiq}P_dR(TL@;VM>yua`EURL!riPfc}k{ee`vhPn>SaOpKuSi)~ za^nii1;3h1q#~)dB<``y9aylW-@M~P-X-MuLP2F=O6Zas2R%~YdD^=qP%{$c7x%*b z+<{HKf@KJ7P>>8;s(5-pT+VVob0pu+jH-)LWWN(!?vrfRi7P!RMK(&0V>YByLrdUZ z+>5xL$Qx-XRTb++auvZMRTb++auvZaRTb++LKS^05r;B7u_G~VcSjvX^~!%r0{RW{ z*thKQ*cPqr;2m?Xsq9OzyyG%ku179BBE6e@HFxHr+!Od%`+&)9;}u?R&_#!=GyUA7pY5`K1#8)a)TI-r{`=ip}gJ zf2&ljh7Ge!ba{Tb_^lH41*WS2ik*Jw8FtYw0xOl9 zM?p>0NWKTBOP{G8*l;t(OGm{pHA*0IXLfXZ@p_d<<5$JZrkzm5IDm`Aeb_UNR<5O~ zMeyc6%-7do2mB-0AHK{N4lhM<1d7+Ijqr^PlFNyAaCshn84V7FnNp8(5{_Nz>(zZH zV-0}2(r-pS;H_7Sq;f7EL$X6U7_jI}b`d$tz5@7*%IVp*`l>`x~Y^&&{X-PpGr9r7;b*=pX! zB3_&Xg}lppdl%zGOGMD_7dA3L_C2sHvK0vV)ZaiYk&lZ2%ErL6e}Go2nAx;1kdK@l zmd)aV@*(L^&Ne9TO_a-)4c}IZJ2-&&WO&TzkqhTt5a9!XaMK@22E2RgBp}e%Ykp4C zJ;>pv`Y|XY?L2|`NlMaSQ9;DuAs|ngf&?iq=7m^B)6EcsS_g7TA3p=W(#OM*ZR_Ke zoETLx6C1{_oXExo#h3WLlwc+{jDOf3SNkZu(=nsAoroE&hI^cP!}$If3zfC)pd!@p zs#DP>yu#T_u^8xby_TK#76u01xqL{kM|u#_XCnQG$v*?>`;g|mcOuf)se@#ub{UEUy-GcWF$8giEQE_yNq9L^rRoxheAED7 z-?fSy6gd#}CC=T-DIWsec>-vEV&zp@g4etO34R|Qf-UNK8RWaNmV|)VHdE*KyA><>E@Mj9*Ox=iNAn*$4)T@}M^jSorH z_?}kdkqX`BymXzCCFWppgM4^thxBwjuF*K5P8|paVQn!Y9TxH>R4UkMZ-%gg9-70V5fyvhk)Op*`G^eL>>~#5oS9se# z!S|8iwCCx8y*ELC@J?pQ?#OEp^kI;-Ta&Sh>r&i<;M++&5}}TwX#i}UsDLB&+w_SF z+{}}i9S-1|a~hmMbpQ`!s4FVcbVF)VG&MPzni5UXg~~|NpPCc8 z-k)6{p^U$w5W?!?V+4&^+d6M6vY|7>UfhMdAI8WWmwzobU;3eX7j_i5i$uGgiq>Hu z0}GUkE6S~|imV6}mA?ihVNS8`I7k=Vk7&X)GOJK$^+A?4h&AuPz`Y8W&}I-z;ks4U z5>pt&H^%8s>hsa+QM?tH(=XeBwExOkH%*^6>++s3iNfz108Xi&pd416G`4Ss8$+c2 z&i*e^;nw{pkftYu< zVtV7} zflpVvO{&!f7S!r$kD_FqcMX2=hkK^ccr7mTsPo=Sm!rMKy7vD?t5<5{@ zqG2AbQ3-h$_V;dMs4gSoE*s)m5saZ-u8QAqq|^f9A`NlZabWU-g|f@>Nl;97IWmED zK>pDz&VC;(z7v|l#^PLfl9jcjH(0zJV8~*Qn_Lz)W9UqzcbW8QNUugZA7zS=UV=14 zz;zPRl!0rncU^W(`Sh#jU+%i}rt(?yB^9SJzuN}~`Wf~saO1QNXeQY}^fw4PRCaVB z@YXS!Dyi{y06*E<#f+qU{yCWJlqJw8NBgl++EvSP25u~Jm0Jai5I>lvS^xHEQ?Lk3 zfH0yflVb%Zqo9$I^;SW#%JvTans31N)E(?3*FpaceR-$Rq}btLJ83JnZHqr#dvA>- z*@2_Lv0C~ANWYDKo~N_>VZAE~sW0z35=cv5j)(N@s8kjA@^3>q^)px&C_r5N5V=yH z$HD!uZ5U7&X{v@$8_fqNVmFi)j%btl(IyL_F6<|RpUX<7_+I|Gc&mYkDgf zYe%r~?h-u%PrwiO6N~NsL}65$?xHrepGFq7H}U5g%R>LKl~c&AnrvQnFEp;%5#Qli z$5QR&x+<)qInko+2}MstQOs{eI6+E*ys=M|l+%{RL+&3d?pgFp3N|iA((`7<&IU{D zjHmd#Gg9XGhlUCS4hE@6~va>rqlLz&P3ivD?5+I1(gUuYa`O(1dymrJml5 z;UD=kFm)Of1ZI4gb=HEi9J}1*kPD+TCma8DbQG-6QsiY-?A$tavgvxoftb)~D?aY8 zfV8KE1UYQFNkHMSPhGVis^ap^$_2X~NAIDUhEVaBqy8?`-vyhJE4wTFiwS27MoFL+ zl1bYIKkOiv2l9+aG{^r`4RJkO1wp3BP@!U26d6Szl>!7C$CdgV!;nZdqHRV6ZyXv6 zM5D9J`Z1=xeg#_b;b6=X`S*v^TCFsEu%I(_yG3jlw~I}jBJG0cIJD0YVJ^wJN37jj z&@Ox#NGbo>VuNSXGRcd`Ia(A*a)sW-uE+Y@(a{lq3OcGMObUz%PM%a()j(^Ae>R|B z5nFko?c_&MsNCEwf=1~390p|uO)_qLssTO>_YN8 z9By6JOnKxlq^%Zly_=CNRRfO@1rU<=LAfj~uweyyS~NckXCv%$6l6ng{NA!?0Bf)_ zdc{S{teNs03Vf(Nc*~oa^6ZT)EsSeFhA_SZ3AH(E(=iI7C!4F`B7uwnV*cQIisjK3 zeYc%Rv)v-3cOXr_tS9F{sra5QPvn6d)$))Sz_VuPW)N+}G*u=x;_ z*d+7sMPe~TBW;oX)B!(Z8d}#7REMwcn0*v9Cx*l z_FSw4a=}O&Hxe;h6LGGtmq5o0I3zeVL8y{AlSGWaGL0lpOhQUidg-SiU0?V=HcBtT zV`VM-4c}-0fNAAAdnuMeT`O3@(0VJ<+f2F^=~|P13h9|QOrL+nk7l{>xBRBLv%V9V z?=rszBUG_F{AxRF_xM$#>m~5(LF78+S5Yg-e;ynX8^3noG0Lxt0nE;?$*f@bax>Bv zzsixe_;nT1|2BTrK&aBiZ+xnpv@uuZu_Pq&$A?M}Q%sS%&VRT&yT$)uyUBlDFOmPq zb-%f%ZfqXvnG!3<(1nSXQPEjX^AMH^%dv}i zzXqxm&PhErEMj0)JCJ}1w<+x>QNbWno+C#{K^|m72z-y&CBMs9Om2%Mbb|Hiy%jO& zN%mky40MG@Up0%ibJYd(`_TxuW}uPS*3M&4fmhM;vX=y@%*QKBD#;nkiZBg|!HO`Y zt;mix2-!wBLDOPi0-X%^2`)Ogi!obwh$WR=+uz0FMkb5C%+4c?XvoJPO~TP{8iDjv zCOs5s5`g)INK;nJ=SA&HoSlJxHJu@51iro#o0HDh+MRsSUtNy(pMnXdUjK~u#LhXG zawg$^d@wC>O-={>x;*EF62b=E;l1T+hvFdAflscvy80`yDFXX%rrQXtYEnv{;H3!S`t^ zSsi+yEpCcF#=O-^gzsWHtq||xLu7qeS{&}(5$xTp6@ynY?) z%1Hd;DpFD9yO zT2#B!vb4uVd2O%V9FHgCF{QnZwcHvTB$E@yXkw)JHxTjUiUs~w25_&UMUqHyQy8sM zrTG^kF{d|_Sua0QMS9J0sa9sC0HzgSN5x+LafpJdBcdQ8#jKD2;oNn8eMtkoSl8QM z>TR{`p^4dNbM!6P>H?@m1ob9Nnu%K@oUAqGt`2C-YB&uxjX4$$S!FG$20Qqd14Nv# z$BmqCMDd*9Jl$%H<7O8R(zHH~*wDV6_Mirwr zoreCHanN2UY%{xJ>}yx=@J%MXAwO6Tskg6(KKt#0QYDrvh>l7DCdjT4Y%u6ILyBJuH8jdWowR&+SW!xqbdA ze}g#v4i*I)5g~=;=sT5+n_d~02|5b=T4q+T2IKV6#ftp|z%l}ur2%kFV3a@*HI{mz z;cNopss}V9XaS)MODt72cd=4NdKp-FF4WfSO@+P%-6HfaVymg(PP$g=lu6^ncq{W}sPIi7!yX}2hzf4YBIMNQ)0 zmwP4k?|oaA>EA2JviEN@i*&z#u`iPNp+o8~l4Som)-Q_Sqv@XJG;xy=-9xoSJ8oub zjD@O~_$D?@2#2{o34<5YHg4&iOeCy0kSPpKeOz2g4xS#DKUS zZ9qdK#|Fd0tcTc)2^8h32cT^5>4rsjThU5gR2HesxVgrbW$1n(vb2i3svlI`k#K}; z?&$CFSXoOVLa&WvZDGk$u3MF(ysXXQ?J}f^5@Rk)khbE3_V`K{hhMjg%lNGULhu+; zoQDC8qSvxJ3J#AhG#2L>DP%o#c>V8q5|E3z%v?hn1}N#B&v z!byA3w?Bd@vc{_?LwlDxYR|#^R6FF;68!f>hy1fW(LHg9d(qw3#bf^aLio;hhrCu7 zr`z1rD;VZH7tV7?CcME@eE~Us!-e}-_n~PpJFpgN>#!Jgg|b8*OuUh>(lD_LQkGes z))!^mJc@QQ*Jn4ZE&Y0fh*}Bn$DFzZe_CX;5F2OyFd$w=e}QKw-IMmsd@Q^naXO}k zL2Gf>DnB}JhL0(F9CjHKU1^$|PLD=YK6N(+1-7nYM}3{Q86@W9$gaBG&JYrOjC>^@ zr=saWG-8*4sXOVFxp6%cP9-XZ&Rr;&4FYD%;DVZOM0jih<%RzudjPkfJZjmo%f$@T zaY8sFBZ6-&x-0tRBtWk|7Efk63vHrr2$La)W&kfR1l%f74p0XXQCIgaRy_FpY9?cK9>X3)X8wnI<}v~O0|V~k<@8;kLA5EQW44F_GF z`1MF5Na2zZvjpDfdUxA_yWwfA7M9Q=|h z$w@yQ^$+r}x2?T@W&wD-+#T74_8<@AV)9T@*&GuH*-n*NAZE1$ixtBeYGH>KQOLwW zS|*fw6`~rI38jXR+%1fh)a1Yvj+Br5@w5RHiyXrI)yS8F^Od?AI*oB4l}(@YjD2$Q zHXBfpz9tcsFYLpNzod~{!XRIV5S$abTk_S}U#I+;Z_^LQa!L}22+jV|6kOH@Oy3izLoZX9?&l_Flj`K+i?C-3BK@+ zvz)hc*mmXt^#J`azGuXZZ?hba&!6(C@NM7US=%LT3g3)xJqzUso!#CJCw7-Lso%z2dNr40ekf1pGcG%Z671Zg7I^9B z6L7cYxYfSsI^yX;xw|(YxBj}yj}-T39mXt0Dlb%o^EbwU8o`0ViMV%Cl5wBHgCzRI zK{LbL2g(4%Nf{9fbOv$ehT&y95M7I1E`25t5ciLeA@}1QBP96LSojnXpOG|b2Nh({~V%fS~Zn8DHwm4*od4R6A8MoMIE4?_m`4wRoAiz?utfHyy<9|3I{i!`X` ztUR2N;Fg0l%v-l6Ek?b-5-JkV1Jda1q03M>P|nl(WeYjvHca$4IvB0KF& zf8py)J?aWQaZ(iN2r;+CPwx7Jjq@Al=r@uVI&RS!|L%}xld0QT{41GW5Ys%IKaGo< z`$gVO1u&i*arPuxz9>t$4xvQd1-}&<)snX5q*A=34f!;QO2>WGIbSlB=#Z?_39uyD%;GWeS`4(ezP5EAIbusQY zmMtJni$F20k{Z=^I15{&WLC^#D9aT?urV2i-|M6fVPVBtRMb8Jt5DTdQu7Vl_eUT0R9oZs#FlTh%?N zAnOX{<3rxHX0LH^O;A3U3YBdQE?)w)tZl@Si|#Rx@BCI<0D%?UK;hPDPDSV%lHVbvD^s4u$? zS4}~_P;4cp2SJg6aG06uVu&4xogEId6?GOKg`)3)6zgXXOF_{sRi~jOJZzvj2B}b( zzd&;^{s=+u13{B{kG}Rn_rhUTx3m9B>VSCmn<;oWOqi;g*48>*f9RoDtGfkgCT~Y* z#=QzHc!NFudN=h=5JFf z;@gOLTg$=f8PF!dNgCT}<5v5`R^}s#{(txBgQ;+?Z7OVcU4>ir{v!Y}217Y%|2yO+ z_&yZ6Wd_8vK1PHj&MWl7#A}@)pi};I#?S7`gM<3;hg#zNp=}oV2ebEM@MNZg$>H`{ zEno?@b(m;NWG@JS9Qujx=yB_Hb`ZZfA>sPNP|T-BeIx@(ALuSVwLZ-qGjX*EwmGsf zGDJ_SxO+*Js!}b&Vn%)q)xG|Y!&8`%#9&JUFov*ifziz@>?t`CpJ|teWO0c3qqqap zF8=$-d@ydFb-W{VI+F)I=Tu9ZgpxQoHn&s-tOwHgdh?)a1qJ%+h)#%nHofAU(w&WB087BD_pORN+mjMI6g9Oq-QZG)>Yy}sT4~HKU+ZW zl<}3AKIJM^shR{C$FwT6HC)B}Y<%j`59lw3_r(Lcl`xtA9-QhxZJ|tp*aT$$Wf-?E zVcnU$InW=K%{5m4{ssEFoA%HV{wAK1PTzAHw?*t3*YByC+DcWkgdntaHH+M35LOUB zqdy?@js>`fQp4H<+_Ik^yOXokqwr-VXvupo0vq`2Do0Qd(~c7~GNI+n47q|hOPZ-* znBW++)#P zGfi;^^!^{vQ~S4?-rJ!DLs=m4km{s$C^Zp6s@uSFc==sim})VaK;jaQ0} z4@8?ne{d43WmMIA*rx;^@>A%;jQY)K|4ue$GCH3BEdE&$f) zRV}VhTz}s|*8cAPL%Zzg|Ti>i7~hG5*NxKlTg0{5=U z=Se#$|8e{p)x-F|mOQFog85CaB1PUZ$5ZO6IPZgqBPa{cXNcu+^U|qoHU0JWjcz;}e34(Jvoq;ItSzj<3F<5C|-Z#S$n)S;WKyP=;z$Gb&hZ7Nfro@DEFyg5CLS zz#SAbEwl7q@=A;$B4DV zvyRlLEpHf%Ks8lu9@J}~vZbx5ZQ#Fs0otbLtA$r)d^G(tLHTd}=KuTi8A?nV`^540 zU;d}xWb$A6|9?RKV;ejZKd?9-^W!?v-4JnYp8|h33Y0T*n4Na|S~4>ZJl89zr^v?a z5H2+7AE9M21{|549*_sb%Vx*oW%li>j`uTjzw){4mspWz+TrIht1wYl=7wdTv$_n9 zr%r+vD3_;x0uMoNV{KORVO2i!a9xfGHZ4l`EqCRBAw zGs_mG`YZJ8Y`!o4t{VF?I~=zq@iW+JVv*Lp@51~+{dId1{JVPuK7?===W+44AFpAj z@hdG_b%8$nB;)@IJkB1Y&$?|%eVE@P@IjxaI1h}c&%PRV&(Y_1JCfRX>~B3tA9`*H zeK@CQ;9Hwn+tlZDVB_iZ@n3ZxQm;C8L4FR#+$RC{-3E3y$5#yh+0Q4naZLB|Z-Xbz zMLf3CrtVGV!}G6ZqLDS$_}3A=+IZ&?%?*_i##aUzbp%iAw=?t@Kwm;7xKDv1_hf7A?YTAQ6TWz;zF>Nl^+J0JC@`7P83{10{{g%ymA;%q@ zY}nbXzJ4*2IWi{v!&jU#m`L0HIpR-DesAG`j_1p@8Jl(jA2Rzp#sT8t?yKQukS%t@ zA^hv~n5ZktHiBDM#1oH<2uH(Zt7u|7muItnh4qod4Z`%tJm=NGnGmPU1O~!9K6kk+ zX@wEIiY{QGOVG%V#i}!u%B)yqfk4cr;fj=b25*g^Z44y z_^E7;jhK}C3ru^bVUVB)>Bj2^G|x`j!+71<&GC9GVh>SgGhw`*2^DWPS*36v&3HZ0 zAe-7~*~VvLvJ3o~P#+U5QW&28X1KPQY2*lgOdoVSo7Bd1(?;s9If0L1u~F-pRO7X- zC^yB(ZGx6W&pOc-&h&+mw@JzVUO>0fU4J`+*>pl5%j~8?!%=;0|9+6%zf~_dl8<&U z0Pz&)zidpBs!zeA?fkWHm}~XwaJW-YbyZxer^@S(za`jq$afFI=Mi7!qm427Aymld zK^linIjKhm`it@GIy<`m!mdr6*z@E`PB-BVPU!Fc8Q?*FW^_}2`qDRp&}?KgsfA?)hhHiR*@Od0hxEDw z4cYm5Vmjy!;XQ=OnH}DTThd_b5Z-;zS9W;6%m5GcU)oLj|B-Wk(Em}|oYeF$Oozd4 z(SLh_d_6&%lZv|z=`|4@u+wW!26&)XO*iTF&Xby6ho_fURhy zM-2%5w!wUB|A=4B+II|de#jWj(N6)}7EEQ-P^8AUcoxZ-+pYd#_!P(A@;dIqTlPl$ zhmw8K{`!+P^~u9Yq1mIKtr&^(;^yMfzj_I;sq`Oe)tr;nQLr?6u+z59SPp3GRnZHF z3ENBgcLKhDahQ!XO6h!jFZx@QHghbWdwhwT_qVVQfGzj8FiqbidPsC-EjtUh&Ci;h zPQT)r;o!*$J@uS0Z~VYcvF#i|N9}3<`7v+~=h##|+i9~=BAvFWt3>JoK2O7+?;<{r z(f#fc(*z%Sq*}gH`nQnp#Tc;o^4IedBi1h??&81kQAph2$Ku6$Bv4rIN2X1zSK!eS z>sPFr@nZcY91fdUM@#v~y^XrHYvaZGd6br6_XPgpn=p4cd$E0NKg9Q4qC+~-bx5Cc z*JA>tu6g<>ttT9RJY#A`D4g8X)Ej2^~k z9mv~Wjj9y9D{o6VnuM{72p=KSlrDz~u%b8^GQJ5(j4jrZ0uonIXbjp3A#v9MZU zIT*pMYG^^jtQvS0$1gHr0%fdt7MPFyIQrPoH9y3sh@Zi!Nd6SD1)n0$f^$?^YXS!U zpe@DVjo!Vu9+h_hcrJQUi}duVSI_OKj|?4-KX%69_~W6ldi?qR9zXsH(6LP8??bC* z{P=qly4N=TqNV)z0e;f>TSM2%jK8IS5)tK@n6BWd(FGVY6mMtARAV3}tzAz!l<$vi zaUwH#zMwAe6dfn<_4vGdjji)pAc=iE-QlP)bl*vP7_ZYg|A}wnFh@-|fv@}Xur@B5 znTh>*0;9BZ;yLfn3>my}Bsv3rK6#G>D2t6lncp%(9Ho ziW@t5!`XMivl~A#dtPBe-U$=ko`7-n?x(>JFMQ;C@uud%KW8>I4_GzhP0f5%vzeM` zDgRQyPck)Ll#a&^H>xLEnZYcSStc#o?atpW$nzv^8SSzhpqk5woD=xqV#UX@`8&|i zt9;KnV?Y$2di)_7pGezV9N0;V4%?d``q|C)2Ks%N%}bM$Qa1T(4B*V2v=QDx`{+)3 za8kb+(xpAne7J4Zm+8~-J42rl@E$dNZejmb z4Pp;b`aFZID1E*L!-YPNaO`RN%;UTZ^m!SYR@3KyXsAkR+^wCdx-+y%5$HQ>_D59BFwMe}KdFLnA)YKnA zQtdQF>tf9 z8`m-8EJisz48OTiw+Kfw(lT46r*tLt06t2$9Uu9C&VK)Xb1KeDob23uRmyMD(;Xk#ik>;-n@wePDJlGJ zj4~kAc`M}gGr<0}U-2_z>?fAbjgiY;K(gHZk-TMHzBPYkCERn&#_Nj-V5KmrxpF}> zuWz5YPo;e1))Z_TV4&W{29zyiN`dWu$6R3P&qtfXRLwk__hhp+y**pk3 zRg3>l99dL-1^^~l2isX>2yfv44t=m`nAQXvuUzEWV!r$9Cb~QbUAoiLbSI076w<<29*rP%T-r4D~s2ue0 zpsI}?OYj(_M*;m8LysjWY|&!{(mhI#&iqG2Pqx5x@IzTu4K_1DtM@iVqh7iBhar|C zkVpzGvlV(u7kU@u0F6YiwyEFiOq_oh=OPZ_SniT(aAKc{S|1DlFCn`Y{s(I;CIdCW ze<7$Z_|tK)3bpfXy&7T_a#@`WgRfShzv)6#er@mMCY{+kp_3=W6YN?iZ3@9jf5Dml z=!xC;ehzLXMac$9Cmq837D~H)w-ki3!#lE@@D@Q?+2OrTYrMPtwf2`LQ_ER= z`@i+Uij>rMMnA}JuAUv$LD$;Z+M6~z6@$fF_CcG~a=-02C z@CN)`#{0SWWAFB3bO2JZrK|enWlrzw)iH4Y?eNd(Dfsv3P}WNcZ2OEJM(6lv@ORCA zypp>xq2lKMHuZN-VTzl#Hx1u79>ErDfa9bAF1ahRC$13Q{$cO3=HPPXh2)Kn!|qs`;oX5FBj;n|kGr>bhi9F8G>-8tZn(nRz-l<`H-aJ!Kr%D!h?SG^X?$9@ z5Uy>=#KCqE@WJ~-GwHf7@H<)m15=(RloqmQ0yM$!k%52o8eid_pN~C|gB6#unsMa? z_AkCeyM|KxqLlrH#*n)=J}Z^$R)YNmJ+=w%{D~FPqZeb0NeRB0*Xuy_?G2nCFltAO zZ95)l0%(L+?(J_QULXa2L8{?W2gUQ3gA)gHfsEgO4izlT){Fj*v2=i+4W0kRcmg^& zA`~>+O252b-GDqDCKwu$LwVZNqkN-3G3F^fZK_zNxcKHcas_XowjkW0AsiQlfH;z_ zFxP?*8OJXmtqM7WQ?Gu6(T6`jg_4WLpLD%O>b-h({BomL3_ZSHfoyQC`}YQcUWgBk zE{X0xK)ih#Cg3`pwgSPu>T@9}2?0lpa$A6iA$Qz=a6bxjAX;H{o;(k;5Ng5apK8KV zY>3=a@jaeLzna}G&L8id=i#I8PCUBCd-LZX3~|1_kF`d-voU^+whudv@>l5U!`&Od z%nBCo3@j*g;RfknCcBC4Bvv6h#=$fO8S`iy9)(+ zdkevoM&-shlUo(G%HyL;Py{OoU{lar!vf9d2XHryudVa0W|!qa4eubI`X?Br=Y)kg zyKpT|vJdAjg>*Hlrw~^Oc~^^qT8(_bXUwco{gM!IQZ|x*`)OR6wZJM=TocZ(l(&cT zEkAnE^&Z4yWKLkg>Rz|(gS!K)f&#fweY^~aELiQj<&fyRkhd_Lds_lpbts3s767$I zu&D{*xn52E878v4%WfPL$@;yk^s)rI8okSo2(JY0Kr%=?8`U;2GBD0nF4+DEd=P9K z)p|0Rhp{xOX>1OEA7EAsQybWzYj~fHZCOB~QH5fK$7o#YK~uhYiAn%BUVtKFDw%N` z-UkuE6C&xXY_y6jygZF?aFc?&sUG6Y97SfjhI{kTlt@TEUNEM4uWF#*?;XTo?!5vp z-y-^BQVE!8q8|tNV0Q1Y_gu|1pvyqlm{0 z$qW@2hVvKWfOKFVZS4e%7a{vbsLl0v+@6N)-vfkT)x8*RA^nS0y+Uq*2r~}>XteT` z&^3zqtUDN~z1J72DBSpd77M(_0`B22LLl->RUWJ~mMog?0gFkKrE04Ptk7gB%l|cCVoF=F(PzVqn+f)FE5063vViG{g5IU zQa@E4RC1w9?r}c}Rqr)%-}8}PYSL4YmiYS=v6oQWcEhkH4UqjL1Vj5=3ny{QbML;%L zyJ#_o0c=tH*NSau3Ieq+?G^+ouUkt%4*a3`^RsjxodIeW=?a@Ks>F5u{3<3P-R zguij0ogcC2^WmUR-0cd<%lrDgkjuD8VQvOcms7RD#Tf9Dl;kunQ$6iL*U8y6`oT4< zhfx4(bPC;SD;1rbHYut{j^~a)d+b<)mQxA}J~4`oNu-#W&#i^Jw9i7GqwkPvqUaFb zi_oEVct7eUydQ%wftt8;Ru4-D(i+P0*CD=F!dFayUq^=|6$y3+{*xHGxTnBQlFNG% z{zC{B}_={n~SUjN(U;XMJJx!e5%etm&o0{y9mQ-a)`@pT*Y zO#=MB&f(XMChztSsIC*2CzwR-HbBy8ELNBQ&&dM zJFV|i`zPab!0zLdPH+tu9LmdKR5plb2I9pgK#wIQoh&9hg#Tjz2K<+9i-$kN34Hhu z@7Vo^*zOde$}bEdfjR9t z_>0{l+yO*4<1F`hclqAjQdmBSZ+K+e_%e67M;_GLTLc2H6T~}p6SS31-GdjQ;%%Y4 z;K0ZO#uW^;3NGy$m%#w9_e-o@hS|r*7--3}4}Jr734E{0T5jfn0Dp+_4aOkKX!e~v zh04~xlX|45Pr3H8E4$@MS{#o53x0ziqe`Rkqsr#)^J5TtW8=r=c(nL&7U)QRoG$d# zRG&9MKa}O-i|zS_1;;LkW5MSV=O8l*@xo%kqbXVNt162HV}1q}Tm{D@H4EOvnqOR00oQ^wGgx*NHXLuLA3 zyh~nwbfW;NgvycF$}IRk>)-!*s-3o||Du)~f^s2g;#o>P_#;4J^i3&sbF|^bl}IA% zRc5s?C9Or{SxP+_D?C#p(guF8WCs-qr+>R7o~6{Ic+Ys&wpi8}w8{{QQu7I?co&Yj zOqebj4WI~BG(h|S{TDxpyc9+Q#=NYy`gG`|q<}H^m+38(^D%0|_*#~GqK*PDm=1@z z(+})wRkw0ZS+6QV9UTmx!R?jDL2>H+hhwBVcNMm(b5K^QV;|sOkY4P4g&VV>PgNUC zD8O=iss;;@H@j8$zJZ{;qTp`r3{NUwVi{NEk#lNWbfQZteMd(N$Peq!(spbP%g82F3OmjLJp({ zT$_iPJ|_C%>`FUA7iol?EYCP>|J&=OeK{t8frTHD>?V>xX@GcsK$>@|0Gza^*E4wr z%n|HJd@~C(H{%38*jfi|1zNT#Kf$?tYPL2~B0p|*54xMst~+zP7DJu1AM4*`oRh}) z?>?H6^kj4bAKm%@xcE1D?EQndf@9rZ47G&F_80Vrf4e&7&p7dKKyAhgocKM^-q)|lmj70*u%hEiKRLXKW``=0+=Kk z8fYj{YoVa|lvk?ynHQj@6#RvGr3*G=V3~po%?lO;VlTsEGJ$O!-gXC?dWDwLiQ`$i z4f-<^<3ba&&~-pXe|wVJNjVLS{FkvxxaM$tK5G26HW4^um_i%vO8n=vP@P&8C+&IN z;VG_OG<)0;@g%rmZ|4}@PMQrO&fv%PTU?v~eLH>5^y~b?UGi0rV9nzn!#2E>}s=w0Srl(Ao;crhETG#h5 z{5_xu?DW~EhvEO>ig@_zAgnz>pE>oowebBzksh#@OVsQC=ULo zw5XYQ4EV6$Z`kd3UUas~FCnWZ*}SRbaD-lO{ALcC(QA4oVKIQ1xiqWOU`2veEr1e| z-=KUYX(Cs)W#Z6sPD4x8G1sy@=g8rzHvEeHZn%n>L?s+%ruq^zvy5t(##VhmDkfM| zeiaI@|C4!|08ZBrwbZBob-)kuT5MUi`UP!Qyh}U7Ae82s3eAtab8PX#n00Wx{<|2e zLx^_-TZ5B(7&7R@aQf+1WgscgN+g-_7oVn=l1XOl)Y14BbratuKuGZYBLzuM2L{mh zPmAP!T|v@@up|CqeTv&FL4+iu?W8_*?L6bjwy8hUd({*Bc>n3VxkBco7Hr5Osp&hn zd-Ua0^)WvJMB=vIITH;hj26TC%@}~GdL56G{Ym3@pB=wgIFlc*R%Z@p7B|ziX;y!s zvBTdRi2(%mda<++SnNw?{tV`~Fm_yGFJtgg=1qa2aFldxB!Z3D zJ2*oCG&c(uH(<5mAo2ab#ek845-jE(Xc0;uaEoAHUHmo_Zo-CwS$Yisq!1K4k-Cu9 z^xS5r=WdMuS`K^ku3#4aayT`sb1p|xw%@4FuGDXfm?bp*h$10$itnQli-)hq>)q?4 zlks8<2Yr;IfQa43kJ2rt-$2tv_-9}=+Tp)UO$c3=);x3({)E}_@aOd~{96;|7JKyo ze0nFc9j8RmnN9GY*HBo}Q^)~*=$#n&Ba`9#x((lEZ+}R6kGHoiv?%GV8SsbyB(;|f!n2{DD>1?gAZ_bo^jgTNQTRDOV#Nhxc1o2rIML4-SXA!2Wark zUU1e;<#xJqkO;L$v@)C$I3}_&umSqioWZf2o}+9GWWsX!fbD5BQj&JCcKN=Ar6b3? zw=pmc2Q>ZtcKT;W=}$DPCw5AI62L}(lBHIYcMiXo&s7&gID%EJC`Qsf3uSJ+=rCKL zMKqRa9pui=5>oZC%VL$azP}Sg%m7%wfApmR6e(X=hfc_ zZdPqWjCfHrV+O(bVMNZ>MS zzw1G=MWCZ??Y9>w7(I&P4#EbVqGv1*LXB3?iR-_IBYnda*UY^3hUr(#>?X0ad>>wB zv)9dNLTeM6rLON+$A>K-RAGrxq&(nBY}jZVpyaTXkenSQo0e%7qtceE zj^(s2+3dFgNhs1wFV%D^++8vV|6@I7<8eJU`Y0}P zOc6ec{1nHJF{1FP=K}c)|C=Y0QKr-=;HkA1>ysoQIge~(lhl8~s?YPJSf77!c3GH} zKlA*s9)N^GugPkMc-%x96qo^>&~>#I9RiyF%k2E08r5(2Vc=Jnp`A|jTV2(9ltej~ z_Dq#pI}QEy?&1!LZR%4h4A~~JjVexE1`QR#g4{Os35v-ZYdeNgmxA9=hTBvN43uoh z@GQC%7!fkFm%-DU{XljWu^AB3YL4r%NYQZ z4LpAqAzXvUkbLYDta=z}qkltT_DtlGiO_Ps3oc)c-w3zp=~Kx<;ho4pq^=f!1gQUF z^80=~hU7O`MOp$Vb$|slD=5%I%lS?N4OJ0zP@;7q3C~G@shHmFazW*}?4Tqp1cmg0 zhOF|v0uQjjH{md`P-mm_W*C|F-tJ|U`8FJ8_tkJ(c$_vir0H5b>QSlG{TCqD^gG+2 zXq_;&^C>8<=TR-SuAcz9SJuuzCn1?z=mObwSOY3=gFsVL;FNyBrDz zvTmP?pRQX-v(RU#<`n*`0G0s%{fjhz(?ni%15V+OFG+%bdk?{151M&En3U9ZfFJ9h zlCge`=1=PV-}tEY{i*Dn-bBE%7#x3q)=7ns;FBI6g3X)231PE=G(8O@8~roF%T9pj z=^S3>`3C$iQmuFX@92M`%`M~kJr|prk14s9LkgS%w|RO=4WM{_h$9EyU`odpS2(l z>|uDr6u2$bSA$l@L5KO(R6SchJg^|oRgSGsd6*Oi-E}fm zCPP_wJ&NkdbJKOmle6K~TgZe)30Bc_3vA%8t9*z)H(q;lN1*MHP8LJdgH`N#q+gx< z1!z}DQo$;Q0YVZMz=BI)!46l&f!aIIhFB7T;{^eFicMT`p<5kj9u(Rde1NVkt~MxD zuY-Ld1OQHizy-bafd%!h1?O>zr)rr%=Wj4fr!}yFzpnBE@Lw|21Lvf|uC8h^%JnuV ztfgU>oXA|>RTM66EeVHjL8`b==t~3I=Hbke75;_B_1nlDO%91{U9dPPD^phhie5&TXXL%NH;($ zEYbEj8a=8^!0|B`EFUiE*>v$gpP)2#8u$%y?tmbBw*JZflO=r~uQ zJk;rnl}&mC$Rt6pX4QrnpbmO9+eY1Fj>RgM_zuybxDPBNB&1obox)Ma+pWVo5_mO? zIz}CHFzO)Yt-zM*m8E^O_>$A~8#K$T7CJVFXL%b;WP)QijFV;5wqnZH4m{ehnFxER zGgWT_gBU%IapTW386@QBKpPBm4YW-&?{)Af1 z*;L~5bQCO;J5Y0RhS;w$!eNGbd-Jvwb!Z>a%#j!Ijh6REw&vum!+#s_UoHN79{QnHP&VMNHC$3o2a+H}fMvaBjB8Hk#%)kczx^Q^AUV*r-5`2}_ z3l4dLMkN?#rh*dD3(5T`L9N@gD+ynZmN{~~D9NC=CDhtca8;26n5&>};HWV4+~V`k zMRdHQV3CeJ&yiP+qieM0nDHVs#~2`I(;R=oWAuuw6REjq&!9+Lew2m}*WpIG9O=22 z%)8|39ty*BX}nx)_cwiZfAch(zj@R9N#n(wl*ZHaaktyV&d17$FdkhV`;;i@&j?UW z~5oxI>+u>DY&z9rUZq2Fm=VvdaebRGF@R<(3#%*t2P)*X3Ih2`OM`Sn!!+*zk2;Fuz@Dk7$+u`>jyMW z>Sb>#$aOg~Z9*Gb zT=TX=T&vKEOiT%R7egtL~0rt@7I`?NaeK(yjBNgJq38UTZqb6}NPhHDcX>hrV%94qMrx8>oJ` zyW=;|oFBwqhzZTdW9nW$VI}|KevS~RFfdraCv={A7PB>cGJ$D&xd+%mvlNz60k;qv z&Xrt|CpyIe^a?b)sn@Q@3=qeYw#xx_RJ(Hy@lVAv(HxwH){a%gkzxRWiH;2P=_nw- zcpN1JKdmt%KXCY&+t*PrLIAkq3*)`;x42!M!eNY)E^!ChP%u02c6J30RBbO+kHHwg zibeLs{zY%QPaO$ugYcvgfsEl?v)+HexzY7P_|i$@FbALJz=5Hq^tPCV3gJ2~%fnvY z0i-!pcZ(Vh-GXnpNTOyE7~&HwDZe}9 zcbojy%5RPQJ|(~F<#(<8u94q|<#)CGZk6A9`JE!aKKY$0ztiORBKe&mzcc06FTYpG z?_BvUm){%Z_h$KBD8Gy3cd`5~k>92AyG(vp$nU-QC4Wgo_1dY1!0mwr?XL11a4$kO zm#E4~@}{b$VlT*HM@3)N0M9p)qxMIY$fnFRq*VJtUb-PMa$Wu_rs>$^&e5vk}OXx9J z)8kQ0sQyj#Xy}w4^p39|z#vxzv?ZtfE@bU_{T}#29G^)BaYJfZZeUZdU;$+@Ds^S< z;9V3&qlI~Bb-SDiOZzvzICp-5xBz&{3uRXZvzO8q+wXz%c^#VeYsj)Ho5-R9rP9I>N1 zr^VmK9GEw&OtV;W%qrk*{2+jP-pVJ{9Kza2jW<&s@KTc4kC$@K}7h$gA z%2`6m^0%S<%8Sq=42)I$3xyaeU?Mnhr9wk9LjxGR4CPl!vEXgoqN=_Gt5rohz@`Dh z=L`+_;5-ZL|0{Oa^`du!C89ES;KYuKp>t-ce3XF9nL=z|7gEd7M&uA2A73DNtQ0hI zmm2Ku57*Fmmss*VL`KO<%Dqnw#}E;Rj*3J53AU=EtR0sn z4j?Ds&h7-bPyrt>0(bBslN%dFDTYr&I(!1n7T+sy3X|I>@}LLs01na;wa0OG+zK>q z(Byj{AVvF3|FR8#U3YlfA~PeGid%${>|ebE{^UqteHS}%h`Oh8q4*oDVI0|cn$;bSYf9Hf=#}x0}^H9Bb^yepxzU7S3 z9g#j^9<}TWohehj{1Yl~&T40~6?=syosivo6I5sANisz&&+8~Z0kZ*IzU6{wVPM&*W1&#k<9q%haPl^2JNE$ zqcqTnrJbOCT9NhXW;7aTcKJL9WM`KmZiLQbBf7eNv=9>jE|})oe^NFl+@B@_8b5%l zRiJ#@G#w(A(8cvH?4OlqtF-=}p>fX(Cp2P6xGE0PR*KeYOAfPosZ&RB=iI`RMZRqy z;#z=dgK^{k)LtkbsLhWr8JaZI9hx#UuYWy$b1U}1bM_Z+N_2yIHNVS|tIAENx|mswn;fnO4yGBkU5{Q)&!Y#UM^svYJ+ zpmcowr}O%UHlDvMU+R9|u%( zInjDM+jC3JFj#_HaUI z;=AXylZMU?We=VGhdkG`ioKrTR7El5GP>po{4U&#vY(^ui=IWl!!zIKHKxgE3-Y39c+FKGTxr;`T9NleSNm)vt9U$^w-F{_N&>R zSK4QLX1_4obLq3F^xACCTQ8yF^Rqo4e}pnk$a@ia|3uy=pi)Di&2`HV070dX|Avfh zXyNs2Bwp^nsoW4}Ft9{U3tqj+SD$Wvg7Iy|AFEG+=E3Z@=ke^Jfv?=hsvgEuEKnB_qgi@`WeMIOn1bd~&g zjp)={oNfW9F9p}Z9?znIh?$yFhHGS4o960s*B=x3GP``AC%{^lDncDC24m?xd2 z%$4_pkz!?w+w%{zxb0aq63u81f5nstQwvf}`|9?0qMeGpSX-lg%weO+> zt)Tt<9r(GWp?{4i&a1(W=Z)4r=QZdW%-KPn z^PWZaa~nV8_UGJJnf#j;<}^-w;=Nc_*tqCL~` z+d7vILYwGlSnuJZEgGxcPQ?HAoP$%t+Dp{tBgF(|i1eX;`uW9OfCzWM?rbKNkMs9u z=n9$V3+na5XqXzrFlF0;gN1;Ph%+28JyQ#nwe~JKDTpYuw;7RB1Zh2wm*it27oL(= z7%XlHl_BHQK3CQs-n+Pk5$Lj(Aly_v>pfgYea9E8@*y(o%^iPg?!0|KnNUeCXwuu~ zKA|jkzJ$`UBU^WC<|g>&$+}kdsG3NbU{06W^Z3BZuZl0giW~DMkOjrUdZR*v)GYeOk82we+o)Lm-vJf1b7KSsH{$y(DZk?9#k9r(;#S%{%z=qmWR)ngC@ zxNk&dlsbMm1ce(Th|&`+a27__w0Qp1&xEGwqP36rwpC=W=@rS2yfG@%j27_KxdObr zuexa@W-oiG58y<@8)svE)ddiVHN6tJ9P0q;!}TcEQ*O_?8iOP{ow^F!yAw0KSkZme zhez|dzUtYEJ=E`j3);<7CQ0rg>TzXaDjNLpr-v=K9mgPgb zKs2=y(?HCJtWRH56}pU((mA7u|DgiD+~aQr>D5n9VO2!u)&2mA{^zKy5ou?5nqC*7 z$Ec$&L{H-Bg!dwheYfP~o>(wW>IWUP(N2sr!tW($}qxj9>gZf z5u9@OD(^cdN97!jHhlO2*H4hvSZ~|tXRuP%GIJFzT5y&U zm9R}Oa9MFVoU~e^YQBbBP@63uy;SVI#rpxj&VwoKxWoHF(}Spt4^D=Ack#Zc;;j(A zU8U;pU$F|5Bd(>|>8i-v;(b3>>HWx!A@9!6OXynQeB_PxjjTfB|9)Xp@~ z82N!oM<#+ip)8&iQD3>B9xhD{C%HT5XK*UL1Al?bj?JN2YK!;X7|3^Jt&12Vk~T9q zfaT8bWWp39Vjxoqe`=J79S5>jJ+z zO4K+^R?w};eyX?DV-b(q%cS&ImS`TwGwunP?JYTZN8#`B_%BMN3<=TT zay&y_uG5sz`n2!pnkIfAtnPvZSnPctqnJaC?8XW-q{Iac*;l=L2)@qB;WG!7>Of&_ zv9co9s;l4+`TKt_D^DGJsPIZXc?@#04nfXACT9^ey}$7GK6(DUMOZt^A1a&^**{vX z2j8_8$%+j2=LS&9wGgFzTE29{oblOojN)@-PYC||K6Qz&&X`D&@U1*1VP z;s;K2m5-F;U2c#75mXkeZTW%R&8}Ccv0IWW`@5jmR28JEqiom8e8?mtto$pxs=hNN zVdJ;vZ&4C|Ths72FoEd0ZY2qRth=Ce7t|y0WEOirh~sXSa5o1^MBNAHM^hSvwREJW z^4@A+VR-QeCF*nGN%rPB5N;}QK zz>kE`*1>k@ezAM>jLQ4qH>=|0=$8QO&dn$UV;oq}$V(GfqiEdgk6`j*uY-xNSAvG} z8h+PkfpJvK`%(eCrOwa+TD20ec+n*u*>V<>O(e{sw3jt*y*KEDwq1FQi2TVF18lI6RM@Vx3KjohQL>#Pg?N zrl>zY!5BZt-rJRYr9FSO3-qKDE6OuX6M$#0u13HCu^)wt_ml-Vt#`tqjw@P;fB+7| zv6q(lo!PI_QQ%q#$1K5c5P!^fxmyS^czD{q2)4MruGb9Ce#O$*qr|4XRXPmaoS}5I z{W-n-R}mf>xDNvmaO+&L25hD*0shg@i2{F7N^GL={Ywq>_U{?!u?jZm(egxODvKtN zgZ_)Pzvsll%vf4fq!N>z|m4M=5&v`zP&w$MUbLRXeTNZXW_E{R!a*^8wL zmIx|>3u;kRo}%Idv?|K_02KiRm8U2bQB&b*RaB5d|KBtB-sGlD7r@`o_xqdVGk50B zoO9;PnKS!x5uX5m6MAuldqsG8+we=yj^NkpT>*m@kKeyA+s!hi4{I$8527iX&6%r@ zL7kNrpWDgTdwKOz=-+a4B|RTrK+h*C=(){E&$o4W7OZ%99ka}v=AL`8vPA1nk`B*(Db34LE&~<&=J*7mb4iQOw86%V2^t~v>(v1N$O3Vj^?yq|-xnP}C!BRMl z6Wzu{@KZxeLaoy&!TiKfZ`(AAFHNw_HQrE8w0g6-;^N&mkmmxI3XaW;VA9}`{3{|JP?wi}CE) zL2dUB_)g?O7m!5C@ZlVD!gu&6y3j8&<72##=APT36KC-K;IlPcz`ILA z$g}(ET{XM-mXo!(=z@NC)omuvzx*orceV1*Mklzf5bfe|mX;GZu8E%SUy~yHyhQqz zoQ+4VA#A#2QzKsKHPgMbYa*A@mWAr==(beh$otZh$l~hHO#=!Wf5g(Zd$!W@Bq~mP zL_#$UDuhou-H*WpX?RVXcUECyBktTb`BYg3nGLeS47@1|m*JUJxEjyGjr8Dt^7JuR z??eQJw9>7#G*N3D=M5xfmN{W7<~b}%O9dOBMc}=#HxQJC{Rxe}y27K%$kXyOgK~d^ z2n|2L2Tf91KIgs7W{Smam(ubmqToZ7NJH~BN}lCo1~p;^(xD3YV47twO2HMEReQ-g zeuKQB4pryf%kQZ1t~S!YQ%-6&d0ECWZm zM7AR-0SfT#qKDW4~J53kNZ#Thn z_?Hv!8|N|(9_MS`fAc&Lb~U*E@@&ofRbRRNvZ3bZ`&`FJfIqPTzh|x{d>;Be2CbTb zn~&^->Zl3~Z!`?QuYY*=*Y+q2EnqTjl4U67Em89_*3OSzc6-(L zZXi{)%Wd45cTm5n_PKkap7S=l>&Vr{wGz@SwR01HnO-%!@AHa*=r0W4ooHVPv;2>^ z!9M?ekeD7>*nN?mg%iGXocxKsczGX2ELm^fMA9zbceUO z`YaRzyc{521g~@GHYv?xFDfmYSz>xuHyi!Zo3~N&d4!t7g}q6ynzs=iZb~DJW|KFY z3~Bz9KeL67U|~1Zdgki-^UclgXrhTjqV{3hSHx zK)A;GW(2h`=vL2mGRhH_3=`z0Cd{ z^k~e7_Nr@*dvyuqFdaKxY-Cv5B*6zfBT4hk*Awmi9z+q@>Zo_f#%nA}22YUtJqW8k zc+_`Qf4G<5T;u*QYd=%GmwPkU^gXSm0)DE_#@HIa^sN0JLxc#{uYe*}9dLPu?AhHc zu9!qc9Yr%z%TS#Ohjg$TkGK(b{PEbRWU$?yp}*_8oH@*^d$lvJ$MLA+=>DEWU36DX%JC&%HAXjgUvgom zrweDqg3s|KrN3VVo1f{1NXO!6?zyn{Zv?921_!!XjBOqD2 z+>AMd)Vqmi7;54nh4`M0?ES;9Y|;Rm@W$s#yDXSUY3c&0wMY}g+4U7CN++Jj5xr}W z)Fr2=4KiN8o-uL2^%=4y0F3~^Myu{iY2}O0M!<7|61X!ZXbH}F85diRS0sBhvV|`n zV==gMIfAP!mS-NU$vjY#aIor>XH`A7JagyrguPV@cY2x{p-miPO!Dw(UQ$^RTAlt-qsVhw_K%qOmbL^#@B z%kHz2E@-u^RRM2z*A1<8HDk+SA#HQCeAA6;x!xjiu*}MT5BoB_B$9wrzm0jzcsr{Z ze9?_*#<^>@SMv7{m$QR34UZu+%$et~{dglyJS3dsr!@mo&SR|I+;bB=188L!?h>op zj2-^XJvTFirU2ShLhJbfw0VTa=jMc_fFtNME?L+_@l(lenh3|4TLDGdg^K?s8mGT^ z<2YOha?0mAT5qOVh-Zjr0Ez6i6wFm-59CuAf`ZcAa|3vm2u`3UhFg|g&$@suArM}d z2z=3>$=l0v5%W@PDA`owRrRiWjgoc=FZWumbhp&?pdi|6Q*&e0d#*LH?r<)@aXD9CAN|n~*t!VW zg&a0{BAFXW?E7if8Y3ZZjD*Is5G-#0Lg|+T_}L`TGaL96e!nCf_w}mybQJgG(~(su z15h@9xTvNPThx7K2q1|9NP3}M0&*O?@1qOjZ9cfx9r*~+4K-Ic!c}ufNn5Q8Cj+Dq z397W@pu5=o2_X6+o+jk&v>8@DzD6k|d1B}T-2Lq71uTr3NIh!ahvPIH=tLHt2F2!W z6o;iNkvz)3)I329;Fh%aEk7f7nvV*xAT4XE-X>%hlexxB^ncssV!HdohMEtt7rFc0 zCX8;9_;?CJ6^Ul|#O~E<_!U%DT+T6edm{(RSb($S@73)3{YcgMo4Vf}hfs6ujgd6E z>wa$_-qtITIm?%(5VPwuc=vg7Pv+fC5Q_~?CamHWpYD)rs@Vs@f1t8xZ{}rw z?OOZ4M}d_OZ%=9Yz<9uHCb?q7Gksjh@gaz6w!6|Y#2WGzpB1F5{6PO4BEwwa zISki*vMlp2U8F@cbOe4s-fw5X2Qf1&=WhIyL=SnO|50@|IpAIXJQ${KXeMQLe`stf zO<86&_tc@R@dF8V$w0HIKO4@~S*D_B^K~&+aqH@6rJ*3y#q?=SY((|WMMsuIc+m=j zxrdi&FSecb82(dwcK6rkc?Nv$hGPt9==z$+530E_{AYdFnlFcc7JgTg-YceR*O2i2 z`iAiR#-fipl`4mP##KJL1s)dZc zm{+Bm1ofXe;Rv&77}?v>9a-4?33jX_VO>?zC>v3I)GWmM^a+$#uBJSSC4^q00wuaO)69(Dy*e0Hem835Nv0P88Dh4@D6d0{vd z$P?r|#~XQVQHV4bo+I&%1*PHBPlw;${qAr$v2?`51FHT$k& z&lT*sj6IjKXC-^e*mDqj4q;EaRHWIL?j~vWRj_9Wdq%Kl41312XCiwhv!{|hGuU%7 zd*-m`O!mxY&qDSrVNV@<8ridgJr}SiT^51cYuK}qJbu!@D|^zIui2MIh0VS+U~KlK z5mmD<6~Sg-D*nyBR2MY+QuBbDb?{{4Q@ib;XkV`NT{=DYzo+ufn4A)DO28=rrv#i5 za7w@_0jC6<5^zeuDFLShoDy(Kz$pQz1e_9ZO28=rrv#i5a7w@_0jC6<5^zeuDS3dv==X31TtUE%~v)hO7&%?h+ z@cF#}Ke$uy^9g=XZ@~YKRJP7+D?bAL2?Xy>^!IlPz8}HwCHS=t;ms*M8m{}|BECc9 z)!+uZhJE(F;rt15dLc~>|ACYL?qC=&*AjjrOMh$pbLJEacHiPtE8*uF-0CH&bc9!>DZu7ynu$cGg399i zpR|;Ns8CeD4fsYvMJV?-6Rz?m;I6d8CHODDmcR@3;n%1m>vFmPUeyZzX(^Wi{VfDv zOA0@_75p8iCG-XODuN$D^qW7HrUjqvOF4^U`@B4U`LZ=;5@D{U8th+on7jmPs_9}{ ze1izP2C;*z>REcd44PHDbo8k^`dSVI{TK-EVZOb|m%fGr-=!2Cf%-HANo6R=Y$_F0&gqj*F-x!g5N2H7vgz_;3FuW+grh}asY22 zcyEIL@u)OeE%~27a3_e5{dRC-f{C9SrTQ%Jb2H%`>ju1)c6bE;l>>ghM*i1rAb3?v zczm$AVGOF2maJ_i6d4t<5q2mdYs^M`Rl8yuf+@Ih@eyyn*(-L$sDmUqsogTT1dQ?-cy|1iziiz_?DqKThylDPMba3ci@& zhfrPp-G`2n-ID)sf<5#qSmAuZy#u#t95S993xt+bp57;7*SEFN|6M^9!iZMe5QDGAul2W(;i)k1*T zydAst8zzDuvzcx$YREZB&SijVm;|SlOC5Yr|D;>FOd>8TD98VG*pY-<6p$9LHPs|& zYnSU+kg#j=h3@_7uMmljYT23XN791cvu)5@P4r@jo=^Mq3Wo&YoZ<#F2UBeQz)cVk zWH1p#_?${0auzD(yAHK41ANR?n*Zp3kk4MLMm#`1ViO}I{yS>lnMQm8SKWEih$(Hv zW5vbEMB?#9hI<~a^@Q7-H2Kyxa4BodDVrM9)c-bbq`q_|ii+7xH@r8Pn6r|cv*E0% z9t0HzWbTCN4U+0|sQ)WZXim?7b1JJorKT;yP$AF9Z5A))WdQ z^j*?UCY>E{)x~rN+3+^W+S9wk0lm3adRn4)ghrBQ4z|UnJ-wsohqUBxsFmLBMDIND z_jo7iRXL#dZ|W4W^d5$*ZrKf>H=%8MqAm&2dYo{)iHBYeaawX;Oz`VS2H(B!NCqw8 z!wG&b(SN;D@YfN12BqQN_Th!@*5}a8x|v-8pWQyZ(Eh$i@S6#KaHrts6Z{FPzkh$P z-Si6dCouZN|Nc(F_apcilIPk^!Jolkwyu!mIjd9fZxQ@?q95EoydcjSf?r1R>EaL` zbyLG6)+%hLl0OPPDKrq|3}?Ovsjawx3dL-WA!mQLOK`fA^H;PjR`rPIn~nZ7HfPFv z6Ggm^8vgs=btGt^oiL{?Yq$|J7gjQ}+D?!;rLy5+su9F; zDNInfS?OFrYU^eaGbRUg%;tk6{KurMoZy?Iog^kE+t-N1Dk9nwF8oA$Sv0CURfhFG*wX7f7YV(OzBE-#x4Y6o7%x22ChMA1+0&-?DXCXPqGiM?> zqnT4dP6eFSi0OR_8d+XdWpXV{{5p@a_W&AOEX0qf|}?Nb!aF)jO>CeF#5-@E>-7PvgJG zrOGMPQ(r^p>LO&oQrThQM*oIicS{5-^rE*Ad@aF`wucwX9Tfv)Kn=lF3I5CEn zbl)QQeA2GqPQlj@{4t{6rBm?J2>vY5{}fs$a$&Pu@-v*^2i*$z=N-bEQ;s$4mFllh z8UKR1i!W~taMf)hNogEVAp8)id3fo>UzO@FnnNBDLT)kQ(NIl)#U7Lp%blMBMp$!9b{WR3d)dDV2j2PSDQ@ z1ef0zaQp4xM2)Z?A8e79J)uY5m9a}JSIv-1T{6Wv-ytocX-_ZD0lha!x~!&th3NT^ z<_vF}o><-lZsrq?oJ98f4r#i@^iclw05z)|1iU!H+e>oTVTWfn)5J)_!_u~|p3f&A zLRmmXV}%`x7!|Xv@d)z%93#uR9u!ZuL!_4QFA{t*MKZWk@bd}YhqUkacO0ePN?(}o znLzOUDbMz|4=?cFkKm6HKWjS$e+HfCx(G_|EQjz^9+o1+%GU{AxLXL%LVS(3!z1_% zDg0R;zKY<_Q9R9WOVcgnpNq6f7K*HrP*xMlK|2(?{A2YS8y=iPL=A6HJ0z+c^<<&; zUZBG(>}AAKmq-dbuPutK{8L>a5)sPl9zxwja*eh_t*Nd1YIY*9dlC5_Uk^ez5c)A{ zyzgrZy#_Y`SX@!d*`}YyHv;u27^~Yvs1w^lwTsvJ;*@|>0!|4yCE%2RQvyy2I3?he zfKvia2{wLP6_;7CBW`W-H8n>_`a3-?HJ5ez9Gk39m(UD7vGpnyMJ_BFE-;V z#!L1RT=-ebf3{%$r;WRfLGO*mU?AyVx#;+d4}VulJJaoyfKvia2{wLP6;?A z;FN$<0!|4yCE%36|KAe8tby})B@!4<-<$n=|5hbAW$^db0B7n&3Dke)@wcxJL|Hg( zrv#i5a7w@_0ml-MoyW)H2e|r79?tilGRum~wB=^LbxDqDBw!rpT}SgfG^;T2%iH#17`we3Em9wGjaLw z)8fsKQ*fg=IWXq{F9*J5uuB+(2JaPc8R1(3W8~(7r&3M@Zd6<@LJIKLAU5%r#AR>^ zTpAY(dm?NZm&_$`>3EZIam*);%jA>{DxMo4qA^>gH0o7(+A^aWpDWkP21Lqed6VM? zA}%H3*2B&N&t-6{8J`rh3{)cVlmkx2-HAWBr9WTrZjgBV)$%Nb#7dD4J)~*Rsf0CpM$iy{1DP!5u-q*Ivr! zsc#G@gsprX{FRgcA%wJHmnZ4rl`!Q(d+aYqbg5rFh-d0u0t6y%7#Vp ziN)K{X(RonQ)*f!I2~zCN=-<%(i0s6p&c5gGo(d&ROQ0 zs1_NvqAn#PVKl`hC92~tXcBwLnSs$U9WO2LiJN;MVr2Fab{TGSH} zGHbr`DYWUd|3cohU!Z?r zK%gQpFfb@EI4~qIG)Nxg7vvul5TpnS3z09@0SMA3u|CqBQ>gmN_ zz5M2!O__4p#an8=4?Hw|{PHn}M}})MU)Wsy*vW*xk#2|ke*50O$M*NStb1|diS6$+ zy;|Pv{Yi1`j}K(M6VbGI)l0V@F;_j7={F>2($Q`2KKIhfO?N%9e^D2bFC4 z{I}0k*H12Z@tHe++VkZ@=TH4oSK0i+#+SBjs~Nwb#6y*PZ@PS!VrKL9cQfyN^MMuB zscYU|G*maJ{KCnVb>GxI_4diT z@8%CSEuMd5->K+FJ;R3&+v}5a`sjm(qDKb}df|rmxT>GG-FxXw-y0vy_xfi0!DUKq z*Mr+vjL`HsHM!U8AM)~#q3`>0KF=Pra9r-Df1Rm#X=&Hh=PN>^mu%_T<=y#**6!5h zd_Vt?|Du(Jl?^X$2>Iyagn^Isx^wWvrv_i#d(7|Yy#H)`>A;E*&6k@$*Sy&Gey{yi zkKKCLm49*!}pkIZr+E zjQ+8Gza4s~AtQaqiPulX4*a>-FHOsyt;jk0_#xTBlj#HI|1$NKN5bT{uRXD?_SBj! zU+1KM`0tGo@y~Dg_kzbS`owQ|J~?^LTYcBXy!PY$FV>7$n*E&5kGCHg>i0myHyeB& zf5Lm+`iqbId^hx5c<#StLpD_(etzDJ3GtO9zu4p!b9%szmCf-pMz5Q7e{9`~bx-sP zIQEZzUvGWz^FB}hyZq#vWjofKDgL4H@o?9BUzwJz)|VBP&6+MtFI4L_`6-%Gt$uD; zSe{;^Hfo0W8b-)`^M{U<6&YmYr7`Bqw0fCVrzz9qk3wEdOVI1J`u4F=5yvrdDJG+) zB33q5T~xwj^SLU0MqJFksK2=4;`0}GT|9B|w~IG6jc6L%q;8tuw5I9RruUn^ZQ?HV zyA*gyd8znP^`+WNZ(jQN(vO$AUG}{keR=9-l?|8aTm<&&2$T<+04syV4SuX$1P zqs?2I4>enw-MHJ(BTq*gwv2n4dz(AX{mfnOGT3E|OO8vq%Y!bPT=u(s<se& zvTK3s64%FFUvoX;ddAh$P39Kvmg%N*t8shQZKvC3Zoj&9cOT|1<=nBG@7I>Io@FuG z8XeltJhbpR@G+uArM5nY_0IU7ya~N1YTXHn?^V+XgZj!jX#1&;S%fx91B|xdbOSQ_xC;exq9Hj*i1!f~uC zCEC2=Aw!`frK-F#ql#W-5i&U`7k&efUqwhw8QSKdycd0ep6dpa4`XpdeK45gYVUF3 zV#ajmD%U*1abNxF!M*obxB$+qzh^$=LtnJWlTpyLtNT%ZuY#i#F40Ir?E4jCj6~&}a!{N-u;mlEJYf33EQGnsmE!`vIj(CY$Bp!JVMR;x z!L8f{*N3?;ZfJ0wG~Rpzz^uPK=m?Du#PPovV9y)%_S@%U7^A}L)?kdt2LpqjN8m&F ze)(W76d|pDjnTZ{pcvks!rL(`d3)I&-kyD)*_BI2#d7!^xhap?OFv!9Y|RHBkS$Zy zx{iTunUfey_S38TmcowtW}Wx1X+iH+lGk5^|a=EQLa zQfHO!dNGcRd|>A3$zR3Atk_m@>nlCul|P>Piy0o ze7~YLbV}6Fv4b{yE&I`|8r!SPW81d6hsLgZckIBgpF1$tZNc&HA3t(=?ANC5c&(sP3h*X~PQ?8nDbIR$dQTcl(WY2u!r<8>kCY08> zm#sfBIywHA-KS4CK=OBr`D^oF-CJ)P2L-hmH?zWr&+Q;&p=HEy~-HUFv8FCM5FlN!1Ii%;GhRi5e{ z`tXXPKQ^U4ANR%YOZuNmePH!5)6>t~GI84*NjKME!s5mrH=OiOkPWp2Ft`Nw+x zs+^zc@tVuDVUtQT_uTkZ#mq?uhAFc8tX(~6Uf`}5Pi}vAQpv8#?_YNdm$v_>QSaQ} zPmvb-@|&glfkkQirwr}dz4)oLTaUk?X?Xf*+Mv`SJD#cWN`FcH^UEtjb6&DcKmUAs-j?IJrr*9uzfHG)de=8^%J5AN-BwdLE@RYF_dfmdn1vY&_pJ7P zDe0dXIp;2v^*-@!hT*Qd`)+%vf2L*ZmRo-Ld{XAqy=R{IG3}nr_in2=`r>zQWk%mT zJpX;&PnkCy4~)Eg&^PO*)T)D#G1Ic%_xb3lJG~yry1aVdIQjU0WkrV7P1(NgkF0`0 zH`o2TUY=d~pI&zw-pkLfw>fKF~;}&`ioc2uk=+*1)%bK>LTlgDsBUemY`|aNJ@#}U?inI6U& z2XA_#;swut%vhZL-7T4kCuh8}MmZ|be6woW_S19k)+MU+XQualX2l}a;4NW4e$#7< z>L*p#;*(!|r~1$9?72ly zXYOgz`X1YTr~2H*_eU)^z6xyQI~nr|EUce1t=nzQ@Q`79k*rLkP_>#6Ber%_idn)=S|KWHMa zTY3JIqXP@P5B>ACgUhlDRxVMUZk}x}xUl)HA5P}(E(m#I_V;Tq{#I~LyvH{S-yAXP z*!VkMx&NGc*794=PW|UyYi6Ap^!!h^-EeT$&E;O%N0+%2e!BX-5ng8k3$G8m6#Sm1 zxG*vPa_*D2uP>bX@!J=xXMJ4w>iC!D&Dzzi=#|t>o9gRgil*j%`f2a)j72|%eQ^Cr z*$YLV#Mc(qWYiaVXB`;xa#4@jD~snH?Xxs#w!w2sqU@W+v%NM1k5v4)Wp+1nb%@Iu z%k1RF=kD3%dwa1wYsk4r%F~PAD)#qVoVl#{1<%EozMTC|@vwaDjQ3rCDGrRhE@;u7 z!6kQl-@j-2*6Af5?hkqF%~cPU?7Ofpra`g4B)IPUsykdSmE2)?JS=N~f9aWtW8Qu7 z9|fh~e*NHEw`8m<)g1~CynpM5rQW;m+x_YQ&$5;JkpZ{85MK7^tfrG`6{=b#cqq#h;Na)n&Y}r{|qR-_SLzRy?jX{HVL}3vQS1 z#yjrH>JjTV`oYO}6;FBK(wnc{f7jQa&ihi~zvr$K=03OVzWn=L=|4U7xc>4;{juNT z)_2*Ft6zR@_40Si*6LsM`{T^~@gL}~Q!Ox4Vp4o~tzN^eRuie0Zzrr}uiCy5#n~>66RJ zFD)7)o3kRScJgiM8FNOb9{Ay#Savv(+yy)znN5c-3=REnHA|~l_`Gws+0}lMhzoPD!jG2;tDc*i zGOxVbe#MEox=r^LG}YcXZ$iJ{M!>dllzd1iS6*taTdCq(CQ1ze% zzunt=?3m}LEcheiaPe}lRSQCf?b-KYx4jGYpEJ~DU4LQ0`JYx5Y*LP17{0de&f*92 z7Iupqu-UWxk%h@ChUOeteQ4q4-yaRV)ZcB1pL$oKN|`kdFq) zoOUU+J;yi-;X3@U>_=;k()|qLdaZ5Mk*8;aQz5_j)jSc_CS|Nq&e9mMcFT}d28kP6 zJo1Y90GdIeRae?eK`ZvOw}O7QIPCXU*!*pA^B5dgfxRTAfv!Gjx4QZSVn4~YKCV7% z2D$p280zZd-p|$NmJzN#zw~$Y*)q)4r$5%x_Q6yQarNom7wc+wy84K8$nJ5$(`S1x zo1ZAlq*P^QMmoo(#-_0K!Hg+NX2&Otjm=EXU?ftKu>Ku8nakB`OUOerM^i=%bp<6_ zHQ89f<}fkO*6uP(jCyq(_Iv2HC59Y=<~Z8^fmc;gS%H?`hhXh*!7Vmk#JR;B0l73+ z%eHoi?>sTWKG;-{Fm7U6QUc^bKc!l)F4YiCb^dIV!C1;Cn}yBM@eZh7V6) zTp?gt?C>GQYnv}hKh0y(JU6*z*g2xbdj#G(#|iDq7>YdtQAk@E7YnJ9`{5|}^N=^Rf2;kU6q5FSn9#x)fJ<6WduM3QoLT^W z?py|cHJfi2^FgGZZd8}$tM&P^xZ%TP$wj$(wZ2GWkWDlhW!eH+n!0S3J;p$2Ica_w zdI8j~P+uSpbM!PzpNzP3Sxm$Qzp66Pj*B!a7ai@+pz_7ATi+T^YZ$!bbU$1br!hG_IZhmK3iwJz_>&S-Sqb^oW%HtaR}0{9jdnRUoga zL{eKZOB8LJw%7)VEk!Y_TSV*(p@p)c+qWHstemGot7r#;$_6Iz(0c6-eI%n+ACVCy zGitT65^b5lqTJ6vKoJ-e91ySb>x?fU^@9JYFsc3#@bzPLMrZb^gR zciytCwvUr`b5IYL-viF~Y7J=L^RTmkdMJF&+IDL`OiW6rY=cpcU1s(bNKx4wbqV(E z3Sl~}p~!l|;;*fbsoygTIZJga?X<9sLEB2~-=X~S<&FAu;yy3ZC_QwZcAey1(~KMS zJEeO@{=V|$N5|K)OQ^G>>J00SI$o>W#K1xk-NRZf@6kdU|?z*?w0e555%geaF^q6qPIrqdcS< zpV}@OZ?-FEX&quYjS9m3B)c_9EB z;@OW*pHnvD}F zS4Ll+`;_wL_@lx(57B>6jOb$aW|Q@u&MY@KN5_fbkFwtzE%qTcws=3^;$6h%Dg_s_ z)3pW0avYu%_dC$W1#zyLooO>#cQ-J!oSacPr8om=DA5`T&WaCri!Bsfj!;AWU(mDG z`+&q-N=Rd_W(N?z??$|LfbKgnuznHE`trR8y00J$>+5u*Nj%0fiEyXFm5hG4N(jk> zyXB8GSp_5RC*bFvTJ9{eoo}7MZxIR$D=I584xt0FWvVjlE}=^vQZtk33IyxVp7u1% zFw;E@d<=uJ1BOmBNq^$G$P_^*97ZzGuKq<2if=>te#;P6GHvOh(I2fW+r!L4it_|N z+F8Z#py2OxAlcHcC+a~KV)RH9Xdhb&d@3MOy0?Vf1V?>Kf*J!~+B4JMkM>8=sX=Mp z+2ZNEY^?GZ4kjZ9lqDLqL4#WdN=jtbU_N_Vb3}YN)+0V&u2zr4yt6W3<4-vAEM#gd z&bZGL}{hMCuA%RZQCWno`B@7ZGN)#MMez~k_tnD$&Zt5dTbZe;R|2x#F>z` z!ATcd-jyWII@$EZ2)*Zo(n4~lIh>Z|Yy?UOVTknzy-Q0>Dm0%)M^u``yJp(v>q@4oI>q1!R#j-;#XU5P5}f#Zc;J z+y6SlFQ|jftRhYM!~#+}vGB=qO$7zm6^P>4vg)>rq^&g2?FYCSp`BY1?8vlnM}m#Y zM9?Gt+LNi{^olgBa_sPig%0Ulg~X@?~u9mU@PRSbO>S7q&G;pnYpnR5hlHGYoM zD!Ff6H6mX~`piQLv;4@z`jf71!qB$`MAPl-)uiMG)Y{>-gfd`TPtP-!J~F z_U+KlTk2!A{}Z9EWo?FH5$~L%{etvUhTh-^&#D7TP$a-eeJa zGIVoU893(e@z5Y0{E8Iy;%PicVdS>o<(7%Mgl37<*sVw~o8b&nKV`{zM zkXqbp{k5HUGVnzGGCnP|gOv6R(^#2SZXB(z5id6BsMx+wdUxhy`}s(_WUuwtnSA6| zf;zW{$C-~;ULLP($B^S3x8)8l&fv;;}&DF<){6=X~+AbrDd1j z`$9K4(WwTi-L7QcmaTsM|D`S-!Rk2MUUQpdRa`c!&-t@e;(eiQ?P+tg_uQEqw438f zT1K&ECEIZ;+1XwBVoCXHY-y?FTU;vnbk_6QN`Fhbwslng%tGs1lsb1lM3j+BV;wM#ptVdYipAXIc95%hK>ap~op|PWv{^b@92+-&WgtXEODiX+_(9rN5*I zcNVwW$=_C7jj2he`R-%!Qg4;^yJicL^ z7}ABEVWn1)_KeaAzyRF4I|^+i)&Aly$vRTS!P9)U2RIAIsnoe8Hr~@qG#Xv2;5gx= zC&y*0i#4$&C9NRDI0{hv`iqv;E3jS1HX(tce#;${(xTZljxYIeY z9E21ioZmS_v$JZp=UY74NPFvOj{WM^I~rs8b*k-FlnvNBD%tVB~b%V=FXEIi}sQ*qYQ=g5CNea^us ze(>}ugb|o!_dJqYG}xbryCKzjHuXUh4RZu7kqzbs%gWWbqExHbn{-BD#si0nr67R8 zd`B)W@SY{Zh2;6N@*-oQ76>m&}zJ z)N>GrI!~`P7-VW$fvGHycDJ+jicvD0c&5o012{23hI0X-*BEf}nds4y25~9D%GczT z(EY58X_>Z+U-uv&oX)26+(eoZBt_C`*=6N2dt|jNzli2Pfn<%zMr2gC>szL^Gw-n= zWiZlYkXmLa1^<{|%~u=MGUHsGMpj69qh>-^;{Xu^f>cs41d&vLDIW-e@{ibMNl}-K zkj>SaWCmmqW`Rr9hGI4`WYC)Qc}(V%|13(DXnMnpG-Qu@1CvO(MMlB_`LVdJR#Txa z)s<+%WU_A8cg@2+x3WA;FAph_-6@k-j2$~PyxaA0g*dWF;$(C&y98cDzUD%(SYx8x zRYP!?+9II4kZ(oCxs(!m<#UfHXz`thQkr%{*5qrhQl6sBd7bCy!|YYumQS$|DOAR$ z>m*7h>|9NOR*$3@1?gI61Z~KO$Sw|{c&Ye;-By&GI1!hIFAx-A88og?gR;qH>Fj8y zvAG|r75Q`9ai~4{k&;ZZQ*spUbG@FUo-M7U@N*|J)U;ao(XIo!Hf1$R7mYRf*kBIf0gbm+O z{*z^R7wbfgTC5nwoD*~gda2Pgn0&@;6P7M6F=JEeYi; zmXYW=(WpxUA9~Uq*3=)PTUbV-bo${*hGMtxK}zZ7vwkt%W9_J~nWmXV%WV@ha}z4E zfrj@mKtq2??rxb$Oa97tc26?y@atyUpDraq#=blaM9gPL68Q;lZrQ*X(CCr z{MJtn_MuQp_;3BBv%V$OYFa?szVwq0Y_Zo#5^ejZghVJde#Si>lx*i{Xy=Q#8Kq^O zi4@!NSH_Pa*+3LUXqz>G1aG4(V&l$~JZ=iTxx(BFW4!Fi8Na7ar7g@G?jA5r2x~%^ zxF3pOuJo5L=f@EYuTtVB50@*Y=7j(MUIMx|=tPV8tRVr7gt| z@pl~m`4(|d+(gS8cV&@VjDy@d7^_c zJP4PsO7iDzpXe4j($f_cFwn;L3!hiIT#A>4O=Y31nVe&TjCQQ{RSzz z_+$ulcptuO6$*Yj!6rB{T$=utxFSpp;5W6POFZus{0_nvc_vs#Jh#LbY3Bpp>yoX! zl0V74zu-3lwv;}>Q{42E^4^jL58-^aC4sc``1H>|({0Kqo078H<@7@Tenn?V?r~u` z*;;+EL8s2s`yMl63F*KQ@vGY@wm@pTUlM9nwRECM>culTpR@;#A zqjdSXJa@FSnhcfSfxMUV>6Adb68HpnaY{|Qz|KIY1pY=6s6*M1n!i!fok?v+0s}oB z>eEgzYkw)6`c?I@o<0OmeYsVhw*I0NU+m{y5#2aXAEN&=Y{H|yoTUT$6er=#jIi-E zs7w1i5j-b>&*%XDO48sHW#ePhpGa3Hq3iC|ar$B;@QM!LJDa}063!F(Jfv&e>83oD zPvFN2A+SmRVqlXFCBmlut5UG1!Nx25{Z(m-5#lH7@EJEB>ATxmH&zZPjOi+Du{?=3 z@l9jP^Nl@jbwEZD|}&-Lx6v$K4}kPwC6;1TYv%AXiUJd!CyyrQmDz)gP3 zTJS=C;*a>AnPB7lKnqwAPQ`66b7O6MSGIs9 z82X7gSHpMku#WjYF5%lE@O{1oFCq`b5Ap3Ik#|UU`!o^^{Y0Fr;k(zUj`?1Nctt&_ zg`48r+=3U82jYkL-Yns}u>~x_&`-qaEZ;=;2>LvP+XS2NZ;a&gmFl2GpZ4WLctm5B zq~Eln1Dq@2ZKkAdIo%1mG#?alW7|9vueG2_d~bwJ>D?l{za!Z13O2zIuT+<>=!mA! zci0G<(G=d_5$tyb`TcN7wwYlQAN0E-y?~Aq&I&VSS(!D}w+kqpVxllg6Ua*M|AJ~-U zey~ZNcfuxl`oSihihxaUGx?*~CEQd;op6EIOUn^;kYde6yqP&;T zJ^v@ttqiltL)o)qdF+(HS9Suv5_uu&(dJIT@07sTcLJW1a+n{>UgMI7WO{$fN2>=mavrZ4YhqaOn| z(Ne;ekg>M4uT7M*1DUEXB8&aJu_m8WRi`K_MC`@HfN(9K)C7 ziP!D+=@N-jeDovuBPdtoJ}#6m;xVKHJc1|OTA|z%J!1zr1m8H(R$exA0{)1E{;^KL z%O&N@UDk2hxfB~eiVomoDAB^N|1BP@ouYJ$d72M=N~0V!ML5wWeWScy1{fx*7IBIB zA;QOq4%kbEcdXM#Ku^@^dLfR+cH)rI|6q{4PB-4c>okp%)(zlw+6Y_1lC^wD(;ovE zQKxClMPYLIkxWF~RgjJN-qNOW@VF5EoC6ugh(us-AK9@?P9ttnCgDw{=c+e8*XTVML^V^|M>GjF7>Dz`DuwvXqhkitxcR7BNjK$w&&?a}CVAK0O zKX~}O1VjE}_(4fH`B(mIAAYPw__x2R*{C?Zy z;d23o@EnELUGngGABMu6Kc@to5^zeOJqd{CftrSNVQn3qwIlNg-gm-SVAcOC3^?sb;+-9YO=sUcV>IZB1KiEW-03aAGc@{A3UmIP61Zjw z$U%Y5+8u}K53>ZO9)>Q2cm^G+H({Pdhh!VfzhI1qJ$+WeY=8j>HxA*&FkisP5Uz)* zgQP$j0Z-{l7;;GG%E@pJ>1ZK~PRd4#U!*mtAYqMEfYR{jL8>IJ zAvY#b3IGY)!|-{e{gY&(y+)bP*>hDSco+qYJHf*KZ5rsn?1R}1vj(OTW;V=Zn6WVaFftf#m~&IR zaNojw2D2OH1(*k6=D_5_q{7HydXNns{>_!+Z~OX9jqLSq5_u=B7-f5vB~LKWLvw?ZT~tnF@0Q%ttAZ2TU@| z(+Hmd;|_OSGU9}Zf$@fEoX~|k0<#%r4U8Tp3T86QpZ&Y-3Te(nKBvK4$?v@^qy=U* zj1lHG7%!L~ASVUvPhcN}*$q<%^D@j-_+QPhWHNLIrV{2pm^CmPU^c_-ggFTFCCqu4 zzEhCjFljKeVJcwmhj|2M1I#~R-hufH=6jewVA6mW0&^$f!+615&PF)QXD|n0cEi-c zybSX+%p)+XVD5og1Y?Am4U-Hr1||e%6wIA4-C)ik?dM?sPyFNwHoEc1M`cVGZss_f z-vanmjzJlYxB2;yjsQ+Bf%Au-5^y8N+Td!DZ^^O9X9?UXq-87MxI`PAC(5!c&h{=% zr?Y;OO5@tx&iakxob}t^tA2Zl<3BhOU!=!HZd(1^SoF_bF=LaAffbvz!5CS9q5HjJ zIi-7=Mx9S?%+PySzhJ{H=GY}c!nDu|K(X%;u`h6N+>0LB7<1wBxpZ9WRHB*4K8e5` z5-9VZ>EO86g!crx!4KCF?R2yI{03L;ky%zM{e%hkzDPm*tPnSYxEDX}lZ2i;_m+fz z@tYzX_l+A}?nCLY`E?`QIFp|40#xd?dAOu2DW98=kd~T|9N^Dp&A4VR0hfN^9Cp68 z+`t`m0S5n)QHbGTz737bOixG?u`*nxw#S;FveO6+9i7*)1B3CP?-uFC4ptr+JSP!nUw|{Dc2SFx-V_0fjqtzwl>bV9Lz9EI1C1dCg!@N00$-sBgm;_ZS!MeIf7nQ|ej)4b> ziI2}zrQ{lnm`^q0v*~Oi1Hg%~u~L8Kn0UX~SUi=n@d0qeQZl%3_h_W@&mlJ2BidAE zC@dD0ZGcw(xHMzKe^-4)4jY&WrQ%Vkj z8=X;q)dVKGN9(Qye=<^VO$>0m-J=aCP*JBvw~i1#kuE*n=ynQ948v>k?lnR;Q*8sr^GM z(fR7bFNUS>9;rk-6_Y5{B9wC05(pEeotfYSm$9)~Xu?=qqH~Kbpnil^u$_wEN(0K( zS1Kpmm`?NH?d!zV%Be~!r%uHr%4rd++pTHr6fU?-q_UF?8EZ7Qs{Bfjx1ijOEz+Vd zDRxzqXy1#pv`&B~FFujFOWYUG??P>Psk&_L6<0DTu?ed2U~_^;bcF%!7xgi&sP$q5 zP{LK?!AdGofks^=l`%Y(bx8G?*!YQK$MUHTP>mnMaUZ%xqwm#z56C}DZf!?nxs>#* zIHjLL&M!$PaJbPmuT;n3Zc%dSaN+1Ua+PZ5Xz(ptxX|8k_;##Hh3=Hfx=N(V(-Q2! zR{r_?Vl~#@RB;s*=%Q=O6U3z@oDKp!yvOQsJuyFU(Ff4Yh$___Tu#~=xdQVF=XH;@yeR~534$LSSd0*sd7u4JA&>so?J;6g=T8{lwTt3V%}QT~2p z8imjm$=T=`wG89=%Ery8LP)Y!osac#y;{%iY|V;G%S_EkN=dLv@o^WdV9cRgOI12G zCC#Y8wWaGE_@YxwYaQHk?gbbg;FPpGT~)5l!+mESDC5lO=|UaxGA%|EE-Gjr1W(0Z z_~f5TxYpOeEpji&qg!HeR?WSD)i)e>zk2~N^0<}E)@cn~t$P7)MUS=%dRmmN838uwYb(J7Vql0ZVlzOc)ht8q$!(Iq}P^}Vsy)KYwaL#gMLMkQDx*mGVztGO0Ss(Wkozf zh`G^6jIQOM2kDxJkmABHiNsio*&@U9vLFP!q^{Q>2^yp2rpXwSZt_4{wQ(f zHwoU?B>}hk>s!<)9QU+avId_>XyxzW!VlnE1~j^ZQ#MfoT+Fthya;cb9L=?$%9_Py zM%abyVx_`8L4L%la3?v(%>wUi{5}g)0s_zP5EQP+)*DSano`N;V%*czMF!juEiBVh z-JgQbH584RYt&?Dvy1XI_=JF-`@lnVW@xS9+(>seb)nSgaUVb0#5_$LF5adLxIrRe zenJHkFx)3B{<+Y{Qo1}o)<6{|xwr{#)Mw@^>GWi1Y$E1hxY2H~bg``d3SjQBtbTi1 zOf6<62m*URJhF5Ch~u7gAxNQmy|(FOC$>`pP6_t!rFiI0V?g8rn3|5ix{o^yW;R+BEobJbm11d*kd{0 zT1y}zx}p?cUeo9em?n!H>^Dk2Sf(k%iYS)-BL`<@j2#&=ScYl-vV3(3W)>m`&(#

LKrxTkJZ>3yojOO0TCB4TEezfh6F@*ID($c*$-!QHE$x zRG4#Go&P~b(jRZ(YkIp{fpbEZpKXtD5EspIN6#!}Yh|3rEHzmT)G+`n5jfiYs8-)V zmbip+fQ?IlL~`!11}ezQkcMLu5WxXsE<|A06W-4T03sTTFhZ0#Qrbb1q6Mf2KN!6| z=5o+gb~(XvK*+rZAc2BjK(ZI8>!EVQz8aiB#{iKK|12E|=uux00R;gF7Mn`c&CWHH zWaQNgzBG`fS#aV$c~~Rmg7t&X`-DY^j@d;kQ9HhSo{u9ZT-C?fyP`6!y)kSLMy0d_ z91iStnT(G0qYH#a-2BGFqZK#pei1t5KziZQG$3h!QTz>R;lO&O0ElNfTtR z_^oBXZ(4dmn!w`d8xB}e%%-^-`?WrSMcb#FRFLSYC%nIjrrS+>_ozejSk)m98j>VF zQ4DL>H~XGV0&hQb3d!MhqRUDF51ze6$GJca`yDce1Kp#wCtaXs5}QQzkL6$efaL%B z0Z#s-ljZ05q1}7(iQ1mKBR5)p_@1X>Zo)`HFR^(M{UN%-oiSnW8H$is$8!g*#PS-P zc(s%jE|jP${PmL7mFuy0iDzElBx#Yr1?|8EM*%|$h0uUs;qt#u@D0^cLuqS42^ zdi;`sS-LC5l7V@=gD+<4qTykH4)Itzm(UrRSMOS@Yug6Yt!7gz%E+^o|!$miU3SwUNLvxJ90FG`rl>ushw2GPu6OHDO=>B?!A<4OwtbPYxNwv4bu_GXGAt z9dw5uL$=o8k!%%%xbst3&r)7^iH=e4?0*D7YcfPTw!@K?Nd>^4P*UPw(i-1F$a5)) z^(ZzNlIw7h89!;@XmtSqTBy4qE@X6>Bsrn9f>_W9>J6!Jg^J200TH$QSae8+two^~ zWce;vaB%hwXZ4PZ42nXJW;NlRj$G-$Njh-`hdpQy2N6HG7emUxv22vv8pZk>SbZ5( znntsg3rc6qxwNwZ9V#9|^YU{V#>?%3c?AXDAMK@G&H_B`%O`x~fo0|u?8hhIuAe-? z+t?XC3^yCPm%2v=zBQ2TTKZcBSqMJEAfN$etXy14(^RsdJUn6e%BI~f4MqZ6pTK$z zQGr^3PdTcMgP(2S!-yV2M*zL1Gbm@ADA=>M#>{Ga_SxW+sby0k(w$U%+dKXUaG+!j z%|k0v?4zeMfwOs=LtjMv3&%2BiVZZF)(qR4~L$e9I*bNpEHJzBWlq@&?C6)vNA zhrQpIchd`t9v^Dn7TB+;hwh;_Q-#VW7tWg)>cTN#uq2iClj>6%S5sU)$Aym$tTEfv zYWK7K8kB=HtwlBWNHw52Q2hn(U3S*s00~fIS+4*P-&751$Q7IpeORrXD7 zHGB9xWuZ?a^+o0O6J_>>u2xX4(#{<_6KlF*YdvMM-pIVX2QSmWn)BI+Jl7W%&~VCL zUfcWHVNoe70Lkp}A27jw9g(mQB1;R`qq6zOdHf57<@VER5Arb7dZ;ztgZ%y**(qt^ z=Ssj8*hK2ghx?c3?Ala5qQDAI%v#vmut|IcE3(dcKmSUya$;7)M;M%8CLQ^AZ_3%# z3ZKU8o1N^@`Sntc^+1lF5J-Yku|0bt4-siGI;uwY0~{&$uANxA(tTC5)W1@sdO8Q^v7Y}qfUlkcE?*;Ee7 z6qSY6MXK!fO5DTNTg?v_E(MU4U7ynf`s`7Fp3z|~_=JIzIY+>%NdYUouy7H&e-vaH z*bY!JP8PKBd3)rqEA4iWe1p95H=YII z;v`O0<3|lUVO@fMp@o!%2;WBn-vjK%R)6C$6hI(Q3zX1t6>)8r6+Y!N!Gnqvgzb_v z#2eK|bX>7`VytC9qn?Db#dSVG*u?9B7j+pn@g{*qYRDSbG8-d9v?=mZ*He@(ynroV zSU3w3&Igo$E6S>ei^bh%AwZFiQmSNwp~dn)Vok3u`>2#{Y?aakH6QCVqX7Kn8h3)I zGz|k;!$+5sbea__564~!u=fj zB)P#=1vyAH_ql-VQZmo<-^Z?`=e>WH}NadabiIyitavG;W37Ec$Z4Q8d7b>b?k z1aU2uXYWkpB0lZjX}E)h!~}N9I{)1?X9Z==p0eheoHA@qENiYFA>JQ1zu4tD1u%wr zPC^zFjy`GTWeqDKWY{0GZirnuqF}-13on~FapyKCFEGs>#UqmV~LA&+n%kH8o`OComZHZce4jsu(g z3!4E0%sXy0!seX2@fID8KtM-Mvv(A3AZR(GH=Pjik8g#~USA!1t{s}~sSn1UXYsi> z_FO%5h^M|F_FT*7yx8+BJU94l@5-ZCT~@Pq8EzOZ$U?6Nu9SeyLN z_@nm&tLt}a&nXnG8-^Ru%VXzY0n(a$SN3O-U$&AK@x8U;$h-e~=xt+gH`aUizEF)l zV7YF?jrH+*?DzNy?z&!MMs&kPk-#~>!yB*?OPc751*YMd2VkI&j;%yQ`r{8JOD7OS z^bcks#v0l>QHnPS<=JHv^hh-4VFDM)zJG^V4O!rB1PV6ztraCstB58MEvQ%f<|j2{R(pbqx}74yCU@72RU6sdK;eimNvckwRDGUP8+ zf5PCvbfD580PV=pbZE{}7yeYgEz+#P6ev`kZ^0(6O6W6OhWhr6s}Fubo-7Tw!uzyy znkjs=Z#FLD{xWB@tPr>CaaLobemHybp+AGu^O_ZU(ueo6-*qkc4)wCuTl~W)d;$ji zhTh=+5>3k#J_6`b>LI=d{eVnQ`2w5>=U%x8q#DJZ>wOsySqd{wJTBYcxJ8sE_vGmaUbWtZN@2;q>x_YJEd<2@5+DBk zwZ!(PId8bCDtwc?R;Qs7lp4oj2NbMqg=Z%?$xoBntYHyqhy<2A2rIp9T0?*_!QexZ zQ;}-O(=dxgb8q=Jg9RQ84OQ5@m=+0KVhT=js@6zh0l^IzouS?%oEL7K9)r!sJJcpM zAxP&_r3NTZQ-u3V+R!AwgNQ5KUJ}p6j(BAmgeQrY*9tkkoqI<)RE-pA{Rj+S(Rz3{ z>Ib(0BlyLj%t`XjioKf?dp9N$IOPFN)xBiCB)0(hN;ardVtF_z{vmlC4(yMY3^C3U z9A3cr11PLV_Wp$(I*(uSJX|>6$um{*Y$78U-mdcukvzXCoaf{@Qt~L|sfSnnjQZ(M zfIdv4Sx!&X#Jq(A8_xs^?QJMHKk^c?=Rq~G9~9+*=FtRiKTj9bhaBp3f`M_s@R_z3 zAc{E1I*N}$X>TB3P=Te1F!o|^RHK|Skyixto&b#v3U|R-IV!8+rx;xnfAmCF!w+A4 zuiSn*^lA3&8zWECgAJZvHg@mos&G!Vzwx_p+rkqf=ZCH-4^FQiv0^&px6FR=d^oxG z6CbY+ZOixHP({}cyKKw$w8k@B;J4ui-}PgMZiZ%HS5{ zco|9lT`McAw=k);xxBK@|A_Z#q@IuaODL{E6_$2L(B&JEz=ii~F7Hm=`KC{2xyWSU zrVoc14&xjq-&9EPqL4?Z+6&fD{!$H;20_*b1B8tGI6j|+xkOmC-|Q9DnOdemPJ$eV zP#kJ09iP$kv&Mx) z6CF0itw2D*07*bm(P4l=kZl?U!JSGAACgp7R+eO0R#vo|ZB$mY8STC{$+Rf@zo^VC zxBoeJnYrJ`onZibz4w~SkMDl>-gD1A=iGD8UB5db8C7qQH6KjWH6MqvLf(MpwD~3Y zNCM0dVFqew5iA_yEPM+xcjaE>`mEMeG!zf(&v42wHJPk|!o^YVfq3@=qp%hlTRs0w z%m!TO%8A}EIic!1xCZOpnCh7@4%)sGBoFML3uGZQu1_vp^h$J9%v!is5SV^$WCKd8 zYIRvGEH50{PNeA%KRNKpZal9IZA&Q~7zbyy*VnH(H}cA<3ZBW1tL_OWUZCBhsgCab zbX@<)i}&|_`tok^o-hZ0Vq_zhRP|dtyzWL4tA2xzr~>WZBSgaLKsC&9tD@f+Ic2}) zoT^_gZi$?d{)W!t6M5#f=qW#2zJN#Xbyp)EhzOtd`KT^R>4^AA)84?BqUJY`!#c{?X@ zkw%PZ0)WInb zW2@4@hQHN(ALiqP!B9fUsUf+L(=@{BdV)Eon2^WXNy0o3*WJij%r+t_Td{$FqW9A= z^CG9bR(ft#!nP^<%Dg=j?w<0KWtbf=DLK$ya_PqJz5=qUVv12b-{b54*q6TcJTstq z2i}nI3f2kKW$?WiY9f8wUVx$)2gOz`Ae4TFL$7M2G@ErhAd&l^qKOc(x=s-RWCu>UQ4$#FHL#V0t;NLAE}N!1KPT`t3PxV zuwD`a1%r6DG!YWsYR-akq0JbewwF|;-Up=+S>Ypq6pb|!(>vz$nE``=pMRK1bdkCeK>(yn#H|k>@h<%q7p43FUjqlk(L--rpq8x5;xK zc{Y;g`{el{d45cu`^l5a=X3J@C3!ZH=Rxv3M4sP}Cza>V+fi1B$n#_JY#`4)l?Qo@wMci#(^2=Q#4zk!N4>>`I=;?jrRXFT8$n?s$4dbZM5xDuwDB8)aHu1#Y(_VEHaDMxN&+zB?$cH!hwX!*9= z7&ne2Gl;6{S^#No+QN_d;%S^GF;~@kOo3Zr%;;^1@rkX1f3FHOA3U@n28L)c0aev? z00ZBK(_bNLKDHK4*^>K_ITo)9L{fbd>}~+chUPf{0Yi}h_<%DKmK#LGug63~5z3K) zRWZ?Uk~#*C_Fys&0a>{L@U7>hnCRYD{{V0Rg%@6spFe9}Sp{e}#N?7JaOpYHT7|)e z<|7-i#A=L++})cbG@cpI2$py^V8)xD;A?Y|Os-pntI`QfLT*)D(uP>*xkv)(E{qp0TYcee!G z5^zhvEdjR#+!An0z%2o{1l$sEOTaAww*=f0a7(}~0k;I)5^zhvEdjR#+!An0z%7CQ zX$jcR|D0+1pJvp}oLd5J3AiQTmVjFVZV9+0;Ff?}0&WSoCE%8TTLNwgNF+e-^CaIl zk^7xutC#BF{HqQQur^l}!eLhUyjeWSDuu@%Y**4+14DTdc({xW;7gNTh1U`I7}w$B ztJa4D{jpUy;f=;{!r7^m#yV`5`B_~_)CJ~Q}ew_q=<5GrS$MC;@ zcJW6nX87xKDE-%5dRFNVnal8JF#HoDI*eZr`qKnor#0WZ&{oA#HK?lIk6>%t219L3 zYZEL0KG13oY6GmgdJBT}XalUO8b8!+ej?vF3)R(df3ed1+yWbzOo=)XClMU9&zoY2 zVpliA(eq}1J1eaVav}d=XT-aZe@7?tn>v}_zmxe7gKf~7Ih!C|;lGplP3_KKozV5n zfXpl4`!$VqmfBmi=lJ19^Xbc5Gb-ng*?+KQ+7cYV6Z~&1Y9D;;>~_JQ8Q={c;cE%9 z)f9b^(O0z|zgMIe>JGVj2L?`qOt6oOz4E0x2%Z`6d65mZ3BgbNcZ!6!<-7muZ6UAnmZ~!X+UYJs^w-)F)r)E40<&0G{Yalc|01b?t;- z-9CM4PG}!Id=KQ)oG`C752Dzd@DKSTn(s@r<#z^pX;`Si4kpN>v#$~vVgKwylmt_!2Ir$&9rL#>S?!Jfbgs^KJU#04Vy*fd5-+1G1r1y-2fGt%vI$_=kf&aM^0? zhV@K?lF*PCGJw#kY8nMU>)p`&O(w)_SWlIPdhnU!5%_x1Yfb7Yo7It(2A`Tg<^k9U z<{mTIxV91oNjUC*7QQ0a+AI|VZ3HAG;(R8yS!q*QD^Xc*NV3(592M2+{5HXw5nHr# zu&VWkV0215zJ6Elz`*I)>gsSDvUay;ZG&Z}$r2`Tz6Rrymvd#R;u!vhcEV@26F%5= zc&0pEp?`q69?@Mid!U!u5Jl#Z;V@`JefsbgyEe)MCFPglkA;D&27e38q6z-}@Phb{ z-r8~etDvva;5W`-_{$mo{#!eae>gNQ4gRZmdmGH~hu+z4{Mep+n(F`)Yp4<#B1}?q z&zLq~s&mo2nA$>B-H2e1!W`IXiPdFFvT+Bk&IkFpVCLk=%;csemI zmWV^&>%>Y$hB7Xu{Jl z>kNBVQ6%kpmvDgVH}%*czKL_jD1z-quov3|t3$9n`!wA_p*s<5dK+NX)eTrzv)U-M zy81YRjj)5YODqn7C8UF5Bm^`ocKwvYR5zej++ZJ*IRHD3VEJu=1)v5*w+U8`U_;vk z+lgSu>~_*2|7|5mm_l0}(A*ShQzj9I19-6iF2m#c1`ZUP?{a-UN8sPKn;;1pHnh9Z zEL8dOQp!Q4NEaOj%PH7JC*FFRn@N!~`MZOH^hkdQ%uph+NhxHO1;dRyA%>Lo28`CQ zEd3pAlqJOv_6?P)WR9&0q+nGy9S8FQd^TYRHkB_4C$O^XciPLA=C59li=nX_*2kh( z6%z}ux$p{O1oYtMkxG(4@gIu-YT$YhQY7^@tgj)Vo2XZfc$)P{^@jCZAO#Si2Z(kH zh{#9*=7I=ZL+hj(3u?X^0z`UMpcp8I|HV?Bv6hx;& z_MY#N?6AT>bKeBH`TIR&vWHhGA@+vmm$@htVIYq!XiQ)G%7Khrj_B8^h!mQMKtMIU z88!|&k((%4T2gudDa2MCfI%G=H@<%x#lb)bh5m@7)3epq*?)1sc?FVk5G}f9M?wlu z)(5tywQqgE;yOH=U%v;vr)GZo12kbGX6(gL%vQKoP)oBYH7Wg7)v?I$&#u`IJ&e}} zBfM>#q4-{v z5K8VGgPJG*wo?9E0`Y?VjI8&`(oj~dcT zd_}75+1d+l&*^@1OTaAww*=f0a7(}~0k;I)5^zhvEdjR#+!An0z%2o{1pXWeM35W) z@tmLShX2VB;5YnN_ZspvoWwgl0oH}8ci_&o_%V%yB=-A(@9c(LvxDhcmiiY9B$?b% zZV9+0;Ff?}0&WSoCE%8TTLNwgxFz70fLj7?3AiQjKO_NIKX5y@1pYz^ByH$|XSLjp zNua6HEf2RcxFz7K1X`-Px$TFm!g9m8CE%8TTLNwgbXWqzy>9f=X2$Vr#v~sFcWu$Z zF?^dd#207f+d_&m65iokKc!`%cZd2d+gLfB<}XwXN-q2tDn`Yu=#**jr&AJ@R3#q% zV0+j>`DT`1AkC#$UVa73kMh8{Cg7ht_*PPBhOiF<=6QI!Gv5)tx<#Fnm!9Q!RDa=< z?evQE=ZscNwd2G3u7NPue-R&t&z`1+H$zyaACBs0H^6iJV*MB*3(S_{^5ujPc%Zzo{3Ju? z^d-Z^{Eo_RbTL1toBLdLO>N}oa!t8ZE!PYP2QVZY7vgp#*PQ?_lPkynwg&%x0bYwA z!@3AHJpmBr__gqyXYOOVS%4So*%AF)0KSqTb_Kq%o%nsH+v(Thhg-mubV%o}2fWlk z7(ZS`=L)~MQTBGA#ZR%=pNOxfo$$K>p37gv&#@YktQP)`ek}YWM>Uz9Yd^ItKh_)C z!{}%q1?^BS_$a4F@MU@mNmA#i{*z|d@re9!{jGy^?$A!{hA@|hwtg@?I93g>gRmob z}cdmXSSbmff@=*hHaMuf7 z>LBcc3E)II(HO_i6060KlUHCe8?CtrWww|M%ZwI<^RTp}xQGBS6uHKt>;jWT$;*M9 zCS#!i0U!Y@yDw!`5%)G7H+4{+h|cXCOTe2Y=~;cCzMwUVo`L;MewI1X>`nMRmvHbh4YM-qP(Idi*(7kMvEys!BkjmSw4Ak7ATU{6yRSn zR_C8RI#8EaqQfYYHCtC~(G{CbMW*a=HcAvFyToe9vRVpwlo?*q;J!PsqjwA7OUmsWy%{V&r}wCa-u)1c?SOrd(VGGEDtVow*O%qz^u{Nu z<*SGA*^=*IP|&(g(p#^g_Z|(sl@M;|fP70)mV!guhLXrw+Bx}}UCf^=l#Q>v{3aLk zYqHz=o)#DL=M`m}xJ^J@I3K`%IU~Q5{JWUnVk*I6Z4UYOh5sfO^V>4A7qo@wT3pO; z2Fq2LNAutlZ5NiGT|oKg^klFw!u*+zsjy;pu{^E*h68av@UJWET>a@?%wJq&Qp(JR zGA@%`ctQEy!}23N7_M~@AAoksarxD`Sl%)yt;|pe|7Io2P)L@Z=0V&%GyE5VK7c|Y z{i}+YKCo~(3m=CxOt-Rd0}B_h@D>)%WnnI#Y!>G7$zWjsce}GF0Y09pVDeoUW3d!l zw4h$73r-L+QL%sr2(GncpUk2|OM*I4wlEPu@}0=4$_C?4T{13M4MeZ$371f=XJS)ZN?nfeo#J&rE~Vp*TwwV znNVlRijoQcx$vKDDzF-%cur%T29Itu&<7L38W!I&goZb=aQ(S7T*<;Uz&ygQV_{zZ z6)cRbx?RU5fc71oG0R$NEQl!wvrb%=F)P=Uom5CzGrS{w1PjCKf3-v2(3u%Oe11@oN?ILBLmLnd;r$F4+wa+O*>Ocy z#D#4PT_v;)EctjTt&a$J$M({~!VvsZ9Uo69%UrWJFrFs-vQWroYP z-o^Ze$RgE%Isg#jzrM^h`W=-Y!SZu`NSljXQHT047{alPSWYufm-&wRfyOj>KY;L9 z7rW;BkU7p?@Nr$F9DHZ%qI{o;(=ZZVP;Dd1J137Mmft3i1sZuk*cn}%9_~AoM|vCb zSj6N3K9L9b&dPNpkEG?DlSc;2ZHY<)J{>8C_fs+;=38+HB|YSY@K}*bF|(BNlvT_cO;Kkz>Dim==c~7-w__|R5R!UcbHxY@IDf|#p&F##14=7 zV-%z%h)37c8c3P3PKAy^Hy&eo%cN?=~HwI@1iapgzQ|rSvqga0CnA17VcM zR2I&K_W<}0W#MR+u4iEg{;eEu!%2*P)GxHF4NFm~)S-UqAe@F35AJO07sY6Q8fM_; zVR1>GHIM8AVqGC6x+^=UZ+aK=J1W1{#r$?o=o^<+os0PmNtucvsYo#-(s^7Z<3Hdk z%6~2kk7VIk7S^#aE%iU=iG2(@eFy2&_6g;HD**n(ucq=ygLfaq&%*Hfr#e1=ieTk& zd%P+isi3YOc)9}U_d3vC5FhG{PmvuT%CMo(aX*dl0cJIPbFmyg3peQb<~-!%`|}vh z_vj(o=9+=w00?baN9Em!g~5Lf3ui#ED}*ap7=r&%j_Y3?qmSFSRSkA|!Sq}4y#nNg zh7TOF*jb0=XmKFka*MrQxa~zagh$;v3hCUT`qV*KHlE`!nWZ^7Y{`d2VO^aA|4G+$ z&R%A?m|s>tGT!K7enPbH;IeOWF@GLg9mp!qhHfK|F185xa6E}}OuLrK1LcG3TS+Vo zuYaoJ_QKrG^0*zyEw$?d>T&>tW0{b+tdIc?-=u-BbpX$qUS`TNtT0)Mc^Kt`CDv4S zPJe1$%r7gyCzS8Ip>yTyT+A;kAN8Zg#ry!Oa=cDzUCgg7e7abXbQyMw<=u-m975i8-mB{T9`cnt4crN*BN zVQ2P~uNN4SN{q`)Fs}d{h+$_Htq)#5wJZ!tf2!m5qmGrw<(9Ep&6f_s`0hmj`Af3k43xATX4#6A$-(hhxa#9t-gX=cob z{PA+bud$bl&9DXF10>~g_(~0Y1caTz@7KWBv;iM*t(u;uHsH%O@OlV4qo+XwU(p8q z;7T<;jcveZXyA1ameIqiM1khBoWG+V0RLEGQcdUDPlk*6dHE$)V^%(_+rbfDB*W&K z;SKxK{R|(cuhB*PHbfnK;r6qogXP)yW964vvQ%8cc}7*(2O0tL+ju>dKmK$lhU;0F z&sTS|Ft-PFEZjjh|6{V@*acnFS>gxn2G-%mD!T4}5BNAuO9S7>ft?}n8yP(K1Ri{6 z@YZSyzY%d#2Y@ewZ}9i2Kr)|POz(9VW>nwrkXn>qR9sf1GnHqV z%xujIz-=x|nXIJ4Nob2wtSo`25l%nr;5>AmQUGV7OW-{K&OnDN6O_>aR|xT01hxd= za}+D2FN3%eI7MxQ96ETj!h1Hv6+iJ!UW-Rc(X!m0sLDP zm7%dwsD6o4Qj{2FjuHv}Z18pP6=Ix{3?ZEoMPlZ_w~0vvDq0z)&I}>^9>tJVTx2!o z6`3r$VbgSa0y7-Wf+qnD7Vxux_9A#U5_;*$@L}Y;N4+u}%Au#kX+B zN;47Z4HvI64G^32~tLi7Xb=6O{yLC5fa}1OkW1D{@P}-jz$* zMuO_aVuCdflLeOX;JXE5iFIlzgw4=~thzCmP-Y=CdSPJDBIHKPa5C^3mlzYT!YKxZ zgVvacE}@25h$S*X9bqdp5^FLQ>JsgS71C(?M5{AKxkM!?nl@TlNNRSGjn}p$mdxZ7 z2hxfGnL29UBF*Bv#-2>o+3KG{+4Wp*SEd4`t?RpODuQ)mbl4z@a{`tX=Vj~0jK(%% zD;)GoO_@lu_&!_-CelR9O{>{rkh#3>8l-8H(;Fvn>!UrhVsJr4Tg zOk=hV+YyJ?>-9nUV10-_R3E0Fpr5D@*G~%42L%NM2ZaQM289Jp2$~oa9yBRf9~=}M z92^oH8XOipA$VeNc<`hUeMnG9a7aiMdgpi3L;USYk^`Swb!J#3cp`l@+6GA73 zhKEiH(}x9x1&4)%g@%QNO$eJ979KWff__5Kgy0Dw6GA71O_(rY;)L)ClP2mX22Bi} z7&0+*V%Wq96DLj#pExO8A08AQ93B!L8XgutA$($Zc=)7AK;k4QeiERb1lcA*6z8Wc zzp~5uKD8fh`eWIPmuz4A)x&$1?Ml__P7JL2K5XBjSsSLm8#u+3`aoU&Z3kk`o96lM zdEdPG+HJ27I&FS%_UF&NaPrZzGd(}fkNolaxi3sTxwht^3mdDizAZHNOKJn(~*NirgEc^Yyrrn2kZ+rg0y_;8CE8jKTfBfCs zcW%1T9Q{oGfZi`2Z}IuZQ$azdRR6kncCB66_}alsZ|yea;xT)D(+_=cLrLDPBS$`P z?wiWhKRI=%DMrJA9At?RWItde@2DeZL)jbV}wwbpgB9zkA<`#g|1_ z1b(s0Gvd&&7dM@WUOay5lItROZ`^vvppXymAM*7RH+<%I=ReC1>?wNj<|Fz4YPo$% zmunwsORxW`^r{QaJ{8Q^s)t=gO>Z4OXp6YSh|MaD&7o4`9-gNr@(|b=JIQ{$S{%6LWi93^ZX3d#f z&pdu+-Cr7>~f?_H&31C6wg#ovuBm(4$peePd$J2?A>(?pS(E{79B5_kr8V? z^hstI1!TdWM`sMBFbcy_0YcGHJI-WqES?Ty1{}BML0@Kq9FE}3 zkWvaGR~%!c!+Rcl6N)7`g15t9sb2^wu*RM=*4>gA^8!TqdB=q)b%8$c!o1 ziG-Xd4TJj118$0-4~L`mHs=9v_+5N9{5Rto!YKHL;2IAlVtQ|-;^r-i^3|_i%A2=M zv1MQ{f6w~J2E8eUx*12lpU}$0l`!6yQ?B4lAq(mQLj^FuEC3(18RylPkeNx423Zb) z#8E$We^2>m5*?GpU?Wp>gVV`{SM^n(znC~~%PMUwo=ousH zd@6seHq01Q1YQ|5#*+HP$xmE&ui2 z*yRm_kA3{u=dtmt-<|*3kA33qOpj`LI)6soYauB=?C7>CF1_}N$49MuG_IuKuG*l( zhvPO)e$!{o;vutc%U<*9xkE0WRe$P>W$zo;&(g2HssGG9duCly^hH6z6D_m$z0tq& z+OI}l7J1Td>34n$F1vqP(!rpln#=kn99nQm_TJ0pW!&*o!s_2IE8N|+=&sMl$4CG2 z@}WcDWyKGu`(^0jLtEm9Y&GvF9r|wk^~RiQ^DLeTzy5ydcb>Du6D-F!eZ4ocC}HM_ zN#{O$YI}m;iiY<_KmSR>wk?xqSaU%NOSj)WaQ2hW#PzF!1&}`d&;8-!N3NVb@YX)}y*=cq*$dBn)cE4| zBeQRPas9!kV}>QI9Y5+b|65X%3@2JH|MBEMl7`$d;l=@9)+c2~cRhaFfM1hVrg}Z) zv2e`gg{iOf`KmnQ@`f>?bNz1FeEEv7mmWOu+#8n{yp;CVIRlkBum3deh3kfd&YAS^ zoLtjG6fmLB^e`2zFni@NXWo8lio>B*|xnJMG8UAz6^>8n##zp~l?p}5CV z(vSXLH2CvxQcAAa{f`T7JU_L0#^VEj`Rwx4?SnHu|8dSWsc&9T{=tLaKAU=Jzl*cq zGXIo%?*6c8r{DIU+c)v*x2HucocosV``a$^xqj~H&9BYW&w6$4w8^{YKezRdxj7^I z?f&&H{k)3*8+1|0o7wZ4n(z3r_o-XwZG80QUq@fkIPb?rAtg^FbWO_-Q)-48C#AhQ zT{)WfOmW(?qbtG>esFi%n9$nSK5f{a78V&>-si-*^Ir-GJo0^d)cl_;$9MRLmd}4^ z)3V;{Oe`#(1y+3Rpv|x6F->>&oB`gRYs{cK@nq;sKAX2Z~10#@~o{dEu5x%syW^B z*usRJUk?vmcX7HtZr@F{!N&AepG7_!yY{B^g>(9Tf8K#N)0dZA_P+ToWzoE(FS{k2 z4qa4u=%(1FX-gOFeRxseuAJIMrRO~vKCj}#MSYD2yA{@UU;N;zgptu*BNl)BSw>*0 zmv!;meV-|Rpxgb6*UtNPU~24v#gE*aG%l>VpJCy1hn8Pujx|`0EE;_G#x;gfk5B&b z@Sw*HKN-5`ANb;1!~Z?~R?NJQhGra{v#o0GjyV~Rj=FZ-uEcAhbp%YFH~jgGF1O5I zw=C@Ej8{$;`+xZIMaH8i-Ws=|B;8oP`qJma8m>2foW5yn)a2KUJwqS=?SqCB#%qyY=uBrpynO!)GoSetYIR-H(RkUmG)bG=D#FXRue+yW0=P%vn1*>!tON z+(&0Uv|`CiJ@Ot&+_kG|cSPQT%uhZU z{H-puGv8dp^*TZkyQ*%SXYrnr1@m=Wa1rv84uNl$hRKbXn z+b7Q*7F>8__VhO%yg#S#o3C$pc3{fZLi4^UVb?wJUSZFd|MBvp!@3o1vIK@)@W7O! zTbG}lgd(tO! zMe(%0Bd>^AU03|}z`}QK-g>BbZF)n+bFcWB-<`C&G4;G8b5!Nl=p(vy=9C9s8F10) zXUyMi4!ym&y36~;Ov{F&n>V~sbc^M|pg)eRob`_79K))T>clQ3?<`x` zs6RNNt-uwQ_nGagC&b%D_XwR>#Q(r7u`^D@5rRO}7bl}6gXO%7~yx|BpzzA6heAw`}7jwP_b5rz{(v*zm8zOExTf*0^HnftOxf zHemI}?HB*^mt_mKj;~twZa|s&>Jxz}o`$lEf}h{oKl8@2x-~z%a_i)Vvh+K@4ULF9 zUH1FSzQY>+FSva7FDauZ-@l}MhyH=bD{s7`e97Wj=CD=omwOybe|!26@8ws8Sl9MD zICXhY?auM>y)4V8HQX>|Tg|=86IPVp=g$T?ZtXT`>OffZA_&sb6XP_D;CfHZCK1V=dJwgmdRm9-c4Hh{G#cF^+(FP`5Sy{R)vpw<+TTU>|OQx z(URSBd;PxZ_)j%CyOPGQo^s21_4zkst?n^xSY5ZWEvw@4yYYr}qm^J%>?Q1@@G@k!;$|q}THg!ETWK6HMd;WP<(dCn; zuN_@8;?2Vi%hrZicTK%;<*v204M*1h^7dD2VI1Xle?tlUJ?DdFn2nXeE|$KNvp@yr zfPChyhc`MS!Z`wNoffhNlHEy(8)3z1Da@=9Bi|WrT?29`oaIim zSB2^gcc$p<7Inftm)Fkoac5avWBG5W&k~S5o|bUD200GW&G6TLhxgv8@4VCA=uC0i z;S5lBbZ5}Me{3(;u*77A{b5^#p+pmg<0o19b^u&u!QEZFdk;?x@G~Fw^5|WB9HBkl zP6tmzKj|X6-`0I8J@+zs9`&atQGaGG^)Jb!zVCeMzn@C|2N+y>8Vxt*Q~$#y)IV&Z z{#|T8ZwFtQ!}{Oq)6Q_>m2!pvfF%!P+(0Td968OQF|jG7Y@9S3A*F4v{x znkI(Bm$z^vB2WjHJy?uc#fWAcc(xLvW0Irh#3kV=2@FimX=rxsVGPqoH-B9fj96&m>-IMR&hZwYAW$D0^iB`r~mE!20Yz`tC)Dg zstn$7<+AfDs#Jc{p%vpADV`WY+lzZG1<{E6De3e?o8kr9Nd}U)|=ZF zdg=fvGy??gi(qe|gYzzS{P7S&@ryeflnzHvF~4K_P#(DMitF?Eu7i^^#SoqfA=fCv z(jtuXewr4VCx!&DOZ&*Ol$pTFw-AZkMv z$PdrAId>u?o^>gOUa$o6Vr#&&L%80LJriB`*Fn6I>=%f2fh8nc;X+}fC0iGD@x{9M zyiAMHl4mN>%`Ua-igR>xj73Y-IfjGQV@oK4aS--*IBto8{RP}%h=;N>Nl8cr-4&Xx zqGFDX3fE4fD5Txd^Lrx4Q%OAP7D@{#Kux1NQaCmn3-PG?CGbbja8exVQ*J2bwlLw& z$|b}aVEaKUgDnbk>fmhFBIlJPqz-pjAHxNx_VU|#K0C`F+Qs(QPaNn^4oIZ)^y3~R z);P!5S$&TNvzMjE>g(k}$@y7F(vKT%xlU7wZa&ix`>upx}_uun7~xCq+(=f3?3B%luqWF)`_jeetp3N~T?we;rKZGkt*ov_C`$gFX#aR?(?N-Jq;2m5i%84T5t?x9M`yb@;>GjMnP8pO z;|FaScKeDaRqbW*)5Vx>XjSf12mQMi2R+ZP?c>#D;%OEfDbus`baY$-)@ravCnNTHw}wjd6h-c}2^N1#s?}r3*K@sL}nk_8Z4fOQ6P4Bk<&jeZH%v z(jNLdv~SuDacs!XzoCX%pe^7DoUBf*IO6zKJUjFEl_#Bjcka}b;_}QrMRnTHSw8zo zCj7PlXB*;o2UEA|M*XKbUyX~DH~Amyg|bR35ZN(s5_&ehga~reR%TZ-D(9&ShKoUJmBVam;*2T9%ZGOLs8(O9ou7 z&zIvgdVwo1>aWmvzi!_n5M`q7+y3+WQ~Grqm$}G^^LONvS_HbX#mDxom8U zU9`7I`^t-03*EbTf<5Vl&Y@ialhf6f=tbUWHn1(-xxMZMnr4kxIw!1g+CYH(P2~+Z(=ksX~%~(!+ztdb5}A#P^}0E(=CT7JE z+PR~9ovz}KAw3M=M@}X-O=mx*^UF{dlYbNKlAJi&gvpujsWMl)O6_E z?B!xlX+Mu{pI`F1CHJ+`b4Kq<0lzc2g#z5)!5*V5uxCfB48L4M^cQ!}J7b@<_2M|J zTF)Bq7_M~+UC;7?1iXm~9e%;nOTl}p{yxqvKWBCQcWA$Kbqv?>XfJ~{wxeIj;rK|q z9%#3|ZLRL{ny9$+^zv;<{h~i$-^uX!krDij_;sbWF#SyY(kNBB(qaqWO58J=bDb@k z@NrGphOL6VabHO;&asxk4^{GW8hGGBTpuUD+hnz!%&;L!Pal_FXv`}pDJZrgya8rt z@p<;|)ng$JEmG2_oxK0a#r(PXrsW2U$+r2y?=xz2F~5y5_Ts_(CKvOI<-=X1NCGKh0OGYk8&a0O;UBg(>DzAXnjW={~^f3x#q#Os+n&NeTS`n1&@ zmStu2)ASXUe+EWETq6r(@XvI-KWb@bd5-P_ZQ3lq50vwex!h_hF%*{Y0RjH}B!-IN zhwHF^#^18R@yW@9R35wGT?hZiSvUpWQQuowIFyB(SQvu;)edpDqqy@uYDo7MDYK)9S$2CoxNlQSRn!6zGRmLA~IOm z8LqRD#_f;U#qzZMCF%##ulu%h`k`+lzimFonARMpSJK(a(0{{xzV-Jh{1#7~nRoQd z6e<|}-UEKI3)boI_D#IU2iK^rV8iL^E#A{N7tUAXt)I~V7Ypx+@D>mIBLNSd?2iB5@n!V0mC2Lyit?-hqXTt$MZ~V)C5MTr@nRN|S&e@o zoD#x22x%#!;9DNNfkSk>oCG%4mKHR8xR`~!<4u;hmPyx-1IUVqoi99Bk0*=OFiU{* zEEb1f|Iiclb{XT>IJlyp3w!v80l&LSfS7WSEZ*md?^qYO){jurAy(Zhv?3F7+41u_ zw3p+$d~EfQ1y?^?O;{621tw#ONtb0TDA3uGX*J2|kn0nzn~v%euRj|BcKV_SrMzMz z;diq0N^~=zo=w@Ue;}L7mdgmgqu~38_!R}!egoO3!JC7`y+7o(6&?AgxLPrBVz`#I zmeay{k#iE`5@#;5i`0gRGK4>zrDCQv5+TMhUGpq?Rudu<1ta97uj=;HD!I)FnxF4t zw+Zet0Bu=#@&WhYwe4>#v>eoYZf7towxmR8LAZM*-o@&2(JldUxhLns;$L=xsj%3x zeDY+boc<+ab^h7-yX{OzOW|{|NQb(K1-gQdqr*x~Fq+M9V9z1ah4YM-A^_0-qPznN zRVc|%(d(w^{0p*m0s3mf4U`B?JeC#5o?_v zT16JL3p|}l?@i8!w!u&0s_Re|vX2X_&@VZ52#4R6ir=_8hPJ23`7R)~6r@*Z$Th%F zo%jBBJKknKvw>+98#vgrlERT*M{*IrTeef$u{THaDdjfj^C?4Qf!R`AZu^jJBoyxf z|4Bc0ZoHh~Vtz;EH@cW#D=nlQT~izRQC>K=*ah;zJoVsr1HT1)***LY<$H%*zK-An z+6kZ3PWW0U@I*Fu;%taIT$}WPa5xhhmmQ`e{TNQtz^6etzzKY<27V`m8yvu6Iif?b z76CtBdlO;!?v_m!>RqyD=fwr2K@C9mg%vUJ|5AcRhrg z84#Bh&x1bKJ08dRi#Xjm{*qXJPS=)))O6KCST@e&bU5g}&&3F%uKpe`;7yivI<`=S(S6(L-F6MWnk1a0dcT_%DoeEBi7Df!`!gUx0F#h9o zm<^>_n2v1>U9AQW&fT%*D_DFiykq+*XJKA{W=%c-`LA?bE}VGO59GJT!!`NxeB9@C zQrkv;-p*nlLupfob&>?(W)|kSSde%Q+kcnN(VN8bbGrIJuBJ-|;r6tDj^`c?o;nEo zFvdjw5FYv8_!RArcY==;G@Gt;LnXW-oi!|9E(=$(a4ZW~urLJwCmhNL<-hAW zw*CS>%D)ACnfy8Y@#iUg&lf0s1o$%e8St}m*}B+yiP5@YxQa~HmM7zlKDcmORBVL} zzdUOmd}F>swQS4aVu{&9Q1&4@U)E#k{JTa81g#zhM^|&<^LC*)9URNm6=yDmn>FxG zA=OQ2ycmkaPPZKo?1~j$Qb^YS#Z0VR{rn@^(Vc(X%fp+x@Qyb87689wm3?dMuFsCuC*DSOwwx>VNxzJB?d}u1)*IlQ2DJ|E z_UXKRw(o`&=QVGyPx{>_eu>=L=JMO~&=z6sI=(+oTbjLo)%VrO@1qlSfZi2?zX*o6 zOrrH`&%HNxUHV_K)nkdZx8Lz+m#jgV2i6mRw+Qdt<-c3&=uRLz1fKSxcmBC+18=-& zPtVC)DEjhVv^}>WYFo{}FD$l7I=Vm$fOmtR9V?*4Z~wlW-Wl2Ym$+QJr;|%aYz1?P zt)M#H(LO|tqix%f3>Hy7x^uUwv)`sJK8qt$u0e7i$E39O>8~WWzUd7uE`H&!o?qc^ zUhCTuD-1Y)^?;(@ei3K;)Zv=Jeh7!NFs5^d@cfv&`mnoHQ1g^yA=N$OY>~-_iAo7UuIr>~Zn_F1+nI1b#z$ z9Q41~vv3z@n?1uNKjE-so2SLGTraj{Tv$pt2pxfMthyX9L^<{9%%kp%^mxD??tmIJ&4erb8sNVAD2VnrTHut z<8ob*sZ3X3Dq3R2r6Zdgg)0-8@Z;`Fbns*K*}AekYi==IVoal2uYLFqqUGrZQ@`Ag z`nAk&V*cRsXgt?d^u>R;4=O8PXS9&z7hLFA#WYi#Ib{TboA>d)engGJ z7BiWP;p%=kc&N^7)Me-4c|^!$E6I*zT#sJP_;!>Q38+e}xZq^el@tQ~Sgg@%)ZtgT zx?GgKktl=_E^`He0GF5yf{4q3B_$99)(?_PSTPoi)h#bB)s=wqz^TkaV@W<)cq%C_ zwPX>QV;z$s3DX#Y6QUq{um!M4m6>P7Jb-=%9FjDZ8w8k6zug-~_8K3yymR zC0!#7(Jy&uPE4XSc2jtcwzMlXyJ4%2f@ObaI9S;2o9Fd5a;}|bwk*tYtp zLZB*#H6sI5BOrBFtil)k=9EIc6`FKWxh80bWHnHQe-2qwLTg9w-;V;TNM~3&;RdR4 za1%){1xLhq(wVNs=)i&&Lmb}HfWO;}_lYlu@Eo{bC<^=pz=QXT8%duiu1Rtk%6v*s zAmETuGy|~VmkFiBa_f{4ia(UEgM0XO@TNMr!;o`1;F;PY_yq}GCXY`j&Mt)$!HGNx z8t888v`2OR9({$i-duTFp zqsVKM=@RIx$$}ONeo2G0KbwJqwrDG_)j{YU(a>rq>!$J|dqmQ8VKhHQrG=T$?6E=e z#>0_LMw&#|BN!Gq7e8^?QPDYAXV=!#$V+Y1xUdG=s$L|!fl?m``zKq9ozIDm{{Fww0>g!VGTH~I_eflyirwAwOKdLWFn zaQ0_{7<}Syv*Y*;e=R5wT6+*Y@gFHsk2>v`@%}v=pX2Yd%f_d3OiS=+{bi=*G3E0h z8-y<}HCdL=HNsedMiFEX9|hHA0zeW@R%XNP&nd8?5(#|AfOO^otz|?~SWY5@a0Lvd zh9gE?TgTsq&jI?=;rle?q!j2XAUC9y0&E_nrW2{*?^vZnJpLjG9i^glox3DbLN>tT z*f$!msg9=zHAV4g>yl%46rU759pwaK$%Ao#DGcG&CBS#r3zhj8kNb7&;lF8|kJ9uZ zoqh1Mo)F(3{&UB}`Kpg-8U)GxALyTLXKqrrR~!EN?&Ms9FY|5j{KbR6xP7+-+!8oz z5~!o?&gU`e>sx61ET88soHNp&wc`HU5s7A~=_?=QxIcU+0sn0|%;$TN9Zn~_V_w9? z9o|WX?-B5i_+?I{BjTWsQUUnjH}_; zzN75%JYDp$i~s>fOADsg!9O0oX@N3w0TzC{4?@lz_GA?T+-`VphX0HJ@JGY97Gv7R zfhAy>?AVVY@`ZHBT*TKtwlj7j{9q{8nZq*l0!({pt$}i}Zn;BzxZYSJ;N)qd?+JmO z0!$;mgM2dJ-=xb; zoa4oJSMZ8_VjirA2>5rzC&$mF&Eab_bN~wC2)*z|;DG0H&|~syd15M z`nFquYlL^5#O5JRUWUjQmLqc<7SozQCi<}ehyQIj%oi)br3vqt6>)JV(n0X^1i=^S z@Hq_MSOGp*>lPs7uPB#B0j?R|WpY8BybO^ZEJx-zET)A+-q=8}&G6rrL!HVH;40zW z5ltd4ECYE#C(?)Ix?RU5Fef=W+1PXKm5sOQX5F>&x~UaM2i}SjjhdW3uh^1bVm4-( z(r3d$uO&Sd)XyLYP6FLDziZy!@ZU~gZibyoz$3uRtB>co z9)60qxf@P=!FdFFc@6aJ2XQ^k=kT~mUjD;J4D}eT3^Whmalu|*Lp%oqTpzP9j~nmh zKX^nxkD+4TF<$=tMw|wA!6J(FaJR!`U2cJ<{lj11zrPs_v_&?MDa9taTX_| zSr*4=xlk-O)XRV9h`}BgihMYU8!E!d%8oCO)k@JZtQ z!l>+rF@BfK>!Q>z#4oj|+c~ET8P9V)5bMKl3eD@!@{Z5!Lhhr*oE%=IHYPt|-#UgKI zh%hO-KZD}q$_w=h8yYg$W4x$`vN&0}GJR#buF`8sT{@#r)wX4MSsBAb znq_b@TOosUHBQEx#Lo1QwG+@2bXe~Zp7i}Irl;?(r+VsnjblCakl7kpoUEQ?aWdJs z7{~eJZ5i!Ai@;w~7s}rc^Qqo%yo&O7EBMGi(K~HBl*mkHpm_B86px3bp155ZE!Y)3 zYmYpQ>pR+<;Ce>|M5ZaWhvkxQS+)b5UEb`R@2Hp8yZiWhx9m`m%aS2eBg zso=M#zRMZTmoKMyc)7!ba(4>l>RGwz1r+{uR_+f@%I$M0?Vq{rKwkC>I5Pm}z$Fyl z57$vX{5Cn^gULpu(Z@*TF~~^q_%WC;fsb$ogX;JkgX8*rA%nv-S)ZHB@&+>d!Skuc zNs_kWG8`M9jS$CYuG(A~9K&~^1fOc0B%@hobDhBX3w?r2c3T9wcQw)a@nH0g66u@d z6*fF%sD~KWCz{4hWN@fE4GbUZd6O@#cke#lq+cHgKCW}7f{&WCiuregk8bxuT7Lg9 zFOqHrA4dpxvGA}7US$0&8+^>a27JU<1wNX%E#RZu0X}bM7;ZIY(Ae6}rgMGf<1m!N zaY3%fm>rP81!Pj*kGw+KC|4cu4nR}nR?#L^!FAL)6A zh2fPrKS5uxZjpa+%w~xB*dS~@S~2^Lw|I1 zDb@cjw_H?Z#Sy3wv1*OK3SZsjImx`13de}TvM2X zpY1pq&5}6TSYnGH=Ngdn!YnH1J~vT0F9hGAoL$r(m*p(OCySHFnUBZ$I2U!OLEudf zb7FK0nIEu#^7-9%%I6vI(N2Wl?Sx;Ap7C}emU*0&8Oz!Qx1}=$TUwLttqezF1P*1} zbS|aMyEoV>O}+gS#_L4>U1>kp(~I_dmx7NjfraZ?cpnRgbff8)fRB8wVc|;f5#PNm z{2U7tWbDyq->9Jxv+?%d=J<<^GsOOe=T+H6R`04fjXl-ogSCmU!6E%Teq>`u?6;I9 z-pW!CuU`Zmzw`c(&x2}{sC>JYhi)!kW)1DyEUI(;8lT#Y9DSvgRX@6aPhW6K39`aqm+5#zGXm1>+D36RhyF7+x zP`ow2QM^UR)p+Y1;Kg##ab4<={%ZIa@$q#shjFYe@xE1rn~cUoUB{-Lffvje=gvYg1Aw{ap%CL=!AC2`EQ@VPvR)5t@FQ{iKM&xK-t zF0)lK`eb%fwiX>o*X@^!Ww5wmVw`M^L$Zf}yrA>Ydy#S0Xsly4&ZH^ww$9W1V(5He z6w@ix4ISu)-;8el7mV=ph*0{P`(*egVSEe5&!Th0I5wxicsWP%V-%P#xeP-;AAqF z#j(0p?K{Zubp}qB_aZMZU(a43gKlOoZ5>bW^19ITd`KH$?ypVLxlEnE%d-;zXaiK?* zw_O(_;HyYZ7tenP<`dZ84G*II)wkedn9w$s+DAT4@|)Yuf5eCjJZiCxWDH0m`)Q@# z%FmD$^VGt=m=-_5BaU~bd&LZo8tM@!*w8ezt&(-3{bhhprnj0p;Byha&xLf=K;BHi zdp}!mPPvXY=C{DN@fYOfb)M%Sup4xJLOVx6+7Z_G6yCsScj9<}$8!DQvch;S3st+3 z@x$7jYQ8S(FJxm>nJ&xl{V&JKWZIcHne3VTRQ+B%<5V_Plb72wex~6{rnjI&WbVh? ztEg8a*cepScACqf?MU>+rmu`gjzh#NmWAYyU_K zjCWLfdT65tukuz7;V>_kq0QkIotq$|OLUAmHuyyYC-}+qMU)9!S<;vP{XX5@1 z?Vsy=6WjlBrJchbH91@9&&JNEeAGX5>)3e+SK7I3EW7hhZs*}JUO*SY+R-yRSvv zwDX-Nbvs9#vUZNNa9hXM3DDN<2N^sKKGLJyMd@1$J_!R&t=hSy4?x%oXy^R=AYY@! zH8veE_5(kUBCJ_x*C3z{$=P*r-3(=iZq!^#-;b4a|5dkv?!R6QKCVFg0zT3JYsoQ# zqWXH=!Pc*E%_3rrxAH!)1!=_24-?i%@NA=W-XYM5<)f3rY5GlG2Hz*)Ym5`vev=QQ zUk^UgOYmxN$oAdKp^nh)Wan2fubJ6vk^m2pK3Ic~85%X%BS=_-FNb>Q$LOdIrTa7Y zgKwjQ)hl1W=Jg@2vmk7(u-AfRi{;vAVLb7wGBdD(hbAZs^3AK7cUQJ}B!YH#H#Mjz%u_dpV@kHrO4J{!SD zdDgP^>?X58x^iNfm*2^yit#h} zNaxJFuB1I)2R?>x2OpjH(ypXEjszc_0epOWgN09kPx#KK=@)^I;cymCXW=3iE@k0s zS@>oamYrEn0{XdLe=X>B#d8_Uc4Qjum=oQxJtxw0{EGwA;p>>S_f zRa8H&2OsO4lqJzuj29ik)@d4%R6jKIAP#<>b*Q*sFN2fGRkPPb@JaHDv}$GC2kIKX zd*u7jWR2?@wXXC0`h!$1*Mg6(k%b>PM8~7wfseBAJ50x=Ch#%54t&h91$?w@pMa13 z*v~9H;2WAg9DIa_B%9N&pZUS}7)bBMtUcivGZu|3b6UB#H;ibsc^t+uS*y;HJJCax zzH0hdMn3WC>Zly}xJk^%;dq+3zqgXDOCI_Mt)Br^v|h@=N4fe%(lafS*m^L^Znq#i z#Eo!fSo=WtIP=>p50NGro!UCZvZQb_n9m~}@ zDVM|X`WJD@=7-WaMu+Mw8ml|8T}$g-BY&hvrt4Zd`F<~fXLg34BjK{VnCWOM`>BEF zxY2i(m+LYw#~HkAeCktWZx0*?z>#l_SF?78?I|4LWb%{skFqu*>CdJ0CWDjNc3B*g zq3Ya*EKZhJ7AMOqi<9M*#mVx@;$(Scak9Lw#>whP6UXOc{EQRoK`!XQ0=9oJbsg>R zGQr0-jk+hRQ;ZiK!umQ{N8+%cZ?2uaWI7|BbpSfZSqpJpkL$0hpOopFlQ>lwGFfY6 zh`czHiIygQ&%vd_Trpy!xAHyobNtNKNa4(ux!QiO0+-uvw%%48L&qWSf{*J|zk!c6 zcHs;<9-Ik2jt7gu$5T-o!1n?FdGN7UcoTdarhEcEx;@XS6Z;p8>ugwtLmMZXe{8wVTX~j!|8hqaN(a`Jz~}tQ=9C0Tcpz-kNf*wO$>v;| zbE1e=+sANwJzB8CgKNB%1h)V1cnPhStE~2Vah2{0SLRJJx@CQ%?3}Y~ti#$1*A2q+ zUj^r+jjL>ij9-~8mf@4Zv9rcQg|o)I4_EbDGTF=Uu{gedPGl;BWAv%c)5>U;#mVfP z49?X!SMkaCkmZ%ZxoC%F?L}*oWika@OwO235NvT0*pvsrVD@0&5B=XRYFEZSMD0o> z_~;I>@KF|yd6=dz03Y20Ec_x1FM5Qg7lV)PIu<4Y_TY9{)Lk(h-_c%~T{-{iq#i~5 zQrWp$KW?~IeJ9qDwhth2GW}*YSG9h{Y^m!02AO^RH^3p?-0k7tOUP)^@W$sl+BqlJ zZ*gDHW&LCN%*U}vSEul4XeRhvwbv5ab2(}KPhfuz+w7S8X}dRrkKy$!yy^iOz7BkJ z`&gLc;XH~qpQmvj@kMBC0#AFN?XzjeXqYb3Q=U)sISpdHiRt*hgW1bLsdPNE7<{A) z(|CT)gKSLH0CpE0=Be=TR$gNF5dAin;=5#?fKRi>F2i?Rz*i6WD%k$_pjnJQ@NM+D zfG=Q^Kp%{(mvQ4*;(G!7 z_Tbws;EMo!H?#V^Wj3P^{Py5$7Vs%hAD^)KXW8Y9KJXpkBZ{GUAZ!HS5uH@WW$m2Z zH#1(`-;uR_Ss(g$!zYsq>-SZ202y2u{ccmozS~sQ6&piO6UWf3KfF-b&k^(RcfO`5 zTdNbt-!^#JI7Jf2&)`G}=X`vqS+=b=t9X{k0oJ$4y4yp-`gRgMf*{}HWOCEmR{UNJ z@9h-Nmg;ZxR&;FM_{cQcZgiK>c9U_M&S9KV5%a$jdOKQDzk^oUa0O&kiogS zULm7JR)%byN|v`Xak73<7ANCP*3U}pv$Q_`DmWR`$03ukEKY*g*&3L*)(G=;vPUyh*w+kT z;~u#Cfb7AHV&9sIwDGYH|IQoJav9y7O zf%*9etONXhpU6Q1FB^x+cx^aDc|F0_ec+pZB71&r1J5029HwifSQhr#`hMQZ8|*yT zzpkQ#-omTtIombhqkD^m@m)J#gS&i)u7!wq`F!K8{Dbj>Wn@4Z=t5XIYj2}?e*+)W zeQu}WIpAX$VYTH*+Xa)A>|BBD+Y{CPqfCEh(ee9w4|*O0YaV_{yzcZZ4M6}6#Pn+K@g?rkuzfgL)o!~y|5qD^M@PGepxT~%x5#&i9 z6@%&bQW$!TtuH>;i_XIn&h19*55l0^3_jv{j)gH!dv5}#$C-Un*##Ht>feG-rmwEX z$@p+Jud8sfG9-E;m6fE8$@IUR=@ZuNB6gmX-_^nA1gLjA1-NI^=r}?Kw_kv}jI}4} zctgSm*LOb7#d3X)+S}(y{#~7HJS>wHixc}t+1bo+RtC1E`t!Y&61Hw!ok`n8E%>~h zY5Qe83|12VS~$B>-9I6*Ic zj@j!Y1N3qplm8owDSdklj_Koi$;(B4!x_GRGCkqvQ@B0AI_CFu@i`IdTO;I~&gL5^ zkBXs`u4kD)k==vxL@uT41Mm^9R~}t=T>w71mEdDMzPHi~?S32k&4y{heMWWXbHrKKC$K}QK3gx9gPVY5CK9OHvKT3Ch zW)F1zD7_o|JE2!*Go0|i`w}8siCyMnt}tPKv4!y*=eV_GfT-Ll#Kz;es$G5Wj`d^Nd=~HLoB(jo?zjFVeb&c)p zb3UJu+>5wHfcu4g&mrxrSh-?fz}ur3C!?i-m2ndE3+;?7ACKex0I?5}`|6n)v)P6k)KBf_zTKmoJdJ1Curr7@koUq&PB_Uxscq zJ6{9$T9fcx@DU%vpnC#*#PbCUW1M#0$LW#PpI<6nN1DxKOU8sJy%ne);;^g;*5}X| z$ItcWQJOe!hyvdm?x(+5k2`SqH4w%%K^(dW@}!R?P!8u?j2{Sic{~U2#l}}Zj;3-c zx|og+CXA)w;Bno^Iray@M^~foM$WN61wOi0z(?M&Omr*3M|!;(4`aYbT9>gf!f>Y@ zZ)oM60rErVC|;Xi_I(?#D{(%~#|M002kXlB6pUR^px}@nGt+~2`1s&b%I`MtF&*Jr zmCx)3U*jb(5*sF^X%_wFbBb`UNj=c?ra)5*w0Cs<*%%Mso7g;Uc^0K_C-|7<1r}}s zAL;#>g}Y_j>Bs!7c+l7k8LiSiFcsLmfEKY_`5+}9EUFi4&ZBh%^0W8?i^4^sJ_2fjmkWI8LUSC{4MYF=3za5XPmV-fF?<@L(P0>swJ z@X7d<#WDI+d!8&#Rfg<0R%B;IWM#M-$I9hvzJxbfUWv|}^}SKq_i{2?WZ%Qc>f`_0 zJ0I{StF!-~Hh&0MC2F0;p+?0~CTf&UtClr|f<+5PC{PtmN}JM1X=9s0tDsR)ilRnE z#mO|3mKG=w6{RR@RM4VKqoRUC&6K@Xhg+toox}P2+{qItwQl;lUDx}*zx2AkeD0j* zocrA8KIc5olhEerqb%`0uje|?&>c93gtT=odFc5gmt9ffy-?`!cpF=fN*~d-_xl^g zy}j&@k!#}nr5uW%TJ3cml;hG?e*O-n4@-Ldb*zwodfzAaeovAZL!WcfM;;P;?x4>I zwY7iH?=tnZANrb;zShSNU8{Yq{l0z|v9DOPeh<1|=_9_reowlf$Gl6PWgZgwPB1a= z!H)0FxBq7c<~u|C{>_0~;`2NUia)6%Kh02lZP8v!S?@Va#FIGR^mQFctlL<7?LGf* zd%WjwV@z*o_jf(V6J$LlUiYR{-+7dFyhnV}N6$6ix$(gJe;K75i%=#%w%EV%f8M6A z#6IX*el&d~$`jQyobmnf)sykOEqE%vKY~zxeg`Gq`<{+}k6$yC*B?Q-BATCxzdi}d z&!6a9_K%6aIW4-qJCGEJ>N&Nh)Jtn!8pWgG9DDU0=JFolNhkfmvzRLPK z=k-;u?|l>d{lXF2I*~CXeh27Z-q-cD=lc5IGi?v|_3XEU)^T5ZT`TLW-a*%;zUuX{ z*LklIdp6HO-^d23tdsy*xviA9cl=WV3iFp3m93FID|Dk#7Yi`al#{Ry2O?zkT)5N7>;= zq^SNk@HkWEwByJF`@?cvJnsXw`=0CP$KSVXgfcI&92irT@yt~FAo1~B+((z@<4x`V zZ&UhnY&!W8j)I4#s6&PF`Ua>^QF?iuVDI{erKrQ?xG6=Mgomf7!>4~w{SPRY_6bV; zM8Cb6=r2L>-=z7S-ow8fm-622d%qrNR0E4lYG77BHSo+soRXgt3_O$7YgECzjOt~i zo{i`C1djDCOXEGL*bDr>PX2UzbKzE zO5+VON^HrmJWo#So@+zeNsg%(Bd`0*>n5eX=3F85FM7zR9zizNs!)DXv^5#?D{T|& zCc(56l{Sj<0Xj9{IX=qf^w;^bu<(#}n(~hcdAqWW9=?#A}U*OZg24Vt=^F zs0x=Gm0#OuJ!3yyV#P;doQ2IsRfU3m)Jz?x@eSY6@$sIB5pNsxF)juU&rFyiS%W-1epX)T8N=tcK z84}0EFUJS*Y}iAy7OF#2Zsrro__HA`+P(3hA^p@5Ww)v$vTjjFaQu+o$B#4MGe;RB zI%ldq-ZmtQho2L0V)34Y`Fb>3qdlz9|2!lsbX8818GSd%(-w_Y9PJyac9l%@<> z1NhQPqdFBW+Hzpby~_q2#X0`2RIB*6#a+ec>%<=OD&rm1V;&RpIzX=ma6TMxW;}|- z`7j(Zs!vh+3kUk`U6%4aZLQB5)p%s@(YAM4Y&}VQB_>tk9i#^HL{@Y3uyC675W5WF zgd_Fp$lXUPQ`s^6XQ)xNqs0k-{PBfpb4IM}f|od!D5ss&>s{8n{h*)A8ZV5k@z`hd zsqv(pAbztZDBtt^zvpJ7GQFscUCPVsv9e*5TY8okU8JOJJjza#hbNm5=ygU z597PD?eX8K>iPeof%^FWi}rOa*zoh-s-R5OJy7azf>QrOD0id-RD9f0E_X)qI{A~#Kr#c#3?ws<%)q}h z1Cc+(?+xU-CVn%}TArWL`{x+#m%{w7#_RVyF16bzFX-c#`GfEJH}iL&y?@s6-d}#A zefW?grto+Do2C4Z-}OJ5`^Vlt8+kUY{Mhl+`$w+99?JXbBT+ZIkA5cc`iPv?$%j6`Y4m22Dk0K}=E$0o^6R3q#^J8cWGQHE!C-1v5HQF>%q|WESO!O|Y zP`3tkpa|l}C;yz;^!};$pThquUT%54e0%&lS-0fC|LKVD-ja4wCT>o*@K28)DNp`< ze+K+VnPT&msBv0u-V|4TsmtSaS6A6;y=69A;!uoz)t_Ec<|r+x_4ZL+^;JK2$n=t0 zcd4V?UFn)$S8mInoI9knqNK*bg~9EuwdKbh_2urL`r|U-Dw*|TJsvc?f9l^|9`E7D z1pLp&@BZ=b{&{@WEQ?`s^g?n^2wt4n|2xMTHeYDyX$RjxUXN>|kkZ$%$X4_=VT zSIG<{Gmy+cG6TsBBr}lAKr#c#3?ws<%s?^&$qXbjkjy|b1IY{|Gmy+cG6TsBBr}lA zKr#c#4E!525NS+RXDsAcbaMhM#iiS(2)Xt|Ml+9r-Sx9A17ue;aoZ_2GKdHIv_E zg2R5pckpCW4o_Ih_dwoBobX1}J=dfHu;fAfQ0{>{(T=n635@~bxrx}|)ys(IE`B!( ze%+L+(r%`FIp1B}nyRvhGXMv-5z}asvcM)(IE_5O!&axNX7Xu<%TXIK2jQ{psVbCj zQa1R?I>vYn{^9*W@?T5*@RWyB)%>gI3%<`UX6&Y~2z>PMRMpNH%^OnH-i}lipxm=D zRlW8EamW~-OjUo|M82f_sZ@2(D~uOA0H?o}s&-vKIUM;q-I7i+pHfvl<$*o?UfG{nOVp3RN1_~a6VG2$ z)fTjG4)YH0{w!7P;aN~2c=_k#jdDNy3z{~GaqUf2)o3$y{O~WRi#p~nQq_AX>w5D1 zWvcoT?PYCPzv4GWx>;A0+u(~RIFG*I(7&-(v2E~Hv=lo45BZvSX3!Qsgd+F}!Qp>r zJ>bU<7a$Y)48XThC3Y0H?xQVxAp#BGk}KAUA0Ef=$t@vHJA4-HApQuvI7O#IlzZR{ zXt=Crcvh-T730$mSD-fR5d4`=r{=QGt+wq6+FbVfb*Jva?Tx zmmR57jb~FIZbJF^3`5&7_+kx5`1_aPgLP^#P(%gL^;IZ zhx^cG$}J;wY7t7OJP1EVJH$_xPMw45@neSzQ6uF6xD#bk9)-hx#r$%vu)zk@DgNPB z@e(qwoaMwV}XlN5qS&2E31sq4a=r;r{Si2o3*xPZ09xjg{Yh5W4} z*DMS4p{3Lbz=A@`7vLX8P?lWd#_N<5Rj{vpaNq=;>Tu&922i)`YiPNMTrox)>_YqS zW3l5Owc{rM)y2d{9SiJ4CRuM2@sGAs#|I;*gTB-xow@^cUx|NcDIz}hvJD1Mwu}o_ zOxCHvGA^j5Fh)6lLLVxWalwMAOTS?_xD;Qk zc`KZY)>Fq1-$vW06NNcttV#BQ9WF(iS=&MQ6)K{R*@b_!SM~_pgv#&}hDVok-lUEd z&PAQ<9Y5TK_HsUt!l5%*x74@6MW~FJ18^tG#E!yY732cj1{+W}^W}$I(Gv0*frH#! zQz*AWH!6@k!;Pquwqe-+N^(oN1zv(e*dDkNg=rgte?uP1%`=W+C;e>E<|aR2jEUrFY&`+vse#uo`DT0oqGvCJgJIxh;4@p(R{g2gFBI# zd5OYd)$~i=Y_I{PlV?BNiuO?_0&n*aGv|R2th$OhnvEYgp@uwT``~G{Twkc;gwJ_t z%YCV(j-1TqoKQy$@SHiUL#Yql^~6AV5Z>Q_P1^|EdNq3l+kA~q-Gn^V)PdikHtyvt zb9Jf-bySjbc*Z=|Epu&$&1lgb#0e)}%Rchb7d-JgayXGXa1F|&P8c5VV=rOb;9F=9 z{?+w5H3@Cvyy1b*qv6wu4Gz75^&{sTxC#}F#1A~@M)oJ;b;7NvQtruN?R@S@7)tj)BiK=R+1;!$Y#)3THFGZ)h5p5yM+%4;R^G$fIG?`YH)uPy zt&oPX3`d>H8H=;wH4lkcJN*-0LLxIma)K%XgBj4hDSHEuFj!8ycuO+2cWqHKT-~F zMoXj|>Q~SQW3<4V(C#sm!=bI@?QG@({thk0j=~XboNrkJcIZcyvS;BQl*wLDD|PC8 zw3$8Pgv-$o)<6iVRh(NI7%!|uOIhcB7)Hgc+X%F*#uv5~-iXqu6M)(6< zn?Ve4;9Bl!*k3mIAX?8F3&DZwSlg^CE4&$XF-HLyL5<`s3daW7UyR)e1IQwC3X2{l zrfPBvUql7i5m@;M>unq{!{<=9x^2b;| z^c#Thq0DUR!=aC}2eEB%5z4@S0G{4K-ej-AJ!l8E+Ne`A(R%iUAJ#v?b%7W{Fz-qF zCWjvQ8OkVPemCjVu}@LQ$#~)APvfT;pD^$Y=M8cjfsqj9)2RQfPR&3$+}rrz=g)DU zgHQYO%sbkI9e}^t%ve~%5jbWGxuDz$+ff)h1kZYb7^vff$9A&jC1&{PR_0XBpD(c% z&>qGWg!_=nW1YOLQx|UII!OHhEPR#q%2-rbryOYaEMkN2qs6QN%WIsYkdHMPgo9ou zR_fT`vna%PqwuOXs6+h#?7v;7oU8{cydQ1G4#8n>GIz|89d1O^SQ`;I?k)BO{ylIf zvQS68&28Ed5>!j+D#t9@Tm8h z57w9!)}ng$njgLsVO`?W`Ujo*8f8%5`T^IC|02&^vwR=v)JLd*T&XUdx(-=t7$dy$ z6V@kfBhVD3jm*Vgb?O-uVy+|b{m)nf#Af-Na}nqj+*Ia8ixk72OU*L$p5i@@5a3|^_2K6;LKwh@Y2Kes*v1<;9g{< zFY^(4)rp#AzWAPxnP`4BV~4MzjO&OEo|I1C#9)J7r1w(?zK_Zzwxh@a+J>J1{09n< zbIZ^4YS%G(sbkSA2inA%@xec#9Q>P4pgsx_ zn-9K=^!QgN>eXnpN%96?M->;56S(>$y~<*3M4)|$UOBzY7u<%jrceitKbiRP=2urgkk?Y)*>-m;FYKn+XtUPdh!#7J4Wf1i9A?F>(%{Z7-J3nj@7FLC`fq#euNsa z)%mQe0==5Xda#evtJhF5xl$Jp8(Mr7bA6#+O+`zo?|~bT7ds4JSd z_<@#bdbJt$+uIc?>d3qvUV63U@%25Up^ zXJ81WUrssPGLwDkCWcDR3A4xpF*xDKD*9k7KKMMEM$8d-QZ@Ss+Xin$(;Va$ekkSG z%EMkj)28AFE=L~h5Y$~o{H4qhEJelGKKMMEb{YQRNj22Rw!sFpoxc2VE9#OM;GkN@ zNMBayMrOwAgBzuszQVA-mvXMZ7I+ETO!1I9f5=DsZU>4=tkMt zKKMM!k}<-Q8rbjHHh3e-l03r?rCjoSHF-u^l4rOa6-b_;?i%*Ko;}ODQa7+KQAP=MZq%y?va&uc^I2<1xyZ>)@Mg+cpEkH^0p|klz0Hk! zbsH+;{wfH^EYvF>K0Q#~!ubcERv1G0_>4l|t*mo=2BB>c<@of#t*E$yJix-+Xu~@9 z!1ZW5;|;^~+ZhkG6?)Nj#_ktNId&9g-NBwEw|2M~g|UNhFWN5a%1^wg3)=(Nqxs?= zrr*i=Q~X0OnlJw0b}1MCFzYVzCjQ}K_@S)@mZ2rsKDZgRV@F`-Z}5q2gN6)+90!rxUgz3$caZ z(xqJcS$h$<;Iqa_>m!t7hv2~Vb~Cr6wl=NyTq$+-op4U}^Z zvA`14h94h%77doqeBcQk%+aO92Cql@a`FKGAmvx!bE976p)hToa3$K#^*03jKf%2j zaay1oE#_M3gIm!wuIUkY#FOOnZ0f+N$cycPkD*=6MHn8niM@OsIe~N0aMp$&?m}T= zh{Bwwu(>a?!=tVdf{; z%(V?JLEB`_K+~TnXDk+2k0Q*qAAW?&STkx5YZdwMT69^`ywg-g&b z@)Lru?8Rm-EMMr=&8QPweaUqS6?1NJ!gf@N9fWJT84Gy}!hd{C%oB*`?~HvPxgu}j zZ|L`1&IuQ?-uS+jcTtGX7NYRf6oYEVw!wMGgYAdEL-VmC@Yqy?T7qqb9+XA=KAk}Y zks@Z{H%5-}8G^-RP(HM026fU`QS89c2K97?LFuXEKgOVb{&R!sq}&3h9!m_&ofF>5_o#L- zzkYb<3FL%wb&^3jPNp2&4;TM}F=JaY4eA%e7&~_Om(2Ak24%vhc{puRJ@aKg)u8T0 zQS1Or9l4XTUlkvf+$lyH&{icyy=G_MGM(eR7 zu=a9t$3C)OVNicTo3K3&gL)K&=u0^n7iy$0KU5{y^dO@S!^fFyOw&?_rc#^$Nr(*<};}N^I1RG>L!C~xS75rHn?d4W5iaC z24!7nP`jmH7`%nPB+gs$k9OeG4tg71-tn4eD7m7dr|I1GK>o!f#LpeVLaTR1MlkxgUOt=1X}KdlzlSzh${WjYsV= zzwmVw!j8ff&5R2>0&i~N{6O0v+=rZu-MoTwG{Suo6UV(C+Vz0rqX#LZ~2LFND9%GC_gIb7& z(^nAw8RZazdf1>|L%V2ee#D^MsE9f~c-*6mlX5%kLQ#C0*W(XWJVOl7`4}?&UGk2c@)-cz&~*YVl*hblw%L?pd6nzxETeg6NUDT>~Y5HfzKja2RVV4J;AtW z>w|wodde+Nl7BRqG5X-7XBgK;Vh(Z6dzQR07CT&syg_1s-=N{r_Bqbm$VA%^)ICpq zDTmdlUd9FYAwTh0HXGC>C`z0jxDpjnKLi`LkQ3}6JpKjtBtC8M6SPR?=ta(l$WJ`h zPJ{XbD#O2dt3i!J+wkv%_oH2`lOX&UWwIXBO9pigicrT6gGi5`Ff4l+o4N4ADC(5_ zZ)5GC3@L}l|BkhdZHGZrBy$I?uaG0j72JTL#1n?rSBU}J4mY4h_zXj982`+d9d1B2 z@dF3HMq6UG!WoDU#gz|kLj|ni2ps-8aT31`&Ozza@xxtc8g-&D=MCbNF~Vk4Pu@Z> zZ96eg-vYhJPCR}%^-a!em;VudfDz4(d3VQ+Kokhy>jXuY(BTTwCP5jbcE zKIzK}-Do|w4{k)esS}3%cXH0fw!lk}jr@DyN@OAa5d0gem;ArOoTA0lcf$LTpIimu z$Ecff^?T+NHOsufg{YG90Njbf*ikra7h{(_0vph9>igkV6rel;o$um@bAk_UL~~_r zz?JXO_95!P5$|)(Y^N`{9C@%quwR5Z!nVL#l<^4u;fF|%t^Qz8=c8S$LnnL`4PJ|X zc+v;t9oq&ULOE;j36K1cTv2X?cc6UiARM%tYaDyf1{a`4*^jXQADKJaTH*aDUHrh& z|HZY2*gWu6WG99wJo_X1!nVW5(5?rF2VU02_3l3M0K+J{g!=H3k2!BM79ac=HDjAU z;l2e8#}2_G|3n^T4Z}OoHp+u=$R4zUzTk4Po2d`~hV=L2=Tn24fI`d34}27DTS`1| z;-9&mt)^f2J__PT{e^i%UdjXTL$p-Nql_2%Y3qbfAbkKo(EL~Sh|Cdmq9|kcz>iTx zV)%^QpblvZ186Tf48kaCBme4i)+|z#+o2x~r+xtLLz@|wWiS4bpRs#j5EYV>5L91q z&p@1J=tdFR`rz}ZgS8idmM>|~xU6s?+ClvQ{0LcyUwvgzr*)GbV(`IF&>q%+`ETrF z6rnr-&0o_WW3<9k|IRvTB_7y;e2gUwKitQdsc-#;wTvn$_rd2;5T6lf`3L7m@dJN%?tvT7BFe+?ah*}^C09{+ zuHL8`S$lTajP_uMV7`IxS7#l1;Jc^{TN#b&vVKN2SJoap(!}#9u&wZZltr#Wa9Drh z5ub1YT8bTj!2x`4{%`Peh*6o-jH-*dbHXjCxrwpElMgkj3hLP4<%jWn4eTJik>|5i zuvSCRVm9(Q9ChGHha1&!+B)I9BaEs8I}D#qH>&N}wxf*d*q<5I5d1jd$fNmQ_!e>w z3o{rCO< zV4fL)PaAANMc97071fi^2pn{*QLV?e!fQ|twjcf;*|DQ=*l|YX#itE6phj#z+=?pj z8G(b2XDrxO=thfZ>w_Cn06Pr(Ta2m`+X62^yRbd*QDm2M5j^q)=32%MYtb~u=!b70 zkBl9TIFV;R(AEwgK$+M<*o|!D(|nRq6(bAvJE_@__AwhF=+#@3+JcgQyKV z439jE`NEGC)}nUt3AdwtGA@{PHtUky+TmiE|&=l7Hwy+c;19;8Q4r`3*yJ z4r`Ti3%mqHB_7y;a>NhJ7)h=q9$4{f`XaX>_VdL?S?T25ZOwOg23G5r>XJ7l_f1$b9>LR1cLlI(d z!j;HM3?bOxPTbfQ=tcpV7q}I9xkg0bu!~tMtVtWZ2@U5SECBZ)8@8HAY^YJrSFjyb zkhc&_o5Zs{Q>O|qG zQyB|&Y;YAyr#uXQRZOmyu|DDTm$3H8PZ-{GDQ%gr5X`uY+!C`DHln4(7J%JoF0q-X z5j!fR+y~!A8I(ui`IqC9n4RzmG@Ka1aLN_rlQ@0w4-TUmObj-sQH?9%d?<4SP1Bhd z%B}Dzw43@7IHrs^qO=P-hsTt z7KBmc zvyJM$di-Ep8jR{=)Ft-S*k}m#E!S|ZpUZq6b*ikrYKKl#X3131Tv<=_H@tZk^NLzS0vSWMTZKxPK z0N+G@>?nM80s9kMHFCa19&8JI5;>&~{KrDpAGZA#))Mkzn{PF$=TM{6ff=`vBWw>` zjiT5g_;=JT^=~H@6v1}F0P4aH!*5Vn>fAx@Q2^TxSEDwm1B?7z3$T6gUKGR*z%NiI zw)sw@`UUF1w!%So8C3|o=X28J8EW^U$g`#xAHeR$?)h9ed1l-Rce6$*7oLHJWA}VU zThC{>UC;5vbKitJ(0u9(-$hHYg;5m57M3pNUJE-62i`+p&yjOD8l_>|;Vozgb^tE9 zmvw?2feY><9_$c2dI7iw%mE+YWuG3)>G{P!u}|5Bn|o$F{;N&<<=5ya`35 zKHP}{*ircDgXBl*Kg8NYW!MooFu?e+Ezp75us!fIR3zog7#Es`?T62!LhLY{+QizH z@xqsvvp29U%|`VgD#Q-KFIpHQwtWS$phhW&pCBK$YBj2}&?cz^-Doqm2ezZ_QXhVa zc4M2{ILD%G*iLva(r+dw@I$nh@+dT|_>-A3>Y3)q2kJk29y(<_$)EKbiRw zKkx&zTl{P^s$8@W+x!G`@)T=^`o5=GS7;A*5I*+|xez}g_B+~#ZG~fy{snRlTTmKy z&*z)Tv(Jurmi$mIJQn3(_k50-JmaheIVl&;L-p7J_$pe29f2o5Z&aZdi47VyGnd%H z#IwM9J}XR~Blf`-&VAGoeu65ng`c6h*uq0zV9eM-_}GhFPqBMG=d9;*(Bye&-@MEo zBp%^q+t^ds!mH3;Y-^Z(`a1S_^00?{NVEf=k$pVz;TzWTTyhArP~{ZPA+QYjZ(?o3 z#ZrDfV~4xZwnfDA57ru5dOLZB&1l=LtShMhmUVI)>j%p7y>?w=icy~NwFg@$&-vPi zEtF?^r4fTrp7%8vTPV-?vSJI*K>64{xEAfZnZDqkQQ-pON$ICfLphDa537(D+XvU8 zX;L5l8MR}pRO+Lpw6(!1v?K$KM zE)jbMZQsPPhQ& z+c>|$4JfC8alwz!_OYB#;LnZtsiG~s3=JR0dVmX24t4-;LHcu94^W=jw*D$pjPl&J z&DcVDcH4Grp*+8BH?~lo;ns~Ud=sVBFxRGjY699@M}2rZnu{HPFQTQB=?i{=n(0?~ zOn>^tw!#Nd<``3qyRdE8<^law7V54v#dsOEX%=IFH=qn`;Yu_dTeut9uq}u5Q)5uk zbk1+E4pm;t{K6JwXD)*9O)0;^q#|&58sjZtPT?Z7=Mv%%7nuqdbpq2ewe2$=8J~l;`qwV+-Zke5OL40}1m{2DT42qju~d+>Z3)i3j!@*iQ}N z{~v{?pe$?~EJM>KuzuiTv>rPEUqnMH$TR#3)w@kG9%t^S8nK0A&=PE6C2GeOwxUk# z2<&$_@sFZkcpB=)7EVT{(WV&ZVrO6rm!nK<;Y%nR+k6D^BGXLf4qk>bu!T3EOl;vw zl#MM6qatkKSIC2HJ(4ms?bL@yXOL??XS2Y3v}p}(p%>*4zYo5QhVb4$0{ac3eiJ!_XQRQ(nRhq? z&E-9^@Mp&`7Hr{7s2N+>jy7SNe@O|Hpj0^hFG;E8NHG>Ly zKjncpAshGq$)98fk{L*5Aen(=29g;_W+0h?WCs4PWMJuy{bNIE)L5_aN{z)D$7;;h zxK`tTIuBRe5Rb1)#>c-+UOEtzV558bgio^0^w%()iheczIA`mBwFceDCJ? z@g|K0+W5+~*BKi1iSgeQuV1fmh{o>u@$$_YS7@BC@z2`+9iY7)qOm~Zbd5iCp8nJA zU-=K8hs>J))cvoMxHMVK&(D;(Z-5QN|#oL{z@z)xsXe`rswZ{1x{Td(CxJu&-8sF0RUmEMR z{;D*VX}mzARpW6QkI?v~KOWy6jUQ-yUE^krPiPEkT%qwd8vPm@HD0T6w#G`0(>3O6 zJXfPt<1aKGr!iIIp2U1>aVO^Ge>!(G#Pch0?&X>r@bp*3*B&Sv&VIDi^;g+F>V;&F zQm=d7fqEZM7V`F2(Q6Kr{f52JQA2qTfA5f|M*JBa2VVEgS@OOqo|oi( zQ#=pJ`=)pvlJ`x0pD%izJN_rw$@`}GJSFd&;(18kH^uYtzx}>xjT&9!D)GAV-8HUK zZ*@&W9$)R8dcMnBSW@d9Q&Ur2qtp{xow4ppSDq@;Pjr=(iLKOM4O45}URUhJb!v2F zb*-zQq^gWVeri>^cxe3iIK)co@15h`El*_ znAxr>?^J#%P&dBBGsW$ib5VJ$k9!Q0t7aWk@^ZpMiMz74vf7)c$|U;n+RJe~wOu{g zBYymOh=9JjbQgJCRpRzQnOWM7uB)k`dwWfFsjIejT$#FX%)|*}3P+rIT3KbKQs1gE zRdutbx~s~n=hX5YeYA+bD5@ZnWe1w6$&hoOVEX`1~o1ADwcR&j;YU6 zGo>V-lzClKN-FEf^BgG|TUl3IAuZ<1D+ySuf2X{@xXxA65UVaO)G{fXFTrCK<4#&?euU#ePCavk}u>2)(4vq)gc3|GAAC3(g6F{2z)t>b8ZcWSPq zczQ{hqolI3x^#a9THh;2DqU4GycG_YEWrH-X`L@U-zPPy>%5NYaz{-`)xrK_HO@}S z%^l?~v*Eg=QtMtKcU(vZ>RsYv)H5opr^kAiDm`nC&a;onn<7JV&+^#LIMXI$O3f{) zoKw!_+Ot*)AFE3GbbmCp7$rnANqsTq~$m_XfBeXhI8mODhNV$08;>=-}2*2^~Y z+H40Z7vzn}>v=@RcLrrbBFG;Rv-4sjI!~X=i2uD#PdDV&Rn=Cw%l~_R^R!@N0d9=v zw6x@3`I^KeFgV6IrM#q+glL&R(+7F$t1O+ zq{iW`;bc;4%a7+W{_i+hnPh*VtjizScCyyCQa zAG>D6Ph~%-t;ES?X9`!n*mcLF%Pp6Ckp0R1v0hkb$MnpW`#+nl8+&H!2lbW6*0r&7 z|Ne3Qpth2&0!CO!rd_TBr}`h&SUt)<9P6&;<}Q9EyF||alO67Ax#r1bF~1;o$Mr62 zy`p-~tdgpRAARZ>Po$0uv5I3%emjFh`od2eb>oa4BiHh%i-poj6;jTQON>R>a>J+Zf3_< zm(^9q-iS>gf~nj=X+7^h7Jp+lmA`P%jucjxloh(C*Ob)o4rHpDGJ4|V2}R?^kJ+EY z*(vloo2bhio)Q_D*F{uw`Y7e5SmIMR>dSeX!I#bJXT|QU`C4)VH*a!_uijU3J6~0; zRDOzs^{3s}IauW7t{R625BRTDm*~q&<&C6L75ehnxko9tzMK}N>dF{B)wOD#zMQpJ zsv7m>%%hZ8QXH7BneMZ)_;T0sIr7F-sbdWso=qR>QbQeY6=+a*>Nx3nrNZm}@<7PZke-u&q^Cb~S;HS!)cPv@9ZQd{e)VMcyM zZcAjo*}IPNx~ft&jS|+EyP9>y+N*NRF89sgt!vnwj=>*@qQIr_5 z_Q?bPrKKBJtG%eM8Ox_T#A>f`)ymWjOCdB@O|P>M@8)%du9Dfk&rW=mM@szTgWe6k z)e~v#V;ZGa@L3PLOnbGduTOe7&CQB^E)zRVB~C@ES;{2Tys|O^B->XKd+f7=8GIn2 z#k@soP4bqIMvr`;Ggam5CziNtUHkK=)OOwYx=OEmRD;)5R6W&Q<{HiWM81(EVHQ>I zKd!9$*as(eS50|!4Oi1rX0lGQqSAY0IR0@CAOEO#WBoUa_^~pDs^s2?X1&gpE1hmYbKwAYl>xUQr>LZOU~&B#gudU{=v~a=k!G0c=6ro zNR}is@c(xP?0hc<889!iG}&8B?FH?P?Vat}YwFi@t?6D(QAohwbN>Q{BF>Ry$-x_))X z>h9Iq?e%!>j(P4_)43*lZR6S{Yuna#tnFO8V{O-3<>{yRXigObb_BWt-GL>`GMb8; z0!@@{z ziq}-oL+4u4y5e;e>+07vu3I8w@bNt#U`Zf*S^ct(W!=lNn+oWqyQyG#@$$~)9nGE1 zJMdqzqHRUjip+u9P0SR%WiMSk<Tg}rYHiDIQ(?Y0hWhb-GgnuT&#u*(?G^1E%+rqc`ZYUZGqq%GH>1s1 z*CFGK@I5UcJ5UfP4pao{1NE_3>YGf&SX0c5n${JN?M|XFsUf&C z5rdzcbObsBZRDi5X-QLH`HtmXk`puE@k1SZb8&NHi@zn<($NxX>1v6#bhi|*aIUCW z;UPBPitIHu=G4xtQrTjP-J_V6S(arkThbh09KmMFt?}~Uve2^dvdA)Xi>1ZdVrx+m zlNv6E1K9yvfbu3=lfNn2WLxfE9$9W~wl({kBh99k>=r78`l~dc0_K1q`IF2*G6TsB SBr}lAKr#c#4E$fr!2bgqhX7Cj diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPluginD.dll.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPluginD.dll.meta deleted file mode 100644 index 5ebb55f..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPluginD.dll.meta +++ /dev/null @@ -1,76 +0,0 @@ -fileFormatVersion: 2 -guid: 0486b2cee0559e943b52491a86dc35b8 -timeCreated: 1490168675 -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: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 0 - Exclude iOS: 1 - Editor: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - 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 - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 1 - settings: - CPU: AnyCPU - iOS: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs deleted file mode 100644 index cb36acc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs +++ /dev/null @@ -1,423 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -namespace UltraControls -{ - [ExecuteInEditMode] - public class Handler : MonoBehaviour - { - public static uint InvalidHandle = 0; - - public static bool is_singleton_lived - { - get { return s_instance != null; } - } - - public static Handler singleton - { - get - { - if (s_instance != null) - { - return s_instance; - } - - - s_instance = GameObject.FindObjectOfType(); - if (s_instance != null) - { - return s_instance; - } - - GameObject obj = new GameObject("UltraControls::Handler"); - obj.hideFlags = HideFlags.DontSave; - s_instance = obj.AddComponent(); - - return s_instance; - } - } - - void Awake() - { - //Debug.Log("UltraControls.Handler.Awake()"); - - if (s_instance != null && s_instance != this) - { -#if UNITY_EDITOR - DestroyImmediate(this.gameObject); -#else - Destroy(this.gameObject); -#endif - return; - } - - s_instance = this; - if (Application.isPlaying) - { - DontDestroyOnLoad(this); - } - } - - void OnEnable() - { - //Debug.Log("UltraControls.Handler.OnEnable()"); - - if (m_is_enable) - { - return; - } - - NativeLib.Init(); - m_map_info = new Dictionary(); - m_is_enable = true; - } - - void Start() - { - //Debug.Log("UltraControls.Handler.Start()"); - } - - void Update() - { - - } - - void OnDisable() - { - //Debug.Log("UltraControls.Handler.OnDisable()"); - - m_is_enable = false; - s_instance = null; - NativeLib.Term(); - } - - public bool IsExisted(uint handle) - { - if (!m_is_enable) - return false; - - return m_map_info.ContainsKey(handle); - } - - public uint Create(string name, uint max_ctrls) - { - if (!m_is_enable) - return InvalidHandle; - - uint handle; - int ret = NativeLib.CreateHandle(name, max_ctrls, out handle); - if (ret < 0) - { - return InvalidHandle; - } - - UltraInfo info; - if (ret == 1 && m_map_info.TryGetValue(handle, out info)) - { - ++info.ref_count; - return handle; - } - - info = new UltraInfo(); - info.raw_ctrls = Utils.AllocAryRawCtrl(max_ctrls); - info.ref_count = 1; - m_map_info.Add(handle, info); - return handle; - } - - public void Destroy(uint handle) - { - if (!m_is_enable) - return; - - if (handle == InvalidHandle) - { - return; - } - - UltraInfo info; - if (m_map_info.TryGetValue(handle, out info)) - { - if (--info.ref_count > 0) - { - return; - } - - if (info.controls != null) - { - foreach (Control ctrl in info.controls) - { - ctrl.Die(); - } - } - - m_map_info.Remove(handle); - NativeLib.DestroyHandle(handle); - } - } - - - public Control[] FindGetter(uint handle) - { - if (!m_is_enable) - return null; - - UltraInfo info; - if (!m_map_info.TryGetValue(handle, out info)) - { - return null; - } - - if (info.controls != null) - { - return info.controls; - } - - uint count = 0; - int ret = NativeLib.FindGetter(handle, info.raw_ctrls, (uint)info.raw_ctrls.Length, out count); - if (ret != 1) - { - return null; - } - - info.controls = new Control[count]; - - for (uint i = 0; i < count; ++i) - { - info.controls[i] = new Control(ref info.raw_ctrls[i]); - } - - return info.controls; - } - - public void SetControls(uint handle) - { - if (!m_is_enable) - return; - - UltraInfo info; - if (!m_map_info.TryGetValue(handle, out info)) - { - return; - } - - if (info.controls == null) - { - return; - } - - for (uint i = 0; i < info.controls.Length; ++i) - { - Control ctrl = info.controls[i]; - if (ctrl.isDirty) - { - info.is_dirty = true; - info.raw_ctrls[i].data = ctrl.data; - } - } - - if (!info.is_dirty) - { - return; - } - - info.is_internal_dirty = true; - int ret = NativeLib.SetControls(handle, info.raw_ctrls, (uint)info.raw_ctrls.Length); - if (ret == 1) - { - info.is_dirty = false; - } - } - - public Control[] SetupGetter(uint handle, List list) - { - if (!m_is_enable) - return null; - - UltraInfo info; - if (!m_map_info.TryGetValue(handle, out info)) - { - return null; - } - - int max_count = System.Math.Min(list.Count, info.raw_ctrls.Length); - uint ok_count = 0; - - for (int i = 0; i < max_count; ++i) - { - bool yes = mf_SetupRawCtrl(list[i], ref info.raw_ctrls[ok_count]); - if (!yes) - { - continue; - } - - ++ok_count; - } - - int ret = NativeLib.CreateGetter(handle, info.raw_ctrls, ok_count); - if (ret < 0) - { - return null; - } - - info.controls = new Control[ok_count]; - - for (uint i = 0; i < ok_count; ++i) - { - info.controls[i] = new Control(ref info.raw_ctrls[i]); - } - - return info.controls; - } - - public bool CheckControls(uint handle) - { - if (!m_is_enable) - return false; - - UltraInfo info; - if (!m_map_info.TryGetValue(handle, out info)) - { - return false; - } - - if (info.controls == null) - { - return false; - } - - if (info.is_internal_dirty) - { - info.is_internal_dirty = false; - return true; - } - - uint count = 0; - int ret = NativeLib.CheckControls(handle, info.raw_ctrls, (uint)info.raw_ctrls.Length, out count); - if (ret <= 0) - { - return false; - } - - count = System.Math.Min(count, (uint)info.controls.Length); - - for (uint i = 0; i < count; ++i) - { - info.controls[i].data = info.raw_ctrls[i].data; - } - - return true; - } - - private class UltraInfo - { - public RawCtrl[] raw_ctrls; - public Control[] controls; - public uint ref_count; - public bool is_dirty; - public bool is_internal_dirty; - } - - //[SerializeField] - private static Handler s_instance; - - private Dictionary m_map_info; - private bool m_is_enable; - - private bool mf_SetupRawCtrl(ControlInfo info, ref RawCtrl raw_ctrl) - { - CtrlType type = CtrlType.Unknown; - if (info.m_type == typeof(string)) - { - type = CtrlType.Text; - System.Array.Clear(raw_ctrl.data, 0, raw_ctrl.data.Length); - byte[] bytes = System.Text.Encoding.ASCII.GetBytes((string)info.m_value_default); - System.Buffer.BlockCopy(bytes, 0, raw_ctrl.data, 0, System.Math.Min(bytes.Length, raw_ctrl.data.Length)); - raw_ctrl.data[raw_ctrl.data.Length - 1] = 0; - } - else if (info.m_type == typeof(Color32)) - { - type = CtrlType.Color; - Utils.SetColor32((Color32)info.m_value_default, raw_ctrl.data);; - } - else - { - CtrlValues values = Utils.AllocCtrlVaules(); - - if (info.m_type == typeof(bool)) - { - type = CtrlType.Bool; - values.val[0] = ((bool)info.m_value_default)? 1.0f: 0.0f; - } - else if (info.m_type == typeof(float)) - { - type = CtrlType.Float; - values.val[0] = (float)info.m_value_default; - if (info.m_has_range) - { - values.min[0] = (float)info.m_value_min; - values.max[0] = (float)info.m_value_max; - } - } - else if (info.m_type == typeof(int)) - { - type = CtrlType.Int; - values.val[0] = (int)info.m_value_default; - if (info.m_has_range) - { - values.min[0] = (int)info.m_value_min; - values.max[0] = (int)info.m_value_max; - } - } - else if (info.m_type == typeof(Vector2)) - { - type = CtrlType.Vec2F; - Utils.SetVec2((Vector2)info.m_value_default, values.val); - if (info.m_has_range) - { - Utils.SetVec2((Vector2)info.m_value_min, values.min); - Utils.SetVec2((Vector2)info.m_value_max, values.max); - } - } - else if (info.m_type == typeof(Vector3)) - { - type = CtrlType.Vec3F; - Utils.SetVec3((Vector3)info.m_value_default, values.val); - if (info.m_has_range) - { - Utils.SetVec3((Vector3)info.m_value_min, values.min); - Utils.SetVec3((Vector3)info.m_value_max, values.max); - } - } - else if (info.m_type == typeof(Vector4)) - { - type = CtrlType.Vec4F; - Utils.SetVec4((Vector4)info.m_value_default, values.val); - if (info.m_has_range) - { - Utils.SetVec4((Vector4)info.m_value_min, values.min); - Utils.SetVec4((Vector4)info.m_value_max, values.max); - } - } - else if (info.m_type == typeof(Color)) - { - type = CtrlType.ColorF; - Utils.SetColor((Color)info.m_value_default, values.val); - } - else - { - return false; - } - - Utils.StructureToBytes(values, raw_ctrl.data); - } - - raw_ctrl.name = info.m_name; - raw_ctrl.type = (uint)type; - return true; - } - - - }//Handler - -}//Namespace UltraControls diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs.meta deleted file mode 100644 index dea649d..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControls.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b53175ac29429e74696f538d423ae2c5 -timeCreated: 1490168672 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs deleted file mode 100644 index 8613684..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs +++ /dev/null @@ -1,37 +0,0 @@ - -[System.AttributeUsage(System.AttributeTargets.All)] -public class UltraControlsAttribute : System.Attribute -{ - public enum BindingFlag - { - Getter, - } - - public UltraControlsAttribute(BindingFlag flag, string ultractrls_name, string ctrl_name) - { - m_flag = flag; - m_ultracontrols_name = ultractrls_name; - m_control_name = ctrl_name; - } - - public UltraControlsAttribute(string ultractrls_name, string ctrl_name) - : this(BindingFlag.Getter, ultractrls_name, ctrl_name) - { - - } - - public UltraControlsAttribute(string ultractrls_name) - : this(BindingFlag.Getter, ultractrls_name, "") - { - - } - - public string ultracontrols_name { get { return m_ultracontrols_name; } } - public string control_name { get { return m_control_name; } } - public BindingFlag binding_flag { get { return m_flag; } } - - private string m_ultracontrols_name; - private string m_control_name; - private BindingFlag m_flag; - -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs.meta deleted file mode 100644 index 0b1556b..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraControlsAttribute.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 08b0b6bdf7bcd5d46bd7a5fca0ea0329 -timeCreated: 1494834955 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs deleted file mode 100644 index 7ac5221..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs +++ /dev/null @@ -1,533 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using System.Reflection; -using System; - -namespace UltraControls -{ - using MapCtrlInfo = Dictionary; - using MapCtrl = Dictionary; - - public class UltraGetter : MonoBehaviour - { - public delegate void OnCompletedSetupGetter(UltraGetter getter); - public event OnCompletedSetupGetter EventComplemtedSetupGetter; - - public bool is_start - { - get { return m_is_started; } - set - { - m_is_started = value; - if (!m_is_started && m_handle != Handler.InvalidHandle) - { - mf_Destroy(); - } - - } - } - - public string ultracontros_name - { - get { return m_name; } - set - { - if (m_is_started && m_handle != Handler.InvalidHandle) - { - mf_Destroy(); - } - - m_name = value; - //m_relative_filepath_settings_default = Path.Combine(Utils.GetRelativeDefaultDir(), mf_PleaseCallMyRealName() + ".json"); - } - } - - public bool AddControlInfo< T > (string name, T val, T min, T max) - { - if (is_start) - { - m_need_restart = true; - } - - if (m_map_ctrl_info.ContainsKey(name)) - { - return false; - } - - m_map_ctrl_info.Add(name, Factroy.CreateInfo(name, val, min, max) ); - return true; - } - - public bool AddControlInfo(string name, T val) - { - if (is_start) - { - m_need_restart = true; - } - - if (m_map_ctrl_info.ContainsKey(name)) - { - return false; - } - - m_map_ctrl_info.Add(name, Factroy.CreateInfo(name, val)); - return true; - } - - public void RemoveControlInfo(string name) - { - if (is_start) - { - m_need_restart = true; - } - - m_map_ctrl_info.Remove(name); - } - - public ParamGetter GetParamGetter(string name) - { - Control ctrl; - if (!m_map_ctrl.TryGetValue(name, out ctrl)) - { - return null; - } - - return ctrl.CreateParamGetter(); - } - - void Start() - { - - } - - void Update() - { - mf_Update(); - } - -#if UNITY_EDITOR - public void UpdateByUltraGetterEditor() - { - mf_Update(); - } - -#endif - //=============================================================== - //Private member or function - //=============================================================== - private uint m_handle = Handler.InvalidHandle; - - [SerializeField] - private string m_name = "UnityGetter"; - - [SerializeField] - private bool m_is_started; - - private bool m_need_restart; - - private MapCtrlInfo m_map_info; - private MapCtrl m_map; - private Control[] m_controls; - private IDelegatable[] m_delegates; - - interface IDelegatable - { - bool Setup(Control[] ctrls); - void Invoke(); - } - - public class DelegateFieldSetValue< T >: IDelegatable - { - public DelegateFieldSetValue(object mono, FieldInfo field, string name) - { - m_method = typeof(FieldInfo).GetMethod("SetValue", new[] { typeof(object), typeof(object) }); - m_instance = field; - m_mono = mono; - m_name = name; - } - - public bool Setup(Control[] ctrls) - { - foreach(Control ctrl in ctrls) - { - if (ctrl.name == m_name) - { - m_param_getter = ctrl.CreateParamGetter< T >(); - return true; - } - } - - return false; - } - - public void Invoke() - { - //m_dele.DynamicInvoke(new object[] { m_mono, m_param_getter.val}); - m_method.Invoke(m_instance, new object[] { m_mono, m_param_getter.val }); - } - - private string m_name; - private MethodInfo m_method; - private object m_instance; - private object m_mono; - private ParamGetter< T > m_param_getter; - } - - private MapCtrlInfo m_map_ctrl_info - { - get - { - if (m_map_info == null) - { - m_map_info = new MapCtrlInfo(); - } - - return m_map_info; - - } - } - - private MapCtrl m_map_ctrl - { - get - { - if (m_map == null) - { - m_map = new MapCtrl(); - } - - return m_map; - } - } - - private bool mf_HasHandle() - { - return m_handle != Handler.InvalidHandle && Handler.singleton.IsExisted(m_handle); - } - - private void mf_Restart() - { - is_start = false; - is_start = true; - - m_need_restart = false; - } - - private void mf_Update() - { - if (m_need_restart) - { - mf_Restart(); - } - - if (!m_is_started) - { - return; - } - - if (!mf_HasHandle()) - { - m_handle = Handler.singleton.Create(m_name, 32); - return; - } - - if (m_controls == null) - { - List lst_info = new List(); - List lst_dele = new List(); - - mf_FindAttribues2(lst_info, lst_dele); - - lst_info.AddRange(m_map_ctrl_info.Values); - - m_controls = Handler.singleton.SetupGetter(m_handle, lst_info); - if (m_controls != null) - { - foreach(IDelegatable dele in lst_dele) - { - if(!dele.Setup(m_controls)) - { - lst_dele.Remove(dele); - } - } - - if (lst_dele.Count > 0) - { - m_delegates = lst_dele.ToArray(); - } - - foreach (Control ctrl in m_controls) - { - m_map_ctrl.Add(ctrl.name, ctrl); - } - - if (EventComplemtedSetupGetter != null) - { - EventComplemtedSetupGetter(this); - } - } - - return; - } - - bool yes = Handler.singleton.CheckControls(m_handle); - if (!yes) - { - return; - } - - if (m_delegates == null) - { - return; - } - - foreach(IDelegatable dele in m_delegates) - { - dele.Invoke(); - } - } - - private void mf_Destroy() - { - if (Handler.is_singleton_lived) - { - Handler.singleton.Destroy(m_handle); - } - - m_handle = Handler.InvalidHandle; - m_controls = null; - m_delegates = null; - - if (m_map != null) - { - m_map.Clear(); - } - } - - /* - private void mf_FindAttribuesFromBehavior(List lst_info, List lst_delegate, object behavior, BindingFlags bingingFlag) - { - foreach (FieldInfo field in (behavior.GetType().GetFields(bingingFlag))) - { - UltraControlsAttribute attr_ultracontrols = null; - RangeAttribute attr_range = null; - - foreach (object attribute in field.GetCustomAttributes(true)) - { - { - var attr = attribute as UltraControlsAttribute; - if (attr != null && attr.binding_flag == UltraControlsAttribute.BindingFlag.Getter) - { - attr_ultracontrols = attr; - continue; - } - } - - { - var attr = attribute as RangeAttribute; - if (attr != null) - { - attr_range = attr; - } - } - - }//attributes - - if (attr_ultracontrols == null) - { - continue; - } - - ControlInfo info = null; - IDelegatable dele = null; - { - string name = (attr_ultracontrols.control_name == "") ? field.Name : attr_ultracontrols.control_name; - if (field.FieldType == typeof(string)) - { - info = Factroy.CreateInfo(name, (string)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(float)) - { - if (attr_range == null) - { - info = Factroy.CreateInfo(name, (float)field.GetValue(behavior)); - } - else - { - info = Factroy.CreateInfo(name, (float)field.GetValue(behavior), attr_range.min, attr_range.max); - } - - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(int)) - { - if (attr_range == null) - { - info = Factroy.CreateInfo(name, (int)field.GetValue(behavior)); - } - else - { - info = Factroy.CreateInfo(name, (int)field.GetValue(behavior), (int)attr_range.min, (int)attr_range.max); - } - - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Vector2)) - { - info = Factroy.CreateInfo(name, (Vector2)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Vector3)) - { - info = Factroy.CreateInfo(name, (Vector3)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Vector4)) - { - info = Factroy.CreateInfo(name, (Vector4)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Color)) - { - info = Factroy.CreateInfo(name, (Color)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Color32)) - { - info = Factroy.CreateInfo(name, (Color32)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - - if (info != null) - { - lst_info.Add(info); - lst_delegate.Add(dele); - } - - } - - }//fields - } - */ - - /* - private void mf_FindAttribuesFromComponent< Component > (List lst_info, List lst_delegate, BindingFlags bingingFlag) - { - var components = gameObject.GetComponentsInChildren< Component >(true); - - foreach (Component component in components) - { - if (component == null) - continue; - - mf_FindAttribuesFromBehavior(lst_info, lst_delegate, component, bingingFlag); - - }//monos - } - */ - - private void mf_FindAttribues2(List lst_info, List lst_delegate) - { - Utils.FindUltraControlsAttribues(this, UltraControlsAttribute.BindingFlag.Getter, - (object sender, object behavior, FieldInfo field, UltraControlsAttribute attr_ultracontrols, RangeAttribute attr_range) => - { - ControlInfo info = null; - IDelegatable dele = null; - { - string name = (attr_ultracontrols.control_name == "") ? field.Name : attr_ultracontrols.control_name; - if (field.FieldType == typeof(string)) - { - info = Factroy.CreateInfo(name, (string)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(float)) - { - if (attr_range == null) - { - info = Factroy.CreateInfo(name, (float)field.GetValue(behavior)); - } - else - { - info = Factroy.CreateInfo(name, (float)field.GetValue(behavior), attr_range.min, attr_range.max); - } - - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(int)) - { - if (attr_range == null) - { - info = Factroy.CreateInfo(name, (int)field.GetValue(behavior)); - } - else - { - info = Factroy.CreateInfo(name, (int)field.GetValue(behavior), (int)attr_range.min, (int)attr_range.max); - } - - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Vector2)) - { - info = Factroy.CreateInfo(name, (Vector2)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Vector3)) - { - info = Factroy.CreateInfo(name, (Vector3)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Vector4)) - { - info = Factroy.CreateInfo(name, (Vector4)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Color)) - { - info = Factroy.CreateInfo(name, (Color)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - else if (field.FieldType == typeof(Color32)) - { - info = Factroy.CreateInfo(name, (Color32)field.GetValue(behavior)); - dele = new DelegateFieldSetValue(behavior, field, name); - } - - if (info != null) - { - lst_info.Add(info); - lst_delegate.Add(dele); - } - } - - }); - - //Utils.FindUltraControlsAttribues< > - } - - /* - private void mf_FindAttribues(List lst_info, List lst_delegate) - { - BindingFlags bingingFlag = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public; - mf_FindAttribuesFromComponent< MonoBehaviour >(lst_info, lst_delegate, bingingFlag); - - var animators = gameObject.GetComponentsInChildren(true); - foreach (Animator animator in animators) - { - if (animator == null) - continue; - - var behaviours = animator.GetBehaviours(); - foreach(StateMachineBehaviour behaviour in behaviours) - { - mf_FindAttribuesFromBehavior(lst_info, lst_delegate, behaviour, bingingFlag); - - }//behaviours - - }//animators - - }// mf_FindAttribues() - */ - } -} - diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs.meta deleted file mode 100644 index d760d6a..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraGetter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a91ed773abd22c44baaa91141e056d45 -timeCreated: 1490168671 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs deleted file mode 100644 index 62df808..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs +++ /dev/null @@ -1,315 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using System; -using System.IO; - -namespace UltraControls -{ - using MapCtrl = Dictionary; - - [ExecuteInEditMode] - [Serializable] - public class UltraSetter : MonoBehaviour/*, ISerializationCallbackReceiver*/ - { - public delegate void OnFoundGetter(UltraSetter sender); - public event OnFoundGetter EventFoundGetter; - - public Control[] controls - { - get - { - return m_controls; - } - } - - public bool is_start - { - get { return m_is_started; } - set - { - m_is_started = value; - if (!m_is_started && m_handle != Handler.InvalidHandle) - { - mf_Destroy(); - } - - } - } - - public string ultracontros_name - { - get { return m_name; } - set - { - if (m_is_started && m_handle != Handler.InvalidHandle) - { - mf_Destroy(); - } - - m_name = value; - m_relative_filepath_settings_default = Path.Combine(Utils.GetRelativeDefaultDir(), mf_PleaseCallMyRealName() + ".json"); - } - } - - public string filepath_settings - { - get - { - if (m_filepath_settings == "") - { - return Path.Combine(Directory.GetParent(Application.dataPath).FullName, m_relative_filepath_settings_default); - } - - return m_filepath_settings; - } - - set - { - m_filepath_settings = value; - } - } - - - //=============================================================== - //MonoBehaviour - //=============================================================== - void Awake() - { - m_map = new MapCtrl(); - } - - void Start() - { - - } - - void Update() - { - mf_Update(); - } - - void OnDisable() - { - mf_Destroy(); - } - - //void OnGUI() - //{ - // Transform trans = gameObject.GetComponent(); - // Camera cam = Camera.current; - // if (cam == null) - // { - // return; - // } - // - // Vector3 pos = cam.WorldToScreenPoint(trans.position); - // GUI.Label(new Rect(pos.x, pos.y, 100, 20), "id=" + m_identifierInFile); - //} - - void OnTransformParentChanged() - { - m_relative_filepath_settings_default = Path.Combine(Utils.GetRelativeDefaultDir(), mf_PleaseCallMyRealName() + ".json"); - } - - //=============================================================== - //ISerializationCallbackReceiver - //=============================================================== - //public void OnBeforeSerialize() - //{ - // - //} - // - //public void OnAfterDeserialize() - //{ - // - //} - - //=============================================================== - //Other - //=============================================================== - - public bool SaveSettings() - { - string json_text = Utils.ToJson(m_controls); - File.WriteAllText(filepath_settings, json_text); - return true; - } - - public bool LoadSettings() - { - if (!File.Exists(filepath_settings)) - { - return false; - } - - var sr = File.OpenText(filepath_settings); - var json = sr.ReadToEnd(); - Utils.FromJson(json, m_controls); - return true; - } - - public ParamSetter< T > GetParamSetter< T > (string name) - { - Control ctrl; - if (!m_map_ctrl.TryGetValue(name, out ctrl)) - { - return null; - } - - return ctrl.CreateParamSetter(); - } - - -#if UNITY_EDITOR - public bool UpdateIdentifierInFile() - { - if (m_identifierInFile > 0) - { - return false; - } - - long identifierInFile = Utils.GetLocalIdentifierInFileForObject(this); - if (identifierInFile != m_identifierInFile) - { - m_identifierInFile = identifierInFile; - if (m_identifierInFile > 0 && m_relative_filepath_settings_default == "") - { - m_relative_filepath_settings_default = Path.Combine(Utils.GetRelativeDefaultDir(), mf_PleaseCallMyRealName() + ".json"); - } - return true; - } - - return false; - } - - public void UpdateByUltraSetterEditor() - { - mf_Update(); - } - -#endif - - //=============================================================== - //Private member or function - //=============================================================== - - private uint m_handle = Handler.InvalidHandle; - private Control[] m_controls; - private MapCtrl m_map; - - [SerializeField] - private string m_name = "ResolumeArena"; - - [SerializeField] - private bool m_is_started = false; - - [SerializeField] - private bool m_auto_load_after_finding_getter = true; - - [SerializeField] - private long m_identifierInFile = -1; - - [SerializeField] - private string m_filepath_settings = ""; - - [SerializeField] - private string m_relative_filepath_settings_default = ""; - - private string mf_PleaseCallMyRealName() - { - string real_name = "UltraSetter"; - - Transform trans = this.transform; - - while (trans != null) - { - real_name = trans.gameObject.name + "-" + real_name; - trans = trans.parent; - } - - real_name = "[" + m_name + "]" + real_name; - if (m_identifierInFile >= 0) - { - real_name += "-" + m_identifierInFile; - } - return real_name; - } - - private bool mf_HasHandle() - { - return m_handle != Handler.InvalidHandle && Handler.singleton.IsExisted(m_handle); - } - - private void mf_Destroy() - { - if (Handler.is_singleton_lived) - { - Handler.singleton.Destroy(m_handle); - } - - m_handle = Handler.InvalidHandle; - m_controls = null; - - if (m_map != null) - { - m_map.Clear(); - } - } - - private MapCtrl m_map_ctrl - { - get - { - if (m_map == null) - { - m_map = new MapCtrl(); - } - - return m_map; - } - } - - private void mf_Update() - { - if (!m_is_started) - { - return; - } - - if (!mf_HasHandle()) - { - m_handle = Handler.singleton.Create(m_name, 32); - return; - } - - if (m_controls == null) - { - m_controls = Handler.singleton.FindGetter(m_handle); - if (m_controls != null) - { - if (m_auto_load_after_finding_getter) - { - LoadSettings(); - } - - foreach(Control ctrl in m_controls) - { - m_map_ctrl.Add(ctrl.name, ctrl); - } - - if (EventFoundGetter != null) - { - EventFoundGetter(this); - } - } - - return; - } - - Handler.singleton.SetControls(m_handle); - } - } -} - - - diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs.meta deleted file mode 100644 index ea99aa9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraSetter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6abc65dc40f983043b48a65131b2df8c -timeCreated: 1490168671 -licenseType: Free -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs deleted file mode 100644 index c317099..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs +++ /dev/null @@ -1,603 +0,0 @@ -#define UNITY_5_PLUS -#if UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 -#undef UNITY_5_PLUS -#endif - -using System; -using System.Runtime.InteropServices; -//using UnityEditor; -using System.Reflection; -using UnityEngine; -using System.Collections.Generic; -using Newtonsoft.Json; - -namespace UltraControls -{ - public class JsonVector2 - { - public CtrlType type; - public float x; - public float y; - - public JsonVector2(Vector2 vec2) - { - x = vec2.x; - y = vec2.y; - type = CtrlType.Vec2F; - } - - public Vector2 To() - { - return new Vector2(x, y); - } - } - - public class JsonVector3 - { - public CtrlType type; - public float x; - public float y; - public float z; - - public JsonVector3(Vector3 vec3) - { - x = vec3.x; - y = vec3.y; - z = vec3.z; - type = CtrlType.Vec3F; - } - - public Vector3 To() - { - return new Vector3(x, y, z); - } - } - - public class JsonVector4 - { - public CtrlType type; - public float x; - public float y; - public float z; - public float w; - - public JsonVector4(Vector4 vec4) - { - x = vec4.x; - y = vec4.y; - z = vec4.z; - w = vec4.w; - type = CtrlType.Vec4F; - } - - public Vector4 To() - { - return new Vector4(x, y, z, w); - } - } - - public class JsonColor - { - public CtrlType type; - public float r; - public float g; - public float b; - public float a; - - public JsonColor(Color color) - { - r = color.r; - g = color.g; - b = color.b; - a = color.a; - type = CtrlType.ColorF; - } - - public Color To() - { - return new Color(r, g, b, a); - } - } - - public class JsonColor32 - { - public CtrlType type; - public byte r; - public byte g; - public byte b; - public byte a; - - public JsonColor32(Color32 color) - { - r = color.r; - g = color.g; - b = color.b; - a = color.a; - type = CtrlType.Color; - } - - public Color32 To() - { - return new Color32(r, g, b, a); - } - } - - public sealed class Utils - { - public static string ToJson(Control[] controls) - { - if (controls == null) - { - return ""; - } - - var values = new Dictionary(); - - foreach (Control ctrl in controls) - { - switch (ctrl.ctrlType) - { - case CtrlType.Bool: - values[ctrl.name] = ctrl.valBool; - break; - - case CtrlType.Text: - values[ctrl.name] = ctrl.text; - break; - - case CtrlType.Float: - values[ctrl.name] = ctrl.valFloat; - break; - - case CtrlType.Int: - values[ctrl.name] = ctrl.valInt; - break; - - case CtrlType.Vec2F: - values[ctrl.name] = new JsonVector2(ctrl.valVector2); - break; - - case CtrlType.Vec3F: - values[ctrl.name] = new JsonVector3(ctrl.valVector3); - break; - - case CtrlType.Vec4F: - values[ctrl.name] = new JsonVector4(ctrl.valVector4); - break; - - case CtrlType.ColorF: - values[ctrl.name] = new JsonColor(ctrl.valColor); - break; - - case CtrlType.Color: - values[ctrl.name] = new JsonColor32(ctrl.valColor32); - break; - - default: - break; - } - } - - // save preset setting - return JsonConvert.SerializeObject(values, Formatting.Indented); - } - - public static void FromJson(string in_str_json, Control[] out_controls) - { - if (out_controls == null) - { - return; - } - - JsonSerializerSettings setting = new JsonSerializerSettings(); - setting.MissingMemberHandling = MissingMemberHandling.Ignore; - setting.DefaultValueHandling = DefaultValueHandling.Include; - setting.NullValueHandling = NullValueHandling.Ignore; - var res = JsonConvert.DeserializeObject< Dictionary >(in_str_json, setting); - - foreach (Control ctrl in out_controls) - { - object obj; - if (res.TryGetValue(ctrl.name, out obj)) - { - Type type = obj.GetType(); - - if (type == typeof(string) && ctrl.IsString()) - { - ctrl.text = (string)obj; - } - else if (ctrl.IsValue()) - { - if (type == typeof(bool)) - { - ctrl.valBool = (bool)obj; - } - else if (type == typeof(Double)) - { - ctrl.valFloat = Convert.ToSingle((Double)obj); - } - else if (type == typeof(float)) - { - ctrl.valFloat = (float)obj; - } - else if (type == typeof(Int64)) - { - ctrl.valInt = Convert.ToInt32((Int64)obj); - } - else if (type == typeof(int)) - { - ctrl.valInt = (int)obj; - } - else if (type == typeof(Newtonsoft.Json.Linq.JObject)) - { - Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)obj; - Newtonsoft.Json.Linq.JToken token = jobj.GetValue("type"); - if (token == null) - { - continue; - } - - CtrlType jobj_type = (CtrlType)(int)token; - if (jobj_type != ctrl.ctrlType) - { - continue; - } - - switch (ctrl.ctrlType) - { - case CtrlType.Vec2F: - { - JsonVector2 json_vec2 = JsonConvert.DeserializeObject(obj.ToString()); - if (json_vec2 == null) - { - continue; - } - - ctrl.valVector2 = json_vec2.To(); - } - break; - - case CtrlType.Vec3F: - { - JsonVector3 json_vec3 = JsonConvert.DeserializeObject(obj.ToString()); - if (json_vec3 == null) - { - continue; - } - - ctrl.valVector3 = json_vec3.To(); - } - break; - - case CtrlType.Vec4F: - { - JsonVector4 json_vec4 = JsonConvert.DeserializeObject(obj.ToString()); - if (json_vec4 == null) - { - continue; - } - - ctrl.valVector2 = json_vec4.To(); - } - break; - - case CtrlType.ColorF: - { - JsonColor json_color = JsonConvert.DeserializeObject(obj.ToString()); - if (json_color == null) - { - continue; - } - - ctrl.valColor = json_color.To(); - } - break; - - case CtrlType.Color: - { - JsonColor32 json_color32 = JsonConvert.DeserializeObject(obj.ToString()); - if (json_color32 == null) - { - continue; - } - - ctrl.valColor32 = json_color32.To(); - } - break; - - default: - continue; - } - } - } - } - } - } - - public static string GetRelativeDefaultDir() - { - string dir = "settings-ultracontrols/"; - System.IO.DirectoryInfo root_dir = System.IO.Directory.GetParent(Application.dataPath); - string path = System.IO.Path.Combine(root_dir.FullName, dir); - System.IO.DirectoryInfo default_dir = new System.IO.DirectoryInfo(path); - if (!default_dir.Exists) - { - default_dir.Create(); - } - return dir; - } - - public static T BytesToStructure(byte[] bytes) where T : class - { - GCHandle handle = GCHandle.Alloc(bytes, System.Runtime.InteropServices.GCHandleType.Pinned); - T obj = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T)); - handle.Free(); - return obj; - } - - public static void StructureToBytes(T obj, byte[] bytes) where T : class - { - //GCHandle handle = GCHandle.Alloc(bytes, System.Runtime.InteropServices.GCHandleType.Pinned); - int size = Marshal.SizeOf(obj); - IntPtr ptr = Marshal.AllocHGlobal(size); - Marshal.StructureToPtr(obj, ptr, false); - Marshal.Copy(ptr, bytes, 0, size); - Marshal.FreeHGlobal(ptr); - } - - public static RawCtrl[] AllocAryRawCtrl(uint num) - { - RawCtrl[] ary = new RawCtrl[num]; - - for (uint i = 0; i < num; ++i) - { - ary[i] = new RawCtrl(); - ary[i].name = ""; - ary[i].data = new byte[236]; - } - return ary; - } - - public static CtrlValues AllocCtrlVaules() - { - CtrlValues values = new CtrlValues(); - values.val = new float[16]; - values.min = new float[16]; - values.max = new float[16]; - return values; - } - - public static CtrlType GetCtrlType(Type type) - { - if (type == typeof(string)) - { - return CtrlType.Text; - } - else if (type == typeof(bool)) - { - return CtrlType.Bool; - } - else if (type == typeof(float)) - { - return CtrlType.Float; - } - else if (type == typeof(int)) - { - return CtrlType.Int; - } - else if (type == typeof(Vector2)) - { - return CtrlType.Vec2F; - } - else if (type == typeof(Vector3)) - { - return CtrlType.Vec3F; - } - else if (type == typeof(Vector4)) - { - return CtrlType.Vec4F; - } - else if (type == typeof(Color)) - { - return CtrlType.ColorF; - } - else if (type == typeof(Color32)) - { - return CtrlType.Color; - } - - return CtrlType.Unknown; - } - - public static bool IsSupport(Type type) - { - if (type == typeof(string) || - type == typeof(bool) || - type == typeof(float) || - type == typeof(int) || - type == typeof(Vector2) || - type == typeof(Vector3) || - type == typeof(Vector4) || - type == typeof(Color) || - type == typeof(Color32) ) - { - return true; - } - - return false; - } - - public static void SetVec2(Vector2 vec2, float[] ary_f) - { - ary_f[0] = vec2.x; - ary_f[1] = vec2.y; - } - - public static void SetVec3(Vector3 vec3, float[] ary_f) - { - ary_f[0] = vec3.x; - ary_f[1] = vec3.y; - ary_f[2] = vec3.z; - } - - public static void SetVec4(Vector4 vec4, float[] ary_f) - { - ary_f[0] = vec4.x; - ary_f[1] = vec4.y; - ary_f[2] = vec4.z; - ary_f[3] = vec4.w; - } - - public static void SetColor(Color clr, float[] ary_f) - { - ary_f[0] = clr.r; - ary_f[1] = clr.g; - ary_f[2] = clr.b; - ary_f[3] = clr.a; - } - - public static void SetColor32(Color32 clr, byte[] ary_b) - { - ary_b[0] = clr.r; - ary_b[1] = clr.g; - ary_b[2] = clr.b; - ary_b[3] = clr.a; - } - - public delegate void OnFoundAttribues(object sender, object behavior, FieldInfo info, UltraControlsAttribute ultra_attr, RangeAttribute range_attr); - - public static bool FindUltraControlsAttribues (Component component, UltraControlsAttribute.BindingFlag uc_flag, OnFoundAttribues dele) - { - if (dele == null) - { - return false; - } - - BindingFlags sys_binding_flag = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public; - sf_FindAttribuesFromComponent (component, sys_binding_flag, uc_flag, dele); - - var animators = component.gameObject.GetComponentsInChildren(true); - foreach (Animator animator in animators) - { - if (animator == null) - continue; - - var behaviours = animator.GetBehaviours(); - foreach (StateMachineBehaviour behaviour in behaviours) - { - sf_FindAttribuesFromBehavior(component, behaviour, sys_binding_flag, uc_flag, dele); - }//behaviours - - }//animators - return false; - } - - private static void sf_FindAttribuesFromComponent (Component sender, BindingFlags sys_flag, UltraControlsAttribute.BindingFlag uc_flag , OnFoundAttribues dele) - { - var components = sender.gameObject.GetComponentsInChildren(true); - - foreach (T1 component in components) - { - if (component == null) - continue; - - sf_FindAttribuesFromBehavior(sender, component, sys_flag, uc_flag, dele); - - }//monos - } - - private static void sf_FindAttribuesFromBehavior (object sender, object behavior, BindingFlags sys_flag, UltraControlsAttribute.BindingFlag uc_flag, OnFoundAttribues dele) - { - foreach (FieldInfo field in (behavior.GetType().GetFields(sys_flag))) - { - UltraControlsAttribute attr_ultracontrols = null; - RangeAttribute attr_range = null; - - foreach (object attribute in field.GetCustomAttributes(true)) - { - { - var attr = attribute as UltraControlsAttribute; - if (attr != null && attr.binding_flag == UltraControlsAttribute.BindingFlag.Getter) - { - attr_ultracontrols = attr; - continue; - } - } - - { - var attr = attribute as RangeAttribute; - if (attr != null) - { - attr_range = attr; - } - } - - }//attributes - - if (attr_ultracontrols == null) - { - continue; - } - - dele.Invoke(sender, behavior, field, attr_ultracontrols, attr_range); - - }//fields - } - -#if UNITY_EDITOR - //https://forum.unity3d.com/threads/how-to-get-the-local-identifier-in-file-for-scene-objects.265686/#post-1766415 - //https://gist.github.com/DmitriyYukhanov/5d93a0a204c32db1dd45d7a86e1df87e - - private static PropertyInfo cachedInspectorModeInfo; - - public static long GetLocalIdentifierInFileForObject(UnityEngine.Object obj) - { - long id = 0; - if (obj == null) - { - return id; - } - - PropertyInfo cachedInspectorModeInfo = typeof(UnityEditor.SerializedObject).GetProperty("inspectorMode", BindingFlags.NonPublic | BindingFlags.Instance); - UnityEditor.SerializedObject serializedObject = new UnityEditor.SerializedObject(obj); - cachedInspectorModeInfo.SetValue(serializedObject, UnityEditor.InspectorMode.Debug, null); - UnityEditor.SerializedProperty serializedProperty = serializedObject.FindProperty("m_LocalIdentfierInFile"); - -#if UNITY_5_PLUS - id = serializedProperty.longValue; -#else - id = serializedProperty.intValue; -#endif - //if (id <= 0) - //{ - // UnityEditor.PrefabType prefabType = UnityEditor.PrefabUtility.GetPrefabType(obj); - // if (prefabType != UnityEditor.PrefabType.None) - // { - // id = GetLocalIdentifierInFileForObject(UnityEditor.PrefabUtility.GetPrefabParent(obj)); - // } - // else - // { - // // this will work for the new objects in scene which weren't saved yet - // id = obj.GetInstanceID(); - // } - //} - // - //if (id <= 0) - //{ - // UnityEngine.GameObject go = obj as UnityEngine.GameObject; - // if (go != null) - // { - // id = go.transform.GetSiblingIndex(); - // } - //} - - return id; - } - -#endif - - } - - - -} \ No newline at end of file diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs.meta deleted file mode 100644 index a580ba9..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/UltraUtils.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ceca5512793b6334885704bffd60e492 -timeCreated: 1493025017 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant:

u1lwlKA!bkrQb!T1VZ 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 TeyPAO75JqBzf|D=aRvSjB#&D3 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPluginD.dll.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPluginD.dll.meta deleted file mode 100644 index c2fa725..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86/NativeUltraControlsPluginD.dll.meta +++ /dev/null @@ -1,79 +0,0 @@ -fileFormatVersion: 2 -guid: c8cd0c3ab43278948b0490aff7de38f7 -timeCreated: 1490168698 -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: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 1 - Exclude Win: 0 - Exclude Win64: 1 - Exclude iOS: 1 - Editor: - enabled: 1 - settings: - CPU: x86 - DefaultValueInitialized: true - OS: Windows - 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 - WebGL: - enabled: 0 - settings: {} - Win: - enabled: 1 - settings: - CPU: AnyCPU - Win64: - enabled: 0 - settings: - CPU: None - iOS: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64.meta deleted file mode 100644 index ad65e99..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 29a8e98e532e4bc49a6256d9a93608e2 -folderAsset: yes -timeCreated: 1490168671 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPlugin.dll b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPlugin.dll deleted file mode 100644 index 0bb326ca1f30173a0459e81e93a47865215ed12c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31744 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 D|7$r4 diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPlugin.dll.meta b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPlugin.dll.meta deleted file mode 100644 index 3cc1cfc..0000000 --- a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPlugin.dll.meta +++ /dev/null @@ -1,76 +0,0 @@ -fileFormatVersion: 2 -guid: 16109f1d0eae43b4faeca3548066e341 -timeCreated: 1490168675 -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: 0 - Exclude LinuxUniversal: 0 - Exclude OSXIntel: 0 - Exclude OSXIntel64: 0 - Exclude OSXUniversal: 0 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 0 - Exclude iOS: 1 - Editor: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - 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 - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 1 - settings: - CPU: AnyCPU - iOS: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPluginD.dll b/Unity-19050-05-BallPool/Assets/UnityUtils/UltraControls/Plugins/x86_64/NativeUltraControlsPluginD.dll deleted file mode 100644 index 9e26acd4a3f8cdf0d1e29b35235ad8f2534f1612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471040 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%0AXJWa4jFMl}oQWuFGPuKBz=!QT6e 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