From e85c7d8e5003937b6c00545ba4805d123668bb32 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 26 Sep 2017 14:19:35 -0400 Subject: [PATCH] Minor fixes and balance changes --- build.gradle | 2 +- core/src/io/anuke/mindustry/UI.java | 3 + core/src/io/anuke/mindustry/io/SaveIO.java | 11 ++++ .../io/anuke/mindustry/resource/Recipe.java | 60 +++++++++--------- .../src/io/anuke/mindustry/ui/LoadDialog.java | 11 +++- .../src/io/anuke/mindustry/ui/SaveDialog.java | 14 ++-- .../mindustry/world/blocks/types/Drill.java | 2 +- .../world/blocks/types/RepairTurret.java | 4 +- desktop/mindustry-saves/0.mins | Bin 5089 -> 6955 bytes .../mindustry/desktop/DesktopLauncher.java | 2 +- 10 files changed, 68 insertions(+), 41 deletions(-) diff --git a/build.gradle b/build.gradle index 356a58ccfa..356935d1f9 100644 --- a/build.gradle +++ b/build.gradle @@ -79,7 +79,7 @@ project(":core") { apply plugin: "java" dependencies { - compile 'com.github.anuken:ucore:f77bdb38e4' + compile 'com.github.anuken:ucore:5633a3df2f' compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-ai:1.8.1" } diff --git a/core/src/io/anuke/mindustry/UI.java b/core/src/io/anuke/mindustry/UI.java index 11c9c129cf..9bbe03a06a 100644 --- a/core/src/io/anuke/mindustry/UI.java +++ b/core/src/io/anuke/mindustry/UI.java @@ -55,6 +55,9 @@ public class UI extends SceneModule{ skin.font().setUseIntegerPositions(false); skin.font().getData().setScale(Vars.fontscale); + skin.font().getData().down += 4f; + skin.font().getData().lineHeight -= 2f; + TooltipManager.getInstance().animations = false; Dialog.closePadR = -1; diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/io/anuke/mindustry/io/SaveIO.java index a65eef4d87..5f360e9841 100644 --- a/core/src/io/anuke/mindustry/io/SaveIO.java +++ b/core/src/io/anuke/mindustry/io/SaveIO.java @@ -132,6 +132,17 @@ public class SaveIO{ } } + public static int getWave(int slot){ + + try(DataInputStream stream = new DataInputStream(fileFor(slot).read())){ + stream.readInt(); + stream.readLong(); + return stream.readInt(); + }catch (IOException e){ + throw new RuntimeException(e); + } + } + public static FileHandle fileFor(int slot){ return Gdx.files.local("mindustry-saves/" + slot + ".mins"); } diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index 7492fbc09c..335be66618 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -10,44 +10,44 @@ import io.anuke.mindustry.world.blocks.ProductionBlocks; import io.anuke.mindustry.world.blocks.WeaponBlocks; public enum Recipe{ - stonewall(distribution, Blocks.stonewall, stack(Item.stone, 5)), - ironwall(distribution, Blocks.ironwall, stack(Item.iron, 5)), - steelwall(distribution, Blocks.steelwall, stack(Item.steel, 5)), - titaniumwall(distribution, Blocks.titaniumwall, stack(Item.titanium, 5)), - duriumwall(distribution, Blocks.diriumwall, stack(Item.dirium, 5)), - compositewall(distribution, Blocks.compositewall, stack(Item.dirium, 5), stack(Item.titanium, 5), stack(Item.steel, 5), stack(Item.iron, 5)), + stonewall(distribution, Blocks.stonewall, stack(Item.stone, 2)), + ironwall(distribution, Blocks.ironwall, stack(Item.iron, 2)), + steelwall(distribution, Blocks.steelwall, stack(Item.steel, 2)), + titaniumwall(distribution, Blocks.titaniumwall, stack(Item.titanium, 2)), + duriumwall(distribution, Blocks.diriumwall, stack(Item.dirium, 2)), + compositewall(distribution, Blocks.compositewall, stack(Item.dirium, 2), stack(Item.titanium, 2), stack(Item.steel, 2), stack(Item.iron, 2)), conveyor(distribution, ProductionBlocks.conveyor, stack(Item.stone, 1)), fastconveyor(distribution, ProductionBlocks.steelconveyor, stack(Item.steel, 1)), - router(distribution, ProductionBlocks.router, stack(Item.stone, 3)), - junction(distribution, ProductionBlocks.junction, stack(Item.iron, 5)), + router(distribution, ProductionBlocks.router, stack(Item.stone, 2)), + junction(distribution, ProductionBlocks.junction, stack(Item.iron, 2)), - turret(defense, WeaponBlocks.turret, stack(Item.stone, 6)), - dturret(defense, WeaponBlocks.doubleturret, stack(Item.stone, 12)), - machineturret(defense, WeaponBlocks.machineturret, stack(Item.iron, 15), stack(Item.stone, 20)), - shotgunturret(defense, WeaponBlocks.shotgunturret, stack(Item.iron, 18), stack(Item.stone, 20)), - flameturret(defense, WeaponBlocks.flameturret, stack(Item.iron, 25), stack(Item.steel, 18)), - sniperturret(defense, WeaponBlocks.sniperturret, stack(Item.iron, 30), stack(Item.steel, 20)), - laserturret(defense, WeaponBlocks.laserturret, stack(Item.steel, 20), stack(Item.titanium, 20)), - mortarturret(defense, WeaponBlocks.mortarturret, stack(Item.steel, 40), stack(Item.titanium, 30)), - teslaturret(defense, WeaponBlocks.teslaturret, stack(Item.steel, 20), stack(Item.titanium, 30), stack(Item.dirium, 30)), - plasmaturret(defense, WeaponBlocks.plasmaturret, stack(Item.steel, 20), stack(Item.titanium, 20), stack(Item.dirium, 30)), + turret(defense, WeaponBlocks.turret, stack(Item.stone, 3)), + dturret(defense, WeaponBlocks.doubleturret, stack(Item.stone, 6)), + machineturret(defense, WeaponBlocks.machineturret, stack(Item.iron, 7), stack(Item.stone, 10)), + shotgunturret(defense, WeaponBlocks.shotgunturret, stack(Item.iron, 9), stack(Item.stone, 10)), + flameturret(defense, WeaponBlocks.flameturret, stack(Item.iron, 12), stack(Item.steel, 9)), + sniperturret(defense, WeaponBlocks.sniperturret, stack(Item.iron, 15), stack(Item.steel, 10)), + laserturret(defense, WeaponBlocks.laserturret, stack(Item.steel, 10), stack(Item.titanium, 10)), + mortarturret(defense, WeaponBlocks.mortarturret, stack(Item.steel, 20), stack(Item.titanium, 15)), + teslaturret(defense, WeaponBlocks.teslaturret, stack(Item.steel, 10), stack(Item.titanium, 15), stack(Item.dirium, 15)), + plasmaturret(defense, WeaponBlocks.plasmaturret, stack(Item.steel, 10), stack(Item.titanium, 10), stack(Item.dirium, 15)), - healturret(defense, WeaponBlocks.repairturret, stack(Item.iron, 50)), - megahealturret(defense, WeaponBlocks.megarepairturret, stack(Item.iron, 30), stack(Item.steel, 50)), + healturret(defense, WeaponBlocks.repairturret, stack(Item.iron, 25)), + megahealturret(defense, WeaponBlocks.megarepairturret, stack(Item.iron, 15), stack(Item.steel, 25)), - drill(production, ProductionBlocks.stonedrill, stack(Item.stone, 6)), - irondrill(production, ProductionBlocks.irondrill, stack(Item.stone, 40)), - coaldrill(production, ProductionBlocks.coaldrill, stack(Item.stone, 40), stack(Item.iron, 40)), + drill(production, ProductionBlocks.stonedrill, stack(Item.stone, 16)), + irondrill(production, ProductionBlocks.irondrill, stack(Item.stone, 25)), + coaldrill(production, ProductionBlocks.coaldrill, stack(Item.stone, 25), stack(Item.iron, 40)), titaniumdrill(production, ProductionBlocks.titaniumdrill, stack(Item.iron, 40), stack(Item.steel, 40)), - smelter(production, ProductionBlocks.smelter, stack(Item.stone, 80), stack(Item.iron, 80)), - crucible(production, ProductionBlocks.crucible, stack(Item.titanium, 80), stack(Item.steel, 80)), - coalpurifier(production, ProductionBlocks.coalpurifier, stack(Item.steel, 20), stack(Item.iron, 20)), - titaniumpurifier(production, ProductionBlocks.titaniumpurifier, stack(Item.steel, 60), stack(Item.iron, 60)), - omnidrill(production, ProductionBlocks.omnidrill, stack(Item.titanium, 40), stack(Item.dirium, 40)), + smelter(production, ProductionBlocks.smelter, stack(Item.stone, 40), stack(Item.iron, 40)), + crucible(production, ProductionBlocks.crucible, stack(Item.titanium, 40), stack(Item.steel, 40)), + coalpurifier(production, ProductionBlocks.coalpurifier, stack(Item.steel, 10), stack(Item.iron, 10)), + titaniumpurifier(production, ProductionBlocks.titaniumpurifier, stack(Item.steel, 30), stack(Item.iron, 30)), + omnidrill(production, ProductionBlocks.omnidrill, stack(Item.titanium, 20), stack(Item.dirium, 20)), conduit(distribution, ProductionBlocks.conduit, stack(Item.steel, 1)), - liquidrouter(distribution, ProductionBlocks.liquidrouter, stack(Item.steel, 5)), - pump(production, ProductionBlocks.pump, stack(Item.steel, 20)); + liquidrouter(distribution, ProductionBlocks.liquidrouter, stack(Item.steel, 2)), + pump(production, ProductionBlocks.pump, stack(Item.steel, 10)); public Block result; public ItemStack[] requirements; diff --git a/core/src/io/anuke/mindustry/ui/LoadDialog.java b/core/src/io/anuke/mindustry/ui/LoadDialog.java index 1fb0039a62..39cf024f80 100644 --- a/core/src/io/anuke/mindustry/ui/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/LoadDialog.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.ui; +import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Timer; import com.badlogic.gdx.utils.Timer.Task; @@ -8,6 +9,7 @@ import io.anuke.mindustry.GameState.State; import io.anuke.mindustry.Vars; import io.anuke.mindustry.io.SaveIO; import io.anuke.ucore.scene.ui.Dialog; +import io.anuke.ucore.scene.ui.Label; import io.anuke.ucore.scene.ui.TextButton; import io.anuke.ucore.scene.ui.layout.Unit; @@ -39,7 +41,12 @@ public class LoadDialog extends Dialog{ button.getLabelCell().top().left().growX(); button.row(); button.pad(Unit.dp.inPixels(10)); - button.add("[gray]" + (!SaveIO.isSaveValid(i) ? "" : "Last Saved: " + SaveIO.getTimeString(i))).padBottom(2); + + Label info = new Label("[gray]" + (!SaveIO.isSaveValid(i) ? "" : "Wave " + + SaveIO.getWave(slot)+"\nLast Saved: " + SaveIO.getTimeString(i))); + info.setAlignment(Align.center, Align.center); + + button.add(info).padBottom(2).padTop(6); button.getLabel().setFontScale(Unit.dp.inPixels(0.75f)); button.setDisabled(!SaveIO.isSaveValid(i)); @@ -65,7 +72,7 @@ public class LoadDialog extends Dialog{ } }); - content().add(button).size(400, 78).units(Unit.dp).pad(2); + content().add(button).size(400, 80).units(Unit.dp).pad(2); content().row(); } diff --git a/core/src/io/anuke/mindustry/ui/SaveDialog.java b/core/src/io/anuke/mindustry/ui/SaveDialog.java index 89e555c3a4..60f96f5661 100644 --- a/core/src/io/anuke/mindustry/ui/SaveDialog.java +++ b/core/src/io/anuke/mindustry/ui/SaveDialog.java @@ -1,14 +1,13 @@ package io.anuke.mindustry.ui; +import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Timer; import com.badlogic.gdx.utils.Timer.Task; import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.io.SaveIO; -import io.anuke.ucore.scene.ui.ConfirmDialog; -import io.anuke.ucore.scene.ui.Dialog; -import io.anuke.ucore.scene.ui.TextButton; +import io.anuke.ucore.scene.ui.*; import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Unit; @@ -40,7 +39,12 @@ public class SaveDialog extends Dialog{ button.getLabelCell().top().left().growX(); button.row(); button.pad(Unit.dp.inPixels(10)); - button.add((!SaveIO.isSaveValid(i) ? "[gray]" : "[LIGHT_GRAY]Last Saved: " + SaveIO.getTimeString(i))).padBottom(2); + + Label info = new Label("[gray]" + (!SaveIO.isSaveValid(i) ? "" : "Wave " + + SaveIO.getWave(slot)+"\nLast Saved: " + SaveIO.getTimeString(i))); + info.setAlignment(Align.center, Align.center); + + button.add(info).padBottom(2).padTop(6); button.getLabel().setFontScale(Unit.dp.inPixels(0.75f)); button.clicked(()->{ @@ -57,7 +61,7 @@ public class SaveDialog extends Dialog{ } }); - content().add(button).size(400, 78).units(Unit.dp).pad(2); + content().add(button).size(400, 80).units(Unit.dp).pad(2); content().row(); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/Drill.java b/core/src/io/anuke/mindustry/world/blocks/types/Drill.java index 720401bebd..5649f8b1fa 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/Drill.java @@ -11,7 +11,7 @@ import io.anuke.ucore.util.Mathf; public class Drill extends Block{ protected Block resource; protected Item result; - protected int time = 6; + protected int time = 5; public Drill(String name) { super(name); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/RepairTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/RepairTurret.java index dd1f62064b..e972c25656 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/RepairTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/RepairTurret.java @@ -40,7 +40,9 @@ public class RepairTurret extends Turret{ @Override public void drawPixelOverlay(Tile tile){ - + Draw.color("green"); + Draw.dashcircle(tile.worldx(), tile.worldy(), range); + Draw.reset(); } @Override diff --git a/desktop/mindustry-saves/0.mins b/desktop/mindustry-saves/0.mins index 5e0bc3db65cc28becbd611802b2d13125308b729..4646b8f1e13663757ac19e098492831f69a8d721 100644 GIT binary patch literal 6955 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