Implemented full Android support

This commit is contained in:
Anuken
2017-06-29 14:23:31 -04:00
parent 547c2b9025
commit bca8271c07
13 changed files with 118 additions and 58 deletions

View File

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

View File

@@ -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();
}

View File

@@ -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();

View File

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

View File

@@ -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();

View File

@@ -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);
}
}

View File

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

View File

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