Better display of broken stuff / 5x slower wall building

This commit is contained in:
Anuken 2019-10-14 23:43:13 -04:00
parent edfd402ccd
commit 6bceb7311a
6 changed files with 27 additions and 3 deletions

View File

@ -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<Tile> 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);
}

View File

@ -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());

View File

@ -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();
}

View File

@ -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;

View File

@ -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;

View File

@ -16,6 +16,7 @@ public class Wall extends Block{
solid = true;
destructible = true;
group = BlockGroup.walls;
buildCostMultiplier = 5f;
}
@Override