public void Update(GameTime gameTime) { float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; m_moneyElapsedEmittionTime += dt; while (m_moneyElapsedEmittionTime > (1.0f / m_emissionRate)) { SpawnParticle(); m_moneyElapsedEmittionTime -= (1.0f / m_emissionRate); } for (int i = m_particles.Count - 1; i >= 0; --i) { m_Particle p = m_particles[i]; p.m_life -= dt; if (p.m_life <= 0.0f) { m_particles.RemoveAt(i); } p.m_acceleration.Y += m_gravity * dt; p.m_acceleration.X += m_wind * dt; p.m_velocity += p.m_acceleration * dt; p.m_position.X += p.m_velocity.X * dt; p.m_position.Y -= p.m_velocity.Y * dt; if (p.m_life <= 1.0f) { p.m_alpha = p.m_life * m_transparency; } } }
void SpawnParticle() { m_Particle p = new m_Particle(); p.m_life = fRand(m_minLife, m_maxLife); p.m_rotation = 0.0f; p.m_color = Color.Green; p.m_acceleration = new Vector2(m_wind, -m_gravity); p.m_velocity = new Vector2(fRand(m_minVelocity.X, m_maxVelocity.X), fRand(m_minVelocity.Y, m_maxVelocity.Y)); p.m_position = new Vector2(fRand(-m_emissionSize.X, m_emissionSize.X) + m_position.X, fRand(-m_emissionSize.Y, m_emissionSize.Y) + m_position.Y); p.m_size = new Vector2(fRand(m_minSize, m_maxSize)); p.m_alpha = m_transparency; m_particles.Add(p); }