Working on getting items streaming over net
This commit is contained in:
parent
1c4b2d9846
commit
6bea0cc24f
@ -78,7 +78,7 @@ public class ControlHandler {
|
||||
MAIN_GAME,
|
||||
}
|
||||
|
||||
ControlsState state;
|
||||
ControlsState state = ControlsState.TITLE_MENU;
|
||||
|
||||
|
||||
HashMap<String, Integer> controlsMap;
|
||||
|
||||
@ -42,4 +42,8 @@ public class ItemUtils {
|
||||
actor.playAnimation("Sword|Idle");
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isItem(Entity item){
|
||||
return item.getDataKeys().contains(EntityDataStrings.ITEM_IS_ITEM);
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ public class DrawCellManager {
|
||||
|
||||
|
||||
|
||||
int drawRadius = 1;
|
||||
int drawRadius = 5;
|
||||
int drawStepdownInterval = 3;
|
||||
int drawStepdownValue = 5;
|
||||
|
||||
|
||||
@ -39,4 +39,16 @@ public class AttachUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isAttached(Entity e){
|
||||
return e.getDataKeys().contains(EntityDataStrings.ATTACH_ENTITY_IS_ATTACHED);
|
||||
}
|
||||
|
||||
public static String getTargetBone(Entity e){
|
||||
return (String)e.getData(EntityDataStrings.ATTACH_TARGET_BONE);
|
||||
}
|
||||
|
||||
public static Entity getParent(Entity e){
|
||||
return (Entity)e.getData(EntityDataStrings.ATTACH_PARENT);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import electrosphere.entity.Entity;
|
||||
import electrosphere.entity.EntityUtils;
|
||||
import electrosphere.entity.types.creature.CreatureUtils;
|
||||
import electrosphere.game.client.world.ClientWorldData;
|
||||
import electrosphere.game.state.AttachUtils;
|
||||
import electrosphere.main.Globals;
|
||||
import electrosphere.main.Main;
|
||||
import electrosphere.net.parser.net.message.EntityMessage;
|
||||
@ -80,6 +81,14 @@ public class ClientProtocol {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ATTACHENTITYTOENTITY:
|
||||
Entity child = Globals.entityManager.getEntityFromId(message.getentityID());
|
||||
Entity parent = Globals.entityManager.getEntityFromId(message.gettargetID());
|
||||
System.out.println("Attach " + message.getentityID() + " to " + message.gettargetID() + " on bone " + message.getbone());
|
||||
if(child != null && parent != null){
|
||||
AttachUtils.attachEntityToEntityAtBone(parent, child, message.getbone());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package electrosphere.net.parser.net.message;
|
||||
|
||||
import electrosphere.net.parser.util.ByteStreamUtils;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class EntityMessage extends NetworkMessage {
|
||||
@ -12,6 +13,7 @@ public class EntityMessage extends NetworkMessage {
|
||||
DESTROY,
|
||||
SETBEHAVIORTREE,
|
||||
SETPROPERTY,
|
||||
ATTACHENTITYTOENTITY,
|
||||
}
|
||||
|
||||
EntityMessageType messageType;
|
||||
@ -25,6 +27,8 @@ public class EntityMessage extends NetworkMessage {
|
||||
int treeType;
|
||||
int treeStatus;
|
||||
long time;
|
||||
String bone;
|
||||
int targetID;
|
||||
|
||||
EntityMessage(EntityMessageType messageType){
|
||||
this.type = MessageType.ENTITY_MESSAGE;
|
||||
@ -115,6 +119,22 @@ public class EntityMessage extends NetworkMessage {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public String getbone() {
|
||||
return bone;
|
||||
}
|
||||
|
||||
public void setbone(String bone) {
|
||||
this.bone = bone;
|
||||
}
|
||||
|
||||
public int gettargetID() {
|
||||
return targetID;
|
||||
}
|
||||
|
||||
public void settargetID(int targetID) {
|
||||
this.targetID = targetID;
|
||||
}
|
||||
|
||||
static void stripPacketHeader(List<Byte> byteStream){
|
||||
byteStream.remove(0);
|
||||
byteStream.remove(0);
|
||||
@ -158,6 +178,8 @@ public class EntityMessage extends NetworkMessage {
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY:
|
||||
return EntityMessage.canParseattachEntityToEntityMessage(byteStream);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -282,12 +304,56 @@ public class EntityMessage extends NetworkMessage {
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static boolean canParseattachEntityToEntityMessage(List<Byte> byteStream){
|
||||
int currentStreamLength = byteStream.size();
|
||||
List<Byte> temporaryByteQueue = new LinkedList();
|
||||
if(currentStreamLength < 6){
|
||||
return false;
|
||||
}
|
||||
int boneSize = 0;
|
||||
if(currentStreamLength < 10){
|
||||
return false;
|
||||
} else {
|
||||
temporaryByteQueue.add(byteStream.get(6 + 0));
|
||||
temporaryByteQueue.add(byteStream.get(6 + 1));
|
||||
temporaryByteQueue.add(byteStream.get(6 + 2));
|
||||
temporaryByteQueue.add(byteStream.get(6 + 3));
|
||||
boneSize = ByteStreamUtils.popIntFromByteQueue(temporaryByteQueue);
|
||||
}
|
||||
if(currentStreamLength < 10 + boneSize){
|
||||
return false;
|
||||
}
|
||||
if(currentStreamLength < 10){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static EntityMessage parseattachEntityToEntityMessage(List<Byte> byteStream){
|
||||
EntityMessage rVal = new EntityMessage(EntityMessageType.ATTACHENTITYTOENTITY);
|
||||
stripPacketHeader(byteStream);
|
||||
rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
||||
rVal.setbone(ByteStreamUtils.popStringFromByteQueue(byteStream));
|
||||
rVal.settargetID(ByteStreamUtils.popIntFromByteQueue(byteStream));
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static EntityMessage constructattachEntityToEntityMessage(int entityID,String bone,int targetID){
|
||||
EntityMessage rVal = new EntityMessage(EntityMessageType.ATTACHENTITYTOENTITY);
|
||||
rVal.setentityID(entityID);
|
||||
rVal.setbone(bone);
|
||||
rVal.settargetID(targetID);
|
||||
rVal.serialize();
|
||||
return rVal;
|
||||
}
|
||||
|
||||
@Override
|
||||
void serialize(){
|
||||
byte[] intValues = new byte[8];
|
||||
byte[] stringBytes;
|
||||
switch(this.messageType){
|
||||
case CREATE:
|
||||
rawBytes = new byte[TypeBytes.ENTITY_MESSAGE_TYPE_CREATE_SIZE];
|
||||
rawBytes = new byte[2+4+4+4+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||
//entity messaage header
|
||||
@ -311,7 +377,7 @@ public class EntityMessage extends NetworkMessage {
|
||||
rawBytes[18+i] = intValues[i];
|
||||
} break;
|
||||
case SETPOSITION:
|
||||
rawBytes = new byte[TypeBytes.ENTITY_MESSAGE_TYPE_SETPOSITION_SIZE];
|
||||
rawBytes = new byte[2+4+8+4+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||
//entity messaage header
|
||||
@ -335,7 +401,7 @@ public class EntityMessage extends NetworkMessage {
|
||||
rawBytes[22+i] = intValues[i];
|
||||
} break;
|
||||
case MOVE:
|
||||
rawBytes = new byte[TypeBytes.ENTITY_MESSAGE_TYPE_MOVE_SIZE];
|
||||
rawBytes = new byte[2+4+8+4+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||
//entity messaage header
|
||||
@ -359,7 +425,7 @@ public class EntityMessage extends NetworkMessage {
|
||||
rawBytes[22+i] = intValues[i];
|
||||
} break;
|
||||
case DESTROY:
|
||||
rawBytes = new byte[TypeBytes.ENTITY_MESSAGE_TYPE_DESTROY_SIZE];
|
||||
rawBytes = new byte[2+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||
//entity messaage header
|
||||
@ -370,7 +436,7 @@ public class EntityMessage extends NetworkMessage {
|
||||
}
|
||||
break;
|
||||
case SETBEHAVIORTREE:
|
||||
rawBytes = new byte[TypeBytes.ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE_SIZE];
|
||||
rawBytes = new byte[2+4+8+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||
//entity messaage header
|
||||
@ -393,7 +459,7 @@ public class EntityMessage extends NetworkMessage {
|
||||
}
|
||||
break;
|
||||
case SETPROPERTY:
|
||||
rawBytes = new byte[TypeBytes.ENTITY_MESSAGE_TYPE_SETPROPERTY_SIZE];
|
||||
rawBytes = new byte[2+4+8+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||
//entity messaage header
|
||||
@ -415,6 +481,29 @@ public class EntityMessage extends NetworkMessage {
|
||||
rawBytes[18+i] = intValues[i];
|
||||
}
|
||||
break;
|
||||
case ATTACHENTITYTOENTITY:
|
||||
rawBytes = new byte[2+4+4+bone.length()+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
|
||||
//entity messaage header
|
||||
rawBytes[1] = TypeBytes.ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY;
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(entityID);
|
||||
for(int i = 0; i < 4; i++){
|
||||
rawBytes[2+i] = intValues[i];
|
||||
}
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(bone.length());
|
||||
for(int i = 0; i < 4; i++){
|
||||
rawBytes[6+i] = intValues[i];
|
||||
}
|
||||
stringBytes = bone.getBytes();
|
||||
for(int i = 0; i < bone.length(); i++){
|
||||
rawBytes[10+i] = stringBytes[i];
|
||||
}
|
||||
intValues = ByteStreamUtils.serializeIntToBytes(targetID);
|
||||
for(int i = 0; i < 4; i++){
|
||||
rawBytes[10+bone.length()+i] = intValues[i];
|
||||
}
|
||||
break;
|
||||
}
|
||||
serialized = true;
|
||||
}
|
||||
|
||||
@ -114,6 +114,11 @@ ENTITY_MESSAGE,
|
||||
rVal = EntityMessage.parsesetPropertyMessage(byteStream);
|
||||
}
|
||||
break;
|
||||
case TypeBytes.ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY:
|
||||
if(EntityMessage.canParseMessage(byteStream,secondByte)){
|
||||
rVal = EntityMessage.parseattachEntityToEntityMessage(byteStream);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package electrosphere.net.parser.net.message;
|
||||
|
||||
import electrosphere.net.parser.util.ByteStreamUtils;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class PlayerMessage extends NetworkMessage {
|
||||
@ -104,9 +105,10 @@ public class PlayerMessage extends NetworkMessage {
|
||||
@Override
|
||||
void serialize(){
|
||||
byte[] intValues = new byte[8];
|
||||
byte[] stringBytes;
|
||||
switch(this.messageType){
|
||||
case SET_ID:
|
||||
rawBytes = new byte[TypeBytes.PLAYER_MESSAGE_TYPE_SET_ID_SIZE];
|
||||
rawBytes = new byte[2+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_PLAYER;
|
||||
//entity messaage header
|
||||
@ -117,7 +119,7 @@ public class PlayerMessage extends NetworkMessage {
|
||||
}
|
||||
break;
|
||||
case SETINITIALDISCRETEPOSITION:
|
||||
rawBytes = new byte[TypeBytes.PLAYER_MESSAGE_TYPE_SETINITIALDISCRETEPOSITION_SIZE];
|
||||
rawBytes = new byte[2+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_PLAYER;
|
||||
//entity messaage header
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package electrosphere.net.parser.net.message;
|
||||
|
||||
import electrosphere.net.parser.util.ByteStreamUtils;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class StatusMessage extends NetworkMessage {
|
||||
@ -63,9 +64,10 @@ public class StatusMessage extends NetworkMessage {
|
||||
@Override
|
||||
void serialize(){
|
||||
byte[] intValues = new byte[8];
|
||||
byte[] stringBytes;
|
||||
switch(this.messageType){
|
||||
case READY:
|
||||
rawBytes = new byte[TypeBytes.STATUS_MESSAGE_TYPE_READY_SIZE];
|
||||
rawBytes = new byte[2+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_STATUS;
|
||||
//entity messaage header
|
||||
|
||||
@ -50,6 +50,7 @@ Message categories
|
||||
public static final byte ENTITY_MESSAGE_TYPE_DESTROY = 3;
|
||||
public static final byte ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE = 4;
|
||||
public static final byte ENTITY_MESSAGE_TYPE_SETPROPERTY = 5;
|
||||
public static final byte ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY = 6;
|
||||
/*
|
||||
Entity packet sizes
|
||||
*/
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package electrosphere.net.parser.net.message;
|
||||
|
||||
import electrosphere.net.parser.util.ByteStreamUtils;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class WorldMessage extends NetworkMessage {
|
||||
@ -414,9 +415,10 @@ public class WorldMessage extends NetworkMessage {
|
||||
@Override
|
||||
void serialize(){
|
||||
byte[] intValues = new byte[8];
|
||||
byte[] stringBytes;
|
||||
switch(this.messageType){
|
||||
case METADATA:
|
||||
rawBytes = new byte[TypeBytes.WORLD_MESSAGE_TYPE_METADATA_SIZE];
|
||||
rawBytes = new byte[2+4+4+4+4+4+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_WORLD;
|
||||
//entity messaage header
|
||||
@ -450,7 +452,7 @@ public class WorldMessage extends NetworkMessage {
|
||||
}
|
||||
break;
|
||||
case REQUESTMACROVALUES:
|
||||
rawBytes = new byte[TypeBytes.WORLD_MESSAGE_TYPE_REQUESTMACROVALUES_SIZE];
|
||||
rawBytes = new byte[2+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_WORLD;
|
||||
//entity messaage header
|
||||
@ -465,7 +467,7 @@ public class WorldMessage extends NetworkMessage {
|
||||
}
|
||||
break;
|
||||
case UPDATE:
|
||||
rawBytes = new byte[TypeBytes.WORLD_MESSAGE_TYPE_UPDATE_SIZE];
|
||||
rawBytes = new byte[2+4+4];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_WORLD;
|
||||
//entity messaage header
|
||||
@ -480,7 +482,7 @@ public class WorldMessage extends NetworkMessage {
|
||||
}
|
||||
break;
|
||||
case MACROVALUE:
|
||||
rawBytes = new byte[TypeBytes.WORLD_MESSAGE_TYPE_MACROVALUE_SIZE];
|
||||
rawBytes = new byte[2+4+4+4+4+4+4+4+4+4+4+4+8+8+8+8+8+8+8+8+8];
|
||||
//message header
|
||||
rawBytes[0] = TypeBytes.MESSAGE_TYPE_WORLD;
|
||||
//entity messaage header
|
||||
|
||||
@ -68,6 +68,16 @@ public class ByteStreamUtils {
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static String popStringFromByteQueue(List<Byte> queue){
|
||||
int length = popIntFromByteQueue(queue);
|
||||
byte[] stringBytes = new byte[length];
|
||||
for(int i = 0; i < length; i++){
|
||||
stringBytes[i] = queue.remove(0);
|
||||
}
|
||||
String rVal = new String(stringBytes);
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public static byte[] serializeIntToBytes(int i){
|
||||
byte[] rVal = new byte[4];
|
||||
bufferLock.acquireUninterruptibly();
|
||||
@ -122,4 +132,20 @@ public class ByteStreamUtils {
|
||||
bufferLock.release();
|
||||
return rVal;
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] serializeStringToBytes(String s){
|
||||
int length = s.length();
|
||||
byte[] rVal = new byte[length + 4]; //the 4 is the header int for the string size
|
||||
byte[] serializedInteger = serializeIntToBytes(length);
|
||||
rVal[0] = serializedInteger[0];
|
||||
rVal[1] = serializedInteger[1];
|
||||
rVal[2] = serializedInteger[2];
|
||||
rVal[3] = serializedInteger[3];
|
||||
byte[] stringBytes = s.getBytes();
|
||||
for(int i = 0; i < length; i++){
|
||||
rVal[4+i] = stringBytes[i];
|
||||
}
|
||||
return rVal;
|
||||
}
|
||||
|
||||
}
|
||||
@ -146,6 +146,17 @@ public class ServerConnectionHandler implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
// for(Entity currentEntity : Globals.entityManager.getItemEntities()){
|
||||
// if(AttachUtils.isAttached(currentEntity)){
|
||||
// networkParser.addOutgoingMessage(
|
||||
// EntityMessage.constructattachEntityToEntityMessage(
|
||||
// currentEntity.getId(),
|
||||
// AttachUtils.getTargetBone(currentEntity),
|
||||
// AttachUtils.getParent(currentEntity).getId()
|
||||
// )
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
//let client know it's ready
|
||||
|
||||
@ -134,7 +134,6 @@ public class FileLoadingUtils {
|
||||
|
||||
public static File unpackBakedFileToFilePath(String bakedFilePath){
|
||||
String sanitizedFilePath = sanitizeBakedFilePath(bakedFilePath);
|
||||
System.out.println(bakedFilePath);
|
||||
if(!Files.exists(new File("./Models").toPath())){
|
||||
try {
|
||||
Files.createDirectory(new File("./Models").toPath());
|
||||
|
||||
@ -297,6 +297,14 @@
|
||||
{
|
||||
"name" : "time",
|
||||
"type" : "FIXED_LONG"
|
||||
},
|
||||
{
|
||||
"name" : "bone",
|
||||
"type" : "VAR_STRING"
|
||||
},
|
||||
{
|
||||
"name" : "targetID",
|
||||
"type" : "FIXED_INT"
|
||||
}
|
||||
],
|
||||
"messageTypes" : [
|
||||
@ -355,6 +363,14 @@
|
||||
"propertyType",
|
||||
"propertyValue"
|
||||
]
|
||||
},
|
||||
{
|
||||
"messageName" : "attachEntityToEntity",
|
||||
"data" : [
|
||||
"entityID",
|
||||
"bone",
|
||||
"targetID"
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user