From d6f3e2a31f80886791e009c68567b4234f4ef63b Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 4 Jan 2018 20:41:58 -0500 Subject: [PATCH 1/5] Initial UI cleanup commit --- core/src/io/anuke/mindustry/core/UI.java | 425 ++---------------- .../mindustry/mapeditor/MapEditorDialog.java | 5 +- .../mapeditor/MapGenerateDialog.java | 2 +- .../mindustry/mapeditor/MapLoadDialog.java | 2 +- .../mindustry/mapeditor/MapResizeDialog.java | 2 +- .../mindustry/mapeditor/MapSaveDialog.java | 2 +- .../mindustry/ui/MindustrySettingsDialog.java | 99 ---- .../mindustry/ui/dialogs/AboutDialog.java | 17 + .../mindustry/ui/dialogs/DiscordDialog.java | 19 + .../ui/{ => dialogs}/FileChooser.java | 4 +- .../ui/{ => dialogs}/FloatingDialog.java | 2 +- .../mindustry/ui/dialogs/HostDialog.java | 18 + .../ui/{ => dialogs}/JoinDialog.java | 2 +- .../ui/{ => dialogs}/LevelDialog.java | 2 +- .../ui/{ => dialogs}/LoadDialog.java | 2 +- .../ui/{ => dialogs}/MenuDialog.java | 3 +- .../{ => dialogs}/MindustryKeybindDialog.java | 2 +- .../ui/dialogs/MindustrySettingsDialog.java | 158 +++++++ .../mindustry/ui/dialogs/RestartDialog.java | 31 ++ .../ui/{ => dialogs}/SaveDialog.java | 8 +- .../ui/{ => dialogs}/UpgradeDialog.java | 2 +- .../ui/fragments/BackgroundFragment.java | 32 ++ .../ui/fragments/BlockConfigFragment.java | 54 +++ .../ui/fragments/BlocksFragment.java | 2 +- .../ui/fragments/LoadingFragment.java | 45 ++ 25 files changed, 425 insertions(+), 515 deletions(-) delete mode 100644 core/src/io/anuke/mindustry/ui/MindustrySettingsDialog.java create mode 100644 core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java create mode 100644 core/src/io/anuke/mindustry/ui/dialogs/DiscordDialog.java rename core/src/io/anuke/mindustry/ui/{ => dialogs}/FileChooser.java (98%) rename core/src/io/anuke/mindustry/ui/{ => dialogs}/FloatingDialog.java (95%) create mode 100644 core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java rename core/src/io/anuke/mindustry/ui/{ => dialogs}/JoinDialog.java (99%) rename core/src/io/anuke/mindustry/ui/{ => dialogs}/LevelDialog.java (98%) rename core/src/io/anuke/mindustry/ui/{ => dialogs}/LoadDialog.java (99%) rename core/src/io/anuke/mindustry/ui/{ => dialogs}/MenuDialog.java (97%) rename core/src/io/anuke/mindustry/ui/{ => dialogs}/MindustryKeybindDialog.java (95%) create mode 100644 core/src/io/anuke/mindustry/ui/dialogs/MindustrySettingsDialog.java create mode 100644 core/src/io/anuke/mindustry/ui/dialogs/RestartDialog.java rename core/src/io/anuke/mindustry/ui/{ => dialogs}/SaveDialog.java (84%) rename core/src/io/anuke/mindustry/ui/{ => dialogs}/UpgradeDialog.java (98%) create mode 100644 core/src/io/anuke/mindustry/ui/fragments/BackgroundFragment.java create mode 100644 core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java create mode 100644 core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 615757549c..e6d8fe886a 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -3,65 +3,40 @@ package io.anuke.mindustry.core; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Colors; -import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Interpolation; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.Vars; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.mapeditor.MapEditor; import io.anuke.mindustry.mapeditor.MapEditorDialog; -import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.ui.dialogs.*; import io.anuke.mindustry.ui.fragments.*; -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.*; import io.anuke.ucore.function.Consumer; import io.anuke.ucore.function.Listenable; import io.anuke.ucore.modules.SceneModule; -import io.anuke.ucore.scene.Element; import io.anuke.ucore.scene.Skin; -import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.builders.build; -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.*; +import io.anuke.ucore.scene.ui.Dialog; +import io.anuke.ucore.scene.ui.TextField; import io.anuke.ucore.scene.ui.TextField.TextFieldFilter; -import io.anuke.ucore.scene.ui.TextField.TextFieldFilter.DigitsOnlyFilter; -import io.anuke.ucore.scene.ui.Window.WindowStyle; -import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.scene.ui.TooltipManager; import io.anuke.ucore.scene.ui.layout.Unit; -import io.anuke.ucore.util.Bundles; -import io.anuke.ucore.util.Strings; -import java.io.IOException; - -import static io.anuke.mindustry.Vars.*; +import static io.anuke.mindustry.Vars.control; import static io.anuke.ucore.scene.actions.Actions.*; public class UI extends SceneModule{ - Table loadingtable, configtable; - MindustrySettingsDialog prefs; - MindustryKeybindDialog keys; - MapEditorDialog editorDialog; - Dialog about, restart, levels, upgrades, load, settingserror, gameerror, discord, join; - MenuDialog menu; - Tooltip tooltip; - Tile configTile; - MapEditor editor; - boolean wasPaused = false; - - private Fragment menufrag = new MenuFragment(), - toolfrag = new ToolFragment(), - hudfrag = new HudFragment(), - placefrag = new PlacementFragment(), - weaponfrag = new WeaponFragment(), - chatfrag = new ChatFragment(), - listfrag = new PlayerListFragment(); + public Dialog about, restart, levels, upgrades, load, discord, join, menu, prefs, keys, editor; + + public final MenuFragment menufrag = new MenuFragment(); + public final ToolFragment toolfrag = new ToolFragment(); + public final HudFragment hudfrag = new HudFragment(); + public final PlacementFragment placefrag = new PlacementFragment(); + public final WeaponFragment weaponfrag = new WeaponFragment(); + public final ChatFragment chatfrag = new ChatFragment(); + public final PlayerListFragment listfrag = new PlayerListFragment(); + public final BackgroundFragment backfrag = new BackgroundFragment(); + public final LoadingFragment loadfrag = new LoadingFragment(); public UI() { Dialog.setShowAction(()-> sequence( @@ -89,7 +64,7 @@ public class UI extends SceneModule{ TooltipManager.getInstance().animations = false; - Settings.setErrorHandler(()-> Timers.run(1f, ()-> settingserror.show())); + Settings.setErrorHandler(()-> Timers.run(1f, ()-> showError("[crimson]Failed to access local storage.\nSettings will not be saved."))); Settings.defaults("pixelate", true); @@ -114,261 +89,66 @@ public class UI extends SceneModule{ Colors.put("breakStart", Color.YELLOW); Colors.put("breakInvalid", Color.RED); } - + + @Override protected void loadSkin(){ skin = new Skin(Gdx.files.internal("ui/uiskin.json"), Core.atlas); } - - void drawBackground(){ - int w = (int)screen.x; - int h = (int)screen.y; - - 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 = 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); - - } @Override public void update(){ if(Vars.debug && !Vars.showUI) return; - if(GameState.is(State.menu)){ - scene.getBatch().getProjectionMatrix().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); - scene.getBatch().begin(); - - drawBackground(); - - scene.getBatch().end(); - } - scene.act(); scene.draw(); if(control.showCursor()) { Draw.color(); + float scl = Unit.dp.scl(3f); - scene.getBatch().begin(); - Draw.rect("controller-cursor", Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY(), 16*scl, 16*scl); - scene.getBatch().end(); + + Graphics.begin(); + Draw.rect("controller-cursor", Graphics.mouse().x, Graphics.mouse().y, 16*scl, 16*scl); + Graphics.end(); } } @Override public void init(){ - - configtable = new Table(); - scene.add(configtable); if(!Vars.gwt){ - editor = new MapEditor(); - editorDialog = new MapEditorDialog(editor); + editor = new MapEditorDialog(); } - - settingserror = new Dialog("Warning", "dialog"); - settingserror.content().add("[crimson]Failed to access local storage.\nSettings will not be saved."); - settingserror.content().margin(10f); - settingserror.getButtonTable().addButton("OK", settingserror::hide).size(80f, 55f).pad(4); - - gameerror = new Dialog("$text.error.crashtitle", "dialog"); - gameerror.content().labelWrap("$text.error.crashmessage").width(600f).pad(10f); - gameerror.buttons().addButton("#text.ok", gameerror::hide).size(200f, 50); + restart = new RestartDialog(); join = new JoinDialog(); - - discord = new Dialog("Discord", "dialog"); - discord.content().margin(12f); - discord.content().add("$text.discord"); - discord.content().row(); - discord.content().add("[orange]"+Vars.discordURL); - discord.buttons().defaults().size(200f, 50); - discord.buttons().addButton("$text.openlink", () -> Mindustry.platforms.openLink(Vars.discordURL)); - discord.buttons().addButton("$text.back", discord::hide); - + discord = new DiscordDialog(); load = new LoadDialog(); - upgrades = new UpgradeDialog(); - levels = new LevelDialog(); - prefs = new MindustrySettingsDialog(); - prefs.setStyle(Core.skin.get("dialog", WindowStyle.class)); - menu = new MenuDialog(); - - prefs.sound.volumePrefs(); - - prefs.game.sliderPref("difficulty", 1, 0, 2, i -> Bundles.get("setting.difficulty." + (i == 0 ? "easy" : i == 1 ? "normal" : "hard"))); - prefs.game.screenshakePref(); - prefs.game.checkPref("smoothcam", true); - prefs.game.checkPref("indicators", true); - prefs.game.checkPref("effects", true); - prefs.game.sliderPref("sensitivity", 100, 10, 300, i -> i + "%"); - prefs.game.sliderPref("saveinterval", 90, 15, 5*120, i -> Bundles.format("setting.seconds", i)); - - prefs.graphics.checkPref("fps", false); - prefs.graphics.checkPref("vsync", true, b -> Gdx.graphics.setVSync(b)); - prefs.graphics.checkPref("lasers", true); - prefs.graphics.checkPref("healthbars", true); - prefs.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")); - - prefs.hidden(()->{ - if(!GameState.is(State.menu)){ - if(!wasPaused || Net.active()) - GameState.set(State.playing); - } - }); - - prefs.shown(()->{ - if(!GameState.is(State.menu)){ - wasPaused = GameState.is(State.paused); - if(menu.getScene() != null){ - wasPaused = menu.wasPaused; - } - if(!Net.active()) GameState.set(State.paused); - menu.hide(); - } - }); - keys = new MindustryKeybindDialog(); - - about = new FloatingDialog("About"); - about.addCloseButton(); - for(String text : aboutText){ - about.content().add(text).left(); - about.content().row(); - } - - restart = new Dialog("$text.gameover", "dialog"); - - restart.shown(()->{ - restart.content().clearChildren(); - if(control.isHighScore()){ - restart.content().add("$text.highscore").pad(6); - restart.content().row(); - } - restart.content().add("$text.lasted").pad(12).get(); - restart.content().add("[GREEN]" + control.getWave()); - restart.pack(); - }); - - restart.getButtonTable().addButton("$text.menu", ()->{ - restart.hide(); - GameState.set(State.menu); - control.reset(); - }).size(200, 50).pad(3); + about = new AboutDialog(); build.begin(scene); - + + backfrag.build(); weaponfrag.build(); - hudfrag.build(); - menufrag.build(); - placefrag.build(); - - loadingtable = 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(); - - loadingtable.setVisible(false); - toolfrag.build(); - chatfrag.build(); - listfrag.build(); - - updateItems(); + loadfrag.build(); build.end(); } - public void addChatMessage(String sender, String message){ - ((ChatFragment)chatfrag).addMessage(message, sender); - } - - public void showGameError(){ - gameerror.show(); - } - - public void updateWeapons(){ - ((WeaponFragment)weaponfrag).updateWeapons(); - } - - public void fadeRespawn(boolean in){ - ((HudFragment)hudfrag).fadeRespawn(in); - } - - public void showConfig(Tile tile){ - configTile = tile; - - configtable.clear(); - ((Configurable)tile.block()).buildTable(tile, configtable); - configtable.pack(); - configtable.setTransform(true); - configtable.actions(Actions.scaleTo(0f, 1f), Actions.visible(true), - Actions.scaleTo(1f, 1f, 0.07f, Interpolation.pow3Out)); - - configtable.update(()->{ - configtable.setOrigin(Align.center); - Vector2 pos = Graphics.screen(tile.worldx(), tile.worldy()); - configtable.setPosition(pos.x, pos.y, Align.center); - if(configTile == null || configTile.block() == Blocks.air){ - hideConfig(); - } - }); - } - - public boolean hasConfigMouse(){ - Element e = scene.hit(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY(), true); - return e != null && (e == configtable || e.isDescendantOf(configtable)); - } - - public void hideConfig(){ - configtable.actions(Actions.scaleTo(0f, 1f, 0.06f, Interpolation.pow3Out), Actions.visible(false)); - } - public void showTextInput(String title, String text, String def, TextFieldFilter filter, Consumer confirmed){ new Dialog(title, "dialog"){{ - content().margin(30); - content().add(text).padRight(6f); + content().margin(30).add(text).padRight(6f); TextField field = content().addField(def, t->{}).size(170f, 50f).get(); field.setTextFieldFilter((f, c) -> field.getText().length() < 12 && filter.acceptChar(f, c)); Mindustry.platforms.addDialog(field); @@ -387,150 +167,11 @@ public class UI extends SceneModule{ public void showError(String text){ new Dialog("$text.error.title", "dialog"){{ - content().margin(15); - content().add(text); + content().margin(15).add(text); buttons().addButton("$text.ok", this::hide).size(90, 50).pad(4); }}.show(); } - public void showErrorClose(String text){ - new Dialog("$text.error.title", "dialog"){{ - content().margin(15); - content().add(text); - buttons().addButton("$text.quit", Gdx.app::exit).size(90, 50).pad(4); - }}.show(); - } - - public void showLoading(){ - showLoading("$text.loading"); - } - - public void showLoading(String text){ - loadingtable.