package com.arretadogames.pilot.render.particlesystem;
import org.jbox2d.common.Vec2;
import com.arretadogames.pilot.config.GameSettings;
import com.arretadogames.pilot.entities.Steppable;
import com.arretadogames.pilot.render.Renderable;
import com.arretadogames.pilot.render.opengl.GLCanvas;
public class Emissor implements Renderable, Steppable{
private final int NUMBER_OF_PARTICLES = 200;
private final Vec2 eLocation;
private Vec2 velocity;
private Particle[] particles;
public Emissor(Vec2 location, Vec2 velocity, ParticleType pType){
this.eLocation = location;
this.velocity = velocity;
setParticlesType(pType);
}
private void setParticlesType(ParticleType p){
switch (p) {
case FIRE_PARTICLE:
particles = new FireParticle[NUMBER_OF_PARTICLES];
for (int i = 0; i < NUMBER_OF_PARTICLES; i++) {
particles[i] = new FireParticle( this.eLocation.clone(), new Vec2( 0.00001f, (float) Math.random()*1f ), 0.5f + (float)Math.random() * 2f );
}
break;
case WATER_PARTICLE:
particles = new WaterParticle[NUMBER_OF_PARTICLES];
for (int i = 0; i < NUMBER_OF_PARTICLES; i++) {
particles[i] = new WaterParticle( this.eLocation.clone(), (float)Math.random() * 2f );
}
break;
case SAND_PARTICLE:
particles = new SandParticle[NUMBER_OF_PARTICLES];
for (int i = 0; i < NUMBER_OF_PARTICLES; i++) {
particles[i] = new SandParticle( this.eLocation.clone(), (float)Math.random() * 2f );
}
break;
default:
break;
}
}
@Override
public void step(float timeElapsed) {
eLocation.addLocal(velocity);
if (eLocation.x > GameSettings.TARGET_WIDTH || eLocation.x < 0)
velocity.mulLocal(-1);
}
@Override
public void render(GLCanvas canvas, float timeElapsed) {
// Particle p;
// for (int i = 0; i < particles.length; i++){
// p = particles[i];
// if (p.isDead()){
// if (p.getType() == ParticleType.FIRE_PARTICLE)
// p = new FireParticle(this.eLocation.clone(), (float)Math.random() * 2f);
//
// else if(p.getType() == ParticleType.WATER_PARTICLE)
// p = new WaterParticle(this.eLocation.clone(), (float)Math.random() * 2f);
//
// else
// p = new SandParticle(this.eLocation.clone(), (float)Math.random() * 2f);
// }
// p.step(timeElapsed);
// p.render(canvas, timeElapsed);
// }
// canvas.drawRect(0, 0, 800, 480, Color.BLACK);
for (int i = 0; i < NUMBER_OF_PARTICLES; i++){
if (particles[i].isDead()){
if (particles[i].getType() == ParticleType.FIRE_PARTICLE)
particles[i] = new FireParticle( this.eLocation.clone(), new Vec2( 0.00001f, (float) Math.random()*1f ), 0.5f + (float)Math.random() * 2f );
else if (particles[i].getType() == ParticleType.WATER_PARTICLE)
particles[i] = new WaterParticle(this.eLocation.clone(), (float)Math.random() * 2f);
else if (particles[i].getType() == ParticleType.SAND_PARTICLE)
particles[i] = new SandParticle(this.eLocation.clone(), (float)Math.random() * 2f);
}
particles[i].step(timeElapsed);
particles[i].render(canvas, timeElapsed);
}
}
}