move tree lag compensation & rebalance

This commit is contained in:
austin 2021-11-05 19:57:59 -04:00
parent 950c64bee9
commit f70bd0c8e9
2 changed files with 24 additions and 20 deletions

View File

@ -88,8 +88,8 @@
"movementSystems" : [ "movementSystems" : [
{ {
"type" : "GROUND", "type" : "GROUND",
"acceleration" : 0.0015, "acceleration" : 1.0,
"maxVelocity" : 0.005 "maxVelocity" : 4.0
} }
], ],
"collidable" : { "collidable" : {

View File

@ -39,7 +39,7 @@ public class GroundMovementTree {
IDLE, IDLE,
} }
static final double STATE_DIFFERENCE_HARD_UPDATE_THRESHOLD = 0.1;
MovementTreeState state; MovementTreeState state;
@ -95,18 +95,20 @@ public class GroundMovementTree {
// System.out.println("MOVE to " + message.getX() + " " + message.getY() + " " + message.getZ()); // System.out.println("MOVE to " + message.getX() + " " + message.getY() + " " + message.getZ());
switch(message.getMessageSubtype()){ switch(message.getMessageSubtype()){
case MOVE: case MOVE:
if(Globals.RUN_CLIENT){
position.set(message.getpositionX(), message.getpositionY(), message.getpositionZ()); position.set(message.getpositionX(), message.getpositionY(), message.getpositionZ());
if(Globals.RUN_SERVER){
Globals.server.broadcastMessage(
EntityMessage.constructMoveMessage(
parent.getId(),
System.currentTimeMillis(),
message.getpositionX(),
message.getpositionY(),
message.getpositionZ()
)
);
} }
// if(Globals.RUN_SERVER){
// Globals.server.broadcastMessage(
// EntityMessage.constructMoveMessage(
// parent.getId(),
// System.currentTimeMillis(),
// message.getpositionX(),
// message.getpositionY(),
// message.getpositionZ()
// )
// );
// }
break; break;
case SETFACING: case SETFACING:
break; break;
@ -136,7 +138,9 @@ public class GroundMovementTree {
} }
// System.out.println(EntityUtils.getEntityPosition(parent)); // System.out.println(EntityUtils.getEntityPosition(parent));
// System.out.println(message.getpositionX() + " " + message.getpositionY() + " " + message.getpositionZ()); // System.out.println(message.getpositionX() + " " + message.getpositionY() + " " + message.getpositionZ());
if(position.distance(message.getpositionX(),message.getpositionY(),message.getpositionZ()) > STATE_DIFFERENCE_HARD_UPDATE_THRESHOLD){
EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ()); EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
}
CreatureUtils.setMovementVector(parent, new Vector3f(message.getrotationX(),message.getrotationY(),message.getrotationZ())); CreatureUtils.setMovementVector(parent, new Vector3f(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
// EntityUtils.getEntityRotation(parent).set(message.getrotationX(), message.getrotationY(), message.getrotationZ(), message.getrotationW()).normalize(); // EntityUtils.getEntityRotation(parent).set(message.getrotationX(), message.getrotationY(), message.getrotationZ(), message.getrotationW()).normalize();
// velocity = message.getvelocity(); // velocity = message.getvelocity();
@ -150,7 +154,7 @@ public class GroundMovementTree {
switch(state){ switch(state){
case STARTUP: case STARTUP:
//run startup code //run startup code
velocity = velocity + acceleration; velocity = velocity + acceleration * Main.deltaTime;
CreatureUtils.setVelocity(parent, velocity); CreatureUtils.setVelocity(parent, velocity);
if(entityActor != null){ if(entityActor != null){
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_MOVEMENT_STARTUP)){ if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_MOVEMENT_STARTUP)){
@ -172,7 +176,7 @@ public class GroundMovementTree {
// newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition); // newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition);
// } // }
// //actually update // //actually update
collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity, "movement")); collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity * Main.deltaTime, "movement"));
// position.set(newPosition); // position.set(newPosition);
rotation.set(movementQuaternion); rotation.set(movementQuaternion);
@ -243,7 +247,7 @@ public class GroundMovementTree {
// if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){ // if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){
// newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition); // newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition);
// } // }
collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity, "movement")); collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity * Main.deltaTime, "movement"));
// position.set(newPosition); // position.set(newPosition);
rotation.set(movementQuaternion); rotation.set(movementQuaternion);
@ -299,7 +303,7 @@ public class GroundMovementTree {
break; break;
case SLOWDOWN: case SLOWDOWN:
//run slowdown code //run slowdown code
velocity = velocity - acceleration; velocity = velocity - acceleration * Main.deltaTime;
CreatureUtils.setVelocity(parent, velocity); CreatureUtils.setVelocity(parent, velocity);
if(entityActor != null){ if(entityActor != null){
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_MOVEMENT_STARTUP)){ if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_MOVEMENT_STARTUP)){
@ -319,7 +323,7 @@ public class GroundMovementTree {
// if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){ // if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){
// newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition); // newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition);
// } // }
collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity, "movement")); collidable.addImpulse(new Impulse(new Vector3d(movementVector), velocity * Main.deltaTime, "movement"));
// position.set(newPosition); // position.set(newPosition);
rotation.rotationTo(new Vector3f(0,0,1), movementVector); rotation.rotationTo(new Vector3f(0,0,1), movementVector);