ParticleMaster.java 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package eu.tankernn.gameEngine.particles;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. import org.lwjgl.util.vector.Matrix4f;
  9. import eu.tankernn.gameEngine.entities.Camera;
  10. import eu.tankernn.gameEngine.renderEngine.Loader;
  11. import eu.tankernn.gameEngine.util.Sorter;
  12. public class ParticleMaster {
  13. private static Map<ParticleTexture, List<Particle>> particles = new HashMap<ParticleTexture, List<Particle>>();
  14. private static ParticleRenderer renderer;
  15. public static void init(Loader loader, Matrix4f projectionMatrix) {
  16. renderer = new ParticleRenderer(loader, projectionMatrix);
  17. }
  18. public static void update(Camera camera) {
  19. Iterator<Entry<ParticleTexture, List<Particle>>> mapIterator = particles.entrySet().iterator();
  20. while (mapIterator.hasNext()) {
  21. Entry<ParticleTexture, List<Particle>> entry = mapIterator.next();
  22. List<Particle> list = entry.getValue();
  23. Iterator<Particle> iterator = list.iterator();
  24. while (iterator.hasNext()) {
  25. Particle p = iterator.next();
  26. boolean stillAlive = p.update(camera);
  27. if (!stillAlive) {
  28. iterator.remove();
  29. if (list.isEmpty()) {
  30. mapIterator.remove();
  31. }
  32. }
  33. }
  34. if (!entry.getKey().usesAdditiveBlending())
  35. new Sorter<Particle>(list, camera).sortByDistance();
  36. }
  37. }
  38. public static void renderParticles(Camera camera) {
  39. renderer.render(particles, camera);
  40. }
  41. public static void cleanUp() {
  42. renderer.cleanUp();
  43. }
  44. public static void addParticle(Particle particle) {
  45. List<Particle> list = particles.get(particle.getTexture());
  46. if (list == null) {
  47. list = new ArrayList<Particle>();
  48. particles.put(particle.getTexture(), list);
  49. }
  50. list.add(particle);
  51. }
  52. }