Added Mac and Windows32 support, better placing, bundle crashfixes

This commit is contained in:
Anuken
2017-12-28 15:26:11 -05:00
parent b25c611c33
commit 6774ea67ce
14 changed files with 200 additions and 44 deletions

View File

@@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.Align;
import io.anuke.mindustry.core.GameState;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.input.PlaceMode;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.scene.actions.Actions;
import io.anuke.ucore.scene.builders.*;
@@ -18,13 +19,14 @@ import io.anuke.ucore.scene.ui.ImageButton;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Mathf;
import javax.xml.soap.Text;
public class PlacementFragment implements Fragment{
boolean shown = false;
Table breaktable, next;
public void build(){
if(android){
//placement table
float s = 50f;
@@ -34,15 +36,46 @@ public class PlacementFragment implements Fragment{
abottom();
aleft();
ButtonGroup<ImageButton> group = new ButtonGroup<>();
ButtonGroup<ImageButton> placeGroup = new ButtonGroup<>();
ButtonGroup<ImageButton> breakGroup = new ButtonGroup<>();
update(t -> {
if(!player.placeMode.delete){
placeGroup.setMinCheckCount(1);
for(ImageButton button : placeGroup.getButtons()){
if(button.getName().equals(player.placeMode.name())){
button.setChecked(true);
break;
}
}
}else{
placeGroup.setMinCheckCount(0);
for(ImageButton button : placeGroup.getButtons())
button.setChecked(false);
}
if(player.placeMode.delete || player.breakMode.both){
PlaceMode mode = player.breakMode;
breakGroup.setMinCheckCount(1);
for(ImageButton button : breakGroup.getButtons()){
if(button.getName().equals(mode.name())){
button.setChecked(true);
break;
}
}
}else{
breakGroup.setMinCheckCount(0);
for(ImageButton button : breakGroup.getButtons())
button.setChecked(false);
}
});
new table(){{
visible(() -> player.recipe != null);
touchable(Touchable.enabled);
aleft();
new label("$text.placemode");
row();
new table("pane"){{
margin(5f);
@@ -63,7 +96,7 @@ public class PlacementFragment implements Fragment{
new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{
control.getInput().resetCursor();
player.placeMode = mode;
}).group(group);
}).group(placeGroup).get().setName(mode.name());
}
new imagebutton("icon-arrow", 14*3, ()->{
@@ -90,19 +123,8 @@ public class PlacementFragment implements Fragment{
defaults().padBottom(-5.5f);
new imagebutton("icon-arrow-right", 10 * 3, () -> {
float dur = 0.3f;
Interpolation in = Interpolation.pow3Out;
if(breaktable.getActions().size != 0) return;
breaktable.getParent().swapActor(breaktable, next);
if(shown){
breaktable.actions(Actions.translateBy(-breaktable.getWidth() - 5, 0, dur, in), Actions.call(() -> shown = false));
}else{
shown = true;
breaktable.actions(Actions.translateBy(-breaktable.getTranslation().x - 5, 0, dur, in));
}
}).size(s, s+4);
toggle(!shown);
}).update(l -> l.getStyle().imageUp = Core.skin.getDrawable(shown ? "icon-arrow-left" : "icon-" + player.breakMode.name())).size(s, s+4);
}}.end().get();
@@ -123,8 +145,8 @@ public class PlacementFragment implements Fragment{
new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{
control.getInput().resetCursor();
player.breakMode = mode;
player.placeMode = mode;
}).group(group);
if(!mode.both) player.placeMode = mode;
}).group(breakGroup).get().setName(mode.name());
}
}}.end().get();
@@ -135,9 +157,23 @@ public class PlacementFragment implements Fragment{
}}.end().get();
//one.getParent().swapActor(one, two);
}}.end();
}
}
private void toggle(boolean show){
float dur = 0.3f;
Interpolation in = Interpolation.pow3Out;
if(breaktable.getActions().size != 0 || shown == show) return;
breaktable.getParent().swapActor(breaktable, next);
if(!show){
breaktable.actions(Actions.translateBy(-breaktable.getWidth() - 5, 0, dur, in), Actions.call(() -> shown = false));
}else{
shown = true;
breaktable.actions(Actions.translateBy(-breaktable.getTranslation().x - 5, 0, dur, in));
}
}
}

View File

@@ -3,44 +3,69 @@ package io.anuke.mindustry.ui.fragments;
import static io.anuke.mindustry.Vars.*;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Vector2;
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.input.PlaceMode;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.scene.ui.layout.Table;
public class ToolFragment implements Fragment{
private Table tools;
public int px, py, px2, py2;
public boolean confirming;
public void build(){
float isize = 14*3;
tools = new Table();
tools.addIButton("icon-cancel", isize, ()->{
player.recipe = null;
tools.addIButton("icon-cancel", isize, () -> {
if(player.placeMode == PlaceMode.areaDelete && confirming){
confirming = false;
}else{
player.recipe = null;
}
});
tools.addIButton("icon-rotate", isize, ()->{
tools.addIButton("icon-rotate", isize, () -> {
player.rotation ++;
player.rotation %= 4;
});
tools.addIButton("icon-check", isize, ()->{
player.placeMode.tapped(control.getInput().getBlockX(), control.getInput().getBlockY());
tools.addIButton("icon-check", isize, () -> {
if(player.placeMode == PlaceMode.areaDelete && confirming){
player.placeMode.released(px, py, px2, py2);
confirming = false;
}else{
player.placeMode.tapped(control.getInput().getBlockX(), control.getInput().getBlockY());
}
});
Core.scene.add(tools);
tools.setVisible(()->
!GameState.is(State.menu) && android && player.recipe != null && control.hasItems(player.recipe.requirements) &&
player.placeMode == PlaceMode.cursor
tools.setVisible(() ->
!GameState.is(State.menu) && android && ((player.recipe != null && control.hasItems(player.recipe.requirements) &&
player.placeMode == PlaceMode.cursor) || confirming)
);
tools.update(()->{
tools.setPosition(control.getInput().getCursorX(), Gdx.graphics.getHeight() - control.getInput().getCursorY() - 15*Core.cameraScale, Align.top);
tools.update(() -> {
if(confirming){
Vector2 v = Graphics.screen((px + px2)/2f * Vars.tilesize, Math.min(py, py2) * Vars.tilesize - Vars.tilesize*1.5f);
tools.setPosition(v.x, v.y, Align.top);
}else{
tools.setPosition(control.getInput().getCursorX(),
Gdx.graphics.getHeight() - control.getInput().getCursorY() - 15*Core.cameraScale, Align.top);
}
if(player.placeMode != PlaceMode.areaDelete){
confirming = false;
}
});
}
}