package org.jrenner.fps.particles;
import com.badlogic.gdx.graphics.g3d.particles.ParticleController;
import com.badlogic.gdx.graphics.g3d.particles.ParticleEffect;
import com.badlogic.gdx.graphics.g3d.particles.ParticleSystem;
import com.badlogic.gdx.graphics.g3d.particles.batches.PointSpriteParticleBatch;
import com.badlogic.gdx.utils.Pool;
import org.jrenner.fps.Assets;
import org.jrenner.fps.View;
public class Particles {
public static Particles inst;
public ParticleSystem system;
private PFXPool bulletHitPool;
private PFXPool blueExplosionPool;
public Particles() {
inst = this;
system = ParticleSystem.get();
PointSpriteParticleBatch psBatch = new PointSpriteParticleBatch();
psBatch.setCamera(View.inst.getCamera());
system.add(psBatch);
Assets.loadParticleEffects(system);
ParticleEffect bulletHit = Assets.manager.get("particle/bullet-hit.pfx");
ParticleEffect blueExplosion = Assets.manager.get("particle/blue-explosion.pfx");
bulletHitPool = new PFXPool(bulletHit);
blueExplosionPool = new PFXPool(blueExplosion);
}
public ParticleEffect obtainBulletHit() {
//System.out.println("free bullet-hit count: " + bulletHitPool.getFree());
return bulletHitPool.obtain();
}
public void freeBulletHit(ParticleEffect pfx) {
system.remove(pfx);
bulletHitPool.free(pfx);
}
public ParticleEffect obtainBlueExplosion() {
//System.out.println("free bullet-hit count: " + blueExplosionPool.getFree());
return blueExplosionPool.obtain();
}
public void freeBlueExplosion(ParticleEffect pfx) {
system.remove(pfx);
blueExplosionPool.free(pfx);
}
// TODO initial capacity in constructor
private static class PFXPool extends Pool<ParticleEffect> {
private ParticleEffect sourceEffect;
public PFXPool(ParticleEffect sourceEffect) {
this.sourceEffect = sourceEffect;
}
@Override
public void free(ParticleEffect pfx) {
pfx.reset();
super.free(pfx);
}
@Override
protected ParticleEffect newObject() {
ParticleEffect pfx = sourceEffect.copy();
pfx.init();
return pfx;
}
}
}