Initial UI cleanup commit

This commit is contained in:
Anuken
2018-01-04 20:41:58 -05:00
parent 356798d935
commit d6f3e2a31f
25 changed files with 425 additions and 515 deletions

View File

@@ -1,99 +0,0 @@
package io.anuke.mindustry.ui;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.Colors;
import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.Vars;
import io.anuke.ucore.UCore;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.function.Listenable;
import io.anuke.ucore.scene.builders.table;
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.util.Mathf;
public class MindustrySettingsDialog extends SettingsDialog{
public SettingsTable graphics;
public SettingsTable game;
public SettingsTable sound;
private Table prefs;
private Table menu;
private boolean built = false;
public MindustrySettingsDialog(){
setFillParent(true);
title().setAlignment(Align.center);
getTitleTable().row();
getTitleTable().add(new Image("white"))
.growX().height(3f).pad(4f).get().setColor(Colors.get("accent"));
content().clearChildren();
content().remove();
buttons().remove();
menu = new Table();
Consumer<SettingsTable> s = table -> {
table.row();
table.addImageTextButton("$text.back", "icon-arrow-left", 10*3, this::back).size(240f, 60f).colspan(2).padTop(15f);
};
game = new SettingsTable(s);
graphics = new SettingsTable(s);
sound = new SettingsTable(s);
prefs = new Table();
prefs.top();
prefs.margin(14f);
menu.defaults().size(300f, 60f).pad(3f);
menu.addButton("$text.settings.game", () -> visible(0));
menu.row();
menu.addButton("$text.settings.graphics", () -> visible(1));
menu.row();
menu.addButton("$text.settings.sound", () -> visible(2));
if(!Vars.android) {
menu.row();
menu.addButton("$text.settings.controls", () -> Vars.ui.showControls());
}
prefs.clearChildren();
prefs.add(menu);
ScrollPane pane = new ScrollPane(prefs, "clear");
pane.setFadeScrollBars(false);
row();
add(pane).grow().top();
row();
add(buttons()).fillX();
hidden(this::back);
}
private void back(){
prefs.clearChildren();
prefs.add(menu);
}
private void visible(int index){
prefs.clearChildren();
Table table = Mathf.select(index, game, graphics, sound);
prefs.add(table);
}
@Override
public void addCloseButton(){
buttons().addImageTextButton("$text.menu", "icon-arrow-left", 30f, this::hide).size(230f, 64f);
keyDown(key->{
if(key == Keys.ESCAPE || key == Keys.BACK)
hide();
});
}
}

View File

@@ -0,0 +1,17 @@
package io.anuke.mindustry.ui.dialogs;
import static io.anuke.mindustry.Vars.aboutText;
public class AboutDialog extends FloatingDialog {
public AboutDialog(){
super("$text.about");
addCloseButton();
for(String text : aboutText){
content().add(text).left();
content().row();
}
}
}

View File

