From ae34b2d8068dbbf74bd2ad803dff928064ed07b2 Mon Sep 17 00:00:00 2001 From: "Alex.Kirel" Date: Thu, 27 Jul 2023 15:38:45 +0500 Subject: [PATCH] Added Particle Playground library, fixed cinema director deprecated code. --- .../Global Items/Transitions/FadeFromWhite.cs | 36 +- .../Global Items/Transitions/FadeToBlack.cs | 36 +- .../Global Items/Transitions/FadeToWhite.cs | 36 +- Assets/Particle Playground/Extensions.meta | 9 + .../Extensions/Playground Follow.meta | 9 + .../Playground Follow/PlaygroundFollow.cs | 307 + .../PlaygroundFollow.cs.meta | 10 + .../Extensions/Playground Follow/Scripts.meta | 9 + .../Playground Follow/Scripts/Editor.meta | 9 + .../Editor/PlaygroundFollowInspector.cs | 83 + .../Editor/PlaygroundFollowInspector.cs.meta | 10 + .../Extensions/Playground Recorder.meta | 9 + .../PlaygroundMultiRecorder.cs | 82 + .../PlaygroundMultiRecorder.cs.meta | 10 + .../Playground Recorder/PlaygroundRecorder.cs | 1012 + .../PlaygroundRecorder.cs.meta | 10 + .../Playground Recorder/Scripts.meta | 9 + .../Playground Recorder/Scripts/Editor.meta | 9 + .../Editor/PlaygroundRecorderInspector.cs | 294 + .../PlaygroundRecorderInspector.cs.meta | 10 + .../Scripts/PlaygroundCompression.cs | 40 + .../Scripts/PlaygroundCompression.cs.meta | 10 + .../Scripts/PlaygroundRecorderData.cs | 60 + .../Scripts/PlaygroundRecorderData.cs.meta | 10 + .../Scripts/RecordedFrame.cs | 93 + .../Scripts/RecordedFrame.cs.meta | 10 + .../Scripts/SerializedFrame.cs | 49 + .../Scripts/SerializedFrame.cs.meta | 10 + .../Scripts/SerializedParticle.cs | 82 + .../Scripts/SerializedParticle.cs.meta | 10 + .../Extensions/Playground Splines.meta | 9 + .../Extensions/Playground Splines/Editor.meta | 9 + .../Editor/PlaygroundSplineInspector.cs | 520 + .../Editor/PlaygroundSplineInspector.cs.meta | 10 + .../Playground Splines/PlaygroundSpline.cs | 762 + .../PlaygroundSpline.cs.meta | 10 + .../PlaygroundSplineMesh.cs | 203 + .../PlaygroundSplineMesh.cs.meta | 10 + .../Extensions/Playground Trails.meta | 9 + .../Playground Trail Assets.meta | 9 + .../Playground Trail Assets/Scripts.meta | 9 + .../Scripts/Editor.meta | 9 + .../Editor/PlaygroundTrailsInspector.cs | 174 + .../Editor/PlaygroundTrailsInspector.cs.meta | 10 + .../Scripts/ParticlePlaygroundTrail.cs | 425 + .../Scripts/ParticlePlaygroundTrail.cs.meta | 10 + .../Scripts/ParticlePlaygroundTrailPoint.cs | 77 + .../ParticlePlaygroundTrailPoint.cs.meta | 10 + .../Scripts/PlaygroundTrailParent.cs | 25 + .../Scripts/PlaygroundTrailParent.cs.meta | 10 + .../Playground Trails/PlaygroundTrails.cs | 853 + .../PlaygroundTrails.cs.meta | 10 + Assets/Particle Playground/Graphics.meta | 9 + .../Particle Playground/Graphics/Editor.meta | 9 + .../Graphics/Editor/Icons.meta | 9 + .../Icons/Abstract - 16bit Explosion.png | Bin 0 -> 7236 bytes .../Icons/Abstract - 16bit Explosion.png.meta | 55 + .../Icons/Abstract - 32bit Explosion.png | Bin 0 -> 7757 bytes .../Icons/Abstract - 32bit Explosion.png.meta | 55 + .../Editor/Icons/Abstract - Hypnosis.png | Bin 0 -> 10521 bytes .../Editor/Icons/Abstract - Hypnosis.png.meta | 55 + .../Icons/Abstract - Shooting Veins.png | Bin 0 -> 11748 bytes .../Icons/Abstract - Shooting Veins.png.meta | 55 + .../Editor/Icons/Abstract - String Theory.png | Bin 0 -> 8238 bytes .../Icons/Abstract - String Theory.png.meta | 55 + .../Graphics/Editor/Icons/Default.png | Bin 0 -> 9326 bytes .../Graphics/Editor/Icons/Default.png.meta | 55 + .../Editor/Icons/Fire - Burning Ring.png | Bin 0 -> 8771 bytes .../Editor/Icons/Fire - Burning Ring.png.meta | 55 + .../Editor/Icons/Fire - Burning Robot.png | Bin 0 -> 11485 bytes .../Icons/Fire - Burning Robot.png.meta | 55 + .../Graphics/Editor/Icons/Fire - Campfire.png | Bin 0 -> 8359 bytes .../Editor/Icons/Fire - Campfire.png.meta | 55 + .../Graphics/Editor/Icons/Fire - Corona.png | Bin 0 -> 12281 bytes .../Editor/Icons/Fire - Corona.png.meta | 55 + .../Editor/Icons/Fire - Raging Fireball.png | Bin 0 -> 8108 bytes .../Icons/Fire - Raging Fireball.png.meta | 55 + .../Graphics/Editor/Icons/Fire - Torch.png | Bin 0 -> 5899 bytes .../Editor/Icons/Fire - Torch.png.meta | 55 + .../Editor/Icons/Fireworks - Fountain.png | Bin 0 -> 8843 bytes .../Icons/Fireworks - Fountain.png.meta | 55 + .../Editor/Icons/Fireworks - Pink Squid.png | Bin 0 -> 10109 bytes .../Icons/Fireworks - Pink Squid.png.meta | 55 + .../Editor/Icons/Fireworks - Sparkler.png | Bin 0 -> 8627 bytes .../Icons/Fireworks - Sparkler.png.meta | 55 + .../Icons/Playground Bouncing Coins.png | Bin 0 -> 4629 bytes .../Icons/Playground Bouncing Coins.png.meta | 55 + .../Editor/Icons/Playground Burning Robot.png | Bin 0 -> 2440 bytes .../Icons/Playground Burning Robot.png.meta | 55 + .../Icons/Playground Circle Shot (Script).png | Bin 0 -> 5013 bytes .../Playground Circle Shot (Script).png.meta | 55 + .../Editor/Icons/Playground Cloud.png | Bin 0 -> 4173 bytes .../Editor/Icons/Playground Cloud.png.meta | 55 + .../Editor/Icons/Playground Cubism.png | Bin 0 -> 1572 bytes .../Editor/Icons/Playground Cubism.png.meta | 55 + .../Editor/Icons/Playground Enchanted Orb.png | Bin 0 -> 4745 bytes .../Icons/Playground Enchanted Orb.png.meta | 55 + .../Icons/Playground Explode Implode.png | Bin 0 -> 1841 bytes .../Icons/Playground Explode Implode.png.meta | 55 + .../Graphics/Editor/Icons/Playground Fire.png | Bin 0 -> 3799 bytes .../Editor/Icons/Playground Fire.png.meta | 55 + .../Editor/Icons/Playground Flowerbed.png | Bin 0 -> 4644 bytes .../Icons/Playground Flowerbed.png.meta | 55 + .../Editor/Icons/Playground Holobot.png | Bin 0 -> 1984 bytes .../Editor/Icons/Playground Holobot.png.meta | 55 + .../Editor/Icons/Playground Hot Circle.png | Bin 0 -> 4951 bytes .../Icons/Playground Hot Circle.png.meta | 55 + .../Editor/Icons/Playground Ice Fountain.png | Bin 0 -> 1251 bytes .../Icons/Playground Ice Fountain.png.meta | 55 + .../Editor/Icons/Playground Lagoon Falls.png | Bin 0 -> 1790 bytes .../Icons/Playground Lagoon Falls.png.meta | 55 + .../Icons/Playground Laser (Script).png | Bin 0 -> 3601 bytes .../Icons/Playground Laser (Script).png.meta | 55 + .../Editor/Icons/Playground Light Sphere.png | Bin 0 -> 2328 bytes .../Icons/Playground Light Sphere.png.meta | 55 + .../Editor/Icons/Playground Matrix Cube.png | Bin 0 -> 1524 bytes .../Icons/Playground Matrix Cube.png.meta | 55 + .../Icons/Playground Projected Circle.png | Bin 0 -> 5090 bytes .../Playground Projected Circle.png.meta | 55 + .../Editor/Icons/Playground Rainbow Road.png | Bin 0 -> 1941 bytes .../Icons/Playground Rainbow Road.png.meta | 55 + .../Editor/Icons/Playground Runway.png | Bin 0 -> 4028 bytes .../Editor/Icons/Playground Runway.png.meta | 55 + .../Icons/Playground Smokey Turbulence.png | Bin 0 -> 4295 bytes .../Playground Smokey Turbulence.png.meta | 55 + .../Editor/Icons/Playground Soap Machine.png | Bin 0 -> 4542 bytes .../Icons/Playground Soap Machine.png.meta | 55 + .../Editor/Icons/Playground Square Frame.png | Bin 0 -> 4025 bytes .../Icons/Playground Square Frame.png.meta | 55 + .../Editor/Icons/Playground Starburst.png | Bin 0 -> 1896 bytes .../Icons/Playground Starburst.png.meta | 55 + .../Playground Sticky Bubble Explosion.png | Bin 0 -> 5501 bytes ...layground Sticky Bubble Explosion.png.meta | 55 + .../Editor/Icons/Playground Swirl.png | Bin 0 -> 2049 bytes .../Editor/Icons/Playground Swirl.png.meta | 55 + .../Editor/Icons/Playground Toon Star.png | Bin 0 -> 4682 bytes .../Icons/Playground Toon Star.png.meta | 55 + .../Editor/Icons/Playground Valentine.png | Bin 0 -> 3410 bytes .../Icons/Playground Valentine.png.meta | 55 + .../Editor/Icons/Playground Viral Spiral.png | Bin 0 -> 4826 bytes .../Icons/Playground Viral Spiral.png.meta | 55 + .../Graphics/Editor/Icons/Playground-Icon.png | Bin 0 -> 5388 bytes .../Editor/Icons/Playground-Icon.png.meta | 55 + .../Editor/Icons/Playground-Inactive-Icon.png | Bin 0 -> 5228 bytes .../Icons/Playground-Inactive-Icon.png.meta | 55 + .../Editor/Icons/Playground-Warning-Icon.png | Bin 0 -> 5517 bytes .../Icons/Playground-Warning-Icon.png.meta | 55 + .../Editor/Icons/Projectiles - Bouncers.png | Bin 0 -> 8025 bytes .../Icons/Projectiles - Bouncers.png.meta | 55 + .../Editor/Icons/Projectiles - Spray.png | Bin 0 -> 3991 bytes .../Editor/Icons/Projectiles - Spray.png.meta | 55 + .../Graphics/Editor/Icons/Smoke - Area.png | Bin 0 -> 6661 bytes .../Editor/Icons/Smoke - Area.png.meta | 55 + .../Graphics/Editor/Icons/Smoke - Heavy.png | Bin 0 -> 8886 bytes .../Editor/Icons/Smoke - Heavy.png.meta | 55 + .../Graphics/Editor/Icons/Smoke - Light.png | Bin 0 -> 7879 bytes .../Editor/Icons/Smoke - Light.png.meta | 55 + .../Graphics/Materials.meta | 9 + .../Graphics/Materials/Particles.meta | 9 + .../Graphics/Materials/Particles/Objects.meta | 9 + .../Objects/Playground Additive Bubble.mat | 52 + .../Playground Additive Bubble.mat.meta | 6 + .../Playground Additive Cloud-Sheet-01.mat | 52 + ...layground Additive Cloud-Sheet-01.mat.meta | 6 + .../Objects/Playground Additive Cloud.mat | 52 + .../Playground Additive Cloud.mat.meta | 6 + .../Objects/Playground Additive Drop.mat | 52 + .../Objects/Playground Additive Drop.mat.meta | 6 + .../Playground Additive Fire-Sheet-01.mat | 52 + ...Playground Additive Fire-Sheet-01.mat.meta | 6 + .../Playground Additive Lightpoint.mat | 52 + .../Playground Additive Lightpoint.mat.meta | 6 + .../Playground Additive Lightpoint02.mat | 52 + .../Playground Additive Lightpoint02.mat.meta | 6 + .../Playground Additive Lightpoint03.mat | 52 + .../Playground Additive Lightpoint03.mat.meta | 6 + .../Playground Additive Lightpoint04.mat | 52 + .../Playground Additive Lightpoint04.mat.meta | 6 + .../Playground Additive Smoke-Sheet-01.mat | 52 + ...layground Additive Smoke-Sheet-01.mat.meta | 6 + .../Objects/Playground Additive Smoke.mat | 52 + .../Playground Additive Smoke.mat.meta | 6 + .../Objects/Playground Additive Smoke02.mat | 52 + .../Playground Additive Smoke02.mat.meta | 6 + .../Objects/Playground Additive Spark.mat | 52 + .../Playground Additive Spark.mat.meta | 6 + .../Objects/Playground Additive Spark02.mat | 52 + .../Playground Additive Spark02.mat.meta | 6 + .../Objects/Playground Additive Splat.mat | 52 + .../Playground Additive Splat.mat.meta | 6 + .../Objects/Playground Additive Splat02.mat | 52 + .../Playground Additive Splat02.mat.meta | 6 + .../Objects/Playground Additive Splat03.mat | 52 + .../Playground Additive Splat03.mat.meta | 6 + .../Playground Additive Square Glow01.mat | 52 + ...Playground Additive Square Glow01.mat.meta | 6 + .../Playground Alpha Blended Flowerfield.mat | 78 + ...yground Alpha Blended Flowerfield.mat.meta | 6 + .../Objects/Playground Multiply Bubble.mat | 52 + .../Playground Multiply Bubble.mat.meta | 6 + .../Objects/Playground Multiply Cloud.mat | 52 + .../Playground Multiply Cloud.mat.meta | 6 + .../Objects/Playground Multiply Drop.mat | 52 + .../Objects/Playground Multiply Drop.mat.meta | 6 + .../Playground Multiply Lightpoint.mat | 52 + .../Playground Multiply Lightpoint.mat.meta | 6 + .../Playground Multiply Lightpoint02.mat | 52 + .../Playground Multiply Lightpoint02.mat.meta | 6 + .../Playground Multiply Smoke-Sheet-01.mat | 52 + ...layground Multiply Smoke-Sheet-01.mat.meta | 6 + .../Objects/Playground Multiply Smoke.mat | 52 + .../Playground Multiply Smoke.mat.meta | 6 + .../Objects/Playground Multiply Splat.mat | 52 + .../Playground Multiply Splat.mat.meta | 6 + .../Objects/Playground Multiply Splat02.mat | 52 + .../Playground Multiply Splat02.mat.meta | 6 + .../Objects/Playground Multiply Splat03.mat | 52 + .../Playground Multiply Splat03.mat.meta | 6 + .../Playground Soft Edge Unlit Coin.mat | 78 + .../Playground Soft Edge Unlit Coin.mat.meta | 6 + ...Playground Soft Edge Unlit Flowerfield.mat | 78 + ...round Soft Edge Unlit Flowerfield.mat.meta | 6 + .../Objects/Playground Vertex Lit Cloud.mat | 52 + .../Playground Vertex Lit Cloud.mat.meta | 6 + .../Materials/Particles/Plain Shapes.meta | 9 + .../Playground Additive Circle.mat | 52 + .../Playground Additive Circle.mat.meta | 6 + .../Plain Shapes/Playground Additive Drop.mat | 52 + .../Playground Additive Drop.mat.meta | 6 + .../Playground Additive Heart.mat | 52 + .../Playground Additive Heart.mat.meta | 6 + .../Playground Additive Hexagon.mat | 52 + .../Playground Additive Hexagon.mat.meta | 6 + .../Plain Shapes/Playground Additive Ring.mat | 52 + .../Playground Additive Ring.mat.meta | 6 + .../Playground Additive Triangle.mat | 52 + .../Playground Additive Triangle.mat.meta | 6 + .../Playground Multiply Circle.mat | 52 + .../Playground Multiply Circle.mat.meta | 6 + .../Plain Shapes/Playground Multiply Drop.mat | 52 + .../Playground Multiply Drop.mat.meta | 6 + .../Playground Multiply Heart.mat | 52 + .../Playground Multiply Heart.mat.meta | 6 + .../Playground Multiply Hexagon.mat | 52 + .../Playground Multiply Hexagon.mat.meta | 6 + .../Plain Shapes/Playground Multiply Ring.mat | 52 + .../Playground Multiply Ring.mat.meta | 6 + .../Playground Multiply Triangle.mat | 52 + .../Playground Multiply Triangle.mat.meta | 6 + .../Graphics/Materials/Particles/Round.meta | 9 + .../Playground Additive Round Material 02.mat | 52 + ...ground Additive Round Material 02.mat.meta | 6 + ...ditive Round Material 03 (full bright).mat | 52 + ...e Round Material 03 (full bright).mat.meta | 6 + .../Playground Additive Round Material.mat | 52 + ...layground Additive Round Material.mat.meta | 6 + .../Playground Multiply Round Material.mat | 52 + ...layground Multiply Round Material.mat.meta | 6 + .../Graphics/Materials/Particles/Square.meta | 9 + .../Playground Vertex Lit Square Material.mat | 48 + ...ground Vertex Lit Square Material.mat.meta | 6 + .../Playground Vertex Square Material.mat | 48 + ...Playground Vertex Square Material.mat.meta | 6 + .../Graphics/Materials/Trails.meta | 9 + .../Playground Additive Trail Material 01.mat | 52 + ...ground Additive Trail Material 01.mat.meta | 6 + .../Playground Additive Trail Material 02.mat | Bin 0 -> 4416 bytes ...ground Additive Trail Material 02.mat.meta | 6 + .../Particle Playground/Graphics/Shaders.meta | 9 + ...pha Blended Texture With Color Tint.shader | 30 + ...lended Texture With Color Tint.shader.meta | 7 + .../Shaders/Alpha Blended Texture.shader | 25 + .../Shaders/Alpha Blended Texture.shader.meta | 7 + .../Graphics/Shaders/Vertex Color.shader | 14 + .../Graphics/Shaders/Vertex Color.shader.meta | 7 + .../Graphics/Shaders/VertexLit Color.shader | 25 + .../Shaders/VertexLit Color.shader.meta | 7 + .../Graphics/Shaders/VertexLit Texture.shader | 29 + .../Shaders/VertexLit Texture.shader.meta | 7 + .../Graphics/Textures.meta | 9 + .../Graphics/Textures/Brushes.meta | 9 + .../Textures/Brushes/brush00-dot-black.png | Bin 0 -> 2791 bytes .../Brushes/brush00-dot-black.png.meta | 55 + .../Textures/Brushes/brush00-dot-white.png | Bin 0 -> 109 bytes .../Brushes/brush00-dot-white.png.meta | 55 + .../Textures/Brushes/brush01-round-black.png | Bin 0 -> 3524 bytes .../Brushes/brush01-round-black.png.meta | 55 + .../Textures/Brushes/brush01-round-white.png | Bin 0 -> 3519 bytes .../Brushes/brush01-round-white.png.meta | 55 + .../Textures/Brushes/brush02-square-black.png | Bin 0 -> 2805 bytes .../Brushes/brush02-square-black.png.meta | 55 + .../Textures/Brushes/brush02-square-white.png | Bin 0 -> 136 bytes .../Brushes/brush02-square-white.png.meta | 55 + .../Brushes/playground-ring-small01.psd | Bin 0 -> 24308 bytes .../Brushes/playground-ring-small01.psd.meta | 55 + .../Graphics/Textures/Particles.meta | 9 + .../Graphics/Textures/Particles/Objects.meta | 9 + .../Particles/Objects/Ember-Spark-01.png | Bin 0 -> 21768 bytes .../Particles/Objects/Ember-Spark-01.png.meta | 55 + .../Objects/Fire-Flames-4x4-sheet-01.png | Bin 0 -> 2537481 bytes .../Objects/Fire-Flames-4x4-sheet-01.png.meta | 55 + .../Particles/Objects/Smoke-2x2-sheet-01.png | Bin 0 -> 979643 bytes .../Objects/Smoke-2x2-sheet-01.png.meta | 55 + .../Objects/particle-object-bubble.psd | Bin 0 -> 1075754 bytes .../Objects/particle-object-bubble.psd.meta | 55 + .../Objects/particle-object-cloud.psd | Bin 0 -> 240787 bytes .../Objects/particle-object-cloud.psd.meta | 55 + .../Objects/particle-object-coin.psd | Bin 0 -> 1093451 bytes .../Objects/particle-object-coin.psd.meta | 55 + .../Objects/particle-object-drop.psd | Bin 0 -> 443390 bytes .../Objects/particle-object-drop.psd.meta | 55 + .../Objects/particle-object-flowerfield.psd | Bin 0 -> 1837135 bytes .../particle-object-flowerfield.psd.meta | 55 + .../Objects/particle-object-lightpoint.psd | Bin 0 -> 406412 bytes .../particle-object-lightpoint.psd.meta | 55 + .../Objects/particle-object-lightpoint02.psd | Bin 0 -> 400357 bytes .../particle-object-lightpoint02.psd.meta | 55 + .../Objects/particle-object-lightpoint03.psd | Bin 0 -> 2224843 bytes .../particle-object-lightpoint03.psd.meta | 55 + .../Objects/particle-object-lightpoint04.psd | Bin 0 -> 3394731 bytes .../particle-object-lightpoint04.psd.meta | 55 + .../Objects/particle-object-smoke.psd | Bin 0 -> 2090848 bytes .../Objects/particle-object-smoke.psd.meta | 55 + .../Objects/particle-object-smoke02.psd | Bin 0 -> 1514215 bytes .../Objects/particle-object-smoke02.psd.meta | 55 + .../Objects/particle-object-spark.psd | Bin 0 -> 218935 bytes .../Objects/particle-object-spark.psd.meta | 55 + .../Objects/particle-object-splat.psd | Bin 0 -> 194417 bytes .../Objects/particle-object-splat.psd.meta | 55 + .../Objects/particle-object-splat02.psd | Bin 0 -> 268218 bytes .../Objects/particle-object-splat02.psd.meta | 55 + .../Objects/particle-object-splat03.psd | Bin 0 -> 772778 bytes .../Objects/particle-object-splat03.psd.meta | 55 + .../Objects/particle-object-square-glow01.psd | Bin 0 -> 1389802 bytes .../particle-object-square-glow01.psd.meta | 55 + .../Textures/Particles/Plain Shapes.meta | 9 + .../Plain Shapes/particle-shape-circle.psd | Bin 0 -> 42020 bytes .../particle-shape-circle.psd.meta | 55 + .../Plain Shapes/particle-shape-drop.psd | Bin 0 -> 42288 bytes .../Plain Shapes/particle-shape-drop.psd.meta | 55 + .../Plain Shapes/particle-shape-heart.psd | Bin 0 -> 44509 bytes .../particle-shape-heart.psd.meta | 55 + .../Plain Shapes/particle-shape-hexagon.psd | Bin 0 -> 40702 bytes .../particle-shape-hexagon.psd.meta | 55 + .../Plain Shapes/particle-shape-ring.psd | Bin 0 -> 46567 bytes .../Plain Shapes/particle-shape-ring.psd.meta | 55 + .../Plain Shapes/particle-shape-triangle.psd | Bin 0 -> 39840 bytes .../particle-shape-triangle.psd.meta | 55 + .../Textures/Particles/particle01-round.psd | Bin 0 -> 61001 bytes .../Particles/particle01-round.psd.meta | 55 + .../Textures/Particles/particle02-round.psd | Bin 0 -> 414087 bytes .../Particles/particle02-round.psd.meta | 55 + .../Graphics/Textures/Trails.meta | 9 + .../Graphics/Textures/Trails/Trail01.psd | Bin 0 -> 29428 bytes .../Graphics/Textures/Trails/Trail01.psd.meta | 55 + .../Playground Assets.meta | 9 + .../Playground Assets/Brushes.meta | 9 + .../Brushes/Brush00-dot-black.prefab | 59 + .../Brushes/Brush00-dot-black.prefab.meta | 6 + .../Brushes/Brush00-dot-white.prefab | 59 + .../Brushes/Brush00-dot-white.prefab.meta | 6 + .../Brushes/Brush01-round-black.prefab | 59 + .../Brushes/Brush01-round-black.prefab.meta | 6 + .../Brushes/Brush01-round-white.prefab | 59 + .../Brushes/Brush01-round-white.prefab.meta | 6 + .../Brushes/Brush02-square-black.prefab | 59 + .../Brushes/Brush02-square-black.prefab.meta | 6 + .../Brushes/Brush02-square-white.prefab | 59 + .../Brushes/Brush02-square-white.prefab.meta | 6 + .../Playground Assets/Presets.meta | 9 + .../Playground Assets/Presets/Abstract.meta | 9 + .../Abstract - 16bit Explosion.prefab | 2052 ++ .../Abstract - 16bit Explosion.prefab.meta | 6 + .../Abstract - 32bit Explosion.prefab | 2052 ++ .../Abstract - 32bit Explosion.prefab.meta | 6 + ...stract - Abstract - 16bit Explosion.prefab | Bin 0 -> 108644 bytes ...t - Abstract - 16bit Explosion.prefab.meta | 8 + .../Abstract/Abstract - Hypnosis.prefab | 2433 +++ .../Abstract/Abstract - Hypnosis.prefab.meta | 6 + .../Abstract/Abstract - Shooting Veins.prefab | 2057 ++ .../Abstract - Shooting Veins.prefab.meta | 6 + .../Abstract/Abstract - String Theory.prefab | 2079 ++ .../Abstract - String Theory.prefab.meta | 6 + .../Playground Assets/Presets/Fire.meta | 9 + .../Presets/Fire/Fire - Burning Ring.prefab | 3870 ++++ .../Fire/Fire - Burning Ring.prefab.meta | 6 + .../Presets/Fire/Fire - Burning Robot.prefab | 16838 ++++++++++++++++ .../Fire/Fire - Burning Robot.prefab.meta | 6 + .../Presets/Fire/Fire - Campfire.prefab | 3844 ++++ .../Presets/Fire/Fire - Campfire.prefab.meta | 6 + .../Presets/Fire/Fire - Corona.prefab | 13510 +++++++++++++ .../Presets/Fire/Fire - Corona.prefab.meta | 6 + .../Fire/Fire - Raging Fireball.prefab | Bin 0 -> 126124 bytes .../Fire/Fire - Raging Fireball.prefab.meta | 6 + .../Presets/Fire/Fire - Torch.prefab | 3846 ++++ .../Presets/Fire/Fire - Torch.prefab.meta | 6 + .../Playground Assets/Presets/Fireworks.meta | 9 + .../Fireworks/Fireworks - Fountain.prefab | 2096 ++ .../Fireworks - Fountain.prefab.meta | 6 + .../Fireworks/Fireworks - Pink Squid.prefab | 2081 ++ .../Fireworks - Pink Squid.prefab.meta | 6 + .../Fireworks/Fireworks - Sparkler.prefab | Bin 0 -> 123644 bytes .../Fireworks - Sparkler.prefab.meta | 6 + .../Presets/Old Examples.meta | 9 + .../Playground Bouncing Coins.prefab | 1847 ++ .../Playground Bouncing Coins.prefab.meta | 6 + .../Playground Burning Robot.prefab | 14677 ++++++++++++++ .../Playground Burning Robot.prefab.meta | 6 + .../Playground Circle Shot (Script).prefab | 1835 ++ ...layground Circle Shot (Script).prefab.meta | 6 + .../Old Examples/Playground Cloud.prefab | 2125 ++ .../Old Examples/Playground Cloud.prefab.meta | 6 + .../Old Examples/Playground Cubism.prefab | 2169 ++ .../Playground Cubism.prefab.meta | 6 + .../Playground Enchanted Orb.prefab | 13276 ++++++++++++ .../Playground Enchanted Orb.prefab.meta | 6 + .../Playground Explode Implode.prefab | 1849 ++ .../Playground Explode Implode.prefab.meta | 6 + .../Old Examples/Playground Fire.prefab | Bin 0 -> 108420 bytes .../Old Examples/Playground Fire.prefab.meta | 6 + .../Old Examples/Playground Flowerbed.prefab | 2125 ++ .../Playground Flowerbed.prefab.meta | 6 + .../Old Examples/Playground Holobot.prefab | 1850 ++ .../Playground Holobot.prefab.meta | 6 + .../Old Examples/Playground Hot Circle.prefab | 1860 ++ .../Playground Hot Circle.prefab.meta | 6 + .../Playground Ice Fountain.prefab | 1817 ++ .../Playground Ice Fountain.prefab.meta | 6 + .../Playground Lagoon Falls.prefab | 1812 ++ .../Playground Lagoon Falls.prefab.meta | 6 + .../Playground Laser (Script).prefab | 1877 ++ .../Playground Laser (Script).prefab.meta | 6 + .../Playground Light Sphere.prefab | 2924 +++ .../Playground Light Sphere.prefab.meta | 6 + .../Playground Matrix Cube.prefab | 2116 ++ .../Playground Matrix Cube.prefab.meta | 6 + .../Playground Projected Circle.prefab | 1849 ++ .../Playground Projected Circle.prefab.meta | 6 + .../Playground Rainbow Road.prefab | 2101 ++ .../Playground Rainbow Road.prefab.meta | 6 + .../Old Examples/Playground Runway.prefab | 1812 ++ .../Playground Runway.prefab.meta | 6 + .../Playground Smokey Turbulence.prefab | 1913 ++ .../Playground Smokey Turbulence.prefab.meta | 6 + .../Playground Soap Machine.prefab | 1847 ++ .../Playground Soap Machine.prefab.meta | 6 + .../Playground Square Frame.prefab | 2048 ++ .../Playground Square Frame.prefab.meta | 6 + .../Old Examples/Playground Starburst.prefab | 2919 +++ .../Playground Starburst.prefab.meta | 6 + .../Playground Sticky Bubble Explosion.prefab | 1859 ++ ...ground Sticky Bubble Explosion.prefab.meta | 6 + .../Old Examples/Playground Swirl.prefab | 1837 ++ .../Old Examples/Playground Swirl.prefab.meta | 6 + .../Old Examples/Playground Toon Star.prefab | 1812 ++ .../Playground Toon Star.prefab.meta | 6 + .../Old Examples/Playground Valentine.prefab | 1812 ++ .../Playground Valentine.prefab.meta | 6 + .../Playground Viral Spiral.prefab | 1827 ++ .../Playground Viral Spiral.prefab.meta | 6 + .../Presets/Projectiles.meta | 9 + .../Projectiles/Projectiles - Bouncers.prefab | 2059 ++ .../Projectiles - Bouncers.prefab.meta | 6 + .../Projectiles/Projectiles - Spray.prefab | 2064 ++ .../Projectiles - Spray.prefab.meta | 6 + .../Playground Assets/Presets/Smoke.meta | 9 + .../Presets/Smoke/Smoke - Area.prefab | 1846 ++ .../Presets/Smoke/Smoke - Area.prefab.meta | 6 + .../Presets/Smoke/Smoke - Heavy.prefab | 1845 ++ .../Presets/Smoke/Smoke - Heavy.prefab.meta | 6 + .../Presets/Smoke/Smoke - Light.prefab | 1845 ++ .../Presets/Smoke/Smoke - Light.prefab.meta | 6 + .../Playground Assets/Scripts.meta | 9 + .../Scripts/PlaygroundFlickeringPointLight.cs | 33 + .../PlaygroundFlickeringPointLight.cs.meta | 10 + .../Scripts/PlaygroundSineOverflow.cs | 21 + .../Scripts/PlaygroundSineOverflow.cs.meta | 10 + .../Scripts/PlaygroundSineRotation.cs | 17 + .../Scripts/PlaygroundSineRotation.cs.meta | 10 + .../Scripts/PlaygroundSwarmPositioning.cs | 29 + .../PlaygroundSwarmPositioning.cs.meta | 10 + .../Playground Assets/Settings.meta | 9 + .../Playground Assets/Settings/Languages.meta | 9 + .../Settings/Languages/English.asset | 710 + .../Settings/Languages/English.asset.meta | 6 + .../Settings/Languages/Korean.asset | 932 + .../Settings/Languages/Korean.asset.meta | 6 + .../Settings/Languages/Swedish.asset | 791 + .../Settings/Languages/Swedish.asset.meta | 6 + .../Settings/Playground Settings.asset | Bin 0 -> 8848 bytes .../Settings/Playground Settings.asset.meta | 6 + Assets/Particle Playground/Resources.meta | 9 + .../Particle Playground System.prefab | 1836 ++ .../Particle Playground System.prefab.meta | 6 + .../Resources/Playground Manager.prefab | 73 + .../Resources/Playground Manager.prefab.meta | 6 + Assets/Particle Playground/Scripts.meta | 9 + .../Particle Playground/Scripts/Editor.meta | 9 + .../Editor/PlaygroundBrushPresetInspectorC.cs | 95 + .../PlaygroundBrushPresetInspectorC.cs.meta | 10 + .../Editor/PlaygroundCreateBrushWindowC.cs | 91 + .../PlaygroundCreateBrushWindowC.cs.meta | 10 + .../Editor/PlaygroundCreatePresetWindowC.cs | 314 + .../PlaygroundCreatePresetWindowC.cs.meta | 10 + .../Scripts/Editor/PlaygroundInspectorC.cs | 1041 + .../Editor/PlaygroundInspectorC.cs.meta | 10 + .../PlaygroundInstallLanguageWindowC.cs | 69 + .../PlaygroundInstallLanguageWindowC.cs.meta | 10 + .../Scripts/Editor/PlaygroundLanguageC.cs | 747 + .../Editor/PlaygroundLanguageC.cs.meta | 10 + .../PlaygroundParticleSystemInspectorC.cs | 3784 ++++ ...PlaygroundParticleSystemInspectorC.cs.meta | 10 + .../Editor/PlaygroundParticleWindowC.cs | 1164 ++ .../Editor/PlaygroundParticleWindowC.cs.meta | 10 + .../Scripts/Editor/PlaygroundSettingsC.cs | 403 + .../Editor/PlaygroundSettingsC.cs.meta | 10 + .../Scripts/PlaygroundC.cs | 5649 ++++++ .../Scripts/PlaygroundC.cs.meta | 10 + .../Scripts/PlaygroundParticlesC.cs | 7807 +++++++ .../Scripts/PlaygroundParticlesC.cs.meta | 10 + .../Particle Playground/Scripts/Presets.meta | 9 + .../Scripts/Presets/PlaygroundBrushPresetC.cs | 23 + .../Presets/PlaygroundBrushPresetC.cs.meta | 10 + .../Presets/PlaygroundPresetCircleShotC.cs | 107 + .../PlaygroundPresetCircleShotC.cs.meta | 10 + .../Scripts/Presets/PlaygroundPresetLaserC.cs | 48 + .../Presets/PlaygroundPresetLaserC.cs.meta | 10 + fie.csproj | 36 + 528 files changed, 184639 insertions(+), 54 deletions(-) create mode 100644 Assets/Particle Playground/Extensions.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Follow.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Follow/Scripts.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundMultiRecorder.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundMultiRecorder.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundRecorder.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundRecorder.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/RecordedFrame.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/RecordedFrame.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/SerializedFrame.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/SerializedFrame.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/SerializedParticle.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Recorder/Scripts/SerializedParticle.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Splines.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Splines/Editor.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs.meta create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs create mode 100644 Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs.meta create mode 100644 Assets/Particle Playground/Graphics.meta create mode 100644 Assets/Particle Playground/Graphics/Editor.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - 16bit Explosion.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - 16bit Explosion.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - 32bit Explosion.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - 32bit Explosion.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Hypnosis.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Hypnosis.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Shooting Veins.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Shooting Veins.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - String Theory.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Abstract - String Theory.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Default.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Default.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Ring.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Ring.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Robot.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Robot.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Campfire.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Campfire.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Corona.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Corona.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Raging Fireball.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Raging Fireball.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Torch.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fire - Torch.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Fountain.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Fountain.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Pink Squid.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Pink Squid.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Sparkler.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Sparkler.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Bouncing Coins.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Bouncing Coins.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Burning Robot.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Burning Robot.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Circle Shot (Script).png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Circle Shot (Script).png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Cloud.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Cloud.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Cubism.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Cubism.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Enchanted Orb.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Enchanted Orb.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Explode Implode.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Explode Implode.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Fire.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Fire.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Flowerbed.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Flowerbed.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Holobot.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Holobot.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Hot Circle.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Hot Circle.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Ice Fountain.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Ice Fountain.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Lagoon Falls.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Lagoon Falls.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Laser (Script).png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Laser (Script).png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Light Sphere.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Light Sphere.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Matrix Cube.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Matrix Cube.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Projected Circle.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Projected Circle.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Rainbow Road.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Rainbow Road.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Runway.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Runway.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Smokey Turbulence.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Smokey Turbulence.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Soap Machine.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Soap Machine.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Square Frame.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Square Frame.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Starburst.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Starburst.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Sticky Bubble Explosion.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Sticky Bubble Explosion.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Swirl.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Swirl.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Toon Star.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Toon Star.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Valentine.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Valentine.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Viral Spiral.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground Viral Spiral.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground-Icon.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground-Icon.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground-Inactive-Icon.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground-Inactive-Icon.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground-Warning-Icon.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Playground-Warning-Icon.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Bouncers.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Bouncers.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Spray.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Spray.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Area.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Area.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Heavy.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Heavy.png.meta create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Light.png create mode 100644 Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Light.png.meta create mode 100644 Assets/Particle Playground/Graphics/Materials.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Bubble.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Bubble.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Cloud-Sheet-01.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Cloud-Sheet-01.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Cloud.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Cloud.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Drop.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Drop.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Fire-Sheet-01.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Fire-Sheet-01.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint03.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint03.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint04.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Lightpoint04.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Smoke-Sheet-01.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Smoke-Sheet-01.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Smoke.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Smoke.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Smoke02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Smoke02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Spark.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Spark.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Spark02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Spark02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Splat.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Splat.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Splat02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Splat02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Splat03.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Splat03.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Square Glow01.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Additive Square Glow01.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Alpha Blended Flowerfield.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Alpha Blended Flowerfield.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Bubble.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Bubble.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Cloud.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Cloud.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Drop.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Drop.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Lightpoint.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Lightpoint.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Lightpoint02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Lightpoint02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Smoke-Sheet-01.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Smoke-Sheet-01.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Smoke.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Smoke.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Splat.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Splat.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Splat02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Splat02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Splat03.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Multiply Splat03.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Soft Edge Unlit Coin.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Soft Edge Unlit Coin.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Soft Edge Unlit Flowerfield.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Soft Edge Unlit Flowerfield.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Vertex Lit Cloud.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Objects/Playground Vertex Lit Cloud.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Circle.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Circle.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Drop.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Drop.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Heart.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Heart.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Hexagon.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Hexagon.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Ring.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Ring.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Triangle.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Additive Triangle.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Circle.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Circle.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Drop.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Drop.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Heart.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Heart.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Hexagon.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Hexagon.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Ring.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Ring.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Triangle.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Plain Shapes/Playground Multiply Triangle.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Additive Round Material 02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Additive Round Material 02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Additive Round Material 03 (full bright).mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Additive Round Material 03 (full bright).mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Additive Round Material.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Additive Round Material.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Multiply Round Material.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Round/Playground Multiply Round Material.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Square.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Square/Playground Vertex Lit Square Material.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Square/Playground Vertex Lit Square Material.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Square/Playground Vertex Square Material.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Particles/Square/Playground Vertex Square Material.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Trails.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Trails/Playground Additive Trail Material 01.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Trails/Playground Additive Trail Material 01.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Materials/Trails/Playground Additive Trail Material 02.mat create mode 100644 Assets/Particle Playground/Graphics/Materials/Trails/Playground Additive Trail Material 02.mat.meta create mode 100644 Assets/Particle Playground/Graphics/Shaders.meta create mode 100644 Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader create mode 100644 Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader.meta create mode 100644 Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader create mode 100644 Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader.meta create mode 100644 Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader create mode 100644 Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader.meta create mode 100644 Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader create mode 100644 Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader.meta create mode 100644 Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader create mode 100644 Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader.meta create mode 100644 Assets/Particle Playground/Graphics/Textures.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-black.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-black.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-white.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-white.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush01-round-black.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush01-round-black.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush01-round-white.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush01-round-white.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-black.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-black.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-white.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-white.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/playground-ring-small01.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Brushes/playground-ring-small01.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/Ember-Spark-01.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/Ember-Spark-01.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/Fire-Flames-4x4-sheet-01.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/Fire-Flames-4x4-sheet-01.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/Smoke-2x2-sheet-01.png create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/Smoke-2x2-sheet-01.png.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-bubble.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-bubble.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-cloud.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-cloud.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-coin.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-coin.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-drop.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-drop.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-flowerfield.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-flowerfield.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint02.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint02.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint03.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint03.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint04.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-lightpoint04.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-smoke.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-smoke.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-smoke02.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-smoke02.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-spark.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-spark.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-splat.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-splat.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-splat02.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-splat02.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-splat03.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-splat03.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-square-glow01.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Objects/particle-object-square-glow01.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-circle.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-circle.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-drop.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-drop.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-heart.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-heart.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-hexagon.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-hexagon.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-ring.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-ring.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-triangle.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/Plain Shapes/particle-shape-triangle.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/particle01-round.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/particle01-round.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/particle02-round.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Particles/particle02-round.psd.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Trails.meta create mode 100644 Assets/Particle Playground/Graphics/Textures/Trails/Trail01.psd create mode 100644 Assets/Particle Playground/Graphics/Textures/Trails/Trail01.psd.meta create mode 100644 Assets/Particle Playground/Playground Assets.meta create mode 100644 Assets/Particle Playground/Playground Assets/Brushes.meta create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush00-dot-black.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush00-dot-black.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush00-dot-white.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush00-dot-white.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush01-round-black.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush01-round-black.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush01-round-white.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush01-round-white.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush02-square-black.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush02-square-black.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush02-square-white.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Brushes/Brush02-square-white.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - 16bit Explosion.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - 16bit Explosion.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - 32bit Explosion.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - 32bit Explosion.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - Abstract - 16bit Explosion.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - Abstract - 16bit Explosion.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - Hypnosis.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - Hypnosis.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - Shooting Veins.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - Shooting Veins.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - String Theory.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Abstract/Abstract - String Theory.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Burning Ring.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Burning Ring.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Burning Robot.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Burning Robot.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Campfire.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Campfire.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Corona.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Corona.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Raging Fireball.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Raging Fireball.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Torch.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fire/Fire - Torch.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fireworks.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fireworks/Fireworks - Fountain.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fireworks/Fireworks - Fountain.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fireworks/Fireworks - Pink Squid.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fireworks/Fireworks - Pink Squid.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fireworks/Fireworks - Sparkler.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Fireworks/Fireworks - Sparkler.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Bouncing Coins.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Bouncing Coins.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Burning Robot.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Burning Robot.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Circle Shot (Script).prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Circle Shot (Script).prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Cloud.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Cloud.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Cubism.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Cubism.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Enchanted Orb.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Enchanted Orb.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Explode Implode.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Explode Implode.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Fire.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Fire.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Flowerbed.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Flowerbed.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Holobot.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Holobot.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Hot Circle.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Hot Circle.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Ice Fountain.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Ice Fountain.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Lagoon Falls.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Lagoon Falls.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Laser (Script).prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Laser (Script).prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Light Sphere.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Light Sphere.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Matrix Cube.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Matrix Cube.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Projected Circle.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Projected Circle.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Rainbow Road.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Rainbow Road.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Runway.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Runway.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Smokey Turbulence.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Smokey Turbulence.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Soap Machine.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Soap Machine.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Square Frame.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Square Frame.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Starburst.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Starburst.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Sticky Bubble Explosion.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Sticky Bubble Explosion.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Swirl.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Swirl.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Toon Star.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Toon Star.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Valentine.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Valentine.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Viral Spiral.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Old Examples/Playground Viral Spiral.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Projectiles.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Projectiles/Projectiles - Bouncers.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Projectiles/Projectiles - Bouncers.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Projectiles/Projectiles - Spray.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Projectiles/Projectiles - Spray.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Smoke.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Smoke/Smoke - Area.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Smoke/Smoke - Area.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Smoke/Smoke - Heavy.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Smoke/Smoke - Heavy.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Smoke/Smoke - Light.prefab create mode 100644 Assets/Particle Playground/Playground Assets/Presets/Smoke/Smoke - Light.prefab.meta create mode 100644 Assets/Particle Playground/Playground Assets/Scripts.meta create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundFlickeringPointLight.cs create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundFlickeringPointLight.cs.meta create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundSineOverflow.cs create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundSineOverflow.cs.meta create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundSineRotation.cs create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundSineRotation.cs.meta create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundSwarmPositioning.cs create mode 100644 Assets/Particle Playground/Playground Assets/Scripts/PlaygroundSwarmPositioning.cs.meta create mode 100644 Assets/Particle Playground/Playground Assets/Settings.meta create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Languages.meta create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Languages/English.asset create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Languages/English.asset.meta create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Languages/Korean.asset create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Languages/Korean.asset.meta create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Languages/Swedish.asset create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Languages/Swedish.asset.meta create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Playground Settings.asset create mode 100644 Assets/Particle Playground/Playground Assets/Settings/Playground Settings.asset.meta create mode 100644 Assets/Particle Playground/Resources.meta create mode 100644 Assets/Particle Playground/Resources/Particle Playground System.prefab create mode 100644 Assets/Particle Playground/Resources/Particle Playground System.prefab.meta create mode 100644 Assets/Particle Playground/Resources/Playground Manager.prefab create mode 100644 Assets/Particle Playground/Resources/Playground Manager.prefab.meta create mode 100644 Assets/Particle Playground/Scripts.meta create mode 100644 Assets/Particle Playground/Scripts/Editor.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundBrushPresetInspectorC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundBrushPresetInspectorC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundCreateBrushWindowC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundCreateBrushWindowC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundCreatePresetWindowC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundCreatePresetWindowC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundInspectorC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundInspectorC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundInstallLanguageWindowC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundInstallLanguageWindowC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundLanguageC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundLanguageC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundParticleSystemInspectorC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundParticleSystemInspectorC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundParticleWindowC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundParticleWindowC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundSettingsC.cs create mode 100644 Assets/Particle Playground/Scripts/Editor/PlaygroundSettingsC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/PlaygroundC.cs create mode 100644 Assets/Particle Playground/Scripts/PlaygroundC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/PlaygroundParticlesC.cs create mode 100644 Assets/Particle Playground/Scripts/PlaygroundParticlesC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Presets.meta create mode 100644 Assets/Particle Playground/Scripts/Presets/PlaygroundBrushPresetC.cs create mode 100644 Assets/Particle Playground/Scripts/Presets/PlaygroundBrushPresetC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Presets/PlaygroundPresetCircleShotC.cs create mode 100644 Assets/Particle Playground/Scripts/Presets/PlaygroundPresetCircleShotC.cs.meta create mode 100644 Assets/Particle Playground/Scripts/Presets/PlaygroundPresetLaserC.cs create mode 100644 Assets/Particle Playground/Scripts/Presets/PlaygroundPresetLaserC.cs.meta diff --git a/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeFromWhite.cs b/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeFromWhite.cs index 2fa7cd3..cfa7653 100644 --- a/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeFromWhite.cs +++ b/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeFromWhite.cs @@ -17,15 +17,15 @@ namespace CinemaDirector /// void Awake() { - if (guiTexture == null) + if (GetComponent() == null) { gameObject.transform.position = Vector3.zero; gameObject.transform.localScale = new Vector3(100, 100, 100); gameObject.AddComponent(); - guiTexture.enabled = false; - guiTexture.texture = new Texture2D(1, 1); - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = Color.clear; + GetComponent().enabled = false; + GetComponent().texture = new Texture2D(1, 1); + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = Color.clear; } } @@ -34,9 +34,9 @@ namespace CinemaDirector /// public override void Trigger() { - guiTexture.enabled = true; - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = From; + GetComponent().enabled = true; + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = From; } /// @@ -67,12 +67,12 @@ namespace CinemaDirector { if (time >= 0 && time <= Duration) { - guiTexture.enabled = true; + GetComponent().enabled = true; UpdateTime(time, deltaTime); } - else if (guiTexture.enabled) + else if (GetComponent().enabled) { - guiTexture.enabled = false; + GetComponent().enabled = false; } } @@ -81,7 +81,7 @@ namespace CinemaDirector /// public override void End() { - guiTexture.enabled = false; + GetComponent().enabled = false; } /// @@ -89,9 +89,9 @@ namespace CinemaDirector /// public override void ReverseEnd() { - guiTexture.enabled = true; - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = To; + GetComponent().enabled = true; + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = To; } /// @@ -99,9 +99,9 @@ namespace CinemaDirector /// public override void Stop() { - if (guiTexture != null) + if (GetComponent() != null) { - guiTexture.enabled = false; + GetComponent().enabled = false; } } @@ -113,7 +113,7 @@ namespace CinemaDirector /// the Lerp transition value private void FadeToColor(Color from, Color to, float transition) { - guiTexture.color = Color.Lerp(from, to, transition); + GetComponent().color = Color.Lerp(from, to, transition); } } } diff --git a/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToBlack.cs b/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToBlack.cs index 7d1adf9..620077f 100644 --- a/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToBlack.cs +++ b/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToBlack.cs @@ -17,15 +17,15 @@ namespace CinemaDirector /// void Awake() { - if (guiTexture == null) + if (GetComponent() == null) { gameObject.transform.position = Vector3.zero; gameObject.transform.localScale = new Vector3(100, 100, 100); gameObject.AddComponent(); - guiTexture.enabled = false; - guiTexture.texture = new Texture2D(1, 1); - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = Color.clear; + GetComponent().enabled = false; + GetComponent().texture = new Texture2D(1, 1); + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = Color.clear; } } @@ -34,9 +34,9 @@ namespace CinemaDirector /// public override void Trigger() { - guiTexture.enabled = true; - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = From; + GetComponent().enabled = true; + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = From; } /// @@ -67,12 +67,12 @@ namespace CinemaDirector { if (time >= 0 && time <= Duration) { - guiTexture.enabled = true; + GetComponent().enabled = true; UpdateTime(time, deltaTime); } - else if (guiTexture.enabled) + else if (GetComponent().enabled) { - guiTexture.enabled = false; + GetComponent().enabled = false; } } @@ -81,7 +81,7 @@ namespace CinemaDirector /// public override void End() { - guiTexture.enabled = false; + GetComponent().enabled = false; } /// @@ -89,9 +89,9 @@ namespace CinemaDirector /// public override void ReverseEnd() { - guiTexture.enabled = true; - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = To; + GetComponent().enabled = true; + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = To; } /// @@ -99,9 +99,9 @@ namespace CinemaDirector /// public override void Stop() { - if (guiTexture != null) + if (GetComponent() != null) { - guiTexture.enabled = false; + GetComponent().enabled = false; } } @@ -113,7 +113,7 @@ namespace CinemaDirector /// the Lerp transition value private void FadeToColor(Color from, Color to, float transition) { - guiTexture.color = Color.Lerp(from, to, transition); + GetComponent().color = Color.Lerp(from, to, transition); } } diff --git a/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToWhite.cs b/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToWhite.cs index 4c83f58..365747e 100644 --- a/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToWhite.cs +++ b/Assets/Cinema Director/Cutscene Items/Global Items/Transitions/FadeToWhite.cs @@ -17,15 +17,15 @@ namespace CinemaDirector /// void Awake() { - if (guiTexture == null) + if (GetComponent() == null) { gameObject.transform.position = Vector3.zero; gameObject.transform.localScale = new Vector3(100, 100, 100); gameObject.AddComponent(); - guiTexture.enabled = false; - guiTexture.texture = new Texture2D(1, 1); - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = Color.clear; + GetComponent().enabled = false; + GetComponent().texture = new Texture2D(1, 1); + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = Color.clear; } } @@ -34,9 +34,9 @@ namespace CinemaDirector /// public override void Trigger() { - guiTexture.enabled = true; - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = From; + GetComponent().enabled = true; + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = From; } /// @@ -67,12 +67,12 @@ namespace CinemaDirector { if (time >= 0 && time <= Duration) { - guiTexture.enabled = true; + GetComponent().enabled = true; UpdateTime(time, deltaTime); } - else if (guiTexture.enabled) + else if (GetComponent().enabled) { - guiTexture.enabled = false; + GetComponent().enabled = false; } } @@ -81,7 +81,7 @@ namespace CinemaDirector /// public override void End() { - guiTexture.enabled = false; + GetComponent().enabled = false; } /// @@ -89,9 +89,9 @@ namespace CinemaDirector /// public override void ReverseEnd() { - guiTexture.enabled = true; - guiTexture.pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); - guiTexture.color = To; + GetComponent().enabled = true; + GetComponent().pixelInset = new Rect(0f, 0f, Screen.width, Screen.height); + GetComponent().color = To; } /// @@ -99,9 +99,9 @@ namespace CinemaDirector /// public override void Stop() { - if (guiTexture != null) + if (GetComponent() != null) { - guiTexture.enabled = false; + GetComponent().enabled = false; } } @@ -113,7 +113,7 @@ namespace CinemaDirector /// the Lerp transition value private void FadeToColor(Color from, Color to, float transition) { - guiTexture.color = Color.Lerp(from, to, transition); + GetComponent().color = Color.Lerp(from, to, transition); } } } diff --git a/Assets/Particle Playground/Extensions.meta b/Assets/Particle Playground/Extensions.meta new file mode 100644 index 0000000..d1ac676 --- /dev/null +++ b/Assets/Particle Playground/Extensions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6e4f0fc9ae1da904a83344cd4ecd4adb +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Follow.meta b/Assets/Particle Playground/Extensions/Playground Follow.meta new file mode 100644 index 0000000..5aca636 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Follow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1c30893a4ccf6094fba8c75c3fce2cae +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs b/Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs new file mode 100644 index 0000000..6beb6d6 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs @@ -0,0 +1,307 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace ParticlePlayground { + public class PlaygroundFollow : MonoBehaviour { + + /// + /// Reference to the particle system. + /// + public PlaygroundParticlesC particles; + /// + /// Reference to an existing GameObject. This will be cloned to be used on every particle. + /// + public GameObject referenceObject; + /// + /// The lifetime of the followers. Set 0 to follow during each particle's individual lifetime. + /// + public float followerLifetime = 0; + /// + /// The size of the cache. Set 0 to automatically set the needed amount. + /// + public int cacheSize = 0; + + /// + /// Determines if the Playground Followers should broadcast to any event listeners. + /// + public bool sendEvents = false; + + /// + /// This event occurs when followers are born and sendEvents are set to true. + /// + public event OnPlaygroundFollower followerEventBirth; + /// + /// This event occurs when follower dies and sendEvents are set to true. + /// + public event OnPlaygroundFollower followerEventDeath; + + /// + /// The reference to the trail renderer (if existing) + /// + TrailRenderer referenceTrailRenderer; + /// + /// If the follower has a Trail Renderer component, this sets trail time once the follower is active again. + /// + float trailTime = 0; + /// + /// The list of active followers. + /// + List followers = new List(); + /// + /// As Playground is running in a multithreaded environment we need a queue for instantiation (which cannot be called from a different thread). + /// + List waitingFollowers = new List(); + PlaygroundFollower[] referenceObjectsCache; + PlaygroundFollower[] queue = new PlaygroundFollower[0]; + int cacheIndex = 0; + + PlaygroundEventC birthEvent; + PlaygroundEventC deathEvent; + Transform followerParent; + + void Start () + { + if (referenceObject == null || particles == null) + return; + + // Create and setup the birth event + birthEvent = PlaygroundC.CreateEvent(particles); + birthEvent.broadcastType = EVENTBROADCASTC.EventListeners; + birthEvent.eventType = EVENTTYPEC.Birth; + + // Create and setup the death event + deathEvent = PlaygroundC.CreateEvent(particles); + deathEvent.broadcastType = EVENTBROADCASTC.EventListeners; + deathEvent.eventType = EVENTTYPEC.Death; + + // Hook up the event listeners to the delegates + birthEvent.particleEvent += OnParticleDidBirth; + deathEvent.particleEvent += OnParticleDidDie; + + // Create a parent for all followers (for Hierarchy convenience) + followerParent = new GameObject("Followers").transform; + followerParent.parent = transform; + + // Get the trail renderer (if available) and its time + referenceTrailRenderer = referenceObject.GetComponent(); + if (referenceTrailRenderer!=null) + trailTime = referenceTrailRenderer.time; + + // Set an extra amount of followers if required (a trail's time will exceed a particle's) + int extra = followerLifetime<=0? + Mathf.CeilToInt(Mathf.Abs (particles.lifetime-trailTime)+(trailTime-particles.lifetime))+2 : + Mathf.CeilToInt(Mathf.Abs (particles.lifetime-followerLifetime)+(followerLifetime-particles.lifetime))+2 ; + if (particles.lifetime<=1f) extra++; + + // Create the follower cache (this will be iterated through and reused whenever a particle rebirths) + referenceObjectsCache = new PlaygroundFollower[cacheSize>0? cacheSize : particles.particleCount+Mathf.CeilToInt(particles.particleCount*extra)]; + for (int i = 0; i(), 0, 0); + referenceObjectsCache[i].transform.parent = followerParent; + if (referenceObjectsCache[i].trailRenderer!=null) + referenceObjectsCache[i].trailRenderer.time = 0; + referenceObjectsCache[i].gameObject.SetActive(false); + } + } + + /// + /// Event listener for particle birth. + /// + /// Particle. + void OnParticleDidBirth (PlaygroundEventParticle particle) + { + waitingFollowers.Add (new PlaygroundFollower(null, null, null, followerLifetime<=0? particle.totalLifetime+trailTime : followerLifetime, particle.particleId)); + } + + /// + /// Event listener for particle death. + /// + /// Particle. + void OnParticleDidDie (PlaygroundEventParticle particle) + { + int followerId = GetFollowerWithId(particle.particleId); + if (followerId<0) return; + followers[followerId].enabled = false; + } + + /// + /// Gets the follower which has the passed in particle identifier. + /// + /// The follower with particle identifier. + /// Particle identifier. + int GetFollowerWithId (int particleId) + { + float lowestLife = 999f; + int returnIndex = -1; + for (int i = 0; i0) + { + queue = waitingFollowers.ToArray(); + } + } + void LateUpdate () + { + UpdateFollowers(); + } + + void UpdateFollowers () + { + + // Follow, lifetime, remove + for (int i = 0; i0) + { + if (queue.Length!=waitingFollowers.Count) return; + int inQueueThisFrame = waitingFollowers.Count; + + foreach (PlaygroundFollower wFollower in queue) + { + AddFollower (wFollower, followers.Count-1); + } + if (inQueueThisFrame==waitingFollowers.Count) + waitingFollowers = new List(); + else waitingFollowers.RemoveRange (0, inQueueThisFrame-1); + queue = new PlaygroundFollower[0]; + } + } + + void AddFollower (PlaygroundFollower follower, int i) + { + if (follower==null) return; + followers.Add (follower.Clone()); + followers[followers.Count-1].enabled = true; + followers[followers.Count-1].gameObject = referenceObjectsCache[cacheIndex].gameObject; + followers[followers.Count-1].gameObject.SetActive(true); + followers[followers.Count-1].transform = referenceObjectsCache[cacheIndex].transform; + followers[followers.Count-1].trailRenderer = referenceObjectsCache[cacheIndex].trailRenderer; + followers[followers.Count-1].particleId = follower.particleId; + followers[followers.Count-1].transform.position = particles.playgroundCache.position[followers[followers.Count-1].particleId]; + if (followers[followers.Count-1].trailRenderer!=null) + followers[followers.Count-1].trailRenderer.time = trailTime; + if (sendEvents && followerEventBirth!=null) + followerEventBirth(followers[followers.Count-1]); + NextCacheIndex(); + } + + void RemoveFollower (int i) + { + if (sendEvents && followerEventDeath!=null) + followerEventDeath(followers[i]); + followers[i].enabled = false; + if (followers[i].trailRenderer!=null) + followers[i].trailRenderer.time = 0; + followers[i].gameObject.SetActive(false); + followers.RemoveAt(i); + } + + void NextCacheIndex () + { + cacheIndex = (cacheIndex+1)%referenceObjectsCache.Length; + } + + /// + /// Gets an active follower at index. This will only return active followers. + /// + /// The active follower. + /// Index. + public PlaygroundFollower GetActiveFollower (int index) + { + index = Mathf.Clamp (index, 0, followers.Count); + return followers[index]; + } + + /// + /// Gets a cached follower at index. This can return inactive followers waiting for their turn to be enabled. + /// + /// The cached follower. + /// Index. + public PlaygroundFollower GetCachedFollower (int index) + { + index = Mathf.Clamp (index, 0, referenceObjectsCache.Length); + return referenceObjectsCache[index]; + } + + /// + /// Gets the amount of active followers. + /// + /// The active followers count. + public int GetActiveFollowersCount () + { + return followers.Count; + } + + /// + /// Gets the amount of cached followers. + /// + /// The cached followers count. + public int GetCachedFollowersCount () + { + return referenceObjectsCache.Length; + } + } + + /// + /// Playground follower class. + /// + public class PlaygroundFollower { + public bool enabled = true; + public float lifetime; + public Transform transform; + public GameObject gameObject; + public TrailRenderer trailRenderer; + public int particleId; + + /// + /// Initializes a new instance of the class. + /// + /// Transform to reposition. + /// Start lifetifetime. + /// Particle identifier to follow. + public PlaygroundFollower (Transform setTransform, GameObject setGameObject, TrailRenderer setTrailRenderer, float setLifetime, int setParticleId) + { + transform = setTransform; + gameObject = setGameObject; + trailRenderer = setTrailRenderer; + lifetime = setLifetime; + particleId = setParticleId; + } + + /// + /// Clones this instance. + /// + public PlaygroundFollower Clone () + { + return new PlaygroundFollower (transform, gameObject, trailRenderer, lifetime, particleId); + } + } + + /// + /// Event delegate for sending a PlaygroundFollower to any event listeners. + /// + public delegate void OnPlaygroundFollower(PlaygroundFollower follower); +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs.meta b/Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs.meta new file mode 100644 index 0000000..a71c2ec --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Follow/PlaygroundFollow.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 69a4e0a274d7945b59605c627b7dbf90 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Follow/Scripts.meta b/Assets/Particle Playground/Extensions/Playground Follow/Scripts.meta new file mode 100644 index 0000000..5c5b849 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Follow/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fca2eae157067c046ae30a5902fcdcc8 +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor.meta b/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor.meta new file mode 100644 index 0000000..edca412 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9d7ebe11a5a45774f9e587f3626d6e5a +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs b/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs new file mode 100644 index 0000000..f87fd59 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs @@ -0,0 +1,83 @@ +using UnityEditor; +using UnityEngine; +using System.Collections; +using ParticlePlayground; +using ParticlePlaygroundLanguage; + +[CustomEditor (typeof(PlaygroundFollow))] +public class PlaygroundFollowInspector : Editor { + + PlaygroundFollow follow; + + SerializedObject s_follow; + SerializedProperty s_particles; + SerializedProperty s_referenceObject; + SerializedProperty s_followerLifetime; + SerializedProperty s_cacheSize; + SerializedProperty s_sendEvents; + + // GUI + public static GUIStyle boxStyle; + public static PlaygroundSettingsC playgroundSettings; + public static PlaygroundLanguageC playgroundLanguage; + + public void OnEnable () + { + follow = target as PlaygroundFollow; + s_follow = new SerializedObject(follow); + + s_particles = s_follow.FindProperty("particles"); + s_referenceObject = s_follow.FindProperty("referenceObject"); + s_followerLifetime = s_follow.FindProperty("followerLifetime"); + s_cacheSize = s_follow.FindProperty("cacheSize"); + s_sendEvents = s_follow.FindProperty("sendEvents"); + + playgroundSettings = PlaygroundSettingsC.GetReference(); + playgroundLanguage = PlaygroundSettingsC.GetLanguage(); + } + + public override void OnInspectorGUI () + { + if (boxStyle==null) + boxStyle = GUI.skin.FindStyle("box"); + + s_follow.UpdateIfDirtyOrScript(); + + bool hasParticleSystem = follow.particles != null; + if (!hasParticleSystem) + EditorGUILayout.HelpBox(playgroundLanguage.missingParticleSystemWarning, MessageType.Warning); + + EditorGUILayout.BeginVertical (boxStyle); + playgroundSettings.playgroundFollowFoldout = GUILayout.Toggle(playgroundSettings.playgroundFollowFoldout, playgroundLanguage.playgroundFollow, EditorStyles.foldout); + if (playgroundSettings.playgroundFollowFoldout) + { + EditorGUILayout.BeginVertical (boxStyle); + + // Followers foldout + int activeFollowers = follow.GetActiveFollowersCount(); + if (GUILayout.Button(playgroundLanguage.followers+" ("+(follow.referenceObject==null?playgroundLanguage.unassigned : activeFollowers.ToString())+")", EditorStyles.toolbarDropDown)) playgroundSettings.followFollowersFoldout=!playgroundSettings.followFollowersFoldout; + if (playgroundSettings.followFollowersFoldout) + { + EditorGUILayout.Separator(); + EditorGUILayout.PropertyField(s_referenceObject, new GUIContent(playgroundLanguage.referenceObject)); + EditorGUILayout.Separator(); + } + + if (GUILayout.Button(playgroundLanguage.advanced, EditorStyles.toolbarDropDown)) playgroundSettings.followAdvancedFoldout=!playgroundSettings.followAdvancedFoldout; + if (playgroundSettings.followAdvancedFoldout) + { + EditorGUILayout.Separator(); + EditorGUILayout.PropertyField(s_particles, new GUIContent(playgroundLanguage.particleSystem, "The particle system to follow within the scene.")); + EditorGUILayout.PropertyField(s_followerLifetime, new GUIContent(playgroundLanguage.lifetime, "The lifetime of the followers, when set to 0 the followers will get automatically controlled lifetime based on the particles.")); + EditorGUILayout.PropertyField(s_cacheSize, new GUIContent(playgroundLanguage.cacheSize, "The object pool of the followers, when set to 0 the pool will be sized to match their lifetime.")); + EditorGUILayout.PropertyField(s_sendEvents, new GUIContent(playgroundLanguage.sendEvents, "Determines if the followers should broadcast events upon birth and death.")); + } + + EditorGUILayout.EndVertical(); + } + + EditorGUILayout.EndVertical(); + + s_follow.ApplyModifiedProperties(); + } +} diff --git a/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs.meta b/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs.meta new file mode 100644 index 0000000..4a502c2 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Follow/Scripts/Editor/PlaygroundFollowInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c8afa032381aa42a1a9c9162ea41d166 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder.meta b/Assets/Particle Playground/Extensions/Playground Recorder.meta new file mode 100644 index 0000000..213f9fc --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 27a1b15eb416264479979c2f2f014038 +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundMultiRecorder.cs b/Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundMultiRecorder.cs new file mode 100644 index 0000000..41ffb7a --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundMultiRecorder.cs @@ -0,0 +1,82 @@ +using UnityEngine; +using System.Collections; + +namespace ParticlePlayground { + + /// + /// The Particle Playground Multi Recorder enables playback and scrubbing of multiple recorded synchronized particle systems. + /// + public class PlaygroundMultiRecorder : MonoBehaviour { + + /// + /// The Particle Playground Recorders you wish to record/playback from. + /// + public PlaygroundRecorder[] playgroundRecorders; + + public void StartRecording (float frameIntervalInSeconds) + { + for (int i = 0; i + /// The Particle Playground Recorder enables playback and scrubbing of recorded particles. + /// The method used is storing built-in particle arrays as keyframes, then interpolate between current keyframe and next upon playback. + /// + /// Usage: + /// Drag the PlaygroundRecorder.cs onto a particle system you wish to record. + /// Use StartRecording(float keyframeInterval) to start record the particle system then StopRecording() to stop. + /// Use RecordOneFrame() to add a recorded frame, use InsertOneFrame(int frame) to insert a recorded frame. + /// To replay a recording use Play(float fromNormalizedTime, float speed, bool repeat) then Stop() to stop. This is essentially the same as using Scrub() with an increasing time step. + /// Use Pause() to pause during replay. + /// Use Scrub() to scrub to a normalized time (where all recorded frames are measured between 0f to 1f). + /// + [ExecuteInEditMode()] + public class PlaygroundRecorder : MonoBehaviour { + + /// + /// Determines if the particle playback and serialization should run asynchronously on another thread. + /// + public bool multithreading = true; + /// + /// The interval between keyframes while recording. + /// + public float keyframeInterval = .1f; + /// + /// The speed of the playback. Set this to a negative value to make the playback go backwards. + /// + public float playbackSpeed = 1f; + /// + /// The current position of the playhead (scrubber). + /// + public float playHead = 0; + /// + /// Determines if the playback should loop when reaching the end of the recording. + /// + public bool loopPlayback = true; + /// + /// Determines if playback particles should fade in at appearance. This will interpolate from birth color with 0 alpha to the upcoming keyframe's color. + /// + public bool fadeIn = true; + /// + /// Determines if playback particles should grow from 0 size at appearance. This will interpolate from 0 size to the upcoming keyframe's size. + /// + public bool sizeIn = true; + /// + /// Determines if interpolation should be skipped on a recorded end-frame. This will make the playback let particles instantly jump/cut to the next recorded frame. + /// + public bool skipInterpolationOnEndFrames = true; + /// + /// Determines if the particle system should switch simulation space to local upon playback. This enabled you to move the recording around freely in the scene based on its transform. + /// + public bool localSpaceOnPlayback = true; + + + /// + /// The playground system to record and playback into. + /// + [HideInInspector] public PlaygroundParticlesC playgroundSystem; + /// + /// The recorded data for serialization (data storage). + /// + [HideInInspector] public PlaygroundRecorderData recorderData; + /// + /// The list of recorded frames. Each frame has its own list of particle data, where playback will interpolate between these based on the playhead. + /// + [NonSerialized] public List recordedFrames; + + private bool _inPlayback = false; + private bool _isReplaying = false; + private bool _isRecording = false; + private bool _hasRecorderData = false; + private bool _hasPlaygroundSystem = false; + private bool _hasEditedRecordData = false; + private float _recordingStarted; + private float _lastRecordedFrameTime; + private int _recordingStartFrame; + private int _recordingEndFrame; + private ParticleSystem.Particle[] _playbackParticles; + private ParticleSystemSimulationSpace _previousSimulationSpace; + + private object locker = new object(); + + + /**************************************************************************** + Monobehaviours + ****************************************************************************/ + + void OnEnable () + { + if (playgroundSystem == null) + playgroundSystem = GetComponent(); + if (Application.isPlaying && recordedFrames == null) + { + if (recorderData != null) + { + _hasRecorderData = true; + if (multithreading) + LoadAsync(); + else + Load(); + } + else + { + recordedFrames = new List(); + _hasEditedRecordData = true; + } + } + + _hasPlaygroundSystem = playgroundSystem != null; + } + + void OnDisable () + { + if (!_hasPlaygroundSystem) + return; + playgroundSystem.inPlayback = false; + playgroundSystem.calculate = false; + } + + + /**************************************************************************** + Public functions + ****************************************************************************/ + + /// + /// Determines if this Playground Recorder has recorded frames. + /// + /// true if this Playground Recorder has recorded frames; otherwise, false. + public bool HasRecordedFrames () + { + return recordedFrames!=null && recordedFrames.Count>0; + } + + /// + /// Determines if this Playground Recorder is recording. + /// + /// true if this Playground Recorder is recording; otherwise, false. + public bool IsRecording () + { + return _isRecording; + } + + /// + /// Determines if this Playground Recorder is currently replaying recorded data. + /// + /// true if this Playground Recorder is replaying; otherwise, false. + public bool IsReplaying () + { + return _isReplaying; + } + + /// + /// Determines whether this Playground Recorder is in playback mode (_isReplaying can be in a stopped state but _inPlayback can still be true). + /// + /// true if this Playground Recorder is in playback; otherwise, false. + public bool IsInPlayback () + { + return _inPlayback; + } + + /// + /// Returns the amount of recorded frames. + /// + /// The number of recorded frames. + public int FrameCount () + { + if (recordedFrames == null) + return -1; + return recordedFrames.Count-1<0? 0 : recordedFrames.Count-1; + } + + /// + /// Gets the frame at normalized time. This is always a floored value to the closest frame of the normalizedTime. + /// + /// The frame at time. + /// Normalized time. + public int GetFrameAtTime (float normalizedTime) + { + if (recordedFrames == null || recordedFrames.Count==0) + return 0; + return Mathf.Clamp (Mathf.FloorToInt((recordedFrames.Count-1) * Mathf.Clamp01(normalizedTime)), 0, recordedFrames.Count-1); + } + + /// + /// Gets the floating frame number at normalized time. Example: Passing in normalizedTime of 0.5 and total FrameCount is 3, the floating frame would return 1.5. + /// + /// The floating frame at time. + /// Normalized time. + public float GetFloatingFrameAtTime (float normalizedTime) + { + if (recordedFrames == null || recordedFrames.Count<1) + return 0; + + return (recordedFrames.Count-1) * Mathf.Clamp01(normalizedTime); + } + + /// + /// Gets the normalized time at specified recorded frame. + /// + /// The normalized time at frame. + /// The recorded frame. + public float GetTimeAtFrame (int frame) + { + frame = Mathf.Clamp (frame, 0, recordedFrames.Count); + return (frame*1f)/(recordedFrames.Count-1); + } + + /// + /// Gets the keyframe interval at specified frame. + /// + /// The keyframe interval at frame. + /// Frame. + public float GetKeyframeIntervalAtFrame (int frame) + { + if (recordedFrames==null || frame<0 || frame>=recordedFrames.Count) + return 0; + return recordedFrames[frame].keyframeInterval; + } + + /// + /// Returns when the recording started using Time.realtimeSinceStartup. + /// + /// The started. + public float RecordingStarted () + { + return _recordingStarted; + } + + /// + /// Gets the time (real time since startup) when the last frame was recorded. + /// + /// The last recorded frame time. + public float GetLastRecordedFrameTime () + { + return _lastRecordedFrameTime; + } + + /// + /// Starts a recording until StopRecording() is called. This overload will by default use the previously set keyframe interval during recording. + /// + public void StartRecording () + { + if (playgroundSystem == null) + return; + playgroundSystem.inPlayback = false; + if (_isRecording) + StopRecording(); + _isRecording = true; + _isReplaying = false; + _inPlayback = false; + _recordingStarted = Time.realtimeSinceStartup; + + if (Application.isPlaying) + StartCoroutine (RecordInternal(keyframeInterval)); + + } + + /// + /// Starts a recording until StopRecording() is called. This overload takes a keyframe interval as parameter. + /// + /// The Keyframe Interval determines the rate of created keyframes (measured in seconds where 1f is 1 second). + public void StartRecording (float keyframeInterval) + { + this.keyframeInterval = keyframeInterval; + StartRecording(); + } + + /// + /// Starts a recording with specified length or until StopRecording() is called. This overload takes a recording length and keyframe interval as parameter. + /// + /// The amount of seconds the recording should be. + /// The Keyframe Interval determines the rate of created keyframes (measured in seconds where 1f is 1 second). + public void StartRecording (float recordingLength, float keyframeInterval) + { + if (playgroundSystem == null) + return; + StartCoroutine(StartRecordingInternal(recordingLength, keyframeInterval)); + } + + /// + /// Records one frame. This can be useful if you want exact control of when keyframes should be created. + /// + public void RecordOneFrame () + { + RecFrame(); + } + + /// + /// Inserts a recorded frame into the specified frame index. This can be useful if you want to add frames into the recording that shouldn't be placed last. Use FrameCount() to determine how many frames you currently have. + /// + /// The index of where the frame should be inserted. + /// The type of the inserted frame (by default FrameType.Middle). + public void InsertOneFrame (int frame, FrameType frameType = FrameType.Middle) + { + InsertRecFrame(frame, frameType); + } + + /// + /// Stops the ongoing recording. + /// + public void StopRecording () + { + if (_isRecording) + { + _isRecording = false; + _recordingEndFrame = recordedFrames.Count-1; + CancelInvoke("RecFrame"); + + if (recordedFrames.Count > 0) + { + _recordingStartFrame = Mathf.Clamp (_recordingStartFrame, 0, recordedFrames.Count); + _recordingEndFrame = Mathf.Clamp (_recordingEndFrame, 0, recordedFrames.Count); + recordedFrames[_recordingStartFrame].frameType = FrameType.Start; + recordedFrames[_recordingEndFrame].frameType = FrameType.End; + } + } + } + + /// + /// Clears out the current recorded frames. + /// + public void ClearRecording () + { + _isReplaying = false; + StopRecording(); + StopPlayback(); + + recordedFrames = null; + recordedFrames = new List(); + if (recorderData != null) + recorderData.Clear(); + _hasEditedRecordData = true; + + _recordingStartFrame = 0; + _recordingEndFrame = 0; + + if (_hasPlaygroundSystem) + { + playgroundSystem.inPlayback = false; + playgroundSystem.calculate = false; + } + } + + /// + /// Starts the playback of this Playground Recorder. + /// + public void Play () + { + Play (playHead, playbackSpeed, loopPlayback); + } + + /// + /// Starts the playback of this Playground Recorder with specified playback speed. + /// + /// The speed of the playback. + public void Play (float speed) + { + playbackSpeed = speed; + Play (playHead, speed, loopPlayback); + } + + /// + /// Starts the playback of this Playground Recorder with specified starting point, playback speed and if looping should occur. + /// + /// From normalized time in recording. + /// The speed of the playback. + /// If set to true then enable looping. + public void Play (float fromNormalizedTime, float speed, bool repeat) + { + if (!_hasPlaygroundSystem) + return; + if (!_isReplaying && localSpaceOnPlayback) + { + _previousSimulationSpace = playgroundSystem.shurikenParticleSystem.simulationSpace; + playgroundSystem.shurikenParticleSystem.simulationSpace = ParticleSystemSimulationSpace.Local; + } + + playgroundSystem.inPlayback = true; + playbackSpeed = speed; + loopPlayback = repeat; + playHead = fromNormalizedTime; + _isReplaying = true; + StopRecording(); + StartPlayback(); + + if (playHead >= 1f) + playHead = 0; + + if (Application.isPlaying) + StartCoroutine(PlayRecordedFrames(playHead)); + } + + /// + /// Pauses the playback of this Playground Recorder. + /// + public void Pause () + { + if (!_hasPlaygroundSystem) + return; + playgroundSystem.inPlayback = true; + _isReplaying = false; + if (_isRecording) + StopRecording(); + StartPlayback(); + } + + /// + /// Stops the playback and recording of this Playground Recorder. + /// + public void Stop () + { + if (!_hasPlaygroundSystem) + return; + if (_isReplaying && localSpaceOnPlayback) + playgroundSystem.shurikenParticleSystem.simulationSpace = _previousSimulationSpace; + playgroundSystem.inPlayback = false; + _isReplaying = false; + if (_isRecording) + StopRecording(); + StopPlayback(); + } + + /// + /// Stops the playback and recording of this Playground Recorder and serializes data into Recorder Data. If multithreading is enabled then the serialization will be asynchronous. + /// + public void StopAndSerialize () + { + if (!_hasPlaygroundSystem) + return; + playgroundSystem.inPlayback = false; + _isReplaying = false; + if (_isRecording) + { + StopRecording(); + Serialize(); + } + StopPlayback(); + } + + /// + /// Serializes the current recorded frames into the Recorder Data. If multithreading is enabled then the serialization will be asynchronous. + /// + public void Serialize () + { + if (_hasRecorderData && _hasEditedRecordData) + { + if (multithreading) + recorderData.SerializeAsync(recordedFrames); + else + recorderData.Serialize(recordedFrames); + + _hasEditedRecordData = false; + } + } + + /// + /// Loads frames from the Recorder Data. + /// + public void Load () + { + if (recorderData != null) + { + recordedFrames = recorderData.CloneAsRecordedFrames(); + _hasEditedRecordData = true; + } + else + Debug.Log ("No Playground Recorder Data to load from!", gameObject); + } + + /// + /// Loads frames from the Recorder Data asynchronously. + /// + public void LoadAsync () + { + if (recorderData == null) + { + Debug.Log ("No Playground Recorder Data to load from!", gameObject); + return; + } + PlaygroundC.RunAsync(() => { + recordedFrames = recorderData.CloneAsRecordedFrames(); + _hasEditedRecordData = true; + }); + } + + /// + /// Scrub to specified time in particle recording. This will linearly interpolate between the closest recorded frames of the passed in time (normalized between 0f - 1f). + /// + /// The normalized time (0f to 1f). + public void Scrub (float normalizedTime) + { + if (!HasRecordedFrames()) + return; + if (_isRecording) + StopRecording(); + if (!_inPlayback) + StartPlayback(); + if (multithreading) + PlaygroundC.RunAsync(() => { + lock (locker) + { + ScrubInternal(normalizedTime); + } + }); + else + ScrubInternal (normalizedTime); + } + + /// + /// Trims (remove) the specified frames outside of normalized leftTime to rightTime. Returns true if trimming occurred. + /// + /// The normalized left time (0 - 1). + /// The normalized right time (0 - 1). + public bool Trim (float leftTime, float rightTime) + { + if (recordedFrames.Count == 0) + return false; + + int leftFrame = GetFrameAtTime(leftTime); + int rightFrame = GetFrameAtTime(rightTime); + bool didTrim = false; + + if (leftFrame>0) + { + recordedFrames.RemoveRange(0, leftFrame); + didTrim = true; + } + if (rightFrame + /// Trims (removes) the specified frames inside of normalized leftTime to rightTime. + /// + /// The normalized left time (0 - 1). + /// The normalized right time (0 - 1). + public void TrimInner (float leftTime, float rightTime) + { + if (recordedFrames.Count == 0) + return; + + int leftFrame = GetFrameAtTime(leftTime); + int rightFrame = GetFrameAtTime(rightTime); + + recordedFrames.RemoveRange(leftFrame, rightFrame-leftFrame); + + _hasEditedRecordData = true; + Serialize(); + } + + /// + /// Sets the particle system's live particles at the current position in playback (using the playhead) of this Playground Recorder. If multithreading is enabled this operation will run asynchronously. + /// + public void SetParticleSystemAsCurrentPlayback () + { + SetParticleSystemAsRecording (playHead); + } + + /// + /// Sets the particle system's live particles at normalized time of the recorded frames. If multithreading is enabled this operation will run asynchronously. + /// + public void SetParticleSystemAsRecording (float normalizedTime) + { + if (playgroundSystem == null || _playbackParticles==null) + return; + if (multithreading) + { + PlaygroundC.RunAsync(() => { + lock (locker) + { + SetParticleSystemAsRecordingInternal(normalizedTime); + } + }); + } + else + { + SetParticleSystemAsRecordingInternal(normalizedTime); + } + } + + + /**************************************************************************** + Internal functions + ****************************************************************************/ + +#if UNITY_EDITOR + float lastFrameTime; + void Update () + { + _hasPlaygroundSystem = playgroundSystem != null; + _hasRecorderData = recorderData != null; + if (!_hasRecorderData) + _hasEditedRecordData = true; + + // Enables recording in Editor non Play-mode + if (!Application.isPlaying) + { + if (_isRecording) + { + if (Time.realtimeSinceStartup >= _lastRecordedFrameTime + keyframeInterval) + RecFrame(); + } + else if (_isReplaying) + { + playHead += (playbackSpeed/(FrameCount()*keyframeInterval))*(Time.realtimeSinceStartup-lastFrameTime); + if (playHead>1f) + playHead = 1f; + else if (playHead<0) + playHead = 0; + + Scrub (playHead); + + if (playHead == 1f) + { + if (loopPlayback) + playHead = 0; + else + _isReplaying = false; + } + else if (playHead == 0) + { + if (loopPlayback) + playHead = 1f; + else + _isReplaying = false; + } + } + } + lastFrameTime = Time.realtimeSinceStartup; + } +#endif + + void RecFrame () { + if (!_isRecording) + return; + if (!playgroundSystem.calculate) + { + CancelInvoke ("RecFrame"); + return; + } + _lastRecordedFrameTime = Time.realtimeSinceStartup; + if (playgroundSystem.particleCache != null) + { + if (recordedFrames == null) + recordedFrames = new List(); + recordedFrames.Add (new RecordedFrame(playgroundSystem, keyframeInterval)); + _hasEditedRecordData = true; + } + } + + void InsertRecFrame (int frame, FrameType frameType) { + if (playgroundSystem.particleCache != null) + { + if (recordedFrames == null) + recordedFrames = new List(); + recordedFrames.Insert (frame, new RecordedFrame(playgroundSystem, keyframeInterval)); + recordedFrames[frame].frameType = frameType; + _hasEditedRecordData = true; + } + } + + void StartPlayback () + { + if (!_inPlayback && recordedFrames!=null && recordedFrames.Count>0 && playgroundSystem!=null) + { + _inPlayback = true; + playgroundSystem.calculate = false; + playgroundSystem.inPlayback = true; + if (recordedFrames[0].particles != null) + _playbackParticles = (ParticleSystem.Particle[])recordedFrames[0].CloneAsParticles(); + StartCoroutine (Playback()); + } + } + + void StopPlayback () + { + _inPlayback = false; + if (_hasPlaygroundSystem) + { + playgroundSystem.calculate = true; + } + } + + void ScrubInternal (float normalizedTime) + { + // Set time parameters + normalizedTime = Mathf.Clamp01(normalizedTime); + int normalizedFrame = GetFrameAtTime(normalizedTime); + + // Interpolation skipping if this is an end-frame + if (skipInterpolationOnEndFrames && normalizedTime < 1f && recordedFrames[normalizedFrame].frameType == FrameType.End) + { + normalizedTime = Mathf.Clamp01(normalizedTime + (GetTimeAtFrame(normalizedFrame+1)-normalizedTime)); + playHead = normalizedTime; + normalizedFrame = GetFrameAtTime(normalizedTime); + } + + int targetFrame = Mathf.Clamp (normalizedFrame+1, 0, recordedFrames.Count); + int rebirthRotationFrame = Mathf.Clamp (targetFrame+1, 0, recordedFrames.Count); + + // Set live particles in case the length doesn't add up + if (_playbackParticles == null || _playbackParticles.Length != recordedFrames[normalizedFrame].particles.Length) + { + if (recordedFrames[normalizedFrame].particles != null) + _playbackParticles = (ParticleSystem.Particle[])recordedFrames[normalizedFrame].CloneAsParticles(); + else return; + } + + // No need to interpolate + if (normalizedFrame >= recordedFrames.Count-1 || normalizedTime == 0 && !loopPlayback) + return; + + // Delta time is the time between the normalized frame and next based on normalized time +// float deltaTime = Mathf.Lerp (0, (recordedFrames.Count-1)*1f, normalizedTime)%1f; + float deltaTime = 1f-(targetFrame-(GetFloatingFrameAtTime(normalizedTime))); + + // Set particle values + for (int i = 0; i<_playbackParticles.Length; i++) + { + // If particle is between death/birth blend in differently + if (recordedFrames[normalizedFrame].particles[i].lifetime < recordedFrames[targetFrame].particles[i].lifetime) + { + Color32 inColor = fadeIn? new Color32(recordedFrames[normalizedFrame].particles[i].color.r, recordedFrames[normalizedFrame].particles[i].color.g, recordedFrames[normalizedFrame].particles[i].color.b, 0) : new Color32(); + _playbackParticles[i].position = Vector3.Lerp (recordedFrames[normalizedFrame].particles[i].sourcePosition, recordedFrames[targetFrame].particles[i].position, deltaTime); +#if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + _playbackParticles[i].size = Mathf.Lerp (!sizeIn? recordedFrames[normalizedFrame].particles[i].startingSize : 0, recordedFrames[targetFrame].particles[i].size, deltaTime); + _playbackParticles[i].color = Color.Lerp (!fadeIn? recordedFrames[normalizedFrame].particles[i].color : inColor, recordedFrames[targetFrame].particles[i].color, deltaTime); +#else + _playbackParticles[i].startSize = Mathf.Lerp (!sizeIn? recordedFrames[normalizedFrame].particles[i].startingSize : 0, recordedFrames[targetFrame].particles[i].size, deltaTime); + _playbackParticles[i].startColor = Color.Lerp (!fadeIn? recordedFrames[normalizedFrame].particles[i].color : inColor, recordedFrames[targetFrame].particles[i].color, deltaTime); +#endif + _playbackParticles[i].rotation = Mathf.Lerp (recordedFrames[targetFrame].particles[i].rotation - (recordedFrames[rebirthRotationFrame].particles[i].rotation * deltaTime), recordedFrames[targetFrame].particles[i].rotation, deltaTime); + } + + // ...otherwise interpolate + else + { + _playbackParticles[i].position = Vector3.Lerp (recordedFrames[normalizedFrame].particles[i].position, recordedFrames[targetFrame].particles[i].position, deltaTime); +#if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + _playbackParticles[i].size = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].size, recordedFrames[targetFrame].particles[i].size, deltaTime); + _playbackParticles[i].color = Color.Lerp (recordedFrames[normalizedFrame].particles[i].color, recordedFrames[targetFrame].particles[i].color, deltaTime); +#else + _playbackParticles[i].startSize = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].size, recordedFrames[targetFrame].particles[i].size, deltaTime); + _playbackParticles[i].startColor = Color.Lerp (recordedFrames[normalizedFrame].particles[i].color, recordedFrames[targetFrame].particles[i].color, deltaTime); +#endif + _playbackParticles[i].rotation = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].rotation, recordedFrames[targetFrame].particles[i].rotation, deltaTime); + _playbackParticles[i].lifetime = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].lifetime, recordedFrames[targetFrame].particles[i].lifetime, deltaTime); + } + + } + } + + void SetParticleSystemAsRecordingInternal (float normalizedTime) + { + normalizedTime = Mathf.Clamp01(normalizedTime); + int normalizedFrame = GetFrameAtTime(normalizedTime); + int targetFrame = Mathf.Clamp (normalizedFrame+1, 0, recordedFrames.Count-1); + float deltaTime = 1f-(targetFrame-(GetFloatingFrameAtTime(normalizedTime))); + + float tStamp = recordedFrames[normalizedFrame].timeStamp; + float currentTime = PlaygroundC.globalTime; + + int pCount = playgroundSystem.playgroundCache.position.Length; + + for (int i = 0; i<_playbackParticles.Length; i++) + { + playgroundSystem.playgroundCache.position[i%pCount] = Vector3.Lerp (recordedFrames[normalizedFrame].particles[i].position, recordedFrames[targetFrame].particles[i].position, deltaTime); + playgroundSystem.playgroundCache.velocity[i%pCount] = Vector3.Lerp (recordedFrames[normalizedFrame].particles[i].velocity, recordedFrames[targetFrame].particles[i].velocity, deltaTime); + playgroundSystem.playgroundCache.size[i%pCount] = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].size, recordedFrames[targetFrame].particles[i].size, deltaTime); + playgroundSystem.playgroundCache.color[i%pCount] = Color.Lerp (recordedFrames[normalizedFrame].particles[i].color, recordedFrames[targetFrame].particles[i].color, deltaTime); + playgroundSystem.playgroundCache.rotation[i%pCount] = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].rotation, recordedFrames[targetFrame].particles[i].rotation, deltaTime); + playgroundSystem.playgroundCache.life[i%pCount] = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].playgroundLife, recordedFrames[targetFrame].particles[i].playgroundLife, deltaTime); + playgroundSystem.playgroundCache.lifetimeSubtraction[i%pCount] = Mathf.Lerp (recordedFrames[normalizedFrame].particles[i].playgroundLifetimeSubtraction, recordedFrames[targetFrame].particles[i].playgroundLifetimeSubtraction, deltaTime); + + playgroundSystem.playgroundCache.birth[i%pCount] = currentTime + (recordedFrames[normalizedFrame].particles[i].playgroundStartLifetime-tStamp); + playgroundSystem.playgroundCache.death[i%pCount] = currentTime + (recordedFrames[normalizedFrame].particles[i].playgroundEndLifetime-tStamp); + } + + playgroundSystem.localTime = currentTime; + playgroundSystem.LastTimeUpdated = currentTime; + playgroundSystem.LocalDeltaTime = .001f; + playgroundSystem.cameFromNonCalculatedFrame = false; + playgroundSystem.cameFromNonEmissionFrame = false; + playgroundSystem.loopExceeded = false; + playgroundSystem.loopExceededOnParticle = -1; + playgroundSystem.hasActiveParticles = true; + + StopAndSerialize(); + } + + + /**************************************************************************** + Internal enumerators + ****************************************************************************/ + + IEnumerator StartRecordingInternal (float recordingLength, float keyframeInterval) + { + _isReplaying = false; + _inPlayback = false; + _isRecording = true; + playgroundSystem.inPlayback = false; + StartCoroutine(RecordInternal(keyframeInterval)); + yield return new WaitForSeconds(recordingLength); + StopRecording(); + } + + IEnumerator RecordInternal (float keyframeInterval) + { + _recordingStartFrame = recordedFrames.Count>0? recordedFrames.Count-1 : 0; + while (_isRecording) + { + RecFrame(); + yield return new WaitForSeconds(keyframeInterval); + } + } + + IEnumerator Playback () + { + while (_inPlayback) + { + if (_playbackParticles != null) + playgroundSystem.shurikenParticleSystem.SetParticles(_playbackParticles, _playbackParticles.Length); + yield return null; + } + } + + IEnumerator PlayRecordedFrames (float fromNormalizedTime) + { + float t = fromNormalizedTime; + while (_isReplaying) + { + t += (playbackSpeed/(FrameCount()*keyframeInterval))*Time.deltaTime; + if (t>1f) + t = 1f; + else if (t<0) + t = 0; + + Scrub (t); + + if (t == 1f) + { + if (loopPlayback) + t = 0; + else + _isReplaying = false; + } + else if (t == 0) + { + if (loopPlayback) + t = 1f; + else + _isReplaying = false; + } + playHead = t; + yield return null; + } + } + } + + /// + /// A Playback Particle is a struct for keeping information about one single particle in a Playground Recorder's recorded data. + /// + public struct PlaybackParticle + { + [HideInInspector] public Vector3 position; + [HideInInspector] public Vector3 velocity; + [HideInInspector] public float rotation; + [HideInInspector] public float size; + [HideInInspector] public float lifetime; + [HideInInspector] public float startLifetime; + [HideInInspector] public float playgroundLife; + [HideInInspector] public float playgroundStartLifetime; + [HideInInspector] public float playgroundEndLifetime; + [HideInInspector] public float playgroundLifetimeSubtraction; + [HideInInspector] public Color32 color; + + [HideInInspector] public Vector3 sourcePosition; + [HideInInspector] public float startingSize; + + public PlaybackParticle (Vector3 position, + Vector3 velocity, + float rotation, + float size, + float lifetime, + float startLifetime, + float playgroundLife, + float playgroundStartLifetime, + float playgroundEndLifetime, + float playgroundLifetimeSubtraction, + Color32 color, + + Vector3 sourcePosition, + float startingSize + ) + { + this.position = position; + this.velocity = velocity; + this.rotation = rotation; + this.size = size; + this.lifetime = lifetime; + this.startLifetime = startLifetime; + this.playgroundLife = playgroundLife; + this.playgroundStartLifetime = playgroundStartLifetime; + this.playgroundEndLifetime = playgroundEndLifetime; + this.playgroundLifetimeSubtraction = playgroundLifetimeSubtraction; + this.color = color; + + this.sourcePosition = sourcePosition; + this.startingSize = startingSize; + } + + public ParticleSystem.Particle CloneAsParticle (bool includeVelocity = false) + { + ParticleSystem.Particle particle = new ParticleSystem.Particle(); + particle.position = position; + particle.rotation = rotation; + particle.lifetime = lifetime; + particle.startLifetime = startLifetime; +#if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + particle.size = size; + particle.color = color; +#else + particle.startSize = size; + particle.startColor = color; +#endif + + if (includeVelocity) + particle.velocity = velocity; + + return particle; + } + + public SerializedParticle CloneAsSerializedParticle () + { + SerializedParticle particle = new SerializedParticle( + position, + velocity, + rotation, + size, + lifetime, + startLifetime, + playgroundLife, + playgroundStartLifetime, + playgroundEndLifetime, + playgroundLifetimeSubtraction, + color, + + sourcePosition, + startingSize + ); + return particle; + } + + public PlaybackParticle Clone () + { + PlaybackParticle particle = new PlaybackParticle( + position, + velocity, + rotation, + size, + lifetime, + startLifetime, + playgroundLife, + playgroundStartLifetime, + playgroundEndLifetime, + playgroundLifetimeSubtraction, + color, + + sourcePosition, + startingSize + ); + return particle; + } + } + + /// + /// A frame type describes where in the total recording the recorded frame was made. + /// + public enum FrameType + { + /// + /// The frame was created at the start of recording. + /// + Start, + /// + /// The frame was created at the middle of recording. + /// + Middle, + /// + /// The frame was created at the end of recording. + /// + End + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundRecorder.cs.meta b/Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundRecorder.cs.meta new file mode 100644 index 0000000..dd729d8 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/PlaygroundRecorder.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 862e30d6db16744f0b75c4c2b1a6418c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts.meta b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts.meta new file mode 100644 index 0000000..6c7ed89 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fb029d4f11194b9488546682b95a95f5 +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor.meta b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor.meta new file mode 100644 index 0000000..202f9e1 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 307516dc12f418a49a2fc0045bfc9dde +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs new file mode 100644 index 0000000..2956e7a --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs @@ -0,0 +1,294 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Collections.Generic; +using ParticlePlayground; +using ParticlePlaygroundLanguage; + +[CustomEditor (typeof(PlaygroundRecorder))] +public class PlaygroundRecorderInspector : Editor { + + // References + PlaygroundRecorder recorder; + + // GUI + public static GUIStyle boxStyle; + public static PlaygroundSettingsC playgroundSettings; + public static PlaygroundLanguageC playgroundLanguage; + + // Trimming + private bool _inTrimming; + private float _leftTrimPos = 0; + private float _rightTrimPos = 1f; + private bool _leftWasLastMoved = true; + + void OnEnable () + { + // Set references + recorder = target as PlaygroundRecorder; + + // Load settings + playgroundSettings = PlaygroundSettingsC.GetReference(); + + // Load language + playgroundLanguage = PlaygroundSettingsC.GetLanguage(); + + // Load data + if (recorder.recorderData != null) + recorder.LoadAsync(); + else + recorder.recordedFrames = new List(); + } + + public override void OnInspectorGUI () + { + if (boxStyle==null) + boxStyle = GUI.skin.FindStyle("box"); + + bool hasParticleSystem = recorder.playgroundSystem != null; + if (!hasParticleSystem) + EditorGUILayout.HelpBox(playgroundLanguage.missingParticleSystemWarning, MessageType.Warning); + bool hasRecorderData = recorder.recorderData != null; + + EditorGUILayout.BeginVertical (boxStyle); + playgroundSettings.playgroundRecorderFoldout = GUILayout.Toggle(playgroundSettings.playgroundRecorderFoldout, playgroundLanguage.playgroundRecorder, EditorStyles.foldout); + if (playgroundSettings.playgroundRecorderFoldout) + { + EditorGUILayout.BeginVertical (boxStyle); + + // Playback & Recorder foldout + if (GUILayout.Button(playgroundLanguage.player, EditorStyles.toolbarDropDown)) playgroundSettings.recorderPlaybackFoldout=!playgroundSettings.recorderPlaybackFoldout; + if (playgroundSettings.recorderPlaybackFoldout) + { + EditorGUILayout.Separator(); + if (!hasRecorderData) + { + EditorGUILayout.BeginVertical(boxStyle); + EditorGUILayout.HelpBox(playgroundLanguage.missingRecorderDataWarning, MessageType.Warning); + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button(playgroundLanguage.createNew, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + PlaygroundRecorderData newData = CreateNewRecorderDataDialogue(); + if (newData!=null) + recorder.recorderData = newData; + } + recorder.recorderData = (PlaygroundRecorderData)EditorGUILayout.ObjectField(recorder.recorderData, typeof(PlaygroundRecorderData), false); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + EditorGUILayout.Separator(); + } + + + EditorGUILayout.BeginHorizontal(); + + GUI.enabled = !recorder.IsRecording() && hasParticleSystem && recorder.HasRecordedFrames(); + if (GUILayout.Button (recorder.IsReplaying()? playgroundLanguage.pauseSymbol : playgroundLanguage.playSymbol, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + if (recorder.IsReplaying()) + recorder.Pause(); + else + recorder.Play(recorder.playHead, recorder.playbackSpeed, recorder.loopPlayback); + } + GUI.enabled = hasParticleSystem && recorder.HasRecordedFrames(); + + if (GUILayout.Button (playgroundLanguage.stopSymbol, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + if (recorder.IsInPlayback()) + recorder.SetParticleSystemAsCurrentPlayback(); + else + { + recorder.StopAndSerialize(); + recorder.playHead = 0; + } + } + + GUI.enabled = hasParticleSystem; + + if (recorder.IsRecording()) + GUI.color = Color.red; + + GUILayout.Space(4f); + + if (GUILayout.Button (playgroundLanguage.recordSymbol, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + if (!recorder.IsRecording()) + recorder.StartRecording(); + else + { + recorder.StopAndSerialize(); + recorder.playHead = 0; + } + } + + GUI.color = Color.white; + + GUI.enabled = recorder.HasRecordedFrames() && hasParticleSystem; + if (GUILayout.Button (playgroundLanguage.clear, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + if (EditorUtility.DisplayDialog(playgroundLanguage.clearRecording, playgroundLanguage.clearRecordingMsg, playgroundLanguage.yes, playgroundLanguage.no)) + recorder.ClearRecording(); + } + + GUILayout.FlexibleSpace(); + + _inTrimming = GUILayout.Toggle (_inTrimming, playgroundLanguage.trim, EditorStyles.toolbarButton); + + GUI.enabled = true; + + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Separator(); + + GUI.enabled = recorder.HasRecordedFrames(); + + float currentPlayHead = recorder.playHead; + + if (!_inTrimming) + recorder.playHead = EditorGUILayout.Slider(playgroundLanguage.playHeadPosition, recorder.playHead, 0, 1f); + else + { + GUILayout.BeginHorizontal(); + EditorGUILayout.Separator(); + if (GUILayout.Button (playgroundLanguage.trimOuter, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + string framesRemoved = "[0-"+recorder.GetFrameAtTime(_leftTrimPos)+"] - ["+recorder.GetFrameAtTime(_rightTrimPos)+"-"+recorder.FrameCount()+"]"; + if (EditorUtility.DisplayDialog(playgroundLanguage.trim, playgroundLanguage.trimMsg+framesRemoved+"?", playgroundLanguage.yes, playgroundLanguage.no)) + if (recorder.Trim(_leftTrimPos, _rightTrimPos)) + { + _leftTrimPos = 0; + _rightTrimPos = 1f; + } + } + if (GUILayout.Button (playgroundLanguage.trimInner, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + string framesRemoved = "["+recorder.GetFrameAtTime(_leftTrimPos)+"-"+recorder.GetFrameAtTime(_rightTrimPos)+"]"; + if (EditorUtility.DisplayDialog(playgroundLanguage.trim, playgroundLanguage.trimMsg+framesRemoved+"?", playgroundLanguage.yes, playgroundLanguage.no)) + { + recorder.TrimInner(_leftTrimPos, _rightTrimPos); + _leftTrimPos = 0; + _rightTrimPos = 1f; + } + } + GUILayout.EndHorizontal(); + + float l = _leftTrimPos; + float r = _rightTrimPos; + EditorGUILayout.MinMaxSlider(ref _leftTrimPos, ref _rightTrimPos, 0, 1f); + + + if (!Mathf.Approximately(_leftTrimPos, l)) + _leftWasLastMoved = true; + if (!Mathf.Approximately(_rightTrimPos, r)) + _leftWasLastMoved = false; + + if (!recorder.IsReplaying()) + recorder.playHead = _leftWasLastMoved? _leftTrimPos : _rightTrimPos; + else + _leftWasLastMoved = true; + + if (recorder.playHead >= _rightTrimPos && recorder.IsReplaying()) + recorder.playHead = _leftTrimPos; + if (recorder.playHead < _leftTrimPos && recorder.IsReplaying() && recorder.playbackSpeed>0) + recorder.playHead = _leftTrimPos; + if (recorder.playHead <= _leftTrimPos && (!_leftWasLastMoved || recorder.IsReplaying() && recorder.playbackSpeed<0)) + recorder.playHead = _rightTrimPos; + } + + if (currentPlayHead != recorder.playHead) + recorder.Scrub (recorder.playHead); + + string playbackStatus = "No Recording"; + string playbackData = ""; + float recordedSeconds = ((recorder.FrameCount()*1f) * recorder.keyframeInterval) / recorder.playbackSpeed; + + if (_inTrimming) + { + playbackStatus = "TRIMMING"; + GUI.color = Color.yellow; + } + else if (recorder.IsRecording()) + { + playbackStatus = "RECORDING"; + GUI.color = Color.red; + } + else if (recorder.IsInPlayback()) + { + playbackStatus = "In Playback"; + GUI.color = Color.green; + } + else if (!recorder.IsInPlayback() && recorder.HasRecordedFrames()) + { + playbackStatus = "Live Particles"; + GUI.color = Color.cyan; + } + if (recorder.HasRecordedFrames() && recorder.IsInPlayback()) + { + if (_inTrimming) + playbackData = " (Left: " + recorder.GetFrameAtTime(_leftTrimPos) + " | Right: " + recorder.GetFrameAtTime(_rightTrimPos) + ")"; + else if (!recorder.IsRecording()) + playbackData = " (" + (recordedSeconds*recorder.playHead).ToString("F1") + "/" + recordedSeconds.ToString("F1") + " s)"; + else if (!_inTrimming) + playbackData = " (" + (recordedSeconds).ToString("F1") + " s)"; + } + PlaybackBar(recorder.HasRecordedFrames()? (recorder.IsRecording()? 1f : recorder.playHead) : 0, playbackStatus + playbackData, Screen.width - 56f); + + GUI.color = Color.white; + GUI.backgroundColor = Color.white; + GUILayout.Space (-10f); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("Time: " + (recorder.HasRecordedFrames()?(recordedSeconds*recorder.playHead).ToString("F1") + " / " + recordedSeconds.ToString("F1") + " s" + " (" + recorder.playbackSpeed.ToString("F1") + "x)" : "-"), EditorStyles.objectFieldThumb, GUILayout.Width ((Screen.width/2f)-30f)); + EditorGUILayout.LabelField("Frame: " + (recorder.HasRecordedFrames()?recorder.GetFrameAtTime(recorder.playHead).ToString() + " / " + recorder.FrameCount() : "-"), EditorStyles.objectFieldThumb, GUILayout.Width ((Screen.width/2f)-30f)); + EditorGUILayout.EndHorizontal(); + + GUI.enabled = true; + + EditorGUILayout.Separator(); + } + + // Advanced foldout + if (GUILayout.Button(playgroundLanguage.advanced, EditorStyles.toolbarDropDown)) playgroundSettings.recorderAdvancedFoldout=!playgroundSettings.recorderAdvancedFoldout; + if (playgroundSettings.recorderAdvancedFoldout) + { + EditorGUILayout.Separator(); + recorder.playgroundSystem = (PlaygroundParticlesC)EditorGUILayout.ObjectField(playgroundLanguage.particleSystem, recorder.playgroundSystem, typeof(PlaygroundParticlesC), true); + recorder.recorderData = (PlaygroundRecorderData)EditorGUILayout.ObjectField(playgroundLanguage.recorderData, recorder.recorderData, typeof(PlaygroundRecorderData), false); + recorder.keyframeInterval = EditorGUILayout.FloatField(playgroundLanguage.keyframeInterval, recorder.keyframeInterval); + recorder.playbackSpeed = EditorGUILayout.FloatField(playgroundLanguage.playbackSpeed, recorder.playbackSpeed); + recorder.loopPlayback = GUILayout.Toggle (recorder.loopPlayback, playgroundLanguage.loop); + recorder.fadeIn = GUILayout.Toggle (recorder.fadeIn, playgroundLanguage.fadeIn); + recorder.sizeIn = GUILayout.Toggle (recorder.sizeIn, playgroundLanguage.sizeIn); + recorder.skipInterpolationOnEndFrames = GUILayout.Toggle (recorder.skipInterpolationOnEndFrames, playgroundLanguage.skipInterpolationOnEndFrames); + recorder.localSpaceOnPlayback = GUILayout.Toggle (recorder.localSpaceOnPlayback, playgroundLanguage.setLocalSpaceOnPlayback); + recorder.multithreading = GUILayout.Toggle (recorder.multithreading, playgroundLanguage.multithreading); + EditorGUILayout.Separator(); + } + + EditorGUILayout.EndVertical(); + } + + EditorGUILayout.EndVertical(); + } + + public void PlaybackBar (float val, string label, float width) { + Rect rect = GUILayoutUtility.GetRect (18, 18, "TextField"); + rect.width = width; + rect.height = 16; + if (val<0) val = 0; + EditorGUI.ProgressBar (rect, val, label); + EditorGUILayout.Space (); + } + + public static PlaygroundRecorderData CreateNewRecorderDataDialogue () + { + string dataPath = EditorUtility.SaveFilePanelInProject(playgroundLanguage.newPlaygroundRecording, "PlaygroundRecording", "asset", playgroundLanguage.newPlaygroundRecordingMsg); + if (dataPath.Length>0) + { + PlaygroundRecorderData newData = PlaygroundRecorderData.New(); + AssetDatabase.CreateAsset(newData, dataPath); + AssetDatabase.Refresh(); + + return newData; + } + return null; + } +} diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs.meta b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs.meta new file mode 100644 index 0000000..8970c7c --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/Editor/PlaygroundRecorderInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 18629149a4cb64676be45a3a0031828a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs new file mode 100644 index 0000000..10c8235 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs @@ -0,0 +1,40 @@ +#if UNITY_WSA && !UNITY_EDITOR +#else +using UnityEngine; +using System; +using System.IO; +using System.IO.Compression; +using System.Runtime.Serialization.Formatters.Binary; +using System.Collections; + +namespace ParticlePlayground { + public class PlaygroundCompression + { + public static byte[] SerializeAndCompress(object obj) + { + using (MemoryStream ms = new MemoryStream()) + { + using (GZipStream zs = new GZipStream(ms, CompressionMode.Compress, true)) + { + BinaryFormatter bf = new BinaryFormatter(); + bf.Serialize(zs, obj); + } + + return ms.ToArray(); + } + } + + public static T DecompressAndDeserialize(byte[] data) + { + using (MemoryStream ms = new MemoryStream(data)) + { + using (GZipStream zs = new GZipStream(ms, CompressionMode.Decompress, true)) + { + BinaryFormatter bf = new BinaryFormatter(); + return (T) bf.Deserialize(zs); + } + } + } + } +} +#endif diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs.meta b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs.meta new file mode 100644 index 0000000..3d2dffc --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundCompression.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9ea72fd6ac8fa4185a40b701662e4bbb +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs new file mode 100644 index 0000000..24ca5f3 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using ParticlePlayground; + +[Serializable] +public class PlaygroundRecorderData : ScriptableObject +{ + [HideInInspector] public float version; + public SerializedFrame[] serializedFrames; + + public void Serialize (List recordedFrames) + { + version = PlaygroundC.version; + serializedFrames = null; + serializedFrames = new SerializedFrame[recordedFrames.Count]; + for (int i = 0; i recordedFrames) + { + version = PlaygroundC.version; + PlaygroundC.RunAsync(() => { + serializedFrames = null; + serializedFrames = new SerializedFrame[recordedFrames.Count]; + for (int i = 0; i CloneAsRecordedFrames () + { + if (serializedFrames == null) + return null; + List recordedFrames = new List(); + for (int i = 0; i(); + return newData; + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs.meta b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs.meta new file mode 100644 index 0000000..3905da9 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/PlaygroundRecorderData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c8586836ef5a445d4b801f769230e702 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/RecordedFrame.cs b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/RecordedFrame.cs new file mode 100644 index 0000000..989473c --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/RecordedFrame.cs @@ -0,0 +1,93 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace ParticlePlayground { + /// + /// The RecordedFrame class contain information of a single frame of recorded particles for the Playground Recorder's recorded data. + /// + [Serializable] + public class RecordedFrame { + /// + /// The array of particle data. PlaybackParticle is a struct and therefore not serialized due to performance. + /// + [HideInInspector] public PlaybackParticle[] particles; + /// + /// The time during simulation this frame was made. + /// + [HideInInspector] public float timeStamp; + /// + /// The keyframe interval setting when this frame was made. + /// + [HideInInspector] public float keyframeInterval; + /// + /// The type of this frame (FrameType.Start, FrameType.Middle or FrameType.End). + /// + [HideInInspector] public FrameType frameType = FrameType.Middle; + + public RecordedFrame () {} + + public RecordedFrame (PlaygroundParticlesC playgroundParticles, float keyframeInterval) { + particles = new PlaybackParticle[playgroundParticles.particleCache.Length]; + for (int i = 0; i + /// A serialized frame holds information about one recorded frame of particles. + /// + [Serializable] + public class SerializedFrame + { + /// + /// The array of particle data. + /// + public SerializedParticle[] serializedParticles; + /// + /// The time during simulation this frame was made. + /// + public float timeStamp; + /// + /// The keyframe interval setting when this frame was made. + /// + public float keyframeInterval; + /// + /// The type of this frame (FrameType.Start, FrameType.Middle or FrameType.End). + /// + public FrameType frameType = FrameType.Middle; + + public RecordedFrame CloneAsRecordedFrame () + { + RecordedFrame recordedFrame = new RecordedFrame(); + recordedFrame.particles = CloneAsPlaybackParticles(); + recordedFrame.keyframeInterval = keyframeInterval; + recordedFrame.timeStamp = timeStamp; + recordedFrame.frameType = frameType; + return recordedFrame; + } + + public PlaybackParticle[] CloneAsPlaybackParticles () + { + PlaybackParticle[] recordedParticles = new PlaybackParticle[serializedParticles.Length]; + for (int i = 0; i + /// A serialized particle holds information for one single serializable particle inside a recorded frame for the Playground Recorder's recorded data. + /// + [Serializable] + public class SerializedParticle + { + public Vector3 position; + public Vector3 velocity; + public float rotation; + public float size; + public float lifetime; + public float startLifetime; + public float playgroundLife; + public float playgroundStartLifetime; + public float playgroundEndLifetime; + public float playgroundLifetimeSubtraction; + public Color32 color; + + public Vector3 sourcePosition; + public float startingSize; + + public SerializedParticle (Vector3 position, + Vector3 velocity, + float rotation, + float size, + float lifetime, + float startLifetime, + float playgroundLife, + float playgroundStartLifetime, + float playgroundEndLifetime, + float playgroundLifetimeSubtraction, + Color32 color, + + Vector3 sourcePosition, + float startingSize + ) + { + this.position = position; + this.velocity = velocity; + this.rotation = rotation; + this.size = size; + this.lifetime = lifetime; + this.startLifetime = startLifetime; + this.playgroundLife = playgroundLife; + this.playgroundStartLifetime = playgroundStartLifetime; + this.playgroundEndLifetime = playgroundEndLifetime; + this.playgroundLifetimeSubtraction = playgroundLifetimeSubtraction; + this.color = color; + + this.sourcePosition = sourcePosition; + this.startingSize = startingSize; + } + + public PlaybackParticle CloneAsPlaybackParticle () + { + PlaybackParticle particle = new PlaybackParticle( + position, + velocity, + rotation, + size, + lifetime, + startLifetime, + playgroundLife, + playgroundStartLifetime, + playgroundEndLifetime, + playgroundLifetimeSubtraction, + color, + + sourcePosition, + startingSize + ); + return particle; + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/SerializedParticle.cs.meta b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/SerializedParticle.cs.meta new file mode 100644 index 0000000..fc3a2b0 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Recorder/Scripts/SerializedParticle.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0ed99384141a34198b4a872162f33568 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Splines.meta b/Assets/Particle Playground/Extensions/Playground Splines.meta new file mode 100644 index 0000000..a6b25b4 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b248ca5b01a7c4140b1506e64e18065e +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Splines/Editor.meta b/Assets/Particle Playground/Extensions/Playground Splines/Editor.meta new file mode 100644 index 0000000..77689c1 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ea1c64bb5c0b49d409932c31a1af37c3 +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs b/Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs new file mode 100644 index 0000000..f96ea37 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs @@ -0,0 +1,520 @@ +using UnityEditor; +using UnityEngine; +using System.Collections.Generic; +using PlaygroundSplines; +using ParticlePlayground; +using ParticlePlaygroundLanguage; + +[CustomEditor(typeof(PlaygroundSpline))] +public class PlaygroundSplineInspector : Editor { + + private const int stepsPerCurve = 10; + private const float directionScale = 0.5f; + private const float handleSize = 0.04f; + private const float pickSize = 0.06f; + + private PlaygroundSpline spline; + private Transform handleTransform; + private Quaternion handleRotation; + private Quaternion bezierHandleRotation; + private int selectedIndex = -1; + private int selectedNode = -1; + private int selectedBezier = -1; + private bool selectedIndexIsNode; + private UnityEditor.Tool lastActiveTool = UnityEditor.Tool.None; + + public static PlaygroundSettingsC playgroundSettings; + public static PlaygroundLanguageC playgroundLanguage; + public static GUIStyle boxStyle; + + void OnEnable () { + spline = target as PlaygroundSpline; + + playgroundSettings = PlaygroundSettingsC.GetReference(); + playgroundLanguage = PlaygroundSettingsC.GetLanguage(); + + lastActiveTool = UnityEditor.Tools.current; + + UpdateUserList(); + } + + void OnDisable () { + UnityEditor.Tools.current = lastActiveTool; + } + + void UpdateUserList () { + + // Check that any user isn't null + for (int i = 0; i().splines.Contains(spline)) { + spline.usedBy.RemoveAt (i); + i--; + } + } + } + + public override void OnInspectorGUI () { + if (boxStyle==null) + boxStyle = GUI.skin.FindStyle("box"); + + EditorGUILayout.BeginVertical(boxStyle); + playgroundSettings.playgroundSplineFoldout = GUILayout.Toggle(playgroundSettings.playgroundSplineFoldout, playgroundLanguage.playgroundSpline, EditorStyles.foldout); + if (playgroundSettings.playgroundSplineFoldout) { + + selectedNode = (selectedIndex+1)/3; + selectedBezier = selectedIndex<3?0:(((selectedIndex)%3))%2; + selectedIndexIsNode = selectedIndex==0||selectedIndex%3==0; + + EditorGUILayout.Separator(); + + bool currentLoop = spline.Loop; + GUI.enabled = spline.NodeCount>1; + bool loop = EditorGUILayout.Toggle(playgroundLanguage.loop, spline.Loop); + GUI.enabled = true; + spline.reverse = EditorGUILayout.Toggle(playgroundLanguage.reverse, spline.reverse); + spline.timeOffset = EditorGUILayout.Slider (playgroundLanguage.timeOffset, spline.timeOffset, 0, 1f); + spline.positionOffset = EditorGUILayout.Vector3Field (playgroundLanguage.positionOffset, spline.positionOffset); + + EditorGUILayout.Separator(); + EditorGUILayout.BeginVertical(boxStyle); + if (selectedIndex < spline.ControlPointCount) { + DrawSelectedPointInspector(); + } + if (currentLoop!=loop) { + Undo.RecordObject(spline, "Toggle Loop"); + EditorUtility.SetDirty(spline); + spline.Loop = loop; + } + EditorGUILayout.EndVertical(); + + // List of nodes + if (GUILayout.Button(playgroundLanguage.nodes+" ("+(spline.NodeCount+1)+")", EditorStyles.toolbarDropDown)) playgroundSettings.nodesFoldout=!playgroundSettings.nodesFoldout; + if (playgroundSettings.nodesFoldout) { + + EditorGUILayout.Separator(); + + EditorGUILayout.BeginVertical(boxStyle, GUILayout.MinHeight(26)); + for (int i = 0; i<=spline.NodeCount; i++) { + if (i==selectedNode && selectedIndex>-1) GUI.backgroundColor = new Color(1f,1f,.2f); + EditorGUILayout.BeginVertical(boxStyle); + GUI.backgroundColor = Color.white; + EditorGUILayout.BeginHorizontal(); + + // Node + if (i==selectedNode && selectedIndexIsNode) + EditorGUILayout.LabelField("", EditorStyles.foldout, GUILayout.Width(14)); + else if (i==selectedNode && selectedIndex!=-1) GUILayout.Space (19f); + if (GUILayout.Button(playgroundLanguage.node+" "+i+" ("+spline.GetControlPointMode(i*3).ToString()+")", EditorStyles.label, GUILayout.MaxWidth(130))) + selectedIndex = SelectIndex(i*3); + GUILayout.Space(3f); + if (GUILayout.Button(spline.transformNodes[i*3].enabled?playgroundLanguage.transform:playgroundLanguage.vector3, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))){ + spline.transformNodes[i*3].enabled = !spline.transformNodes[i*3].enabled; + } + + EditorGUI.BeginChangeCheck(); + EditorGUIUtility.labelWidth = 1f; + Vector3 point; + if (spline.transformNodes[i*3].enabled) { + spline.transformNodes[i*3].transform = (Transform)EditorGUILayout.ObjectField(spline.transformNodes[i*3].transform, typeof(Transform), true); + if (spline.transformNodes[i*3].IsAvailable()) + point = spline.transformNodes[i*3].GetPosition(); + else point = spline.GetControlPoint(i*3); + } else point = EditorGUILayout.Vector3Field(" ", spline.GetControlPoint(i*3)); + + EditorGUIUtility.labelWidth = 0; + if (EditorGUI.EndChangeCheck()) { + Undo.RecordObject(spline, "Move Point"); + EditorUtility.SetDirty(spline); + spline.SetControlPoint(i*3, point); + } + if(GUILayout.Button(playgroundLanguage.upSymbol, EditorStyles.toolbarButton, new GUILayoutOption[]{GUILayout.Width(18), GUILayout.Height(16)})){ + + } + if(GUILayout.Button(playgroundLanguage.downSymbol, EditorStyles.toolbarButton, new GUILayoutOption[]{GUILayout.Width(18), GUILayout.Height(16)})){ + + } + EditorGUI.BeginChangeCheck(); + if (GUILayout.Button("+", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + Undo.RecordObject(spline, "Add Node"); + spline.AddNode(i); + EditorUtility.SetDirty(spline); + selectedIndex = SelectIndex((i+1)*3); + } + GUI.enabled = (!spline.Loop&&spline.NodeCount>1||spline.Loop&&spline.NodeCount>2); + EditorGUI.BeginChangeCheck(); + if (GUILayout.Button("-", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + Undo.RecordObject(spline, "Remove Node"); + spline.RemoveNode(i); + EditorUtility.SetDirty(spline); + selectedIndex-=3; + if (selectedIndex<0) + selectedIndex = SelectIndex(0); + return; + } + GUI.enabled = true; + EditorGUILayout.EndHorizontal(); + + if (i==selectedNode && selectedIndex>-1) { + + int thisBez; + + // Bezier 0 + if (selectedNode>0) { + thisBez = selectedNode>0?(i*3)-1:(spline.NodeCount*3)-1; + EditorGUILayout.BeginHorizontal(); + if (selectedBezier==0 && !selectedIndexIsNode) + EditorGUILayout.LabelField("", EditorStyles.foldout, GUILayout.Width(14)); + else GUILayout.Space (19f); + if (GUILayout.Button(playgroundLanguage.bezier+" 0", EditorStyles.label, GUILayout.MaxWidth(133))) + selectedIndex = SelectIndex(thisBez); + EditorGUI.BeginChangeCheck(); + EditorGUIUtility.labelWidth = 1f; + if (GUILayout.Button(spline.transformNodes[thisBez].enabled?playgroundLanguage.transform:playgroundLanguage.vector3, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))){ + spline.transformNodes[thisBez].enabled = !spline.transformNodes[thisBez].enabled; + } + if (spline.transformNodes[thisBez].enabled) { + spline.transformNodes[thisBez].transform = (Transform)EditorGUILayout.ObjectField(spline.transformNodes[thisBez].transform, typeof(Transform), true); + if (spline.transformNodes[thisBez].IsAvailable()) + point = spline.transformNodes[thisBez].GetPosition(); + else point = spline.GetControlPoint(thisBez); + } else point = EditorGUILayout.Vector3Field(" ", spline.GetControlPoint(thisBez)); + + GUILayout.Space (35f); + if (EditorGUI.EndChangeCheck()) { + Undo.RecordObject(spline, "Move Point"); + EditorUtility.SetDirty(spline); + spline.SetControlPoint(selectedNode>0?(i*3)-1:(spline.NodeCount*3)-1, point); + } + EditorGUILayout.EndHorizontal(); + EditorGUIUtility.labelWidth = 0; + } + + // Bezier 1 + if (selectedNode0?playgroundLanguage.bezier+" 1":playgroundLanguage.bezier+" 0", EditorStyles.label, GUILayout.MaxWidth(133))) + selectedIndex = SelectIndex(thisBez); + EditorGUI.BeginChangeCheck(); + EditorGUIUtility.labelWidth = 1f; + if (GUILayout.Button(spline.transformNodes[thisBez].enabled?playgroundLanguage.transform:playgroundLanguage.vector3, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))){ + spline.transformNodes[thisBez].enabled = !spline.transformNodes[thisBez].enabled; + } + if (spline.transformNodes[thisBez].enabled) { + spline.transformNodes[thisBez].transform = (Transform)EditorGUILayout.ObjectField(spline.transformNodes[thisBez].transform, typeof(Transform), true); + if (spline.transformNodes[thisBez].IsAvailable()) + point = spline.transformNodes[thisBez].GetPosition(); + else point = spline.GetControlPoint(thisBez); + } else point = EditorGUILayout.Vector3Field(" ", spline.GetControlPoint(thisBez)); + GUILayout.Space (35f); + if (EditorGUI.EndChangeCheck()) { + Undo.RecordObject(spline, "Move Point"); + EditorUtility.SetDirty(spline); + spline.SetControlPoint(thisBez, point); + } + EditorGUILayout.EndHorizontal(); + EditorGUIUtility.labelWidth = 0; + } + } + EditorGUILayout.EndVertical(); + } + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button(playgroundLanguage.create, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + Undo.RecordObject(spline, "Add Node"); + selectedNode = spline.NodeCount; + spline.AddNode(selectedNode); + EditorUtility.SetDirty(spline); + selectedIndex = SelectIndex((selectedNode+1)*3); + } + EditorGUILayout.Separator(); + if (GUILayout.Button(playgroundLanguage.convertAllToTransforms, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + Transform pTrans = new GameObject("Nodes").transform; + pTrans.parent = spline.splineTransform; + pTrans.localPosition = Vector3.zero; + Transform[] transforms = spline.ExportToTransforms(); + spline.positionOffset = Vector3.zero; + for (int i = 0; i0) { + EditorGUILayout.BeginVertical(boxStyle, GUILayout.MinHeight(26)); + for (int i = 0; i(); + Undo.RecordObjects(new Object[]{spline,ps}, "Remove User"); + if (ps!=null) { + Transform user = spline.usedBy[i]; + if (ps.splines.Contains(spline)) { + spline.RemoveUser (user); + ps.splines.Remove(spline); + } + foreach (ManipulatorObjectC m in ps.manipulators) { + ManipulatorPropertyC mp = m.property; + if (mp.splineTarget!=null && mp.splineTarget==spline) + spline.RemoveUser (user); + foreach (ManipulatorPropertyC mps in m.properties) + if (mps.splineTarget!=null && mps.splineTarget==spline) + spline.RemoveUser (user); + } + } + } + } + EditorGUILayout.EndHorizontal(); + } + EditorGUILayout.EndVertical(); + } else { + EditorGUILayout.HelpBox(playgroundLanguage.noSplineUserMessage, MessageType.Info); + } + } + + // Advanced + if (GUILayout.Button(playgroundLanguage.advanced, EditorStyles.toolbarDropDown)) playgroundSettings.splineAdvancedFoldout=!playgroundSettings.splineAdvancedFoldout; + if (playgroundSettings.splineAdvancedFoldout) { + EditorGUILayout.Separator(); + spline.fixedVelocityOnNewNode = EditorGUILayout.FloatField (playgroundLanguage.velocityOnNewNode, spline.fixedVelocityOnNewNode); + spline.moveTransformsAsBeziers = EditorGUILayout.Toggle (playgroundLanguage.moveTransformsAsBeziers, spline.moveTransformsAsBeziers); + spline.exportWithNodeStructure = EditorGUILayout.Toggle (playgroundLanguage.exportWithNodeStructure, spline.exportWithNodeStructure); + EditorGUILayout.Separator(); + spline.drawGizmo = EditorGUILayout.Toggle (playgroundLanguage.drawBezierGizmo, spline.drawGizmo); + spline.bezierWidth = EditorGUILayout.FloatField (playgroundLanguage.bezierWidth, spline.bezierWidth); + if (spline.bezierWidth<0) spline.bezierWidth = 0; + } + } + EditorGUILayout.EndVertical(); + SceneView.RepaintAll(); + } + + private void DrawSelectedPointInspector() { + if (selectedIndex>=spline.ControlPointCount) selectedIndex = SelectIndex(spline.ControlPointCount-1); + EditorGUILayout.PrefixLabel(playgroundLanguage.selection); + EditorGUILayout.BeginHorizontal(boxStyle); + if (GUILayout.Button(playgroundLanguage.spline, EditorStyles.label, GUILayout.ExpandWidth(false))) { + selectedIndex = SelectIndex(-1); + SceneView.RepaintAll(); + } + if (selectedIndex>=0) { + GUILayout.Label(">", EditorStyles.label, GUILayout.MaxWidth(16)); + if (GUILayout.Button(playgroundLanguage.node+" "+selectedNode.ToString(), EditorStyles.label, GUILayout.ExpandWidth(false))) { + selectedIndex = SelectIndex(selectedNode*3); + } + } + if (selectedIndex>=0 && !selectedIndexIsNode) { + GUILayout.Label(">", EditorStyles.label, GUILayout.MaxWidth(16)); + GUILayout.Label(playgroundLanguage.bezier+" "+selectedBezier.ToString(), EditorStyles.label, GUILayout.ExpandWidth(false)); + } + if (selectedIndex>=0) { + if (spline.transformNodes[selectedIndex].IsAvailable()) { + if (GUILayout.Button(" ("+playgroundLanguage.transform+") ", EditorStyles.label, GUILayout.ExpandWidth(false))) + Selection.activeTransform = spline.transformNodes[selectedIndex].transform; + } else { + GUILayout.Label(" ("+playgroundLanguage.vector3+")", EditorStyles.label, GUILayout.ExpandWidth(false)); + } + } + EditorGUILayout.Separator(); + if (GUILayout.Button ("<", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + selectedIndex = SelectIndex(selectedIndex-1); + if (selectedIndex<0) + selectedIndex = SelectIndex(spline.ControlPointCount-1); + } + if (GUILayout.Button (">", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + selectedIndex = SelectIndex(selectedIndex+1); + if (selectedIndex>spline.ControlPointCount-1) + selectedIndex = SelectIndex(0); + } + EditorGUILayout.EndHorizontal(); + EditorGUI.BeginChangeCheck(); + + // A node or bezier is selected + if (selectedIndex>=0) { + Vector3 point = EditorGUILayout.Vector3Field(playgroundLanguage.position, spline.GetControlPoint(selectedIndex)); + if (EditorGUI.EndChangeCheck()) { + Undo.RecordObject(spline, "Move Point"); + EditorUtility.SetDirty(spline); + spline.SetControlPoint(selectedIndex, point); + } + EditorGUI.BeginChangeCheck(); + PlaygroundSplines.BezierControlPointMode mode = (PlaygroundSplines.BezierControlPointMode)EditorGUILayout.EnumPopup(playgroundLanguage.bezierMode, spline.GetControlPointMode(selectedIndex)); + if (EditorGUI.EndChangeCheck()) { + Undo.RecordObject(spline, "Change Point Mode"); + spline.SetControlPointMode(selectedIndex, mode); + EditorUtility.SetDirty(spline); + } + } + + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button(playgroundLanguage.addNode, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + Undo.RecordObject(spline, "Add Node"); + if (selectedIndex<0) selectedNode = spline.NodeCount; + spline.AddNode(selectedNode); + EditorUtility.SetDirty(spline); + selectedIndex = SelectIndex((selectedNode+1)*3); + } + EditorGUILayout.Separator(); + GUI.enabled = (!spline.Loop&&spline.NodeCount>1||spline.Loop&&spline.NodeCount>2); + if (GUILayout.Button(playgroundLanguage.removeSelectedNode, EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { + Undo.RecordObject(spline, "Remove Node"); + spline.RemoveNode(selectedNode); + EditorUtility.SetDirty(spline); + selectedIndex-=3; + if (selectedIndex<0) + selectedIndex = SelectIndex(0); + } + EditorGUILayout.EndHorizontal(); + GUI.enabled = true; + } + + private int SelectIndex (int newIndex) { + if (newIndex>-1) + UnityEditor.Tools.current = UnityEditor.Tool.None; + else UnityEditor.Tools.current = lastActiveTool; + selectedNode = (newIndex+1)/3; + selectedBezier = newIndex<3?0:(((newIndex)%3))%2; + selectedIndexIsNode = newIndex==0||newIndex%3==0; + return newIndex; + } + + private int foldoutHeight = 0; + private bool toolboxFoldout = true; + private bool callForAddNode = false; + private bool callForRemoveNode = false; + private void OnSceneGUI () { + + callForAddNode = (selectedIndex>-1 && Event.current.control && !Event.current.shift && Event.current.type==EventType.mouseUp); + callForRemoveNode = (selectedIndex>-1 && Event.current.control && Event.current.shift && Event.current.type==EventType.mouseUp); + + handleTransform = spline.transform; + handleRotation = UnityEditor.Tools.pivotRotation == PivotRotation.Local ? handleTransform.rotation : Quaternion.identity; + bezierHandleRotation = Camera.current.transform.rotation; + + Event e = Event.current; + if (toolboxFoldout) + if (selectedIndex<0) + foldoutHeight = 68; + else foldoutHeight = 120; + else + foldoutHeight = 0; + Rect toolboxRect = new Rect(10f,Screen.height-(70f+foldoutHeight),300f,103f+foldoutHeight); + + // Don't deselect upon click + if (toolboxFoldout && e.type == EventType.Layout) { + HandleUtility.AddDefaultControl(0); + } + + // Toolbox + Handles.BeginGUI(); + GUILayout.BeginArea(toolboxRect); + if (boxStyle==null) + boxStyle = GUI.skin.FindStyle("box"); + GUILayout.BeginVertical(boxStyle); + toolboxFoldout = GUILayout.Toggle(toolboxFoldout, playgroundLanguage.playgroundSpline, EditorStyles.foldout); + if (toolboxFoldout) { + DrawSelectedPointInspector(); + } + GUILayout.EndVertical(); + GUILayout.EndArea(); + Handles.EndGUI(); + + Vector3 p0 = ShowPoint(0); + for (int i = 1; i < spline.ControlPointCount; i += 3) { + Vector3 p1 = ShowPoint(i); + Vector3 p2 = ShowPoint(i + 1); + Vector3 p3 = ShowPoint(i + 2); + + Handles.color = new Color(1f,.8f,0f); + Handles.DrawLine(p0, p1); + Handles.DrawLine(p2, p3); + + p0 = p3; + } + + if (callForAddNode) { + Undo.RecordObject(spline, "Add Node"); + spline.AddNode(selectedNode); + EditorUtility.SetDirty(spline); + selectedIndex = SelectIndex((selectedNode+1)*3); + } + if (callForRemoveNode) { + Undo.RecordObject(spline, "Remove Node"); + spline.RemoveNode(selectedNode); + EditorUtility.SetDirty(spline); + if (selectedIndex>=spline.ControlPointCount) + selectedIndex = SelectIndex(spline.ControlPointCount-1); + } + } + + private void ShowDirections () { + Handles.color = Color.green; + Vector3 point = spline.GetPoint(0f); + Handles.DrawLine(point, point + spline.GetDirection(0f) * directionScale); + int steps = stepsPerCurve * spline.NodeCount; + for (int i = 1; i <= steps; i++) { + point = spline.GetPoint(i / (float)steps); + Handles.DrawLine(point, point + spline.GetDirection(i / (float)steps) * directionScale); + } + } + + private Vector3 ShowPoint (int index) { + Vector3 pointWithOffset = spline.transformNodes[index].IsAvailable()? spline.GetPoint(index)+spline.positionOffset : handleTransform.TransformPoint(spline.GetInversePoint(index)+spline.positionOffset); + float size = HandleUtility.GetHandleSize(pointWithOffset); + if (index == 0 && spline.Loop) { + size *= 2f; + } + Handles.color = new Color(1f,.5f,0f); + if ((index==0||index%3==0)) { + if (Handles.Button(pointWithOffset, handleRotation, size * handleSize, size * pickSize, Handles.DotCap)) { + selectedIndex = SelectIndex(index); + Repaint(); + } + } else { + if (Handles.Button(pointWithOffset, bezierHandleRotation, size * handleSize, size * pickSize, Handles.CircleCap)) { + selectedIndex = SelectIndex(index); + Repaint(); + } + } + + if (selectedIndex == index) { + EditorGUI.BeginChangeCheck(); + pointWithOffset = Handles.DoPositionHandle(pointWithOffset, handleRotation); + if (EditorGUI.EndChangeCheck()) { + Undo.RecordObject(spline, "Move Point"); + EditorUtility.SetDirty(spline); + spline.SetControlPoint(index, spline.transformNodes[index].IsAvailable()?pointWithOffset:handleTransform.InverseTransformPoint(pointWithOffset), spline.positionOffset); + } + } + return pointWithOffset; + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs.meta b/Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs.meta new file mode 100644 index 0000000..fabd0fd --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines/Editor/PlaygroundSplineInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 213dc41afb5744746a7e99b5b709b841 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs new file mode 100644 index 0000000..c6be62a --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs @@ -0,0 +1,762 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +/// +/// Collection of methods for working with splines. +/// This is based on the great learning tutorial Curves and Splines by Jasper Flick. +/// +/// References: +/// http://catlikecoding.com/unity/tutorials/curves-and-splines/ +/// http://answers.unity3d.com/questions/374333/positioning-an-object-on-a-spline-relative-to-play.html +/// +namespace PlaygroundSplines { + + /// + /// Holds information about a spline and contains functions for working with the nodes and bezier handles. + /// + [ExecuteInEditMode()] + public class PlaygroundSpline : MonoBehaviour { + /// + /// The list of nodes and bezier handles making the spline. + /// + [SerializeField] + private List points = new List(); + /// + /// The modes of the bezier handles. + /// + [SerializeField] + private List modes = new List(); + /// + /// Determines if the spline is looping. + /// + [SerializeField] + private bool loop; + + /// + /// The list of transform nodes to set positions live of an existing node. + /// + [HideInInspector] public List transformNodes = new List(); + /// + /// Determines if the spline time should be reversed. If you'd like to physically reverse the arrays making the spline then call ReverseAllNodes(). + /// + [HideInInspector] public bool reverse; + /// + /// The time offset of the spline. + /// + [HideInInspector] public float timeOffset; + /// + /// The position offset of the spline in relation to its transform. + /// + [HideInInspector] public Vector3 positionOffset; + + [HideInInspector] public Transform splineTransform; + [HideInInspector] public Matrix4x4 splineTransformMx; + [HideInInspector] public List usedBy = new List(); + [HideInInspector] public float fixedVelocityOnNewNode = .5f; + [HideInInspector] public bool moveTransformsAsBeziers = false; + [HideInInspector] public bool exportWithNodeStructure = false; + + // Gizmos + public static bool drawSplinePreviews = true; + [HideInInspector] public bool drawGizmo = true; + [HideInInspector] public float bezierWidth = 2f; + + #if UNITY_EDITOR + void OnDrawGizmos () { + if (drawSplinePreviews && drawGizmo) { + Color innerBezier = new Color(1f,1f,1f,1f); + Color outerBezier = new Color(.5f,.5f,0,.2f); + Vector3 p0 = ShowPoint(0); + for (int i = 1; i < ControlPointCount; i += 3) { + Vector3 p1 = ShowPoint(i); + Vector3 p2 = ShowPoint(i + 1); + Vector3 p3 = ShowPoint(i + 2); + UnityEditor.Handles.DrawBezier(p0, p3, p1, p2, innerBezier, null, bezierWidth); + UnityEditor.Handles.DrawBezier(p0, p3, p1, p2, outerBezier, null, bezierWidth*10f); + p0 = p3; + } + } + } + Vector3 ShowPoint (int index) { + return transformNodes[index].IsAvailable()? GetPoint(index)+positionOffset : splineTransform.TransformPoint(GetInversePoint(index)+positionOffset); + } + #endif + + Vector3 previousPosition; + Quaternion previousRotation; + Vector3 previousScale; + bool isReady; + + public bool IsReady () { + return isReady; + } + + /// + /// Adds a user to the spline. This helps keeping track of which objects are using the spline. + /// + /// true, if user was added, false otherwise. + /// . + public bool AddUser (Transform thisTransform) { + if (!usedBy.Contains(thisTransform)) { + usedBy.Add (thisTransform); + return true; + } + return false; + } + + /// + /// Removes a user from the spline. This helps keeping track of which objects are using the spline. + /// + /// true, if user was removed, false otherwise. + /// . + public bool RemoveUser (Transform thisTransform) { + if (usedBy.Contains(thisTransform)) { + usedBy.Remove (thisTransform); + return true; + } + return false; + } + + /// + /// Determines whether this spline has the user of passed in transform. + /// + /// true if this spline has the user of the passed in transform; otherwise, false. + /// This transform. + public bool HasUser (Transform thisTransform) { + return usedBy.Contains (thisTransform); + } + + /// + /// Gets or sets a value indicating whether this is set to loop. + /// + /// true if set to loop; otherwise, false. + public bool Loop { + get { + return loop; + } + set { + loop = value; + if (value == true && NodeCount>1) { + modes[modes.Count - 1] = modes[0]; + SetControlPoint(0, points[0]); + } + } + } + + + /// + /// Gets the control point count. + /// + /// The control point count. + public int ControlPointCount { + get { + return points.Count; + } + } + + /// + /// Gets the control point. + /// + /// The control point. + /// Index. + public Vector3 GetControlPoint (int index) { + return GetPoint(index); + } + + /// + /// Sets the control point and withdraws the offset. + /// + /// Index. + /// Point. + /// Offset. + public void SetControlPoint (int index, Vector3 point, Vector3 offset) { + SetControlPoint(index, point-offset); + } + + /// + /// Sets the control point. + /// + /// Index. + /// Position. + public void SetControlPoint (int index, Vector3 point) { + if (index<0) index = 0; + if (index % 3 == 0) { + Vector3 delta = (point - GetPoint(index)); + Vector3 v; + if (loop) { + if (index == 0) { + //if (!PointHasTransform(1)) + {v = GetPoint(1); SetPoint(1, v+delta);} + //if (!PointHasTransform(points.Count-2)) + {v = GetPoint(points.Count-2); SetPoint(points.Count-2, v+delta);} + if (moveTransformsAsBeziers || !PointHasTransform(points.Count-1)) + {SetPoint(points.Count-1, point);} + } else + if (index == points.Count - 1) { + //if (!PointHasTransform(0)) + {SetPoint(0, point);} + //if (!PointHasTransform(1)) + {v = GetPoint(1); SetPoint(1, v+delta);} + //if (!PointHasTransform(index-1)) + {v = GetPoint(index-1); SetPoint(index-1, v+delta);} + } else { + //if (!PointHasTransform(index-1)) + {v = GetPoint(index-1); SetPoint(index-1, v+delta);} + //if (!PointHasTransform(index+1)) + {v = GetPoint(index+1); SetPoint(index+1, v+delta);} + } + } else { + if (index > 0) { + if (moveTransformsAsBeziers || !PointHasTransform(index-1)) + {v = GetPoint(index-1); SetPoint(index-1, v+delta);} + } + if (index + 1 < points.Count) { + if (moveTransformsAsBeziers || !PointHasTransform(index+1)) + {v = GetPoint(index+1); SetPoint(index+1, v+delta);} + } + } + } + SetPoint(index, point); + EnforceMode(index); + } + + /// + /// Sets all points from an array. Please ensure the same length of your passed in vectors as PlaygroundSpline.ControlPointCount. + /// + /// Vectors. + public void SetPoints (Vector3[] vectors) { + if (vectors.Length!=points.Count) { + Debug.Log ("Please ensure the same length of your passed in vectors ("+vectors.Length+") as the current points ("+points.Count+"). Use PlaygroundSpline.ControlPointCount to get the current count."); + return; + } + for (int i = 0; i + /// Moves the entire spline separate from its transform component. Use this if you'd like to offset the spline from its transform separately from the positionOffset. + /// + /// The amount to move the spline in Units. + public void TranslateSpline (Vector3 translation) { + for (int i = 0; i= points.Count) { + enforcedIndex = 1; + } + } + else { + fixedIndex = middleIndex + 1; + if (fixedIndex >= points.Count) { + fixedIndex = 1; + } + enforcedIndex = middleIndex - 1; + if (enforcedIndex < 0) { + enforcedIndex = points.Count - 2; + } + } + + Vector3 middle = GetPoint(middleIndex); + Vector3 enforcedTangent = middle - GetPoint(fixedIndex); + if (mode == BezierControlPointMode.Aligned) { + enforcedTangent = enforcedTangent.normalized * Vector3.Distance(middle, GetPoint(enforcedIndex)); + } + if (moveTransformsAsBeziers || !PointHasTransform(enforcedIndex)) + SetPoint(enforcedIndex, middle + enforcedTangent); + } + + public int NodeCount { + get { + return (points.Count - 1) / 3; + } + } + + /// + /// Get position from time. + /// + /// The point in world space. + /// Time. + public Vector3 GetPoint (float t) { + int i; + if (reverse) { + t = 1f-t; + t = (t-timeOffset)%1f; + if (t<0) + t = 1f+t; + } else t = (t+timeOffset)%1f; + + if (t >= 1f) { + //t = 1f; + i = points.Count - 4; + } + else { + t = Mathf.Clamp01(t) * NodeCount; + i = (int)t; + t -= i; + i *= 3; + } + return splineTransformMx.MultiplyPoint3x4(Bezier.GetPoint(GetInversePoint(i), GetInversePoint(i + 1), GetInversePoint(i + 2), GetInversePoint(i + 3), t)+positionOffset); + } + + public Vector3 GetVelocity (float t) { + int i; + if (reverse) + t = 1f-t; + t = (t+timeOffset)%1f; + if (t >= 1f) { + t = 1f; + i = points.Count - 4; + } + else { + t = Mathf.Clamp01(t) * NodeCount; + i = (int)t; + t -= i; + i *= 3; + } + return splineTransformMx.MultiplyPoint3x4(Bezier.GetFirstDerivative(GetInversePoint(i), GetInversePoint(i + 1), GetInversePoint(i + 2), GetInversePoint(i + 3), t)+positionOffset) - previousPosition; + } + + /// + /// Get position from node index in the spline. If the node consists of an available transform its position will be returned, otherwise the user-specified Vector3 position. + /// + /// The point in world space. + /// Index. + public Vector3 GetPoint (int index) { + if (transformNodes[index].IsAvailable()) + return transformNodes[index].GetPosition(); + else return points[index]; + } + + public Vector3 GetInversePoint (int index) { + if (transformNodes[index].IsAvailable()) + return transformNodes[index].GetInvsersePosition(); + else return points[index]; + } + + public Vector3 GetPointWorldSpace (int index) { + if (transformNodes[index].IsAvailable()) + return transformNodes[index].GetPosition(); + else return splineTransformMx.MultiplyPoint3x4(points[index]+positionOffset); + } + + /// + /// Sets a point to specified position. + /// + /// Index. + /// Position. + void SetPoint (int index, Vector3 position) { + if (transformNodes[index].IsAvailable()) + transformNodes[index].SetPosition(position); + else points[index] = position; + } + + /// + /// Translates a point. + /// + /// Index. + /// Translation. + void TranslatePoint (int index, Vector3 translation) { + if (transformNodes[index].IsAvailable()) + transformNodes[index].Translate(translation); + else points[index] += translation; + } + + // Calculates the best fitting time in the given interval + private float CPOB(Vector3 aP, float aStart, float aEnd, int aSteps) + { + aStart = Mathf.Clamp01(aStart); + aEnd = Mathf.Clamp01(aEnd); + float step = (aEnd-aStart) / (float)aSteps; + float Res = 0; + float Ref = float.MaxValue; + for (int i = 0; i < aSteps; i++) + { + float t = aStart + step*i; + float L = (GetPoint(t)-aP).sqrMagnitude; + if (L < Ref) + { + Ref = L; + Res = t; + } + } + return Res; + } + + public float ClosestTimeFromPoint (Vector3 aP) { + float t = CPOB(aP, 0, 1, 10); + float delta = 1.0f / 10.0f; + for (int i = 0; i < 4; i++) + { + t = CPOB(aP, t - delta, t + delta, 10); + delta /= 9; + } + return t; + } + + public Vector3 ClosestPointFromPosition (Vector3 aP) { + return GetPoint(ClosestTimeFromPoint(aP)); + } + + public Vector3 GetDirection (float t) { + return (GetPoint(t+.001f)-GetPoint(t)).normalized; + } + + /// + /// Adds a node at the last position of the node index. + /// + public void AddNode () { + AddNode ((points.Count-1)/3); + } + + /// + /// Adds a node at specified node index. + /// + /// Index. + public void AddNode (int index) { + int nodeIndex = index*3; + Vector3 point = GetPoint(nodeIndex); + Vector3 direction; + if (index>0) { + direction = GetPoint(nodeIndex)-GetPoint(nodeIndex-1); + } else direction = GetPoint(nodeIndex+1)-GetPoint(nodeIndex); + + direction*=fixedVelocityOnNewNode; + + points.InsertRange(nodeIndex+1, new Vector3[3]); + point += direction; + points[nodeIndex+2] = point; + point += direction; + points[nodeIndex+1] = point; + point += direction; + points[nodeIndex+3] = point; + + transformNodes.InsertRange(nodeIndex+1, new TransformNode[]{new TransformNode(), new TransformNode(), new TransformNode()}); + + BezierControlPointMode currentIndexMode = modes[index]; + modes.Insert (index, new BezierControlPointMode()); + modes[index] = currentIndexMode; + EnforceMode(index); + + SetControlPoint((index+1)*3, GetPoint((index+1)*3)); + + if (loop) { + points[points.Count - 1] = points[0]; + modes[modes.Count - 1] = modes[0]; + EnforceMode(0); + } + } + + /// + /// Removes the first node in the node index. + /// + public void RemoveFirst () { + RemoveNode(0); + } + + /// + /// Removes the last node in the node index. + /// + public void RemoveLast () { + RemoveNode((points.Count-1)/3); + } + + /// + /// Removes a node at specified node index. + /// + /// Index. + public void RemoveNode (int index) { + index = Mathf.Clamp (index, 0, points.Count-1); + int pointIndex = index*3; + if (points.Count<=4) return; + if (pointIndex0) + SetControlPoint((index-1)*3, GetPoint((index-1)*3)); + else + SetControlPoint(0, GetPoint(0)); + } + + /// + /// Reverses all nodes in the node index. + /// + public void ReverseAllNodes () { + points.Reverse(); + transformNodes.Reverse(); + modes.Reverse(); + } + + public void SwapNodes (int from, int to) { + Vector3[] fromPoints = points.GetRange (from, 3).ToArray(); + Vector3[] toPoints = points.GetRange (to, 3).ToArray(); + TransformNode[] fromTnode = transformNodes.GetRange (from, 3).ToArray(); + TransformNode[] toTnode = transformNodes.GetRange (to, 3).ToArray(); + BezierControlPointMode fromMode = modes[from]; + BezierControlPointMode toMode = modes[to]; + + for (int i = from; i<3; i++) { + points[i] = toPoints[i]; + transformNodes[i] = toTnode[i]; + } + for (int i = to; i<3; i++) { + points[i] = fromPoints[i]; + transformNodes[i] = fromTnode[i]; + } + modes[from] = toMode; + modes[to] = fromMode; + } + + /// + /// Exports all nodes to Transform[]. Enable exportWithNodeStructure to parent each bezier handle to their node. + /// + /// A built-in array of Transforms. + public Transform[] ExportToTransforms () { + Transform[] transforms = new Transform[points.Count]; + for (int i = 0; i + /// Exports all nodes to Vector3[]. + /// + /// A built-in array of Vector3 + public Vector3[] ExportToVector3 () { + Vector3[] vectors = new Vector3[points.Count]; + for (int i = 0; i + /// Reset this Playground Spline. Two nodes and two bezier handles will be created. + /// + public void Reset () { + points = new List { + new Vector3(1f, 0f, 0f), + new Vector3(2f, 0f, 0f), + new Vector3(3f, 0f, 0f), + new Vector3(4f, 0f, 0f) + }; + modes = new List { + BezierControlPointMode.Aligned, + BezierControlPointMode.Aligned + }; + transformNodes = new List { + new TransformNode(), + new TransformNode(), + new TransformNode(), + new TransformNode() + }; + } + + /************************************************************************************************************************************************* + MonoBehaviours + *************************************************************************************************************************************************/ + + void OnEnable () { + isReady = false; + splineTransform = transform; + SetMatrix(); + } + + void Update () { + SetMatrix(); + for (int i = 0; i + /// Class for common bezier operations on a spline. + /// + public static class Bezier { + + public static Vector3 GetPoint (Vector3 p0, Vector3 p1, Vector3 p2, float t) { + t = Mathf.Clamp01(t); + float oneMinusT = 1f - t; + return + oneMinusT * oneMinusT * p0 + + 2f * oneMinusT * t * p1 + + t * t * p2; + } + + public static Vector3 GetFirstDerivative (Vector3 p0, Vector3 p1, Vector3 p2, float t) { + return + 2f * (1f - t) * (p1 - p0) + + 2f * t * (p2 - p1); + } + + public static Vector3 GetPoint (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) { + t = Mathf.Clamp01(t); + float OneMinusT = 1f - t; + return + OneMinusT * OneMinusT * OneMinusT * p0 + + 3f * OneMinusT * OneMinusT * t * p1 + + 3f * OneMinusT * t * t * p2 + + t * t * t * p3; + } + + public static Vector3 GetFirstDerivative (Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) { + t = Mathf.Clamp01(t); + float oneMinusT = 1f - t; + return + 3f * oneMinusT * oneMinusT * (p1 - p0) + + 6f * oneMinusT * t * (p2 - p1) + + 3f * t * t * (p3 - p2); + } + } + + [Serializable] + public class TransformNode { + public bool enabled; + public Transform transform; + bool isAvailable; + Vector3 position; + Vector3 inversePosition; + Vector3 previousPosition; + + public bool Update (Transform splineTransform) { + if (enabled && transform!=null) { + previousPosition = position; + position = transform.position; + inversePosition = splineTransform.InverseTransformPoint(transform.position); + isAvailable = true; + return true; + } + isAvailable = false; + return false; + } + + public bool IsAvailable () { + return enabled&&isAvailable; + } + + public Vector3 GetPosition () { + return position; + } + + public Vector3 GetInvsersePosition () { + return inversePosition; + } + + public void SetPosition (Vector3 newPosition) { + if (transform==null) return; + transform.position = newPosition; + } + + public void Translate (Vector3 translation) { + if (transform==null) return; + transform.position += translation; + } + + public Vector3 GetPositionDelta () { + return previousPosition-position; + } + } + + public enum SplineMode { + Vector3, + Transform + } + + /// + /// The bezier mode for a spline node. This controls how one bezier handle acts in relation to the other. + /// + public enum BezierControlPointMode { + /// + /// Align the angle between the two bezier handles but keep individual lengths. Has a differential smooth in and out angle. + /// + Aligned, + /// + /// Align the angle and length between the two bezier handles. Has an equally smooth in and out angle. + /// + Mirrored, + /// + /// Bezier handles are freely aligned without consideration to the other. Ables you to have sharp angles. + /// + Free + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs.meta b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs.meta new file mode 100644 index 0000000..10132bc --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSpline.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bd22d17ed7f31487db6f1305d10dfeef +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs new file mode 100644 index 0000000..e63b104 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs @@ -0,0 +1,203 @@ +using UnityEngine; +using System.Collections; + +namespace PlaygroundSplines { + /// + /// The PlaygroundSplineMesh class lets you create a mesh from a Playground Spline. + /// + [ExecuteInEditMode()] + public class PlaygroundSplineMesh : MonoBehaviour { + + public PlaygroundSpline spline; + + [Range(2,1000)] + public int points = 100; + + [Range(.01f, 100f)] + public float width = 1f; + + public bool noise = false; + [Range(.01f, 100f)] + public float noiseStrength = 1f; + public Vector2 noiseScale = new Vector2(1f,1f); + public bool noiseDistribution; + public AnimationCurve noiseDistributionL; + public AnimationCurve noiseDistributionR; + + public bool followSurface = false; + public bool followSurfaceRotation = false; + public float surfaceOffset = .1f; + public Vector3 meshUpDirection = Vector3.up; + public Vector3 surfaceDirection = Vector3.down; + + int prevPoints; + float prevWidth; + bool prevNoise; + float prevNoiseStrength; + Vector2 prevNoiseScale; + bool prevNoiseDistribution; + bool prevFollowSurface; + bool prevFollowSurfaceRotation; + float prevSurfaceOffset; + Vector3 prevMeshUpDirection; + Vector3 prevSurfaceDirection; + + void OnEnable () + { + if (noiseDistributionL == null || noiseDistributionL.keys.Length==0) + SetAnimationCurveVals(ref noiseDistributionL); + if (noiseDistributionR == null || noiseDistributionR.keys.Length==0) + SetAnimationCurveVals(ref noiseDistributionR); + if (GetComponent() == null) + gameObject.AddComponent(); + if (spline == null) + spline = GetComponent(); + if (spline != null) + BuildSplineMesh(spline, points, width); + SetVals(); + } + + void Update () + { + if (NeedsUpdate ()) + { + if (spline != null) + BuildSplineMesh(spline, points, width); + SetVals (); + } + } + + bool NeedsUpdate () + { + return prevPoints!=points || + prevWidth!=width || + prevNoise!=noise || + noise && (prevNoiseScale!=noiseScale || prevNoiseStrength!=noiseStrength || prevNoiseDistribution!=noiseDistribution) || + prevFollowSurface!=followSurface || + prevFollowSurfaceRotation!=followSurfaceRotation || + prevSurfaceOffset!=surfaceOffset || + prevMeshUpDirection!=meshUpDirection || + prevSurfaceDirection!=surfaceDirection; + } + + void SetVals () + { + prevPoints = points; + prevWidth = width; + prevNoise = noise; + prevNoiseStrength = noiseStrength; + prevNoiseScale = noiseScale; + prevNoiseDistribution = noiseDistribution; + prevFollowSurface = followSurface; + prevFollowSurfaceRotation = followSurfaceRotation; + prevSurfaceOffset = surfaceOffset; + prevMeshUpDirection = meshUpDirection; + prevSurfaceDirection = surfaceDirection; + } + + void SetAnimationCurveVals (ref AnimationCurve curve) + { + Keyframe[] reset = new Keyframe[2]; + reset[0].time = 0; + reset[1].time = 1f; + reset[0].value = 1f; + reset[1].value = 1f; + curve.keys = reset; + } + + public void BuildSplineMesh (PlaygroundSpline spline, int points, float width) + { + if (points<2) + points = 2; + int totalVertices = points*2; + MeshFilter _mf = GetComponent()!=null? GetComponent() : gameObject.AddComponent(); + Mesh _m = new Mesh(); + Vector3[] verts = new Vector3[totalVertices]; + Vector2[] uvs = new Vector2[totalVertices]; + int[] tris = new int[(points-1)*6]; + + Vector3 up = meshUpDirection; + + // Construct the mesh + for (int i = 0; i=1 && !spline.Loop) + t = .9999f; + if (tNext>=1 && !spline.Loop) + tNext = .99999f; + + // Get the current and next position from the spline on time + Vector3 currentPosition = spline.GetPoint (t); + Vector3 nextPosition = spline.GetPoint (tNext); + + // Raycast down to determine surface (especially practical for roads / rivers) + if (followSurface || followSurfaceRotation) + { + RaycastHit hit; + if (Physics.Raycast (currentPosition, surfaceDirection, out hit)) + { + if (followSurfaceRotation) + up = hit.normal; + if (followSurface) + currentPosition = hit.point + (hit.normal * surfaceOffset); + } + if (followSurface) + { + if (Physics.Raycast (nextPosition, surfaceDirection, out hit)) + { + nextPosition = hit.point + (hit.normal * surfaceOffset); + } + } + } + + // Calculate noise (if enabled) + float noiseAmountL = noise? Mathf.PerlinNoise((t%1f)*noiseScale.x, 0)*noiseStrength : 0; + float noiseAmountR = noise? Mathf.PerlinNoise((t%1f)*noiseScale.y, 0)*noiseStrength : 0; + + if (noise && noiseDistribution) + { + noiseAmountL *= noiseDistributionL.Evaluate(t); + noiseAmountR *= noiseDistributionR.Evaluate(t); + } + + // Create two width point references based on current and next position + Vector3 dir = (Vector3.Cross(up, nextPosition - currentPosition)).normalized; + Vector3 lPoint = currentPosition + dir * ((width/2)+noiseAmountL); + Vector3 rPoint = currentPosition - dir * ((width/2)+noiseAmountR); + + // Draw debug + Debug.DrawLine(lPoint, rPoint); + + verts[i*2] = lPoint; + verts[(i*2)+1] = rPoint; + uvs[i*2] = new Vector2(t,0); + uvs[(i*2)+1] = new Vector2(t,1f); + + if (i>0) + { + int triIndex = (i-1)*6; + int vertIndex = i*2; + + tris[triIndex] = vertIndex-2; + tris[triIndex+1] = vertIndex-1; + tris[triIndex+2] = vertIndex; + tris[triIndex+3] = vertIndex; + tris[triIndex+4] = vertIndex-1; + tris[triIndex+5] = vertIndex+1; + } + } + + // Assign the data to the mesh + _m.vertices = verts; + _m.uv = uvs; + _m.triangles = tris; + _m.RecalculateNormals(); + + // Assign the mesh to the MeshFilter + _mf.mesh = _m; + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs.meta b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs.meta new file mode 100644 index 0000000..1c083c6 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Splines/PlaygroundSplineMesh.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4531c25db4bb643a79ea6ef810dcf35a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails.meta b/Assets/Particle Playground/Extensions/Playground Trails.meta new file mode 100644 index 0000000..aca15a6 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c14f65469986a904ab38a5e365e690dd +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets.meta b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets.meta new file mode 100644 index 0000000..57b679b --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 189dbdd3248575540a24aa065579f63f +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts.meta b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts.meta new file mode 100644 index 0000000..7d47cfa --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c126173dfb3fe1f4fb85a5ce09cdaf26 +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor.meta b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor.meta new file mode 100644 index 0000000..f6a0f88 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 88769265a64f9d04a8b3ae61fcd97460 +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs new file mode 100644 index 0000000..c90dac4 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs @@ -0,0 +1,174 @@ +using UnityEditor; +using UnityEngine; +using System.Collections; +using ParticlePlayground; +using ParticlePlaygroundLanguage; + +[CustomEditor (typeof(PlaygroundTrails))] +public class PlaygroundTrailsInspector : Editor { + + PlaygroundTrails trails; + + SerializedObject s_trails; + SerializedProperty s_playgroundSystem; + SerializedProperty s_lifetimeColor; + SerializedProperty s_material; + SerializedProperty s_renderMode; + SerializedProperty s_colorMode; + SerializedProperty s_uvMode; + SerializedProperty s_pointArrayAlpha; + SerializedProperty s_billboardTransform; + SerializedProperty s_customRenderScale; + SerializedProperty s_time; + SerializedProperty s_timeWidth; + SerializedProperty s_widthScale; + SerializedProperty s_minVertexDistance; + SerializedProperty s_maxVertexDistance; + SerializedProperty s_maxPathDeviation; + SerializedProperty s_createPointsOnCollision; + SerializedProperty s_maxPoints; + SerializedProperty s_createFirstPointOnParticleBirth; + SerializedProperty s_createLastPointOnParticleDeath; + SerializedProperty s_multithreading; + SerializedProperty s_receiveShadows; + SerializedProperty s_castShadows; + + // GUI + public static GUIStyle boxStyle; + public static PlaygroundSettingsC playgroundSettings; + public static PlaygroundLanguageC playgroundLanguage; + + public void OnEnable () + { + trails = target as PlaygroundTrails; + s_trails = new SerializedObject(trails); + + s_time = s_trails.FindProperty("time"); + + s_material = s_trails.FindProperty("material"); + s_lifetimeColor = s_trails.FindProperty("lifetimeColor"); + s_colorMode = s_trails.FindProperty("colorMode"); + s_uvMode = s_trails.FindProperty("uvMode"); + s_pointArrayAlpha = s_trails.FindProperty("pointArrayAlpha"); + s_renderMode = s_trails.FindProperty("renderMode"); + s_billboardTransform = s_trails.FindProperty("billboardTransform"); + s_customRenderScale = s_trails.FindProperty("customRenderScale"); + + s_timeWidth = s_trails.FindProperty("timeWidth"); + s_widthScale = s_trails.FindProperty("widthScale"); + + s_minVertexDistance = s_trails.FindProperty("minVertexDistance"); + s_maxVertexDistance = s_trails.FindProperty("maxVertexDistance"); + s_maxPathDeviation = s_trails.FindProperty("maxPathDeviation"); + s_createPointsOnCollision = s_trails.FindProperty("createPointsOnCollision"); + s_maxPoints = s_trails.FindProperty("maxPoints"); + s_createFirstPointOnParticleBirth = s_trails.FindProperty("createFirstPointOnParticleBirth"); + s_createLastPointOnParticleDeath = s_trails.FindProperty("createLastPointOnParticleDeath"); + + s_playgroundSystem = s_trails.FindProperty("playgroundSystem"); + s_multithreading = s_trails.FindProperty("multithreading"); + + s_receiveShadows = s_trails.FindProperty("receiveShadows"); +#if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 + s_castShadows = s_trails.FindProperty("castShadows"); +#else + s_castShadows = s_trails.FindProperty("shadowCastingMode"); +#endif + playgroundSettings = PlaygroundSettingsC.GetReference(); + playgroundLanguage = PlaygroundSettingsC.GetLanguage(); + + // Issue a quick refresh + if (!EditorApplication.isPlaying && Selection.activeTransform!=null) + { + trails.ResetTrails(); + } + } + + public override void OnInspectorGUI () + { + if (boxStyle==null) + boxStyle = GUI.skin.FindStyle("box"); + + s_trails.UpdateIfDirtyOrScript(); + + bool hasParticleSystem = trails.playgroundSystem != null; + if (!hasParticleSystem) + EditorGUILayout.HelpBox(playgroundLanguage.missingParticleSystemWarning, MessageType.Warning); + + EditorGUILayout.BeginVertical (boxStyle); + playgroundSettings.playgroundTrailsFoldout = GUILayout.Toggle(playgroundSettings.playgroundTrailsFoldout, playgroundLanguage.playgroundTrails, EditorStyles.foldout); + if (playgroundSettings.playgroundTrailsFoldout) + { + EditorGUILayout.BeginVertical (boxStyle); + + // Time foldout + if (GUILayout.Button(playgroundLanguage.time+" ("+s_time.floatValue.ToString ("F1")+")", EditorStyles.toolbarDropDown)) playgroundSettings.trailsTimeFoldout=!playgroundSettings.trailsTimeFoldout; + if (playgroundSettings.trailsTimeFoldout) + { + EditorGUILayout.Separator(); + EditorGUILayout.PropertyField(s_time, new GUIContent(playgroundLanguage.time)); + EditorGUILayout.Separator(); + } + + // Width foldout + if (GUILayout.Button(playgroundLanguage.width+" ("+s_widthScale.floatValue.ToString ("F1")+")", EditorStyles.toolbarDropDown)) playgroundSettings.trailsWidthFoldout=!playgroundSettings.trailsWidthFoldout; + if (playgroundSettings.trailsWidthFoldout) + { + EditorGUILayout.Separator(); + EditorGUILayout.PropertyField(s_timeWidth, new GUIContent(playgroundLanguage.timeWidth)); + EditorGUILayout.PropertyField(s_widthScale, new GUIContent(playgroundLanguage.widthScale)); + EditorGUILayout.Separator(); + } + + // Rendering foldout + if (GUILayout.Button(playgroundLanguage.rendering+" ("+trails.renderMode+")", EditorStyles.toolbarDropDown)) playgroundSettings.trailsRenderingFoldout=!playgroundSettings.trailsRenderingFoldout; + if (playgroundSettings.trailsRenderingFoldout) + { + EditorGUILayout.Separator(); + EditorGUILayout.PropertyField(s_material, new GUIContent(playgroundLanguage.material)); + EditorGUILayout.PropertyField(s_lifetimeColor, new GUIContent(playgroundLanguage.lifetimeColor)); + EditorGUILayout.PropertyField(s_colorMode, new GUIContent(playgroundLanguage.colorMode)); + if (trails.colorMode == TrailColorMode.Lifetime) + EditorGUILayout.PropertyField(s_pointArrayAlpha, new GUIContent(playgroundLanguage.pointArrayAlpha)); + EditorGUILayout.PropertyField(s_uvMode, new GUIContent(playgroundLanguage.uvMode)); + EditorGUILayout.PropertyField(s_renderMode, new GUIContent(playgroundLanguage.renderMode)); + if (trails.renderMode == TrailRenderMode.Billboard) + EditorGUILayout.PropertyField(s_billboardTransform, new GUIContent(playgroundLanguage.billboardTransform)); + else if (trails.renderMode == TrailRenderMode.CustomRenderScale) + EditorGUILayout.PropertyField(s_customRenderScale, new GUIContent(playgroundLanguage.customRenderScale)); + EditorGUILayout.PropertyField(s_castShadows, new GUIContent(playgroundLanguage.castShadows)); + EditorGUILayout.PropertyField(s_receiveShadows, new GUIContent(playgroundLanguage.receiveShadows)); + EditorGUILayout.Separator(); + } + + // Point creation foldout + if (GUILayout.Button(playgroundLanguage.pointCreation+" ("+s_maxPoints.intValue+")", EditorStyles.toolbarDropDown)) playgroundSettings.trailsPointCreationFoldout=!playgroundSettings.trailsPointCreationFoldout; + if (playgroundSettings.trailsPointCreationFoldout) + { + EditorGUILayout.Separator(); + EditorGUILayout.PropertyField(s_maxPoints, new GUIContent(playgroundLanguage.maximumPoints)); + EditorGUILayout.PropertyField(s_minVertexDistance, new GUIContent(playgroundLanguage.minimumVertexDistance)); + EditorGUILayout.PropertyField(s_maxVertexDistance, new GUIContent(playgroundLanguage.maximumVertexDistance)); + EditorGUILayout.PropertyField(s_maxPathDeviation, new GUIContent(playgroundLanguage.maximumPathDeviation)); + EditorGUILayout.PropertyField(s_createFirstPointOnParticleBirth, new GUIContent(playgroundLanguage.createFirstPointOnParticleBirth)); + EditorGUILayout.PropertyField(s_createLastPointOnParticleDeath, new GUIContent(playgroundLanguage.createLastPointOnParticleDeath)); + EditorGUILayout.PropertyField(s_createPointsOnCollision, new GUIContent(playgroundLanguage.createPointsOnCollision)); + EditorGUILayout.Separator(); + } + + // Advanced foldout + if (GUILayout.Button(playgroundLanguage.advanced, EditorStyles.toolbarDropDown)) playgroundSettings.trailsAdvancedFoldout=!playgroundSettings.trailsAdvancedFoldout; + if (playgroundSettings.trailsAdvancedFoldout) + { + EditorGUILayout.Separator(); + EditorGUILayout.PropertyField(s_playgroundSystem, new GUIContent(playgroundLanguage.particleSystem)); + EditorGUILayout.PropertyField(s_multithreading, new GUIContent(playgroundLanguage.multithreading)); + } + + EditorGUILayout.EndVertical(); + } + EditorGUILayout.EndVertical(); + + s_trails.ApplyModifiedProperties(); + } +} diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs.meta b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs.meta new file mode 100644 index 0000000..9ecea00 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/Editor/PlaygroundTrailsInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 302cc09ed3fd7488693e16d806a7665f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs new file mode 100644 index 0000000..851ac5d --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs @@ -0,0 +1,425 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace ParticlePlayground { + + [Serializable] + public class ParticlePlaygroundTrail + { + /// + /// Determines if this ParticlePlaygroundTrail should update. + /// + [HideInInspector] public bool update = true; + /// + /// The GameObject of this trail. + /// + [HideInInspector] public GameObject trailGameObject; + /// + /// The Transform of this trail. + /// + [HideInInspector] public Transform trailTransform; + /// + /// The Mesh Renderer component of this trail. + /// + [HideInInspector] public MeshRenderer trailRenderer; + /// + /// The Mesh Filter component of this trail. + /// + [HideInInspector] public MeshFilter trailMeshFilter; + /// + /// The Mesh component of this trail. + /// + [HideInInspector] public Mesh trailMesh; + /// + /// The particle this trail is following. + /// + [HideInInspector] public int particleId; + + /// + /// The minimum point cache limit. + /// + [HideInInspector] public int minPointCache = 2; + /// + /// The maximum point cache limit. + /// + [HideInInspector] public int maxPointCache = 32767; + + [NonSerialized] public List trailPoints = new List(); + [NonSerialized] public Vector3[] meshVerticesCache; + [NonSerialized] public Vector3[] meshNormalsCache; + [NonSerialized] public Vector2[] meshUvsCache; + [NonSerialized] public int[] meshTrianglesCache; + [NonSerialized] public Color32[] meshColorsCache; + + private int _pointCache = 200; + private int _birthIterator; + private int _deathIterator; + private float _particleTime; + private Vector3 _particlePosition; + private Vector3 _previousParticlePosition; + private Vector3 _particleDirection; + private Vector3 _lastAddedPointPosition; + private Vector3 _lastAddedPointDirection; + private bool _isDead = false; + private bool _isReady = false; + + private float _timeCached; + + /// + /// Initializes a new instance of the class. + /// + public ParticlePlaygroundTrail () + { + UpdateCache(); + } + + /// + /// Initializes a new instance of the class and specifies the available point cache. + /// The mesh's available vertices, normals, uvs, triangles and colors will be based on the specified point cache. + /// + /// Mesh point cache (vertices, normals and uvs will be multiplied by two, triangles by six). + public ParticlePlaygroundTrail (int pointCache) + { + _pointCache = Mathf.Clamp (pointCache, minPointCache, maxPointCache); + UpdateCache(); + } + + /// + /// Updates the mesh cache. This is done upon creation where cache lengths will be based on the point cache. + /// + public void UpdateCache () + { + _timeCached = PlaygroundC.globalTime; + meshVerticesCache = new Vector3[_pointCache*2]; + meshNormalsCache = new Vector3[_pointCache*2]; + meshUvsCache = new Vector2[_pointCache*2]; + meshTrianglesCache = new int[(_pointCache-1)*6]; + meshColorsCache = new Color32[_pointCache*2]; + _isReady = true; + } + + /// + /// Updates the trail mesh. This is done each frame from the main-thread. + /// + public void UpdateMesh () + { + trailMesh.Clear(); + trailMesh.vertices = meshVerticesCache; + trailMesh.uv = meshUvsCache; + trailMesh.triangles = meshTrianglesCache; + trailMesh.colors32 = meshColorsCache; + trailMesh.normals = meshNormalsCache; + } + + /// + /// Recalculates the bounds on the trail mesh. This is done automatically when triangles are set into a mesh. + /// + public void RecalculateBounds () + { + trailMesh.RecalculateBounds(); + } + + /// + /// Clears the trail mesh. + /// + public void ClearMesh () + { + _birthIterator = 0; + _deathIterator = 0; + meshVerticesCache = new Vector3[0]; + meshNormalsCache = new Vector3[0]; + meshUvsCache = new Vector2[0]; + meshTrianglesCache = new int[0]; + meshColorsCache = new Color32[0]; + } + + /// + /// Sets the first point in the trail. This will add two initial points, one starting point and one ending point which will follow the assigned particle. + /// + /// Position. + /// Direction. + /// Start width. + /// Lifetime. + public void SetFirstPoint (Vector3 pos, Vector3 dir, float startWidth, float lifetime, float creationTime) + { + _particleDirection = dir; + AddPoint (pos, startWidth, lifetime, creationTime); + AddPoint (pos, startWidth, lifetime, creationTime); + _birthIterator = 2; + _deathIterator = 0; + } + + /// + /// Sets the last point in the trail and then kills it. This will add one last point which won't follow the assigned particle. + /// + /// Position. + /// Direction. + /// Start width. + /// Lifetime. + public void SetLastPoint (Vector3 pos, Vector3 dir, float startWidth, float lifetime, float creationTime) + { + _particleDirection = dir; + AddPoint (pos, startWidth, lifetime, creationTime); + Die (); + } + + /// + /// Adds a point into the end of the trail. + /// + /// Position. + /// Width. + /// Lifetime. + public void AddPoint (Vector3 position, float width, float lifetime, float creationTime) + { + if (_birthIterator >= _pointCache || _isDead) + return; + trailPoints.Add (new TrailPoint(position, lifetime, width, creationTime)); + AddPoint(position); + } + + /// + /// Adds a point into the end of the trail. + /// + /// Position. + /// Initial Velocity. + /// Width. + /// Lifetime. + public void AddPoint (Vector3 position, Vector3 velocity, float width, float lifetime, float creationTime) + { + if (_birthIterator >= _pointCache || _isDead) + return; + trailPoints.Add (new TrailPoint(position, velocity, lifetime, width, creationTime)); + AddPoint(position); + } + + + void AddPoint (Vector3 position) + { + _lastAddedPointDirection = position-_previousParticlePosition; + _lastAddedPointPosition = position; + + meshVerticesCache[_birthIterator*2] = position; + meshVerticesCache[(_birthIterator*2)+1] = position; + + meshNormalsCache[_birthIterator*2] = -Vector3.forward; + meshNormalsCache[(_birthIterator*2)+1] = -Vector3.forward; + + meshUvsCache[_birthIterator*2] = new Vector2(1f, 0f); + meshUvsCache[(_birthIterator*2)+1] = new Vector2(0f, 1f); + + meshColorsCache[_birthIterator*2] = new Color32(); + meshColorsCache[(_birthIterator*2)+1] = new Color32(); + + + if (trailPoints.Count>1) { + int vertexIndex = (_birthIterator)*2; + int triIndex = (_birthIterator-1)*6; + + meshTrianglesCache[triIndex] = vertexIndex -2; + meshTrianglesCache[triIndex+1] = vertexIndex -1; + meshTrianglesCache[triIndex+2] = vertexIndex; + meshTrianglesCache[triIndex+3] = vertexIndex; + meshTrianglesCache[triIndex+4] = vertexIndex -1; + meshTrianglesCache[triIndex+5] = vertexIndex +1; + } + + NextPoint(); + } + + public void RemovePoint (int index) + { + if (_deathIterator < _birthIterator-2) + { + meshVerticesCache[_deathIterator*2] = meshVerticesCache[(_deathIterator*2)+2]; + meshVerticesCache[(_deathIterator*2)+1] = meshVerticesCache[(_deathIterator*2)+3]; + meshColorsCache[_deathIterator*2] = new Color32(); + meshColorsCache[(_deathIterator*2)+1] = new Color32(); + + _deathIterator++; + } + } + + /// + /// Sets the color at specified index. This is done automatically through the trail calculation loop. + /// + /// Index. + /// Color. + public void SetColor (int index, Color32 color) + { + meshColorsCache[index*2] = color; + meshColorsCache[(index*2)+1] = color; + } + + /// + /// Makes the iterator jump to next point. The iterator controls which point is following the particle. + /// + public void NextPoint () + { + _birthIterator++; + } + + /// + /// Gets the paired particle's current time. + /// + /// The paired particle's current time. + public float GetParticleTime () + { + return _particleTime; + } + + /// + /// Sets the paired particle's current time. + /// + /// Time. + public void SetParticleTime (float time) + { + _particleTime = time; + } + + /// + /// Gets the paired particle's current position. + /// + /// The paired particle's position. + public Vector3 GetParticlePosition () + { + return _particlePosition; + } + + /// + /// Sets the paired particle's position. + /// + /// Position. + public void SetParticlePosition (Vector3 position) + { + if (_isDead) + return; + _previousParticlePosition = _particlePosition; + _particlePosition = position; + _particleDirection = (position-_previousParticlePosition).normalized; + } + + /// + /// Sets the paired particle's direction. + /// + /// Direction. + public void SetParticleDirection (Vector3 direction) + { + _particleDirection = direction; + } + + /// + /// Gets the last added point position. + /// + /// The last added point position. + public Vector3 GetLastAddedPointPosition () + { + return _lastAddedPointPosition; + } + + /// + /// Gets the direction of the particle. + /// + /// The particle direction. + public Vector3 GetParticleDirection () + { + return _particleDirection; + } + + public Vector3 GetLastAddedPointDirection () + { + return _lastAddedPointDirection; + } + + /// + /// Gets the current path deviation angle based on the last added point direction and the current direction of the particle. + /// + /// The path deviation angle. + public float GetPathDeviation () { + return Vector3.Angle(_lastAddedPointDirection, _particleDirection); + } + + /// + /// Gets the birth iterator used for iterating through the mesh arrays to set new vertex positions. + /// + /// The birth iterator. + public int GetBirthIterator () + { + return _birthIterator; + } + + /// + /// Gets the death iterator used for iterating through the mesh arrays to remove old vertex positions. + /// + /// The death iterator. + public int GetDeathIterator () + { + return _deathIterator; + } + + /// + /// Gets the point cache amount. The point cache is set at the trail's creation and determines how many vertices, triangles, uvs, normals and colors the trail mesh can have. + /// + /// The point cache amount. + public int GetPointCache () + { + return _pointCache; + } + + /// + /// Gets the time this trail was cached. + /// + /// The cached time. + public float TimeCached () + { + return _timeCached; + } + + /// + /// Determines whether this trail can remove a point at specified index. + /// + /// true if this trail can remove a point at the specified index; otherwise, false. + /// Point. + public bool CanRemovePoint (int point) + { + return trailPoints[point].CanRemove(); + } + + /// + /// Determines whether this trail can be removed. This will check if the last point in the trail has reached the end of its lifetime. + /// + /// true if this trail can be removed; otherwise, false. + public bool CanRemoveTrail () + { + if (trailPoints.Count == 0 || !_isReady) + return false; + return trailPoints[trailPoints.Count-1].CanRemove(); + } + + /// + /// Wakes up the trail from being dead. + /// + public void WakeUp () + { + _isDead = false; + } + + /// + /// Makes the trail stop following its assigned particle. + /// + public void Die () + { + _isDead = true; + } + + /// + /// Determines whether this trail is dead. + /// + /// true if this trail is dead; otherwise, false. + public bool IsDead () + { + return _isDead; + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs.meta b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs.meta new file mode 100644 index 0000000..d6491ee --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrail.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 69a95d91e31314835b480a1e0e499ed5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs new file mode 100644 index 0000000..de1ab13 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs @@ -0,0 +1,77 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace ParticlePlayground { + public class TrailPoint + { + public Vector3 position; + public Vector3 velocity; + public float lifetime; + public float startLifetime; + public float width; + + bool _canRemove = false; + float _lastTimeUpdated; + + public TrailPoint (Vector3 position, float startLifetime, float creationTime) + { + this.position = position; + this.lifetime = startLifetime; + this.startLifetime = startLifetime; + this.width = 0; + + _lastTimeUpdated = creationTime; + } + + public TrailPoint (Vector3 position, float startLifetime, float width, float creationTime) + { + this.position = position; + this.lifetime = startLifetime; + this.startLifetime = startLifetime; + this.width = width; + + _lastTimeUpdated = creationTime; + } + + public TrailPoint (Vector3 position, Vector3 velocity, float startLifetime, float width, float creationTime) + { + this.position = position; + this.lifetime = startLifetime; + this.startLifetime = startLifetime; + this.width = width; + this.velocity = velocity; + + _lastTimeUpdated = creationTime; + } + + public void Update (float updateTime, float width) + { + lifetime -= updateTime-_lastTimeUpdated; + if (lifetime <= 0) + { + _canRemove = true; + lifetime = 0; + } + this.width = width; + _lastTimeUpdated = updateTime; + } + + /// + /// Gets the normalized lifetime of this trail point. + /// + /// The normalized lifetime. + public float GetNormalizedLifetime () { + return 1f-(lifetime/startLifetime); + } + + /// + /// Determines whether this point can be removed. + /// + /// true if this point can be removed; otherwise, false. + public bool CanRemove () { + return _canRemove; + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs.meta b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs.meta new file mode 100644 index 0000000..e7fa2e9 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/ParticlePlaygroundTrailPoint.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d13961b3ce5d04e079a2f25f5b542a50 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs new file mode 100644 index 0000000..d2a97e2 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using System.Collections; +using ParticlePlayground; + +[ExecuteInEditMode()] +public class PlaygroundTrailParent : MonoBehaviour { + + public PlaygroundTrails trailsReference; + + private GameObject _gameObject; + + void Awake () { + _gameObject = gameObject; + } + + void Update () { + if (_gameObject != trailsReference.GetParentGameObject()) + { + if (Application.isPlaying) + Destroy (_gameObject); + else + DestroyImmediate(_gameObject); + } + } +} diff --git a/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs.meta b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs.meta new file mode 100644 index 0000000..b426889 --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/Playground Trail Assets/Scripts/PlaygroundTrailParent.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 500796a8d01a74b6aae149cd39a714f8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs b/Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs new file mode 100644 index 0000000..533d02b --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs @@ -0,0 +1,853 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace ParticlePlayground { + + [ExecuteInEditMode()] + public class PlaygroundTrails : MonoBehaviour { + + /// + /// The particle system this Playground Trail will follow. + /// + [HideInInspector] public PlaygroundParticlesC playgroundSystem; + + /// + /// The material of each trail. + /// + [HideInInspector] public Material material; + /// + /// The lifetime color of all trails. + /// + [HideInInspector] public Gradient lifetimeColor = new Gradient(); + /// + /// The point array alpha determines the alpha level over the trail points. This is a normalized value where 1 on the x-axis means all points, 1 on the y-axis means full alpha. + /// + [HideInInspector] public AnimationCurve pointArrayAlpha; + /// + /// The mode to color the trails with. If TrailColorMode.Lifetime is selected the coloring will be based on each point's lifetime. If TrailColorMode.PointArray is selected the coloring will be based on the points in the array. + /// + [HideInInspector] public TrailColorMode colorMode; + /// + /// The uv mode. + /// + [HideInInspector] public TrailUvMode uvMode; + /// + /// Determines the render mode of the trail. This sets the rotation direction of the trail points. + /// + [HideInInspector] public TrailRenderMode renderMode; + /// + /// The transform to billboard towards if renderMode is set to TrailRenderMode.Billboard. If none is set this will default to the Main Camera transform. + /// + [HideInInspector] public Transform billboardTransform; + /// + /// The custom render scale if renderMode is set to TrailRenderMode.CustomRenderScale. This ables you to set the normal direction (with multiplier) of the trails. + /// + [HideInInspector] public Vector3 customRenderScale = Vector3.one; + /// + /// Determines if the trails should receive shadows. Note that the shader of the material needs to support this. + /// + [HideInInspector] public bool receiveShadows; +#if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 + /// + /// Determines if the trails should cast shadows (Unity 4). Note that the shader of the material needs to support this. + /// + [HideInInspector] public bool castShadows = false; +#else + /// + /// Determines if the trails should cast shadows. Note that the shader of the material needs to support this. + /// + [HideInInspector] public UnityEngine.Rendering.ShadowCastingMode shadowCastingMode; +#endif + /// + /// The time vertices is living on the trail (determines length). + /// + [HideInInspector] public float time = 3f; + /// + /// The width over normalized lifetime. + /// + public AnimationCurve timeWidth; + /// + /// The scale of start- and end width. + /// + public float widthScale = .1f; + + /// + /// The minimum distance before new vertices can be created. + /// + public float minVertexDistance = .1f; + /// + /// The maximum distance before forcing new vertices. + /// + public float maxVertexDistance = 100f; + /// + /// The maximum forward path deviation before forcing new vertices. + /// + public float maxPathDeviation = 1f; + /// + /// Determines if points should be created upon particle collision. + /// + public bool createPointsOnCollision = false; + /// + /// The maximum available points able to be created by this Playground Trail. This will determine the generation of built-in arrays needed to remain efficient in memory consumption. + /// The trail is made out of points where vertices are drawn in between, two points is the minimum to be able to draw a trail, this represents 4 vertices and 6 triangles. + /// + public int maxPoints = 100; + /// + /// Determines if first point should be created immediately on particle birth, otherwise this will be created during the trail calculation routine. + /// This has affect on when the trail starts as the particle may have moved when the first point is created. If your particle source is moving you may want to leave this setting off to not create a first skewed trail point. + /// + public bool createFirstPointOnParticleBirth = false; + /// + /// Determines if a last point on the trail should be created when its assigned particle dies. + /// + public bool createLastPointOnParticleDeath = false; + /// + /// Determines if the Playground Trails should run asynchronously on a separate thread. This will go through the selected Thread Pool Method in the Playground Manager (PlaygroundC). + /// + public bool multithreading = true; + + /// + /// The reference to the birth event on the assigned Particle Playground system. + /// + [HideInInspector] public PlaygroundEventC birthEvent; + /// + /// The reference to the death event on the assigned Particle Playground system. + /// + [HideInInspector] public PlaygroundEventC deathEvent; + /// + /// The reference to the collision event on the assigned Particle Playground system. + /// + [HideInInspector] public PlaygroundEventC collisionEvent; + + /// + /// The list of trails following each particle. + /// + private List _trails = new List(); + + private Transform _parentTransform; + private GameObject _parentGameObject; + private Material _materialCache; + private float _calculationStartTime; + private int _currentParticleCount; + private float _currentParticleMinLifetime; + private float _currentParticleMaxLifetime; + private bool _localSpace; + private Vector3 _billboardTransformPosition; + private object _locker = new object(); + private bool _isDoneThread = true; + private Matrix4x4 _localMatrix; + + /// + /// The birth queue of trails. This will be added to whenever a particle births. As a Particle Playground system can birth particles and send particle events asynchronously a thread safe queue is needed to create the trails. + /// + readonly Queue _birthQueue = new Queue(); + + + /**************************************************************************** + Monobehaviours + ****************************************************************************/ + + void OnEnable () + { + // Cache reference to the Particle Playground system + if (playgroundSystem == null) + playgroundSystem = GetComponent(); + + // Cache a reference to the Main Camera if billboardTransform isn't assigned + if (billboardTransform == null) + billboardTransform = Camera.main.transform; + + // Set the initial material + if (material == null) + { + material = new Material(Shader.Find("Playground/Vertex Color")); + _materialCache = material; + } + + // Reset the trails + ResetTrails(); + + // Add the required birth/death/collision events + AddRequiredParticleEvents(); + + // Setup default time width keys + if (timeWidth == null) + timeWidth = new AnimationCurve(DefaultWidthKeys()); + + // Setup default point array alpha keys + if (pointArrayAlpha == null) + pointArrayAlpha = new AnimationCurve(DefaultWidthKeys()); + + _isDoneThread = true; + } + + void OnDisable () + { + // Destroy all trails + DestroyAllTrails(); + + // Remove the required events + RemoveRequiredEvents(); + } + + void OnDestroy () + { + // Destroy all trails + DestroyAllTrails(); + + // Remove the required events + RemoveRequiredEvents(); + } + + void Update () + { + // Clamp values + maxPoints = Mathf.Clamp (maxPoints, 2, 32767); + + // Set asynchronous available values + if (billboardTransform != null) + _billboardTransformPosition = billboardTransform.position; + + // Early out if no particles exist yet + if (playgroundSystem == null || !playgroundSystem.IsReady() || playgroundSystem.IsSettingParticleCount() || playgroundSystem.IsSettingLifetime() || playgroundSystem.particleCache == null || playgroundSystem.particleCache.Length == 0) + return; + + // Reset trails if a crucial state is changed + if (_currentParticleCount != playgroundSystem.particleCount || _currentParticleMinLifetime != playgroundSystem.lifetimeMin || _currentParticleMaxLifetime != playgroundSystem.lifetime || _localSpace != (playgroundSystem.shurikenParticleSystem.simulationSpace == ParticleSystemSimulationSpace.Local)) + ResetTrails(); + + // Set calculation matrix if this is local space + if (_localSpace) + _localMatrix.SetTRS(playgroundSystem.particleSystemTransform.position, playgroundSystem.particleSystemTransform.rotation, playgroundSystem.particleSystemTransform.lossyScale); + + // Check material + if (material != _materialCache) + SetMaterial(material); + + // Remove any trails that has ended + if (_isDoneThread) + { + for (int i = 0; i<_trails.Count; i++) + { + if (_trails[i].trailPoints != null && _trails[i].trailPoints.Count > 1 && _trails[i].trailPoints[_trails[i].trailPoints.Count-1] != null && _trails[i].CanRemoveTrail()) + { + RemoveTrail(i); + i--; + if (i<0) i = 0; + continue; + } + } + } + + // Consume the particle birth queue + while (_birthQueue.Count>0) + AddTrail(_birthQueue.Dequeue()); + + // Update all trail meshes and their render settings + for (int i = 0; i<_trails.Count; i++) + { + ParticlePlaygroundTrail trail = _trails[i]; + // Set shadow casting/receiving + trail.trailRenderer.receiveShadows = receiveShadows; + #if UNITY_4_3 || UNITY_4_5 || UNITY_4_6 + trail.trailRenderer.castShadows = castShadows; + #else + trail.trailRenderer.shadowCastingMode = shadowCastingMode; + #endif + if (_isDoneThread) + trail.UpdateMesh(); + } + // Finally calculate all trails + if (multithreading) + { + if (_isDoneThread) + { + _calculationStartTime = Application.isPlaying? Time.time : Time.realtimeSinceStartup; + _isDoneThread = false; + PlaygroundC.RunAsync(()=>{ + lock (_locker) + { + if (_isDoneThread) return; + CalculateTrail(); + _isDoneThread = true; + } + }); + } + } + else + { + _calculationStartTime = Application.isPlaying? Time.time : Time.realtimeSinceStartup; + CalculateTrail(); + } + } + + // Prevent build-up of the birth queue while Editor is out of focus + #if UNITY_EDITOR + public void OnApplicationPause (bool pauseStatus) + { + if (!pauseStatus && !UnityEditor.EditorApplication.isPlaying) + { + _birthQueue.Clear(); + } + } + #endif + + /**************************************************************************** + Event Listeners + ****************************************************************************/ + + /// + /// This function will be called whenever a particle is birthed. + /// + /// The birthed particle. + void OnParticleBirthEvent (PlaygroundEventParticle particle) + { + _birthQueue.Enqueue (new TrailParticleInfo(particle.particleId, particle.position, particle.velocity)); + } + /// + /// This function will be called whenever a particle has died. + /// + /// The particle which died. + void OnParticleDeathEvent (PlaygroundEventParticle particle) + { + int trailIndex = GetOldestTrailWithParticleId(particle.particleId); + if (trailIndex > -1) + { + if (createLastPointOnParticleDeath) + { + _trails[trailIndex].SetLastPoint(particle.position, particle.velocity, EvaluateWidth(0), time, _calculationStartTime); + } + else + { + _trails[trailIndex].SetParticlePosition(particle.position); + _trails[trailIndex].Die(); + } + } + } + /// + /// This function will be called whenever a particle is colliding. + /// + /// The collided particle. + void OnParticleCollisionEvent (PlaygroundEventParticle particle) + { + if (createPointsOnCollision) + { + int trailIndex = GetNewestTrailWithParticleId (particle.particleId); + if (trailIndex < 0) + return; + ParticlePlaygroundTrail trailAtIndex = _trails[trailIndex]; + trailAtIndex.AddPoint (playgroundSystem.particleCache[particle.particleId].position, EvaluateWidth(0), time, _calculationStartTime); + } + } + + /// + /// Gets the birth event this Playground Trail is listening to. + /// + /// The particle birth event. + public PlaygroundEventC GetBirthEvent () {return birthEvent;} + /// + /// Gets the death event this Playground Trail is listening to. + /// + /// The particle death event. + public PlaygroundEventC GetDeathEvent () {return deathEvent;} + /// + /// Gets the collision event this Playground Trail is listening to. + /// + /// The particle collision event. + public PlaygroundEventC GetCollisionEvent () {return collisionEvent;} + + /// + /// Adds the required particle events to track particles. + /// + public void AddRequiredParticleEvents () + { + if (playgroundSystem != null) + { + // Hookup events + birthEvent = GetEventFromType(EVENTTYPEC.Birth); + if (birthEvent == null) + { + birthEvent = PlaygroundC.CreateEvent(playgroundSystem); + birthEvent.broadcastType = EVENTBROADCASTC.EventListeners; + birthEvent.eventType = EVENTTYPEC.Birth; + } + birthEvent.particleEvent += OnParticleBirthEvent; + + deathEvent = GetEventFromType(EVENTTYPEC.Death); + if (deathEvent == null) + { + deathEvent = PlaygroundC.CreateEvent(playgroundSystem); + deathEvent.broadcastType = EVENTBROADCASTC.EventListeners; + deathEvent.eventType = EVENTTYPEC.Death; + } + deathEvent.particleEvent += OnParticleDeathEvent; + + collisionEvent = GetEventFromType(EVENTTYPEC.Collision); + if (collisionEvent == null) + { + collisionEvent = PlaygroundC.CreateEvent(playgroundSystem); + collisionEvent.broadcastType = EVENTBROADCASTC.EventListeners; + collisionEvent.eventType = EVENTTYPEC.Collision; + } + collisionEvent.particleEvent += OnParticleCollisionEvent; + } + } + + /// + /// Removes the required events to track particles. + /// + public void RemoveRequiredEvents () + { + if (playgroundSystem != null) + { + if (birthEvent != null) + { + birthEvent.particleEvent -= OnParticleBirthEvent; + birthEvent = null; + } + if (deathEvent != null) + { + deathEvent.particleEvent -= OnParticleDeathEvent; + deathEvent = null; + } + if (collisionEvent != null) + { + collisionEvent.particleEvent -= OnParticleCollisionEvent; + collisionEvent = null; + } + } + } + + /// + /// Gets the type of event based on the passed in EVETTTYPEC. + /// + /// The event of type specified. + /// The event type. + public PlaygroundEventC GetEventFromType (EVENTTYPEC eventType) + { + for (int i = 0; i + /// Returns a default pair of AnimationCurve Keyframes in X 0 and X 1 at value Y 1. + /// + /// The default width keys. + public Keyframe[] DefaultWidthKeys () { + Keyframe[] keys = new Keyframe[2]; + keys[0].time = 0; + keys[1].time = 1f; + keys[0].value = 1f; + keys[1].value = 1f; + return keys; + } + + /// + /// Sets the material of all trails. + /// + /// The material all trails should get. + public void SetMaterial (Material material) { + for (int i = 0; i<_trails.Count; i++) { + if (_trails[i] != null && _trails[i].trailRenderer != null) + _trails[i].trailRenderer.sharedMaterial = material; + } + _materialCache = material; + } + + /// + /// Evaluates the width at normalized trail time. + /// + /// The width at normalized trail time. + /// Normalized time. + public float EvaluateWidth (float normalizedTime) { + return timeWidth.Evaluate(normalizedTime)*widthScale; + } + + + public Color32 EvaluateColor (float normalizedTime) + { + return lifetimeColor.Evaluate(normalizedTime); + } + + public Color32 EvaluateColor (int trailIndex, int trailPointIndex) + { + return lifetimeColor.Evaluate((trailPointIndex*1f) / (_trails[trailIndex].GetBirthIterator()-1)); + } + + + /**************************************************************************** + Trail functions + ****************************************************************************/ + + /// + /// Creates a trail and assigns it to a particle. + /// + /// Information about the particle. + public void AddTrail (TrailParticleInfo particleInfo) + { + // Check parent object + if (_parentGameObject == null) + { + _parentGameObject = new GameObject("Playground Trails ("+playgroundSystem.name+")", typeof(PlaygroundTrailParent)); + _parentTransform = _parentGameObject.transform; + _parentGameObject.GetComponent().trailsReference = this; + } + + ParticlePlaygroundTrail newTrail = new ParticlePlaygroundTrail(maxPoints); + newTrail.trailGameObject = new GameObject("Playground Trail "+particleInfo.particleId); + newTrail.trailTransform = newTrail.trailGameObject.transform; + newTrail.trailTransform.parent = _parentTransform; + newTrail.trailRenderer = newTrail.trailGameObject.AddComponent(); + newTrail.trailMeshFilter = newTrail.trailGameObject.AddComponent(); + newTrail.trailMesh = new Mesh(); + newTrail.trailMesh.MarkDynamic(); + newTrail.trailMeshFilter.sharedMesh = newTrail.trailMesh; + newTrail.trailRenderer.sharedMaterial = material; + + newTrail.particleId = particleInfo.particleId; + + if (createFirstPointOnParticleBirth) + newTrail.SetFirstPoint(particleInfo.position, particleInfo.velocity, EvaluateWidth(0), time, _calculationStartTime); + + _trails.Add (newTrail); + } + + /// + /// Gets the oldest trail following the particle id. If the trail is already dead or doesn't contain the particle id -1 will be returned. + /// + /// The trail with particle id (-1 if not found). + /// Particle identifier. + public int GetOldestTrailWithParticleId (int particleId) + { + for (int i = 0; i<_trails.Count; i++) + if (_trails[i].particleId == particleId && !_trails[i].IsDead()) + return i; + return -1; + } + + /// + /// Gets the newest trail following the particle id. If the trail is already dead or doesn't contain the particle id -1 will be returned. + /// + /// The trail with particle id (-1 if not found). + /// Particle identifier. + public int GetNewestTrailWithParticleId (int particleId) + { + for (int i = _trails.Count-1; i>=0; --i) + if (_trails[i].particleId == particleId && !_trails[i].IsDead()) + return i; + return -1; + } + + /// + /// Gets the cached parent transform of the trails. + /// + /// The parent transform. + public Transform GetParentTransform () + { + return _parentTransform; + } + + /// + /// Gets the cached parent game object of the trails. + /// + /// The parent game object. + public GameObject GetParentGameObject () + { + return _parentGameObject; + } + + /// + /// Stopping the trail will make the trail stop following its assigned particle. + /// + /// Trail number. + public void StopTrail (int trailNumber) + { + if (trailNumber < 0) + { + return; + } + _trails[trailNumber].Die(); + } + + /// + /// Stops the oldest trail with particle identifier. + /// + /// Particle identifier. + public void StopOldestTrailWithParticleId (int particleId) + { + StopTrail (GetOldestTrailWithParticleId (particleId)); + } + + /// + /// Stops the newest trail with particle identifier. + /// + /// Particle identifier. + public void StopNewestTrailWithParticleId (int particleId) + { + StopTrail (GetNewestTrailWithParticleId (particleId)); + } + + /// + /// Resets all trails. + /// + public void ResetTrails () { + DestroyAllTrails(); + if (playgroundSystem != null && gameObject.activeInHierarchy) + { + _currentParticleCount = playgroundSystem.particleCount; + _currentParticleMinLifetime = playgroundSystem.lifetimeMin; + _currentParticleMaxLifetime = playgroundSystem.lifetime; + _localSpace = playgroundSystem.shurikenParticleSystem.simulationSpace == ParticleSystemSimulationSpace.Local; + } + + _isDoneThread = true; + } + + /// + /// Removes the trail at index. + /// + /// The trail index. + public void RemoveTrail (int index) { + if (Application.isPlaying) + Destroy(_trails[index].trailGameObject); + else + DestroyImmediate(_trails[index].trailGameObject); + + _trails.RemoveAt(index); + } + + /// + /// Destroys all trails and clears out trail list. + /// + public void DestroyAllTrails () { + + foreach (ParticlePlaygroundTrail trail in _trails) + { + if (Application.isPlaying) + Destroy(trail.trailGameObject); + else + DestroyImmediate(trail.trailGameObject); + } + + if (_parentGameObject != null) + { + if (Application.isPlaying) + Destroy (_parentGameObject); + else + DestroyImmediate(_parentGameObject); + } + + _trails.Clear(); + _birthQueue.Clear(); + } + + + /**************************************************************************** + Internal + ****************************************************************************/ + + void CalculateTrail () + { + // Iterate through all trails + for (int i = 0; i<_trails.Count; i++) + { + ParticlePlaygroundTrail trail = _trails[i]; + + // Skip this trail if it's prepared to be removed + if (trail.CanRemoveTrail()) + continue; + + if (trail.particleId >= 0 && !trail.IsDead()) + { + if (trail.GetBirthIterator()>0) + { + // New point creation + float pointDistance = Vector3.Distance(trail.GetParticlePosition(), trail.GetLastAddedPointPosition()); + if (pointDistance>minVertexDistance) { + float pathDeviationAngle = trail.GetPathDeviation(); + if (pointDistance>maxVertexDistance || pathDeviationAngle>maxPathDeviation) { + trail.AddPoint(playgroundSystem.particleCache[trail.particleId].position, EvaluateWidth(0), time, _calculationStartTime); + } + } + } + else + { + // First point creation + trail.SetFirstPoint(playgroundSystem.particleCache[trail.particleId].position, playgroundSystem.particleCache[trail.particleId].velocity, EvaluateWidth(0), time, _calculationStartTime); + } + + // Set the particle position info + trail.SetParticlePosition(playgroundSystem.particleCache[trail.particleId].position); + } + + // Update the trail points + for (int x = 0; x + /// The trail render mode determines how the trail will be rotated. + /// Using billboard will rotate towards the assigned transform position, this is by default the main camera. + /// Horizontal will rotate the points flat on X-Z axis. + /// Vertical will rotate the points flat on X-Y axis. + /// CustomRenderScale is a global world space normal which will multiply the scale on each axis. + /// + public enum TrailRenderMode + { + /// + /// Rotate points towards assigned billboard transform. + /// + Billboard, + /// + /// Rotate points flat X-Z. + /// + Horizontal, + /// + /// Rotate points flat X-Y. + /// + Vertical, + /// + /// Creates a custom render rotation/scale. + /// + CustomRenderScale + } + + /// + /// The trail color mode determines how color should be distributed over a trail. + /// + public enum TrailColorMode + { + /// + /// When using TrailColorMode.Lifetime the colors will be set depending on each point's normalized lifetime. + /// + Lifetime, + /// + /// When using TrailColorMode.PointArray the colors will be set depending on all the points within the trail, where each point is a normalized value linearly towards the total points. + /// + PointArray + } + + /// + /// The trail uv mode determines how uv will be distributed over a trail. + /// + public enum TrailUvMode + { + /// + /// When using TrailUvMode.Lifetime the uvs will be set depending on each point's normalized lifetime. + /// + Lifetime, + /// + /// When using TrailUvMode.PointArray the uvs will be set depending on all the points within the trail, where each point is a normalized value linearly towards the total points. + /// + PointArray + } + + /// + /// The trail particle info struct contains data about particles to be read by a Playground Trail. + /// + public struct TrailParticleInfo { + /// + /// The particle identifier linearly towards the particle system's cached particles. + /// + public int particleId; + /// + /// The position of this trail particle. + /// + public Vector3 position; + /// + /// The velocity of this trail particle. + /// + public Vector3 velocity; + + /// + /// Initializes a new instance of the struct. + /// + /// Particle identifier. + /// Particle position. + /// Particle velocity. + public TrailParticleInfo (int particleId, Vector3 position, Vector3 velocity) + { + this.particleId = particleId; + this.position = position; + this.velocity = velocity; + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs.meta b/Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs.meta new file mode 100644 index 0000000..835539c --- /dev/null +++ b/Assets/Particle Playground/Extensions/Playground Trails/PlaygroundTrails.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 76bc001fa44a547bb86aea579a67ae0d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics.meta b/Assets/Particle Playground/Graphics.meta new file mode 100644 index 0000000..217065b --- /dev/null +++ b/Assets/Particle Playground/Graphics.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0a27dd1d06c3c504583ba9a6fc31f673 +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor.meta b/Assets/Particle Playground/Graphics/Editor.meta new file mode 100644 index 0000000..fe0db5e --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fb31e28e5e0963e428467e92c4c48753 +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons.meta b/Assets/Particle Playground/Graphics/Editor/Icons.meta new file mode 100644 index 0000000..42a350c --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cb29d5dac6f2c2048bfd3819df6838b2 +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - 16bit Explosion.png b/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - 16bit Explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..ad95a6e60dfa0e967e06da07dcf6f966d5209d7c GIT binary patch literal 7236 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 b{}W&UDRi&HI|<+)00000NkvXXu0mjfPB_Q| literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Hypnosis.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Hypnosis.png.meta new file mode 100644 index 0000000..1ba39b2 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Hypnosis.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: ea83db8bf09b741a1a203571af766f5f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Shooting Veins.png b/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - Shooting Veins.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc973f9d3c5cb98653a676fcc28a01b9c53bf67 GIT binary patch literal 11748 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 z z6j)o}Iv%J|%>cRw^?lWJN|w85SZk&&yI$B>1anHjh?6V>NdfnbQ6x}Kk*0x)wMH1= zWH2NcHcwGO*sO#XE1pP1Sq#d^#&rTWR>7<}0S;n6>`J?du|6&#e)t@cAxhDZBqHPRBs;VAlTqX%mqnx?d+C5#M;4kPgWNz4nc_| z6>ILB8jfR_bx^&YuUXE5Zh#X2RA2@nl_04U#{ zP~sy5>f$2<(Fn*>$b6aGvhNoBKs#h2ih3&%d;!1rd_kW ztBNsi0@(v9gpwe7L>|a=L5NIgdIK+)vEa9|?JOC%MN;>D7zP)1%ti5DKhwf7IhMhN zjbXuZ2uv_od20)aFn~9f4R9g^Os^1mup@uCHQSbmF6laL=(!*m*UhJwD?cqZ8X;@i zF7j<0>xIoKGn(~Rv#Z6h@n>Hm`tFX_&rdDf08z^^f4rp!Ch+@fWk>;lw*}o9SIrgE zX{HQFp>CerpG_{P#zjeqQdEx+0dWLH5>R6aZ=suDt+ierLRNryNJ8*43kI_w41a+S zz3@TfHdZFj0XyYDL~o9ZDV}W@27^FoGZn}C7T8v*OF_Ve6Vc1#am?w)M|xU8cmMU= z%4-d++3d4B5q+W~|F_di3#J7xw~G7+y7C}9U#&|}PWwd|Au*wv*JQIEb|=6&0GPXz zagiX;%gUnd@S%qxCt)z)Ixw|nJIkg8?rrYilN(7Xn4Nwj!-6o!;D8H($3|jem%!%* zwp)zE8EVxsD~6S%X%HV@Tqyq4?8>NW1Yyj;fIz%Kv@ghAG>dr`HP~9_dP^hj!=)(r&X%ayjs+#5240Gzvn&l! z2f>}A8J?p5Wu^T03u}{x)nqwM10W4VhMLyQyV9}!sd&Y9pDQ;&uu+(M?tW6je720;I+Y?|N%v;p0tx^6!Dh7U=)r`{(mDmtDfC@uVan3L*p@q2h zIP4wIa~#MQfY52f1Y_oP8?q5nU}sVU5?6v`3wt9#VSr2fq5?1~K#^M|0n38`fn#S4 z6QIb$-N$SPAL$WzDjC`aan%*&L9j!qSv9R2x*>b+P>es4Nzg$st62igz{tiV^=nJT zs~V0;X2ZB~D=9+(>eehL!%)X_Nq}h}1E=dsv-JwC&qAD{Hbq64@^a|dW-L`)FG`Xi zb|J3-Csx9bWY3?~AUM4(F=0!T2TcPBk9+EYTG&o2&&639>Y;zTVrs5#19xAxtVM_v zxKt-Y7X&UF;eZFutH!d88Tt0Ocr=s9(DbE-+VFyrL=5KahpUydpj?BSwrykuP*i+O z0&#cOiChY|_fj+r<<+{fvDgM-$K_B=gnO6PEo`0u6>m@!MkNJOcg3`z?l+OCWV_3T zo#W_T$tWb(nuWKd z3e%baw<9-9KMVz`HtwKQK_~)d?oY=6qE}4Y3X>3coWdrG_x-Lm ze7`YpkH^Oe&!Y4?x}BU+$aYoF7f51XA_jhoGxTc>ukF3^0tu5HD03OO{RFVH>)G=y_p{I-X5IS<6S*ZXp5?+VH&B zeGvwl!bMMjC@nh}-Ej&A`={plKK+a&p3{rRs{22}RH|>av5Tz@d-(e0O zMih-GCVbF{qym+_UzBl)C+@H?PSarF!n%bUX9|1;xYELNMbj36tOJB@ z$kpZv5TC%1fQxqZZa=s4eTZQZjUOx@@rck!;$|0Xz_3ob+vwg;F`oBI10&wfn7A() zzp7|wBn3d?7F52@o;%$LHT!Tn0rL3ensjftm-<|#p?UtDp2r0W#kQha{f5f6wl`5wNe#tHez{ z9pIh;6i^4ELa)f*Q1z?pVHv!6WWK>~+9(pz?^I0!HGMRbgzSI5Qa8dzsW&{ol>;Tt z&**yHb*VR+HT)|yhH^36bfM@mB+&>vT5lct;4y8-J3{kV#6=JK zo7xgTo`7=bVe`TV$xy^=H3_H_vyLcl)4XO798BULXUti4$hKK<4wP^D&A;WZtCqJo zfZRl|W4)*`~<9$zU%gU~QZcTZ1!5Oa+ zkMyx^apt{y3!}^0Y*9kKOEMeQDK@4%y8X>N<1Il^L!x-5E<;=uI2I^nQ=7i^WQ9wb z!CQxk6?SP8p=yH~2o6uHvC0zgmT2~mLENydToLk3EB)WAFHAq~|M z1Yyl_-^_=A5h6#M>pu}y9k(qODdo0G`<_BH1Loz@iQ%sFq~w2XIsm1*ua(~3!rk93 zK08;PT2{Vt&Ln*FnSYr?j*MAO`gXneW_h^rO>o+_m%dFwO5JYpS=pwcewdB4l>%}d01A;RDt(!YI2=jR{D^MUqH zqvc~?t1YX3OO*cBdpD(7le9{tD&^ki1VZxW{r#XKTlfCY*)N~N$oX$}r@r^EIt#pUX|8VlUE zS-ga!dfqRbk!F+lQfNJ7>@6fYg{dXtas?8qnXM0oZlS9c@<||Xn^)H{UU!5%z zPJ?g_+*%N>4Ppz4HxH`U;b)h?C0ORFq!8g6^S#+LxbDSD-Mig^Z^0QL3E>J0hS5~$ zZ+J4%{1Y;ho82!U|7_iA8wo3^Pau~JyfcgT%ZtQ=LwsADe((0o=u&lNaWyng!|Tz$ z*JL&%dfW6R!O-m@KUSChaE-i&=QA98wjs&>>tmhxMV<_IKyHJ#*PnJr7>hSv;Fho8 z!1EjgF0yL0wf6GW`Mdwe!r4W;sCefl6~b0S^PG^)tnre7*HtLV+ShnI)5 zDF|19(6@t6w>Gxg1rDNgQOC;@)SK&-H_qYJt48mEfab!{d*CR-GZoeR>KXmJmuf4e z65*;CU3{;}NW;_6+eMnqsc0F9NLbJz8$qhZSb9vtc=I;HV14MsM)w47?)*Ekh_uwy zslUfA!fv#YYZA6Zm}|B&GrKrN*bR8+X8QR}AL8Tx2`~UuV0_LfY^rDg0000002t}0ssI2w=C_w0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBV6&`Cr=RCwB~TM3L^S9!kYuJ6A0X7}!i z?ZnGC@s`F(oZ2LS(MuBKk%MyK55jh1=QN%|6>E&5Z=`7M?|cDqw9t~*L3+yRhs;zN={oIpXG8U3$frFv9M&s{45i?(B_>Z=G;Tv2=~SR z!FX|_;LBw~w7eIVC}TpJC<^BuD{oX?Vi{9!-V%8e%qeb!Jz|lmNdU#dWA!i$C0>i@ zW(BI1H!@P*C^O|!;kr=;*4VtZSh3>q^@Gefj^!L+MA|aE((y6BwB?gQ-pGEj6rzen z689#-Stc=(+A^2bmeMz-qQ#_!g|KWplg^}4Da5u~t>EPcp}2{R70YLoTv5c_P_NfN zyNTLa;#3po8HSlqhps!evwQchJMa7z(==Xx{bbjrF0E7!!cgPfSitq-240+J`N|^Z zhFm{;eIbyjVkJw3)anNa6ED|IH#axKyi%!%oNa7uy6c|1ckJkpv2+}JU|?WqXvp)t zFp9NhtXhznOOwwMEtseUN3IA?Vm`FbGh@!B>I8xBW(mS*&t%rDS^dBR5A4{neR_Jj zQYi;PXc$IcUmpzHw{PF3&6}er9vK;l=37WH7hJc3enjmP%d$+eMMLb833( z-1&1`w{C^OI)3z|AQd*@miQdWoM=TUgCM|%j^nIdyC###&dkhAPEJ&-UKB+NuEk1l zLd#kX#zieSe2l*IMa0qwV6q06-PgJqHU(B$u2j0ZF7cwVGOfG28|iA>*8aQpSH0?` zu1mh}tAs%g!zpXluB}$8!^14qS6Kj2lF%eJ$v?S-m)2(gtInoY=82}Cy|iXd#_);a@F&_IErEU)YKG8`ryG| z-LPRjoU(K0&febM-1Ia&CFUlTSctS@p0E@PWeC}(3QX2rkT^vs!739@$Fgg6ON<}; zaj3_rDj9_`jzRc<3K>VbVQTmWry3UAHZd`QvRk!k72x;U)oZvK?EL9VFU{m~sNNXI z3lR$qsEbOru5}+jejMeCEP&TTj^5lTA-0G-E?%irLA73gFGycxBaB4aKlj}8nRFT+aZ;%u@I?*WRO!I@haY~pwWa0x=bwj#wOU(Ng^N0t zCF5cA1P3UiKLGi=Mwrc>F5hV46d>ss8~Ke)MleQQgz>9`2g*w|PuHv{~@ z(P02J8>0v}Y-~Sv?3mQ`T|0K9T=(+j%dia*E0xN)W4T=J*tzq4?|a`Dzwm{Dfx&qq zL1@Kd5q5HEsRh@pxWULs&ZmXB*}RAy!4`_dOpusur(Nf+yY6giY+BpCMc1N{@u@Rs z&SW#`Z96)URLDbwLM;do1h^>{OVha-L=WHY+P%BAwRLQK3>Ios#FBDelOv;}CtiO& zm&*}6StOod3{F8!B8_o(ptoGH-H>wuNN98PN4c$;T72W}X zu3Wwfq{1;EPuv;TK(?1bN)->+(PT7-zGaQy=UJPe2;+;8^*G96817hwsZg)r)fg@uZkkQPBf?R9lsBEqW9VSccRqM{{f6~d-hAujmyi3zLQ*YzK|f_suuWwpiaaD$TsLX9O-Lrb za!w~97E3&3p_F}n{Z?u!^t?FqL|L=4dK?DA5G=Vg_OzusD@odo>E5=p4UKjxBjb?C zC&uq;rHnK7?A~Li(j!Ad%`L6a@puCb*wWPW(NBJ|W%K6$dghrECr;=JdF28DK>sPk z-g4`0g<`&^ySrE_Nm(yYU2%T`HY&KX7W$;SQox*?l*ABKp-XNENnc4licv|r4stWW z^=`INw^GGi><5vgNRqMWupWB&k%u0A_bV^G_}Yor_wC&cdVKlkFZFcyoIZWpuv5s% zTW`JXv3I}w_{%T%_YdIO1J`>4q2~()f@|A}bySoL{kWc3iIGxkTh;c|Q%}A5=B4XB zJtEPfwd9d=(@|%_5KDFDNv4}MMZj7Cj*X!+BfOXFCuonVpW`p+!hlcHxyK&u`N8bI|t~-C_C&!KfWu|9x zU-*ZA=-AnTkb+V7?YndJx(%-$KR!A#7|Z!0Q%HE>wG*!ay``KBG|LSG=1+4}K$DM! zIZGUDv&zH7RD44E%*_ z^8N4s0GUr}mVnvdNGdHRwOMVz%1<)di5HV z`E`&R0SAyn)7slN;^#u=#dDoq{k`2l*~#&-@yV%TK1U+Pw88!@%}uSXt22(Xrmf}t zh0gKOQMd;g+0%V>Xn1&VXarC^HaZgc-olZ#BrX9AK|4etBP|e)yBd)|ovO4rQ4tDX zDGdc5sR|VdOvxy2Qwjsv*SI>Y76Dzr7`JVG>{TJ&!b(w#d>X1+4h0AIg*wwBH${aM zX?m#J#mQmAawETNIO(8VAP~wn*|zPP#@a1A?mu|1Yl#)M($++G64~C^+!}b*LVgB9S#S>|WT@#DH>8lA$hCl#bFD3AElNk?FggYz z)C2gN^=_6-M;^wZMjenXbzkWCRzQd&ES6yfAvx>H?6b#)^FHw_`$;nV1IuE{hjAKJ1@d+(;$r0Xi-`O9w0?2=P^DnQAd9AID%^0upAgnpQ|7v z<8>2RK^QCJy3WuMSmn0F!sI<}Q010E;a{8pn?$et*n8gd^{t8-Atu$A9#Pw&VQMzdTba7P*?tY^L$x+aEae z&cj`oI6hBai;E{__hhc8!xV!;PI)zNE?g<$}N%|QdiI5DY8P1(SxtJk8WCE$f~ zOiO(@JEozi3iO%Z_~tjmYQb!|g@Y>C9VQU++u!-_OuneJ2YL{wR-@%HW8wT(OgaNe2#m`%G^3xc`o48bdvj|m64p&y zyYJX}-+_B^k27b^p6h(8S}lZOH3_4ru?3ld7$S2-NYSxujTD)tY^dWof}0SO0${X} zJcF#mAUQ~A6bOg|uawOMoY}f!XBr?34uw@;9nXC~$}0Wz(@*a`bm+pFvt6go>=+%} z_t4=?YwO)d9>LFaclXyn^(kBr$=ue`*xB{ggTMCZmJJ)v{NP9BVyUgQts2Dp?!5B@ zpZH5M=HLG9^0hw8Fg-ClP}J*NZB&Oe9b*+~I_d~?R7qMAG;4-st1zll$Rj97s;K&P zbjoMa=RkX%F-=cK@oEzYK2VWYVi0LhI?YIJ+MFwwPo8}JjWcJoQYAu;PfwFBmD=RQ z1T^fDhc=u;gX9i{;lZEKFB*>_Q2g?j zzI5XBnW5{wqhn*xx<V!T5;OhR%Y)v~UrXy0H}Ks-sHTObOld98-Vs#h;$-dJD&l4MIg#Ohp9De-qdmn$y_>z9%Vi!OwsFd2)v~Ou&H#R=e-``iRROdWx z!bBMd9@mMZa*U>IMq*)1K`^mCG!3=gV^eXOicgXWl%h-!uom_c%^1m39|oHmQ@XO_ zWLDAHEk-otp7&A3B4LXO2df@*1j~+dG{71+B@$deAVqy~b6jQ!vfT)c- zJ8+FPn>V2iXvk(8GMRV0{q6tp?APA=-uD{1LO5a8whqYDDDZ4vNRppChTyq_RHHYx zFkRmuS3Dt=8C;0)2;5YAlEol=QDuoBQ(1L6E?Y3RJ*KX>Jd}?1GeE)Ag_^x*i_IFQA z7oC*PH>3E7q{RdvaHXM{pbw&uGRiCSh)vBLElp`1C2`2qs7?U9Ts_%sWo~3NmO6nA zEjd6KI zfuUkTO5MaTmM=-tGdJK;x@pqiggTV5a27hz$f(x!EudQwua@knOXYMEDx6E2p(tit z@RL(;fY2d*(XGf-I;xiP)c}Pzop!P<&A9c%_U;LRVwZwH&ceE5>`YK#(`>C za5|RDOr_wLbP|_qta6lVQdn*SM^z0DDQV-Ns``CSf36GGo@ly|F}P5%QhM%d&vsoM z4I)2Zn8_7`bLY?Ns_tjUSE`31WT#Y7NRv<^uz|IRnaU7XM?oUB6AjN6qPo;xm_aU} zL@@NECaHue@|?O(GCX2>B$=T!Jzr2~?6J~WnY1w^qXA|~X(ZTd*DDKO;hOje6hAaP zG%=lf?^8$bzyE|vUkUariQ~Xy3}6c*g?_P>%1X5tLu%8IiGX#I7*cT( zh635R#&k7ez!8*qtp4J#$R@(Ng-b{O~jH|U@^f`Nvp1mCljXW zW^p4REeI9)xBtL>n>TNXNw~!(r=>N2UPYiss#4bpfAvJGQ+SDrBg)lEzTW$*7*gUz zA?>l5W*m^GaV`-LO<8m#gK4<{4^_1F?Oc@_2KA+8A_fgJY0T1%bn&>h?Q5P zpHyNy*;X$8J)@W#h)z^b z#1T`mfY~~XWPXErRG)~yX)@%BhCxVkM3Pu4z3P z=CMqp2-huSmm@@sA1)7j2&M27F?cGs;hG7A2(5lERdrG56R6an4yi~a0S{4NjiiH7 z;KgDC8H{>StCCDiG7R08wF-w#+lhb|P^0h^As|1=ZaSGdJFz;g+L>n9rWChef@Z}N ztF}OCG?BDaye~kBU}H@TKN2LN_@E{XXb8mk!5S!@o#B&qjRHH}sLZB75oUTUh8!i< z>9@i%vQXz35G*UD={0REyDcfQkj`O_q5W(a#W)qy`j8~a4kdT`v0t&Xt&vwr9+Uz? z*icCxvy)N3F^k3+)Iop*<{;Jqx_D+Pwp>@?6S7oYgS}%byphc5YN$oajY5EmUz%1! zKr99>wo+-s=6QmMlgcFHU4sytGJ?QKw?emhY~PcSONc2E@sDr5QDDRGN!50*!XmGys{#A_n*N;)s!h$J-=C`I#cr zHdu=o6*bRTiI~R#TPjx{B^TE=`Yku>6?2R$ln9z1)I~W{af-)+zyb&9Gjs6$kwYk2 z7NXpKx7NPjsutaW3$9~XZlkKK*;$*a0h*}$RV$N~l0f(FKTS@Yii8ie^AkM+9jz*mkHZj;xlQR&z&o{EErb??7<7Ww3nVEVn|x zLeD(e4tz{^;?4t{NX5XDES=gv)iekM-r!n|34UQl8huH9zNjDphec6nrn0I>BU~-b zz)(&EyFSCU(hXF!Or*G1thP^B2vYl+X`*RM7!}fOlWp5Hgck{j^BoHkl^7M016TlF zbTYyA`^#IQOOY*1i3~YurVR$6kXDbIL_vj9i-!)pL{S?DbKWMB634(nlJ_B~mJpvh zArKhyzGM_42@&2o(9g2gn0@kq1QXpQUFXxQOlU-L~=K z-#v18?-t=?1WdqcsdctAB_2$~2Pwqzni`hS6DE^21qTAxQqn}!+Edkeut0HXqlP;S zF0&M{l%)^MXo!#k9CyWFl)&`3b!<{AP)=G3Wg&GlDWNBUB4vleAS%>6HV%<2obV>9 zJ>9kr-XGunc-2f%^bmY2{f|%X+R$Ww_al2h_V7;RfPh6nH8o75dLY|`iV_KSzXH7! z1=KVtIf>j*{!U6!)JCPL27-9i`_qiWuCO9#XK<#s5KoTMh+*P;a*6%HDyo2%+KenT}si&VCd9lZb{{7UETfY3^ zeQqWLGUNm{*+Le0N`=z1dVyzUTBE9G5&7`UEF=r-Pp^^+1H{K63WlZ|iU1fqYQx{y zPB&38v(!}Hpsz^o*s8D-@kM27(EJiy%EJ-WUP(4w6TaFuRFw=jfy$%Sjbj~;AlWEN zcKWZ6>^!)mbtdp0|JK;2e^J4~zpNTPyE{EAAWG>AKcd_w9+S!PrU#8 z`AR5vtxLV~XZIf7wJ{m_#;gDc010M@l&nm1H9wB8$!r38HHx!{8J**4sM zcL4;B;NXr{>SukyD}A1Ah<|=?-4`ESpRp?6x;XK`mnZvXqSmze$nK30sl0CiGsxLK z43iuL+}qDja_6FQm;r_d!7Ph?)g01Sx;ov~YM@f%E}p3YCqkdcs)kBzvd}cuqX#5A zc_$C2!(R%eOgF<*HYfxcc|w67r>HsQu9@Drmuk{5RySqux~+Az5*&Gc{PX9iEq?#5 z#$!)y+SKHC_K)8C%)qCAp8NRo*SRx~sXPEJ@FIYiXoEMxg31gJj!3W3;vf`N3=NC0 zp7&dm2?clGwFg`Yu~@|E3JD`tnA}fu>&S9Xi9zZ`xIe%tK{>CqE=7_Dvp}WLi&!4f z0%T_O)#eWMPhf1@{pyGBI`(^eKd`?w4vK&J(!}rnq~u51{&lHWKd|loE&9yN@F&0B z75h06`)nao5F$es1|E@z#z|;c)QnT_Y@qi^l(gkUu#o38{F73V;iZ$l<4zC9SCy2B zS4m~2QQ)20>Ag4Il2?OULd1$z(` z0H+Xt@ITnaWqG4EO--O*frC&Tfc_}en8=4%PUO9JKGXB%Q-qu!xvS-cqqnSgE9b6{ z|LW(5U+eWg_N}4m>57QTT3n@P65^N(2{ec((J<4aY6KhlW!1>4Y9tEA(n<8Vh!2XE zAR(yY_LSJBV=|r6Coq*qMzv{G$gPmUVjYS(P&*$nJzk(lpL!xmPp%Pe*0gJyGCcHI ze>!l_hPQsg&(OtKvh`dng;ydb*WvgjLWkN^_#0N|+G5$Fo^dn{lXW zo6mLClPV16vew;doE;W)1==q3vug|28)gP+-B^8C(Yz_s8+r9&@1cL~`$fM$T8K_v zDG0xqn8%N&E5$;o7*q=;x-2eqsutLWH1bMBec%+Vm3tX<;z1?P$rGw&S){NlYNLw$ z!i~JiS-|4EjBX~T2Og+^aSW*(9w2Fnk9y0D>1pP0<+@Mg?gEHbV=kE$8%t8O96hCa=<#UYyO zM&9mL&r}%(dr=J+$pGGmQR7#2^n}QBR=Kp(M|8!i-30PQ;i{}VYBZ?yqZI-zBh*x3dS*(51rb$} gOrA58`5yrW0ObuT&d%X1ZU6uP07*qoM6N<$f<<)hPyhe` literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - String Theory.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - String Theory.png.meta new file mode 100644 index 0000000..d817d01 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Abstract - String Theory.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: cb8fe57cd63cd47b78c512b6cb3828f9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Default.png b/Assets/Particle Playground/Graphics/Editor/Icons/Default.png new file mode 100644 index 0000000000000000000000000000000000000000..028adf2601c6b683d488c9bb88cedfdf0f61ca30 GIT binary patch literal 9326 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 rW002t}0ssI2w=C_w0000PbVXQnQ*UN; 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 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Ring.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Ring.png.meta new file mode 100644 index 0000000..ac23148 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Ring.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: eb30b1d0e444c4556960c7042d29784f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Robot.png b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Robot.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0f51006ac069aa60829829b509ad4cf088ae62 GIT binary patch literal 11485 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 D`j1$} literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Robot.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Robot.png.meta new file mode 100644 index 0000000..caea628 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Burning Robot.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 17ed52b4e246743928ec1ec2ef8a5699 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Campfire.png b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Campfire.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c6bc019375fd03eee2df3ef53c63666f5b9e77 GIT binary patch literal 8359 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 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Campfire.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Campfire.png.meta new file mode 100644 index 0000000..b339221 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Campfire.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: bb3878536081d40a1970f04bcbeb5a1e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Corona.png b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Corona.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3f2aff3574a04248a5196389d2f0352bd79082 GIT binary patch literal 12281 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 TploQf00000NkvXXu0mjf(4E!3 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Corona.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Corona.png.meta new file mode 100644 index 0000000..8128635 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Corona.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 87036563b73f24d38b515d892cb425ee +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Raging Fireball.png b/Assets/Particle Playground/Graphics/Editor/Icons/Fire - Raging Fireball.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4c5dc8ea484f28733cf14ba29e17f7483d3446 GIT binary patch literal 8108 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 N002ovPDHLkV1j_62q*vm literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Fountain.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Fountain.png.meta new file mode 100644 index 0000000..1f22f75 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Fountain.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: e9116afcaef00450a949d2d983af28cd +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Pink Squid.png b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Pink Squid.png new file mode 100644 index 0000000000000000000000000000000000000000..e6cb230f9eed0bc1a1fd03d0ed585df895cc3501 GIT binary patch literal 10109 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 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Pink Squid.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Pink Squid.png.meta new file mode 100644 index 0000000..06901b9 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Pink Squid.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 1824ae714e5244646ad99c05eda63a63 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Sparkler.png b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Sparkler.png new file mode 100644 index 0000000000000000000000000000000000000000..42fa6877b85cfefda8348de44ff0187eed9a07c8 GIT binary patch literal 8627 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 FV1h|c`M>}G literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Sparkler.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Sparkler.png.meta new file mode 100644 index 0000000..d76a35a --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Fireworks - Sparkler.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: c9151beffdd374add86203bb3703c0ce +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Bouncing Coins.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Bouncing Coins.png new file mode 100644 index 0000000000000000000000000000000000000000..88cd84f69af647832eadc43bde0b24bd58a6e8f0 GIT binary patch literal 4629 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 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Circle Shot (Script).png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Circle Shot (Script).png.meta new file mode 100644 index 0000000..352029d --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Circle Shot (Script).png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 672fadd0d1245444dba30066ebed196d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Cloud.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac2f1a5fe06d6cfc7b5021d794a0d6bd99bb3c6 GIT binary patch literal 4173 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 XeXV(kWtUpQ00000NkvXXu0mjff=bo| literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Cloud.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Cloud.png.meta new file mode 100644 index 0000000..a86c863 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Cloud.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 866f85a4a947341e79b24a5c788a02ee +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Cubism.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Cubism.png new file mode 100644 index 0000000000000000000000000000000000000000..bc15b7ff281abc175e69067dff2af65abb0cb9d0 GIT binary patch literal 1572 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 X6h2M`ZXmmG00000NkvXXu0mjfc8JE{ literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Enchanted Orb.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Enchanted Orb.png.meta new file mode 100644 index 0000000..05db185 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Enchanted Orb.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: caf46de47c6d8429e976d93964bf5eac +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Explode Implode.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Explode Implode.png new file mode 100644 index 0000000000000000000000000000000000000000..c8561346b9bea83c1f599d6e222984b6fad36117 GIT binary patch literal 1841 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 N002ovPDHLkV1i`!{Fnd$ literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Fire.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Fire.png.meta new file mode 100644 index 0000000..ca13cbb --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Fire.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 0e839eca673e741e4b3f44681f7712a1 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Flowerbed.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Flowerbed.png new file mode 100644 index 0000000000000000000000000000000000000000..276176e15eef9a7bd880e27e90d32ed5a8039e81 GIT binary patch literal 4644 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 VWdm)=Nvi+=002ovPDHLkV1n!?FDn25 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Hot Circle.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Hot Circle.png.meta new file mode 100644 index 0000000..ef84c43 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Hot Circle.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: a9b4d4226cf3b4a27a45e3aff35a00bb +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Ice Fountain.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Ice Fountain.png new file mode 100644 index 0000000000000000000000000000000000000000..a8f846de29c57e7921143caea7a0e9ac62ca3bf9 GIT binary patch literal 1251 zcmV<91RVQ`P)>M=0DMRuB7z}mOsSTVIF9svEyP3=4N}$#?-WvjAnp2W z-037=F`>nh5d`_yE{IM$JU*11kBxG?09r+{60upS+O_k55&OPXtJSW5WL2xc8*y?n ziiFqKO5@2Wf@%Rhv1!Gfwvw_?tI04_hT$wOhe7jhaV$v$ z6U!nLFia4WP!=BSMJFe0rkY?!+?<-?hX;@Zp0rH0^gSTTd3oM+i%z|c3k4`vX4@hR zqfR?+okD>jJ!v0k4dh~y%TK*|*>CI#9!J{N<#pr3eG+jL z@#@uU)|Bht-wclq02rr*_(WvqAlXwzoy6!%vQ( z*Kn2$Mra^JB67^FQYl}bb>CR3ef(Me!U8S0=1a50wt*k!IK;HjBmje`z<($+Ax7Xm z>i3D@5Or~J3H0x5Z3c(?*s!Q=W5&k$YH9`v0F{BK<9PbY)ek;=zg{i9bN$`M58p$V zF+vhI1f3XzYn*eZc~K&AE(g4`Y7IJT&kuKQ{8X5!TGP{qH*bJ8$-eMF2rxeMqMe+O zlPg%28F%?2D^Gj>-s^gy!&vED?ef=OKDxgvdOZo%)$hY>P_aNtW(63|slJ?jS+#39Ie9&0vWJQo+{4^9zN(b_GqE-=i0go zd3${=+HZ)E%Wg+Uu}&ybV=2O;t&|XEB=rYP<@I}8TWY5I%~xN1erc)iJkm>rP@DrH z@P(P?&dSFF*xYFTy_Sqqh#G>3c;cp7PvWMK2q=tUyhz1ctz*xBh|sNHZ>e?* zHq}uCP6yXGelh?+a>G2 zWx(mMfwfM5H5));92jQrgY6yLU_9jiA89hItN=rhsN1$+v&_y7y!E(jN!z1A&dY3 N002ovPDHLkV1mPwOY#5! literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Ice Fountain.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Ice Fountain.png.meta new file mode 100644 index 0000000..27d9efb --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Ice Fountain.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 5ad32176dd2134b6687cba48da2c1977 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Lagoon Falls.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Lagoon Falls.png new file mode 100644 index 0000000000000000000000000000000000000000..527e6dadf9ac9e0dd963d28761767289fb99bff9 GIT binary patch literal 1790 zcmVq?#}z#@``|8@yL`wZ zDa)c|MY7}8c5K;jku;5)0tJfZOA7Q4G=HE#f`04&$d{n~P_$`_7AXn@C}JSCTsMvr z$F*HYvLaa$C5w_sN_=ylGt*hB4>+P@4Hk>#f_v}WbI!eINd9OEUt2;DF8=on!69$^ zzvM+g26wKhpcD#K{7Ak5AsDvQA@3;lle$Q#GF+&uESDA|8H}V6glw$Hvza)nWg+9h zv0)mCU%&6n-6f14E&=D=b2I(7euC0*YS>5ZoXF*Nt(2$hh3j7vm%3Pv-h1i!M)KjGxA4%E) zrs+Y3)mj@@|JHhPy)Je-;2#1z^21(r!fzY{wg+{0z`)jvJg`7+qKuoLC?N+W&xc6X zsI~h+ug7O6!eVKIbT;IFpx66rO+^j#BRgOnz=WdG%+F|c4B9eA!ty`O8xM%Y=lKvx z*((Yg&tc{mNR~h^LR&?X+qzHrCZdy2Dx%?uE~xunr26X7NTy3WBJPdD^#S2r+3WI! zMa*VEXRC-9Uy8w{yL;%EQbFMsZ{Nd_Y-eQ+ECp(rAAGEEB9y~HLWf11P2{Gdt= zsqaEND;7Rtn|H^dO_3Zhf!sNqnZ<5Lt9LPcQViojP{MO56w|TnlUAH_>pHR%)I3cl zUtwzdHtM$#s2C-1h42xDr0WSq0mLC7k{EFjq?7E_7$!z==0XgV(Sv>}N%DDpqOB5$ zg&9(O4bCGZK$Fm_LAOQRP;a;gRdg_cY#YVPS=`j(e?OjwTCwx5rb(&kU2hW~bOJk{ zp4DIA3V)0*;!%=zMWdGZY+Y-)2WdFK0f|*)uhooOODNcw%)%^;lgViWAnp_$9hJZt z>08+Od;G0Q;iFwcrKR+JsUkrKY9-%1uDOt;nL*^S2r~s(M;7BzM39&ck!<;&AX5ln zzlqcgE|!5mCLWn3%kex$x~o}74%lt!Rr!FSR|^MZ?S8`4UI&xOZTU&zNnNn}_8h5A|3of*YX zUxK5f*T-ZYnQ5Q_qhM=iFTnmG=sVC0P}+!2Bju^-%19fjCK`;_JgpU}fuJmIjA0}* zuD3m<>$5%C{S4Uzwztu1V0>nZ{vZdEhJOmCwBT8gZ^2xFnZ)rW6q}=loO?t%TO?wO z=FdnV5ezMz$+%xW!7&Fvz6d!O*mfSpUt**HoCn7KD@7-E9$27hq?-{%-J|V*`kX|F zG=G_fYu<=ELp#`27aCwP$Y!QbKYO@eQ3Ui;zvv zLX4`IK9OxjH^=XsfQ(;+hOCHNylEhdlfWp?XZK2jN;55BHE$Vd?NZY_zc6 zMY)fq_)2VgR*Na|#s{IrVJ$PJNOhS}^THJp5B!dgtcKkXt9@*BQTJ&rNHjvD%c%4S g{>;$(>)!$l0G;UnjOPd}t^fc407*qoM6N<$f>Gd63;+NC literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Lagoon Falls.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Lagoon Falls.png.meta new file mode 100644 index 0000000..ab79773 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Lagoon Falls.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 7506e55c6aef14a9d89d58e7caba8db1 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Laser (Script).png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Laser (Script).png new file mode 100644 index 0000000000000000000000000000000000000000..b581eca2fe8399ceaf4b0168eee07774c342a71e GIT binary patch literal 3601 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 XMpU^gJ)OG%00000NkvXXu0mjfwyC;? literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Laser (Script).png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Laser (Script).png.meta new file mode 100644 index 0000000..f49021e --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Laser (Script).png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 82f0b9452c01d4205ba60dd87e408570 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Light Sphere.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Light Sphere.png new file mode 100644 index 0000000000000000000000000000000000000000..cacff61b4d39212e29d7ab4a30c9b09fe6c06840 GIT binary patch literal 2328 zcmV+z3Fr2SP)|45RpI=g6UfX zLyTqf=STM)03`(qGpw+{y%@GjvPA?2_0U&UD~}13K(b@QtbW6bhE}z zu?4#L{x^QsR9Blo)T(&~e%Q+avpm};4hBO5KD@9Z2~d)a2WY9kMIC1+NX#;^%d694I@{+*-kDX5 zxNtnu)s^89lWR|0TYqm} zZiLGy8ex?M!xw1I*W|+5Kxf3=-5+Kc4MPT8oF>~v3UhE5;A0WbkbIz28UTk~vRDaC zPvn(K<(4E=8oqoHST)H#XS<=NdEpX!1!=kEHe;o6riHs&>kUL{lRdA4OJiH=S<8$e zo+J@7){d%gPq+`S}z%_QH3oS5$uYFKXq$0D=HQP_~p}=t5TI`Vjc4c zL9&WKuao~70Zu$o{Nk!o=O2!`7w&j&vFdMEM#RC6IdofHlfRta3W0BAy^OUW+q2% z(khfw2rxy7Y8|AuB!KN0YW&f|@4sPDM30|r+iAa1X!L)1wlrETu(8Vcme;Z4MCrSm?FK^bgbHEa zhL~D!47d@c4OxqYSe$HI$?o|{qO;HU#gUh0(8n7bj+WbJnVOQmJN|*NM9^qYQj9lJ z3{*n?=>^yW@Cv}X6?wJF-L3sPv$>Q3onH?DYnjHHPM%%jn_Ga+oD{tyG|GtQ*d4uB z4jnx^dv3-%b9fyJvY;@T)p8C5QIY{u5+&21h?`7MS-H$?kaPV{fKWrQ>WQqG`AlO6 z>#bUix6Ki#%&1RL{cr)XnRD;mVz1mJ=?jS7r0i;V!QN4z^n2YSi%T;~vy`{4cQrQ# zNJ^q4fqb%Qf>AUqilM@)viH<_xr4jhy&b($yBpJ2PK%k@lHDOZXesKy?J$#2;1yL9F?UI@|L&Xi+^{Kz<>VVduP!yY~3^NcW=F{r^66&~q zCj>V2NR*evoZ)7UgkwCrzp-z}nzUKf>7ShP-)Kn41xlgO9!=zVU>fV(mi*4&Eq$3}_LZ1IlSJfI! z$5sFMGUV!xj;cRC(UJp)jE)C^7dzX64?X^wl^UBt-{czl^h_NNcdjU-AGl(itG7t< zP$ND?G>}aK-iJNEe3G}AI03YMZtB{($dO~AYtCpaCXJ(`)I>9kO|%pT5+%ZNP&Pw1 zd!{8XBlf)|J*#Go-1;}^ZyDUZCUN!a-n9kszApdI*C8n!p#)iRMRm2kp$WfxAn1G; zO9+^nGB4%OQ&lw4?^0VLC%C(V5OuSD@9>Z|5==KUo;_Q=KA$!_J@NXBiAxvbukEyM z*=Rg?)EDlFW~Jc^7ee*lu<}eClYR<^VyZ73)DzSG~>5YVS-SFg-^?-$1Ma_USC z;k3$M?XeHGK0pE}a4g+wnp;M{eL(oji9TNx5^;$_<2Yo3VDb$nRU5Sc7=s|-pg-=c z3)P&6eQ}X4$)}5Rq|-H#GneCGU)WW zBneb1%4$*C(opw+5Q@sdqNGP9|HCh)LL?L0Q=Q#o47L1Dvg@VkB=o4qm4^y?oF7*_ y?go@}(5cYm!_VWMG%dM%<8JHo}Qle zc*A(XGR7P%aX`KS2X1^GKY_UL37n9SEFqgkHXyuv?3wZGOK(+`8N8_O8QMLIeV}I4 z-Bpzt8S&!9i{SH@uG0T}F_9kL$a}1=FC~t|!9J&6@^M>q`o^DT97c7rIyx%b8Z+{{ z>_*IC{9Ki1J(;=u^pT9e+M;a}QcoeFkWw|Lqb`+;N}VXLo!isKKKp%^LR~c#na&0e zJKny=H;!Veuv_Jd->_c6`hv!bl`cd*7uc(QSn6_8mRwduD_&MS_c>b?b>^2JnH?Fj zomY`Was%?iMe5(Q(_=!4Z6kICT%$&x!74cqsueg*IuX)MpkYM-sSyCF(c(^m&giC~YU?l+Fa( z4D{v$oeQ)R=u(A;qxlfN@5FYrHBF*SWtU}1@+HAyH=lNjjAWl9f`n&94P$7|u5-@LveUG)q4o*;~ zqO+y>$OpFI$5A3Cw%&5H>7-k+w-A#ppiHqbsThL^DTU)my^(K2!qt*)6_oKz75Zbj zjy0f0OXHn^v?9EW4NdyoTw@v^04EU&R72El*6s*H- zvcn-8*VM!T1!sM4vOet-=aDWKVARY3=>)1H7g#%F{kZU}&Wb5PDVV`=kpm*D3r%b% zu(Gg_iJ=_TnX>+L#|pwwc*NoMNCrkKsmq)AAOf?wgY=suxRTs1(+60BvY3rvyn&}> z4U3mOT?ojw+|Qr|V2=47rqxvONF!8Z$Pl$y2>p@L!zKlp&Tv|LC%z= zgkDCguK{yihwfn#c9^agTyphM<(?;|eYb}6XGZ5Ms+8{L1jYU}=Pg!53}ogb+?R@t zgkxH_+MP+C_EdChf!r}sOtzVK9K^~7cTGnfg%EOs&=f&xZh;tD-6-A5B-|*&SAF?mUXq{#@7{>( zF?zN1xXLu$=JvC?Y^Owwr^gnYq0FO29b8aUH5vey7Mb;aBaEVn#xn*5SKL^&+Jx-* zEv`~+Zg9TBbxF~QQ$>BUX6uyn7-wK|FbP5OJ%>5vSdRptic{I(qD6uNT478D`I;;u5%O794~|?4PLd;<}#<7 zCg#BgAc{N|8KVlgpg_N)tykQ91M7OyY<0?HXBkd63H#GsLZ8!6a~~4Yw|PukI`^2f zb^O*-hBtrOTt_x6CHv?_rc}ddS`Q&HuS#k?l5D$fTg(T#am-1RIyikg1pw&=Lrx)u z*5^i?E^+&XApa*#jPF1E9)#m4f61K(f`lY1-1%E5zT5h{hTkKhBm?UH>?FLG>GAci a00RI9{=bfzW@I=30000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000RMNkl~zSMSOJ4!4omgG<(MU%tJ3^n(2=3MsKI}gM9k|wrX zbUzK|Wqs>A-}=6_ME&TT<+DB^5RL-J!DjmKPYc$9J^X#2PkrXX!ofNY_<5wCN7xKw zEjAtj0-+RU6k>HU#v#Q269D0WauJ@7KQW0@s^AC*i^Z?akhJ%)NeWUDH8#jHjc{G8 zPRGprp8y=9x5gk`MR|6f;>_YO!$0a?F; zi6cP##ZU8z0IXE_)fyN>?c`~WuRhA7UwndN$7h+FtU@V|%qw2lIAAas5j9(QVZeT4 zkDa&QqJ8Tf`u#RYIcC9p8UP^(=*(gIHcSKA?PoI1|VyXU#{(ywT4ZlJpdm^cPU9Ex=eMtp1vqynWtD!l1A z<{th$k3ao1UwQIzzEYBez|ZyvWT{4H8F#jtG&_C5FvhJ__~w^aIWM6PRDpgc;N?5p z{QQUiz}B0u5)XO^1Q-p*e3StJ)*ytyDV7m_o+GCpq<;BPzV!7ka9P4V;3s#Q{Q94N zL~C~k6DMRkMW-pL)|BU#_<5(xuRXSJ1utK`5nW94hM-~>f9NY6u8R4KXHnKAf>snM$+#db}v2zAf$^dmXVc7 zO2?O3`Q9`9{kOl&g<_7MUcbu=&;2WFFTOzcz3as77P{BQ#vy18)?niiNplBl3~qS> znPqH8hWzp(YY3(a3dbt8*6$K@+hkggwPwv2fTLU-rSPX`nYj2UC%*O#rjF!!{`Nkv z{L{a%^V?Sm8ylD;#zYY|3L(>2onp1dCNWrxa6NP|Ah@@OQ$0!}f{RNt)Et4X%@8M+ zowZxU!4Q+B2y2nWQsr4ICH~wZ`Gr#~{_VF|ICp|;8(m)g@sDY|{vSkp+hm;<*(ewn zI~34Z&E^ADnh^5Ec-ED^Z4RjbFOok&oA6cm)T#tp- zNBGWDD}2A|P(IkD{mxs&tzC>x$4;nI$n?hzh zwB??c$3Id>70NhDfe<(t4O&y0n&rgO0#D>!_Cn3g-@Jwy4#TAP7oDbVh@TEgfS@PlIjGb6C50ga6M#}vOHOY zVM-oJZTTz+2b)HRzWpgI2ym2(%ok9(Jn1OJDOY*u^DA8RzyZ#kK1SulGPzuiY|w=y z#NUS^bwBZMI8cgdoNZR=B#g7ZuBoO<|S++qo*G=Z#4B9!;nwICdX zm%}2^{Vt+7L4N5pXTSCY1z*twQlN8pkHLO}WE6tuBc#L;%0qY_2U~Y}_m6)h0xF*5 ze0M*mA_Ub6giSeH3qI4(YlSDw9l=T;@H8Y2fNclUvXK zg3<0aX}66I1{j?pi^bBjLb>?0I%;wT9ymui?{czMCOLMR=0TURxq~AmvQRp#YsZR^ z3U^`>fWpKCetn+F^Ou==aFy!nL!78jaA%;okxG95;#=&${+|T<4RkQXhC^%`qrid? zBwDk-euwL=fGFIx@gA<{lZFFa#~}_wO2?KEjzh6pqkicT z)Zzn7URq)P>=c`8`*b@48nzntE%HYfS$OOU=T|Q})f_xh zFQX0v=UQOsAZfh%TUx(+jc9M1u(^Y99I|+XiANthUSzRUeiq>zQsRKC(47{$Z~vZN z;!!#>OSonY3)&3dVuXWUZ=aYMX6LGed-F{(ljOIP?pflAXJcs zLvCEV#T!=@al1|H=1qcTgRrqlHtdrn30BBM+Oz*{A%A`w3aJpq62i-qug~J<@=VSx zP^i@@FP~;+x{jZB*}Z)mkuTDD_Zq!kADdMj7^jK129fB z3C18i7ga3dmnV@*QmD-U27w?>61-A{H0Tqw_ED8dOcJAmJ}8g0*M>O4nhblmJN`uz z{lx3oT96XQ%i%bJOsB|Pfn2$YP7|^;LHaq8;kc-S#ij{DDza#-_)p8yPrnU~!6p$I z0&6miaENUe9gVQq@!e+(R%aNSjW;Lzkt@r7GJrn~0H8*9Av8Dsg8%>k07*qoM6N<$ EfZh!N|necx;cy+u&vF+1|W)+v$B{D2ABO?PxUbyz}l^?|06baZW99t z|06L5x^0Bx|4wvAh`bo}?T`OasQ-op@-3rx7sm$ac0oMmwAihOSVjL@Nno5QT;X$- zSg64ALa{TIsb1AnA6zYYW!ttmlQdhGz--eN7G*9IY|bT#^Fl7)lj+I(G#`11Xu%Bb zraa4U$uzw1{TJ4}wu%RtWrN#L2kq(nj5b^FmbfFeVO|QRfJ-owcE?MXUq19oYoOgr zo(1Z7CyHP&tJ*9(Gx1q@Lj(;#p_rXy>eFg>px0yjG+kZnSsM0~GmSenaRJR3YVY}0 z)wT@RW#S8EFb`N7D?FpEFQ*7j!}&Qhl|?3v#1xNJv4$?Eb~ADB6BMq#3SFy zuiPIv6ZldRca%stag)3yR|Xsbs(>Nj>p)ilVUB`si`NnzeSWAmlE4J84j2Gxfbs3w z$U#4+FCj^uk6Z&(JL6fa4B*-G7_Wsi0%;K@)3ivE)v!!4r9AGMyh4R)7Rq3%fZ7wV zMv+~Nit#l^!&NEwM37u}qE=?Q0h`FOHJdb-{q)B2vRAsXev;B-YzTV!ARnsCvv?@{ z4gJi3|4G~UJgU~4*;HR0)zCMu%XtZr3Fb?M&sT4KN#5N#YwO&@nE)Fk2itOP`4Y9< zFGWI+F2>I`J@}(1wt|lU)d+oo&<3tIN=u&3#+z#wZ_HhIy(04KjQ9ESRnJchcSv;NgI79`=^z%pp!va=_fsj0(HBA^I%7C6__pd&|T{D9EhguayU!yBKd?Px31#o zPb_6qaZ%H7`^Y$BA)liV^!3Kgzm1(0d;{1|E#cviFngn@TSSC?5tuIW!XiHgyy-ZY zZo%}gfPVlF0GIH|_V{I{FWcxuWdG*cITU;|ZfBFzZWmI%9UbQ^&{{yxFMn$AQaesm z0K(KSfD@Ryg6UTsAUR_MKB5O`bSX8uC{<0go9Ja43B|sLLp!(G4zAy%7=BrgZCie5 z&xqF_QwrNQNSF`(PexE?)#yW;if!8w~?$eV92D+I%@x z?)@`piL)7@5xXLdMja!aPUWZfp(71rrO4(AaE?yl-QyTuipL%ix^D<1wO;fM7|ib( z2WtX`#c=m|yhD2C;)U1d_Ho6-h}Yqr#>qc}`;0<5C8bd&P2&_otvWz~wI@VHgMY z$OqF{x0aQZejv^gnvjom$_2({*A!?sFe#27S&=m+9l6j#2~l@={p|5I%E1iY-)$gX z>}C&)1{_GD<6VxjO<2FN=r@hy`@Fj@E1obOUrlpx>b>Z`Fv4UBwq)p5vk1bpoEfah z?$#K(+9&6_z5X%DSK-;!fx~;|P>a=TQLzC#J2{pwb>^zA;-dq~TTT9iW>ij*PB2ws-lH*)O5lQ4?HaM-A+3M4ew+f6w9Cs1C*fQRdl4{{hf z5<@tCOxn{J?3*x3O3g@(({+}K=2J>@r(&2SNyz3A8+B|AjU%H8iK3gz*(*5R3`-nT zk`-BGmIQ-?Nonujar6*I`cW{jqFzSY#QwiXZEeA8gR+fmc^Hv8kRKgi;Mhse$PMSb zmSyOK=nXt%AewNxR^(K$yknF4vCrYHL9kM2X`ygwIu-04Nbmitbv2GhH(}jo83V(t zt*hi()TQQyAtsJbRmHU^Vo~Y(pj*|%KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000E%Nkllu2S30MtHQ`L3usrz*pjpM$J53l4b-V0^KF$@KC7Cvn6Y_diRk( z1WX#}WtsrA+QK6uNG7u~P1akl9T3eBN;$1A)--OfZ`AuVnMX>?)f#}AO^cb9hEHfl zGc(K6G%uDk)?Mwbg*zk(1oBko#d5gG%xIjJi`AXWJWai|=$=Zsc;QZ3u2v%l&1{-y zS_%y>v6M0|mqx3*ZEwxp52Z(fl2R%2Y8f7(nC8Xm;-c-U_dYL|?k?!^?%lLpuX!jy zvs9*OeQ|N`GoM>uUeZiL-R)Yf(On*ZMr1~tkdRXT{1;yO+Wl_{`sC`WZFjwQh~IwY zd-orF_aA@%TUxF!_K8M@v|e9)^EeDTX)?cP89 z&!e{SjiJ|GjtL{_DekfAB8=^01T^tM#vc^~+L9V$P?{gG9J$ z-9?1=-dj7ACl7@#gn}>-$x5E4Y5vo1fAiY!f9LMY#j5UhrA$%#KOeo5%wBx)URtbH zqgKo;nq;9_gPCR5v?^dYqjpSo8FrDt_VRSOP=P%Qo?S# zkwj8bDbs4T?!9j|*Wpc4_nt}8Qp$OnW+Ur%+w1Q7>SF=P(ljq}E>Y(22!;?4Mv1iD zuJsn~qf<$$b=z9aDH96Gy+=f*rJT}KCen7>ZLc-LNlNG*lFBsaT%x#!e}M(>jZDJQd>C(`QnW>k|PBLzrOgd$3ra?ak1A{mJ7h02xw*MiPV{ z8$QTvmY}HHo8J3~BuJSJbZ1DR@RW-YW)_Nwy&8;8H@^4cFsw@ZUN2=xtdc z2Q9ljit+q|n@9hQ2s_v&A@Hm^^Kl#5y`M}=0!hgPNWR|_fzhJl5W7<>oEzG1Ul2#( zKAqQ&5jz=);$RH?6eDZK!8>~e-y>_-!O=zM22ef62%K;Ib+iO1M!=tfpl6Ro{NJ;w i_D^`~2>tx)zXJei=W6p|jqk?*0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000H@NkleU-57v5~7dRjc!#L)-O2YSjEX%@i zoMYesl}d$;jSbT2G{s^OAw&S+c^9!^Mjixp3h^U|c#Ny_VlpB}AO(YOhwS+_-Ur<>h5;+otsHyPSLL zEi_Hzzu$k)cD>Hg(Gm4}om#EN@bEC%Y&HN)l0MjiD4^UDslwXY8irv|E|uubW~tZf zEG#VGc^->D{D5uS3=R%bsZ`k8+rxET48sV;hpLDgz{d!v;8Ol#vB;%MmuNPdn5N0t z*cho)irZg*&GYBa$>;N!mW8hCl*?uM`ugyFAHy(y)B9KjR5Aehe4fjfFSE0=!^+AE zxm=EHHp>Seeu(S3>@*rYd-ja8Lqq(1a*|9YL%ZD$qCd%Vc|t_o35Y78>pIzN79j-9 zW|I>qPSD-mjUfcJS`AIpD3{9=PM;2lt7kv1$#D@)JW*hIlr&942tiLz54x_?)zw9_ z*<@*P5g%yo@3XS9!rFH@+zI=&gS(v7osHWP5x<}CztZ5pSWd*EF)5Q8U;GX~ZBd+T*GBU!@ z&=3pr^E{k;NPk}+jYb38wt46L`H%{#=Q2J-9H=BCga{1ix{htzn5Id)-Nv?UrlzL& zS4bxeT}8TDdOpVD)c+{VTRw{G2H_M30m z+S;PgXpqb0n3$Mgcz8H;1HO3ig4x;GV_O@=5lMs5^l2Cdj^psb`|s1=-%qJjqE@Z4 zU9VH!+T!)vn!H|dQYku}4i6qY;BONXIH^>~rfOTnC5dR(l9RL9EEhlim{Pe+cXv0< zy*;Y68dFnKY;0}1>eMNk%_fVBi=@+O z?%cV<6Yunqr@kWtcE=N9} zCtoPwI8GusfQYN#qIo;o_xJainVI2Lr4q^;OG`_9_uV5*%Vc0+fOI+?6rV}X=+Te= z4_F$jR;$d-&4u<<*L50=2G_4&=bvAE!RF>>tc@s+hy#h%ZSpCTOeT}Tw5-^z+t}RX z@bD1RG(%;%B(Ij~zVD+;HgSVViyg*JIJ5UR&mLXG15s6iX{2tDjD@|_~@@6(cj<4`uaMb zef~L>N`#zRvFME+Zb7O^ZVh=C+U)gB^{RKZGcm5ACh p=``cxKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000K*Nkl+-+ES@hC8XfqNZi^^a)q zxjdZDoO6EXe2@6S_rGTcCZcw7imCAl9((L8Fa6~Oe)yxG@UIJ(@jRE$)AX}1y-Yuj z7`rgcOm&o3U%x;Y7Vw0_|HEWrVq8}+=(ky`Z_sWvdEg5VQ{QSMrTp9hbl`!bHABUa zvEgB6Mh@`iYky~DeFLr4=MPXR284xx(c%cRwL=6V@1;2tWvl z5aN1(hmYS!=!F!6BF%P(pFa0XuB>n1xz24nPSXUx5Kt@*V=Z*MyCiXhb{zN^L~m}j zNb&|tt1HZ3ULeV{+jee@K?=!z_dZHxd=gnGV6-4gdu*;OvGmS7!We{bSr-@gyhl3&M`hc!==>^S=-qp69&H+aA5KP>CO)Ge|i}W$b#!q@H{-nxozhF zd6shg?lTk*A7rh!1|mY{edzDf-CkvBVV>e-i9-*aCQCCu({pBxK^J_!^wifG84uZ5 z|A?s7K=pe#afFjaoTwe-*u(_Kj!mI`mrpJ8JkK#E2gF`auCycR_%fqbg ztkKxsAc@-8ZUj++?>J1&&M;j)$f=nlsH96}v~+U-V{)=AW3+My)#?^8P&Y+a?k zwT|f}NJoIp=y#fUGNxb+W5ok(ZZ@w6$kK$d@kyTi>bEJBLYCLBven$79d$`ehLIq( z!u4FrBV`Ufct7K_)4YEEJb4r&m7?G7QUCW6)#)<6O|XtZDv8#b;V`5+I!-khmGqX8BRLLihtyAH)-z_Fu8NOxPj z`pmDmmI$RJUpxBFV!^@}zj6*+ zEKu(@5E_KA56F`Uk*7$Tfz8PCm?V#gqb_qtX3<))dU+Y`XtK=k;o=IR3OGG` zjG6Ho2P#!Or@&t?{DbFTdkw^1VQYXq&6v9LD2Gm+pdEE-*V_b+16c}bj7VctmLROb zioN5ew4f3c85=ILv3Zrd9z4y5Z@o*u)k7(XF_u@}e2WWjzfb4~fTh##(~TlL$3cEv zxbj-}8lOANnFsFXJLk@_UEieLYS3*piMnm_K_8JMs5C>SDLT*bq~PfE4EG;Di6;fV zubDkQN0w#)2qAD?hbYUaw_DWPZIV2v@L#7!V=dZo2}Xwa{i}bb+iH@g16r*CGR-k@ zLLMiG++eYIo=a`IM!nPI;Mg79fAU@&CD`pWs8+}LC-!>5A;c$x=caXiy_Z41dt{P%S(&&;w~oX^UnN5j7ceKO;0KW`p+BI@-`tW8lGl-j$r0!KpNI(SMDcRL(Eau;X6 z{1jKOtnOcwUc1>?_=vF}WP59kt&J6w%_t~=s|Ah*M}w;^u7;xTG8Fm@hebw*D&)P0 zi+_8Qg~cm4j^00jb{v*3Es@ka%uQ4&7hFn?!q?zRi>EA}1HPvy1qFt~kaAd}TqrRX zRw#-B=YR78oAm}t?N7)m-w&Qf?2X>WW`hUMoTlhHG%5B%p#Gv%BA2I zC>BC0QTHEf;}M=>@tD5dc|pTG|= z7UmZ&^UUv_XOO11Ea7he*wX|#SWB%s!KuTCIWjfPP`QjXhGwJ5d&^6_yST_keH+(x zZ)=0PDZn*Lvy42?QBtCn0t;!LVXQ@Kz4z{RH=|Gc=xF^(Xsxv%z*V2^w){UQ?z52W cH?#i?0PpB1ahzTx;Q#;t07*qoM6N<$g7XrM=l}o! literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Soap Machine.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Soap Machine.png.meta new file mode 100644 index 0000000..94a04a0 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Soap Machine.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: cbceb18319cda42f399dedf1e232b1f9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Square Frame.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Square Frame.png new file mode 100644 index 0000000000000000000000000000000000000000..a508b2f70de2ffda1b4f957f9b94091379d30ba8 GIT binary patch literal 4025 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 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Square Frame.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Square Frame.png.meta new file mode 100644 index 0000000..0f1d2b5 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Square Frame.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 9b82bb3f6f8ea402c80d4a0ec94eaf91 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Starburst.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Starburst.png new file mode 100644 index 0000000000000000000000000000000000000000..77e28ddd9a8577b6ccab686eb083cd0eef450ffe GIT binary patch literal 1896 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 M07*qoM6N<$f>CL?B>(^b literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Toon Star.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Toon Star.png.meta new file mode 100644 index 0000000..e6cac92 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Toon Star.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: e6d18c4be2f864a8393d7d6b8bbb8724 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Valentine.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Valentine.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9cc2ec3044d3b8729b5cad989119826b6355b7 GIT binary patch literal 3410 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 A-~a#s literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground Viral Spiral.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Viral Spiral.png.meta new file mode 100644 index 0000000..f0bdec3 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Playground Viral Spiral.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: a4bfba0a070c345d4a6d513e5a92d716 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Playground-Icon.png b/Assets/Particle Playground/Graphics/Editor/Icons/Playground-Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0fbb5f19a2e06ac14a9195e59d6f63edb982b2 GIT binary patch literal 5388 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 f`C$BQ3n~gY6YmBX+3_p8CB;KhimVkO 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 b{}o^W!~}jg|G{cq00000NkvXXu0mjfb1l53 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Bouncers.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Bouncers.png.meta new file mode 100644 index 0000000..c1a6916 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Bouncers.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 65cb849ec2a5f4bf18669a7f18739711 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Spray.png b/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Spray.png new file mode 100644 index 0000000000000000000000000000000000000000..da962e368a9116ede0e7a149666a6fcd4623ebd9 GIT binary patch literal 3991 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 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Spray.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Spray.png.meta new file mode 100644 index 0000000..0869dfb --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Projectiles - Spray.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 52f93f3f063fa4504a0b5ba13ade2e47 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Area.png b/Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Area.png new file mode 100644 index 0000000000000000000000000000000000000000..b343617924b7ef342a7d8344c2e0fb9dec245eed GIT binary patch literal 6661 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 literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Area.png.meta b/Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Area.png.meta new file mode 100644 index 0000000..e68b482 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Area.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: c3c7116f99f3d4059a5c0be0bc558820 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Heavy.png b/Assets/Particle Playground/Graphics/Editor/Icons/Smoke - Heavy.png new file mode 100644 index 0000000000000000000000000000000000000000..caff19b06da896bcd8165ddcfd1536c969eb45e5 GIT binary patch literal 8886 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 O=l1PYwxj(q{oetGz9gmq literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Materials/Trails/Playground Additive Trail Material 02.mat.meta b/Assets/Particle Playground/Graphics/Materials/Trails/Playground Additive Trail Material 02.mat.meta new file mode 100644 index 0000000..d54dc78 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Materials/Trails/Playground Additive Trail Material 02.mat.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 2641b581567fe494b8b3de7b61a6e55b +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Shaders.meta b/Assets/Particle Playground/Graphics/Shaders.meta new file mode 100644 index 0000000..201a613 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e6ff228af2ebdf4a9cb7b71ac7b5809 +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader new file mode 100644 index 0000000..7139ae2 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader @@ -0,0 +1,30 @@ +Shader "Playground/Alpha Blended Texture With Color Tint" { + Properties { + _Color ("Main Color", Color) = (1, 1, 1, 1) + _MainTex ("Texture", 2D) = "white" {} + } + + Category { + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + Blend SrcAlpha OneMinusSrcAlpha + Cull Off Lighting Off ZWrite Off Fog {Mode Off} + + BindChannels { + Bind "Color", color + Bind "Vertex", vertex + Bind "TexCoord", texcoord + } + + SubShader { + Pass { + SetTexture [_MainTex] { + combine texture * primary + } + SetTexture [_MainTex] { + constantColor [_Color] + combine previous * constant + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader.meta b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader.meta new file mode 100644 index 0000000..1689d23 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture With Color Tint.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 55527d200997b49cca9e682e4f5d938b +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader new file mode 100644 index 0000000..6419f7f --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader @@ -0,0 +1,25 @@ +Shader "Playground/Alpha Blended Texture" { + Properties { + _MainTex ("Texture", 2D) = "white" {} + } + + Category { + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + Blend SrcAlpha OneMinusSrcAlpha + Cull Off Lighting Off ZWrite Off Fog {Mode Off} + + BindChannels { + Bind "Color", color + Bind "Vertex", vertex + Bind "TexCoord", texcoord + } + + SubShader { + Pass { + SetTexture [_MainTex] { + combine texture * primary + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader.meta b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader.meta new file mode 100644 index 0000000..b9d6f4b --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/Alpha Blended Texture.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d07a3872c78344ff0adeabcadabdde0b +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader b/Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader new file mode 100644 index 0000000..adcd7b4 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader @@ -0,0 +1,14 @@ +Shader "Playground/Vertex Color" { + Properties { + _Color ("Main Color", Color) = (1, 1, 1, 1) + } + SubShader { + Tags { "Queue" = "Transparent" } + BindChannels { + Bind "Color", color + Bind "Vertex", vertex + } + Blend SrcAlpha OneMinusSrcAlpha + Pass {} + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader.meta b/Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader.meta new file mode 100644 index 0000000..f110898 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/Vertex Color.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b4ccc2de7e4ef44779f4a93b7d05bb1b +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader b/Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader new file mode 100644 index 0000000..8168f6d --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader @@ -0,0 +1,25 @@ +Shader "Playground/Vertex Lit Color" { + Properties { + _Color ("Main Color", Color) = (1, 1, 1, 1) + } + SubShader { + Tags { "Queue" = "Transparent" } + Blend SrcAlpha OneMinusSrcAlpha + Lighting On + ColorMaterial AmbientAndDiffuse + Zwrite On + BindChannels { + Bind "Color", color + Bind "Vertex", vertex + Bind "normal", normal + } + Material { + Diffuse [_Color] + Ambient [_Color] + Emission[_Vertex] + } + Pass { + + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader.meta b/Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader.meta new file mode 100644 index 0000000..b328953 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/VertexLit Color.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a4477e1ae65642f68886f001d863741 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader b/Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader new file mode 100644 index 0000000..2263f56 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader @@ -0,0 +1,29 @@ +Shader "Playground/Vertex Lit Texture" { + Properties { + _Color ("Main Color", Color) = (1, 1, 1, 1) + _MainTex ("Texture", 2D) = "white" {} + } + SubShader { + Tags { "Queue" = "Transparent" } + Blend SrcAlpha OneMinusSrcAlpha + Lighting On + ColorMaterial AmbientAndDiffuse + Zwrite On + BindChannels { + Bind "Color", color + Bind "Vertex", vertex + Bind "normal", normal + Bind "TexCoord", texcoord + } + Material { + Diffuse [_Color] + Ambient [_Color] + Emission[_Vertex] + } + Pass { + SetTexture [_MainTex] { + combine texture * primary + } + } + } +} \ No newline at end of file diff --git a/Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader.meta b/Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader.meta new file mode 100644 index 0000000..cfe28a6 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Shaders/VertexLit Texture.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 516b41ad94a0e457db4d6e34fe231d74 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures.meta b/Assets/Particle Playground/Graphics/Textures.meta new file mode 100644 index 0000000..00b5481 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 63690a36dde5d30449beca4b0cd18ad3 +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures/Brushes.meta b/Assets/Particle Playground/Graphics/Textures/Brushes.meta new file mode 100644 index 0000000..78e1e5a --- /dev/null +++ b/Assets/Particle Playground/Graphics/Textures/Brushes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe1c5104a55829c4dbeba278f778f320 +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-black.png b/Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-black.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8f9aa4ecc28ac7b858f57d24d0ff6741d8941b GIT binary patch literal 2791 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 E0IK63`v3p{ literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-white.png.meta b/Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-white.png.meta new file mode 100644 index 0000000..76c1dc5 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Textures/Brushes/brush00-dot-white.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 61a64fbbb722a466fb19a497110e993e +TextureImporter: + fileIDToRecycleName: {} + 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: 0.25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: 4 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures/Brushes/brush01-round-black.png b/Assets/Particle Playground/Graphics/Textures/Brushes/brush01-round-black.png new file mode 100644 index 0000000000000000000000000000000000000000..1e66b06cc0d709ec6c03c1cdb4374e6b73404016 GIT binary patch literal 3524 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 Hu0mjfBK9$& literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-black.png.meta b/Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-black.png.meta new file mode 100644 index 0000000..5d9c56b --- /dev/null +++ b/Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-black.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 0fb29aa2686f84ad197296dea6a4a903 +TextureImporter: + fileIDToRecycleName: {} + 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: 0.25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: 4 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-white.png b/Assets/Particle Playground/Graphics/Textures/Brushes/brush02-square-white.png new file mode 100644 index 0000000000000000000000000000000000000000..6a90fcd18fdcb2c1cb0b8e12ee39921aabb9bf7a GIT binary patch literal 136 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 Yainc0s@}mP literal 0 HcmV?d00001 diff --git a/Assets/Particle Playground/Graphics/Textures/Brushes/playground-ring-small01.psd.meta b/Assets/Particle Playground/Graphics/Textures/Brushes/playground-ring-small01.psd.meta new file mode 100644 index 0000000..0987fb3 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Textures/Brushes/playground-ring-small01.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 11fcdd375d8c74c6e9a331883b10fca4 +TextureImporter: + fileIDToRecycleName: {} + 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: 0.25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: 4 + maxTextureSize: 32 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures/Particles.meta b/Assets/Particle Playground/Graphics/Textures/Particles.meta new file mode 100644 index 0000000..5be8838 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Textures/Particles.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 33ec412bb12a3bd48b5c7c2b88828930 +folderAsset: yes +timeCreated: 1451984948 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures/Particles/Objects.meta b/Assets/Particle Playground/Graphics/Textures/Particles/Objects.meta new file mode 100644 index 0000000..8721a53 --- /dev/null +++ b/Assets/Particle Playground/Graphics/Textures/Particles/Objects.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ee5535ab45cf2374cb8330b4c94f0b2e +folderAsset: yes +timeCreated: 1451984949 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Particle Playground/Graphics/Textures/Particles/Objects/Ember-Spark-01.png b/Assets/Particle Playground/Graphics/Textures/Particles/Objects/Ember-Spark-01.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec921e16147bbe5a98f528d94acfb7909660e21 GIT binary patch literal 21768 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