Improved Discord RPC, refactored Input and fixed net crash

This commit is contained in:
Anuken
2018-01-03 20:15:05 -05:00
parent 0063e32f6f
commit 169b9cddc5
29 changed files with 373 additions and 330 deletions

View File

@@ -1,40 +1,34 @@
package io.anuke.mindustry.ui.fragments;
import static io.anuke.mindustry.Vars.*;
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.utils.Align;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.Mindustry;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.core.GameState;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.resource.ItemStack;
import io.anuke.mindustry.resource.Recipe;
import io.anuke.mindustry.resource.Section;
import io.anuke.mindustry.ui.FloatingDialog;
import io.anuke.ucore.UCore;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Draw;
import io.anuke.ucore.graphics.Hue;
import io.anuke.ucore.scene.actions.Actions;
import io.anuke.ucore.scene.builders.button;
import io.anuke.ucore.scene.builders.imagebutton;
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.layout.Stack;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.scene.ui.layout.Value;
import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Strings;
import static io.anuke.mindustry.Vars.control;
import static io.anuke.mindustry.Vars.fontscale;
public class BlocksFragment implements Fragment{
private Table desctable, itemtable, blocks;
private Stack stack = new Stack();
@@ -42,6 +36,7 @@ public class BlocksFragment implements Fragment{
private boolean shown = true;
public void build(){
InputHandler input = control.getInput();
new table(){{
abottom();
@@ -52,12 +47,12 @@ public class BlocksFragment implements Fragment{
blocks = new table(){{
itemtable = new Table("button");
itemtable.setVisible(() -> player.recipe == null);
itemtable.setVisible(() -> input.recipe == null);
desctable = new Table("button");
desctable.setVisible(() -> player.recipe != null);
desctable.setVisible(() -> input.recipe != null);
desctable.update(() -> {
if(player.recipe == null && desctable.getChildren().size != 0){
if(input.recipe == null && desctable.getChildren().size != 0){
desctable.clear();
}
});
@@ -93,8 +88,8 @@ public class BlocksFragment implements Fragment{
ImageButton button = new ImageButton("icon-" + sec.name(), "toggle");
button.clicked(() -> {
if (!table.isVisible() && player.recipe != null) {
player.recipe = null;
if (!table.isVisible() && input.recipe != null) {
input.recipe = null;
}
});
button.setName("sectionbutton" + sec.name());
@@ -117,10 +112,10 @@ public class BlocksFragment implements Fragment{
ImageButton image = new ImageButton(region, "select");
image.clicked(() -> {
if (player.recipe == r) {
player.recipe = null;
if (input.recipe == r) {
input.recipe = null;
} else {
player.recipe = r;
input.recipe = r;
updateRecipe();
}
});
@@ -131,7 +126,7 @@ public class BlocksFragment implements Fragment{
image.update(() -> {
boolean canPlace = !control.getTutorial().active() || control.getTutorial().canPlace();
boolean has = (control.hasItems(r.requirements)) && canPlace;
image.setChecked(player.recipe == r);
image.setChecked(input.recipe == r);
image.setTouchable(canPlace ? Touchable.enabled : Touchable.disabled);
image.getImage().setColor(has ? Color.WHITE : Hue.lightness(0.33f));
});
@@ -174,7 +169,7 @@ public class BlocksFragment implements Fragment{
}
void updateRecipe(){
Recipe recipe = player.recipe;
Recipe recipe = Vars.control.getInput().recipe;
desctable.clear();
desctable.setTouchable(Touchable.enabled);

View File

@@ -1,161 +1,161 @@
package io.anuke.mindustry.ui.fragments;
import static io.anuke.mindustry.Vars.*;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.utils.Align;
import io.anuke.mindustry.core.GameState;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.input.PlaceMode;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.scene.actions.Actions;
import io.anuke.ucore.scene.builders.*;
import io.anuke.ucore.scene.builders.imagebutton;
import io.anuke.ucore.scene.builders.table;
import io.anuke.ucore.scene.event.Touchable;
import io.anuke.ucore.scene.ui.ButtonGroup;
import io.anuke.ucore.scene.ui.ImageButton;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.control;
public class PlacementFragment implements Fragment{
boolean shown = false;
Table breaktable, next;
public void build(){
if(android){
InputHandler input = control.getInput();
float s = 50f;
float s = 50f;
new table(){{
visible(() -> !GameState.is(State.menu));
abottom();
aleft();
ButtonGroup<ImageButton> placeGroup = new ButtonGroup<>();
ButtonGroup<ImageButton> breakGroup = new ButtonGroup<>();
update(t -> {
if(!input.placeMode.delete){
placeGroup.setMinCheckCount(1);
for(ImageButton button : placeGroup.getButtons()){
if(button.getName().equals(input.placeMode.name())){
button.setChecked(true);
break;
}
}
}else{
placeGroup.setMinCheckCount(0);
for(ImageButton button : placeGroup.getButtons())
button.setChecked(false);
}
if(input.placeMode.delete || input.breakMode.both){
PlaceMode mode = input.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(() -> !GameState.is(State.menu));
visible(() -> input.recipe != null);
touchable(Touchable.enabled);
aleft();
new table("pane"){{
margin(5f);
aleft();
defaults().size(s, s + 4).padBottom(-5.5f);
Color color = Color.GRAY;
new imagebutton("icon-cancel", 14*3, ()->{
input.recipe = null;
}).imageColor(color)
.visible(()->input.recipe != null);
for(PlaceMode mode : PlaceMode.values()){
if(!mode.shown || mode.delete) continue;
new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{
control.getInput().resetCursor();
input.placeMode = mode;
}).group(placeGroup).get().setName(mode.name());
}
new imagebutton("icon-arrow", 14*3, ()->{
input.rotation = Mathf.mod(input.rotation + 1, 4);
}).imageColor(color).visible(() -> input.recipe != null).update(image ->{
image.getImage().setRotation(input.rotation *90);
image.getImage().setOrigin(Align.center);
});
}}.padBottom(-5).left().end();
}}.left().end();
row();
new table(){{
abottom();
aleft();
ButtonGroup<ImageButton> placeGroup = new ButtonGroup<>();
ButtonGroup<ImageButton> breakGroup = new ButtonGroup<>();
height(s+5+4);
update(t -> {
next = new table("pane"){{
margin(5f);
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);
}
defaults().padBottom(-5.5f);
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 imagebutton("icon-arrow-right", 10 * 3, () -> {
toggle(!shown);
}).update(l -> l.getStyle().imageUp = Core.skin.getDrawable(shown ? "icon-arrow-left" : "icon-" + input.breakMode.name())).size(s, s+4);
new table(){{
visible(() -> player.recipe != null);
}}.end().get();
breaktable = new table("pane"){{
visible(() -> shown);
margin(5f);
marginLeft(0f);
touchable(Touchable.enabled);
aleft();
new table("pane"){{
margin(5f);
aleft();
defaults().size(s, s+4);
defaults().size(s, s + 4).padBottom(-5.5f);
for(PlaceMode mode : PlaceMode.values()){
if(!mode.shown || !mode.delete) continue;
Color color = Color.GRAY;
defaults().padBottom(-5.5f);
new imagebutton("icon-cancel", 14*3, ()->{
player.recipe = null;
}).imageColor(color)
.visible(()->player.recipe != null);
new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{
control.getInput().resetCursor();
input.breakMode = mode;
if(!mode.both) input.placeMode = mode;
}).group(breakGroup).get().setName(mode.name());
}
for(PlaceMode mode : PlaceMode.values()){
if(!mode.shown || mode.delete) continue;
}}.end().get();
new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{
control.getInput().resetCursor();
player.placeMode = mode;
}).group(placeGroup).get().setName(mode.name());
}
breaktable.getParent().swapActor(breaktable, next);
new imagebutton("icon-arrow", 14*3, ()->{
player.placerot = Mathf.mod(player.placerot + 1, 4);
}).imageColor(color).visible(() -> player.recipe != null).update(image ->{
image.getImage().setRotation(player.placerot *90);
image.getImage().setOrigin(Align.center);
});
breaktable.getTranslation().set(-breaktable.getPrefWidth(), 0);
}}.padBottom(-5).left().end();
}}.left().end();
}}.end().get();
row();
new table(){{
abottom();
aleft();
height(s+5+4);
next = new table("pane"){{
margin(5f);
defaults().padBottom(-5.5f);
new imagebutton("icon-arrow-right", 10 * 3, () -> {
toggle(!shown);
}).update(l -> l.getStyle().imageUp = Core.skin.getDrawable(shown ? "icon-arrow-left" : "icon-" + player.breakMode.name())).size(s, s+4);
}}.end().get();
breaktable = new table("pane"){{
visible(() -> shown);
margin(5f);
marginLeft(0f);
touchable(Touchable.enabled);
aleft();
defaults().size(s, s+4);
for(PlaceMode mode : PlaceMode.values()){
if(!mode.shown || !mode.delete) continue;
defaults().padBottom(-5.5f);
new imagebutton("icon-" + mode.name(), "toggle", 10*3, ()->{
control.getInput().resetCursor();
player.breakMode = mode;
if(!mode.both) player.placeMode = mode;
}).group(breakGroup).get().setName(mode.name());
}
}}.end().get();
breaktable.getParent().swapActor(breaktable, next);
breaktable.getTranslation().set(-breaktable.getPrefWidth(), 0);
}}.end().get();
}}.end();
}
}}.end();
}
private void toggle(boolean show){

View File

@@ -1,56 +1,58 @@
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.InputHandler;
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;
import static io.anuke.mindustry.Vars.*;
public class ToolFragment implements Fragment{
private Table tools;
public int px, py, px2, py2;
public boolean confirming;
public void build(){
InputHandler input = control.getInput();
float isize = 14*3;
tools = new Table();
tools.addIButton("icon-cancel", isize, () -> {
if(player.placeMode == PlaceMode.areaDelete && confirming){
if(input.placeMode == PlaceMode.areaDelete && confirming){
confirming = false;
}else{
player.recipe = null;
input.recipe = null;
}
});
tools.addIButton("icon-rotate", isize, () -> {
player.placerot++;
player.placerot %= 4;
input.rotation++;
input.rotation %= 4;
});
tools.addIButton("icon-check", isize, () -> {
if(player.placeMode == PlaceMode.areaDelete && confirming){
player.placeMode.released(px, py, px2, py2);
if(input.placeMode == PlaceMode.areaDelete && confirming){
input.placeMode.released(px, py, px2, py2);
confirming = false;
}else{
player.placeMode.tapped(control.getInput().getBlockX(), control.getInput().getBlockY());
input.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) || confirming)
!GameState.is(State.menu) && android && ((input.recipe != null && control.hasItems(input.recipe.requirements) &&
input.placeMode == PlaceMode.cursor) || confirming)
);
tools.update(() -> {
@@ -63,7 +65,7 @@ public class ToolFragment implements Fragment{
Gdx.graphics.getHeight() - control.getInput().getCursorY() - 15*Core.cameraScale, Align.top);
}
if(player.placeMode != PlaceMode.areaDelete){
if(input.placeMode != PlaceMode.areaDelete){
confirming = false;
}
});