diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 9e12417e..6476b6dc 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2098,6 +2098,7 @@ TownLayout test Macro pathing test Actually fix pathing spinlock Support for observing ai entities +ServerGroundMovementTree supports collidable entities diff --git a/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java b/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java index 83891288..fd2bba4a 100644 --- a/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java +++ b/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java @@ -14,6 +14,7 @@ import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; +import electrosphere.entity.ServerEntityUtils; import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.state.AnimationPriorities; import electrosphere.entity.state.attack.ServerAttackTree; @@ -182,10 +183,10 @@ public class ServerGroundMovementTree implements BehaviorTree { } DBody body = PhysicsEntityUtils.getDBody(parent); //TODO: eventually handle non-rigid-body entities - if(body == null){ - return; + DVector3C linearVelocity = null; + if(body != null){ + linearVelocity = body.getLinearVel(); } - DVector3C linearVelocity = body.getLinearVel(); // //rotation update @@ -288,14 +289,17 @@ public class ServerGroundMovementTree implements BehaviorTree { state = MovementTreeState.MOVE; CreatureUtils.setVelocity(parent, velocity); } - PhysicsEntityUtils.getDBody(parent).enable(); - PhysicsEntityUtils.getDBody(parent).setLinearVel( - movementVector.x * velocity * Globals.engineState.timekeeper.getSimFrameTime(), - linearVelocity.get1(), - movementVector.z * velocity * Globals.engineState.timekeeper.getSimFrameTime() - ); - body.setAngularVel(0, 0, 0); -// position.set(newPosition); + if(body == null){ + ServerEntityUtils.repositionEntity(parent, new Vector3d(position).add(velocity,velocity,velocity)); + } else { + body.enable(); + body.setLinearVel( + movementVector.x * velocity * Globals.engineState.timekeeper.getSimFrameTime(), + linearVelocity.get1(), + movementVector.z * velocity * Globals.engineState.timekeeper.getSimFrameTime() + ); + body.setAngularVel(0, 0, 0); + } GravityUtils.serverAttemptActivateGravity(parent); @@ -334,13 +338,17 @@ public class ServerGroundMovementTree implements BehaviorTree { } this.updateVelocity(); float velocity = this.getModifiedVelocity(); - PhysicsEntityUtils.getDBody(parent).enable(); - PhysicsEntityUtils.getDBody(parent).setLinearVel( - movementVector.x * velocity * Globals.engineState.timekeeper.getSimFrameTime(), - linearVelocity.get1(), - movementVector.z * velocity * Globals.engineState.timekeeper.getSimFrameTime() - ); - body.setAngularVel(0, 0, 0); + if(body == null){ + ServerEntityUtils.repositionEntity(parent, new Vector3d(position).add(velocity,velocity,velocity)); + } else { + body.enable(); + body.setLinearVel( + movementVector.x * velocity * Globals.engineState.timekeeper.getSimFrameTime(), + linearVelocity.get1(), + movementVector.z * velocity * Globals.engineState.timekeeper.getSimFrameTime() + ); + body.setAngularVel(0, 0, 0); + } GravityUtils.serverAttemptActivateGravity(parent); @@ -398,19 +406,17 @@ public class ServerGroundMovementTree implements BehaviorTree { } else { GravityUtils.serverAttemptActivateGravity(parent); } - // PhysicsEntityUtils.getDBody(parent).addForce( - // movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(), - // linearVelocity.get1(), - // movementVector.z * velocity * Globals.timekeeper.getSimFrameTime() - // ); - PhysicsEntityUtils.getDBody(parent).enable(); - PhysicsEntityUtils.getDBody(parent).setLinearVel( - movementVector.x * velocity * Globals.engineState.timekeeper.getSimFrameTime(), - linearVelocity.get1(), - movementVector.z * velocity * Globals.engineState.timekeeper.getSimFrameTime() - ); - body.setAngularVel(0, 0, 0); -// position.set(newPosition); + if(body == null){ + ServerEntityUtils.repositionEntity(parent, new Vector3d(position).add(velocity,velocity,velocity)); + } else { + body.enable(); + body.setLinearVel( + movementVector.x * velocity * Globals.engineState.timekeeper.getSimFrameTime(), + linearVelocity.get1(), + movementVector.z * velocity * Globals.engineState.timekeeper.getSimFrameTime() + ); + body.setAngularVel(0, 0, 0); + } DataCellSearchUtils.getEntityDataCell(parent).broadcastNetworkMessage( EntityMessage.constructmoveUpdateMessage(