diff --git a/core/src/io/anuke/mindustry/entities/TileEntity.java b/core/src/io/anuke/mindustry/entities/TileEntity.java index f04bcacda5..b2e4881b60 100644 --- a/core/src/io/anuke/mindustry/entities/TileEntity.java +++ b/core/src/io/anuke/mindustry/entities/TileEntity.java @@ -101,8 +101,8 @@ public class TileEntity extends Entity{ Block block = tile.block(); block.onDestroyed(tile); - world.removeBlock(tile); + block.afterDestroyed(tile, this); remove(); } } diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 963268926b..b0398fb72d 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -214,6 +214,10 @@ public class Block extends BaseBlock { public boolean isAccessible(){ return (hasItems && itemCapacity > 0); } + + public void afterDestroyed(Tile tile, TileEntity entity){ + + } public void onDestroyed(Tile tile){ float x = tile.worldx(), y = tile.worldy(); diff --git a/core/src/io/anuke/mindustry/world/Build.java b/core/src/io/anuke/mindustry/world/Build.java index 8aa902c8dd..b40262821b 100644 --- a/core/src/io/anuke/mindustry/world/Build.java +++ b/core/src/io/anuke/mindustry/world/Build.java @@ -50,6 +50,7 @@ public class Build { public static void placeBlock(Team team, int x, int y, Recipe recipe, int rotation){ Tile tile = world.tile(x, y); Block result = recipe.result; + Block previous = tile.block(); //just in case if(tile == null) return; @@ -57,7 +58,7 @@ public class Build { Block sub = Block.getByName("build" + result.size); tile.setBlock(sub, rotation); - tile.entity().set(recipe); + tile.entity().set(previous, recipe); tile.setTeam(team); if(result.isMultiblock()){ @@ -119,6 +120,10 @@ public class Build { if(tile == null || (isSpawnPoint(tile) && (type.solidifes || type.solid))) return false; if(type.isMultiblock()){ + if(type.canReplace(tile.block()) && tile.block().size == type.size){ + return true; + } + int offsetx = -(type.size-1)/2; int offsety = -(type.size-1)/2; for(int dx = 0; dx < type.size; dx ++){ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java index 52b6e7cb5d..049fef2e63 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/BuildBlock.java @@ -12,10 +12,7 @@ import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.Layer; import io.anuke.mindustry.graphics.Shaders; import io.anuke.mindustry.type.Recipe; -import io.anuke.mindustry.world.BarType; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.BlockBar; -import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.blocks.types.modules.InventoryModule; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Graphics; @@ -56,8 +53,23 @@ public class BuildBlock extends Block { } @Override - public void draw(Tile tile){ + public void afterDestroyed(Tile tile, TileEntity e){ + BuildEntity entity = (BuildEntity)e; + if(entity.previous.update || entity.previous.solid){ + tile.setBlock(entity.previous); + } + } + + @Override + public void draw(Tile tile){ + BuildEntity entity = tile.entity(); + + if(entity.previous.update || entity.previous.solid) { + for (TextureRegion region : entity.previous.getBlockIcon()) { + Draw.rect(region, tile.drawx(), tile.drawy(), entity.recipe.result.rotate ? tile.getRotation() * 90 : 0); + } + } } @Override @@ -115,6 +127,7 @@ public class BuildBlock extends Block { private double progress = 0; private double[] accumulator; private boolean updated; + private Block previous; public void addProgress(InventoryModule inventory, double amount){ double maxProgress = amount; @@ -147,9 +160,10 @@ public class BuildBlock extends Block { return (float)progress; } - public void set(Recipe recipe){ + public void set(Block previous, Recipe recipe){ updated = true; this.recipe = recipe; + this.previous = previous; this.accumulator = new double[recipe.requirements.length]; } }