Even more commands added to server; net bugfixes
This commit is contained in:
@@ -22,7 +22,7 @@ allprojects {
|
|||||||
appName = "Mindustry"
|
appName = "Mindustry"
|
||||||
gdxVersion = '1.9.8'
|
gdxVersion = '1.9.8'
|
||||||
aiVersion = '1.8.1'
|
aiVersion = '1.8.1'
|
||||||
uCoreVersion = '79f8108'
|
uCoreVersion = '4dee898'
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public class Vars{
|
|||||||
//how much the zoom changes every zoom button press
|
//how much the zoom changes every zoom button press
|
||||||
public static final int zoomScale = Math.round(Unit.dp.scl(1));
|
public static final int zoomScale = Math.round(Unit.dp.scl(1));
|
||||||
//if true, player speed will be increased, massive amounts of resources will be given on start, and other debug options will be available
|
//if true, player speed will be increased, massive amounts of resources will be given on start, and other debug options will be available
|
||||||
public static boolean debug = true;
|
public static boolean debug = false;
|
||||||
public static boolean debugNet = true;
|
public static boolean debugNet = true;
|
||||||
public static boolean console = false;
|
public static boolean console = false;
|
||||||
//whether the player can clip through walls
|
//whether the player can clip through walls
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import io.anuke.mindustry.game.SpawnPoint;
|
|||||||
import io.anuke.mindustry.game.WaveCreator;
|
import io.anuke.mindustry.game.WaveCreator;
|
||||||
import io.anuke.mindustry.graphics.Fx;
|
import io.anuke.mindustry.graphics.Fx;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
|
import io.anuke.mindustry.net.NetEvents;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.ProductionBlocks;
|
import io.anuke.mindustry.world.blocks.ProductionBlocks;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
@@ -112,6 +113,7 @@ public class Logic extends Module {
|
|||||||
|
|
||||||
if(world.getCore().block() != ProductionBlocks.core && !state.gameOver){
|
if(world.getCore().block() != ProductionBlocks.core && !state.gameOver){
|
||||||
state.gameOver = true;
|
state.gameOver = true;
|
||||||
|
NetEvents.handleGameOver();
|
||||||
Events.fire(GameOverEvent.class);
|
Events.fire(GameOverEvent.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package io.anuke.mindustry.core;
|
package io.anuke.mindustry.core;
|
||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import com.badlogic.gdx.graphics.Color;
|
|
||||||
import com.badlogic.gdx.utils.IntSet;
|
import com.badlogic.gdx.utils.IntSet;
|
||||||
import com.badlogic.gdx.utils.TimeUtils;
|
import com.badlogic.gdx.utils.TimeUtils;
|
||||||
import io.anuke.mindustry.core.GameState.State;
|
import io.anuke.mindustry.core.GameState.State;
|
||||||
@@ -37,9 +36,6 @@ import java.nio.ByteBuffer;
|
|||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class NetClient extends Module {
|
public class NetClient extends Module {
|
||||||
public static final Color[] colorArray = {Color.ORANGE, Color.SCARLET, Color.LIME, Color.PURPLE,
|
|
||||||
Color.GOLD, Color.PINK, Color.SKY, Color.GOLD, Color.VIOLET,
|
|
||||||
Color.GREEN, Color.CORAL, Color.CYAN, Color.CHARTREUSE};
|
|
||||||
boolean connecting = false;
|
boolean connecting = false;
|
||||||
boolean gotData = false;
|
boolean gotData = false;
|
||||||
boolean kicked = false;
|
boolean kicked = false;
|
||||||
@@ -184,7 +180,7 @@ public class NetClient extends Module {
|
|||||||
|
|
||||||
Net.handleClient(EnemyDeathPacket.class, spawn -> {
|
Net.handleClient(EnemyDeathPacket.class, spawn -> {
|
||||||
Enemy enemy = enemyGroup.getByID(spawn.id);
|
Enemy enemy = enemyGroup.getByID(spawn.id);
|
||||||
if (enemy != null) enemy.onDeath();
|
if (enemy != null) enemy.type.onDeath(enemy, true);
|
||||||
dead.add(spawn.id);
|
dead.add(spawn.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -260,6 +256,7 @@ public class NetClient extends Module {
|
|||||||
//duplicates.
|
//duplicates.
|
||||||
if (enemyGroup.getByID(packet.id) != null ||
|
if (enemyGroup.getByID(packet.id) != null ||
|
||||||
recieved.contains(packet.id)) return;
|
recieved.contains(packet.id)) return;
|
||||||
|
|
||||||
recieved.add(packet.id);
|
recieved.add(packet.id);
|
||||||
|
|
||||||
Player player = new Player();
|
Player player = new Player();
|
||||||
@@ -325,10 +322,6 @@ public class NetClient extends Module {
|
|||||||
Net.disconnect();
|
Net.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String colorizeName(int id, String name){
|
|
||||||
return name == null ? null : "[#" + colorArray[id % colorArray.length].toString().toUpperCase() + "]" + name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearRecieved(){
|
public void clearRecieved(){
|
||||||
recieved.clear();
|
recieved.clear();
|
||||||
dead.clear();
|
dead.clear();
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ public class NetServer extends Module{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void update(){
|
public void update(){
|
||||||
if(!closing && Net.server() && state.is(State.menu)){
|
if(!headless && !closing && Net.server() && state.is(State.menu)){
|
||||||
closing = true;
|
closing = true;
|
||||||
weapons.clear();
|
weapons.clear();
|
||||||
ui.loadfrag.show("$text.server.closing");
|
ui.loadfrag.show("$text.server.closing");
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ public class Renderer extends RendererModule{
|
|||||||
Draw.color(0f, 0f, 0f, 0.3f);
|
Draw.color(0f, 0f, 0f, 0.3f);
|
||||||
Draw.rect("blank", player.x, player.y + 8 - layout.height/2, layout.width + 2, layout.height + 2);
|
Draw.rect("blank", player.x, player.y + 8 - layout.height/2, layout.width + 2, layout.height + 2);
|
||||||
Draw.color();
|
Draw.color();
|
||||||
Draw.tcolor(NetClient.colorArray[player.id % NetClient.colorArray.length]);
|
Draw.tcolor(NetCommon.colorArray[player.id % NetCommon.colorArray.length]);
|
||||||
Draw.text(player.name, player.x, player.y + 8);
|
Draw.text(player.name, player.x, player.y + 8);
|
||||||
Draw.tcolor();
|
Draw.tcolor();
|
||||||
}
|
}
|
||||||
@@ -385,7 +385,7 @@ public class Renderer extends RendererModule{
|
|||||||
|
|
||||||
//draw selected block health
|
//draw selected block health
|
||||||
if(input.recipe == null && !ui.hasMouse()){
|
if(input.recipe == null && !ui.hasMouse()){
|
||||||
Tile tile = world.tile(tilex, tiley);
|
Tile tile = world.tileWorld(Graphics.mouseWorld().x, Graphics.mouseWorld().y);
|
||||||
|
|
||||||
if(tile != null && tile.block() != Blocks.air){
|
if(tile != null && tile.block() != Blocks.air){
|
||||||
Tile target = tile;
|
Tile target = tile;
|
||||||
|
|||||||
@@ -5,14 +5,19 @@ import com.badlogic.gdx.Gdx;
|
|||||||
import io.anuke.mindustry.core.GameState.State;
|
import io.anuke.mindustry.core.GameState.State;
|
||||||
import io.anuke.mindustry.entities.Player;
|
import io.anuke.mindustry.entities.Player;
|
||||||
import io.anuke.mindustry.game.Difficulty;
|
import io.anuke.mindustry.game.Difficulty;
|
||||||
|
import io.anuke.mindustry.game.EventType.GameOverEvent;
|
||||||
import io.anuke.mindustry.game.GameMode;
|
import io.anuke.mindustry.game.GameMode;
|
||||||
import io.anuke.mindustry.io.SaveIO;
|
import io.anuke.mindustry.io.SaveIO;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
|
import io.anuke.mindustry.net.NetEvents;
|
||||||
import io.anuke.mindustry.net.Packets.ChatPacket;
|
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.ui.fragments.DebugFragment;
|
||||||
import io.anuke.mindustry.world.Map;
|
import io.anuke.mindustry.world.Map;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
|
import io.anuke.ucore.core.Events;
|
||||||
import io.anuke.ucore.core.Sounds;
|
import io.anuke.ucore.core.Sounds;
|
||||||
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.modules.Module;
|
import io.anuke.ucore.modules.Module;
|
||||||
import io.anuke.ucore.util.CommandHandler;
|
import io.anuke.ucore.util.CommandHandler;
|
||||||
import io.anuke.ucore.util.CommandHandler.Command;
|
import io.anuke.ucore.util.CommandHandler.Command;
|
||||||
@@ -31,6 +36,7 @@ import static io.anuke.ucore.util.Log.*;
|
|||||||
|
|
||||||
public class ServerControl extends Module {
|
public class ServerControl extends Module {
|
||||||
private final CommandHandler handler = new CommandHandler("");
|
private final CommandHandler handler = new CommandHandler("");
|
||||||
|
private boolean shuffle = true;
|
||||||
|
|
||||||
public ServerControl(){
|
public ServerControl(){
|
||||||
Effects.setScreenShakeProvider((a, b) -> {});
|
Effects.setScreenShakeProvider((a, b) -> {});
|
||||||
@@ -57,24 +63,46 @@ public class ServerControl extends Module {
|
|||||||
thread.setDaemon(true);
|
thread.setDaemon(true);
|
||||||
thread.start();
|
thread.start();
|
||||||
|
|
||||||
|
Events.on(GameOverEvent.class, () -> {
|
||||||
|
info("Game over!");
|
||||||
|
|
||||||
|
Timers.runTask(10f, () -> {
|
||||||
|
Net.closeServer();
|
||||||
|
|
||||||
|
if(shuffle) {
|
||||||
|
Map previous = world.getMap();
|
||||||
|
Map map = previous;
|
||||||
|
while(map == previous) map = world.maps().getDefaultMaps().random();
|
||||||
|
|
||||||
|
info("Selected next map to be {0}.", map.name);
|
||||||
|
state.set(State.playing);
|
||||||
|
logic.reset();
|
||||||
|
world.loadMap(map);
|
||||||
|
host();
|
||||||
|
}else{
|
||||||
|
state.set(State.menu);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
info("&lcServer loaded. Type &ly'help'&lc for help.");
|
info("&lcServer loaded. Type &ly'help'&lc for help.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCommands(){
|
private void registerCommands(){
|
||||||
handler.register("help", "", "Displays this command list.", arg -> {
|
handler.register("help", "Displays this command list.", arg -> {
|
||||||
info("Commands:");
|
info("Commands:");
|
||||||
for(Command command : handler.getCommandList()){
|
for(Command command : handler.getCommandList()){
|
||||||
print(" &y" + command.text + (command.params.isEmpty() ? "" : " ") + command.params + " - &lm" + command.description);
|
print(" &y" + command.text + (command.params.isEmpty() ? "" : " ") + command.params + " - &lm" + command.description);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
handler.register("exit", "", "Exit the server application.", arg -> {
|
handler.register("exit", "Exit the server application.", arg -> {
|
||||||
info("Shutting down server.");
|
info("Shutting down server.");
|
||||||
Net.dispose();
|
Net.dispose();
|
||||||
Gdx.app.exit();
|
Gdx.app.exit();
|
||||||
});
|
});
|
||||||
|
|
||||||
handler.register("stop", "", "Stop hosting the server.", arg -> {
|
handler.register("stop", "Stop hosting the server.", arg -> {
|
||||||
Net.closeServer();
|
Net.closeServer();
|
||||||
state.set(State.menu);
|
state.set(State.menu);
|
||||||
});
|
});
|
||||||
@@ -93,7 +121,7 @@ public class ServerControl extends Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(result == null){
|
if(result == null){
|
||||||
err("No map with name &y'{0}'&lg found.", search);
|
err("No map with name &y'{0}'&lr found.", search);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,12 +144,18 @@ public class ServerControl extends Module {
|
|||||||
host();
|
host();
|
||||||
});
|
});
|
||||||
|
|
||||||
handler.register("status", "", "Display server status.", arg -> {
|
handler.register("status", "Display server status.", arg -> {
|
||||||
if(state.is(State.menu)){
|
if(state.is(State.menu)){
|
||||||
info("&lyStatus: &rserver closed");
|
info("&lyStatus: &rserver closed");
|
||||||
}else{
|
}else{
|
||||||
info("&lyStatus: &lcPlaying on map &fi{0}&fb &lb/&lc Wave {1} &lb/&lc {2}",
|
info("&lyStatus: &lcPlaying on map &fi{0}&fb &lb/&lc Wave {1} &lb/&lc {2}",
|
||||||
Strings.capitalize(world.getMap().name), state.wave, Strings.capitalize(state.difficulty.name()));
|
Strings.capitalize(world.getMap().name), state.wave, Strings.capitalize(state.difficulty.name()));
|
||||||
|
if(state.enemies > 0){
|
||||||
|
info("&ly{0} enemies remaining.", state.enemies);
|
||||||
|
}else{
|
||||||
|
info("&ly{0} seconds until next wave.", (int)(state.wavetime / 60));
|
||||||
|
}
|
||||||
|
|
||||||
if(playerGroup.size() > 0) {
|
if(playerGroup.size() > 0) {
|
||||||
info("&lyPlayers: {0}", playerGroup.size());
|
info("&lyPlayers: {0}", playerGroup.size());
|
||||||
for (Player p : playerGroup.all()) {
|
for (Player p : playerGroup.all()) {
|
||||||
@@ -153,6 +187,73 @@ public class ServerControl extends Module {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
handler.register("friendlyfire", "<on/off>", "Enable or disable friendly fire", arg -> {
|
||||||
|
String s = arg[0];
|
||||||
|
if(s.equalsIgnoreCase("on")){
|
||||||
|
NetEvents.handleFriendlyFireChange(true);
|
||||||
|
state.friendlyFire = true;
|
||||||
|
info("Friendly fire enabled.");
|
||||||
|
}else if(s.equalsIgnoreCase("off")){
|
||||||
|
NetEvents.handleFriendlyFireChange(false);
|
||||||
|
state.friendlyFire = false;
|
||||||
|
info("Friendly fire disabled.");
|
||||||
|
}else{
|
||||||
|
err("Incorrect command usage.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
handler.register("shuffle", "<on/off>", "Enable or disable automatic random map shuffling after gameovers.", arg -> {
|
||||||
|
String s = arg[0];
|
||||||
|
if(s.equalsIgnoreCase("on")){
|
||||||
|
shuffle = true;
|
||||||
|
info("Map shuffling enabled.");
|
||||||
|
}else if(s.equalsIgnoreCase("off")){
|
||||||
|
shuffle = false;
|
||||||
|
info("Map shuffling disabled.");
|
||||||
|
}else{
|
||||||
|
err("Incorrect command usage.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
handler.register("kick", "<username>", "Kick a person by name.", arg -> {
|
||||||
|
if(!state.is(State.playing)) {
|
||||||
|
err("Not hosting a game yet. Calm down.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(playerGroup.size() == 0){
|
||||||
|
err("But this server is empty. A barren wasteland.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player target = null;
|
||||||
|
|
||||||
|
for(Player player : playerGroup.all()){
|
||||||
|
if(player.name.equalsIgnoreCase(arg[0])){
|
||||||
|
target = player;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(target != null){
|
||||||
|
Net.kickConnection(target.clientid, KickReason.kick);
|
||||||
|
info("It is done.");
|
||||||
|
}else{
|
||||||
|
info("Nobody with that name could be found...");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
handler.register("runwave", "Trigger the next wave.", arg -> {
|
||||||
|
if(!state.is(State.playing)) {
|
||||||
|
err("Not hosting. Host a game first.");
|
||||||
|
}else if(state.enemies > 0){
|
||||||
|
err("There are still {0} enemies remaining.", state.enemies);
|
||||||
|
}else{
|
||||||
|
logic.runWave();
|
||||||
|
info("Wave spawned.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
handler.register("load", "<slot>", "Load a save from a slot.", arg -> {
|
handler.register("load", "<slot>", "Load a save from a slot.", arg -> {
|
||||||
if(state.is(State.playing)){
|
if(state.is(State.playing)){
|
||||||
err("Already hosting. Type 'stop' to stop hosting first.");
|
err("Already hosting. Type 'stop' to stop hosting first.");
|
||||||
@@ -191,7 +292,7 @@ public class ServerControl extends Module {
|
|||||||
info("Saved to slot {0}.", slot);
|
info("Saved to slot {0}.", slot);
|
||||||
});
|
});
|
||||||
|
|
||||||
handler.register("info", "", "Print debug info", arg -> {
|
handler.register("info", "Print debug info", arg -> {
|
||||||
info(DebugFragment.debugInfo());
|
info(DebugFragment.debugInfo());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public class Enemy extends SyncEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeath(){
|
public void onDeath(){
|
||||||
type.onDeath(this);
|
type.onDeath(this, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -236,16 +236,18 @@ public class EnemyType {
|
|||||||
|
|
||||||
public void onShoot(Enemy enemy, BulletType type, float rotation){}
|
public void onShoot(Enemy enemy, BulletType type, float rotation){}
|
||||||
|
|
||||||
public void onDeath(Enemy enemy){
|
public void onDeath(Enemy enemy, boolean force){
|
||||||
if(Net.server()){
|
if(Net.server()){
|
||||||
NetEvents.handleEnemyDeath(enemy);
|
NetEvents.handleEnemyDeath(enemy);
|
||||||
}
|
}
|
||||||
|
|
||||||
Effects.effect(Fx.explosion, enemy);
|
if(!Net.client() || force) {
|
||||||
Effects.shake(3f, 4f, enemy);
|
Effects.effect(Fx.explosion, enemy);
|
||||||
Effects.sound("bang2", enemy);
|
Effects.shake(3f, 4f, enemy);
|
||||||
enemy.remove();
|
Effects.sound("bang2", enemy);
|
||||||
enemy.dead = true;
|
enemy.remove();
|
||||||
|
enemy.dead = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removed(Enemy enemy){
|
public void removed(Enemy enemy){
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ public class BlastType extends EnemyType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeath(Enemy enemy){
|
public void onDeath(Enemy enemy, boolean force){
|
||||||
super.onDeath(enemy);
|
super.onDeath(enemy, force);
|
||||||
explode(enemy);
|
explode(enemy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ public class TargetType extends EnemyType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeath(Enemy enemy){
|
public void onDeath(Enemy enemy, boolean force){
|
||||||
super.onDeath(enemy);
|
super.onDeath(enemy, force);
|
||||||
Timers.run(100f, ()->{
|
Timers.run(100f, ()->{
|
||||||
new Enemy(EnemyTypes.target).set(enemy.x, enemy.y).add();
|
new Enemy(EnemyTypes.target).set(enemy.x, enemy.y).add();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import static io.anuke.mindustry.Vars.*;
|
|||||||
public class Maps implements Disposable{
|
public class Maps implements Disposable{
|
||||||
private IntMap<Map> maps = new IntMap<>();
|
private IntMap<Map> maps = new IntMap<>();
|
||||||
private ObjectMap<String, Map> mapNames = new ObjectMap<>();
|
private ObjectMap<String, Map> mapNames = new ObjectMap<>();
|
||||||
|
private Array<Map> defaultMaps = new Array<>();
|
||||||
private Map networkMap;
|
private Map networkMap;
|
||||||
private int lastID;
|
private int lastID;
|
||||||
private Json json = new Json();
|
private Json json = new Json();
|
||||||
@@ -32,6 +33,10 @@ public class Maps implements Disposable{
|
|||||||
return maps.values();
|
return maps.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Array<Map> getDefaultMaps(){
|
||||||
|
return defaultMaps;
|
||||||
|
}
|
||||||
|
|
||||||
public void setNetworkMap(Map map){
|
public void setNetworkMap(Map map){
|
||||||
if(networkMap != null){
|
if(networkMap != null){
|
||||||
networkMap.pixmap.dispose();
|
networkMap.pixmap.dispose();
|
||||||
@@ -147,6 +152,9 @@ public class Maps implements Disposable{
|
|||||||
maps.put(map.id, map);
|
maps.put(map.id, map);
|
||||||
mapNames.put(map.name, map);
|
mapNames.put(map.name, map);
|
||||||
lastID = Math.max(lastID, map.id);
|
lastID = Math.max(lastID, map.id);
|
||||||
|
if(!map.custom){
|
||||||
|
defaultMaps.add(map);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import io.anuke.mindustry.net.Packets.*;
|
|||||||
import io.anuke.mindustry.resource.Weapon;
|
import io.anuke.mindustry.resource.Weapon;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.core.Timers;
|
|
||||||
import io.anuke.ucore.entities.Entity;
|
import io.anuke.ucore.entities.Entity;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
@@ -29,7 +28,7 @@ public class NetEvents {
|
|||||||
public static void handleGameOver(){
|
public static void handleGameOver(){
|
||||||
Net.send(new GameOverPacket(), SendMode.tcp);
|
Net.send(new GameOverPacket(), SendMode.tcp);
|
||||||
state.gameOver = true;
|
state.gameOver = true;
|
||||||
Timers.runTask(30f, () -> state.set(State.menu));
|
state.set(State.menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void handleBullet(BulletType type, Entity owner, float x, float y, float angle, short damage){
|
public static void handleBullet(BulletType type, Entity owner, float x, float y, float angle, short damage){
|
||||||
|
|||||||
@@ -178,6 +178,10 @@ public class ChatFragment extends Table implements Fragment{
|
|||||||
return chatOpen;
|
return chatOpen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMessagesSize(){
|
||||||
|
return messages.size;
|
||||||
|
}
|
||||||
|
|
||||||
public void addMessage(String message, String sender){
|
public void addMessage(String message, String sender){
|
||||||
messages.insert(0, new ChatMessage(message, sender));
|
messages.insert(0, new ChatMessage(message, sender));
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package io.anuke.mindustry.ui.fragments;
|
package io.anuke.mindustry.ui.fragments;
|
||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
import io.anuke.mindustry.entities.enemies.Enemy;
|
import io.anuke.mindustry.entities.enemies.Enemy;
|
||||||
import io.anuke.mindustry.entities.enemies.EnemyTypes;
|
import io.anuke.mindustry.entities.enemies.EnemyTypes;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
@@ -75,7 +76,11 @@ public class DebugFragment implements Fragment {
|
|||||||
row();
|
row();
|
||||||
new button("dump", () -> {
|
new button("dump", () -> {
|
||||||
try{
|
try{
|
||||||
Gdx.files.local("packet-dump.txt").writeString(debugInfo(), false);
|
FileHandle file = Gdx.files.local("packet-dump.txt");
|
||||||
|
file.writeString("--INFO--\n", false);
|
||||||
|
file.writeString(debugInfo(), true);
|
||||||
|
file.writeString("--LOG--\n\n", true);
|
||||||
|
file.writeString(log.toString(), true);
|
||||||
}catch (Exception e){
|
}catch (Exception e){
|
||||||
ui.showError("Error dumping log.");
|
ui.showError("Error dumping log.");
|
||||||
}
|
}
|
||||||
@@ -101,6 +106,8 @@ public class DebugFragment implements Fragment {
|
|||||||
return join(
|
return join(
|
||||||
"net.active: " + Net.active(),
|
"net.active: " + Net.active(),
|
||||||
"net.server: " + Net.server(),
|
"net.server: " + Net.server(),
|
||||||
|
"chat.open: " + ui.chatfrag.chatOpen(),
|
||||||
|
"chat.messages: " + ui.chatfrag.getMessagesSize(),
|
||||||
"players: " + playerGroup.size(),
|
"players: " + playerGroup.size(),
|
||||||
"enemies: " + enemyGroup.size(),
|
"enemies: " + enemyGroup.size(),
|
||||||
"tiles: " + tileGroup.size(),
|
"tiles: " + tileGroup.size(),
|
||||||
|
|||||||
Reference in New Issue
Block a user