From 242b32050feff1d7f047e52d46daadd3ec682c14 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Sun, 1 Mar 2026 12:54:31 -0800 Subject: Adding animations n stuff. --- .../dyl/components/physics/BoundingBoxTest.java | 45 +++++++++++++ .../dyl/systems/physics/PhysicsSystemsTest.java | 76 ++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 core/src/test/java/coffee/liz/dyl/components/physics/BoundingBoxTest.java create mode 100644 core/src/test/java/coffee/liz/dyl/systems/physics/PhysicsSystemsTest.java (limited to 'core/src/test/java/coffee/liz/dyl') 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()); + } +} -- cgit v1.2.3-70-g09d2