/// <summary>Spawns a particle at the given position (in world space).</summary>
        /// <param name="position">Position in world space.</param>
        /// <param name="velocity">Velocity.</param>
        /// <param name="acceleration">Acceleration.</param>
        /// <param name="count">The number of particles spawned at the same time as this one.</param>
        /// <param name="visible">Whether or not to render the particle.</param>
        void SpawnParticle(Vector3 position, Vector3 prevPosition, Vector3 velocity, float acceleration, int count, bool visible = true)
        {
            // get best array index
            int index;

            if (particlesOverwriteStack.Count > 0)
            {
                index = particlesOverwriteStack.Pop();
            }
            else if (particlesUpperIndex < particles.Length - 1)
            {
                index = ++particlesUpperIndex;
            }
            else
            {
                Debug.LogWarning("Cannot spawn particle; particles array is full.");
                return;
            }

            // create particle
            particles[index] = new ParticleShockwaveParticle(position, velocity, acceleration, count);
            particles[index].prevPosition = prevPosition;

            if (particlesUpperIndex == particles.Length - 1)
            {
                Debug.LogError("The particles array is full. (array size: " + particles.Length + ") Particles will only be spawned if other particles are killed.");
            }

            aliveParticlesCount++;
        }
Пример #2
0
        /// <summary>Copy constructor for a particle.</summary>
        /// <param name="particle">The ParticleShockwaveParticle to copy</param>
        public ParticleShockwaveParticle(ParticleShockwaveParticle particle)
            : this(particle.position, particle.direction, particle.speed, particle.constantAcceleration, particle.particlesCount)
        {
            initSpeed = particle.initSpeed;
            initTime  = particle.initTime;

            alive = particle.alive;
        }