summaryrefslogtreecommitdiff
path: root/core/src/test/java/coffee/liz/dyl
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-03-01 12:54:31 -0800
committerElizabeth Alexander Hunt <me@liz.coffee>2026-03-01 12:54:47 -0800
commit242b32050feff1d7f047e52d46daadd3ec682c14 (patch)
tree6207a3f350946ae3b1c2764b2bb9321473f6bfaa /core/src/test/java/coffee/liz/dyl
parentc491b5cb08972ffc041fa0b968810373b9ed79a3 (diff)
downloaddyl-242b32050feff1d7f047e52d46daadd3ec682c14.tar.gz
dyl-242b32050feff1d7f047e52d46daadd3ec682c14.zip
Adding animations n stuff.
Diffstat (limited to 'core/src/test/java/coffee/liz/dyl')
-rw-r--r--core/src/test/java/coffee/liz/dyl/components/physics/BoundingBoxTest.java45
-rw-r--r--core/src/test/java/coffee/liz/dyl/systems/physics/PhysicsSystemsTest.java76
2 files changed, 121 insertions, 0 deletions
diff --git a/core/src/test/java/coffee/liz/dyl/components/physics/BoundingBoxTest.java b/core/src/test/java/coffee/liz/dyl/components/physics/BoundingBoxTest.java
new file mode 100644
index 0000000..c89df37
--- /dev/null
+++ b/core/src/test/java/coffee/liz/dyl/components/physics/BoundingBoxTest.java
@@ -0,0 +1,45 @@
+package coffee.liz.dyl.components.physics;
+
+import coffee.liz.ecs.math.Vec2f;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class BoundingBoxTest {
+ @Test
+ public void isCollidingWith_overlapping() {
+ final BoundingBox a = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(2f, 2f));
+ final BoundingBox b = new BoundingBox(new Vec2f(1f, 1f), new Vec2f(2f, 2f));
+ assertTrue(a.isCollidingWith(b));
+ assertTrue(b.isCollidingWith(a));
+ }
+
+ @Test
+ public void isCollidingWith_notOverlapping() {
+ final BoundingBox a = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(1f, 1f));
+ final BoundingBox b = new BoundingBox(new Vec2f(2f, 2f), new Vec2f(1f, 1f));
+ assertFalse(a.isCollidingWith(b));
+ }
+
+ @Test
+ public void isCollidingWith_touching_isNotColliding() {
+ final BoundingBox a = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(1f, 1f));
+ final BoundingBox b = new BoundingBox(new Vec2f(1f, 0f), new Vec2f(1f, 1f));
+ assertFalse(a.isCollidingWith(b));
+ }
+
+ @Test
+ public void isAbove_returnsTrue_whenBottomAtOrAboveOtherTop() {
+ final BoundingBox a = new BoundingBox(new Vec2f(0f, 2f), new Vec2f(1f, 1f));
+ final BoundingBox b = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(1f, 1f));
+ assertTrue(a.isAbove(b));
+ }
+
+ @Test
+ public void isAbove_returnsFalse_whenOverlapping() {
+ final BoundingBox a = new BoundingBox(new Vec2f(0f, 0.5f), new Vec2f(1f, 1f));
+ final BoundingBox b = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(1f, 1f));
+ assertFalse(a.isAbove(b));
+ }
+}
diff --git a/core/src/test/java/coffee/liz/dyl/systems/physics/PhysicsSystemsTest.java b/core/src/test/java/coffee/liz/dyl/systems/physics/PhysicsSystemsTest.java
new file mode 100644
index 0000000..4c285fb
--- /dev/null
+++ b/core/src/test/java/coffee/liz/dyl/systems/physics/PhysicsSystemsTest.java
@@ -0,0 +1,76 @@
+package coffee.liz.dyl.systems.physics;
+
+import coffee.liz.ecs.DAGWorld;
+import coffee.liz.dyl.components.physics.BoundingBox;
+import coffee.liz.dyl.components.physics.Force;
+import coffee.liz.dyl.components.physics.Forces;
+import coffee.liz.dyl.components.physics.Gravity;
+import coffee.liz.dyl.components.physics.Jump;
+import coffee.liz.dyl.components.physics.Mass;
+import coffee.liz.dyl.components.physics.Solid;
+import coffee.liz.dyl.components.physics.Velocity;
+import coffee.liz.ecs.math.Vec2f;
+import coffee.liz.ecs.model.Entity;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class PhysicsSystemsTest {
+ private static final float GRAVITY = 9.8f;
+
+ @Test
+ public void gravityAcceleratesEntityDownwardOverTime() {
+ final DAGWorld world = new DAGWorld(new ForceReductionSystem(GRAVITY), new IntegrationSystem());
+ final Entity entity = world.createEntity();
+ entity.add(new Mass(1f));
+ entity.add(new Velocity(Vec2f.ZERO));
+ entity.add(new Forces());
+ entity.add(new Gravity(100f));
+ entity.add(new BoundingBox(new Vec2f(0f, 10f), new Vec2f(1f, 1f)));
+
+ world.update(1f);
+
+ assertTrue(entity.get(Velocity.class).getVelocity().getY() < 0f);
+ assertTrue(entity.get(BoundingBox.class).getPosition().getY() < 10f);
+ }
+
+ @Test
+ public void forcesAreClearedEachFrame() {
+ final DAGWorld world = new DAGWorld(new ForceReductionSystem(GRAVITY), new IntegrationSystem());
+ final Entity entity = world.createEntity();
+ entity.add(new Mass(1f));
+ entity.add(new Velocity(Vec2f.ZERO));
+ final Forces forces = new Forces();
+ forces.add(new Force(new Vec2f(0f, 100f)));
+ entity.add(forces);
+
+ world.update(1f);
+
+ assertTrue(entity.get(Forces.class).getForces().isEmpty());
+ }
+
+ @Test
+ public void entityLandsOnPlatformAndStops() {
+ final DAGWorld world = new DAGWorld(
+ new ForceReductionSystem(GRAVITY), new IntegrationSystem(), new CollisionSystem());
+
+ final Entity player = world.createEntity();
+ player.add(new Mass(1f));
+ player.add(new Velocity(new Vec2f(0f, -5f)));
+ player.add(new Forces());
+ player.add(new Gravity(100f));
+ player.add(new Jump(false, 0L));
+ player.add(new BoundingBox(new Vec2f(0f, 1.1f), new Vec2f(1f, 1f)));
+
+ final Entity floor = world.createEntity();
+ floor.add(new BoundingBox(new Vec2f(-5f, 0f), new Vec2f(10f, 1f)));
+ floor.add(new Solid());
+
+ world.update(0.1f);
+
+ assertEquals(1f, player.get(BoundingBox.class).getPosition().getY(), 0.001f);
+ assertEquals(0f, player.get(Velocity.class).getVelocity().getY(), 0.001f);
+ assertTrue(player.get(Jump.class).isCanJump());
+ }
+}