diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 62475c5d6a..0214cb7001 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -459,6 +459,7 @@ setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = None setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = Training setting.difficulty.easy = Easy @@ -485,6 +486,8 @@ setting.mutesound.name = Mute Sound setting.crashreport.name = Send Anonymous Crash Reports setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit keybind.title = Rebind Keys keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 76c3e63043..324bc0acd9 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -1,29 +1,28 @@ package io.anuke.mindustry.core; import io.anuke.arc.*; -import io.anuke.arc.graphics.Color; +import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.scene.ui.Dialog; -import io.anuke.arc.scene.ui.TextField; +import io.anuke.arc.input.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.Unit; import io.anuke.arc.util.*; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.type.Player; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.EventType.*; -import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.input.*; -import io.anuke.mindustry.maps.Map; +import io.anuke.mindustry.maps.*; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.type.*; -import io.anuke.mindustry.ui.dialogs.FloatingDialog; -import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.ui.dialogs.*; +import io.anuke.mindustry.world.*; -import java.io.IOException; +import java.io.*; -import static io.anuke.arc.Core.batch; -import static io.anuke.arc.Core.scene; +import static io.anuke.arc.Core.*; import static io.anuke.mindustry.Vars.*; /** @@ -45,9 +44,9 @@ public class Control implements ApplicationListener{ saves = new Saves(); data = new GlobalData(); - Core.input.setCatch(KeyCode.BACK, true); + Unit.dp.product = settings.getInt("uiscale", 100) / 100f; - Effects.setShakeFalloff(10000f); + Core.input.setCatch(KeyCode.BACK, true); content.initialize(Content::init); Core.atlas = new TextureAtlas("sprites/sprites.atlas"); @@ -265,6 +264,37 @@ public class Control implements ApplicationListener{ dialog.show(); }); } + + if(Core.settings.getBool("uiscalechanged", false)){ + FloatingDialog dialog = new FloatingDialog("$confirm"); + + float[] countdown = {60 * 11}; + Runnable exit = () -> { + Core.settings.put("uiscale", 100); + Core.settings.put("uiscalechanged", false); + settings.save(); + dialog.hide(); + Core.app.exit(); + }; + + dialog.setFillParent(false); + dialog.cont.label(() -> { + if(countdown[0] <= 0){ + exit.run(); + } + return Core.bundle.format("uiscale.reset", (int)((countdown[0] -= Time.delta()) / 60f)); + }).pad(10f).expand().left(); + + dialog.buttons.defaults().size(200f, 60f); + dialog.buttons.addButton("$uiscale.cancel", exit); + + dialog.buttons.addButton("$ok", () -> { + Core.settings.put("uiscalechanged", false); + dialog.hide(); + }); + + Core.app.post(dialog::show); + } } @Override diff --git a/core/src/io/anuke/mindustry/entities/Effects.java b/core/src/io/anuke/mindustry/entities/Effects.java index 4a2f964b61..625d4b69e9 100644 --- a/core/src/io/anuke/mindustry/entities/Effects.java +++ b/core/src/io/anuke/mindustry/entities/Effects.java @@ -14,7 +14,7 @@ public class Effects{ private static final EffectContainer container = new EffectContainer(); private static Array effects = new Array<>(); private static ScreenshakeProvider shakeProvider; - private static float shakeFalloff = 1000f; + private static float shakeFalloff = 10000f; private static EffectProvider provider = (effect, color, x, y, rotation, data) -> { EffectEntity entity = Pools.obtain(EffectEntity.class, EffectEntity::new); entity.effect = effect; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index e3e42f842d..b9cbe1077d 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -184,6 +184,10 @@ public class SettingsMenuDialog extends SettingsDialog{ } }); + graphics.sliderPref("uiscale", 100, 25, 400, 25, s -> { + Core.settings.put("uiscalechanged", true); + return s + "%"; + }); graphics.sliderPref("fpscap", 241, 5, 241, 5, s -> (s > 240 ? Core.bundle.get("setting.fpscap.none") : Core.bundle.format("setting.fpscap.text", s))); graphics.sliderPref("chatopacity", 100, 0, 100, 5, s -> s + "%");