diff --git a/net/synchronization.json b/net/synchronization.json index 5f414fd5..81d2cac4 100644 --- a/net/synchronization.json +++ b/net/synchronization.json @@ -25,12 +25,28 @@ { "name" : "stringValue", "type" : "VAR_STRING" + }, + { + "name" : "intValue", + "type" : "FIXED_INT" + }, + { + "name" : "longValue", + "type" : "FIXED_LONG" + }, + { + "name" : "floatValue", + "type" : "FIXED_FLOAT" + }, + { + "name" : "doubleValue", + "type" : "FIXED_DOUBLE" } ], "messageTypes" : [ { "messageName" : "UpdateClientState", - "description" : "Updates an integer on the client", + "description" : "Updates a btree state variable on the client", "data" : [ "entityId", "bTreeId", @@ -48,6 +64,55 @@ "stringValue" ] }, + { + "messageName" : "UpdateClientIntState", + "description" : "Updates an int on the client", + "data" : [ + "entityId", + "bTreeId", + "fieldId", + "intValue" + ] + }, + { + "messageName" : "UpdateClientLongState", + "description" : "Updates a long on the client", + "data" : [ + "entityId", + "bTreeId", + "fieldId", + "longValue" + ] + }, + { + "messageName" : "UpdateClientFloatState", + "description" : "Updates a float on the client", + "data" : [ + "entityId", + "bTreeId", + "fieldId", + "floatValue" + ] + }, + { + "messageName" : "UpdateClientDoubleState", + "description" : "Updates a double on the client", + "data" : [ + "entityId", + "bTreeId", + "fieldId", + "doubleValue" + ] + }, + { + "messageName" : "ClientRequestBTreeAction", + "description" : "Client requests a btree on the server performs an action (ie start, interrupt, etc)", + "data" : [ + "entityId", + "bTreeId", + "bTreeValue" + ] + }, { "messageName" : "AttachTree", "description" : "Attaches a btree to an entity on the client", diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index e236e312..982ff09a 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -91,7 +91,7 @@ import electrosphere.entity.state.movement.SprintTree; import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree; import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementRelativeFacing; import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementTreeState; -import electrosphere.entity.state.movement.jump.JumpTree; +import electrosphere.entity.state.movement.jump.ClientJumpTree; import electrosphere.entity.types.camera.CameraEntityUtils; import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.logger.LoggerInterface; @@ -821,7 +821,7 @@ public class ControlHandler { mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP)); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ - JumpTree jumpTree = JumpTree.getClientJumpTree(Globals.playerEntity); + ClientJumpTree jumpTree = ClientJumpTree.getClientJumpTree(Globals.playerEntity); if(jumpTree != null){ jumpTree.start(); } diff --git a/src/main/java/electrosphere/entity/EntityDataStrings.java b/src/main/java/electrosphere/entity/EntityDataStrings.java index 94a24b94..7d4faaec 100644 --- a/src/main/java/electrosphere/entity/EntityDataStrings.java +++ b/src/main/java/electrosphere/entity/EntityDataStrings.java @@ -65,8 +65,8 @@ public class EntityDataStrings { public static final String CREATURE_ATTRIBUTE_VARIANT = "creatureAttributeVariant"; public static final String CLIENT_ROTATOR_TREE = "clientRotatorTree"; public static final String SERVER_ROTATOR_TREE = "serverRotatorTree"; - public static final String CLIENT_JUMP_TREE = "clientJumpTree"; - public static final String SERVER_JUMP_TREE = "serverJumpTree"; + public static final String TREE_CLIENTJUMPTREE = "treeClientJumpTree"; + public static final String TREE_SERVERJUMPTREE = "treeServerJumpTree"; public static final String FALL_TREE = "fallTree"; public static final String CREATURE_TEMPLATE = "creatureTemplate"; public static final String FIRST_PERSON_TREE = "firstPersonTree"; diff --git a/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java b/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java index e20afa98..20463537 100644 --- a/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java +++ b/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java @@ -20,7 +20,7 @@ import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.state.collidable.ClientCollidableTree; import electrosphere.entity.state.collidable.Impulse; import electrosphere.entity.state.movement.FallTree; -import electrosphere.entity.state.movement.jump.JumpTree; +import electrosphere.entity.state.movement.jump.ClientJumpTree; import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.net.synchronization.annotation.SyncedField; import electrosphere.net.synchronization.annotation.SynchronizableEnum; @@ -116,8 +116,8 @@ public class ClientGravityTree implements BehaviorTree { if(!hadStructureCollision()){ // position.set(new Vector3d(position.x,Globals.commonWorldData.getElevationAtPoint(position) + 0.0001f,position.z)); } - JumpTree jumpTree; - if((jumpTree = JumpTree.getClientJumpTree(parent))!=null){ + ClientJumpTree jumpTree; + if((jumpTree = ClientJumpTree.getClientJumpTree(parent))!=null){ jumpTree.land(); } FallTree fallTree; diff --git a/src/main/java/electrosphere/entity/state/movement/FallTree.java b/src/main/java/electrosphere/entity/state/movement/FallTree.java index 4e6c0b2c..6dd9cf20 100644 --- a/src/main/java/electrosphere/entity/state/movement/FallTree.java +++ b/src/main/java/electrosphere/entity/state/movement/FallTree.java @@ -9,7 +9,7 @@ import electrosphere.entity.btree.StateTransitionUtil; import electrosphere.entity.btree.StateTransitionUtil.StateTransitionUtilItem; import electrosphere.entity.state.AnimationPriorities; import electrosphere.entity.state.client.firstPerson.FirstPersonTree; -import electrosphere.entity.state.movement.jump.JumpTree; +import electrosphere.entity.state.movement.jump.ClientJumpTree; import electrosphere.game.data.creature.type.movement.FallMovementSystem; import electrosphere.renderer.actor.Actor; @@ -36,7 +36,7 @@ public class FallTree implements BehaviorTree { Entity parent; //the related jump tree - JumpTree jumpTree; + ClientJumpTree jumpTree; //The state transition util StateTransitionUtil stateTransitionUtil; @@ -115,7 +115,7 @@ public class FallTree implements BehaviorTree { * Sets the related jump tree * @param jumpTree the jump tree that is related to this fall tree (on the same entity) */ - public void setJumpTree(JumpTree jumpTree){ + public void setJumpTree(ClientJumpTree jumpTree){ this.jumpTree = jumpTree; } diff --git a/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java b/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java index 6277d423..d3c57eae 100644 --- a/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java +++ b/src/main/java/electrosphere/entity/state/movement/groundmove/ClientGroundMovementTree.java @@ -21,7 +21,7 @@ import electrosphere.entity.state.client.firstPerson.FirstPersonTree; import electrosphere.entity.state.movement.FallTree; import electrosphere.entity.state.movement.SprintTree; import electrosphere.entity.state.movement.SprintTree.SprintTreeState; -import electrosphere.entity.state.movement.jump.JumpTree; +import electrosphere.entity.state.movement.jump.ClientJumpTree; import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.net.synchronization.annotation.SyncedField; import electrosphere.net.synchronization.annotation.SynchronizableEnum; @@ -87,7 +87,7 @@ public class ClientGroundMovementTree implements BehaviorTree { MovementRelativeFacing facing = MovementRelativeFacing.FORWARD; SprintTree sprintTree; - JumpTree jumpTree; + ClientJumpTree jumpTree; FallTree fallTree; GroundMovementSystem groundMovementData; @@ -431,7 +431,7 @@ public class ClientGroundMovementTree implements BehaviorTree { this.sprintTree = sprintTree; } - public void setClientJumpTree(JumpTree jumpTree){ + public void setClientJumpTree(ClientJumpTree jumpTree){ this.jumpTree = jumpTree; } 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 dddee337..fb224439 100644 --- a/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java +++ b/src/main/java/electrosphere/entity/state/movement/groundmove/ServerGroundMovementTree.java @@ -1,6 +1,7 @@ package electrosphere.entity.state.movement.groundmove; +import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils; import electrosphere.net.synchronization.FieldIdEnums; import electrosphere.net.parser.net.message.SynchronizationMessage; diff --git a/src/main/java/electrosphere/entity/state/movement/jump/ClientJumpTree.java b/src/main/java/electrosphere/entity/state/movement/jump/ClientJumpTree.java new file mode 100644 index 00000000..3d64e035 --- /dev/null +++ b/src/main/java/electrosphere/entity/state/movement/jump/ClientJumpTree.java @@ -0,0 +1,276 @@ +package electrosphere.entity.state.movement.jump; + + +import electrosphere.net.synchronization.BehaviorTreeIdEnums; +import org.ode4j.math.DVector3C; +import org.ode4j.ode.DBody; + +import electrosphere.collision.PhysicsEntityUtils; +import electrosphere.engine.Globals; +import electrosphere.entity.Entity; +import electrosphere.entity.EntityDataStrings; +import electrosphere.entity.EntityUtils; +import electrosphere.entity.btree.BehaviorTree; +import electrosphere.entity.state.AnimationPriorities; +import electrosphere.entity.state.client.firstPerson.FirstPersonTree; +import electrosphere.entity.state.gravity.GravityUtils; +import electrosphere.game.data.creature.type.movement.JumpMovementSystem; +import electrosphere.net.synchronization.annotation.SyncedField; +import electrosphere.net.synchronization.annotation.SynchronizableEnum; +import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree; +import electrosphere.renderer.actor.Actor; + +@SynchronizedBehaviorTree(name = "clientJumpTree", isServer = false, correspondingTree="serverJumpTree") +/* +Behavior tree for jumping +*/ +public class ClientJumpTree implements BehaviorTree { + + /** + * States for the jump tree + */ + @SynchronizableEnum + public static enum JumpState { + INACTIVE, + ACTIVE, + AWAITING_LAND, + } + + @SyncedField + JumpState state = JumpState.INACTIVE; + + @SyncedField + int currentFrame = 0; + + @SyncedField + float currentJumpForce = 0; + + String animationJump = "Armature|Jump"; + + JumpMovementSystem jumpData; + + Entity parent; + + int jumpFrames = 0; + float jumpForce = 10.0f; + + static final float jumpFalloff = 0.99f; + + public ClientJumpTree(Entity parent, JumpMovementSystem jumpData){ + this.parent = parent; + this.jumpFrames = jumpData.getJumpFrames(); + this.jumpForce = jumpData.getJumpForce(); + this.jumpData = jumpData; + } + + public void start(){ + // if(state == JumpState.INACTIVE){ + state = JumpState.ACTIVE; + currentFrame = 0; + currentJumpForce = jumpForce; + GravityUtils.clientAttemptActivateGravity(parent); + // } + } + + @Override + public void simulate(float deltaTime) { + Actor entityActor = EntityUtils.getActor(parent); + switch(state){ + case ACTIVE: + if(entityActor != null){ + if(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(jumpData.getAnimationJump().getNameThirdPerson())){ + entityActor.playAnimation(jumpData.getAnimationJump().getNameThirdPerson(),AnimationPriorities.getValue(AnimationPriorities.MOVEMENT_MODIFIER)); + entityActor.incrementAnimationTime(0.0001); + } + FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, jumpData.getAnimationJump()); + } + currentFrame++; + currentJumpForce = currentJumpForce * jumpFalloff; + //stop body falling if it is + DBody body = PhysicsEntityUtils.getDBody(parent); + DVector3C linearVelocity = body.getLinearVel(); + body.setLinearVel(linearVelocity.get0(), 0, linearVelocity.get2()); + //push parent up + body.addForce(0, currentJumpForce, 0); + //potentially disable + if(currentFrame >= jumpFrames){ + state = JumpState.AWAITING_LAND; + GravityUtils.clientAttemptActivateGravity(parent); + } + break; + case INACTIVE: + break; + case AWAITING_LAND: + break; + } + } + + /** + *
+ * Gets the ClientJumpTree of the entity + *
+ * @param entity the entity + * @return The ClientJumpTree + */ + public static ClientJumpTree getClientJumpTree(Entity entity){ + return (ClientJumpTree)entity.getData(EntityDataStrings.TREE_CLIENTJUMPTREE); + } + + public void land(){ + if(state != JumpState.INACTIVE && currentFrame > 2){ + state = JumpState.INACTIVE; + } + } + + public boolean isJumping(){ + return state == JumpState.ACTIVE; + } + + String determineCorrectAnimation(){ + return animationJump; + } + + public void setAnimationJump(String animationName){ + animationJump = animationName; + } + + /** + *Automatically generated
+ *+ * Gets state. + *
+ */ + public JumpState getState(){ + return state; + } + + /** + *Automatically generated
+ *+ * Sets state and handles the synchronization logic for it. + *
+ * @param state The value to set state to. + */ + public void setState(JumpState state){ + this.state = state; + } + + /** + *(initially) Automatically generated
+ *More parameters can be safely added to this method
+ *+ * Attaches this tree to the entity. + *
+ * @param entity The entity to attach to + * @param tree The behavior tree to attach + */ + public static ClientJumpTree attachTree(Entity parent, JumpMovementSystem jumpData){ + ClientJumpTree rVal = new ClientJumpTree(parent, jumpData); + //put manual code here (setting params, etc) + + + //!!WARNING!! from here below should not be touched + //This was generated automatically to properly alert various systems that the btree exists and should be tracked + parent.putData(EntityDataStrings.TREE_CLIENTJUMPTREE, rVal); + Globals.clientSceneWrapper.getScene().registerBehaviorTree(rVal); + Globals.entityValueTrackingService.attachTreeToEntity(parent, BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID); + return rVal; + } + + /** + *Automatically generated
+ *+ * Detatches this tree from the entity. + *
+ * @param entity The entity to detach to + * @param tree The behavior tree to detach + */ + public static void detachTree(Entity entity, BehaviorTree tree){ + Globals.entityValueTrackingService.detatchTreeFromEntity(entity, BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID); + } + + /** + *Automatically generated
+ *+ * Converts this enum type to an equivalent short value + *
+ * @param enumVal The enum value + * @return The short value + */ + public static short getJumpStateEnumAsShort(JumpState enumVal){ + switch(enumVal){ + case INACTIVE: + return 0; + case ACTIVE: + return 1; + case AWAITING_LAND: + return 2; + default: + return 0; + } + } + + /** + *Automatically generated
+ *+ * Converts a short to the equivalent enum value + *
+ * @param shortVal The short value + * @return The enum value + */ + public static JumpState getJumpStateShortAsEnum(short shortVal){ + switch(shortVal){ + case 0: + return JumpState.INACTIVE; + case 1: + return JumpState.ACTIVE; + case 2: + return JumpState.AWAITING_LAND; + default: + return JumpState.INACTIVE; + } + } + + /** + *Automatically generated
+ *+ * Gets currentFrame. + *
+ */ + public int getCurrentFrame(){ + return currentFrame; + } + + /** + *Automatically generated
+ *+ * Sets currentFrame and handles the synchronization logic for it. + *
+ * @param currentFrame The value to set currentFrame to. + */ + public void setCurrentFrame(int currentFrame){ + this.currentFrame = currentFrame; + } + + /** + *Automatically generated
+ *+ * Gets currentJumpForce. + *
+ */ + public float getCurrentJumpForce(){ + return currentJumpForce; + } + + /** + *Automatically generated
+ *+ * Sets currentJumpForce and handles the synchronization logic for it. + *
+ * @param currentJumpForce The value to set currentJumpForce to. + */ + public void setCurrentJumpForce(float currentJumpForce){ + this.currentJumpForce = currentJumpForce; + } + +} diff --git a/src/main/java/electrosphere/entity/state/movement/jump/JumpTree.java b/src/main/java/electrosphere/entity/state/movement/jump/JumpTree.java deleted file mode 100644 index e6d545eb..00000000 --- a/src/main/java/electrosphere/entity/state/movement/jump/JumpTree.java +++ /dev/null @@ -1,112 +0,0 @@ -package electrosphere.entity.state.movement.jump; - -import org.ode4j.math.DVector3C; -import org.ode4j.ode.DBody; - -import electrosphere.collision.PhysicsEntityUtils; -import electrosphere.engine.Globals; -import electrosphere.entity.Entity; -import electrosphere.entity.EntityDataStrings; -import electrosphere.entity.EntityUtils; -import electrosphere.entity.btree.BehaviorTree; -import electrosphere.entity.state.AnimationPriorities; -import electrosphere.entity.state.client.firstPerson.FirstPersonTree; -import electrosphere.entity.state.gravity.GravityUtils; -import electrosphere.game.data.creature.type.movement.JumpMovementSystem; -import electrosphere.renderer.actor.Actor; - -public class JumpTree implements BehaviorTree { - - public static enum JumpState { - INACTIVE, - ACTIVE, - AWAITING_LAND, - } - - JumpState state = JumpState.INACTIVE; - - String animationJump = "Armature|Jump"; - - JumpMovementSystem jumpData; - - Entity parent; - - int jumpFrames = 0; - int currentFrame = 0; - float jumpForce = 10.0f; - float currentJumpForce = jumpForce; - - static final float jumpFalloff = 0.99f; - - public JumpTree(Entity parent, int jumpFrames, float jumpForce, JumpMovementSystem jumpData){ - this.parent = parent; - this.jumpFrames = jumpFrames; - this.jumpForce = jumpForce; - this.jumpData = jumpData; - } - - public void start(){ - // if(state == JumpState.INACTIVE){ - state = JumpState.ACTIVE; - currentFrame = 0; - currentJumpForce = jumpForce; - GravityUtils.clientAttemptActivateGravity(parent); - // } - } - - @Override - public void simulate(float deltaTime) { - Actor entityActor = EntityUtils.getActor(parent); - switch(state){ - case ACTIVE: - if(entityActor != null){ - if(!entityActor.isPlayingAnimation() || !entityActor.isPlayingAnimation(jumpData.getAnimationJump().getNameThirdPerson())){ - entityActor.playAnimation(jumpData.getAnimationJump().getNameThirdPerson(),AnimationPriorities.getValue(AnimationPriorities.MOVEMENT_MODIFIER)); - entityActor.incrementAnimationTime(0.0001); - } - FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, jumpData.getAnimationJump()); - } - currentFrame++; - currentJumpForce = currentJumpForce * jumpFalloff; - //stop body falling if it is - DBody body = PhysicsEntityUtils.getDBody(parent); - DVector3C linearVelocity = body.getLinearVel(); - body.setLinearVel(linearVelocity.get0(), 0, linearVelocity.get2()); - //push parent up - body.addForce(0, currentJumpForce, 0); - //potentially disable - if(currentFrame >= jumpFrames){ - state = JumpState.AWAITING_LAND; - GravityUtils.clientAttemptActivateGravity(parent); - } - break; - case INACTIVE: - break; - case AWAITING_LAND: - break; - } - } - - public static JumpTree getClientJumpTree(Entity parent){ - return (JumpTree)parent.getData(EntityDataStrings.CLIENT_JUMP_TREE); - } - - public void land(){ - if(state != JumpState.INACTIVE && currentFrame > 2){ - state = JumpState.INACTIVE; - } - } - - public boolean isJumping(){ - return state == JumpState.ACTIVE; - } - - String determineCorrectAnimation(){ - return animationJump; - } - - public void setAnimationJump(String animationName){ - animationJump = animationName; - } - -} diff --git a/src/main/java/electrosphere/entity/state/movement/jump/ServerJumpTree.java b/src/main/java/electrosphere/entity/state/movement/jump/ServerJumpTree.java index bbf643d9..f54d74e9 100644 --- a/src/main/java/electrosphere/entity/state/movement/jump/ServerJumpTree.java +++ b/src/main/java/electrosphere/entity/state/movement/jump/ServerJumpTree.java @@ -1,5 +1,12 @@ package electrosphere.entity.state.movement.jump; + +import electrosphere.net.synchronization.FieldIdEnums; +import electrosphere.net.synchronization.BehaviorTreeIdEnums; +import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils; +import electrosphere.net.parser.net.message.SynchronizationMessage; +import electrosphere.server.datacell.utils.DataCellSearchUtils; +import electrosphere.engine.Globals; import org.ode4j.math.DVector3C; import org.ode4j.ode.DBody; @@ -10,38 +17,47 @@ import electrosphere.entity.EntityUtils; import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.state.AnimationPriorities; import electrosphere.entity.state.gravity.GravityUtils; +import electrosphere.entity.state.movement.jump.ClientJumpTree.JumpState; +import electrosphere.game.data.creature.type.movement.JumpMovementSystem; +import electrosphere.net.synchronization.annotation.SyncedField; +import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree; import electrosphere.server.poseactor.PoseActor; +@SynchronizedBehaviorTree(name = "serverJumpTree", isServer = true, correspondingTree="clientJumpTree") +/* +Behavior tree for movement in an entity +*/ public class ServerJumpTree implements BehaviorTree { - static enum JumpState { - INACTIVE, - ACTIVE, - AWAITING_LAND, - } - + @SyncedField JumpState state = JumpState.INACTIVE; + @SyncedField + int currentFrame = 0; + + @SyncedField + float currentJumpForce = 0; + String animationJump = "Armature|Jump"; Entity parent; int jumpFrames = 0; - int currentFrame = 0; float jumpForce = 10.0f; - float currentJumpForce = jumpForce; + JumpMovementSystem jumpData; static final float jumpFalloff = 0.99f; - public ServerJumpTree(Entity parent, int jumpFrames, float jumpForce){ + public ServerJumpTree(Entity parent, JumpMovementSystem jumpData){ this.parent = parent; - this.jumpFrames = jumpFrames; - this.jumpForce = jumpForce; + this.jumpFrames = jumpData.getJumpFrames(); + this.jumpForce = jumpData.getJumpForce(); + this.jumpData = jumpData; } public void start(){ if(state == JumpState.INACTIVE){ - state = JumpState.ACTIVE; + this.setState(JumpState.ACTIVE); currentFrame = 0; currentJumpForce = jumpForce; GravityUtils.serverAttemptActivateGravity(parent); @@ -81,8 +97,15 @@ public class ServerJumpTree implements BehaviorTree { } } - public static ServerJumpTree getServerJumpTree(Entity parent){ - return (ServerJumpTree)parent.getData(EntityDataStrings.SERVER_JUMP_TREE); + /** + *+ * Gets the ServerJumpTree of the entity + *
+ * @param entity the entity + * @return The ServerJumpTree + */ + public static ServerJumpTree getServerJumpTree(Entity entity){ + return (ServerJumpTree)entity.getData(EntityDataStrings.TREE_SERVERJUMPTREE); } public void land(){ @@ -103,4 +126,105 @@ public class ServerJumpTree implements BehaviorTree { animationJump = animationName; } + /** + *Automatically generated
+ *+ * Gets state. + *
+ */ + public JumpState getState(){ + return state; + } + + /** + *Automatically generated
+ *+ * Sets state and handles the synchronization logic for it. + *
+ * @param state The value to set state to. + */ + public void setState(JumpState state){ + this.state = state; + int value = ClientJumpTree.getJumpStateEnumAsShort(state); + DataCellSearchUtils.getEntityDataCell(parent).broadcastNetworkMessage(SynchronizationMessage.constructUpdateClientStateMessage(parent.getId(), BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID, FieldIdEnums.TREE_SERVERJUMPTREE_SYNCEDFIELD_STATE_ID, value)); + } + + /** + *(initially) Automatically generated
+ *More parameters can be safely added to this method
+ *+ * Attaches this tree to the entity. + *
+ * @param entity The entity to attach to + * @param tree The behavior tree to attach + */ + public static ServerJumpTree attachTree(Entity parent, JumpMovementSystem jumpData){ + ServerJumpTree rVal = new ServerJumpTree(parent, jumpData); + //put manual code here (setting params, etc) + + + //!!WARNING!! from here below should not be touched + //This was generated automatically to properly alert various systems that the btree exists and should be tracked + ServerBehaviorTreeUtils.attachBTreeToEntity(parent, rVal); + parent.putData(EntityDataStrings.TREE_SERVERJUMPTREE, rVal); + Globals.entityValueTrackingService.attachTreeToEntity(parent, BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID); + return rVal; + } + + /** + *Automatically generated
+ *+ * Detatches this tree from the entity. + *
+ * @param entity The entity to detach to + * @param tree The behavior tree to detach + */ + public static void detachTree(Entity entity, BehaviorTree tree){ + Globals.entityValueTrackingService.detatchTreeFromEntity(entity, BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID); + } + + /** + *Automatically generated
+ *+ * Gets currentFrame. + *
+ */ + public int getCurrentFrame(){ + return currentFrame; + } + + /** + *Automatically generated
+ *+ * Sets currentFrame and handles the synchronization logic for it. + *
+ * @param currentFrame The value to set currentFrame to. + */ + public void setCurrentFrame(int currentFrame){ + this.currentFrame = currentFrame; + DataCellSearchUtils.getEntityDataCell(parent).broadcastNetworkMessage(SynchronizationMessage.constructUpdateClientIntStateMessage(parent.getId(), BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID, FieldIdEnums.TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTFRAME_ID, currentFrame)); + } + + /** + *Automatically generated
+ *+ * Gets currentJumpForce. + *
+ */ + public float getCurrentJumpForce(){ + return currentJumpForce; + } + + /** + *Automatically generated
+ *+ * Sets currentJumpForce and handles the synchronization logic for it. + *
+ * @param currentJumpForce The value to set currentJumpForce to. + */ + public void setCurrentJumpForce(float currentJumpForce){ + this.currentJumpForce = currentJumpForce; + DataCellSearchUtils.getEntityDataCell(parent).broadcastNetworkMessage(SynchronizationMessage.constructUpdateClientFloatStateMessage(parent.getId(), BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID, FieldIdEnums.TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTJUMPFORCE_ID, currentJumpForce)); + } + } diff --git a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java index c79c1402..da819088 100644 --- a/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java +++ b/src/main/java/electrosphere/entity/types/creature/CreatureUtils.java @@ -39,7 +39,7 @@ import electrosphere.entity.state.movement.ServerSprintTree; import electrosphere.entity.state.movement.SprintTree; import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree; import electrosphere.entity.state.movement.groundmove.ServerGroundMovementTree; -import electrosphere.entity.state.movement.jump.JumpTree; +import electrosphere.entity.state.movement.jump.ClientJumpTree; import electrosphere.entity.state.movement.jump.ServerJumpTree; import electrosphere.entity.state.rotator.RotatorHierarchyNode; import electrosphere.entity.state.rotator.RotatorTree; @@ -170,7 +170,7 @@ public class CreatureUtils { // Jump case JumpMovementSystem.JUMP_MOVEMENT_SYSTEM: JumpMovementSystem jumpMovementSystem = (JumpMovementSystem)movementSystem; - JumpTree jumpTree = new JumpTree(rVal, jumpMovementSystem.getJumpFrames(), jumpMovementSystem.getJumpForce(), jumpMovementSystem); + ClientJumpTree jumpTree = ClientJumpTree.attachTree(rVal, jumpMovementSystem); if(jumpMovementSystem.getAnimationJump() != null){ jumpTree.setAnimationJump(jumpMovementSystem.getAnimationJump().getNameThirdPerson()); } @@ -180,8 +180,6 @@ public class CreatureUtils { if(FallTree.getFallTree(rVal)!=null){ FallTree.getFallTree(rVal).setJumpTree(jumpTree); } - rVal.putData(EntityDataStrings.CLIENT_JUMP_TREE, jumpTree); - Globals.clientScene.registerBehaviorTree(jumpTree); break; // // Falling @@ -191,8 +189,8 @@ public class CreatureUtils { if(CreatureUtils.clientGetEntityMovementTree(rVal) != null && CreatureUtils.clientGetEntityMovementTree(rVal) instanceof ClientGroundMovementTree){ ((ClientGroundMovementTree)CreatureUtils.clientGetEntityMovementTree(rVal)).setClientFallTree(fallTree); } - if(JumpTree.getClientJumpTree(rVal)!=null){ - fallTree.setJumpTree(JumpTree.getClientJumpTree(rVal)); + if(ClientJumpTree.getClientJumpTree(rVal)!=null){ + fallTree.setJumpTree(ClientJumpTree.getClientJumpTree(rVal)); } rVal.putData(EntityDataStrings.FALL_TREE, fallTree); Globals.clientScene.registerBehaviorTree(fallTree); @@ -443,7 +441,7 @@ public class CreatureUtils { // Jump case JumpMovementSystem.JUMP_MOVEMENT_SYSTEM: JumpMovementSystem jumpMovementSystem = (JumpMovementSystem)movementSystem; - ServerJumpTree jumpTree = new ServerJumpTree(rVal, jumpMovementSystem.getJumpFrames(), jumpMovementSystem.getJumpForce()); + ServerJumpTree jumpTree = ServerJumpTree.attachTree(rVal, jumpMovementSystem); if(jumpMovementSystem.getAnimationJump() != null){ jumpTree.setAnimationJump(jumpMovementSystem.getAnimationJump().getNameThirdPerson()); } @@ -453,8 +451,6 @@ public class CreatureUtils { if(ServerFallTree.getFallTree(rVal)!=null){ ServerFallTree.getFallTree(rVal).setServerJumpTree(jumpTree); } - rVal.putData(EntityDataStrings.SERVER_JUMP_TREE, jumpTree); - ServerBehaviorTreeUtils.attachBTreeToEntity(rVal, jumpTree); break; // // Falling diff --git a/src/main/java/electrosphere/net/client/protocol/SynchronizationProtocol.java b/src/main/java/electrosphere/net/client/protocol/SynchronizationProtocol.java index 1779d7f4..875cd7f1 100644 --- a/src/main/java/electrosphere/net/client/protocol/SynchronizationProtocol.java +++ b/src/main/java/electrosphere/net/client/protocol/SynchronizationProtocol.java @@ -18,13 +18,18 @@ public class SynchronizationProtocol implements ClientProtocolTemplate