@@ -0,0 +1,19 @@
package io.anuke.mindustry.ui.dialogs;
import io.anuke.mindustry.Mindustry;
import io.anuke.mindustry.Vars;
import io.anuke.ucore.scene.ui.Dialog;
public class DiscordDialog extends Dialog {
public DiscordDialog(){
super("Discord", "dialog");
content().margin(12f);
content().add("$text.discord");
content().row();
content().add("[orange]"+ Vars.discordURL);
buttons().defaults().size(200f, 50);
buttons().addButton("$text.openlink", () -> Mindustry.platforms.openLink(Vars.discordURL));
buttons().addButton("$text.back", this::hide);
}
}

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
@@ -17,7 +17,7 @@ import io.anuke.ucore.scene.ui.layout.Unit;
import java.util.Arrays;
public class FileChooser extends FloatingDialog{
public class FileChooser extends FloatingDialog {
private Table files;
private FileHandle homeDirectory = Gdx.files.absolute(Gdx.files.getExternalStoragePath());
private FileHandle directory = homeDirectory;

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.Colors;

View File

@@ -0,0 +1,18 @@
package io.anuke.mindustry.ui.dialogs;
public class HostDialog {
/*
showTextInput("$text.hostserver", "$text.server.port", Vars.port + "", new DigitsOnlyFilter(), text -> {
int result = Strings.parseInt(text);
if(result == Integer.MIN_VALUE || result >= 65535){
Vars.ui.showError("$text.server.invalidport");
}else{
try{
Net.host(result);
}catch (IOException e){
Vars.ui.showError(Bundles.format("text.server.error", Strings.parseException(e, false)));
}
}
});
*/
}

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.Mindustry;

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.graphics.g2d.TextureRegion;

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.Vars;

View File

@@ -1,10 +1,11 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.core.GameState;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.ui.PressGroup;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.scene.Element;
import io.anuke.ucore.scene.builders.build;

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.Colors;

View File

@@ -0,0 +1,158 @@
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.Colors;
import com.badlogic.gdx.utils.Align;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.core.GameState;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.net.Net;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Settings;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.ScrollPane;
import io.anuke.ucore.scene.ui.SettingsDialog;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.renderer;
public class MindustrySettingsDialog extends SettingsDialog{
public SettingsTable graphics;
public SettingsTable game;
public SettingsTable sound;
private Table prefs;
private Table menu;
private boolean built = false;
private boolean wasPaused;
public MindustrySettingsDialog(){
setStyle(Core.skin.get("dialog", WindowStyle.class));
hidden(()->{
if(!GameState.is(State.menu)){
if(!wasPaused || Net.active())
GameState.set(State.playing);
}
});
shown(()->{
if(!GameState.is(State.menu)){
wasPaused = GameState.is(State.paused);
if(menu.getScene() != null){
wasPaused = ((io.anuke.mindustry.ui.dialogs.MenuDialog)menu).wasPaused;
}
if(!Net.active()) GameState.set(State.paused);
//TODO hide menu
Vars.ui.menu.hide();
}
});
setFillParent(true);
title().setAlignment(Align.center);
getTitleTable().row();
getTitleTable().add(new Image("white"))
.growX().height(3f).pad(4f).get().setColor(Colors.get("accent"));
content().clearChildren();
content().remove();
buttons().remove();
menu = new Table();
Consumer<SettingsTable> s = table -> {
table.row();
table.addImageTextButton("$text.back", "icon-arrow-left", 10*3, this::back).size(240f, 60f).colspan(2).padTop(15f);
};
game = new SettingsTable(s);
graphics = new SettingsTable(s);
sound = new SettingsTable(s);
prefs = new Table();
prefs.top();
prefs.margin(14f);
menu.defaults().size(300f, 60f).pad(3f);
menu.addButton("$text.settings.game", () -> visible(0));
menu.row();
menu.addButton("$text.settings.graphics", () -> visible(1));
menu.row();
menu.addButton("$text.settings.sound", () -> visible(2));
if(!Vars.android) {
menu.row();
menu.addButton("$text.settings.controls", Vars.ui.keys::show);
}
prefs.clearChildren();
prefs.add(menu);
ScrollPane pane = new ScrollPane(prefs, "clear");
pane.setFadeScrollBars(false);
row();
add(pane).grow().top();
row();
add(buttons()).fillX();
hidden(this::back);
addSettings();
}
void addSettings(){
sound.volumePrefs();
game.sliderPref("difficulty", 1, 0, 2, i -> Bundles.get("setting.difficulty." + (i == 0 ? "easy" : i == 1 ? "normal" : "hard")));
game.screenshakePref();
game.checkPref("smoothcam", true);
game.checkPref("indicators", true);
game.checkPref("effects", true);
game.sliderPref("sensitivity", 100, 10, 300, i -> i + "%");
game.sliderPref("saveinterval", 90, 15, 5*120, i -> Bundles.format("setting.seconds", i));
graphics.checkPref("fps", false);
graphics.checkPref("vsync", true, b -> Gdx.graphics.setVSync(b));
graphics.checkPref("lasers", true);
graphics.checkPref("healthbars", true);
graphics.checkPref("pixelate", true, b->{
if(b){
Vars.renderer.pixelSurface.setScale(Core.cameraScale);
Vars.renderer.shadowSurface.setScale(Core.cameraScale);
Vars.renderer.shieldSurface.setScale(Core.cameraScale);
}else{
Vars.renderer.shadowSurface.setScale(1);
Vars.renderer.shieldSurface.setScale(1);
}
renderer.setPixelate(b);
});
Gdx.graphics.setVSync(Settings.getBool("vsync"));
}
private void back(){
prefs.clearChildren();
prefs.add(menu);
}
private void visible(int index){
prefs.clearChildren();
Table table = Mathf.select(index, game, graphics, sound);
prefs.add(table);
}
@Override
public void addCloseButton(){
buttons().addImageTextButton("$text.menu", "icon-arrow-left", 30f, this::hide).size(230f, 64f);
keyDown(key->{
if(key == Keys.ESCAPE || key == Keys.BACK)
hide();
});
}
}

View File

@@ -0,0 +1,31 @@
package io.anuke.mindustry.ui.dialogs;
import io.anuke.mindustry.core.GameState;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.ucore.scene.ui.Dialog;
import static io.anuke.mindustry.Vars.control;
public class RestartDialog extends Dialog {
public RestartDialog(){
super("$text.gameover", "dialog");
shown(()->{
content().clearChildren();
if(control.isHighScore()){
content().add("$text.highscore").pad(6);
content().row();
}
content().add("$text.lasted").pad(12).get();
content().add("[GREEN]" + control.getWave());
pack();
});
getButtonTable().addButton("$text.menu", ()-> {
hide();
GameState.set(State.menu);
control.reset();
});
}
}

View File

@@ -1,17 +1,11 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.io.SaveIO;
import io.anuke.mindustry.io.Saves;
import io.anuke.mindustry.io.Saves.SaveSlot;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.scene.builders.button;
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.layout.Cell;
import io.anuke.ucore.util.Bundles;
public class SaveDialog extends LoadDialog{

View File

@@ -1,4 +1,4 @@
package io.anuke.mindustry.ui;
package io.anuke.mindustry.ui.dialogs;
import static io.anuke.mindustry.Vars.*;

View File

@@ -0,0 +1,32 @@
package io.anuke.mindustry.ui.fragments;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Draw;
import io.anuke.ucore.scene.ui.layout.Unit;
public class BackgroundFragment implements Fragment {
@Override
public void build() {
Core.scene.table().addRect((a, b, w, h) -> {
Draw.color();
TextureRegion back = Draw.region("background");
float backscl = Unit.dp.scl(5f);
Draw.alpha(0.7f);
Core.batch.draw(back, w/2 - back.getRegionWidth()*backscl/2 +240f, h/2 - back.getRegionHeight()*backscl/2 + 250f,
back.getRegionWidth()*backscl, back.getRegionHeight()*backscl);
float logoscl = (int)Unit.dp.scl(7);
TextureRegion logo = Core.skin.getRegion("logotext");
float logow = logo.getRegionWidth()*logoscl;
float logoh = logo.getRegionHeight()*logoscl;
Draw.color();
Core.batch.draw(logo, w/2 - logow/2, h - logoh + 15, logow, logoh);
});
}
}

View File

@@ -0,0 +1,54 @@
package io.anuke.mindustry.ui.fragments;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Align;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.Blocks;
import io.anuke.mindustry.world.blocks.types.Configurable;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.scene.Element;
import io.anuke.ucore.scene.actions.Actions;
import io.anuke.ucore.scene.ui.layout.Table;
public class BlockConfigFragment implements Fragment {
private Table table;
private Tile configTile;
@Override
public void build() {
table = new Table();
Core.scene.add(table);
}
public void showConfig(Tile tile){
configTile = tile;
table.clear();
((Configurable)tile.block()).buildTable(tile, table);
table.pack();
table.setTransform(true);
table.actions(Actions.scaleTo(0f, 1f), Actions.visible(true),
Actions.scaleTo(1f, 1f, 0.07f, Interpolation.pow3Out));
table.update(()->{
table.setOrigin(Align.center);
Vector2 pos = Graphics.screen(tile.worldx(), tile.worldy());
table.setPosition(pos.x, pos.y, Align.center);
if(configTile == null || configTile.block() == Blocks.air){
hideConfig();
}
});
}
public boolean hasConfigMouse(){
Element e = Core.scene.hit(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY(), true);
return e != null && (e == table || e.isDescendantOf(table));
}
public void hideConfig(){
table.actions(Actions.scaleTo(0f, 1f, 0.06f, Interpolation.pow3Out), Actions.visible(false));
}
}

View File

@@ -13,7 +13,7 @@ import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.resource.ItemStack;
import io.anuke.mindustry.resource.Recipe;
import io.anuke.mindustry.resource.Section;
import io.anuke.mindustry.ui.FloatingDialog;
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import io.anuke.ucore.core.Draw;
import io.anuke.ucore.graphics.Hue;
import io.anuke.ucore.scene.actions.Actions;

View File

@@ -0,0 +1,45 @@
package io.anuke.mindustry.ui.fragments;
import com.badlogic.gdx.graphics.Colors;
import io.anuke.ucore.scene.builders.label;
import io.anuke.ucore.scene.builders.table;
import io.anuke.ucore.scene.event.Touchable;
import io.anuke.ucore.scene.ui.Label;
import io.anuke.ucore.scene.ui.layout.Table;
public class LoadingFragment implements Fragment {
private Table table;
@Override
public void build() {
table = new table("loadDim"){{
touchable(Touchable.enabled);
get().addImage("white").growX()
.height(3f).pad(4f).growX().get().setColor(Colors.get("accent"));
row();
new label("$text.loading"){{
get().setName("namelabel");
}}.pad(10);
row();
get().addImage("white").growX()
.height(3f).pad(4f).growX().get().setColor(Colors.get("accent"));
}}.end().get();
table.setVisible(false);
}
public void show(){
show("$text.loading");
}
public void show(String text){
table.<Label>find("namelabel").setText(text);
table.setVisible(true);
table.toFront();
}
public void hide(){
table.setVisible(false);
}
}