/// <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++; }
/// <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; }