Skip to content
Snippets Groups Projects
RainCollision.cs 2.05 KiB
Newer Older
  • Learn to ignore specific revisions
  • //
    // Rain Maker (c) 2016 Digital Ruby, LLC
    // http://www.digitalruby.com
    //
    
    using UnityEngine;
    using System.Collections.Generic;
    
    namespace DigitalRuby.RainMaker
    {
        public class RainCollision : MonoBehaviour
        {
            private static readonly Color32 color = new Color32(255, 255, 255, 255);
            private readonly List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>();
    
            public ParticleSystem RainExplosion;
            public ParticleSystem RainParticleSystem;
    
            private void Start()
            {
    
            }
    
            private void Update()
            {
    
            }
    
            private void Emit(ParticleSystem p, ref Vector3 pos)
            {
                int count = UnityEngine.Random.Range(2, 5);
                while (count != 0)
                {
                    float yVelocity = UnityEngine.Random.Range(1.0f, 3.0f);
                    float zVelocity = UnityEngine.Random.Range(-2.0f, 2.0f);
                    float xVelocity = UnityEngine.Random.Range(-2.0f, 2.0f);
                    const float lifetime = 0.75f;// UnityEngine.Random.Range(0.25f, 0.75f);
                    float size = UnityEngine.Random.Range(0.05f, 0.1f);
                    ParticleSystem.EmitParams param = new ParticleSystem.EmitParams();
                    param.position = pos;
                    param.velocity = new Vector3(xVelocity, yVelocity, zVelocity);
                    param.startLifetime = lifetime;
                    param.startSize = size;
                    param.startColor = color;
                    p.Emit(param, 1);
                    count--;
                }
            }
    
            private void OnParticleCollision(GameObject obj)
            {
                if (RainExplosion != null && RainParticleSystem != null)
                {
                    int count = RainParticleSystem.GetCollisionEvents(obj, collisionEvents);
                    for (int i = 0; i < count; i++)
                    {
                        ParticleCollisionEvent evt = collisionEvents[i];
                        Vector3 pos = evt.intersection;
                        Emit(RainExplosion, ref pos);
                    }
                }
            }
        }
    }