public void InitParticle() { Clear(); Random rand = new Random(); rand.Next(); for (int i = 0; i < particleCount; i++) { // Sets values to the starting values Particle tmp = new Particle(); tmp.Id = tm.LoadTexture(imgpath, 0); tmp.Color = colorStart; tmp.Rotation = rotationStart; tmp.Scale = scaleStart; tmp.Rotation = rotationStart; tmp.Source = new Rectangle(0, 0, tm.GetTextureWidth(tmp.Id), tm.GetTextureHeight(tmp.Id)); tmp.myColor = new MyColor(); tmp.myColor.A = colorStart.A / 255; tmp.myColor.R = colorStart.R / 255; tmp.myColor.G = colorStart.G / 255; tmp.myColor.B = colorStart.B / 255; // Finds random values //double theta = double.Parse(angle.ToString()); //double rot = double.Parse(angleRotation.ToString()); //float dirXMin = -(float)(Math.Sin(rot)); //float dirYMin = -(float)(Math.Cos(rot)); //float dirXMax = -(float)(Math.Sin(theta + rot)); //float dirYMax = -(float)(Math.Cos(theta + rot)); //float dirX; //float dirY; //dirX = (float)(rand.Next(-1, 1) * rand.NextDouble() * Math.Abs((double)(dirXMax) - (double)(dirXMin))); //dirY = (float)(rand.Next(-1, 1) * rand.NextDouble() * Math.Abs((double)(dirYMax) - (double)(dirYMin))); //dirX = (float)(dirX + dirXMin); //dirY = (float)(dirY + dirYMin); //if (angle == 2 * Math.PI) //{ // dirX = (float)rand.Next(-100, 100); // dirY = (float)rand.Next(-100, 100); // dirX = dirX / 100; // dirY = dirY / 100; //} if (type == Shape.CIRCLE) { Vector2D ps; ps.x = pos.x + (rand.Next((int)(-radius-(tmp.Source.Right/2)), (int)(radius+(tmp.Source.Right/2)))); ps.y = pos.y + (rand.Next((int)(-radius-(tmp.Source.Bottom/2)), (int)(radius+(tmp.Source.Bottom/2)))); tmp.Pos = ps; } else if (type == Shape.SQUARE) { Vector2D ps; ps.x = (pos.X-width/2) + (rand.Next(0, width)); ps.y = (pos.Y-height/2) + (rand.Next(0, height)); tmp.Pos = ps; } else if (type == Shape.LINE) { Vector2D ps = new Vector2D(); if( point.x > point2.x ) ps.x = (rand.Next((int)point2.x, (int)point.x)); else ps.x = (rand.Next((int)point.x, (int)point2.x)); if( point.y > point2.y ) ps.y = (rand.Next((int)point2.y, (int)point.y)); else ps.y = (rand.Next((int)point.x, (int)point2.y)); tmp.Pos = ps; } else { tmp.Pos = pos; } // Finds the start velocity Vector2D vel; float x = (float)rand.Next((int)(velStartMin.x * 100), (int)(velStartMax.x * 100)); float y = (float)rand.Next((int)(velStartMin.y * 100), (int)(velStartMax.y * 100)); vel.x = (x / 100.0f); vel.y = (y / 100.0f); vel.y *= -1; tmp.VelocityStart = vel; // Finds the end velocity x = (float)rand.Next((int)(velEndMin.x * 100), (int)(velEndMax.x * 100)); y = (float)rand.Next((int)(velEndMin.y * 100), (int)(velEndMax.y * 100)); vel.x = (x / 100.0f); vel.y = (y / 100.0f); vel.y *= -1; tmp.VelocityEnd = vel; tmp.CurVelocity = tmp.VelocityStart; float life = (float)rand.Next((int)(lifeMin * 100), (int)(lifeMax * 100)); tmp.MaxLife = (life / 100.0f); particles.Add(tmp); } float sr = (float)(rand.Next( (int)(spawnMin * 100), (int)(spawnMax * 100) )); spawnRate = sr / 100.0f; spawnTimer = 0; }
private void addParticle(Vector2f position) { Particle p = new Particle(); p.Position = position; p.Colour = colour; p.Lifetime = m_particleLifetime; p.Velocity = (m_randomVelocity) ? m_randomInitialVelocities[m_random.Next(0, m_randomInitialVelocities.Count)] : m_initialVelocity; m_particles.Enqueue(p); }
public void update(Particle p, float dt) { p.Velocity = new Vector2f(p.Velocity.X * m_scale.X, p.Velocity.Y * m_scale.Y); }
public void update(Particle p, float dt) { p.Scale += (m_scale * dt); }
public void update(Particle p, float dt) { p.Rotation += m_rotation * dt; }
public void update(Particle p, float dt) { p.Velocity += m_force * dt; }
public void update(Particle p, float dt) { float ratio = (m_duration - p.Lifetime) / m_duration; ratio = Math.Max(0f, Math.Min(ratio, 1f)); SFML.Graphics.Color c = new SFML.Graphics.Color ( lerp(m_start.R, m_end.R, ratio), lerp(m_start.G, m_end.G, ratio), lerp(m_start.B, m_end.B, ratio) ); p.Colour = c; }