Block optimizations

This commit is contained in:
Anuken 2019-01-22 19:35:00 -05:00
parent 33f5215e6d
commit 55e1759b47
4 changed files with 33 additions and 8 deletions

View File

@ -205,10 +205,8 @@ public class Blocks implements ContentList{
variants = 1; variants = 1;
}}; }};
rocks = new Rock("rocks"){{ rocks = new StaticWall("rocks"){{
variants = 2; variants = 2;
breakable = alwaysReplace = false;
solid = true;
}}; }};
//endregion //endregion

View File

@ -73,6 +73,9 @@ public class BlockRenderer{
shadows.begin(); shadows.begin();
Core.graphics.clear(Color.CLEAR); Core.graphics.clear(Color.CLEAR);
Draw.color(shadowColor); Draw.color(shadowColor);
floor.beginDraw();
floor.drawLayer(CacheLayer.walls);
floor.endDraw();
drawBlocks(Layer.shadow); drawBlocks(Layer.shadow);
EntityDraw.drawWith(playerGroup, player -> !player.isDead(), Unit::draw); EntityDraw.drawWith(playerGroup, player -> !player.isDead(), Unit::draw);
@ -119,11 +122,11 @@ public class BlockRenderer{
Tile tile = world.rawTile(x, y); Tile tile = world.rawTile(x, y);
Block block = tile.block(); Block block = tile.block();
if(!expanded && block != Blocks.air && world.isAccessible(x, y)){ if(!expanded && block != Blocks.air && block.cacheLayer == CacheLayer.normal && world.isAccessible(x, y)){
tile.block().drawShadow(tile); tile.block().drawShadow(tile);
} }
if(block != Blocks.air){ if(block != Blocks.air && block.cacheLayer == CacheLayer.normal){
if(!expanded){ if(!expanded){
addRequest(tile, Layer.shadow); addRequest(tile, Layer.shadow);
addRequest(tile, Layer.block); addRequest(tile, Layer.block);
@ -148,6 +151,10 @@ public class BlockRenderer{
lastCamY = avgy; lastCamY = avgy;
lastRangeX = rangex; lastRangeX = rangex;
lastRangeY = rangey; lastRangeY = rangey;
floor.beginDraw();
floor.drawLayer(CacheLayer.walls);
floor.endDraw();
} }
public void drawBlocks(Layer stopAt){ public void drawBlocks(Layer stopAt){

View File

@ -22,7 +22,8 @@ import io.anuke.mindustry.world.blocks.Floor;
import java.util.Arrays; import java.util.Arrays;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Vars.world;
public class FloorRenderer{ public class FloorRenderer{
private final static int chunksize = 64; private final static int chunksize = 64;
@ -156,7 +157,11 @@ public class FloorRenderer{
Tile tile = world.tile(tilex, tiley); Tile tile = world.tile(tilex, tiley);
if(tile != null){ if(tile != null){
used.add(tile.floor().cacheLayer); if(tile.block().cacheLayer != CacheLayer.normal){
used.add(tile.block().cacheLayer);
}else{
used.add(tile.floor().cacheLayer);
}
} }
} }
} }
@ -183,7 +188,9 @@ public class FloorRenderer{
floor = tile.floor(); floor = tile.floor();
} }
if(floor.cacheLayer == layer){ if(tile.block().cacheLayer == layer && layer == CacheLayer.walls){
tile.block().draw(tile);
}else if(floor.cacheLayer == layer && tile.block().cacheLayer != CacheLayer.walls){
floor.draw(tile); floor.draw(tile);
} }
} }

View File

@ -0,0 +1,13 @@
package io.anuke.mindustry.world.blocks;
import io.anuke.mindustry.graphics.CacheLayer;
public class StaticWall extends Rock{
public StaticWall(String name){
super(name);
breakable = alwaysReplace = false;
solid = true;
cacheLayer = CacheLayer.walls;
}
}