From ffa1aae27cd6e25179c90b10e81b1f9af9e7a6d8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 5 Nov 2018 13:49:31 -0500 Subject: [PATCH] Removed shadow/world padding --- core/assets/shaders/menu.fragment | 2 +- .../mindustry/graphics/FloorRenderer.java | 67 +++---------------- .../anuke/mindustry/graphics/FogRenderer.java | 50 +++----------- core/src/io/anuke/mindustry/maps/Sectors.java | 2 + 4 files changed, 22 insertions(+), 99 deletions(-) diff --git a/core/assets/shaders/menu.fragment b/core/assets/shaders/menu.fragment index dda705a2d1..77acd0e031 100644 --- a/core/assets/shaders/menu.fragment +++ b/core/assets/shaders/menu.fragment @@ -38,7 +38,7 @@ void main() { else if(m > 0.35) gl_FragColor.rgb = p4; else gl_FragColor.rgb = vec3(0.0); - gl_FragColor.rgb *= 0.8; + gl_FragColor.rgb *= 0.75; gl_FragColor.a = mod(abs(float(coords.x)) + abs(float(coords.y)), 110.0) < 35.0 ? 1.0 : 0.0; } \ No newline at end of file diff --git a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java b/core/src/io/anuke/mindustry/graphics/FloorRenderer.java index 84d18664fc..36510734d7 100644 --- a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/FloorRenderer.java @@ -10,7 +10,6 @@ import com.badlogic.gdx.utils.IntSet.IntSetIterator; import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.game.EventType.WorldLoadGraphicsEvent; import io.anuke.mindustry.maps.Sector; -import io.anuke.mindustry.maps.generation.WorldGenerator.GenResult; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.Floor; import io.anuke.ucore.core.Core; @@ -20,23 +19,18 @@ import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.CacheBatch; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Fill; -import io.anuke.ucore.util.Structs; -import io.anuke.ucore.util.Geometry; import io.anuke.ucore.util.Log; import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Structs; import java.util.Arrays; -import static io.anuke.mindustry.Vars.mapPadding; import static io.anuke.mindustry.Vars.tilesize; import static io.anuke.mindustry.Vars.world; public class FloorRenderer{ private final static int chunksize = 64; - private int gutter; - private Tile gutterTile; - private Tile gutterNearTile = new Tile(0, 0); private Chunk[][] cache; private CacheBatch cbatch; private IntSet drawnLayerSet = new IntSet(); @@ -44,26 +38,6 @@ public class FloorRenderer{ public FloorRenderer(){ Events.on(WorldLoadGraphicsEvent.class, event -> clearTiles()); - - gutterTile = new Tile(0, 0){ - @Override - public Tile getNearby(int dx, int dy){ - Sector sec = world.getSector(); - GenResult result = world.generator.generateTile(sec.x, sec.y, x + dx, y + dy); - gutterNearTile.x = (short)(x + dx); - gutterNearTile.y = (short)(y + dy); - gutterNearTile.setElevation(result.elevation); - gutterNearTile.setFloor((Floor)result.floor); - return gutterNearTile; - } - - @Override - public Tile getNearby(int rotation){ - int dx = Geometry.d4[rotation].x; - int dy = Geometry.d4[rotation].y; - return getNearby(dx, dy); - } - }; } public void drawFloor(){ @@ -188,18 +162,10 @@ public class FloorRenderer{ for(int tilex = cx * chunksize; tilex < (cx + 1) * chunksize; tilex++){ for(int tiley = cy * chunksize; tiley < (cy + 1) * chunksize; tiley++){ - Tile tile = world.tile(tilex - gutter, tiley - gutter); - Floor floor = null; + Tile tile = world.tile(tilex, tiley); - if(tile == null && sector != null && tilex < world.width() + gutter*2 && tiley < world.height() + gutter*2){ - GenResult result = world.generator.generateTile(sector.x, sector.y, tilex - gutter, tiley - gutter); - floor = (Floor) result.floor; - }else if(tile != null){ - floor = tile.floor(); - } - - if(floor != null){ - used.add(floor.cacheLayer); + if(tile != null){ + used.add(tile.floor().cacheLayer); } } } @@ -218,22 +184,11 @@ public class FloorRenderer{ for(int tilex = cx * chunksize; tilex < (cx + 1) * chunksize; tilex++){ for(int tiley = cy * chunksize; tiley < (cy + 1) * chunksize; tiley++){ - Tile tile = world.tile(tilex - gutter, tiley - gutter); + Tile tile = world.tile(tilex , tiley); Floor floor; if(tile == null){ - if(sector != null && tilex < world.width() + gutter*2 && tiley < world.height() + gutter*2){ - GenResult result = world.generator.generateTile(sector.x, sector.y, tilex - gutter, tiley - gutter); - floor = (Floor)result.floor; - gutterTile.setFloor(floor); - gutterTile.x = (short)(tilex - gutter); - gutterTile.y = (short)(tiley - gutter); - gutterTile.setElevation(result.elevation); - gutterTile.updateOcclusion(); - tile = gutterTile; - }else{ - continue; - } + continue; }else{ floor = tile.floor(); } @@ -254,14 +209,8 @@ public class FloorRenderer{ public void clearTiles(){ if(cbatch != null) cbatch.dispose(); - if(world.getSector() != null){ - gutter = mapPadding; - }else{ - gutter = 0; - } - - int chunksx = Mathf.ceil((float) (world.width() + gutter) / chunksize), - chunksy = Mathf.ceil((float) (world.height() + gutter) / chunksize) ; + int chunksx = Mathf.ceil((float) (world.width()) / chunksize), + chunksy = Mathf.ceil((float) (world.height()) / chunksize) ; cache = new Chunk[chunksx][chunksy]; cbatch = new CacheBatch(world.width() * world.height() * 4 * 4); diff --git a/core/src/io/anuke/mindustry/graphics/FogRenderer.java b/core/src/io/anuke/mindustry/graphics/FogRenderer.java index dad721c5b7..98857f1db0 100644 --- a/core/src/io/anuke/mindustry/graphics/FogRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/FogRenderer.java @@ -7,7 +7,6 @@ import com.badlogic.gdx.graphics.Pixmap.Format; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.glutils.FrameBuffer; -import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Disposable; import io.anuke.mindustry.entities.Unit; @@ -27,52 +26,27 @@ import static io.anuke.mindustry.Vars.*; /**Used for rendering fog of war. A framebuffer is used for this.*/ public class FogRenderer implements Disposable{ - private static final int extraPadding = 3; - private static final int fshadowPadding = 1; - private TextureRegion region = new TextureRegion(); private FrameBuffer buffer; private ByteBuffer pixelBuffer; private Array changeQueue = new Array<>(); - private int padding; private int shadowPadding; - private Rectangle rect = new Rectangle(); private boolean dirty; - private boolean isOffseted; - private int offsettedX, offsettedY; - public FogRenderer(){ Events.on(WorldLoadGraphicsEvent.class, event -> { - if(!isOffseted){ - dispose(); - } + dispose(); - padding = world.getSector() != null ? mapPadding + extraPadding : 0; - shadowPadding = world.getSector() != null ? fshadowPadding : -1; + shadowPadding = -1; - FrameBuffer lastBuffer = buffer; - - buffer = new FrameBuffer(Format.RGBA8888, world.width() + padding*2, world.height() + padding*2, false); + buffer = new FrameBuffer(Format.RGBA8888, world.width(), world.height(), false); changeQueue.clear(); //clear buffer to black buffer.begin(); Graphics.clear(0, 0, 0, 1f); - - if(isOffseted){ - Core.batch.getProjectionMatrix().setToOrtho2D(-padding, -padding, buffer.getWidth(), buffer.getHeight()); - Core.batch.begin(); - Core.batch.draw(lastBuffer.getColorBufferTexture(), offsettedX, offsettedY + lastBuffer.getColorBufferTexture().getHeight(), - lastBuffer.getColorBufferTexture().getWidth(), -lastBuffer.getColorBufferTexture().getHeight()); - Core.batch.end(); - } buffer.end(); - if(isOffseted){ - lastBuffer.dispose(); - } - for(int x = 0; x < world.width(); x++){ for(int y = 0; y < world.height(); y++){ Tile tile = world.tile(x, y); @@ -84,8 +58,6 @@ public class FogRenderer implements Disposable{ pixelBuffer = ByteBuffer.allocateDirect(world.width() * world.height() * 4); dirty = true; - - isOffseted = false; }); Events.on(TileChangeEvent.class, event -> threads.runGraphics(() -> { @@ -101,7 +73,7 @@ public class FogRenderer implements Disposable{ buffer.begin(); pixelBuffer.position(0); Gdx.gl.glPixelStorei(GL20.GL_PACK_ALIGNMENT, 1); - Gdx.gl.glReadPixels(padding, padding, world.width(), world.height(), GL20.GL_RGBA, GL20.GL_UNSIGNED_BYTE, pixelBuffer); + Gdx.gl.glReadPixels(0, 0, world.width(), world.height(), GL20.GL_RGBA, GL20.GL_UNSIGNED_BYTE, pixelBuffer); pixelBuffer.position(0); for(int i = 0; i < world.width() * world.height(); i++){ @@ -115,7 +87,7 @@ public class FogRenderer implements Disposable{ } public int getPadding(){ - return padding; + return -shadowPadding; } public void draw(){ @@ -127,19 +99,19 @@ public class FogRenderer implements Disposable{ float px = Core.camera.position.x - vw / 2f; float py = Core.camera.position.y - vh / 2f; - float u = (px / tilesize + padding) / buffer.getWidth(); - float v = (py / tilesize + padding) / buffer.getHeight(); + float u = (px / tilesize) / buffer.getWidth(); + float v = (py / tilesize) / buffer.getHeight(); - float u2 = ((px + vw) / tilesize + padding) / buffer.getWidth(); - float v2 = ((py + vh) / tilesize + padding) / buffer.getHeight(); + float u2 = ((px + vw) / tilesize) / buffer.getWidth(); + float v2 = ((py + vh) / tilesize) / buffer.getHeight(); - Core.batch.getProjectionMatrix().setToOrtho2D(-padding * tilesize, -padding * tilesize, buffer.getWidth() * tilesize, buffer.getHeight() * tilesize); + Core.batch.getProjectionMatrix().setToOrtho2D(0, 0, buffer.getWidth() * tilesize, buffer.getHeight() * tilesize); Draw.color(Color.WHITE); buffer.begin(); - Graphics.beginClip((padding-shadowPadding), (padding-shadowPadding), (world.width() + shadowPadding*2), (world.height() + shadowPadding*2)); + Graphics.beginClip((-shadowPadding), (-shadowPadding), (world.width() + shadowPadding*2), (world.height() + shadowPadding*2)); Graphics.begin(); EntityDraw.setClip(false); diff --git a/core/src/io/anuke/mindustry/maps/Sectors.java b/core/src/io/anuke/mindustry/maps/Sectors.java index fea7ca4c49..f6a14ec8c8 100644 --- a/core/src/io/anuke/mindustry/maps/Sectors.java +++ b/core/src/io/anuke/mindustry/maps/Sectors.java @@ -230,6 +230,8 @@ public class Sectors{ return; } + //TODO check for core on impassable block. + //50% chance to get a wave mission if(Mathf.randomSeed(sector.getSeed() + 6) < 0.5){ //recipe mission (maybe)