Implemented full Android support
This commit is contained in:
@@ -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){
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user