package org.jrenner.fps.effects; import com.badlogic.gdx.graphics.g3d.particles.ParticleEffect; import com.badlogic.gdx.graphics.g3d.particles.emitters.RegularEmitter; import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Array; import org.jrenner.fps.Main; import org.jrenner.fps.particles.Particles; import org.jrenner.fps.utils.Pooler; public class BlueExplosion { public static Array<BlueExplosion> list = new Array<>(); public ParticleEffect pfx; public Vector3 location = Pooler.v3(); private static final Matrix4 mtx = new Matrix4(); // TODO pool this, create extendable PFX class for classes like BlueExplosion and BulletHit public BlueExplosion(Vector3 loc) { pfx = Particles.inst.obtainBlueExplosion(); //mtx.setToScaling(0.5f, 0.5f, 0.5f); mtx.setToTranslation(loc); pfx.setTransform(mtx); Particles.inst.system.add(pfx); RegularEmitter emitter = (RegularEmitter) pfx.getControllers().first().emitter; emitter.setEmissionMode(RegularEmitter.EmissionMode.EnabledUntilCycleEnd); pfx.start(); list.add(this); } private void destroy() { Pooler.free(location); list.removeValue(this, true); } public static void updateAll(float timeStep) { for (BlueExplosion blueExplosion : list) { blueExplosion.update(); } } public void update() { RegularEmitter emitter = (RegularEmitter) pfx.getControllers().first().emitter; if (emitter.isComplete()) { destroy(); } } }