12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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<ParticleTexture, List<Particle>> particles = new HashMap<ParticleTexture, List<Particle>>();
- private static ParticleRenderer renderer;
-
- public static void init(Loader loader, Matrix4f projectionMatrix) {
- renderer = new ParticleRenderer(loader, projectionMatrix);
- }
-
- public static void update(Camera camera) {
- Iterator<Entry<ParticleTexture, List<Particle>>> mapIterator = particles.entrySet().iterator();
- while (mapIterator.hasNext()) {
- Entry<ParticleTexture, List<Particle>> entry = mapIterator.next();
- List<Particle> list = entry.getValue();
- Iterator<Particle> 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<Particle>(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<Particle> list = particles.get(particle.getTexture());
- if (list == null) {
- list = new ArrayList<Particle>();
- particles.put(particle.getTexture(), list);
- }
- list.add(particle);
- }
- }
|