package br.com.etyllica.core.effect.particle; import java.util.ArrayList; import java.util.List; import br.com.etyllica.core.Updatable; import br.com.etyllica.core.graphics.Graphics; import br.com.etyllica.layer.Layer; public abstract class Emitter extends Layer implements Updatable{ protected List<Particle> particles = new ArrayList<Particle>(); public Emitter(int x, int y) { super(x, y); } public Emitter(int x, int y, int w, int h) { super(x, y, w, h); } private int maxParticles = 15; private long lastUpdate = 0; private long lastParticleUpdate = 0; private long delay = 40; private long particleDelay = 1500; @Override public void update(long now) { long diff = now-lastUpdate; if (now-lastParticleUpdate >= particleDelay) { if(particles.size() >= maxParticles) { particles.remove(0); } particles.add(createParticle(now)); lastParticleUpdate = now; } if (diff >= delay) { for(Particle particle: particles) { particle.update(now); } lastUpdate = now; } } protected abstract Particle createParticle(long now); @Override public void draw(Graphics g) { drawEmitter(g); drawParticles(g); } public void drawParticles(Graphics g) { for(Particle particle: particles) { particle.draw(g); } } public abstract void drawEmitter(Graphics g); }