diff --git a/android/ic_launcher-web.png b/android/ic_launcher-web.png index ebd65987ee..c805c96ad3 100644 Binary files a/android/ic_launcher-web.png and b/android/ic_launcher-web.png differ diff --git a/android/res/drawable-hdpi/ic_launcher.png b/android/res/drawable-hdpi/ic_launcher.png index b6b1472561..209d92df9b 100644 Binary files a/android/res/drawable-hdpi/ic_launcher.png and b/android/res/drawable-hdpi/ic_launcher.png differ diff --git a/android/res/drawable-mdpi/ic_launcher.png b/android/res/drawable-mdpi/ic_launcher.png index 1ce160b9a7..d190773fd1 100644 Binary files a/android/res/drawable-mdpi/ic_launcher.png and b/android/res/drawable-mdpi/ic_launcher.png differ diff --git a/android/res/drawable-xhdpi/ic_launcher.png b/android/res/drawable-xhdpi/ic_launcher.png index 27109288a3..a5996e0b18 100644 Binary files a/android/res/drawable-xhdpi/ic_launcher.png and b/android/res/drawable-xhdpi/ic_launcher.png differ diff --git a/android/res/drawable-xxhdpi/ic_launcher.png b/android/res/drawable-xxhdpi/ic_launcher.png index 6dc9073e0f..1a175ead89 100644 Binary files a/android/res/drawable-xxhdpi/ic_launcher.png and b/android/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/core/src/io/anuke/mindustry/Control.java b/core/src/io/anuke/mindustry/Control.java index 671093f7d8..9a6c04b050 100644 --- a/core/src/io/anuke/mindustry/Control.java +++ b/core/src/io/anuke/mindustry/Control.java @@ -24,10 +24,10 @@ public class Control extends RendererModule{ public int rangex = 10, rangey = 10; public float targetzoom = 1f; private float targetx, targety; - //GifRecorder recoder = new GifRecorder(batch); + //GifRecorder recorder = new GifRecorder(batch); public Control(){ - cameraScale = 4; + cameraScale = baseCameraScale; pixelate(); Gdx.input.setCatchBackKey(true); @@ -142,7 +142,7 @@ public class Control extends RendererModule{ } if(core.block() == ProductionBlocks.core){ - smoothCamera(player.x, player.y, 0.3f); + smoothCamera(player.x, player.y, android ? 0.3f : 0.14f); }else{ smoothCamera(core.worldx(), core.worldy(), 0.4f); } @@ -151,7 +151,14 @@ public class Control extends RendererModule{ clampCamera(-tilesize / 2f, -tilesize / 2f, pixsize - tilesize / 2f, pixsize - tilesize / 2f); float lastx = camera.position.x, lasty = camera.position.y; - camera.position.set((int)camera.position.x, (int)camera.position.y, 0); + + if(android){ + camera.position.set((int)camera.position.x, (int)camera.position.y, 0); + + if(Gdx.graphics.getHeight()/cameraScale % 2 == 1){ + camera.position.add(0, -0.5f, 0); + } + } drawDefault(); @@ -162,7 +169,7 @@ public class Control extends RendererModule{ camera.position.set(lastx, lasty, 0); - //recoder.update(); + //recorder.update(); } if(!paused){ diff --git a/core/src/io/anuke/mindustry/UI.java b/core/src/io/anuke/mindustry/UI.java index d7b7dfd3bf..d4dc14d166 100644 --- a/core/src/io/anuke/mindustry/UI.java +++ b/core/src/io/anuke/mindustry/UI.java @@ -10,6 +10,8 @@ import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Timer; +import com.badlogic.gdx.utils.Timer.Task; import io.anuke.mindustry.entities.Weapon; import io.anuke.mindustry.input.AndroidInput; @@ -22,13 +24,13 @@ import io.anuke.ucore.function.VisibilityProvider; import io.anuke.ucore.graphics.Hue; import io.anuke.ucore.graphics.Textures; import io.anuke.ucore.modules.SceneModule; +import io.anuke.ucore.scene.Element; import io.anuke.ucore.scene.Scene; import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.builders.*; +import io.anuke.ucore.scene.event.InputEvent; import io.anuke.ucore.scene.ui.*; -import io.anuke.ucore.scene.ui.layout.Cell; -import io.anuke.ucore.scene.ui.layout.Stack; -import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.scene.ui.layout.*; import io.anuke.ucore.util.Timers; public class UI extends SceneModule{ @@ -36,6 +38,7 @@ public class UI extends SceneModule{ SettingsDialog prefs; KeybindDialog keys; Dialog about, menu, restart, tutorial, levels, upgrades; + Tooltip tooltip; VisibilityProvider play = () -> { return playing; @@ -60,6 +63,7 @@ public class UI extends SceneModule{ }); skin.font().setUseIntegerPositions(false); + skin.font().getData().setScale(Vars.fontscale); TooltipManager.getInstance().animations = false; Dialog.closePadR = -1; @@ -88,12 +92,12 @@ public class UI extends SceneModule{ Draw.color(); - Draw.tscl(1.5f); + Draw.tscl(Unit.dp.inPixels(1.5f)); - Draw.text("[#111111]-( Mindustry )-", w/2, h-16); - Draw.text("[#f1de60]-( Mindustry )-", w/2, h-10); + Draw.text("[#111111]-( Mindustry )-", w/2, h-Unit.dp.inPixels(16)); + Draw.text("[#f1de60]-( Mindustry )-", w/2, h-Unit.dp.inPixels(10)); - Draw.tscl(0.5f); + Draw.tscl(Unit.dp.inPixels(0.5f)); } @Override @@ -199,8 +203,8 @@ public class UI extends SceneModule{ Recipe.getBy(sec, recipes); ImageButton button = new ImageButton("icon-"+sec.name(), "toggle"); - add(button).fill().height(54).padTop(-10); - button.getImageCell().size(40).padBottom(4); + add(button).fill().height(54).padTop(-10).units(Unit.dp); + button.getImageCell().size(40).padBottom(4).units(Unit.dp); group.add(button); Table table = new Table(); @@ -216,8 +220,8 @@ public class UI extends SceneModule{ recipe = r; }); - table.add(image).size(size+8).pad(4); - image.getImageCell().size(size); + table.add(image).size(size+8).pad(4).units(Unit.dp); + image.getImageCell().size(size).units(Unit.dp); image.update(()->{ @@ -241,7 +245,7 @@ public class UI extends SceneModule{ String description = r.result.description(); tiptable.background("button"); - tiptable.add("[PURPLE]" + r.result.name(), 0.75f).left().padBottom(2f); + tiptable.add("[PURPLE]" + r.result.name(), 0.75f*fontscale*2f).left().padBottom(2f).units(Unit.dp); ItemStack[] req = r.requirements; for(ItemStack s : req){ @@ -249,19 +253,42 @@ public class UI extends SceneModule{ int amount = Math.min(items.get(s.item, 0), s.amount); tiptable.add( (amount >= s.amount ? "[YELLOW]" : "[RED]") - +s.item + ": " + amount + " / " +s.amount, 0.5f).left(); + +s.item + ": " + amount + " / " +s.amount, fontscale).left(); } tiptable.row(); - tiptable.add().size(10); + tiptable.add().size(10).units(Unit.px); tiptable.row(); tiptable.add("[ORANGE]" + description).left(); - tiptable.pad(10f); + tiptable.pad(Unit.dp.inPixels(10f)); }; run.listen(); - Tooltip tip = new Tooltip(tiptable, run); + Tooltip tip = new Tooltip(tiptable, run){ + public void enter (InputEvent event, float x, float y, int pointer, Element fromActor) { + if(tooltip != this) + hideTooltip(); + Element actor = event.getListenerActor(); + if (fromActor != null && fromActor.isDescendantOf(actor)) return; + setContainerPosition(actor, x, y); + manager.enter(this); + run.listen(); + + tooltip = this; + + if(android){ + + Timer.schedule(new Task(){ + @Override + public void run(){ + hide(); + } + }, 1.5f); + + } + } + }; tip.setInstant(true); @@ -326,26 +353,26 @@ public class UI extends SceneModule{ aright(); new table(){{ - get().background("button"); + get().background("button"); - new label("Wave 1"){{ - get().setFontScale(1f); - get().update(() -> { - get().setText("[YELLOW]Wave " + wave); - }); - }}.left(); + new label("Wave 1"){{ + get().setFontScale(fontscale*2f); + get().update(() -> { + get().setText("[YELLOW]Wave " + wave); + }); + }}.left(); - row(); + row(); - new label("Time"){{ - get().update(() -> { - get().setText(enemies > 0 ? - enemies + " Enemies remaining" : "New wave in " + (int) (wavetime / 60f)); - }); - }}.minWidth(150); + new label("Time"){{ + get().update(() -> { + get().setText(enemies > 0 ? + enemies + " Enemies remaining" : "New wave in " + (int) (wavetime / 60f)); + }); + }}.minWidth(150); - get().pad(12); - }}; + get().pad(Unit.dp.inPixels(12)); + }}; get().setVisible(play); }}.end(); @@ -356,23 +383,26 @@ public class UI extends SceneModule{ new table(){{ aleft(); abottom(); + int base = baseCameraScale; new button("+", ()->{ - if(control.cameraScale < 4){ - control.cameraScale = 4; + if(control.cameraScale < base){ + control.cameraScale = base; control.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + control.setCamera(player.x, player.y); Draw.getSurface("pixel").setScale(control.cameraScale); Draw.getSurface("shadow").setScale(control.cameraScale); } - }).size(40); + }).size(Unit.dp.inPixels(40)); new button("-", ()->{ - if(control.cameraScale > 3){ - control.cameraScale = 3; + if(control.cameraScale > base-zoomScale){ + control.cameraScale = base-zoomScale; control.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); + control.setCamera(player.x, player.y); Draw.getSurface("pixel").setScale(control.cameraScale); Draw.getSurface("shadow").setScale(control.cameraScale); } - }).size(40); + }).size(Unit.dp.inPixels(40)); get().setVisible(play); }}.end(); @@ -380,7 +410,7 @@ public class UI extends SceneModule{ //menu table new table(){{ - float w = 200; + float w = Unit.dp.inPixels(200); new table("button"){{ new button("Play", () -> { @@ -440,15 +470,15 @@ public class UI extends SceneModule{ }}.end(); tools = new Table(); - tools.addIButton("icon-cancel", 42, ()->{ + tools.addIButton("icon-cancel", Unit.dp.inPixels(42), ()->{ recipe = null; }); - tools.addIButton("icon-rotate", 42, ()->{ + tools.addIButton("icon-rotate", Unit.dp.inPixels(42), ()->{ rotation++; rotation %= 4; }); - tools.addIButton("icon-check", 42, ()->{ + tools.addIButton("icon-check", Unit.dp.inPixels(42), ()->{ AndroidInput.place(); }); @@ -460,7 +490,7 @@ public class UI extends SceneModule{ }); tools.update(()->{ - tools.setPosition(AndroidInput.mousex, Gdx.graphics.getHeight()-AndroidInput.mousey-60, Align.top); + tools.setPosition(AndroidInput.mousex, Gdx.graphics.getHeight()-AndroidInput.mousey-15*control.cameraScale, Align.top); }); updateItems(); @@ -523,6 +553,11 @@ public class UI extends SceneModule{ public void showRestart(){ restart.show(); } + + public void hideTooltip(){ + if(tooltip != null) + tooltip.hide(); + } public void updateItems(){ itemtable.clear(); @@ -530,8 +565,8 @@ public class UI extends SceneModule{ for(Item stack : items.keys()){ Image image = new Image(Draw.region("icon-" + stack.name())); Label label = new Label("" + items.get(stack)); - label.setFontScale(1f); - itemtable.add(image).size(32); + label.setFontScale(fontscale*2f); + itemtable.add(image).size(32).units(Unit.dp); itemtable.add(label); itemtable.row(); } diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 7f608907b7..e4577bed3c 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -13,6 +13,7 @@ import io.anuke.mindustry.entities.Weapon; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.scene.ui.layout.Unit; /**ick, global state*/ public class Vars{ @@ -23,6 +24,9 @@ public class Vars{ public static final float wavespace = 20*60*(android ? 2 : 1); public static final float enemyspawnspace = 65; public static boolean debug = false; + public static float fontscale = Unit.dp.inPixels(1f)/2f; + public static final int baseCameraScale = Math.round(Unit.dp.inPixels(4)); + public static final int zoomScale = Math.round(Unit.dp.inPixels(1)); public static final Vector2 vector = new Vector2(); diff --git a/core/src/io/anuke/mindustry/input/AndroidInput.java b/core/src/io/anuke/mindustry/input/AndroidInput.java index b24d88e24f..64f4ffa700 100644 --- a/core/src/io/anuke/mindustry/input/AndroidInput.java +++ b/core/src/io/anuke/mindustry/input/AndroidInput.java @@ -35,6 +35,7 @@ public class AndroidInput extends InputAdapter{ @Override public boolean touchDown (int screenX, int screenY, int pointer, int button) { + ui.hideTooltip(); if(pointer == 0){ lmousex = screenX; lmousey = screenY; @@ -118,4 +119,13 @@ public class AndroidInput extends InputAdapter{ breaktime = 0; } } + + public static int touches(){ + int sum = 0; + for(int i = 0; i < 10; i ++){ + if(Gdx.input.isTouched(i)) + sum ++; + } + return sum; + } } diff --git a/core/src/io/anuke/mindustry/ui/LevelDialog.java b/core/src/io/anuke/mindustry/ui/LevelDialog.java index 14993c0a88..a2a7b5aa2e 100644 --- a/core/src/io/anuke/mindustry/ui/LevelDialog.java +++ b/core/src/io/anuke/mindustry/ui/LevelDialog.java @@ -8,6 +8,7 @@ import io.anuke.mindustry.GameState; import io.anuke.mindustry.World; import io.anuke.ucore.core.Settings; import io.anuke.ucore.scene.ui.*; +import io.anuke.ucore.scene.ui.layout.Unit; public class LevelDialog extends Dialog{ Label[] scores = new Label[maps.length]; @@ -46,8 +47,8 @@ public class LevelDialog extends Dialog{ image.clicked(()->{ selectedMap = index; }); - image.getImageCell().size(164); - content().add(image).size(180); + image.getImageCell().size(Unit.dp.inPixels(164)); + content().add(image).size(Unit.dp.inPixels(180)); } content().row(); diff --git a/core/src/io/anuke/mindustry/ui/MenuDialog.java b/core/src/io/anuke/mindustry/ui/MenuDialog.java index 313d8e7d0d..2867873d33 100644 --- a/core/src/io/anuke/mindustry/ui/MenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/MenuDialog.java @@ -4,6 +4,7 @@ import static io.anuke.mindustry.Vars.*; import io.anuke.ucore.scene.ui.ConfirmDialog; import io.anuke.ucore.scene.ui.Dialog; +import io.anuke.ucore.scene.ui.layout.Unit; public class MenuDialog extends Dialog{ @@ -16,17 +17,17 @@ public class MenuDialog extends Dialog{ content().addButton("Back", ()->{ hide(); paused = false; - }).width(200); + }).width(200).units(Unit.dp); content().row(); content().addButton("Settings", ()->{ ui.showPrefs(); - }).width(200); + }).width(200).units(Unit.dp); content().row(); content().addButton("Controls", ()->{ ui.showControls(); - }).width(200); + }).width(200).units(Unit.dp); content().row(); content().addButton("Back to menu", ()->{ @@ -35,6 +36,6 @@ public class MenuDialog extends Dialog{ paused = false; playing = false; }).show(); - }).width(200); + }).width(200).units(Unit.dp); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/Drill.java b/core/src/io/anuke/mindustry/world/blocks/Drill.java index c3c89ddd0f..10e52532a8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/Drill.java @@ -4,6 +4,7 @@ import static io.anuke.mindustry.Vars.tilesize; import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.Vars; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -49,7 +50,7 @@ public class Drill extends Block{ Draw.text("Not on " + resource.name + " block!", tile.worldx(), tile.worldy() + tilesize); } - Draw.tscl(0.5f); + Draw.tscl(Vars.fontscale); } //@Override diff --git a/core/src/io/anuke/mindustry/world/blocks/Turret.java b/core/src/io/anuke/mindustry/world/blocks/Turret.java index 1fe61647da..1a1bdd8807 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/Turret.java @@ -4,6 +4,7 @@ import static io.anuke.mindustry.Vars.tilesize; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.MathUtils; +import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Block; @@ -60,7 +61,7 @@ public class Turret extends Block{ Draw.text("Ammo: " + entity.ammo, tile.worldx(), tile.worldy() - tilesize); } - Draw.tscl(0.5f); + Draw.tscl(Vars.fontscale); } @Override