diff --git a/core/src/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java index 17a71d6b06..b6fa3f290f 100644 --- a/core/src/mindustry/ClientLauncher.java +++ b/core/src/mindustry/ClientLauncher.java @@ -45,7 +45,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform return (Float.isNaN(result) || Float.isInfinite(result)) ? 1f : Mathf.clamp(result, 0.0001f, 60f / 10f); }); - batch = new SpriteBatch(); + batch = new SortedSpriteBatch(); assets = new AssetManager(); assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader()); diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 66bd5b4400..e74c0529d0 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -207,7 +207,9 @@ public class Renderer implements ApplicationListener{ Draw.sort(true); + blocks.drawBlocks(); + //draw stuff Draw.reset(); Draw.flush(); diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index 948bcb5228..4a23460600 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -25,11 +25,9 @@ public class BlockRenderer implements Disposable{ public final FloorRenderer floor = new FloorRenderer(); - private Array requests = new Array<>(true, initialRequests, BlockRequest.class); + private Array requests = new Array<>(initialRequests); private int lastCamX, lastCamY, lastRangeX, lastRangeY; - private int requestidx = 0; - private int iterateidx = 0; private float brokenFade = 0f; private FrameBuffer shadows = new FrameBuffer(2, 2); private FrameBuffer fog = new FrameBuffer(2, 2); @@ -39,10 +37,6 @@ public class BlockRenderer implements Disposable{ public BlockRenderer(){ - for(int i = 0; i < requests.size; i++){ - requests.set(i, new BlockRequest()); - } - Events.on(WorldLoadEvent.class, event -> { shadowEvents.clear(); lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated @@ -179,7 +173,6 @@ public class BlockRenderer implements Disposable{ /** Process all blocks to draw. */ public void processBlocks(){ displayStatus = Core.settings.getBool("blockstatus"); - iterateidx = 0; int avgx = (int)(camera.position.x / tilesize); int avgy = (int)(camera.position.y / tilesize); @@ -191,8 +184,6 @@ public class BlockRenderer implements Disposable{ return; } - requestidx = 0; - int minx = Math.max(avgx - rangex - expandr, 0); int miny = Math.max(avgy - rangey - expandr, 0); int maxx = Math.min(world.width() - 1, avgx + rangex + expandr); @@ -205,29 +196,14 @@ public class BlockRenderer implements Disposable{ Block block = tile.block(); if(block != Blocks.air && tile.isCenter() && block.cacheLayer == CacheLayer.normal){ - if(!expanded){ - addRequest(tile, Layer.block); - } - - if(state.rules.lighting && tile.block().synthetic()){ - addRequest(tile, Layer.lights); - } - if(block.expanded || !expanded){ + requests.add(tile); + } - if(block.layer != null){ - addRequest(tile, block.layer); - } - - if(block.layer2 != null){ - addRequest(tile, block.layer2); - } - - if(tile.entity != null && tile.entity.power() != null && tile.entity.power().links.size > 0){ - for(Tilec other : tile.entity.getPowerConnections(outArray2)){ - if(other.block().layer == Layer.power){ - addRequest(other.tile(), Layer.power); - } + if(tile.entity != null && tile.entity.power() != null && tile.entity.power().links.size > 0){ + for(Tilec other : tile.entity.getPowerConnections(outArray2)){ + if(other.block().layer == Layer.power){ + requests.add(other.tile()); } } } @@ -235,14 +211,40 @@ public class BlockRenderer implements Disposable{ } } - Sort.instance().sort(requests.items, 0, requestidx); - lastCamX = avgx; lastCamY = avgy; lastRangeX = rangex; lastRangeY = rangey; } + public void drawBlocks(){ + drawDestroyed(); + + for(int i = 0; i < requests.size; i++){ + Tile tile = requests.items[i]; + Block block = tile.block(); + Tilec entity = tile.entity; + + block.drawBase(tile); + if(entity != null){ + if(entity.damaged()){ + entity.drawCracks(); + } + + if(entity.team() != player.team()){ + entity.drawTeam(); + } + + entity.drawLight(); + + if(displayStatus && block.consumes.any()){ + entity.drawStatus(); + } + } + } + } + + /* public void drawBlocks(Layer stopAt){ int startIdx = iterateidx; for(; iterateidx < requestidx; iterateidx++){ @@ -295,7 +297,7 @@ public class BlockRenderer implements Disposable{ r.tile = tile; r.layer = layer; requestidx++; - } + }*/ @Override public void dispose(){ @@ -304,21 +306,4 @@ public class BlockRenderer implements Disposable{ shadows = fog = null; floor.dispose(); } - - private class BlockRequest implements Comparable{ - Tile tile; - Layer layer; - - @Override - public int compareTo(BlockRequest other){ - int compare = layer.compareTo(other.layer); - - return (compare != 0) ? compare : Integer.compare(tile.pos(), other.tile.pos()); - } - - @Override - public String toString(){ - return tile.block().name + ":" + layer.toString(); - } - } } diff --git a/gradle.properties b/gradle.properties index ffc60341fa..fe46140e70 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=5796def2ff3d03c280655ebf60b98aaf66de5422 +archash=87ff7abf2af82712cc428c377833d83259d30f72