From cd6f2cc6b4ee8ef85fbda21a31b4260a1cc90ea5 Mon Sep 17 00:00:00 2001 From: austin Date: Fri, 5 Nov 2021 18:49:25 -0400 Subject: [PATCH] Re-enable streaming entities on connect --- .../electrosphere/engine/LoadingThread.java | 4 +- .../game/client/ClientFunctions.java | 2 +- .../electrosphere/logger/LoggerInterface.java | 2 +- .../net/parser/net/message/EntityMessage.java | 207 ++++++++++-------- .../net/parser/net/message/TypeBytes.java | 10 +- .../net/parser/util/ByteStreamUtils.java | 50 ++++- .../net/server/ServerConnectionHandler.java | 86 ++++---- template.json | 6 +- 8 files changed, 213 insertions(+), 154 deletions(-) diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index c25a687b..fdbc613b 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -145,7 +145,9 @@ public class LoadingThread extends Thread { initCollisionEngine(Globals.RUN_SERVER); //initialize the "virtual" objects simulation - initMacroSimulation(); + if(Globals.RUN_SERVER){ + initMacroSimulation(); + } //initialize the "real" objects simulation initMicroSimulation(); diff --git a/src/main/java/electrosphere/game/client/ClientFunctions.java b/src/main/java/electrosphere/game/client/ClientFunctions.java index 12ff987b..1031299a 100644 --- a/src/main/java/electrosphere/game/client/ClientFunctions.java +++ b/src/main/java/electrosphere/game/client/ClientFunctions.java @@ -19,7 +19,7 @@ public class ClientFunctions { } static void updateSkyboxPos(){ - if(Globals.skybox != null){ + if(Globals.skybox != null && Globals.playerCharacter != null){ // Vector3f skyboxPos = EntityUtils.getPosition(Globals.skybox); // // Vector3f playerCameraPos = EntityUtils.getPosition(Globals.playerCamera); diff --git a/src/main/java/electrosphere/logger/LoggerInterface.java b/src/main/java/electrosphere/logger/LoggerInterface.java index 02a0353b..5a42efca 100644 --- a/src/main/java/electrosphere/logger/LoggerInterface.java +++ b/src/main/java/electrosphere/logger/LoggerInterface.java @@ -17,7 +17,7 @@ public class LoggerInterface { public static Logger loggerEngine; public static void initLoggers(){ - loggerNetworking = new Logger(LogLevel.WARNING); + loggerNetworking = new Logger(LogLevel.DEBUG); loggerFileIO = new Logger(LogLevel.WARNING); loggerGameLogic = new Logger(LogLevel.WARNING); loggerRenderer = new Logger(LogLevel.WARNING); diff --git a/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java b/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java index a685f57c..ae6be29b 100644 --- a/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java +++ b/src/main/java/electrosphere/net/parser/net/message/EntityMessage.java @@ -23,9 +23,9 @@ public class EntityMessage extends NetworkMessage { int entityCategory; String entitySubtype; int entityID; - float positionX; - float positionY; - float positionZ; + double positionX; + double positionY; + double positionZ; float rotationW; float rotationX; float rotationY; @@ -73,27 +73,27 @@ public class EntityMessage extends NetworkMessage { this.entityID = entityID; } - public float getpositionX() { + public double getpositionX() { return positionX; } - public void setpositionX(float positionX) { + public void setpositionX(double positionX) { this.positionX = positionX; } - public float getpositionY() { + public double getpositionY() { return positionY; } - public void setpositionY(float positionY) { + public void setpositionY(double positionY) { this.positionY = positionY; } - public float getpositionZ() { + public double getpositionZ() { return positionZ; } - public void setpositionZ(float positionZ) { + public void setpositionZ(double positionZ) { this.positionZ = positionZ; } @@ -286,13 +286,13 @@ public class EntityMessage extends NetworkMessage { if(currentStreamLength < 14 + entitySubtypeSize){ return false; } - if(currentStreamLength < 14){ - return false; - } if(currentStreamLength < 18){ return false; } - if(currentStreamLength < 22){ + if(currentStreamLength < 26){ + return false; + } + if(currentStreamLength < 34){ return false; } return true; @@ -304,13 +304,13 @@ public class EntityMessage extends NetworkMessage { rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream)); rVal.setentityCategory(ByteStreamUtils.popIntFromByteQueue(byteStream)); rVal.setentitySubtype(ByteStreamUtils.popStringFromByteQueue(byteStream)); - rVal.setpositionX(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionY(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionZ(ByteStreamUtils.popFloatFromByteQueue(byteStream)); + rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); return rVal; } - public static EntityMessage constructCreateMessage(int entityID,int entityCategory,String entitySubtype,float positionX,float positionY,float positionZ){ + public static EntityMessage constructCreateMessage(int entityID,int entityCategory,String entitySubtype,double positionX,double positionY,double positionZ){ EntityMessage rVal = new EntityMessage(EntityMessageType.CREATE); rVal.setentityID(entityID); rVal.setentityCategory(entityCategory); @@ -327,13 +327,13 @@ public class EntityMessage extends NetworkMessage { stripPacketHeader(byteStream); rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream)); rVal.settime(ByteStreamUtils.popLongFromByteQueue(byteStream)); - rVal.setpositionX(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionY(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionZ(ByteStreamUtils.popFloatFromByteQueue(byteStream)); + rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); return rVal; } - public static EntityMessage constructSetPositionMessage(int entityID,long time,float positionX,float positionY,float positionZ){ + public static EntityMessage constructSetPositionMessage(int entityID,long time,double positionX,double positionY,double positionZ){ EntityMessage rVal = new EntityMessage(EntityMessageType.SETPOSITION); rVal.setentityID(entityID); rVal.settime(time); @@ -371,9 +371,9 @@ public class EntityMessage extends NetworkMessage { stripPacketHeader(byteStream); rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream)); rVal.settime(ByteStreamUtils.popLongFromByteQueue(byteStream)); - rVal.setpositionX(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionY(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionZ(ByteStreamUtils.popFloatFromByteQueue(byteStream)); + rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); rVal.setrotationX(ByteStreamUtils.popFloatFromByteQueue(byteStream)); rVal.setrotationY(ByteStreamUtils.popFloatFromByteQueue(byteStream)); rVal.setrotationZ(ByteStreamUtils.popFloatFromByteQueue(byteStream)); @@ -382,7 +382,7 @@ public class EntityMessage extends NetworkMessage { return rVal; } - public static EntityMessage constructmoveUpdateMessage(int entityID,long time,float positionX,float positionY,float positionZ,float rotationX,float rotationY,float rotationZ,float velocity,int treeState){ + public static EntityMessage constructmoveUpdateMessage(int entityID,long time,double positionX,double positionY,double positionZ,float rotationX,float rotationY,float rotationZ,float velocity,int treeState){ EntityMessage rVal = new EntityMessage(EntityMessageType.MOVEUPDATE); rVal.setentityID(entityID); rVal.settime(time); @@ -403,9 +403,9 @@ public class EntityMessage extends NetworkMessage { stripPacketHeader(byteStream); rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream)); rVal.settime(ByteStreamUtils.popLongFromByteQueue(byteStream)); - rVal.setpositionX(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionY(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionZ(ByteStreamUtils.popFloatFromByteQueue(byteStream)); + rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); rVal.setrotationX(ByteStreamUtils.popFloatFromByteQueue(byteStream)); rVal.setrotationY(ByteStreamUtils.popFloatFromByteQueue(byteStream)); rVal.setrotationZ(ByteStreamUtils.popFloatFromByteQueue(byteStream)); @@ -414,7 +414,7 @@ public class EntityMessage extends NetworkMessage { return rVal; } - public static EntityMessage constructattackUpdateMessage(int entityID,long time,float positionX,float positionY,float positionZ,float rotationX,float rotationY,float rotationZ,float velocity,int treeState){ + public static EntityMessage constructattackUpdateMessage(int entityID,long time,double positionX,double positionY,double positionZ,float rotationX,float rotationY,float rotationZ,float velocity,int treeState){ EntityMessage rVal = new EntityMessage(EntityMessageType.ATTACKUPDATE); rVal.setentityID(entityID); rVal.settime(time); @@ -435,13 +435,13 @@ public class EntityMessage extends NetworkMessage { stripPacketHeader(byteStream); rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream)); rVal.settime(ByteStreamUtils.popLongFromByteQueue(byteStream)); - rVal.setpositionX(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionY(ByteStreamUtils.popFloatFromByteQueue(byteStream)); - rVal.setpositionZ(ByteStreamUtils.popFloatFromByteQueue(byteStream)); + rVal.setpositionX(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionY(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); + rVal.setpositionZ(ByteStreamUtils.popDoubleFromByteQueue(byteStream)); return rVal; } - public static EntityMessage constructMoveMessage(int entityID,long time,float positionX,float positionY,float positionZ){ + public static EntityMessage constructMoveMessage(int entityID,long time,double positionX,double positionY,double positionZ){ EntityMessage rVal = new EntityMessage(EntityMessageType.MOVE); rVal.setentityID(entityID); rVal.settime(time); @@ -555,7 +555,7 @@ public class EntityMessage extends NetworkMessage { byte[] stringBytes; switch(this.messageType){ case CREATE: - rawBytes = new byte[2+4+4+4+entitySubtype.length()+4+4+4]; + rawBytes = new byte[2+4+4+4+entitySubtype.length()+8+8+8]; //message header rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY; //entity messaage header @@ -576,18 +576,21 @@ public class EntityMessage extends NetworkMessage { for(int i = 0; i < entitySubtype.length(); i++){ rawBytes[14+i] = stringBytes[i]; } - intValues = ByteStreamUtils.serializeFloatToBytes(positionX); - for(int i = 0; i < 4; i++){ + intValues = ByteStreamUtils.serializeDoubleToBytes(positionX); + for(int i = 0; i < 8; i++){ rawBytes[14+entitySubtype.length()+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionY); - for(int i = 0; i < 4; i++){ - rawBytes[18+entitySubtype.length()+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionZ); - for(int i = 0; i < 4; i++){ + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionY); + for(int i = 0; i < 8; i++){ rawBytes[22+entitySubtype.length()+i] = intValues[i]; - } break; + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionZ); + for(int i = 0; i < 8; i++){ + rawBytes[30+entitySubtype.length()+i] = intValues[i]; + } + break; case SETPOSITION: - rawBytes = new byte[2+4+8+4+4+4]; + rawBytes = new byte[2+4+8+8+8+8]; //message header rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY; //entity messaage header @@ -600,16 +603,19 @@ public class EntityMessage extends NetworkMessage { for(int i = 0; i < 8; i++){ rawBytes[6+i] = intValues[i]; } - intValues = ByteStreamUtils.serializeFloatToBytes(positionX); - for(int i = 0; i < 4; i++){ + intValues = ByteStreamUtils.serializeDoubleToBytes(positionX); + for(int i = 0; i < 8; i++){ rawBytes[14+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionY); - for(int i = 0; i < 4; i++){ - rawBytes[18+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionZ); - for(int i = 0; i < 4; i++){ + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionY); + for(int i = 0; i < 8; i++){ rawBytes[22+i] = intValues[i]; - } break; + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionZ); + for(int i = 0; i < 8; i++){ + rawBytes[30+i] = intValues[i]; + } + break; case SETFACING: rawBytes = new byte[2+4+8+4+4+4]; //message header @@ -635,7 +641,7 @@ public class EntityMessage extends NetworkMessage { rawBytes[22+i] = intValues[i]; } break; case MOVEUPDATE: - rawBytes = new byte[2+4+8+4+4+4+4+4+4+4+4]; + rawBytes = new byte[2+4+8+8+8+8+4+4+4+4+4]; //message header rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY; //entity messaage header @@ -648,34 +654,37 @@ public class EntityMessage extends NetworkMessage { for(int i = 0; i < 8; i++){ rawBytes[6+i] = intValues[i]; } - intValues = ByteStreamUtils.serializeFloatToBytes(positionX); - for(int i = 0; i < 4; i++){ + intValues = ByteStreamUtils.serializeDoubleToBytes(positionX); + for(int i = 0; i < 8; i++){ rawBytes[14+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionY); - for(int i = 0; i < 4; i++){ - rawBytes[18+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionZ); - for(int i = 0; i < 4; i++){ + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionY); + for(int i = 0; i < 8; i++){ rawBytes[22+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(rotationX); - for(int i = 0; i < 4; i++){ - rawBytes[26+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(rotationY); - for(int i = 0; i < 4; i++){ + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionZ); + for(int i = 0; i < 8; i++){ rawBytes[30+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(rotationZ); - for(int i = 0; i < 4; i++){ - rawBytes[34+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(velocity); + } + intValues = ByteStreamUtils.serializeFloatToBytes(rotationX); for(int i = 0; i < 4; i++){ rawBytes[38+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeIntToBytes(treeState); + } intValues = ByteStreamUtils.serializeFloatToBytes(rotationY); for(int i = 0; i < 4; i++){ rawBytes[42+i] = intValues[i]; + } intValues = ByteStreamUtils.serializeFloatToBytes(rotationZ); + for(int i = 0; i < 4; i++){ + rawBytes[46+i] = intValues[i]; + } intValues = ByteStreamUtils.serializeFloatToBytes(velocity); + for(int i = 0; i < 4; i++){ + rawBytes[50+i] = intValues[i]; + } intValues = ByteStreamUtils.serializeIntToBytes(treeState); + for(int i = 0; i < 4; i++){ + rawBytes[54+i] = intValues[i]; } break; case ATTACKUPDATE: - rawBytes = new byte[2+4+8+4+4+4+4+4+4+4+4]; + rawBytes = new byte[2+4+8+8+8+8+4+4+4+4+4]; //message header rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY; //entity messaage header @@ -688,34 +697,37 @@ public class EntityMessage extends NetworkMessage { for(int i = 0; i < 8; i++){ rawBytes[6+i] = intValues[i]; } - intValues = ByteStreamUtils.serializeFloatToBytes(positionX); - for(int i = 0; i < 4; i++){ + intValues = ByteStreamUtils.serializeDoubleToBytes(positionX); + for(int i = 0; i < 8; i++){ rawBytes[14+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionY); - for(int i = 0; i < 4; i++){ - rawBytes[18+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionZ); - for(int i = 0; i < 4; i++){ + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionY); + for(int i = 0; i < 8; i++){ rawBytes[22+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(rotationX); - for(int i = 0; i < 4; i++){ - rawBytes[26+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(rotationY); - for(int i = 0; i < 4; i++){ + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionZ); + for(int i = 0; i < 8; i++){ rawBytes[30+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(rotationZ); - for(int i = 0; i < 4; i++){ - rawBytes[34+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(velocity); + } + intValues = ByteStreamUtils.serializeFloatToBytes(rotationX); for(int i = 0; i < 4; i++){ rawBytes[38+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeIntToBytes(treeState); + } intValues = ByteStreamUtils.serializeFloatToBytes(rotationY); for(int i = 0; i < 4; i++){ rawBytes[42+i] = intValues[i]; + } intValues = ByteStreamUtils.serializeFloatToBytes(rotationZ); + for(int i = 0; i < 4; i++){ + rawBytes[46+i] = intValues[i]; + } intValues = ByteStreamUtils.serializeFloatToBytes(velocity); + for(int i = 0; i < 4; i++){ + rawBytes[50+i] = intValues[i]; + } intValues = ByteStreamUtils.serializeIntToBytes(treeState); + for(int i = 0; i < 4; i++){ + rawBytes[54+i] = intValues[i]; } break; case MOVE: - rawBytes = new byte[2+4+8+4+4+4]; + rawBytes = new byte[2+4+8+8+8+8]; //message header rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY; //entity messaage header @@ -728,16 +740,19 @@ public class EntityMessage extends NetworkMessage { for(int i = 0; i < 8; i++){ rawBytes[6+i] = intValues[i]; } - intValues = ByteStreamUtils.serializeFloatToBytes(positionX); - for(int i = 0; i < 4; i++){ + intValues = ByteStreamUtils.serializeDoubleToBytes(positionX); + for(int i = 0; i < 8; i++){ rawBytes[14+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionY); - for(int i = 0; i < 4; i++){ - rawBytes[18+i] = intValues[i]; - } intValues = ByteStreamUtils.serializeFloatToBytes(positionZ); - for(int i = 0; i < 4; i++){ + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionY); + for(int i = 0; i < 8; i++){ rawBytes[22+i] = intValues[i]; - } break; + } + intValues = ByteStreamUtils.serializeDoubleToBytes(positionZ); + for(int i = 0; i < 8; i++){ + rawBytes[30+i] = intValues[i]; + } + break; case DESTROY: rawBytes = new byte[2+4]; //message header diff --git a/src/main/java/electrosphere/net/parser/net/message/TypeBytes.java b/src/main/java/electrosphere/net/parser/net/message/TypeBytes.java index b0ce9d58..c4957939 100644 --- a/src/main/java/electrosphere/net/parser/net/message/TypeBytes.java +++ b/src/main/java/electrosphere/net/parser/net/message/TypeBytes.java @@ -34,7 +34,7 @@ Message categories public static final byte WORLD_MESSAGE_TYPE_REQUESTCHUNK_SIZE = 10; public static final byte WORLD_MESSAGE_TYPE_UPDATE_SIZE = 10; public static final byte WORLD_MESSAGE_TYPE_CHUNKLOADSTART_SIZE = 14; - public static final int WORLD_MESSAGE_TYPE_MACROVALUE_SIZE = 310; + public static final short WORLD_MESSAGE_TYPE_MACROVALUE_SIZE = 310; public static final byte WORLD_MESSAGE_TYPE_HEIGHTMAPMODIFICATION_SIZE = 22; public static final byte WORLD_MESSAGE_TYPE_SPAWNPOSITION_SIZE = 10; /* @@ -63,11 +63,11 @@ Message categories /* Entity packet sizes */ - public static final byte ENTITY_MESSAGE_TYPE_SETPOSITION_SIZE = 26; + public static final byte ENTITY_MESSAGE_TYPE_SETPOSITION_SIZE = 38; public static final byte ENTITY_MESSAGE_TYPE_SETFACING_SIZE = 26; - public static final byte ENTITY_MESSAGE_TYPE_MOVEUPDATE_SIZE = 46; - public static final byte ENTITY_MESSAGE_TYPE_ATTACKUPDATE_SIZE = 46; - public static final byte ENTITY_MESSAGE_TYPE_MOVE_SIZE = 26; + public static final byte ENTITY_MESSAGE_TYPE_MOVEUPDATE_SIZE = 58; + public static final byte ENTITY_MESSAGE_TYPE_ATTACKUPDATE_SIZE = 58; + public static final byte ENTITY_MESSAGE_TYPE_MOVE_SIZE = 38; public static final byte ENTITY_MESSAGE_TYPE_DESTROY_SIZE = 6; public static final byte ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE_SIZE = 22; public static final byte ENTITY_MESSAGE_TYPE_SETPROPERTY_SIZE = 22; diff --git a/src/main/java/electrosphere/net/parser/util/ByteStreamUtils.java b/src/main/java/electrosphere/net/parser/util/ByteStreamUtils.java index c40f73ee..413c4357 100644 --- a/src/main/java/electrosphere/net/parser/util/ByteStreamUtils.java +++ b/src/main/java/electrosphere/net/parser/util/ByteStreamUtils.java @@ -6,12 +6,12 @@ import java.util.concurrent.Semaphore; public class ByteStreamUtils { - static ByteBuffer integerCompactor = ByteBuffer.allocate(8); + static ByteBuffer integerCompactor; static Semaphore bufferLock = new Semaphore(1); -// static { -// integerCompactor = ByteBuffer.allocate(8); -// } + static { + integerCompactor = ByteBuffer.allocate(8); + } public static int popIntFromByteQueue(List queue){ int rVal = -1; @@ -77,6 +77,27 @@ public class ByteStreamUtils { String rVal = new String(stringBytes); return rVal; } + + public static double popDoubleFromByteQueue(List queue){ + double rVal = -1; + bufferLock.acquireUninterruptibly(); + integerCompactor.clear(); + integerCompactor.position(0); + integerCompactor.limit(8); + integerCompactor.put(0,queue.remove(0)); + integerCompactor.put(1,queue.remove(0)); + integerCompactor.put(2,queue.remove(0)); + integerCompactor.put(3,queue.remove(0)); + integerCompactor.put(4,queue.remove(0)); + integerCompactor.put(5,queue.remove(0)); + integerCompactor.put(6,queue.remove(0)); + integerCompactor.put(7,queue.remove(0)); + integerCompactor.position(0); + integerCompactor.limit(8); + rVal = integerCompactor.getDouble(); + bufferLock.release(); + return rVal; + } public static byte[] serializeIntToBytes(int i){ byte[] rVal = new byte[4]; @@ -147,5 +168,26 @@ public class ByteStreamUtils { } return rVal; } + + public static byte[] serializeDoubleToBytes(double i){ + byte[] rVal = new byte[8]; + bufferLock.acquireUninterruptibly(); + integerCompactor.clear(); + integerCompactor.position(0); + integerCompactor.limit(8); + integerCompactor.putDouble(i); + integerCompactor.position(0); + integerCompactor.limit(8); + rVal[0] = integerCompactor.get(0); + rVal[1] = integerCompactor.get(1); + rVal[2] = integerCompactor.get(2); + rVal[3] = integerCompactor.get(3); + rVal[4] = integerCompactor.get(4); + rVal[5] = integerCompactor.get(5); + rVal[6] = integerCompactor.get(6); + rVal[7] = integerCompactor.get(7); + bufferLock.release(); + return rVal; + } } \ No newline at end of file diff --git a/src/main/java/electrosphere/net/server/ServerConnectionHandler.java b/src/main/java/electrosphere/net/server/ServerConnectionHandler.java index 37e3e93b..0410fa46 100644 --- a/src/main/java/electrosphere/net/server/ServerConnectionHandler.java +++ b/src/main/java/electrosphere/net/server/ServerConnectionHandler.java @@ -143,49 +143,49 @@ public class ServerConnectionHandler implements Runnable { //figure out what chunk they're in //queue messages for that chunk -// if(Globals.RUN_SERVER && Main.playerId == -1){ -// -// } else { -// for(Entity currentEntity : Globals.entityManager.getMoveable()){ -// networkParser.addOutgoingMessage( -// EntityMessage.constructCreateMessage( -// currentEntity.getId(), -// 0, //0 for creatures -// CreatureUtils.getType(currentEntity), -// EntityUtils.getPosition(currentEntity).x, -// EntityUtils.getPosition(currentEntity).y, -// EntityUtils.getPosition(currentEntity).z -// ) -// ); -// if(CreatureUtils.isCreature(currentEntity)){ -// if(CreatureUtils.hasControllerPlayerId(currentEntity)){ -// LoggerInterface.loggerNetworking.INFO("Sending controller packets"); -// networkParser.addOutgoingMessage(NetUtils.createSetCreatureControllerIdEntityMessage(currentEntity)); -// } -// } -// } -// for(Entity currentEntity : Globals.entityManager.getItemEntities()){ -// networkParser.addOutgoingMessage( -// EntityMessage.constructCreateMessage( -// currentEntity.getId(), -// 1, //1 for items -// ItemUtils.getType(currentEntity), -// EntityUtils.getPosition(currentEntity).x, -// EntityUtils.getPosition(currentEntity).y, -// EntityUtils.getPosition(currentEntity).z -// ) -// ); -// if(AttachUtils.isAttached(currentEntity)){ -// networkParser.addOutgoingMessage( -// EntityMessage.constructattachEntityToEntityMessage( -// currentEntity.getId(), -// AttachUtils.getTargetBone(currentEntity), -// AttachUtils.getParent(currentEntity).getId() -// ) -// ); -// } -// } -// } + if(Globals.RUN_SERVER && Main.playerId == -1){ + + } else { + for(Entity currentEntity : Globals.entityManager.getMoveable()){ + networkParser.addOutgoingMessage( + EntityMessage.constructCreateMessage( + currentEntity.getId(), + 0, //0 for creatures + CreatureUtils.getType(currentEntity), + EntityUtils.getPosition(currentEntity).x, + EntityUtils.getPosition(currentEntity).y, + EntityUtils.getPosition(currentEntity).z + ) + ); + if(CreatureUtils.isCreature(currentEntity)){ + if(CreatureUtils.hasControllerPlayerId(currentEntity)){ + LoggerInterface.loggerNetworking.INFO("Sending controller packets"); + networkParser.addOutgoingMessage(NetUtils.createSetCreatureControllerIdEntityMessage(currentEntity)); + } + } + } + for(Entity currentEntity : Globals.entityManager.getItemEntities()){ + networkParser.addOutgoingMessage( + EntityMessage.constructCreateMessage( + currentEntity.getId(), + 1, //1 for items + ItemUtils.getType(currentEntity), + EntityUtils.getPosition(currentEntity).x, + EntityUtils.getPosition(currentEntity).y, + EntityUtils.getPosition(currentEntity).z + ) + ); + if(AttachUtils.isAttached(currentEntity)){ + networkParser.addOutgoingMessage( + EntityMessage.constructattachEntityToEntityMessage( + currentEntity.getId(), + AttachUtils.getTargetBone(currentEntity), + AttachUtils.getParent(currentEntity).getId() + ) + ); + } + } + } //let client know it's ready networkParser.addOutgoingMessage(StatusMessage.constructReadyMessage(1)); diff --git a/template.json b/template.json index 23c0fa35..e15d18c1 100644 --- a/template.json +++ b/template.json @@ -479,15 +479,15 @@ }, { "name" : "positionX", - "type" : "FIXED_FLOAT" + "type" : "FIXED_DOUBLE" }, { "name" : "positionY", - "type" : "FIXED_FLOAT" + "type" : "FIXED_DOUBLE" }, { "name" : "positionZ", - "type" : "FIXED_FLOAT" + "type" : "FIXED_DOUBLE" }, { "name" : "rotationW",