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.EntityUtils;
import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.state.gravity.ClientGravityTree; import electrosphere.entity.state.gravity.ClientGravityTree;
import electrosphere.entity.state.movement.fall.ClientFallTree;
/** /**
* Client collidable tree * Client collidable tree

View File

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

View File

@ -1,10 +1,6 @@
package electrosphere.entity.state.gravity; 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.joml.Vector3d;
import org.ode4j.ode.DBody; import org.ode4j.ode.DBody;
@ -16,7 +12,6 @@ import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.state.collidable.Impulse; import electrosphere.entity.state.collidable.Impulse;
import electrosphere.entity.state.movement.fall.ClientFallTree; import electrosphere.entity.state.movement.fall.ClientFallTree;
import electrosphere.entity.state.movement.jump.ClientJumpTree; 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.SyncedField;
import electrosphere.net.synchronization.annotation.SynchronizableEnum; import electrosphere.net.synchronization.annotation.SynchronizableEnum;
import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree; import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree;
@ -45,8 +40,6 @@ public class ClientGravityTree implements BehaviorTree {
DBody body; DBody body;
Collidable collidable; Collidable collidable;
List<EntityMessage> networkMessageQueue = new CopyOnWriteArrayList<EntityMessage>();
private ClientGravityTree(Entity e, Object ... params){ private ClientGravityTree(Entity e, Object ... params){
//Collidable collidable, DBody body, int fallFrame //Collidable collidable, DBody body, int fallFrame
state = GravityTreeState.ACTIVE; state = GravityTreeState.ACTIVE;
@ -56,11 +49,6 @@ public class ClientGravityTree implements BehaviorTree {
this.fallFrame = (int)params[2]; this.fallFrame = (int)params[2];
} }
// public void setCollisionObject(CollisionObject body, Collidable collidable){
// this.body = body;
// this.collidable = collidable;
// }
/** /**
* <p> Automatically generated </p> * <p> Automatically generated </p>
* <p> * <p>
@ -95,7 +83,6 @@ public class ClientGravityTree implements BehaviorTree {
if(hadGroundCollision()){ if(hadGroundCollision()){
state = GravityTreeState.NOT_ACTIVE; state = GravityTreeState.NOT_ACTIVE;
if(!hadStructureCollision()){ if(!hadStructureCollision()){
// position.set(new Vector3d(position.x,Globals.commonWorldData.getElevationAtPoint(position) + 0.0001f,position.z));
} }
ClientJumpTree jumpTree; ClientJumpTree jumpTree;
if((jumpTree = ClientJumpTree.getClientJumpTree(parent))!=null){ if((jumpTree = ClientJumpTree.getClientJumpTree(parent))!=null){
@ -119,19 +106,12 @@ public class ClientGravityTree implements BehaviorTree {
} }
break; break;
case NOT_ACTIVE: case NOT_ACTIVE:
if(hadEntityCollision()){
// start();
}
//nothing here atm //nothing here atm
//eventually want to check if need to re-activate somehow //eventually want to check if need to re-activate somehow
break; break;
} }
} }
public void addNetworkMessage(EntityMessage networkMessage) {
networkMessageQueue.add(networkMessage);
}
public boolean hadStructureCollision(){ public boolean hadStructureCollision(){
boolean rVal = false; boolean rVal = false;
for(Impulse impulse : collidable.getImpulses()){ 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.DataCellSearchUtils;
import electrosphere.server.datacell.utils.ServerBehaviorTreeUtils; 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.Vector3d;
import org.joml.Vector3f;
import org.ode4j.ode.DBody; import org.ode4j.ode.DBody;
import electrosphere.collision.collidable.Collidable; import electrosphere.collision.collidable.Collidable;
import electrosphere.engine.Globals; import electrosphere.engine.Globals;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils;
import electrosphere.entity.btree.BehaviorTree; import electrosphere.entity.btree.BehaviorTree;
import electrosphere.entity.state.collidable.Impulse; import electrosphere.entity.state.collidable.Impulse;
import electrosphere.entity.state.collidable.ServerCollidableTree;
import electrosphere.entity.state.gravity.ClientGravityTree.GravityTreeState; import electrosphere.entity.state.gravity.ClientGravityTree.GravityTreeState;
import electrosphere.entity.state.movement.fall.ServerFallTree; import electrosphere.entity.state.movement.fall.ServerFallTree;
import electrosphere.entity.state.movement.jump.ServerJumpTree; 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.SyncedField;
import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree; import electrosphere.net.synchronization.annotation.SynchronizedBehaviorTree;
import electrosphere.net.synchronization.enums.BehaviorTreeIdEnums; import electrosphere.net.synchronization.enums.BehaviorTreeIdEnums;
@ -47,10 +39,7 @@ public class ServerGravityTree implements BehaviorTree {
DBody body; DBody body;
Collidable collidable; Collidable collidable;
List<EntityMessage> networkMessageQueue = new CopyOnWriteArrayList<EntityMessage>();
private ServerGravityTree(Entity e, Object ... params){ private ServerGravityTree(Entity e, Object ... params){
//Collidable collidable, DBody body, int fallFrame
state = GravityTreeState.ACTIVE; state = GravityTreeState.ACTIVE;
parent = e; parent = e;
this.collidable = (Collidable)params[0]; this.collidable = (Collidable)params[0];
@ -58,11 +47,6 @@ public class ServerGravityTree implements BehaviorTree {
this.fallFrame = (int)params[2]; this.fallFrame = (int)params[2];
} }
// public void setCollisionObject(CollisionObject body, Collidable collidable){
// this.body = body;
// this.collidable = collidable;
// }
/** /**
* <p> Automatically generated </p> * <p> Automatically generated </p>
* <p> * <p>
@ -93,39 +77,6 @@ public class ServerGravityTree implements BehaviorTree {
static final float linearDamping = 0.1f; static final float linearDamping = 0.1f;
public void simulate(float deltaTime){ 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 //state machine
switch(state){ switch(state){
@ -162,10 +113,6 @@ public class ServerGravityTree implements BehaviorTree {
} }
} }
public void addNetworkMessage(EntityMessage networkMessage) {
networkMessageQueue.add(networkMessage);
}
public boolean hadStructureCollision(){ public boolean hadStructureCollision(){
boolean rVal = false; boolean rVal = false;
for(Impulse impulse : collidable.getImpulses()){ 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());
}
}