From 6fe55661edb15f7447e1561967bb01d8d6fb7d70 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 9 Sep 2019 19:06:11 -0400 Subject: [PATCH] Bugfixes / Fixed #639 --- core/assets/bundles/bundle.properties | 3 +- core/src/io/anuke/mindustry/core/UI.java | 44 ++++++++++++------- core/src/io/anuke/mindustry/game/Version.java | 3 +- core/src/io/anuke/mindustry/ui/Styles.java | 7 +++ .../mindustry/ui/dialogs/DeployDialog.java | 2 +- .../mindustry/ui/dialogs/LoadoutDialog.java | 14 ++++++ 6 files changed, 53 insertions(+), 20 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 1b896a4d9c..f0b96d37f8 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -14,7 +14,7 @@ linkfail = Failed to open link!\nThe URL has been copied to your clipboard. screenshot = Screenshot saved to {0} screenshot.invalid = Map too large, potentially not enough memory for screenshot. gameover = Game Over -gameover.pvp = The[accent] {0}[] team is victorious! +gameover.pvp = The[accent] {0}[] team is victorious!f highscore = [accent]New highscore! load.sound = Sounds @@ -353,6 +353,7 @@ launch.skip.confirm = If you skip now, you will not be able to launch until late uncover = Uncover configure = Configure Loadout configure.locked = [lightgray]Unlock configuring loadout: Wave {0}. +configure.invalid = Amount must be a number between 0 and {0}. zone.unlocked = [lightgray]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 87c4c3d24a..cc30b3cbe9 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.core; import io.anuke.arc.*; import io.anuke.arc.Graphics.*; import io.anuke.arc.Graphics.Cursor.*; +import io.anuke.arc.Input.*; import io.anuke.arc.assets.*; import io.anuke.arc.assets.loaders.*; import io.anuke.arc.assets.loaders.resolvers.*; @@ -262,28 +263,37 @@ public class UI implements ApplicationListener, Loadable{ }); } - public void showTextInput(String titleText, String text, int textLength, String def, TextFieldFilter filter, Consumer confirmed){ - new Dialog(titleText){{ - cont.margin(30).add(text).padRight(6f); - TextField field = cont.addField(def, t -> { - }).size(170f, 50f).get(); - field.setFilter((f, c) -> field.getText().length() < textLength && filter.acceptChar(f, c)); - platform.addDialog(field); - buttons.defaults().size(120, 54).pad(4); - buttons.addButton("$ok", () -> { - confirmed.accept(field.getText()); - hide(); - }).disabled(b -> field.getText().isEmpty()); - buttons.addButton("$cancel", this::hide); - }}.show(); + public void showTextInput(String titleText, String dtext, int textLength, String def, boolean inumeric, Consumer confirmed){ + if(mobile){ + Core.input.getTextInput(new TextInput(){{ + this.title = (titleText.startsWith("$") ? Core.bundle.get(titleText.substring(1)) : titleText); + this.text = def; + this.numeric = inumeric; + this.maxLength = textLength; + this.accepted = confirmed; + }}); + }else{ + new Dialog(titleText){{ + cont.margin(30).add(dtext).padRight(6f); + TextFieldFilter filter = inumeric ? TextFieldFilter.digitsOnly : (f, c) -> true; + TextField field = cont.addField(def, t -> {}).size(170f, 50f).get(); + field.setFilter((f, c) -> field.getText().length() < textLength && filter.acceptChar(f, c)); + buttons.defaults().size(120, 54).pad(4); + buttons.addButton("$ok", () -> { + confirmed.accept(field.getText()); + hide(); + }).disabled(b -> field.getText().isEmpty()); + buttons.addButton("$cancel", this::hide); + }}.show(); + } } public void showTextInput(String title, String text, String def, Consumer confirmed){ - showTextInput(title, text, 12, def, (field, c) -> true, confirmed); + showTextInput(title, text, 24, def, confirmed); } - public void showTextInput(String title, String text, int textLength, String def, Consumer confirmed){ - showTextInput(title, text, textLength < 0 ? 12 : textLength, def, (field, c) -> true, confirmed); + public void showTextInput(String titleText, String text, int textLength, String def, Consumer confirmed){ + showTextInput(titleText, text, textLength, def, false, confirmed); } public void showInfoFade(String info){ diff --git a/core/src/io/anuke/mindustry/game/Version.java b/core/src/io/anuke/mindustry/game/Version.java index 5f94554f39..3cbd43f52b 100644 --- a/core/src/io/anuke/mindustry/game/Version.java +++ b/core/src/io/anuke/mindustry/game/Version.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.game; +import io.anuke.arc.*; import io.anuke.arc.Files.*; import io.anuke.arc.collection.*; import io.anuke.arc.files.*; @@ -26,7 +27,7 @@ public class Version{ if(!enabled) return; try{ - FileHandle file = new FileHandle("version.properties", FileType.Internal); + FileHandle file = OS.isAndroid || OS.isIos ? Core.files.internal("version.properties") : new FileHandle("version.properties", FileType.Internal); ObjectMap map = new ObjectMap<>(); PropertiesUtils.load(map, file.reader()); diff --git a/core/src/io/anuke/mindustry/ui/Styles.java b/core/src/io/anuke/mindustry/ui/Styles.java index ab69c50116..47731d0fe9 100644 --- a/core/src/io/anuke/mindustry/ui/Styles.java +++ b/core/src/io/anuke/mindustry/ui/Styles.java @@ -176,6 +176,11 @@ public class Styles{ up = none; over = flatOver; }}, + clearPartial2i = new ImageButtonStyle(){{ + down = whiteui; + up = pane; + over = flatDown; + }}, clearTogglei = new ImageButtonStyle(){{ down = flatDown; checked = flatDown; @@ -266,6 +271,7 @@ public class Styles{ messageFont = Fonts.def; messageFontColor = Color.gray; }}; + public static CheckBoxStyle defaultCheck = new CheckBoxStyle(){{ checkboxOn = checkOn; @@ -278,6 +284,7 @@ public class Styles{ fontColor = Color.white; disabledFontColor = Color.gray; }}; + public static DialogStyle defaultDialog = new DialogStyle(){{ stageBackground = black9; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java index d0f2692234..1ba3c9ca82 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java @@ -201,7 +201,7 @@ public class DeployDialog extends FloatingDialog{ stack.add(new Table(t -> t.margin(4f).add(new Image(node.zone.preview).setScaling(Scaling.stretch)).color(node.zone.unlocked() ? Color.darkGray : Color.fromGray(0.2f)).grow())); stack.update(() -> stack.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f, Align.center)); - Button button = new Button(Tex.buttonSquare); + Button button = new Button(Styles.squaret); buildButton(node.zone, button); stack.add(button); addChild(stack); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java index 28ba4702a0..ca5302f4f5 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java @@ -6,6 +6,7 @@ import io.anuke.arc.function.*; import io.anuke.arc.input.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.ui.*; @@ -99,11 +100,24 @@ public class LoadoutDialog extends FloatingDialog{ stack.amount = Math.max(stack.amount - step, 0); updater.run(); }).size(bsize); + items.addButton("+", Styles.clearPartialt, () -> { stack.amount = Math.min(stack.amount + step, capacity); updater.run(); }).size(bsize); + items.addImageButton(Icon.pencilSmaller, Styles.clearPartial2i, () -> ui.showTextInput("$configure", stack.item.localizedName, 10, stack.amount + "", true, str -> { + if(Strings.canParsePostiveInt(str)){ + int amount = Strings.parseInt(str); + if(amount >= 0 && amount <= capacity){ + stack.amount = amount; + updater.run(); + return; + } + } + ui.showInfo(Core.bundle.format("configure.invalid", capacity)); + })).size(bsize); + items.addImage(stack.item.icon(Item.Icon.medium)).size(8 * 3).padRight(4).padLeft(4); items.label(() -> stack.amount + "").left();