public void agregarParticula(Particle p) { /*** agregar la particula a la lista ***/ if (particulas.Count < 10000) { particulas.Add(p); } }
public void Update() { // Lanzar partículas direccion = calculaDireccion(); Vector2 direccionRandom = new Vector2((float)(direccion.X + (random.NextDouble() - 0.5) * Properties.aleatoriedadParticulas), (float)(direccion.Y + (random.NextDouble() - 0.5) * Properties.aleatoriedadParticulas)); Particle p = new Particle(new Vector2(posicion.X + textura.Width / 2, posicion.Y + textura.Height / 2), direccionRandom, random.Next(Properties.minSize, Properties.maxSize)); fisica.agregarParticula(p); //DISMUIR LA ENERGIA DE LA NAVE energia -= Properties.energyDelta; }
private bool targetImpact(Objetivo a, Particle p) { float dx = p.Position.X - a.Position.X; float dy = p.Position.Y - a.Position.Y; float distSQ = dx * dx + dy * dy; float dist = (float)Math.Sqrt(distSQ); if (dist <= Properties.radioObjetivo) { return true; } return false; }
private bool gravitate(Atractor a, Particle p) { float dx = p.Position.X - a.Posicion.X; float dy = p.Position.Y - a.Posicion.Y; float distSQ = dx * dx + dy * dy; float dist = (float)Math.Sqrt(distSQ); float fuerza = a.Mass * p.Mass / distSQ; float ax = fuerza * dx / dist; float ay = fuerza * dy / dist; /*** sólo cambiar velocidad de la particula ***/ Vector2 vel = p.Velocity; vel.X -= ax / p.Mass; vel.Y -= ay / p.Mass; p.Velocity = vel; /*** return true -> la particula choca en el objeto ***/ if (dist <= a.Radio) { return true; } return false; }
private bool checkEdge(Particle p) { /*** quitar la partícula si ya salió de pantalla ***/ if (p.Position.X < 0 || p.Position.X > Properties.SCREEN_WITH || p.Position.Y < 0 || p.Position.Y > Properties.SCREEN_HEIGHT) { return true; } else return false; }