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;
        }
Example #2
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);
        }
Example #3
0
 public void update(Particle p, float dt)
 {
     p.Velocity = new Vector2f(p.Velocity.X * m_scale.X, p.Velocity.Y * m_scale.Y);
 }
Example #4
0
 public void update(Particle p, float dt)
 {
     p.Scale += (m_scale * dt);
 }
Example #5
0
 public void update(Particle p, float dt)
 {
     p.Rotation += m_rotation * dt;
 }
Example #6
0
 public void update(Particle p, float dt)
 {
     p.Velocity += m_force * dt;
 }
Example #7
0
        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;
        }