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" : [
{
"type" : "GROUND",
"acceleration" : 0.0015,
"maxVelocity" : 0.005
"acceleration" : 1.0,
"maxVelocity" : 4.0
}
],
"collidable" : {

View File

@ -39,7 +39,7 @@ public class GroundMovementTree {
IDLE,
}
static final double STATE_DIFFERENCE_HARD_UPDATE_THRESHOLD = 0.1;
MovementTreeState state;
@ -95,18 +95,20 @@ public class GroundMovementTree {
// System.out.println("MOVE to " + message.getX() + " " + message.getY() + " " + message.getZ());
switch(message.getMessageSubtype()){
case MOVE:
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_CLIENT){
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()
// )
// );
// }
break;
case SETFACING:
break;
@ -136,7 +138,9 @@ public class GroundMovementTree {
}
// System.out.println(EntityUtils.getEntityPosition(parent));
// System.out.println(message.getpositionX() + " " + message.getpositionY() + " " + message.getpositionZ());
EntityUtils.getPosition(parent).set(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());
}
CreatureUtils.setMovementVector(parent, new Vector3f(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
// EntityUtils.getEntityRotation(parent).set(message.getrotationX(), message.getrotationY(), message.getrotationZ(), message.getrotationW()).normalize();
// velocity = message.getvelocity();
@ -150,7 +154,7 @@ public class GroundMovementTree {
switch(state){
case STARTUP:
//run startup code
velocity = velocity + acceleration;
velocity = velocity + acceleration * Main.deltaTime;
CreatureUtils.setVelocity(parent, velocity);
if(entityActor != null){
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);
// }
// //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);
rotation.set(movementQuaternion);
@ -243,7 +247,7 @@ public class GroundMovementTree {
// if(!Globals.collisionEngine.checkCanOccupyPosition(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);
rotation.set(movementQuaternion);
@ -299,7 +303,7 @@ public class GroundMovementTree {
break;
case SLOWDOWN:
//run slowdown code
velocity = velocity - acceleration;
velocity = velocity - acceleration * Main.deltaTime;
CreatureUtils.setVelocity(parent, velocity);
if(entityActor != null){
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)){
// 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);
rotation.rotationTo(new Vector3f(0,0,1), movementVector);