From 6bceb7311a3727777ccec87a52ba2c9b28ca3a43 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 14 Oct 2019 23:43:13 -0400 Subject: [PATCH] Better display of broken stuff / 5x slower wall building --- .../io/anuke/mindustry/graphics/BlockRenderer.java | 12 +++++++++--- core/src/io/anuke/mindustry/input/DesktopInput.java | 5 +++++ core/src/io/anuke/mindustry/input/InputHandler.java | 4 ++++ core/src/io/anuke/mindustry/input/MobileInput.java | 5 +++++ core/src/io/anuke/mindustry/world/Block.java | 3 +++ .../anuke/mindustry/world/blocks/defense/Wall.java | 1 + 6 files changed, 27 insertions(+), 3 deletions(-) diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java index 3b8306a353..1b9f821e92 100644 --- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java @@ -9,7 +9,6 @@ import io.anuke.arc.graphics.glutils.*; import io.anuke.arc.math.*; import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; -import io.anuke.mindustry.entities.type.base.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.Teams.*; @@ -29,6 +28,7 @@ public class BlockRenderer implements Disposable{ 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); private Array outArray = new Array<>(); @@ -124,12 +124,18 @@ public class BlockRenderer implements Disposable{ } public void drawBroken(){ - if(unitGroups[player.getTeam().ordinal()].all().contains(p -> p instanceof BuilderDrone)){ + if(control.input.isPlacing() || control.input.isBreaking()){ + brokenFade = Mathf.lerpDelta(brokenFade, 1f, 0.1f); + }else{ + brokenFade = Mathf.lerpDelta(brokenFade, 0f, 0.1f); + } + + if(brokenFade > 0.001f){ for(BrokenBlock block : state.teams.get(player.getTeam()).brokenBlocks){ Block b = content.block(block.block); if(!camera.bounds(Tmp.r1).grow(tilesize * 2f).overlaps(Tmp.r2.setSize(b.size * tilesize).setCenter(block.x * tilesize + b.offset(), block.y * tilesize + b.offset()))) continue; - Draw.alpha(0.5f); + Draw.alpha(0.53f * brokenFade); Draw.mixcol(Color.white, 0.2f + Mathf.absin(Time.globalTime(), 6f, 0.2f)); Draw.rect(b.icon(Cicon.full), block.x * tilesize + b.offset(), block.y * tilesize + b.offset(), b.rotate ? block.rotation * 90 : 0f); } diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index 127d674ea4..575ee5c134 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -190,6 +190,11 @@ public class DesktopInput extends InputHandler{ cursorType = SystemCursor.arrow; } + @Override + public boolean isBreaking(){ + return mode == breaking; + } + void pollInput(){ Tile selected = tileAt(Core.input.mouseX(), Core.input.mouseY()); int cursorX = tileX(Core.input.mouseX()); diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index 84c0c8799f..4e7650e8ca 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -523,6 +523,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ return block != null; } + public boolean isBreaking(){ + return false; + } + public float mouseAngle(float x, float y){ return Core.input.mouseWorld(getMouseX(), getMouseY()).sub(x, y).angle(); } diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index 7cc5159b55..30872343a9 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -348,6 +348,11 @@ public class MobileInput extends InputHandler implements GestureListener{ //endregion //region input events + @Override + public boolean isBreaking(){ + return mode == breaking; + } + @Override public boolean touchDown(int screenX, int screenY, int pointer, KeyCode button){ if(state.is(State.menu) || player.isDead()) return false; diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 2d505333bb..e7c6f0a230 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -125,6 +125,8 @@ public class Block extends BlockStorage{ public float buildCost; /** Whether this block is visible and can currently be built. */ public BooleanProvider buildVisibility = invisible; + /** Multiplier for speed of building this block. */ + public float buildCostMultiplier = 1f; /** Whether this block has instant transfer.*/ public boolean instantTransfer = false; public boolean alwaysUnlocked = false; @@ -388,6 +390,7 @@ public class Block extends BlockStorage{ for(ItemStack stack : requirements){ buildCost += stack.amount * stack.item.cost; } + buildCost *= buildCostMultiplier; if(consumes.has(ConsumeType.power)) hasPower = true; if(consumes.has(ConsumeType.item)) hasItems = true; diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java b/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java index 3062883588..66972be035 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/Wall.java @@ -16,6 +16,7 @@ public class Wall extends Block{ solid = true; destructible = true; group = BlockGroup.walls; + buildCostMultiplier = 5f; } @Override