Added better block debugging

This commit is contained in:
Anuken 2018-02-19 14:31:35 -05:00
parent 03079e9611
commit edc124c90d
9 changed files with 111 additions and 11 deletions

View file

@ -24,7 +24,7 @@ allprojects {
appName = 'Mindustry'
gdxVersion = '1.9.8'
aiVersion = '1.8.1'
uCoreVersion = '4c049ea'
uCoreVersion = 'd66ebb6'
getVersionString = {
String buildVersion = getBuildVersion()

View file

@ -1,7 +1,7 @@
#Autogenerated file. Do not modify.
#Mon Feb 19 12:47:29 EST 2018
#Mon Feb 19 14:31:15 EST 2018
version=beta
androidBuildCode=243
androidBuildCode=245
name=Mindustry
code=3.3
build=custom build

View file

@ -74,6 +74,8 @@ public class Vars{
public static boolean showPlayer = true;
//whether to hide ui, only on debug
public static boolean showUI = true;
//whether to show block debug
public static boolean showBlockDebug = false;
public static boolean headless = false;

View file

@ -30,10 +30,7 @@ import io.anuke.ucore.core.*;
import io.anuke.ucore.entities.EffectEntity;
import io.anuke.ucore.entities.Entities;
import io.anuke.ucore.function.Callable;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Hue;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.graphics.Surface;
import io.anuke.ucore.graphics.*;
import io.anuke.ucore.modules.RendererModule;
import io.anuke.ucore.scene.ui.layout.Unit;
import io.anuke.ucore.util.Angles;
@ -439,6 +436,31 @@ public class Renderer extends RendererModule{
if(tile.isLinked())
target = tile.getLinked();
if(showBlockDebug && target.entity != null){
Draw.color(Color.RED);
Lines.crect(target.drawx(), target.drawy(), target.block().width * tilesize, target.block().height * tilesize);
Vector2 v = new Vector2();
Draw.tcolor(Color.YELLOW);
Draw.tscl(0.25f);
Array<Object> arr = target.block().getDebugInfo(target);
StringBuilder result = new StringBuilder();
for(int i = 0; i < arr.size/2; i ++){
result.append(arr.get(i*2));
result.append(": ");
result.append(arr.get(i*2 + 1));
result.append("\n");
}
Draw.textc(result.toString(), target.drawx(), target.drawy(), v);
Draw.color(0f, 0f, 0f, 0.5f);
Fill.rect(target.drawx(), target.drawy(), v.x, v.y);
Draw.textc(result.toString(), target.drawx(), target.drawy(), v);
Draw.tscl(fontscale);
Draw.reset();
}
if(Inputs.keyDown("block_info") && target.block().fullDescription != null){
Draw.color(Colors.get("accent"));
Lines.crect(target.drawx(), target.drawy(), target.block().width * tilesize, target.block().height * tilesize);

View file

@ -51,6 +51,8 @@ public class DebugFragment implements Fragment {
row();
new button("hideplayer", "toggle", () -> showPlayer = !showPlayer);
row();
new button("blocks", "toggle", () -> showBlockDebug = !showBlockDebug);
row();
new button("paths", "toggle", () -> showPaths = !showPaths);
row();
new button("infammo", "toggle", () -> infiniteAmmo = !infiniteAmmo);

View file

@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.graphics.Fx;
@ -20,9 +21,7 @@ import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Vars.syncBlockState;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Vars.*;
public class Block{
private static int lastid;
@ -301,6 +300,20 @@ public class Block{
return blocks.get(id);
}
public Array<Object> getDebugInfo(Tile tile){
return Array.with(
"block", tile.block().name,
"floor", tile.floor().name,
"x", tile.x,
"y", tile.y,
"entity.name", ClassReflection.getSimpleName(tile.entity.getClass()),
"entity.x", tile.entity.x,
"entity.y", tile.entity.y,
"entity.id", tile.entity.id,
"entity.items.total", tile.entity.totalItems()
);
}
@Override
public String toString(){
return name;

View file

@ -2,6 +2,7 @@ package io.anuke.mindustry.world;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.reflect.ClassReflection;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.world.blocks.Blocks;
import io.anuke.ucore.util.Bits;
@ -285,7 +286,7 @@ public class Tile{
Block block = block();
Block floor = floor();
return floor.name() + ":" + block.name() + "[" + x + "," + y + "] " + "entity=" + entity +
return floor.name() + ":" + block.name() + "[" + x + "," + y + "] " + "entity=" + (entity == null ? "null" : ClassReflection.getSimpleName(entity.getClass())) +
(link != 0 ? " link=[" + (Bits.getLeftByte(link) - 8) + ", " + (Bits.getRightByte(link) - 8) + "]" : "");
}
}

View file

@ -1,11 +1,13 @@
package io.anuke.mindustry.world.blocks.types.distribution;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.NumberUtils;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.util.Bits;
public class Junction extends Block{
@ -82,6 +84,36 @@ public class Junction extends Block{
return new JunctionEntity();
}
public Array<Object> getDebugInfo(Tile tile){
JunctionEntity entity = tile.entity();
Array<Object> arr = super.getDebugInfo(tile);
for(int i = 0; i < 4; i ++){
arr.add("nearby." + i);
arr.add(tile.getNearby(i));
}
Consumer<Buffer> write = b -> {
for(int i = 0; i < b.index; i++){
long l = b.items[i];
float time = NumberUtils.intBitsToFloat(Bits.getLeftInt(l));
int val = Bits.getRightInt(l);
Item item = Item.getByID(Bits.getLeftShort(val));
int direction = Bits.getRightShort(val);
Tile dest = tile.getNearby(direction);
arr.add(" bufferx.item");
arr.add(time + " | " + item.name + " | " + dest.block() + ":" + dest.floor());
}
};
arr.add("buffer.bx");
arr.add(entity.bx.index);
write.accept(entity.bx);
arr.add("buffer.by");
arr.add(entity.bx.index);
write.accept(entity.by);
return arr;
}
class JunctionEntity extends TileEntity{
Buffer bx = new Buffer();
Buffer by = new Buffer();

View file

@ -15,6 +15,7 @@ import io.anuke.mindustry.net.Packets.ChatPacket;
import io.anuke.mindustry.net.Packets.KickReason;
import io.anuke.mindustry.ui.fragments.DebugFragment;
import io.anuke.mindustry.world.Map;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.*;
import io.anuke.ucore.modules.Module;
import io.anuke.ucore.util.CommandHandler;
@ -315,6 +316,33 @@ public class ServerControl extends Module {
handler.register("info", "Print debug info", arg -> {
info(DebugFragment.debugInfo());
});
handler.register("trace", "<x> <y>", "Prints debug info about a block", arg -> {
try{
int x = Integer.parseInt(arg[0]);
int y = Integer.parseInt(arg[1]);
Tile tile = world.tile(x, y);
if(tile != null){
if(tile.entity != null){
Array<Object> arr = tile.block().getDebugInfo(tile);
StringBuilder result = new StringBuilder();
for(int i = 0; i < arr.size/2; i ++){
result.append(arr.get(i*2));
result.append(": ");
result.append(arr.get(i*2 + 1));
result.append("\n");
}
Log.info("&ly{0}", result);
}else{
Log.info("No tile entity for that block.");
}
}else{
Log.info("No tile at that location.");
}
}catch (NumberFormatException e){
Log.err("Invalid coordinates passed.");
}
});
}
private void readCommands(){