1
0
mirror of https://github.com/Anuken/Mindustry.git synced 2025-03-13 19:39:04 +07:00
This commit is contained in:
Anuken 2020-04-22 15:19:39 -04:00
parent d154361e75
commit 9beb23b0e4
4 changed files with 40 additions and 53 deletions

View File

@ -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); 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 = new AssetManager();
assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader()); assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader());

View File

@ -207,7 +207,9 @@ public class Renderer implements ApplicationListener{
Draw.sort(true); Draw.sort(true);
blocks.drawBlocks();
//draw stuff
Draw.reset(); Draw.reset();
Draw.flush(); Draw.flush();

View File

@ -25,11 +25,9 @@ public class BlockRenderer implements Disposable{
public final FloorRenderer floor = new FloorRenderer(); public final FloorRenderer floor = new FloorRenderer();
private Array<BlockRequest> requests = new Array<>(true, initialRequests, BlockRequest.class); private Array<Tile> requests = new Array<>(initialRequests);
private int lastCamX, lastCamY, lastRangeX, lastRangeY; private int lastCamX, lastCamY, lastRangeX, lastRangeY;
private int requestidx = 0;
private int iterateidx = 0;
private float brokenFade = 0f; private float brokenFade = 0f;
private FrameBuffer shadows = new FrameBuffer(2, 2); private FrameBuffer shadows = new FrameBuffer(2, 2);
private FrameBuffer fog = new FrameBuffer(2, 2); private FrameBuffer fog = new FrameBuffer(2, 2);
@ -39,10 +37,6 @@ public class BlockRenderer implements Disposable{
public BlockRenderer(){ public BlockRenderer(){
for(int i = 0; i < requests.size; i++){
requests.set(i, new BlockRequest());
}
Events.on(WorldLoadEvent.class, event -> { Events.on(WorldLoadEvent.class, event -> {
shadowEvents.clear(); shadowEvents.clear();
lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated
@ -179,7 +173,6 @@ public class BlockRenderer implements Disposable{
/** Process all blocks to draw. */ /** Process all blocks to draw. */
public void processBlocks(){ public void processBlocks(){
displayStatus = Core.settings.getBool("blockstatus"); displayStatus = Core.settings.getBool("blockstatus");
iterateidx = 0;
int avgx = (int)(camera.position.x / tilesize); int avgx = (int)(camera.position.x / tilesize);
int avgy = (int)(camera.position.y / tilesize); int avgy = (int)(camera.position.y / tilesize);
@ -191,8 +184,6 @@ public class BlockRenderer implements Disposable{
return; return;
} }
requestidx = 0;
int minx = Math.max(avgx - rangex - expandr, 0); int minx = Math.max(avgx - rangex - expandr, 0);
int miny = Math.max(avgy - rangey - expandr, 0); int miny = Math.max(avgy - rangey - expandr, 0);
int maxx = Math.min(world.width() - 1, avgx + rangex + expandr); int maxx = Math.min(world.width() - 1, avgx + rangex + expandr);
@ -205,29 +196,14 @@ public class BlockRenderer implements Disposable{
Block block = tile.block(); Block block = tile.block();
if(block != Blocks.air && tile.isCenter() && block.cacheLayer == CacheLayer.normal){ 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){ if(block.expanded || !expanded){
requests.add(tile);
}
if(block.layer != null){ if(tile.entity != null && tile.entity.power() != null && tile.entity.power().links.size > 0){
addRequest(tile, block.layer); for(Tilec other : tile.entity.getPowerConnections(outArray2)){
} if(other.block().layer == Layer.power){
requests.add(other.tile());
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);
}
} }
} }
} }
@ -235,14 +211,40 @@ public class BlockRenderer implements Disposable{
} }
} }
Sort.instance().sort(requests.items, 0, requestidx);
lastCamX = avgx; lastCamX = avgx;
lastCamY = avgy; lastCamY = avgy;
lastRangeX = rangex; lastRangeX = rangex;
lastRangeY = rangey; 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){ public void drawBlocks(Layer stopAt){
int startIdx = iterateidx; int startIdx = iterateidx;
for(; iterateidx < requestidx; iterateidx++){ for(; iterateidx < requestidx; iterateidx++){
@ -295,7 +297,7 @@ public class BlockRenderer implements Disposable{
r.tile = tile; r.tile = tile;
r.layer = layer; r.layer = layer;
requestidx++; requestidx++;
} }*/
@Override @Override
public void dispose(){ public void dispose(){
@ -304,21 +306,4 @@ public class BlockRenderer implements Disposable{
shadows = fog = null; shadows = fog = null;
floor.dispose(); floor.dispose();
} }
private class BlockRequest implements Comparable<BlockRequest>{
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();
}
}
} }

View File

@ -1,3 +1,3 @@
org.gradle.daemon=true org.gradle.daemon=true
org.gradle.jvmargs=-Xms256m -Xmx1024m org.gradle.jvmargs=-Xms256m -Xmx1024m
archash=5796def2ff3d03c280655ebf60b98aaf66de5422 archash=87ff7abf2af82712cc428c377833d83259d30f72