/// <summary> /// Constructs a new projectile. /// </summary> public Projectile(ParticleSystem explosionParticles, ParticleSystem explosionSmokeParticles, ParticleSystem projectileTrailParticles, MovableEntity origin, MovableEntity aTarget) { this.explosionParticles = explosionParticles; this.explosionSmokeParticles = explosionSmokeParticles; // Start at the origin, firing in a random (but roughly upward) direction. position = origin.getPosition(); target = aTarget.getPosition(); targetEntity = aTarget; //velocity.X = (float)(random.NextDouble() - 0.5) * sidewaysVelocityRange; //velocity.Y = (float)(random.NextDouble() - 0.5) * sidewaysVelocityRange; //velocity.Z = (float)(random.NextDouble() + 0.5) * verticalVelocityRange; double step = Math.PI / 60; //Vector3 mid = (aTarget + aPosition) / 2; float radius = Math.Abs(Vector3.Distance(target, position) / 2); List<Vector3> path = new List<Vector3>(); for (int i = 0; i <= 60; i++) { float thisX = MathHelper.Lerp(position.X, target.X, ((float)i) / 60); float thisY = MathHelper.Lerp(position.Y, target.Y, ((float)i) / 60); float thisZ = MathHelper.Lerp(position.Z, target.Z, ((float)i) / 60) + radius * (float)Math.Cos(step*(i - 30)); path.Add(new Vector3(thisX, thisY, thisZ)); } myPath = new Path(path); // Use the particle emitter helper to output our trail particles. trailEmitter = new ParticleEmitter(projectileTrailParticles, trailParticlesPerSecond, position); }
/// <summary> /// Constructs a new particle emitter object. /// </summary> public ParticleEmitter(ParticleSystem particleSystem, float particlesPerSecond, Vector3 initialPosition) { this.particleSystem = particleSystem; timeBetweenParticles = 1.0f / particlesPerSecond; previousPosition = initialPosition; }