Added UI scale slider

This commit is contained in:
Anuken 2019-07-17 17:20:21 -04:00
parent 7b09548261
commit 029f801159
4 changed files with 54 additions and 17 deletions

View File

@ -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

View File

@ -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

View File

@ -14,7 +14,7 @@ public class Effects{
private static final EffectContainer container = new EffectContainer();
private static Array<Effect> 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;

View File

@ -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 + "%");