From 30959cfdd05aab019b48cdfc92b508cb5c6cb00b Mon Sep 17 00:00:00 2001 From: Morippi Date: Thu, 25 Aug 2022 00:03:47 +0200 Subject: [PATCH] fixed water "walls" --- .../core/a7/render/RenderBufferHandler.java | 64 ++++++++++--------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/seibel/lod/core/a7/render/RenderBufferHandler.java b/src/main/java/com/seibel/lod/core/a7/render/RenderBufferHandler.java index 9123a3864..d120ad78a 100644 --- a/src/main/java/com/seibel/lod/core/a7/render/RenderBufferHandler.java +++ b/src/main/java/com/seibel/lod/core/a7/render/RenderBufferHandler.java @@ -26,7 +26,7 @@ public class RenderBufferHandler { this.pos = pos; } - public void render(a7LodRenderer renderContext) { + public void renderOpaque(a7LodRenderer renderContext) { RenderBuffer buff; buff = renderBufferSlotOpaque.get(); @@ -36,11 +36,13 @@ public class RenderBufferHandler { RenderBufferNode[] childs = children; if (childs != null) { for (RenderBufferNode child : childs) { - child.render(renderContext); + child.renderOpaque(renderContext); } } } - + } + public void renderTransparent(a7LodRenderer renderContext) { + RenderBuffer buff; buff = renderBufferSlotTransparent.get(); if (buff != null) { buff.render(renderContext); @@ -48,7 +50,7 @@ public class RenderBufferHandler { RenderBufferNode[] childs = children; if (childs != null) { for (RenderBufferNode child : childs) { - child.render(renderContext); + child.renderTransparent(renderContext); } } } @@ -138,41 +140,18 @@ public class RenderBufferHandler { // Maybe dupe the base list and use atomic swap on render? Or is this not worth it? //TODO: Directional culling //TODO: Ordered by distance - renderBufferNodes.forEachOrdered(n -> n.render(renderContext)); + renderBufferNodes.forEachOrdered(n -> n.renderOpaque(renderContext)); + renderBufferNodes.forEachOrdered(n -> n.renderTransparent(renderContext)); } public void update() { byte topDetail = (byte) (target.getNumbersOfSectionLevels() - 1); MovableGridRingList referenceList = target.getRingList(topDetail); Pos2D center = referenceList.getCenter(); + //boolean moved = renderBufferNodes.getCenter().x != center.x || renderBufferNodes.getCenter().y != center.y; renderBufferNodes.move(center.x, center.y, RenderBufferNode::close); // Note: may lock the list - /**TODO improve the ordering*/ - DHBlockPos playerPos = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class).getPlayerBlockPos(); - int x = playerPos.x; - int z = playerPos.z; - Comparator byDistance = new Comparator() { - @Override - public int compare(RenderBufferNode o1, RenderBufferNode o2) { - if((o1 == null) && (o2 == null)){ - return 0; - }else if(o1 == null){ - return 1; - }else if(o2 == null) - { - return -1; - } - int x1 = o1.pos.sectionX; - int z1 = o1.pos.sectionZ; - int x2 = o2.pos.sectionX; - int z2 = o2.pos.sectionZ; - - return Integer.compare((x1 - x)^2 + (z1 - z)^2,(x2 - x)^2 + (z2 - z)^2) ; - } - }; - renderBufferNodes.sort(byDistance); - renderBufferNodes.forEachPosOrdered((node, pos) -> { DhSectionPos sectPos = new DhSectionPos(topDetail, pos.x, pos.y); @@ -195,6 +174,31 @@ public class RenderBufferHandler { // Update node node.update(); }); + + + /**TODO improve the ordering*/ + /* DHBlockPos playerPos = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class).getPlayerBlockPos(); + int x = playerPos.x; + int z = playerPos.z; + Comparator byDistance = new Comparator() { + @Override + public int compare(RenderBufferNode o1, RenderBufferNode o2) { + if ((o1 == null) && (o2 == null)) { + return 0; + } else if (o1 == null) { + return 1; + } else if (o2 == null) { + return -1; + } + int x1 = o1.pos.sectionX; + int z1 = o1.pos.sectionZ; + int x2 = o2.pos.sectionX; + int z2 = o2.pos.sectionZ; + + return Integer.compare((x1 - x) ^ 2 + (z1 - z) ^ 2, (x2 - x) ^ 2 + (z2 - z) ^ 2); + } + }; + renderBufferNodes.sort(byDistance);*/ } public void close() {