From eb7fed990a29f4899d7c07a776c20170745dc563 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Fri, 12 Jun 2015 14:33:49 -0400 Subject: [PATCH] Reduced the stuttering from player movement, should be a bit more fluid now. --- .../swg/zone/UpdateTransformsMessage.java | 27 +++++++++++++++---- .../zone/object_controller/DataTransform.java | 26 +++++++++++++++--- src/resources/objects/SWGObject.java | 16 ++++++----- 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/src/network/packets/swg/zone/UpdateTransformsMessage.java b/src/network/packets/swg/zone/UpdateTransformsMessage.java index 3d0d1bdb5..bc346800e 100644 --- a/src/network/packets/swg/zone/UpdateTransformsMessage.java +++ b/src/network/packets/swg/zone/UpdateTransformsMessage.java @@ -41,7 +41,9 @@ public class UpdateTransformsMessage extends SWGPacket { private int updateCounter; private byte direction; private float speed; - + private byte lookAtYaw; + private boolean useLookAtYaw; + public UpdateTransformsMessage() { this.objId = 0; this.posX = 0; @@ -80,9 +82,9 @@ public class UpdateTransformsMessage extends SWGPacket { addShort(data, posZ); addInt (data, updateCounter); addByte (data, (byte) speed); - addByte (data, (byte) direction); - addByte (data, (byte) 1); // lookAtYaw - addByte (data, (byte) 0); // useLookAtYaw + addByte (data, direction); + addByte (data, lookAtYaw); // lookAtYaw + addBoolean (data, useLookAtYaw); // useLookAtYaw return data; } @@ -101,5 +103,20 @@ public class UpdateTransformsMessage extends SWGPacket { public int getUpdateCounter() { return updateCounter; } public byte getDirection() { return direction; } public float getSpeed() { return speed; } - + + public boolean isUseLookAtYaw() { + return useLookAtYaw; + } + + public void setUseLookAtYaw(boolean useLookAtYaw) { + this.useLookAtYaw = useLookAtYaw; + } + + public byte getLookAtYaw() { + return lookAtYaw; + } + + public void setLookAtYaw(byte lookAtYaw) { + this.lookAtYaw = lookAtYaw; + } } diff --git a/src/network/packets/swg/zone/object_controller/DataTransform.java b/src/network/packets/swg/zone/object_controller/DataTransform.java index c6e306339..53f84d839 100644 --- a/src/network/packets/swg/zone/object_controller/DataTransform.java +++ b/src/network/packets/swg/zone/object_controller/DataTransform.java @@ -39,7 +39,9 @@ public class DataTransform extends ObjectController { private int updateCounter = 0; private Location l; private float speed = 0; - + private float lookAtYaw = 0; + private boolean useLookAtYaw; + public DataTransform(long objectId, int counter, Location l, float speed) { super(objectId, CRC); if (l == null) @@ -65,6 +67,8 @@ public class DataTransform extends ObjectController { l.setY(getFloat(data)); l.setZ(getFloat(data)); speed = getFloat(data); + lookAtYaw = getFloat(data); + useLookAtYaw = getBoolean(data); } public ByteBuffer encode() { @@ -83,8 +87,24 @@ public class DataTransform extends ObjectController { public int getUpdateCounter() { return updateCounter; } public Location getLocation() { return l; } public float getSpeed() { return speed; } - - public double getMovementAngle() { + + public boolean isUseLookAtYaw() { + return useLookAtYaw; + } + + public void setUseLookAtYaw(boolean useLookAtYaw) { + this.useLookAtYaw = useLookAtYaw; + } + + public float getLookAtYaw() { + return lookAtYaw; + } + + public void setLookAtYaw(float lookAtYaw) { + this.lookAtYaw = lookAtYaw; + } + + public byte getMovementAngle() { byte movementAngle = (byte) 0.0f; double wOrient = l.getOrientationW(); double yOrient = l.getOrientationY(); diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index b91f321de..4fc6a053c 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -728,20 +728,22 @@ public abstract class SWGObject implements Serializable, Comparable { public void sendDataTransforms(DataTransform dTransform) { Location loc = dTransform.getLocation(); float speed = dTransform.getSpeed(); - sendDataTransforms(loc, (byte) dTransform.getMovementAngle(), speed); + sendDataTransforms(loc, dTransform.getMovementAngle(), speed, dTransform.getLookAtYaw(), dTransform.isUseLookAtYaw()); } - public void sendDataTransforms(Location loc, int direction, float speed) { + public void sendDataTransforms(Location loc, byte direction, float speed, float lookAtYaw, boolean useLookAtYaw) { // TODO: Check for a parent, if one exists then send a UpdateTransformWithParentMessage as the object is in a container (such as a building) UpdateTransformsMessage transform = new UpdateTransformsMessage(); transform.setObjectId(getObjectId()); // (short) (xPosition * 4 + 0.5) - transform.setX((short) (loc.getX() * 4 + 0.5)); - transform.setY((short) (loc.getY() * 4 + 0.5)); - transform.setZ((short) (loc.getZ() * 4 + 0.5)); + transform.setX((short) (loc.getX() * 4)); + transform.setY((short) (loc.getY() * 4)); + transform.setZ((short) (loc.getZ() * 4)); transform.setUpdateCounter(transformCounter++); - transform.setDirection((byte) direction); + transform.setDirection(direction); transform.setSpeed(speed); - sendObservers(transform); + transform.setLookAtYaw((byte) (lookAtYaw * 16)); + transform.setUseLookAtYaw(useLookAtYaw); + sendObserversAndSelf(transform); } protected void createChildrenObjects(Player target) {