package eu.tankernn.gameEngine.particles; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.lwjgl.util.vector.Matrix4f; import eu.tankernn.gameEngine.entities.Camera; import eu.tankernn.gameEngine.renderEngine.Loader; import eu.tankernn.gameEngine.util.Sorter; public class ParticleMaster { private static Map> particles = new HashMap>(); private static ParticleRenderer renderer; public static void init(Loader loader, Matrix4f projectionMatrix) { renderer = new ParticleRenderer(loader, projectionMatrix); } public static void update(Camera camera) { Iterator>> mapIterator = particles.entrySet().iterator(); while (mapIterator.hasNext()) { Entry> entry = mapIterator.next(); List list = entry.getValue(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Particle p = iterator.next(); boolean stillAlive = p.update(camera); if (!stillAlive) { iterator.remove(); if (list.isEmpty()) { mapIterator.remove(); } } } if (!entry.getKey().usesAdditiveBlending()) new Sorter(list, camera).sortByDistance(); } } public static void renderParticles(Camera camera) { renderer.render(particles, camera); } public static void cleanUp() { renderer.cleanUp(); } public static void addParticle(Particle particle) { List list = particles.get(particle.getTexture()); if (list == null) { list = new ArrayList(); particles.put(particle.getTexture(), list); } list.add(particle); } }