33import  com .mojang .blaze3d .vertex .PoseStack ;
44import  de .srendi .advancedperipherals .client .smartglasses .objects .twodim .ITwoDObjectRenderer ;
55import  de .srendi .advancedperipherals .common .smartglasses .modules .overlay .objects .RenderableObject ;
6+ import  de .srendi .advancedperipherals .common .smartglasses .modules .overlay .objects .two_dim .RectangleObject ;
7+ import  de .srendi .advancedperipherals .common .smartglasses .modules .overlay .objects .two_dim .TextObject ;
68import  net .minecraftforge .client .gui .overlay .ForgeGui ;
79import  net .minecraftforge .client .gui .overlay .IGuiOverlay ;
810
911import  java .util .ArrayList ;
1012import  java .util .HashMap ;
1113import  java .util .List ;
1214import  java .util .Map ;
15+ import  java .util .TreeMap ;
1316
1417public  class  OverlayModuleOverlay  implements  IGuiOverlay  {
1518    public  static  final  String  ID  = "overlay_module_overlay" ;
@@ -18,28 +21,34 @@ public class OverlayModuleOverlay implements IGuiOverlay {
1821    public  void  render (ForgeGui  gui , PoseStack  poseStack , float  partialTick , int  screenWidth , int  screenHeight ) {
1922        poseStack .pushPose ();
2023
21-         Map <Class <? extends  RenderableObject >, List <RenderableObject >>  batches  = new  HashMap <>();
24+         Map <Integer ,  Map < Class <? extends  RenderableObject >, List <RenderableObject >>>  prioritizedBatches  = new  TreeMap <>();
2225
2326        for  (RenderableObject  object  : OverlayObjectHolder .getObjects ()) {
24-             if  (!object .isEnabled () || !(object .getRenderObject () instanceof  ITwoDObjectRenderer ))
27+             if  (!object .isEnabled () || !(object .getRenderObject () instanceof  ITwoDObjectRenderer )) { 
2528                continue ;
29+             }
2630
31+             // We need to sort the objects by their weight, some things can't be rendered before something else. 
32+             // For example, when texts are rendered before our circles, rectangles, etc., the other objects can't be transparent anymore 
33+             int  weight  = object .getRenderObject ().getWeight ();
2734            Class <? extends  RenderableObject > objectClass  = object .getClass ();
2835
29-             if  (batches .containsKey (objectClass )) {
30-                 batches .get (objectClass ).add (object );
31-                 continue ;
32-             }
36+             // Get or create the batch map for the current weight 
37+             Map <Class <? extends  RenderableObject >, List <RenderableObject >> batchesForWeight  = prioritizedBatches .computeIfAbsent (weight , k  -> new  HashMap <>());
3338
34-             List <RenderableObject > newBatchArray  = new  ArrayList <>();
35-             newBatchArray .add (object );
36-             batches .put (objectClass , newBatchArray );
37-         }
39+             List <RenderableObject > batch  = batchesForWeight .computeIfAbsent (objectClass , k  -> new  ArrayList <>());
3840
39-         for  (List <RenderableObject > batch  : batches .values ()) {
40-             ((ITwoDObjectRenderer ) batch .get (0 ).getRenderObject ()).renderBatch (batch , gui , poseStack , partialTick , screenWidth , screenHeight );
41+             batch .add (object );
4142        }
4243
44+         for  (Map <Class <? extends  RenderableObject >, List <RenderableObject >> batchesForWeight  : prioritizedBatches .values ()) {
45+             for  (List <RenderableObject > batch  : batchesForWeight .values ()) {
46+ 
47+                 if  (!batch .isEmpty ()) {
48+                     ((ITwoDObjectRenderer ) batch .get (0 ).getRenderObject ()).renderBatch (batch , gui , poseStack , partialTick , screenWidth , screenHeight );
49+                 }
50+             }
51+         }
4352        poseStack .popPose ();
4453
4554    }
0 commit comments