From eecd0f6d026b771d472011272de6636b8987f8dc Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 30 Dec 2017 23:06:43 -0500 Subject: [PATCH] Implemented sending of players to client (incomplete) --- core/src/io/anuke/mindustry/core/Control.java | 4 +- .../io/anuke/mindustry/core/NetClient.java | 16 ++++++++ .../io/anuke/mindustry/core/NetServer.java | 40 +++++++++++++++++-- .../src/io/anuke/mindustry/core/Renderer.java | 1 + .../io/anuke/mindustry/entities/Player.java | 14 +++++-- .../mindustry/entities/enemies/Enemy.java | 2 +- core/src/io/anuke/mindustry/net/Packets.java | 13 +++++- .../io/anuke/mindustry/net/Registrator.java | 20 +++++++++- core/src/io/anuke/mindustry/net/Syncable.java | 4 ++ .../mindustry/desktop/DesktopLauncher.java | 1 + 10 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 core/src/io/anuke/mindustry/net/Syncable.java diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index d9427540e7..6cb4cb2609 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -52,6 +52,7 @@ public class Control extends Module{ public final EntityGroup tileGroup = Entities.addGroup(TileEntity.class, false); public final EntityGroup bulletGroup = Entities.addGroup(Bullet.class); public final EntityGroup shieldGroup = Entities.addGroup(Shield.class); + public final EntityGroup playerGroup = Entities.addGroup(Player.class); Array spawns; int wave = 1; @@ -660,9 +661,10 @@ public class Control extends Module{ Entities.update(enemyGroup); Entities.update(tileGroup); Entities.update(shieldGroup); + Entities.update(playerGroup); Entities.collideGroups(enemyGroup, bulletGroup); - Entities.collideGroups(Entities.defaultGroup(), bulletGroup); + Entities.collideGroups(playerGroup, bulletGroup); } } } diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 50c19f770a..e26baf3a71 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.core; import io.anuke.mindustry.core.GameState.State; +import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.net.Net; import com.badlogic.gdx.Gdx; @@ -9,6 +10,7 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Packets.Connect; import io.anuke.mindustry.net.Packets.Disconnect; +import io.anuke.mindustry.net.Packets.EntityDataPacket; import io.anuke.mindustry.net.Packets.WorldData; import io.anuke.ucore.UCore; import io.anuke.ucore.core.Timers; @@ -42,12 +44,26 @@ public class NetClient extends Module { Gdx.app.postRunnable(() -> { UCore.log("Recieved world data: " + data.stream.available() + " bytes."); SaveIO.load(data.stream); + GameState.set(State.playing); connecting = false; Vars.ui.hideLoading(); Vars.ui.hideJoinGame(); }); }); + + Net.handle(EntityDataPacket.class, data -> { + + Gdx.app.postRunnable(() -> { + Timers.run(10f, () -> { + for (Player player : data.players) { + if (player.id != data.playerid) { + player.add(); + } + } + }); + }); + }); } public void update(){ diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index a45ce7a64e..bd1bee67f5 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -1,19 +1,27 @@ package io.anuke.mindustry.core; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.utils.IntMap; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState.State; +import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.net.Net; +import io.anuke.mindustry.net.Net.SendMode; import io.anuke.mindustry.net.Packets.Connect; +import io.anuke.mindustry.net.Packets.EntityDataPacket; +import io.anuke.mindustry.net.Packets.SyncPacket; import io.anuke.mindustry.net.Packets.WorldData; import io.anuke.ucore.UCore; +import io.anuke.ucore.core.Timers; import io.anuke.ucore.modules.Module; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.IOException; public class NetServer extends Module{ + IntMap connections = new IntMap<>(); + float serverSyncTime = 4; public NetServer(){ @@ -24,10 +32,26 @@ public class NetServer extends Module{ ByteArrayOutputStream stream = new ByteArrayOutputStream(); SaveIO.write(stream); - UCore.log("Packed " + stream.size() + " bytes of data."); + UCore.log("Packed " + stream.size() + " uncompressed bytes of data."); + //TODO compress and uncompress when sending data.stream = new ByteArrayInputStream(stream.toByteArray()); + Net.sendStream(packet.id, data); + + Gdx.app.postRunnable(() -> { + EntityDataPacket dp = new EntityDataPacket(); + + Player player = new Player(); + player.clientid = packet.id; + player.add(); + connections.put(player.id, player); + + dp.playerid = player.id; + dp.players = Vars.control.playerGroup.all().toArray(Player.class); + + Net.sendTo(packet.id, dp, SendMode.tcp); + }); }); } @@ -35,9 +59,19 @@ public class NetServer extends Module{ if(!Net.server()) return; if(!GameState.is(State.menu) && Net.active()){ - + sync(); }else{ Net.closeServer(); } } + + void sync(){ + if(Timers.get("serverSync", serverSyncTime)){ + SyncPacket packet = new SyncPacket(); + + for(Player player : Vars.control.playerGroup.all()){ + + } + } + } } diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 1f883131d8..260faba8bf 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -222,6 +222,7 @@ public class Renderer extends RendererModule{ Entities.draw(control.enemyGroup); Graphics.shader(); + Entities.draw(control.playerGroup); Entities.draw(Entities.defaultGroup()); blocks.drawBlocks(true); diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 54d7bffde5..4ac8cf2abc 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -7,6 +7,7 @@ import com.badlogic.gdx.Input.Buttons; import io.anuke.mindustry.Vars; import io.anuke.mindustry.graphics.Fx; import io.anuke.mindustry.input.PlaceMode; +import io.anuke.mindustry.net.Syncable; import io.anuke.mindustry.resource.Mech; import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.resource.Weapon; @@ -17,14 +18,16 @@ import io.anuke.ucore.entities.DestructibleEntity; import io.anuke.ucore.util.Angles; import io.anuke.ucore.util.Mathf; -public class Player extends DestructibleEntity{ +public class Player extends DestructibleEntity implements Syncable{ private static final float speed = 1.1f; private static final float dashSpeed = 1.8f; - public Weapon weapon; + public transient Weapon weapon; public Mech mech = Mech.standard; public float angle; - + + public transient int clientid; + public transient float breaktime = 0; public transient Recipe recipe; public transient int rotation; @@ -122,4 +125,9 @@ public class Player extends DestructibleEntity{ this.angle = Mathf.lerpAngDelta(this.angle, angle, 0.1f); } } + + @Override + public Player add(){ + return add(Vars.control.playerGroup); + } } diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index f36240eaa7..60e901d038 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -129,7 +129,7 @@ public class Enemy extends DestructibleEntity{ //no tile found if(target == null){ - target = Entities.getClosest(Entities.defaultGroup(), x, y, range, e -> e instanceof Player); + target = Entities.getClosest(Vars.control.playerGroup, x, y, range, e -> true); } }else if(nearCore){ target = Vars.control.getCore().entity; diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index 284ed655af..65a5a0b3f8 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -1,6 +1,8 @@ package io.anuke.mindustry.net; -import java.io.InputStream; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.entities.Player; /**Class for storing all packets.*/ public class Packets { @@ -18,4 +20,13 @@ public class Packets { public static class WorldData extends Streamable{ } + + public static class EntityDataPacket{ + public Player[] players; + public int playerid; + } + + public static class SyncPacket{ + + } } diff --git a/core/src/io/anuke/mindustry/net/Registrator.java b/core/src/io/anuke/mindustry/net/Registrator.java index fe6fb75a58..ac00b72e99 100644 --- a/core/src/io/anuke/mindustry/net/Registrator.java +++ b/core/src/io/anuke/mindustry/net/Registrator.java @@ -1,8 +1,16 @@ package io.anuke.mindustry.net; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.entities.Player; +import io.anuke.mindustry.net.Packets.EntityDataPacket; +import io.anuke.mindustry.net.Packets.SyncPacket; import io.anuke.mindustry.net.Packets.WorldData; import io.anuke.mindustry.net.Streamable.StreamBegin; import io.anuke.mindustry.net.Streamable.StreamChunk; +import io.anuke.mindustry.resource.Mech; +import io.anuke.mindustry.resource.Weapon; +import io.anuke.ucore.entities.Entity; public class Registrator { @@ -11,8 +19,18 @@ public class Registrator { StreamBegin.class, StreamChunk.class, WorldData.class, + SyncPacket.class, + EntityDataPacket.class, Class.class, - byte[].class + byte[].class, + Entity[].class, + Player[].class, + Array.class, + Vector2.class, + + Entity.class, + Player.class, + Mech.class }; } } diff --git a/core/src/io/anuke/mindustry/net/Syncable.java b/core/src/io/anuke/mindustry/net/Syncable.java new file mode 100644 index 0000000000..1bfb10753a --- /dev/null +++ b/core/src/io/anuke/mindustry/net/Syncable.java @@ -0,0 +1,4 @@ +package io.anuke.mindustry.net; + +public interface Syncable { +} diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java index 9004bba1b5..79b2d98d58 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java @@ -13,6 +13,7 @@ import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application; import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration; import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.compression.Lzma; import com.esotericsoftware.kryonet.*; import com.esotericsoftware.kryonet.util.InputStreamSender; import com.esotericsoftware.minlog.Log;