/// <summary> /// Init Some default effects /// </summary> static ParticleProps() { { Effect1.ColorBegin = (0.2f, 0.5f, 0.8f, 1.0f); Effect1.ColorEnd = (0.8f, 0.5f, 0.2f, 1.0f); Effect1.LifeTime = 3.0f; Effect1.SizeVariation = 5.0f; Effect1.SizeBegin = 20.0f; Effect1.SizeEnd = 0.0f; Effect1.Velocity = new vec2(10.0f, 10.0f); Effect1.VelocityVariation = new vec2(1.0f, 1.0f); Effect1.Gravity = 100.0f; } { Effect2 = Effect1; Effect2.LifeTime = 1.0f; Effect2.VelocityVariation = new vec2(50.0f, 50.0f); Effect2.ColorBegin = (0.9f, 0.3f, 0.2f, 1.0f); Effect2.ColorBegin = (0.8f, 0.2f, 0.1f, 1.0f); } }
public void Emit(ParticleProps particleProps) { m_ParticlesPool[m_PoolIndex].Active = true; m_ParticlesPool[m_PoolIndex].Position = particleProps.Position; m_ParticlesPool[m_PoolIndex].Rotation = RandomTable.RandomFloat() * 5.0f * MathHelper.Pi; m_ParticlesPool[m_PoolIndex].Gravity = particleProps.Gravity; // Velocity m_ParticlesPool[m_PoolIndex].Velocity = particleProps.Velocity; m_ParticlesPool[m_PoolIndex].Velocity.x += particleProps.VelocityVariation.x * (RandomTable.RandomFloat() - 0.5f); m_ParticlesPool[m_PoolIndex].Velocity.y += particleProps.VelocityVariation.y * (RandomTable.RandomFloat() - 0.5f); // Color m_ParticlesPool[m_PoolIndex].ColorBegin = particleProps.ColorBegin; m_ParticlesPool[m_PoolIndex].ColorEnd = particleProps.ColorEnd; m_ParticlesPool[m_PoolIndex].LifeTime = particleProps.LifeTime; m_ParticlesPool[m_PoolIndex].LifeRemaining = particleProps.LifeTime; m_ParticlesPool[m_PoolIndex].SizeBegin = particleProps.SizeBegin + particleProps.SizeVariation * (RandomTable.RandomFloat() - 0.5f); m_ParticlesPool[m_PoolIndex].SizeEnd = particleProps.SizeEnd; m_ParticlesPool[m_PoolIndex].axisRot = new vec3((RandomTable.RandomInt() % 2), (RandomTable.RandomInt() * 0), (1 + RandomTable.RandomInt() % 2)); m_PoolIndex = ++m_PoolIndex % m_ParticlesPool.Length; }