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 +++++++++++++++++++++ .../common/components/physics/BoundingBoxTest.java | 45 ------------- .../common/systems/physics/CollisionGridTest.java | 50 -------------- .../common/systems/physics/PhysicsSystemsTest.java | 78 ---------------------- 5 files changed, 121 insertions(+), 173 deletions(-) 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 delete mode 100644 core/src/test/java/coffee/liz/ecs/common/components/physics/BoundingBoxTest.java delete mode 100644 core/src/test/java/coffee/liz/ecs/common/systems/physics/CollisionGridTest.java delete mode 100644 core/src/test/java/coffee/liz/ecs/common/systems/physics/PhysicsSystemsTest.java (limited to 'core/src/test') 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()); + } +} diff --git a/core/src/test/java/coffee/liz/ecs/common/components/physics/BoundingBoxTest.java b/core/src/test/java/coffee/liz/ecs/common/components/physics/BoundingBoxTest.java deleted file mode 100644 index 2372456..0000000 --- a/core/src/test/java/coffee/liz/ecs/common/components/physics/BoundingBoxTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package coffee.liz.ecs.common.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/ecs/common/systems/physics/CollisionGridTest.java b/core/src/test/java/coffee/liz/ecs/common/systems/physics/CollisionGridTest.java deleted file mode 100644 index d5670aa..0000000 --- a/core/src/test/java/coffee/liz/ecs/common/systems/physics/CollisionGridTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package coffee.liz.ecs.common.systems.physics; - -import coffee.liz.ecs.common.components.physics.BoundingBox; -import coffee.liz.ecs.math.Vec2f; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class CollisionGridTest { - private final CollisionGrid grid = new CollisionGrid(); - - @BeforeEach - public void setup() { - grid.setOrigin(new Vec2f(0f, 0f)); - grid.setCellSize(new Vec2f(32f, 32f)); - } - - @Test - public void insertedEntityIsFoundAsNeighbor() { - final BoundingBox bb = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(1f, 1f)); - grid.insert(1, bb); - assertTrue(grid.getNeighborIds(bb).contains(1)); - } - - @Test - public void entityInDifferentCellIsNotNeighbor() { - final BoundingBox a = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(1f, 1f)); - final BoundingBox b = new BoundingBox(new Vec2f(100f, 100f), new Vec2f(1f, 1f)); - grid.insert(1, a); - assertFalse(grid.getNeighborIds(b).contains(1)); - } - - @Test - public void clearRemovesAllEntities() { - final BoundingBox bb = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(1f, 1f)); - grid.insert(1, bb); - grid.clear(); - assertTrue(grid.getNeighborIds(bb).isEmpty()); - } - - @Test - public void largeEntitySpanningMultipleCellsFoundByNeighborInAnyCell() { - final BoundingBox large = new BoundingBox(new Vec2f(0f, 0f), new Vec2f(64f, 64f)); - final BoundingBox corner = new BoundingBox(new Vec2f(50f, 50f), new Vec2f(1f, 1f)); - grid.insert(1, large); - assertTrue(grid.getNeighborIds(corner).contains(1)); - } -} diff --git a/core/src/test/java/coffee/liz/ecs/common/systems/physics/PhysicsSystemsTest.java b/core/src/test/java/coffee/liz/ecs/common/systems/physics/PhysicsSystemsTest.java deleted file mode 100644 index 13a4a1c..0000000 --- a/core/src/test/java/coffee/liz/ecs/common/systems/physics/PhysicsSystemsTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package coffee.liz.ecs.common.systems.physics; - -import coffee.liz.ecs.DAGWorld; -import coffee.liz.ecs.common.components.physics.BoundingBox; -import coffee.liz.ecs.common.components.physics.Collidable; -import coffee.liz.ecs.common.components.physics.Force; -import coffee.liz.ecs.common.components.physics.Forces; -import coffee.liz.ecs.common.components.physics.Gravity; -import coffee.liz.ecs.common.components.physics.Jump; -import coffee.liz.ecs.common.components.physics.Mass; -import coffee.liz.ecs.common.components.physics.TopCollidable; -import coffee.liz.ecs.common.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(GRAVITY, 32f)); - - 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))); - player.add(new Collidable()); - - final Entity floor = world.createEntity(); - floor.add(new BoundingBox(new Vec2f(-5f, 0f), new Vec2f(10f, 1f))); - floor.add(new TopCollidable()); - - 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