From f78c8b66333297aa96dec118d11d5e5c9d08d968 Mon Sep 17 00:00:00 2001 From: austin Date: Thu, 5 Sep 2024 00:13:50 -0400 Subject: [PATCH] falling tests --- .../collidable/ClientCollidableTree.java | 1 + .../collidable/ServerCollidableTree.java | 1 + .../state/gravity/ClientGravityTree.java | 20 ------- .../state/gravity/ServerGravityTree.java | 53 ------------------- .../collidable/ClientCollidableTreeTests.java | 40 ++++++++++++++ .../collidable/ServerCollidableTreeTests.java | 36 +++++++++++++ 6 files changed, 78 insertions(+), 73 deletions(-) create mode 100644 src/test/java/electrosphere/entity/state/collidable/ClientCollidableTreeTests.java create mode 100644 src/test/java/electrosphere/entity/state/collidable/ServerCollidableTreeTests.java diff --git a/src/main/java/electrosphere/entity/state/collidable/ClientCollidableTree.java b/src/main/java/electrosphere/entity/state/collidable/ClientCollidableTree.java index 6563fe9f..917f534e 100644 --- a/src/main/java/electrosphere/entity/state/collidable/ClientCollidableTree.java +++ b/src/main/java/electrosphere/entity/state/collidable/ClientCollidableTree.java @@ -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 diff --git a/src/main/java/electrosphere/entity/state/collidable/ServerCollidableTree.java b/src/main/java/electrosphere/entity/state/collidable/ServerCollidableTree.java index 5c9df4d3..acd42a20 100644 --- a/src/main/java/electrosphere/entity/state/collidable/ServerCollidableTree.java +++ b/src/main/java/electrosphere/entity/state/collidable/ServerCollidableTree.java @@ -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; diff --git a/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java b/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java index 6668344b..1058954a 100644 --- a/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java +++ b/src/main/java/electrosphere/entity/state/gravity/ClientGravityTree.java @@ -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 networkMessageQueue = new CopyOnWriteArrayList(); - 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; -// } - /** *

Automatically generated

*

@@ -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()){ diff --git a/src/main/java/electrosphere/entity/state/gravity/ServerGravityTree.java b/src/main/java/electrosphere/entity/state/gravity/ServerGravityTree.java index c4efac62..43e0b630 100644 --- a/src/main/java/electrosphere/entity/state/gravity/ServerGravityTree.java +++ b/src/main/java/electrosphere/entity/state/gravity/ServerGravityTree.java @@ -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 networkMessageQueue = new CopyOnWriteArrayList(); - 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; -// } - /** *

Automatically generated

*

@@ -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()){ diff --git a/src/test/java/electrosphere/entity/state/collidable/ClientCollidableTreeTests.java b/src/test/java/electrosphere/entity/state/collidable/ClientCollidableTreeTests.java new file mode 100644 index 00000000..9ecd2396 --- /dev/null +++ b/src/test/java/electrosphere/entity/state/collidable/ClientCollidableTreeTests.java @@ -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()); + } + +} \ No newline at end of file diff --git a/src/test/java/electrosphere/entity/state/collidable/ServerCollidableTreeTests.java b/src/test/java/electrosphere/entity/state/collidable/ServerCollidableTreeTests.java new file mode 100644 index 00000000..58c9afdf --- /dev/null +++ b/src/test/java/electrosphere/entity/state/collidable/ServerCollidableTreeTests.java @@ -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()); + } + +}