diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index d0fd56c5cf..f76214ad50 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -210,10 +210,8 @@ public class Renderer extends RendererModule{ Graphics.surface(shieldSurface); Graphics.surface(); - boolean optimize = false; - drawFloor(); - drawBlocks(false, optimize); + drawBlocks(false); Graphics.shader(Shaders.outline, false); Entities.draw(control.enemyGroup); @@ -221,8 +219,6 @@ public class Renderer extends RendererModule{ Entities.draw(Entities.defaultGroup()); - if(!optimize) drawBlocks(true, false); - Entities.draw(control.bulletGroup); drawShield(); @@ -369,7 +365,7 @@ public class Renderer extends RendererModule{ } } - void drawBlocks(boolean top, boolean optimize){ + void drawBlocks(boolean top){ int crangex = (int) (camera.viewportWidth / (chunksize * tilesize)) + 1; int crangey = (int) (camera.viewportHeight / (chunksize * tilesize)) + 1; @@ -384,8 +380,8 @@ public class Renderer extends RendererModule{ Layer[] layers = Layer.values(); - int start = optimize ? (noshadows ? 1 : 0) : (top ? 4 : (noshadows ? 1 : 0)); - int end = optimize ? 4 : (top ? 4 + layers.length-1 : 4); + int start = (top ? 4 : (noshadows ? 1 : 0)); + int end = (top ? 4 + layers.length-1 : 4); //0 = shadows //1 = cache blocks @@ -422,15 +418,12 @@ public class Renderer extends RendererModule{ (!expanded || tile.block().expanded)){ if(l == 2){ tile.block().draw(tile); - }else if(!optimize){ + }else{ if(tile.block().layer == layer) tile.block().drawLayer(tile); if(tile.block().layer2 == layer) tile.block().drawLayer2(tile); - }else if(l == 3){ - tile.block().drawLayer(tile); - tile.block().drawLayer2(tile); } } } diff --git a/core/src/io/anuke/mindustry/ui/LevelDialog.java b/core/src/io/anuke/mindustry/ui/LevelDialog.java index 45d69703df..baa39b180a 100644 --- a/core/src/io/anuke/mindustry/ui/LevelDialog.java +++ b/core/src/io/anuke/mindustry/ui/LevelDialog.java @@ -8,10 +8,13 @@ import io.anuke.mindustry.world.Map; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Timers; +import io.anuke.ucore.scene.event.InputEvent; import io.anuke.ucore.scene.ui.*; import io.anuke.ucore.scene.ui.layout.Stack; import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.scene.utils.ClickListener; import io.anuke.ucore.scene.utils.Elements; +import io.anuke.ucore.util.Tmp; public class LevelDialog extends FloatingDialog{ private Map selectedMap = Vars.world.maps().getMap(0); @@ -83,20 +86,29 @@ public class LevelDialog extends FloatingDialog{ if(map.custom){ image.row(); delete[0] = image.addButton("Delete", () -> { - Vars.ui.showConfirm("Confirm Delete", "Are you sure you want to delete\nthe map \"[orange]" + map.name + "[]\"?", () -> { - Vars.world.maps().removeMap(map); - reload(); - Core.scene.setScrollFocus(pane); + Timers.run(1f, () -> { + Vars.ui.showConfirm("Confirm Delete", "Are you sure you want to delete\nthe map \"[orange]" + map.name + "[]\"?", () -> { + Vars.world.maps().removeMap(map); + reload(); + Core.scene.setScrollFocus(pane); + }); }); }).width(images+16).padBottom(-10f).grow().get(); } - image.clicked(()->{ - if(delete[0] != null && delete[0].getClickListener().isOver()){ - return; + + image.addListener(new ClickListener(){ + public void clicked(InputEvent event, float x, float y){ + image.localToStageCoordinates(Tmp.v1.set(x, y)); + if(delete[0] != null && (delete[0].getClickListener().isOver() || delete[0].getClickListener().isPressed() + || (Core.scene.hit(Tmp.v1.x, Tmp.v1.y, true) != null && + Core.scene.hit(Tmp.v1.x, Tmp.v1.y, true).isDescendantOf(delete[0])))){ + return; + } + + selectedMap = map; + hide(); + Vars.control.playMap(selectedMap); } - selectedMap = map; - hide(); - Vars.control.playMap(selectedMap); }); image.getImageCell().size(images); diff --git a/core/src/io/anuke/mindustry/world/blocks/Blocks.java b/core/src/io/anuke/mindustry/world/blocks/Blocks.java index d9aa00ede7..b59378829e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/Blocks.java @@ -8,9 +8,7 @@ import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.types.BlockPart; -import io.anuke.mindustry.world.blocks.types.Floor; -import io.anuke.mindustry.world.blocks.types.StaticBlock; +import io.anuke.mindustry.world.blocks.types.*; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Mathf; @@ -79,25 +77,26 @@ public class Blocks{ stone = new Floor("stone"){{ drops = new ItemStack(Item.stone, 1); + blends = block -> block != this && !(block instanceof Ore); }}, blackstone = new Floor("blackstone"){{ drops = new ItemStack(Item.stone, 1); }}, - iron = new Floor("iron"){{ + iron = new Ore("iron"){{ drops = new ItemStack(Item.iron, 1); }}, - coal = new Floor("coal"){{ + coal = new Ore("coal"){{ drops = new ItemStack(Item.coal, 1); }}, - titanium = new Floor("titanium"){{ + titanium = new Ore("titanium"){{ drops = new ItemStack(Item.titanium, 1); }}, - uranium = new Floor("uranium"){{ + uranium = new Ore("uranium"){{ drops = new ItemStack(Item.uranium, 1); }}, diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Floor.java b/core/src/io/anuke/mindustry/world/blocks/types/Floor.java index e82b670f0b..0f3a1c7484 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/Floor.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/Floor.java @@ -7,10 +7,12 @@ import io.anuke.mindustry.Vars; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Draw; +import io.anuke.ucore.function.Predicate; import io.anuke.ucore.util.Mathf; public class Floor extends Block{ - + protected Predicate blends = block -> block != this; + public Floor(String name) { super(name); variants = 3; @@ -33,7 +35,7 @@ public class Floor extends Block{ Block floor = other.floor(); - if(floor.id <= this.id) continue; + if(floor.id <= this.id || !blends.test(floor)) continue; TextureRegion region = Draw.hasRegion(floor.name() + "edge") ? Draw.region(floor.name() + "edge") : Draw.region(floor.edge + "edge"); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Ore.java b/core/src/io/anuke/mindustry/world/blocks/types/Ore.java new file mode 100644 index 0000000000..d4d11d2e0a --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/types/Ore.java @@ -0,0 +1,12 @@ +package io.anuke.mindustry.world.blocks.types; + +import io.anuke.mindustry.world.blocks.Blocks; + +public class Ore extends Floor{ + + public Ore(String name) { + super(name); + blends = block -> block != this && block != Blocks.stone; + } + +}