package com.deftwun.zombiecopter.systems;
import com.badlogic.ashley.core.EntitySystem;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.graphics.g2d.ParticleEmitter;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Logger;
import com.deftwun.zombiecopter.App;
public class ParticleSystem extends EntitySystem {
private int LOG_LEVEL = Logger.INFO;
private Logger logger = new Logger("ParticleSystem",LOG_LEVEL);
SpriteBatch batch = new SpriteBatch();
Array<ParticleEffect> effects = new Array<ParticleEffect>();
Array<ParticleEffect> finishedEffects = new Array<ParticleEffect>();
public ParticleSystem(){
logger.debug("Initializing");
}
public void addEffect(String name, Vector2 position, float angle){
logger.debug("Creating effect: " + name);
ParticleEffect effect = App.assets.getEffect(name);
if (effect == null) {
logger.error("Couldn't create particle effect: " + name);
return;
}
ParticleEffect e = new ParticleEffect(effect);
for (ParticleEmitter emitter : e.getEmitters()){
float a1 = emitter.getAngle().getHighMin(),
a2 = emitter.getAngle().getHighMax();
emitter.getRotation().setHighMin(a1 + angle);
emitter.getRotation().setHighMax(a2 + angle);
}
e.setPosition(position.x * App.engine.PIXELS_PER_METER, position.y * App.engine.PIXELS_PER_METER);
e.start();
effects.add(e);
}
@Override
public void update(float deltaTime) {
super.update(deltaTime);
for (ParticleEffect e : finishedEffects){
effects.removeValue(e, true);
}
finishedEffects.clear();
}
public void render(float deltaTime){
batch.setProjectionMatrix(App.engine.systems.camera.getViewport().getCamera().combined);
batch.begin();
for (ParticleEffect e : effects){
if (e.isComplete()){
finishedEffects.add(e);
logger.debug("effect complete");
}
else
e.draw(batch,deltaTime);
}
batch.end();
}
}