falling tests
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good

This commit is contained in:
austin 2024-09-05 00:13:50 -04:00
parent f457decb5f
commit f78c8b6633
6 changed files with 78 additions and 73 deletions

View File

@ -12,6 +12,7 @@ import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityUtils;
import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.state.gravity.ClientGravityTree;
import electrosphere.entity.state.movement.fall.ClientFallTree;
/**
* Client collidable tree

View File

@ -8,6 +8,7 @@ import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityUtils;
import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.state.gravity.ServerGravityTree;
import electrosphere.entity.state.movement.fall.ServerFallTree;
import electrosphere.server.datacell.Realm;
import org.joml.Quaterniond;

View File

@ -1,10 +1,6 @@
package electrosphere.entity.state.gravity;
import electrosphere.net.parser.net.message.SynchronizationMessage;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.joml.Vector3d;
import org.ode4j.ode.DBody;
@ -16,7 +12,6 @@ import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.state.collidable.Impulse;
import electrosphere.entity.state.movement.fall.ClientFallTree;
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;
import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree;
@ -45,8 +40,6 @@ public class ClientGravityTree implements BehaviorTree {
DBody body;
Collidable collidable;
List<EntityMessage> networkMessageQueue = new CopyOnWriteArrayList<EntityMessage>();
private ClientGravityTree(Entity e, Object ... params){
//Collidable collidable, DBody body, int fallFrame
state = GravityTreeState.ACTIVE;
@ -56,11 +49,6 @@ public class ClientGravityTree implements BehaviorTree {
this.fallFrame = (int)params[2];
}
// public void setCollisionObject(CollisionObject body, Collidable collidable){
// this.body = body;
// this.collidable = collidable;
// }
/**
* <p> Automatically generated </p>
* <p>
@ -95,7 +83,6 @@ public class ClientGravityTree implements BehaviorTree {
if(hadGroundCollision()){
state = GravityTreeState.NOT_ACTIVE;
if(!hadStructureCollision()){
// position.set(new Vector3d(position.x,Globals.commonWorldData.getElevationAtPoint(position) + 0.0001f,position.z));
}
ClientJumpTree jumpTree;
if((jumpTree = ClientJumpTree.getClientJumpTree(parent))!=null){
@ -119,19 +106,12 @@ public class ClientGravityTree implements BehaviorTree {
}
break;
case NOT_ACTIVE:
if(hadEntityCollision()){
// start();
}
//nothing here atm
//eventually want to check if need to re-activate somehow
break;
}
}
public void addNetworkMessage(EntityMessage networkMessage) {
networkMessageQueue.add(networkMessage);
}
public boolean hadStructureCollision(){
boolean rVal = false;
for(Impulse impulse : collidable.getImpulses()){

View File

@ -6,25 +6,17 @@ import electrosphere.net.parser.net.message.SynchronizationMessage;
import electrosphere.server.datacell.utils.DataCellSearchUtils;
import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.joml.Quaterniond;
import org.joml.Vector3d;
import org.joml.Vector3f;
import org.ode4j.ode.DBody;
import electrosphere.collision.collidable.Collidable;
import electrosphere.engine.Globals;
import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils;
import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.state.collidable.Impulse;
import electrosphere.entity.state.collidable.ServerCollidableTree;
import electrosphere.entity.state.gravity.ClientGravityTree.GravityTreeState;
import electrosphere.entity.state.movement.fall.ServerFallTree;
import electrosphere.entity.state.movement.jump.ServerJumpTree;
import electrosphere.net.parser.net.message.EntityMessage;
import electrosphere.net.synchronization.annotation.SyncedField;
import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree;
import electrosphere.net.synchronization.enums.BehaviorTreeIdEnums;
@ -47,10 +39,7 @@ public class ServerGravityTree implements BehaviorTree {
DBody body;
Collidable collidable;
List<EntityMessage> networkMessageQueue = new CopyOnWriteArrayList<EntityMessage>();
private ServerGravityTree(Entity e, Object ... params){
//Collidable collidable, DBody body, int fallFrame
state = GravityTreeState.ACTIVE;
parent = e;
this.collidable = (Collidable)params[0];
@ -58,11 +47,6 @@ public class ServerGravityTree implements BehaviorTree {
this.fallFrame = (int)params[2];
}
// public void setCollisionObject(CollisionObject body, Collidable collidable){
// this.body = body;
// this.collidable = collidable;
// }
/**
* <p> Automatically generated </p>
* <p>
@ -93,39 +77,6 @@ public class ServerGravityTree implements BehaviorTree {
static final float linearDamping = 0.1f;
public void simulate(float deltaTime){
// float velocity = CreatureUtils.getVelocity(parent);
// float acceleration = CreatureUtils.getAcceleration(parent);
// float maxNaturalVelocity = CreatureUtils.getMaxNaturalVelocity(parent);
// Actor entityActor = EntityUtils.getActor(parent);
Vector3d position = EntityUtils.getPosition(parent);
// Vector3f movementVector = CreatureUtils.getMovementVector(parent);
Quaterniond rotation = EntityUtils.getRotation(parent);
Vector3f newPosition;
ServerCollidableTree collidableTree = null;
if(ServerCollidableTree.hasServerCollidableTree(parent)){
collidableTree = ServerCollidableTree.getServerCollidableTree(parent);
}
//parse attached network messages
// for(EntityMessage message : networkMessageQueue){
// networkMessageQueue.remove(message);
//// System.out.println("MOVE to " + message.getX() + " " + message.getY() + " " + message.getZ());
// switch(message.getMessageSubtype()){
// case ATTACKUPDATE:
// switch(message.gettreeState()){
// case 0:
// state = IdleTreeState.IDLE;
// break;
// case 1:
// state = IdleTreeState.NOT_IDLE;
// break;
// }
// EntityUtils.getPosition(parent).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
// CreatureUtils.setMovementVector(parent, new Vector3f(message.getrotationX(),message.getrotationY(),message.getrotationZ()));
// break;
// }
// }
//state machine
switch(state){
@ -162,10 +113,6 @@ public class ServerGravityTree implements BehaviorTree {
}
}
public void addNetworkMessage(EntityMessage networkMessage) {
networkMessageQueue.add(networkMessage);
}
public boolean hadStructureCollision(){
boolean rVal = false;
for(Impulse impulse : collidable.getImpulses()){

View File

@ -0,0 +1,40 @@
package electrosphere.entity.state.collidable;
import static org.junit.jupiter.api.Assertions.*;
import org.joml.Vector3d;
import annotations.IntegrationTest;
import electrosphere.engine.Globals;
import electrosphere.entity.Entity;
import electrosphere.entity.EntityTags;
import electrosphere.entity.state.movement.fall.ClientFallTree;
import electrosphere.entity.types.creature.CreatureTemplate;
import electrosphere.entity.types.creature.CreatureUtils;
import template.EntityTestTemplate;
import testutils.TestEngineUtils;
/**
* Tests for the client collidable component
*/
public class ClientCollidableTreeTests extends EntityTestTemplate {
@IntegrationTest
public void testCollidableFallCancel(){
//warm up engine
TestEngineUtils.simulateFrames(1);
//spawn on server
CreatureUtils.serverSpawnBasicCreature(Globals.realmManager.first(), new Vector3d(0,0,0), "human", CreatureTemplate.createDefault("human"));
//wait for the creature to land
TestEngineUtils.simulateFrames(3);
//get client entity
Entity clientEntity = Globals.clientSceneWrapper.getScene().getEntitiesWithTag(EntityTags.CREATURE).iterator().next();
//verify it was started on server
assertEquals(false, ClientFallTree.getFallTree(clientEntity).isFalling());
}
}

View File

@ -0,0 +1,36 @@
package electrosphere.entity.state.collidable;
import static org.junit.jupiter.api.Assertions.*;
import org.joml.Vector3d;
import annotations.IntegrationTest;
import electrosphere.engine.Globals;
import electrosphere.entity.Entity;
import electrosphere.entity.state.movement.fall.ServerFallTree;
import electrosphere.entity.types.creature.CreatureTemplate;
import electrosphere.entity.types.creature.CreatureUtils;
import template.EntityTestTemplate;
import testutils.TestEngineUtils;
/**
* Tests for the server collidable tree
*/
public class ServerCollidableTreeTests extends EntityTestTemplate {
@IntegrationTest
public void testCollidableFallCancel(){
//warm up engine
TestEngineUtils.simulateFrames(1);
//spawn on server
Entity creature = CreatureUtils.serverSpawnBasicCreature(Globals.realmManager.first(), new Vector3d(0,0,0), "human", CreatureTemplate.createDefault("human"));
//wait for the creature to land
TestEngineUtils.simulateFrames(3);
//verify it was started on server
assertEquals(false, ServerFallTree.getFallTree(creature).isFalling());
}
}