Walk tree
This commit is contained in:
parent
89a0df81a5
commit
4db2de576a
@ -189,6 +189,10 @@
|
|||||||
"priorityCategory" : "MOVEMENT_MODIFIER"
|
"priorityCategory" : "MOVEMENT_MODIFIER"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type" : "WALK",
|
||||||
|
"modifier": 0.3
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"rotatorSystem" : {
|
"rotatorSystem" : {
|
||||||
|
|||||||
@ -13,9 +13,11 @@
|
|||||||
|
|
||||||
+ fix the vibes
|
+ fix the vibes
|
||||||
Stability
|
Stability
|
||||||
|
Recoil State on attack
|
||||||
Movement penalty while swinging weapon
|
Movement penalty while swinging weapon
|
||||||
Ticketed randomizer node for BTs to more heavily weight attacking and waiting
|
Ticketed randomizer node for BTs to more heavily weight attacking and waiting
|
||||||
Slow down strafe movement somehow
|
Slow down strafe movement somehow
|
||||||
|
|
||||||
+ bug fixes
|
+ bug fixes
|
||||||
Fix grass rendering distance
|
Fix grass rendering distance
|
||||||
|
Fix hitbox audio not playing spatially
|
||||||
|
|||||||
@ -576,15 +576,14 @@ True behavior trees
|
|||||||
Melee ai using BT framework
|
Melee ai using BT framework
|
||||||
Server block nullchecks
|
Server block nullchecks
|
||||||
Melee AI tweaks
|
Melee AI tweaks
|
||||||
|
Walk tree
|
||||||
|
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
|
|
||||||
BIG BIG BIG BIG IMMEDIATE TO DO:
|
IMMEDIATE SCALING ISSUES
|
||||||
always enforce opengl interface across all opengl calls jesus christ the bone uniform bug was impossible
|
- Always enforce opengl interface across all opengl calls jesus christ the bone uniform bug was impossible
|
||||||
|
|
||||||
Rename "BehaviorTree" to be "Component" (what it actually is)
|
|
||||||
|
|
||||||
Ability to fully reload game engine state without exiting client
|
Ability to fully reload game engine state without exiting client
|
||||||
- Back out to main menu and load a new level without any values persisting
|
- Back out to main menu and load a new level without any values persisting
|
||||||
@ -595,6 +594,23 @@ Unit Testing
|
|||||||
- Ability to click through the ui via scripts
|
- Ability to click through the ui via scripts
|
||||||
- Add ui tests
|
- Add ui tests
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
- Fix hitbox placement does not scale with entity scale on server
|
||||||
|
- Fix not all grass tiles update when updating a nearby voxel (ie it doesn't go into negative coordinates to scan for foliage updates)
|
||||||
|
- Fix typescript load error
|
||||||
|
|
||||||
|
Startup Performance
|
||||||
|
- Cache loaded typescript
|
||||||
|
- Allow texture map to bind multiple model paths to a single set of mesh->textures
|
||||||
|
- Cache texture atlas for terrain
|
||||||
|
|
||||||
|
Code Generation
|
||||||
|
- Generate static "hasXComponent", "getXComponent" functions on sync'd components
|
||||||
|
|
||||||
|
Code cleanup
|
||||||
|
- Rename "BehaviorTree" to be "Component" (what it actually is)
|
||||||
|
- Refactor ground movement components
|
||||||
|
- Refactor menu clases under electrosphere.client package
|
||||||
|
|
||||||
Goof off today requirements:
|
Goof off today requirements:
|
||||||
Transvoxel implementation
|
Transvoxel implementation
|
||||||
@ -607,26 +623,13 @@ Transvoxel implementation
|
|||||||
Terrain Interface Positional Access Interface
|
Terrain Interface Positional Access Interface
|
||||||
- Ability to get terrain at point for interactions with game world eg placing grass/water collision
|
- Ability to get terrain at point for interactions with game world eg placing grass/water collision
|
||||||
|
|
||||||
Fix hitbox placement does not scale with entity scale on server
|
|
||||||
|
|
||||||
Fix not all grass tiles update when updating a nearby voxel (ie it doesn't go into negative coordinates to scan for foliage updates)
|
|
||||||
|
|
||||||
Fix typescript load error
|
|
||||||
|
|
||||||
Refactor menu clases under electrosphere.client package
|
|
||||||
|
|
||||||
Allow texture map to bind multiple model paths to a single set of mesh->textures
|
|
||||||
|
|
||||||
Cache texture atlas for terrain
|
|
||||||
|
|
||||||
Rework how chunks are written to disk to make them more cache friendly
|
Rework how chunks are written to disk to make them more cache friendly
|
||||||
- IE, write consecutively higher LOD levels the further into the file, so that you can read just the first few bytes if its a far away chunk
|
- IE, write consecutively higher LOD levels the further into the file, so that you can read just the first few bytes if its a far away chunk
|
||||||
|
|
||||||
|
Bug fixes
|
||||||
Fix voxel type selection menu not showing textures
|
- Fix voxel type selection menu not showing textures
|
||||||
- The quads are off screen because the calculation for ndcX/ndcY are putting it wayyy to the right -- will need to revisit calcs for all that
|
- The quads are off screen because the calculation for ndcX/ndcY are putting it wayyy to the right -- will need to revisit calcs for all that
|
||||||
|
- Fix being able to walk off far side of the world (ie in level editor)
|
||||||
Fix being able to walk off far side of the world (ie in level editor)
|
|
||||||
|
|
||||||
Grass System properly LOD
|
Grass System properly LOD
|
||||||
- Have foliage dynamically time out cells to be reconsidered based on distance from player (if close, short cooldown, if far long cooldown)
|
- Have foliage dynamically time out cells to be reconsidered based on distance from player (if close, short cooldown, if far long cooldown)
|
||||||
@ -641,8 +644,6 @@ Refactor render flags
|
|||||||
Data Cleanup
|
Data Cleanup
|
||||||
- Clean up creatures
|
- Clean up creatures
|
||||||
- Remove unused ones
|
- Remove unused ones
|
||||||
- Fix values for movement now that physics has changed
|
|
||||||
- Fix characters bouncing when landing from a fall
|
|
||||||
- Clean up unused models
|
- Clean up unused models
|
||||||
- Clean up textures
|
- Clean up textures
|
||||||
- Move model textures into models
|
- Move model textures into models
|
||||||
@ -690,10 +691,10 @@ Light Manager
|
|||||||
- Point shadows ???
|
- Point shadows ???
|
||||||
|
|
||||||
gltf Support
|
gltf Support
|
||||||
- Fix bad data with human mesh textures not mapping
|
|
||||||
- Texture loading from gltf file
|
- Texture loading from gltf file
|
||||||
|
|
||||||
FileUtils sanitation function check if requested file is in game root dir
|
Security
|
||||||
|
- FileUtils sanitation function check if requested file is in game root dir
|
||||||
|
|
||||||
Cellular Automata Fluid Dynamics System
|
Cellular Automata Fluid Dynamics System
|
||||||
- Advect force
|
- Advect force
|
||||||
|
|||||||
@ -34,6 +34,7 @@ import static org.lwjgl.glfw.GLFW.GLFW_KEY_J;
|
|||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_K;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_K;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_L;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_L;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT;
|
||||||
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_ALT;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_CONTROL;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_CONTROL;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_SHIFT;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_SHIFT;
|
||||||
import static org.lwjgl.glfw.GLFW.GLFW_KEY_M;
|
import static org.lwjgl.glfw.GLFW.GLFW_KEY_M;
|
||||||
@ -92,6 +93,7 @@ import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree;
|
|||||||
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementRelativeFacing;
|
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementRelativeFacing;
|
||||||
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementTreeState;
|
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementTreeState;
|
||||||
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
||||||
|
import electrosphere.entity.state.movement.speed.ClientWalkTree;
|
||||||
import electrosphere.entity.types.camera.CameraEntityUtils;
|
import electrosphere.entity.types.camera.CameraEntityUtils;
|
||||||
import electrosphere.entity.types.creature.CreatureUtils;
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
@ -130,6 +132,7 @@ public class ControlHandler {
|
|||||||
public static final String DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU = "inGameMainMenu";
|
public static final String DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU = "inGameMainMenu";
|
||||||
public static final String DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR = "crosshairLock";
|
public static final String DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR = "crosshairLock";
|
||||||
public static final String INPUT_CODE_SPRINT = "sprint";
|
public static final String INPUT_CODE_SPRINT = "sprint";
|
||||||
|
public static final String INPUT_CODE_WALK = "walk";
|
||||||
public static final String INPUT_CODE_INTERACT = "interact";
|
public static final String INPUT_CODE_INTERACT = "interact";
|
||||||
public static final String INPUT_CODE_DROP = "drop";
|
public static final String INPUT_CODE_DROP = "drop";
|
||||||
public static final String INPUT_CODE_INVENTORY_OPEN = "inventoryOpen";
|
public static final String INPUT_CODE_INVENTORY_OPEN = "inventoryOpen";
|
||||||
@ -318,6 +321,7 @@ public class ControlHandler {
|
|||||||
handler.addControl(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU, new Control(ControlType.KEY,GLFW_KEY_ESCAPE,false,"Main Menu","Opens the main menu while in game"));
|
handler.addControl(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU, new Control(ControlType.KEY,GLFW_KEY_ESCAPE,false,"Main Menu","Opens the main menu while in game"));
|
||||||
handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(ControlType.KEY,GLFW_KEY_CAPS_LOCK,false,"Lock On","Locks the camera onto the target"));
|
handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(ControlType.KEY,GLFW_KEY_CAPS_LOCK,false,"Lock On","Locks the camera onto the target"));
|
||||||
handler.addControl(INPUT_CODE_SPRINT, new Control(ControlType.KEY,GLFW_KEY_LEFT_SHIFT,false,"Sprint (hold)","Causes the player to sprint"));
|
handler.addControl(INPUT_CODE_SPRINT, new Control(ControlType.KEY,GLFW_KEY_LEFT_SHIFT,false,"Sprint (hold)","Causes the player to sprint"));
|
||||||
|
handler.addControl(INPUT_CODE_WALK, new Control(ControlType.KEY,GLFW_KEY_LEFT_ALT,false,"Walk (hold)","Causes the player to walk"));
|
||||||
handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E,false,"Interact","Interacts with whatever is targeted currently"));
|
handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E,false,"Interact","Interacts with whatever is targeted currently"));
|
||||||
handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y,false,"Drop","Drops the currently equipped item"));
|
handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y,false,"Drop","Drops the currently equipped item"));
|
||||||
handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I,false,"Inventory","Opens the player's inventory"));
|
handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I,false,"Inventory","Opens the player's inventory"));
|
||||||
@ -836,6 +840,23 @@ public class ControlHandler {
|
|||||||
}
|
}
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Walk
|
||||||
|
*/
|
||||||
|
mainGameControlList.add(controls.get(INPUT_CODE_WALK));
|
||||||
|
controls.get(INPUT_CODE_WALK).setOnPress(new ControlMethod(){public void execute(){
|
||||||
|
if(Globals.playerEntity != null && ClientWalkTree.getClientWalkTree(Globals.playerEntity) != null){
|
||||||
|
ClientWalkTree clientWalkTree = ClientWalkTree.getClientWalkTree(Globals.playerEntity);
|
||||||
|
clientWalkTree.start();
|
||||||
|
}
|
||||||
|
}});
|
||||||
|
controls.get(INPUT_CODE_WALK).setOnRelease(new ControlMethod(){public void execute(){
|
||||||
|
if(Globals.playerEntity != null && ClientWalkTree.getClientWalkTree(Globals.playerEntity) != null){
|
||||||
|
ClientWalkTree clientWalkTree = ClientWalkTree.getClientWalkTree(Globals.playerEntity);
|
||||||
|
clientWalkTree.interrupt();
|
||||||
|
}
|
||||||
|
}});
|
||||||
|
|
||||||
mainGameControlList.add(controls.get(ITEM_SECONDARY));
|
mainGameControlList.add(controls.get(ITEM_SECONDARY));
|
||||||
controls.get(ITEM_SECONDARY).setOnPress(new ControlMethod() {public void execute() {
|
controls.get(ITEM_SECONDARY).setOnPress(new ControlMethod() {public void execute() {
|
||||||
ItemActions.attemptSecondaryItemAction();
|
ItemActions.attemptSecondaryItemAction();
|
||||||
|
|||||||
@ -312,6 +312,12 @@ public class EntityDataStrings {
|
|||||||
public static final String TREE_CLIENTALWAYSUPRIGHTTREE = "treeClientAlwaysUprightTree";
|
public static final String TREE_CLIENTALWAYSUPRIGHTTREE = "treeClientAlwaysUprightTree";
|
||||||
public static final String TREE_SERVERALWAYSUPRIGHTTREE = "treeServerAlwaysUprightTree";
|
public static final String TREE_SERVERALWAYSUPRIGHTTREE = "treeServerAlwaysUprightTree";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Walk tree
|
||||||
|
*/
|
||||||
|
public static final String TREE_CLIENTWALKTREE = "treeClientWalkTree";
|
||||||
|
public static final String TREE_SERVERWALKTREE = "treeServerWalkTree";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Entity categories
|
Entity categories
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import electrosphere.entity.state.movement.FallTree;
|
|||||||
import electrosphere.entity.state.movement.SprintTree;
|
import electrosphere.entity.state.movement.SprintTree;
|
||||||
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
||||||
import electrosphere.entity.state.movement.jump.ClientJumpTree.JumpState;
|
import electrosphere.entity.state.movement.jump.ClientJumpTree.JumpState;
|
||||||
|
import electrosphere.entity.state.movement.speed.ClientWalkTree;
|
||||||
import electrosphere.net.parser.net.message.EntityMessage;
|
import electrosphere.net.parser.net.message.EntityMessage;
|
||||||
import electrosphere.net.synchronization.annotation.SyncedField;
|
import electrosphere.net.synchronization.annotation.SyncedField;
|
||||||
import electrosphere.net.synchronization.annotation.SynchronizableEnum;
|
import electrosphere.net.synchronization.annotation.SynchronizableEnum;
|
||||||
@ -193,12 +194,10 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void simulate(float deltaTime){
|
public void simulate(float deltaTime){
|
||||||
float velocity = CreatureUtils.getVelocity(parent);
|
|
||||||
float acceleration = CreatureUtils.getAcceleration(parent);
|
|
||||||
float maxNaturalVelocity = ServerGroundMovementTree.getMaximumVelocity(parent, this.groundMovementData, facing);
|
|
||||||
Actor entityActor = EntityUtils.getActor(parent);
|
Actor entityActor = EntityUtils.getActor(parent);
|
||||||
Vector3d position = EntityUtils.getPosition(parent);
|
Vector3d position = EntityUtils.getPosition(parent);
|
||||||
Vector3d facingVector = CreatureUtils.getFacingVector(parent);
|
Vector3d facingVector = CreatureUtils.getFacingVector(parent);
|
||||||
|
float maxNaturalVelocity = ServerGroundMovementTree.getMaximumVelocity(parent, this.groundMovementData, facing);
|
||||||
DBody body = PhysicsEntityUtils.getDBody(parent);
|
DBody body = PhysicsEntityUtils.getDBody(parent);
|
||||||
DVector3C linearVelocity = body.getLinearVel();
|
DVector3C linearVelocity = body.getLinearVel();
|
||||||
|
|
||||||
@ -309,8 +308,8 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
//conditionally play footstep audio
|
//conditionally play footstep audio
|
||||||
this.playFootstepAudio(0,entityActor.getAnimationTime(animationToPlay),position);
|
this.playFootstepAudio(0,entityActor.getAnimationTime(animationToPlay),position);
|
||||||
|
|
||||||
//run startup code
|
this.updateVelocity();
|
||||||
velocity = velocity + acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
float velocity = this.getModifiedVelocity();
|
||||||
//check if can transition state
|
//check if can transition state
|
||||||
if(velocity >= maxNaturalVelocity){
|
if(velocity >= maxNaturalVelocity){
|
||||||
velocity = maxNaturalVelocity;
|
velocity = maxNaturalVelocity;
|
||||||
@ -347,10 +346,8 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
//conditionally play footstep audio
|
//conditionally play footstep audio
|
||||||
this.playFootstepAudio(0,entityActor.getAnimationTime(animationToPlay),position);
|
this.playFootstepAudio(0,entityActor.getAnimationTime(animationToPlay),position);
|
||||||
|
|
||||||
if(velocity != maxNaturalVelocity){
|
this.updateVelocity();
|
||||||
velocity = maxNaturalVelocity;
|
float velocity = this.getModifiedVelocity();
|
||||||
CreatureUtils.setVelocity(parent, velocity);
|
|
||||||
}
|
|
||||||
body.setLinearVel(
|
body.setLinearVel(
|
||||||
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
||||||
linearVelocity.get1(),
|
linearVelocity.get1(),
|
||||||
@ -384,7 +381,8 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
this.playFootstepAudio(0,entityActor.getAnimationTime(animationToPlay),position);
|
this.playFootstepAudio(0,entityActor.getAnimationTime(animationToPlay),position);
|
||||||
|
|
||||||
//velocity stuff
|
//velocity stuff
|
||||||
velocity = velocity - acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
this.updateVelocity();
|
||||||
|
float velocity = this.getModifiedVelocity();
|
||||||
//check if can transition state
|
//check if can transition state
|
||||||
if(velocity <= 0){
|
if(velocity <= 0){
|
||||||
velocity = 0;
|
velocity = 0;
|
||||||
@ -395,8 +393,8 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
entityActor.stopAnimation(animationToPlay);
|
entityActor.stopAnimation(animationToPlay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
CreatureUtils.setVelocity(parent, velocity);
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
|
}
|
||||||
body.setLinearVel(
|
body.setLinearVel(
|
||||||
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
||||||
linearVelocity.get1(),
|
linearVelocity.get1(),
|
||||||
@ -461,6 +459,49 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
this.fallTree = fallTree;
|
this.fallTree = fallTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the velocity and acceleration
|
||||||
|
*/
|
||||||
|
private void updateVelocity(){
|
||||||
|
float velocity = CreatureUtils.getVelocity(parent);
|
||||||
|
float acceleration = CreatureUtils.getAcceleration(parent);
|
||||||
|
float maxNaturalVelocity = ServerGroundMovementTree.getMaximumVelocity(parent, this.groundMovementData, facing);
|
||||||
|
switch(this.state){
|
||||||
|
case IDLE: {
|
||||||
|
} break;
|
||||||
|
case STARTUP: {
|
||||||
|
//run startup code
|
||||||
|
velocity = velocity + acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
||||||
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
|
} break;
|
||||||
|
case MOVE: {
|
||||||
|
if(velocity != maxNaturalVelocity){
|
||||||
|
velocity = maxNaturalVelocity;
|
||||||
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case SLOWDOWN: {
|
||||||
|
//velocity stuff
|
||||||
|
velocity = velocity - acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
||||||
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the velocity to move at
|
||||||
|
* @return The velocity
|
||||||
|
*/
|
||||||
|
private float getModifiedVelocity(){
|
||||||
|
float velocity = CreatureUtils.getVelocity(parent);
|
||||||
|
float sprintModifier = 1.0f;
|
||||||
|
float walkModifier = 1.0f;
|
||||||
|
if(ClientWalkTree.getClientWalkTree(parent) != null && ClientWalkTree.getClientWalkTree(parent).isWalking()){
|
||||||
|
walkModifier = ClientWalkTree.getClientWalkTree(parent).getModifier();
|
||||||
|
}
|
||||||
|
return velocity * sprintModifier * walkModifier;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Conditionally plays audio for footsteps
|
* Conditionally plays audio for footsteps
|
||||||
* @param voxelType The voxel type
|
* @param voxelType The voxel type
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import electrosphere.entity.state.movement.ServerSprintTree;
|
|||||||
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementRelativeFacing;
|
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementRelativeFacing;
|
||||||
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementTreeState;
|
import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementTreeState;
|
||||||
import electrosphere.entity.state.movement.jump.ServerJumpTree;
|
import electrosphere.entity.state.movement.jump.ServerJumpTree;
|
||||||
|
import electrosphere.entity.state.movement.speed.ServerWalkTree;
|
||||||
import electrosphere.entity.state.server.ServerPlayerViewDirTree;
|
import electrosphere.entity.state.server.ServerPlayerViewDirTree;
|
||||||
import electrosphere.net.parser.net.message.EntityMessage;
|
import electrosphere.net.parser.net.message.EntityMessage;
|
||||||
import electrosphere.net.synchronization.annotation.SyncedField;
|
import electrosphere.net.synchronization.annotation.SyncedField;
|
||||||
@ -158,12 +159,8 @@ public class ServerGroundMovementTree implements BehaviorTree {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void simulate(float deltaTime){
|
public void simulate(float deltaTime){
|
||||||
float velocity = 0;
|
|
||||||
float acceleration = 0;
|
|
||||||
float maxNaturalVelocity = 0;
|
float maxNaturalVelocity = 0;
|
||||||
if(CreatureUtils.hasVelocity(parent)){
|
if(CreatureUtils.hasVelocity(parent)){
|
||||||
velocity = CreatureUtils.getVelocity(parent);
|
|
||||||
acceleration = CreatureUtils.getAcceleration(parent);
|
|
||||||
maxNaturalVelocity = ServerGroundMovementTree.getMaximumVelocity(parent, this.groundMovementSystem, facing);
|
maxNaturalVelocity = ServerGroundMovementTree.getMaximumVelocity(parent, this.groundMovementSystem, facing);
|
||||||
}
|
}
|
||||||
if(ServerPlayerViewDirTree.hasTree(parent)){
|
if(ServerPlayerViewDirTree.hasTree(parent)){
|
||||||
@ -265,19 +262,14 @@ public class ServerGroundMovementTree implements BehaviorTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//run startup code
|
//run startup code
|
||||||
velocity = velocity + acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
this.updateVelocity();
|
||||||
|
float velocity = this.getModifiedVelocity();
|
||||||
//check if can transition state
|
//check if can transition state
|
||||||
if(velocity >= maxNaturalVelocity){
|
if(velocity >= maxNaturalVelocity){
|
||||||
velocity = maxNaturalVelocity;
|
velocity = maxNaturalVelocity;
|
||||||
state = MovementTreeState.MOVE;
|
state = MovementTreeState.MOVE;
|
||||||
}
|
|
||||||
CreatureUtils.setVelocity(parent, velocity);
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
// //actually update
|
}
|
||||||
// PhysicsEntityUtils.getDBody(parent).addForce(
|
|
||||||
// movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
|
||||||
// linearVelocity.get1(),
|
|
||||||
// movementVector.z * velocity * Globals.timekeeper.getSimFrameTime()
|
|
||||||
// );
|
|
||||||
PhysicsEntityUtils.getDBody(parent).setLinearVel(
|
PhysicsEntityUtils.getDBody(parent).setLinearVel(
|
||||||
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
||||||
linearVelocity.get1(),
|
linearVelocity.get1(),
|
||||||
@ -320,22 +312,14 @@ public class ServerGroundMovementTree implements BehaviorTree {
|
|||||||
poseActor.incrementAnimationTime(0.0001);
|
poseActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(velocity != maxNaturalVelocity){
|
this.updateVelocity();
|
||||||
velocity = maxNaturalVelocity;
|
float velocity = this.getModifiedVelocity();
|
||||||
CreatureUtils.setVelocity(parent, velocity);
|
|
||||||
}
|
|
||||||
// PhysicsEntityUtils.getDBody(parent).addForce(
|
|
||||||
// movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
|
||||||
// linearVelocity.get1(),
|
|
||||||
// movementVector.z * velocity * Globals.timekeeper.getSimFrameTime()
|
|
||||||
// );
|
|
||||||
PhysicsEntityUtils.getDBody(parent).setLinearVel(
|
PhysicsEntityUtils.getDBody(parent).setLinearVel(
|
||||||
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
||||||
linearVelocity.get1(),
|
linearVelocity.get1(),
|
||||||
movementVector.z * velocity * Globals.timekeeper.getSimFrameTime()
|
movementVector.z * velocity * Globals.timekeeper.getSimFrameTime()
|
||||||
);
|
);
|
||||||
body.setAngularVel(0, 0, 0);
|
body.setAngularVel(0, 0, 0);
|
||||||
// position.set(newPosition);
|
|
||||||
|
|
||||||
GravityUtils.serverAttemptActivateGravity(parent);
|
GravityUtils.serverAttemptActivateGravity(parent);
|
||||||
|
|
||||||
@ -377,7 +361,8 @@ public class ServerGroundMovementTree implements BehaviorTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//velocity stuff
|
//velocity stuff
|
||||||
velocity = velocity - acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
this.updateVelocity();
|
||||||
|
float velocity = this.getModifiedVelocity();
|
||||||
//check if can transition state
|
//check if can transition state
|
||||||
if(velocity <= 0){
|
if(velocity <= 0){
|
||||||
velocity = 0;
|
velocity = 0;
|
||||||
@ -389,7 +374,6 @@ public class ServerGroundMovementTree implements BehaviorTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CreatureUtils.setVelocity(parent, velocity);
|
|
||||||
// PhysicsEntityUtils.getDBody(parent).addForce(
|
// PhysicsEntityUtils.getDBody(parent).addForce(
|
||||||
// movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
// movementVector.x * velocity * Globals.timekeeper.getSimFrameTime(),
|
||||||
// linearVelocity.get1(),
|
// linearVelocity.get1(),
|
||||||
@ -427,6 +411,49 @@ public class ServerGroundMovementTree implements BehaviorTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the velocity and acceleration
|
||||||
|
*/
|
||||||
|
private void updateVelocity(){
|
||||||
|
float velocity = CreatureUtils.getVelocity(parent);
|
||||||
|
float acceleration = CreatureUtils.getAcceleration(parent);
|
||||||
|
float maxNaturalVelocity = ServerGroundMovementTree.getMaximumVelocity(parent, this.groundMovementSystem, facing);
|
||||||
|
switch(this.state){
|
||||||
|
case IDLE: {
|
||||||
|
} break;
|
||||||
|
case STARTUP: {
|
||||||
|
//run startup code
|
||||||
|
velocity = velocity + acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
||||||
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
|
} break;
|
||||||
|
case MOVE: {
|
||||||
|
if(velocity != maxNaturalVelocity){
|
||||||
|
velocity = maxNaturalVelocity;
|
||||||
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case SLOWDOWN: {
|
||||||
|
//velocity stuff
|
||||||
|
velocity = velocity - acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
||||||
|
CreatureUtils.setVelocity(parent, velocity);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the velocity to move at
|
||||||
|
* @return The velocity
|
||||||
|
*/
|
||||||
|
private float getModifiedVelocity(){
|
||||||
|
float velocity = CreatureUtils.getVelocity(parent);
|
||||||
|
float sprintModifier = 1.0f;
|
||||||
|
float walkModifier = 1.0f;
|
||||||
|
if(ServerWalkTree.getServerWalkTree(parent) != null && ServerWalkTree.getServerWalkTree(parent).isWalking()){
|
||||||
|
walkModifier = ServerWalkTree.getServerWalkTree(parent).getModifier();
|
||||||
|
}
|
||||||
|
return velocity * sprintModifier * walkModifier;
|
||||||
|
}
|
||||||
|
|
||||||
public void addNetworkMessage(EntityMessage networkMessage) {
|
public void addNetworkMessage(EntityMessage networkMessage) {
|
||||||
networkMessageQueue.add(networkMessage);
|
networkMessageQueue.add(networkMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,6 +64,12 @@ public class ServerJumpTree implements BehaviorTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interrupts the tree
|
||||||
|
*/
|
||||||
|
public void interrupt(){
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void simulate(float deltaTime) {
|
public void simulate(float deltaTime) {
|
||||||
PoseActor poseActor = EntityUtils.getPoseActor(parent);
|
PoseActor poseActor = EntityUtils.getPoseActor(parent);
|
||||||
|
|||||||
@ -0,0 +1,220 @@
|
|||||||
|
package electrosphere.entity.state.movement.speed;
|
||||||
|
|
||||||
|
|
||||||
|
import electrosphere.net.synchronization.server.ServerSynchronizationManager;
|
||||||
|
import electrosphere.net.parser.net.message.SynchronizationMessage;
|
||||||
|
import electrosphere.net.synchronization.enums.BehaviorTreeIdEnums;
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.EntityDataStrings;
|
||||||
|
import electrosphere.entity.btree.BehaviorTree;
|
||||||
|
import electrosphere.game.data.creature.type.movement.WalkMovementSystem;
|
||||||
|
import electrosphere.net.synchronization.annotation.SyncedField;
|
||||||
|
import electrosphere.net.synchronization.annotation.SynchronizableEnum;
|
||||||
|
import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree;
|
||||||
|
|
||||||
|
@SynchronizedBehaviorTree(
|
||||||
|
name = "clientWalkTree",
|
||||||
|
isServer = false,
|
||||||
|
correspondingTree = "serverWalkTree",
|
||||||
|
genStartInt = true
|
||||||
|
)
|
||||||
|
/*
|
||||||
|
Behavior tree for walking
|
||||||
|
*/
|
||||||
|
public class ClientWalkTree implements BehaviorTree {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* States for the walk tree
|
||||||
|
*/
|
||||||
|
@SynchronizableEnum
|
||||||
|
public static enum WalkState {
|
||||||
|
/**
|
||||||
|
* Is not walking
|
||||||
|
*/
|
||||||
|
INACTIVE,
|
||||||
|
/**
|
||||||
|
* Is walking
|
||||||
|
*/
|
||||||
|
ACTIVE,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The state of the tree
|
||||||
|
*/
|
||||||
|
@SyncedField
|
||||||
|
WalkState state = WalkState.INACTIVE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parent entity
|
||||||
|
*/
|
||||||
|
Entity parent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data for the walking system
|
||||||
|
*/
|
||||||
|
WalkMovementSystem walkMovementSystem;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void simulate(float deltaTime){
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the tree is walking
|
||||||
|
* @return True if is walking, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean isWalking(){
|
||||||
|
return this.state == WalkState.ACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the movement modifier to apply while walking
|
||||||
|
* @return The modifier
|
||||||
|
*/
|
||||||
|
public float getModifier(){
|
||||||
|
return this.walkMovementSystem.getModifier();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> (initially) Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Attaches this tree to the entity.
|
||||||
|
* </p>
|
||||||
|
* @param entity The entity to attach to
|
||||||
|
* @param tree The behavior tree to attach
|
||||||
|
* @param params Optional parameters that will be provided to the constructor
|
||||||
|
*/
|
||||||
|
public static ClientWalkTree attachTree(Entity parent, Object ... params){
|
||||||
|
ClientWalkTree rVal = new ClientWalkTree(parent,params);
|
||||||
|
//!!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_CLIENTWALKTREE, rVal);
|
||||||
|
Globals.clientSceneWrapper.getScene().registerBehaviorTree(rVal);
|
||||||
|
Globals.entityValueTrackingService.attachTreeToEntity(parent, BehaviorTreeIdEnums.BTREE_CLIENTWALKTREE_ID);
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Detatches this tree from the entity.
|
||||||
|
* </p>
|
||||||
|
* @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_CLIENTWALKTREE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> (initially) Automatically generated </p>
|
||||||
|
* <p> Private constructor to enforce using the attach methods </p>
|
||||||
|
* <p>
|
||||||
|
* Constructor
|
||||||
|
* </p>
|
||||||
|
* @param parent The parent entity of this tree
|
||||||
|
* @param params Optional parameters that can be provided when attaching the tree. All custom data required for creating this tree should be passed in this varargs.
|
||||||
|
*/
|
||||||
|
public ClientWalkTree(Entity parent, Object ... params){
|
||||||
|
if(params.length < 1 || (params[0] instanceof WalkMovementSystem) == false){
|
||||||
|
throw new IllegalArgumentException("Trying to create client walk tree with invalid arguments!");
|
||||||
|
}
|
||||||
|
this.parent = parent;
|
||||||
|
this.walkMovementSystem = (WalkMovementSystem)params[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Gets the ClientWalkTree of the entity
|
||||||
|
* </p>
|
||||||
|
* @param entity the entity
|
||||||
|
* @return The ClientWalkTree
|
||||||
|
*/
|
||||||
|
public static ClientWalkTree getClientWalkTree(Entity entity){
|
||||||
|
return (ClientWalkTree)entity.getData(EntityDataStrings.TREE_CLIENTWALKTREE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Requests that the server start this btree
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public void start(){
|
||||||
|
Globals.clientConnection.queueOutgoingMessage(
|
||||||
|
SynchronizationMessage.constructClientRequestBTreeActionMessage(
|
||||||
|
Globals.clientSceneWrapper.mapClientToServerId(parent.getId()),
|
||||||
|
BehaviorTreeIdEnums.BTREE_CLIENTWALKTREE_ID,
|
||||||
|
ServerSynchronizationManager.SERVER_SYNC_START
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Requests that the server start this btree
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public void interrupt(){
|
||||||
|
Globals.clientConnection.queueOutgoingMessage(
|
||||||
|
SynchronizationMessage.constructClientRequestBTreeActionMessage(
|
||||||
|
Globals.clientSceneWrapper.mapClientToServerId(parent.getId()),
|
||||||
|
BehaviorTreeIdEnums.BTREE_CLIENTWALKTREE_ID,
|
||||||
|
ServerSynchronizationManager.SERVER_SYNC_INTERRUPT
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Sets state and handles the synchronization logic for it.
|
||||||
|
* </p>
|
||||||
|
* @param state The value to set state to.
|
||||||
|
*/
|
||||||
|
public void setState(WalkState state){
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Converts a short to the equivalent enum value
|
||||||
|
* </p>
|
||||||
|
* @param shortVal The short value
|
||||||
|
* @return The enum value
|
||||||
|
*/
|
||||||
|
public static WalkState getWalkStateShortAsEnum(short shortVal){
|
||||||
|
switch(shortVal){
|
||||||
|
case 0:
|
||||||
|
return WalkState.INACTIVE;
|
||||||
|
case 1:
|
||||||
|
return WalkState.ACTIVE;
|
||||||
|
default:
|
||||||
|
return WalkState.INACTIVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Converts this enum type to an equivalent short value
|
||||||
|
* </p>
|
||||||
|
* @param enumVal The enum value
|
||||||
|
* @return The short value
|
||||||
|
*/
|
||||||
|
public static short getWalkStateEnumAsShort(WalkState enumVal){
|
||||||
|
switch(enumVal){
|
||||||
|
case INACTIVE:
|
||||||
|
return 0;
|
||||||
|
case ACTIVE:
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,165 @@
|
|||||||
|
package electrosphere.entity.state.movement.speed;
|
||||||
|
|
||||||
|
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.entity.EntityDataStrings;
|
||||||
|
import electrosphere.net.synchronization.enums.FieldIdEnums;
|
||||||
|
import electrosphere.server.datacell.utils.DataCellSearchUtils;
|
||||||
|
import electrosphere.net.parser.net.message.SynchronizationMessage;
|
||||||
|
import electrosphere.net.synchronization.enums.BehaviorTreeIdEnums;
|
||||||
|
import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils;
|
||||||
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.btree.BehaviorTree;
|
||||||
|
import electrosphere.entity.state.movement.speed.ClientWalkTree.WalkState;
|
||||||
|
import electrosphere.game.data.creature.type.movement.WalkMovementSystem;
|
||||||
|
import electrosphere.net.synchronization.annotation.SyncedField;
|
||||||
|
import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree;
|
||||||
|
|
||||||
|
@SynchronizedBehaviorTree(
|
||||||
|
name = "serverWalkTree",
|
||||||
|
isServer = true,
|
||||||
|
correspondingTree = "clientWalkTree"
|
||||||
|
)
|
||||||
|
/*
|
||||||
|
Behavior tree for walking
|
||||||
|
*/
|
||||||
|
public class ServerWalkTree implements BehaviorTree {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The state of the tree
|
||||||
|
*/
|
||||||
|
@SyncedField
|
||||||
|
WalkState state = WalkState.INACTIVE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The parent entity
|
||||||
|
*/
|
||||||
|
Entity parent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The data for the walking system
|
||||||
|
*/
|
||||||
|
WalkMovementSystem walkMovementSystem;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void simulate(float deltaTime) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the movement modifier to apply while walking
|
||||||
|
* @return The modifier
|
||||||
|
*/
|
||||||
|
public float getModifier(){
|
||||||
|
return this.walkMovementSystem.getModifier();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the tree
|
||||||
|
*/
|
||||||
|
public void start(){
|
||||||
|
this.setState(WalkState.ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the tree
|
||||||
|
*/
|
||||||
|
public void stop(){
|
||||||
|
this.setState(WalkState.INACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interrupts the tree
|
||||||
|
*/
|
||||||
|
public void interrupt(){
|
||||||
|
this.setState(WalkState.INACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the tree is walking
|
||||||
|
* @return True if is walking, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean isWalking(){
|
||||||
|
return this.state == WalkState.ACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the state
|
||||||
|
* @return The state
|
||||||
|
*/
|
||||||
|
public WalkState getState(){
|
||||||
|
return this.state;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> (initially) Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Attaches this tree to the entity.
|
||||||
|
* </p>
|
||||||
|
* @param entity The entity to attach to
|
||||||
|
* @param tree The behavior tree to attach
|
||||||
|
* @param params Optional parameters that will be provided to the constructor
|
||||||
|
*/
|
||||||
|
public static ServerWalkTree attachTree(Entity parent, Object ... params){
|
||||||
|
ServerWalkTree rVal = new ServerWalkTree(parent,params);
|
||||||
|
//!!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_SERVERWALKTREE, rVal);
|
||||||
|
Globals.entityValueTrackingService.attachTreeToEntity(parent, BehaviorTreeIdEnums.BTREE_SERVERWALKTREE_ID);
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Detatches this tree from the entity.
|
||||||
|
* </p>
|
||||||
|
* @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_SERVERWALKTREE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> (initially) Automatically generated </p>
|
||||||
|
* <p> Private constructor to enforce using the attach methods </p>
|
||||||
|
* <p>
|
||||||
|
* Constructor
|
||||||
|
* </p>
|
||||||
|
* @param parent The parent entity of this tree
|
||||||
|
* @param params Optional parameters that can be provided when attaching the tree. All custom data required for creating this tree should be passed in this varargs.
|
||||||
|
*/
|
||||||
|
public ServerWalkTree(Entity parent, Object ... params){
|
||||||
|
if(params.length < 1 || (params[0] instanceof WalkMovementSystem) == false){
|
||||||
|
throw new IllegalArgumentException("Trying to create client walk tree with invalid arguments!");
|
||||||
|
}
|
||||||
|
this.parent = parent;
|
||||||
|
this.walkMovementSystem = (WalkMovementSystem)params[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Gets the ServerWalkTree of the entity
|
||||||
|
* </p>
|
||||||
|
* @param entity the entity
|
||||||
|
* @return The ServerWalkTree
|
||||||
|
*/
|
||||||
|
public static ServerWalkTree getServerWalkTree(Entity entity){
|
||||||
|
return (ServerWalkTree)entity.getData(EntityDataStrings.TREE_SERVERWALKTREE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p> Automatically generated </p>
|
||||||
|
* <p>
|
||||||
|
* Sets state and handles the synchronization logic for it.
|
||||||
|
* </p>
|
||||||
|
* @param state The value to set state to.
|
||||||
|
*/
|
||||||
|
public void setState(WalkState state){
|
||||||
|
this.state = state;
|
||||||
|
int value = ClientWalkTree.getWalkStateEnumAsShort(state);
|
||||||
|
DataCellSearchUtils.getEntityDataCell(parent).broadcastNetworkMessage(SynchronizationMessage.constructUpdateClientStateMessage(parent.getId(), BehaviorTreeIdEnums.BTREE_SERVERWALKTREE_ID, FieldIdEnums.TREE_SERVERWALKTREE_SYNCEDFIELD_STATE_ID, value));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -41,6 +41,8 @@ import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree;
|
|||||||
import electrosphere.entity.state.movement.groundmove.ServerGroundMovementTree;
|
import electrosphere.entity.state.movement.groundmove.ServerGroundMovementTree;
|
||||||
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
||||||
import electrosphere.entity.state.movement.jump.ServerJumpTree;
|
import electrosphere.entity.state.movement.jump.ServerJumpTree;
|
||||||
|
import electrosphere.entity.state.movement.speed.ClientWalkTree;
|
||||||
|
import electrosphere.entity.state.movement.speed.ServerWalkTree;
|
||||||
import electrosphere.entity.state.physicssync.upright.ClientAlwaysUprightTree;
|
import electrosphere.entity.state.physicssync.upright.ClientAlwaysUprightTree;
|
||||||
import electrosphere.entity.state.physicssync.upright.ServerAlwaysUprightTree;
|
import electrosphere.entity.state.physicssync.upright.ServerAlwaysUprightTree;
|
||||||
import electrosphere.entity.state.rotator.RotatorHierarchyNode;
|
import electrosphere.entity.state.rotator.RotatorHierarchyNode;
|
||||||
@ -57,6 +59,7 @@ import electrosphere.game.data.creature.type.movement.FallMovementSystem;
|
|||||||
import electrosphere.game.data.creature.type.movement.GroundMovementSystem;
|
import electrosphere.game.data.creature.type.movement.GroundMovementSystem;
|
||||||
import electrosphere.game.data.creature.type.movement.JumpMovementSystem;
|
import electrosphere.game.data.creature.type.movement.JumpMovementSystem;
|
||||||
import electrosphere.game.data.creature.type.movement.MovementSystem;
|
import electrosphere.game.data.creature.type.movement.MovementSystem;
|
||||||
|
import electrosphere.game.data.creature.type.movement.WalkMovementSystem;
|
||||||
import electrosphere.game.data.creature.type.rotator.RotatorConstraint;
|
import electrosphere.game.data.creature.type.rotator.RotatorConstraint;
|
||||||
import electrosphere.game.data.creature.type.rotator.RotatorItem;
|
import electrosphere.game.data.creature.type.rotator.RotatorItem;
|
||||||
import electrosphere.game.data.creature.type.rotator.RotatorSystem;
|
import electrosphere.game.data.creature.type.rotator.RotatorSystem;
|
||||||
@ -198,6 +201,9 @@ public class CreatureUtils {
|
|||||||
rVal.putData(EntityDataStrings.FALL_TREE, fallTree);
|
rVal.putData(EntityDataStrings.FALL_TREE, fallTree);
|
||||||
Globals.clientScene.registerBehaviorTree(fallTree);
|
Globals.clientScene.registerBehaviorTree(fallTree);
|
||||||
break;
|
break;
|
||||||
|
case WalkMovementSystem.WALK_MOVEMENT_SYSTEM: {
|
||||||
|
ClientWalkTree.attachTree(rVal, (WalkMovementSystem)movementSystem);
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(rawType.getEquipPoints() != null && rawType.getEquipPoints().size() > 0){
|
if(rawType.getEquipPoints() != null && rawType.getEquipPoints().size() > 0){
|
||||||
@ -467,6 +473,9 @@ public class CreatureUtils {
|
|||||||
rVal.putData(EntityDataStrings.FALL_TREE, fallTree);
|
rVal.putData(EntityDataStrings.FALL_TREE, fallTree);
|
||||||
ServerBehaviorTreeUtils.attachBTreeToEntity(rVal, fallTree);
|
ServerBehaviorTreeUtils.attachBTreeToEntity(rVal, fallTree);
|
||||||
break;
|
break;
|
||||||
|
case WalkMovementSystem.WALK_MOVEMENT_SYSTEM: {
|
||||||
|
ServerWalkTree.attachTree(rVal, (WalkMovementSystem)movementSystem);
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,8 @@ public class MovementSystemSerializer implements JsonDeserializer<MovementSystem
|
|||||||
return context.deserialize(json, FallMovementSystem.class);
|
return context.deserialize(json, FallMovementSystem.class);
|
||||||
case AirplaneMovementSystem.AIRPLANE_MOVEMENT_SYSTEM:
|
case AirplaneMovementSystem.AIRPLANE_MOVEMENT_SYSTEM:
|
||||||
return context.deserialize(json, AirplaneMovementSystem.class);
|
return context.deserialize(json, AirplaneMovementSystem.class);
|
||||||
|
case WalkMovementSystem.WALK_MOVEMENT_SYSTEM:
|
||||||
|
return context.deserialize(json, WalkMovementSystem.class);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,29 @@
|
|||||||
|
package electrosphere.game.data.creature.type.movement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A walk movement system
|
||||||
|
*/
|
||||||
|
public class WalkMovementSystem implements MovementSystem {
|
||||||
|
|
||||||
|
//move system type string
|
||||||
|
public static final String WALK_MOVEMENT_SYSTEM = "WALK";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return WALK_MOVEMENT_SYSTEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The movespeed modifier applied when walking
|
||||||
|
*/
|
||||||
|
float modifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The movespeed modifier applied when walking
|
||||||
|
* @return The modifier
|
||||||
|
*/
|
||||||
|
public float getModifier(){
|
||||||
|
return modifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package electrosphere.net.synchronization.client;
|
package electrosphere.net.synchronization.client;
|
||||||
|
|
||||||
|
|
||||||
|
import electrosphere.entity.state.movement.speed.ClientWalkTree;
|
||||||
import electrosphere.entity.state.equip.ClientEquipState;
|
import electrosphere.entity.state.equip.ClientEquipState;
|
||||||
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
import electrosphere.entity.state.movement.jump.ClientJumpTree;
|
||||||
import electrosphere.entity.state.life.ClientLifeTree;
|
import electrosphere.entity.state.life.ClientLifeTree;
|
||||||
@ -221,6 +222,14 @@ public class ClientSynchronizationManager {
|
|||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case BehaviorTreeIdEnums.BTREE_SERVERWALKTREE_ID: {
|
||||||
|
switch(message.getfieldId()){
|
||||||
|
case FieldIdEnums.TREE_SERVERWALKTREE_SYNCEDFIELD_STATE_ID:{
|
||||||
|
ClientWalkTree tree = ClientWalkTree.getClientWalkTree(entity);
|
||||||
|
tree.setState(ClientWalkTree.getWalkStateShortAsEnum((short)message.getbTreeValue()));
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,5 +21,7 @@ public class BehaviorTreeIdEnums {
|
|||||||
public static final int BTREE_SERVERGROUNDMOVEMENTTREE_ID = 11;
|
public static final int BTREE_SERVERGROUNDMOVEMENTTREE_ID = 11;
|
||||||
public static final int BTREE_CLIENTJUMPTREE_ID = 14;
|
public static final int BTREE_CLIENTJUMPTREE_ID = 14;
|
||||||
public static final int BTREE_SERVERJUMPTREE_ID = 15;
|
public static final int BTREE_SERVERJUMPTREE_ID = 15;
|
||||||
|
public static final int BTREE_CLIENTWALKTREE_ID = 16;
|
||||||
|
public static final int BTREE_SERVERWALKTREE_ID = 17;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,5 +29,7 @@ public class FieldIdEnums {
|
|||||||
public static final int TREE_SERVERJUMPTREE_SYNCEDFIELD_STATE_ID = 19;
|
public static final int TREE_SERVERJUMPTREE_SYNCEDFIELD_STATE_ID = 19;
|
||||||
public static final int TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTFRAME_ID = 20;
|
public static final int TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTFRAME_ID = 20;
|
||||||
public static final int TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTJUMPFORCE_ID = 21;
|
public static final int TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTJUMPFORCE_ID = 21;
|
||||||
|
public static final int TREE_CLIENTWALKTREE_SYNCEDFIELD_STATE_ID = 24;
|
||||||
|
public static final int TREE_SERVERWALKTREE_SYNCEDFIELD_STATE_ID = 25;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package electrosphere.net.synchronization.server;
|
package electrosphere.net.synchronization.server;
|
||||||
|
|
||||||
|
|
||||||
|
import electrosphere.entity.state.movement.speed.ServerWalkTree;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
@ -83,8 +84,26 @@ public class ServerSynchronizationManager {
|
|||||||
switch(bTreeId){
|
switch(bTreeId){
|
||||||
case BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID: {
|
case BehaviorTreeIdEnums.BTREE_CLIENTJUMPTREE_ID: {
|
||||||
ServerJumpTree tree = ServerJumpTree.getServerJumpTree(entity);
|
ServerJumpTree tree = ServerJumpTree.getServerJumpTree(entity);
|
||||||
|
switch(message.getbTreeValue()){
|
||||||
|
case ServerSynchronizationManager.SERVER_SYNC_START: {
|
||||||
tree.start();
|
tree.start();
|
||||||
} break;
|
} break;
|
||||||
|
case ServerSynchronizationManager.SERVER_SYNC_INTERRUPT: {
|
||||||
|
tree.interrupt();
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case BehaviorTreeIdEnums.BTREE_CLIENTWALKTREE_ID: {
|
||||||
|
ServerWalkTree tree = ServerWalkTree.getServerWalkTree(entity);
|
||||||
|
switch(message.getbTreeValue()){
|
||||||
|
case ServerSynchronizationManager.SERVER_SYNC_START: {
|
||||||
|
tree.start();
|
||||||
|
} break;
|
||||||
|
case ServerSynchronizationManager.SERVER_SYNC_INTERRUPT: {
|
||||||
|
tree.interrupt();
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
package electrosphere.net.synchronization.transport;
|
package electrosphere.net.synchronization.transport;
|
||||||
|
|
||||||
|
|
||||||
|
import electrosphere.entity.state.movement.speed.ServerWalkTree;
|
||||||
|
import electrosphere.entity.state.movement.speed.ClientWalkTree;
|
||||||
import electrosphere.entity.state.equip.ClientEquipState;
|
import electrosphere.entity.state.equip.ClientEquipState;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -100,6 +102,10 @@ public class StateCollection {
|
|||||||
collection.setValue(new SynchronizedFieldValue(BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID,FieldIdEnums.TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTFRAME_ID,tree.getCurrentFrame()));
|
collection.setValue(new SynchronizedFieldValue(BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID,FieldIdEnums.TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTFRAME_ID,tree.getCurrentFrame()));
|
||||||
collection.setValue(new SynchronizedFieldValue(BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID,FieldIdEnums.TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTJUMPFORCE_ID,tree.getCurrentJumpForce()));
|
collection.setValue(new SynchronizedFieldValue(BehaviorTreeIdEnums.BTREE_SERVERJUMPTREE_ID,FieldIdEnums.TREE_SERVERJUMPTREE_SYNCEDFIELD_CURRENTJUMPFORCE_ID,tree.getCurrentJumpForce()));
|
||||||
} break;
|
} break;
|
||||||
|
case BehaviorTreeIdEnums.BTREE_SERVERWALKTREE_ID: {
|
||||||
|
ServerWalkTree tree = ServerWalkTree.getServerWalkTree(entity);
|
||||||
|
collection.setValue(new SynchronizedFieldValue(BehaviorTreeIdEnums.BTREE_SERVERWALKTREE_ID,FieldIdEnums.TREE_SERVERWALKTREE_SYNCEDFIELD_STATE_ID,ClientWalkTree.getWalkStateEnumAsShort(tree.getState())));
|
||||||
|
} break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -193,6 +199,14 @@ public class StateCollection {
|
|||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case BehaviorTreeIdEnums.BTREE_SERVERWALKTREE_ID: {
|
||||||
|
ClientWalkTree tree = ClientWalkTree.getClientWalkTree(entity);
|
||||||
|
switch(syncedValue.getFieldId()){
|
||||||
|
case(FieldIdEnums.TREE_SERVERWALKTREE_SYNCEDFIELD_STATE_ID): {
|
||||||
|
tree.setState(ClientWalkTree.getWalkStateShortAsEnum(((Double)syncedValue.getValue()).shortValue()));
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user