Changed license to Creative Commons Zero (CC0).
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / renderer / raster / RenderAggregator.java
1 /*
2  * Sixth 3D engine. Author: Svjatoslav Agejenko. 
3  * This project is released under Creative Commons Zero (CC0) license.
4  *
5 *
6  */
7
8 package eu.svjatoslav.sixth.e3d.renderer.raster;
9
10 import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
11 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.AbstractCoordinateShape;
12
13 import java.io.Serializable;
14 import java.util.ArrayList;
15 import java.util.Comparator;
16
17 public class RenderAggregator {
18
19     private ArrayList<AbstractCoordinateShape> shapes = new ArrayList<>();
20     private ShapesZIndexComparator comparator = new ShapesZIndexComparator();
21
22     public void paint(final RenderingContext renderBuffer) {
23         shapes.sort(comparator);
24         shapes.forEach(shape -> shape.paint(renderBuffer));
25     }
26
27     public void queueShapeForRendering(final AbstractCoordinateShape shape) {
28         shapes.add(shape);
29     }
30
31     public void reset() {
32         shapes.clear();
33     }
34
35     static class ShapesZIndexComparator implements Comparator<AbstractCoordinateShape>, Serializable {
36
37         @Override
38         public int compare(final AbstractCoordinateShape o1, final AbstractCoordinateShape o2) {
39             if (o1.getZ() < o2.getZ())
40                 return 1;
41             else if (o1.getZ() > o2.getZ())
42                 return -1;
43
44             return Integer.compare(o1.shapeId, o2.shapeId);
45         }
46     }
47 }