From 21f184450170f4d091028852972ba1114579a92e Mon Sep 17 00:00:00 2001 From: khaybar21 <143800306+khaybar21@users.noreply.github.com> Date: Wed, 21 May 2025 13:15:24 +0200 Subject: [PATCH 1/2] pre Score iteration before scoresystem --- .../cbse/asteroid/AsteroidControlSystem.java | 81 ++++++++++++ .../mmmi/cbse/asteroid/AsteroidPlugin.java | 3 + .../mmmi/cbse/asteroid/AsteroidProcessor.java | 8 +- .../cbse/asteroid/AsteroidSplitterImpl.java | 37 +++++- Asteroids/src/main/java/module-info.java | 18 ++- Bullet/pom.xml | 23 ++++ .../bulletsystem/BulletControlSystem.java | 61 +++++++-- .../mmmi/cbse/bulletsystem/BulletPlugin.java | 1 + Bullet/src/main/java/module-info.java | 21 ++-- .../test/java/BulletControlSystemTest.java | 26 ++++ Collision/pom.xml | 28 +++++ .../collisionsystem/CollisionDetector.java | 70 ++++++++--- Collision/src/main/java/module-info.java | 12 +- Common/pom.xml | 4 + .../dk/sdu/mmmi/cbse/common/data/Entity.java | 13 +- .../sdu/mmmi/cbse/common/data/GameData.java | 8 +- Common/src/main/java/module-info.java | 1 + CommonBullet/src/main/java/module-info.java | 6 +- Core/pom.xml | 30 +++++ .../main/java/dk/sdu/mmmi/cbse/main/Game.java | 85 +++++++++---- .../main/java/dk/sdu/mmmi/cbse/main/Main.java | 30 +++-- Core/src/main/java/module-info.java | 12 +- EnemyShips/pom.xml | 33 +++++ .../java/dk/sdu/mmmi/cbse/enemies/Enemy.java | 6 + .../mmmi/cbse/enemies/EnemyControlSystem.java | 118 ++++++++++++++++++ .../dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java | 75 +++++++++++ EnemyShips/src/main/java/module-info.java | 16 +++ .../playersystem/PlayerControlSystem.java | 6 +- .../mmmi/cbse/playersystem/PlayerPlugin.java | 33 +++-- Player/src/main/java/module-info.java | 5 +- pom.xml | 3 + 31 files changed, 751 insertions(+), 122 deletions(-) create mode 100644 Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidControlSystem.java create mode 100644 Bullet/src/test/java/BulletControlSystemTest.java create mode 100644 EnemyShips/pom.xml create mode 100644 EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java create mode 100644 EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java create mode 100644 EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java create mode 100644 EnemyShips/src/main/java/module-info.java diff --git a/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidControlSystem.java b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidControlSystem.java new file mode 100644 index 000000000..4824af280 --- /dev/null +++ b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidControlSystem.java @@ -0,0 +1,81 @@ +package dk.sdu.mmmi.cbse.asteroid; + +import dk.sdu.mmmi.cbse.common.asteroids.Asteroid; +import dk.sdu.mmmi.cbse.common.data.Entity; +import dk.sdu.mmmi.cbse.common.data.GameData; +import dk.sdu.mmmi.cbse.common.data.World; +import dk.sdu.mmmi.cbse.common.services.IEntityProcessingService; + +import java.util.Random; + +public class AsteroidControlSystem implements IEntityProcessingService { + + private final Random random = new Random(); + private final int maxAsteroids = 10; // max asteroids + private final float spawnInterval = 1.5f; // Seconds between spawn of asteroid. + private float spawnTimer = 0; + + @Override + public void process(GameData gameData, World world) { + spawnTimer += gameData.getDelta(); + + int currentCount = world.getEntities(Asteroid.class).size(); + + while (spawnTimer >= spawnInterval && currentCount < maxAsteroids) { + Entity asteroid = createAsteroid(gameData); + world.addEntity(asteroid); + spawnTimer -= spawnInterval; + currentCount++; + } + } + + private Entity createAsteroid(GameData gameData) { + Entity asteroid = new Asteroid(); + + int size = random.nextInt(20) + 10; // size range + asteroid.setPolygonCoordinates( + size, -size, + -size, -size, + -size, size, + size, size + ); + + // spawn point to avoid asteroids spawning anywhere + int side = random.nextInt(4); + float x, y, rotation; + switch (side) { + case 0: // Left + x = 0; + y = random.nextInt(gameData.getDisplayHeight()); + rotation = random.nextInt(120) - 60; + break; + case 1: // Right + x = gameData.getDisplayWidth(); + y = random.nextInt(gameData.getDisplayHeight()); + rotation = 180 + random.nextInt(120) - 60; + break; + case 2: // Top + x = random.nextInt(gameData.getDisplayWidth()); + y = 0; + rotation = 90 + random.nextInt(120) - 60; + break; + case 3: // Bottom + x = random.nextInt(gameData.getDisplayWidth()); + y = gameData.getDisplayHeight(); + rotation = 270 + random.nextInt(120) - 60; + break; + default: + x = gameData.getDisplayWidth() / 2f; + y = gameData.getDisplayHeight() / 2f; + rotation = random.nextInt(360); + } + + asteroid.setX(x); + asteroid.setY(y); + asteroid.setRotation(rotation); + asteroid.setRadius(size / 2f); + asteroid.setColor(javafx.scene.paint.Color.BLACK); + + return asteroid; + } +} diff --git a/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidPlugin.java b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidPlugin.java index 9037dbf62..2a1c6bd42 100644 --- a/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidPlugin.java +++ b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidPlugin.java @@ -5,6 +5,8 @@ import dk.sdu.mmmi.cbse.common.data.GameData; import dk.sdu.mmmi.cbse.common.data.World; import dk.sdu.mmmi.cbse.common.services.IGamePluginService; +import javafx.scene.paint.Color; + import java.util.Random; /** @@ -29,6 +31,7 @@ public void stop(GameData gameData, World world) { private Entity createAsteroid(GameData gameData) { Entity asteroid = new Asteroid(); + asteroid.setColor(Color.BLACK); Random rnd = new Random(); int size = rnd.nextInt(10) + 5; asteroid.setPolygonCoordinates(size, -size, -size, -size, -size, size, size, size); diff --git a/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidProcessor.java b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidProcessor.java index 898b314ce..daf548dc9 100644 --- a/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidProcessor.java +++ b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidProcessor.java @@ -13,7 +13,6 @@ public class AsteroidProcessor implements IEntityProcessingService { @Override public void process(GameData gameData, World world) { - for (Entity asteroid : world.getEntities(Asteroid.class)) { double changeX = Math.cos(Math.toRadians(asteroid.getRotation())); double changeY = Math.sin(Math.toRadians(asteroid.getRotation())); @@ -21,8 +20,9 @@ public void process(GameData gameData, World world) { asteroid.setX(asteroid.getX() + changeX * 0.5); asteroid.setY(asteroid.getY() + changeY * 0.5); + // ✅ FIXED: Use + instead of - if (asteroid.getX() < 0) { - asteroid.setX(asteroid.getX() - gameData.getDisplayWidth()); + asteroid.setX(asteroid.getX() + gameData.getDisplayWidth()); } if (asteroid.getX() > gameData.getDisplayWidth()) { @@ -30,15 +30,13 @@ public void process(GameData gameData, World world) { } if (asteroid.getY() < 0) { - asteroid.setY(asteroid.getY() - gameData.getDisplayHeight()); + asteroid.setY(asteroid.getY() + gameData.getDisplayHeight()); } if (asteroid.getY() > gameData.getDisplayHeight()) { asteroid.setY(asteroid.getY() % gameData.getDisplayHeight()); } - } - } /** diff --git a/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidSplitterImpl.java b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidSplitterImpl.java index 619587ec0..9a5cd1fd5 100644 --- a/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidSplitterImpl.java +++ b/Asteroids/src/main/java/dk/sdu/mmmi/cbse/asteroid/AsteroidSplitterImpl.java @@ -1,17 +1,42 @@ package dk.sdu.mmmi.cbse.asteroid; +import dk.sdu.mmmi.cbse.common.asteroids.Asteroid; import dk.sdu.mmmi.cbse.common.asteroids.IAsteroidSplitter; import dk.sdu.mmmi.cbse.common.data.Entity; import dk.sdu.mmmi.cbse.common.data.World; -/** - * - * @author corfixen - */ public class AsteroidSplitterImpl implements IAsteroidSplitter { @Override - public void createSplitAsteroid(Entity e, World world) { - } + public void createSplitAsteroid(Entity asteroid, World world) { + float currentRadius = asteroid.getRadius(); + + // Prevent splitting if already small + if (currentRadius <= 5) { + return; + } + + + float splitRadius = 4f; + + for (int i = 0; i < 2; i++) { + Entity smallerAsteroid = new Asteroid(); + smallerAsteroid.setX(asteroid.getX()); + smallerAsteroid.setY(asteroid.getY()); + smallerAsteroid.setRotation((float) (asteroid.getRotation() + (i == 0 ? 20 : -20))); + + smallerAsteroid.setRadius(splitRadius); + smallerAsteroid.setPolygonCoordinates( + splitRadius, -splitRadius, + -splitRadius, -splitRadius, + -splitRadius, splitRadius, + splitRadius, splitRadius + ); + + smallerAsteroid.setColor(asteroid.getColor()); + + world.addEntity(smallerAsteroid); + } + } } diff --git a/Asteroids/src/main/java/module-info.java b/Asteroids/src/main/java/module-info.java index d0c86074b..7b4a62e12 100644 --- a/Asteroids/src/main/java/module-info.java +++ b/Asteroids/src/main/java/module-info.java @@ -1,9 +1,15 @@ -import dk.sdu.mmmi.cbse.common.services.IEntityProcessingService; -import dk.sdu.mmmi.cbse.common.services.IGamePluginService; - module Asteroid { requires Common; requires CommonAsteroids; - provides IGamePluginService with dk.sdu.mmmi.cbse.asteroid.AsteroidPlugin; - provides IEntityProcessingService with dk.sdu.mmmi.cbse.asteroid.AsteroidProcessor; -} \ No newline at end of file + requires javafx.graphics; + + provides dk.sdu.mmmi.cbse.common.services.IGamePluginService + with dk.sdu.mmmi.cbse.asteroid.AsteroidPlugin; + + provides dk.sdu.mmmi.cbse.common.services.IEntityProcessingService + with dk.sdu.mmmi.cbse.asteroid.AsteroidProcessor, + dk.sdu.mmmi.cbse.asteroid.AsteroidControlSystem; + + provides dk.sdu.mmmi.cbse.common.asteroids.IAsteroidSplitter + with dk.sdu.mmmi.cbse.asteroid.AsteroidSplitterImpl; +} diff --git a/Bullet/pom.xml b/Bullet/pom.xml index 161296b46..e55666569 100644 --- a/Bullet/pom.xml +++ b/Bullet/pom.xml @@ -9,6 +9,13 @@ Bullet jar + + org.junit.jupiter + junit-jupiter + 5.10.0 + test + + ${project.groupId} Common @@ -19,5 +26,21 @@ CommonBullet ${project.version} + + org.testng + testng + RELEASE + compile + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + + + \ No newline at end of file diff --git a/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletControlSystem.java b/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletControlSystem.java index 11cb52376..a9c158fa0 100644 --- a/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletControlSystem.java +++ b/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletControlSystem.java @@ -6,30 +6,65 @@ import dk.sdu.mmmi.cbse.common.data.GameData; import dk.sdu.mmmi.cbse.common.data.World; import dk.sdu.mmmi.cbse.common.services.IEntityProcessingService; +import javafx.scene.paint.Color; + +import java.util.*; public class BulletControlSystem implements IEntityProcessingService, BulletSPI { + private static final float MAX_LIFETIME = 1.5f; // Bullets disappear after 1.5 seconds + private static final float BULLET_SPEED = 10f; // How fast bullets move per frame + + // Keeps track of how long each bullet has existed + private final Map bulletTimers = new HashMap<>(); + @Override public void process(GameData gameData, World world) { + List expiredBullets = new ArrayList<>(); for (Entity bullet : world.getEntities(Bullet.class)) { - double changeX = Math.cos(Math.toRadians(bullet.getRotation())); - double changeY = Math.sin(Math.toRadians(bullet.getRotation())); - bullet.setX(bullet.getX() + changeX * 3); - bullet.setY(bullet.getY() + changeY * 3); + // Move the bullet forward based on its direction and speed + double radians = Math.toRadians(bullet.getRotation()); + bullet.setX(bullet.getX() + Math.cos(radians) * BULLET_SPEED); + bullet.setY(bullet.getY() + Math.sin(radians) * BULLET_SPEED); + + // Update how long this bullet has been alive + float newLifetime = bulletTimers.getOrDefault(bullet, 0f) + gameData.getDelta(); + bulletTimers.put(bullet, newLifetime); + + // Mark bullets that lived too long for removal + if (newLifetime >= MAX_LIFETIME) { + expiredBullets.add(bullet); + } + } + + // remove expired bullets + for (Entity expired : expiredBullets) { + bulletTimers.remove(expired); + world.removeEntity(expired); } } @Override public Entity createBullet(Entity shooter, GameData gameData) { - Entity bullet = new Bullet(); - bullet.setPolygonCoordinates(1, -1, 1, 1, -1, 1, -1, -1); - double changeX = Math.cos(Math.toRadians(shooter.getRotation())); - double changeY = Math.sin(Math.toRadians(shooter.getRotation())); - bullet.setX(shooter.getX() + changeX * 10); - bullet.setY(shooter.getY() + changeY * 10); - bullet.setRotation(shooter.getRotation()); - bullet.setRadius(1); - return bullet; + Entity newBullet = new Bullet(); + + // bullet shape + newBullet.setPolygonCoordinates(0, -2, 1, -1, 1, 1, 0, 2, -1, 1, -1, -1); + + + double angle = Math.toRadians(shooter.getRotation()); + newBullet.setX(shooter.getX() + Math.cos(angle) * 3); + newBullet.setY(shooter.getY() + Math.sin(angle) * 3); + + newBullet.setRotation(shooter.getRotation()); + newBullet.setRadius(1); // For collision detection + + newBullet.setColor(Color.YELLOW); // Bullet color + + // Start the bullet's lifetime timer at 0 + bulletTimers.put(newBullet, 0f); + + return newBullet; } } diff --git a/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletPlugin.java b/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletPlugin.java index 93dced409..6ef74fa0a 100644 --- a/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletPlugin.java +++ b/Bullet/src/main/java/dk/sdu/mmmi/cbse/bulletsystem/BulletPlugin.java @@ -20,6 +20,7 @@ public void stop(GameData gameData, World world) { for (Entity e : world.getEntities()) { if (e.getClass() == Bullet.class) { world.removeEntity(e); + } } } diff --git a/Bullet/src/main/java/module-info.java b/Bullet/src/main/java/module-info.java index fc255be6f..979b96d41 100644 --- a/Bullet/src/main/java/module-info.java +++ b/Bullet/src/main/java/module-info.java @@ -1,11 +1,16 @@ -import dk.sdu.mmmi.cbse.common.bullet.BulletSPI; -import dk.sdu.mmmi.cbse.common.services.IEntityProcessingService; -import dk.sdu.mmmi.cbse.common.services.IGamePluginService; - module Bullet { requires Common; requires CommonBullet; - provides IGamePluginService with dk.sdu.mmmi.cbse.bulletsystem.BulletPlugin; - provides BulletSPI with dk.sdu.mmmi.cbse.bulletsystem.BulletControlSystem; - provides IEntityProcessingService with dk.sdu.mmmi.cbse.bulletsystem.BulletControlSystem; -} \ No newline at end of file + requires javafx.graphics; + + exports dk.sdu.mmmi.cbse.bulletsystem; + + provides dk.sdu.mmmi.cbse.common.services.IGamePluginService + with dk.sdu.mmmi.cbse.bulletsystem.BulletPlugin; + + provides dk.sdu.mmmi.cbse.common.bullet.BulletSPI + with dk.sdu.mmmi.cbse.bulletsystem.BulletControlSystem; + + provides dk.sdu.mmmi.cbse.common.services.IEntityProcessingService + with dk.sdu.mmmi.cbse.bulletsystem.BulletControlSystem; +} diff --git a/Bullet/src/test/java/BulletControlSystemTest.java b/Bullet/src/test/java/BulletControlSystemTest.java new file mode 100644 index 000000000..6fd8c1ac5 --- /dev/null +++ b/Bullet/src/test/java/BulletControlSystemTest.java @@ -0,0 +1,26 @@ +package dk.sdu.mmmi.cbse.bulletsystem; + +import dk.sdu.mmmi.cbse.common.data.Entity; +import dk.sdu.mmmi.cbse.common.data.GameData; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +class BulletControlSystemTest { + + private final BulletControlSystem system = new BulletControlSystem(); + + @Test + void createsBulletCorrectly() { + Entity shooter = new Entity(); + shooter.setX(100); + shooter.setY(200); + shooter.setRotation(90); + + Entity bullet = system.createBullet(shooter, new GameData()); + + assertNotNull(bullet); + assertEquals(90, bullet.getRotation(), 0.1); + assertEquals(1, bullet.getRadius(), 0.1); + assertTrue(bullet.getY() > 200); // moving down if rotation is 90 degrees + } +} diff --git a/Collision/pom.xml b/Collision/pom.xml index 4ba9b5911..16d62e9bc 100644 --- a/Collision/pom.xml +++ b/Collision/pom.xml @@ -14,5 +14,33 @@ Common ${project.version} + + ${project.groupId} + Bullet + ${project.version} + + + ${project.groupId} + CommonBullet + ${project.version} + + + ${project.groupId} + Player + ${project.version} + + + ${project.groupId} + CommonAsteroids + ${project.version} + + + ${project.groupId} + Enemy + 1.0.1-SNAPSHOT + true + + + \ No newline at end of file diff --git a/Collision/src/main/java/dk/sdu/mmmi/cbse/collisionsystem/CollisionDetector.java b/Collision/src/main/java/dk/sdu/mmmi/cbse/collisionsystem/CollisionDetector.java index 16ba08fdc..4fb648c81 100644 --- a/Collision/src/main/java/dk/sdu/mmmi/cbse/collisionsystem/CollisionDetector.java +++ b/Collision/src/main/java/dk/sdu/mmmi/cbse/collisionsystem/CollisionDetector.java @@ -1,41 +1,81 @@ package dk.sdu.mmmi.cbse.collisionsystem; +import dk.sdu.mmmi.cbse.common.asteroids.Asteroid; +import dk.sdu.mmmi.cbse.common.asteroids.IAsteroidSplitter; +import dk.sdu.mmmi.cbse.common.bullet.Bullet; import dk.sdu.mmmi.cbse.common.services.IPostEntityProcessingService; import dk.sdu.mmmi.cbse.common.data.Entity; import dk.sdu.mmmi.cbse.common.data.GameData; import dk.sdu.mmmi.cbse.common.data.World; +import java.util.ServiceLoader; + public class CollisionDetector implements IPostEntityProcessingService { - public CollisionDetector() { - } + private final ServiceLoader asteroidSplitterLoader = ServiceLoader.load(IAsteroidSplitter.class); @Override public void process(GameData gameData, World world) { - // two for loops for all entities in the world for (Entity entity1 : world.getEntities()) { for (Entity entity2 : world.getEntities()) { - - // if the two entities are identical, skip the iteration if (entity1.getID().equals(entity2.getID())) { - continue; + continue; } - // CollisionDetection - if (this.collides(entity1, entity2)) { - world.removeEntity(entity1); - world.removeEntity(entity2); + if (collides(entity1, entity2)) { + handleCollision(entity1, entity2, world); } } } - } - public Boolean collides(Entity entity1, Entity entity2) { - float dx = (float) entity1.getX() - (float) entity2.getX(); - float dy = (float) entity1.getY() - (float) entity2.getY(); + private boolean collides(Entity e1, Entity e2) { + float dx = (float) (e1.getX() - e2.getX()); + float dy = (float) (e1.getY() - e2.getY()); float distance = (float) Math.sqrt(dx * dx + dy * dy); - return distance < (entity1.getRadius() + entity2.getRadius()); + return distance < (e1.getRadius() + e2.getRadius()); } + private void handleCollision(Entity e1, Entity e2, World world) { + String c1 = e1.getClass().getSimpleName(); + String c2 = e2.getClass().getSimpleName(); + + boolean isBullet = e1 instanceof Bullet || e2 instanceof Bullet; + boolean isAsteroid = e1 instanceof Asteroid || e2 instanceof Asteroid; + boolean isPlayer = c1.equals("Player") || c2.equals("Player"); + boolean isEnemy = c1.equals("Enemy") || c2.equals("Enemy"); + + // Bullet hits asteroid + if ((e1 instanceof Bullet && e2 instanceof Asteroid) || (e2 instanceof Bullet && e1 instanceof Asteroid)) { + Entity asteroid = e1 instanceof Asteroid ? e1 : e2; + createAsteroidSplit(asteroid, world); + world.removeEntity(asteroid); + world.removeEntity(e1); + world.removeEntity(e2); + } + + // Bullet hits enemy or player + else if (isBullet && (isEnemy || isPlayer)) { + world.removeEntity(e1); + world.removeEntity(e2); + } + + // Asteroid hits player or enemy + else if (isAsteroid && (isPlayer || isEnemy)) { + world.removeEntity(e1); + world.removeEntity(e2); + } + + // Enemy hits player + else if (isEnemy && isPlayer) { + world.removeEntity(e1); + world.removeEntity(e2); + } + } + + private void createAsteroidSplit(Entity asteroid, World world) { + for (IAsteroidSplitter splitter : asteroidSplitterLoader) { + splitter.createSplitAsteroid(asteroid, world); + } + } } diff --git a/Collision/src/main/java/module-info.java b/Collision/src/main/java/module-info.java index b347302f3..e3b45cf9a 100644 --- a/Collision/src/main/java/module-info.java +++ b/Collision/src/main/java/module-info.java @@ -1,6 +1,14 @@ import dk.sdu.mmmi.cbse.common.services.IPostEntityProcessingService; module Collision { - requires Common; - provides IPostEntityProcessingService with dk.sdu.mmmi.cbse.collisionsystem.CollisionDetector; + requires Common; + requires Bullet; + requires CommonBullet; + requires Player; + requires CommonAsteroids; + + uses dk.sdu.mmmi.cbse.common.asteroids.IAsteroidSplitter; + + provides dk.sdu.mmmi.cbse.common.services.IPostEntityProcessingService + with dk.sdu.mmmi.cbse.collisionsystem.CollisionDetector; } \ No newline at end of file diff --git a/Common/pom.xml b/Common/pom.xml index b8b5ad1e3..984a3160d 100644 --- a/Common/pom.xml +++ b/Common/pom.xml @@ -11,6 +11,10 @@ Common + + org.openjfx + javafx-graphics + diff --git a/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/Entity.java b/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/Entity.java index 6cef2d0b4..7e199cd9d 100644 --- a/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/Entity.java +++ b/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/Entity.java @@ -2,6 +2,8 @@ import java.io.Serializable; import java.util.UUID; +import javafx.scene.paint.Color; + public class Entity implements Serializable { @@ -12,7 +14,16 @@ public class Entity implements Serializable { private double y; private double rotation; private float radius; - + + private Color color = Color.WHITE; // default is white + + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } public String getID() { return ID.toString(); diff --git a/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/GameData.java b/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/GameData.java index 606185220..dcd792d51 100644 --- a/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/GameData.java +++ b/Common/src/main/java/dk/sdu/mmmi/cbse/common/data/GameData.java @@ -5,6 +5,7 @@ public class GameData { private int displayWidth = 800 ; private int displayHeight = 800; private final GameKeys keys = new GameKeys(); + private float delta = 0; public GameKeys getKeys() { @@ -26,6 +27,11 @@ public void setDisplayHeight(int height) { public int getDisplayHeight() { return displayHeight; } + public float getDelta() { + return delta; + } - + public void setDelta(float delta) { + this.delta = delta; + } } diff --git a/Common/src/main/java/module-info.java b/Common/src/main/java/module-info.java index 42abfb8c8..e32d96811 100644 --- a/Common/src/main/java/module-info.java +++ b/Common/src/main/java/module-info.java @@ -1,4 +1,5 @@ module Common { + requires javafx.graphics; exports dk.sdu.mmmi.cbse.common.services; exports dk.sdu.mmmi.cbse.common.data; exports dk.sdu.mmmi.cbse.common.util; diff --git a/CommonBullet/src/main/java/module-info.java b/CommonBullet/src/main/java/module-info.java index 37eedf885..0f98c7d2f 100644 --- a/CommonBullet/src/main/java/module-info.java +++ b/CommonBullet/src/main/java/module-info.java @@ -1,4 +1,6 @@ module CommonBullet { - requires Common; exports dk.sdu.mmmi.cbse.common.bullet; -} \ No newline at end of file + requires Common; + + +} diff --git a/Core/pom.xml b/Core/pom.xml index 4242d55e3..b7e859563 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -24,6 +24,23 @@ + + dk.sdu.mmmi.cbse + Bullet + ${project.version} + + + dk.sdu.mmmi.cbse + Player + ${project.version} + + + + dk.sdu.mmmi.cbse + Collision + ${project.version} + + org.openjfx javafx-controls @@ -73,6 +90,19 @@ org.springframework spring-jcl + + dk.sdu.mmmi.cbse + Enemy + 1.0.1-SNAPSHOT + true + + + + dk.sdu.mmmi.cbse + Asteroids + 1.0.1-SNAPSHOT + compile + diff --git a/Core/src/main/java/dk/sdu/mmmi/cbse/main/Game.java b/Core/src/main/java/dk/sdu/mmmi/cbse/main/Game.java index 9648ea4c3..08020ad74 100644 --- a/Core/src/main/java/dk/sdu/mmmi/cbse/main/Game.java +++ b/Core/src/main/java/dk/sdu/mmmi/cbse/main/Game.java @@ -19,16 +19,24 @@ import javafx.scene.Scene; import javafx.scene.input.KeyCode; import javafx.scene.layout.Pane; +import javafx.scene.paint.Color; import javafx.scene.shape.Polygon; import javafx.scene.text.Text; import javafx.stage.Stage; import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import java.util.Set; +import java.util.HashSet; /** * * @author jcs */ class Game { + private int enemyKills = 0; + private int asteroidKills = 0; + + private final Text asteroidKillText = new Text(10, 20, "Asteroids destroyed: 0"); + private final Text enemyKillText = new Text(10, 40, "Enemies destroyed: 0"); private final GameData gameData = new GameData(); private final World world = new World(); @@ -45,9 +53,8 @@ class Game { } public void start(Stage window) throws Exception { - Text text = new Text(10, 20, "Destroyed asteroids: 0"); gameWindow.setPrefSize(gameData.getDisplayWidth(), gameData.getDisplayHeight()); - gameWindow.getChildren().add(text); + gameWindow.getChildren().addAll(asteroidKillText, enemyKillText); Scene scene = new Scene(gameWindow); scene.setOnKeyPressed(event -> { @@ -77,18 +84,20 @@ public void start(Stage window) throws Exception { if (event.getCode().equals(KeyCode.SPACE)) { gameData.getKeys().setKey(GameKeys.SPACE, false); } - }); - // Lookup all Game Plugins using ServiceLoader - for (IGamePluginService iGamePlugin : getGamePluginServices()) { - iGamePlugin.start(gameData, world); + for (IGamePluginService plugin : gamePluginServices) { + plugin.start(gameData, world); } + for (Entity entity : world.getEntities()) { Polygon polygon = new Polygon(entity.getPolygonCoordinates()); + polygon.setFill(entity.getColor()); + polygon.setStroke(Color.BLACK); polygons.put(entity, polygon); gameWindow.getChildren().add(polygon); } + window.setScene(scene); window.setTitle("ASTEROIDS"); window.show(); @@ -96,46 +105,73 @@ public void start(Stage window) throws Exception { public void render() { new AnimationTimer() { + private long lastUpdate = 0; + @Override public void handle(long now) { + if (lastUpdate > 0) { + float deltaSeconds = (now - lastUpdate) / 1_000_000_000f; + gameData.setDelta(deltaSeconds); + } + lastUpdate = now; + update(); draw(); gameData.getKeys().update(); } - }.start(); } private void update() { - for (IEntityProcessingService entityProcessorService : getEntityProcessingServices()) { - entityProcessorService.process(gameData, world); + for (IEntityProcessingService processor : entityProcessingServiceList) { + processor.process(gameData, world); } - for (IPostEntityProcessingService postEntityProcessorService : getPostEntityProcessingServices()) { - postEntityProcessorService.process(gameData, world); + for (IPostEntityProcessingService postProcessor : postEntityProcessingServices) { + postProcessor.process(gameData, world); } } private void draw() { - for (Entity polygonEntity : polygons.keySet()) { - if (!world.getEntities().contains(polygonEntity)) { - Polygon removedPolygon = polygons.get(polygonEntity); - polygons.remove(polygonEntity); - gameWindow.getChildren().remove(removedPolygon); + Set toRemove = new HashSet<>(); + + for (Entity e : polygons.keySet()) { + if (!world.getEntities().contains(e)) { + String className = e.getClass().getSimpleName(); + + if (className.equalsIgnoreCase("Enemy")) { + enemyKills++; + enemyKillText.setText("Enemies destroyed: " + enemyKills); + } else if (className.equalsIgnoreCase("Asteroid")) { + asteroidKills++; + asteroidKillText.setText("Asteroids destroyed: " + asteroidKills); + } + + Polygon p = polygons.get(e); + if (p != null) { + gameWindow.getChildren().remove(p); + } + toRemove.add(e); } } - for (Entity entity : world.getEntities()) { - Polygon polygon = polygons.get(entity); + for (Entity e : toRemove) { + polygons.remove(e); + } + + for (Entity e : world.getEntities()) { + Polygon polygon = polygons.get(e); if (polygon == null) { - polygon = new Polygon(entity.getPolygonCoordinates()); - polygons.put(entity, polygon); + polygon = new Polygon(e.getPolygonCoordinates()); + polygon.setFill(e.getColor()); + polygon.setStroke(Color.BLACK); + polygons.put(e, polygon); gameWindow.getChildren().add(polygon); } - polygon.setTranslateX(entity.getX()); - polygon.setTranslateY(entity.getY()); - polygon.setRotate(entity.getRotation()); - } + polygon.setTranslateX(e.getX()); + polygon.setTranslateY(e.getY()); + polygon.setRotate(e.getRotation()); + } } public List getGamePluginServices() { @@ -149,5 +185,4 @@ public List getEntityProcessingServices() { public List getPostEntityProcessingServices() { return postEntityProcessingServices; } - } diff --git a/Core/src/main/java/dk/sdu/mmmi/cbse/main/Main.java b/Core/src/main/java/dk/sdu/mmmi/cbse/main/Main.java index 92c71ab7d..597ccc1be 100644 --- a/Core/src/main/java/dk/sdu/mmmi/cbse/main/Main.java +++ b/Core/src/main/java/dk/sdu/mmmi/cbse/main/Main.java @@ -6,25 +6,31 @@ public class Main extends Application { - + private AnnotationConfigApplicationContext context; public static void main(String[] args) { - launch(Main.class); + launch(args); } @Override - public void start(Stage window) throws Exception { - - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ModuleConfig.class); + public void start(Stage stage) throws Exception { + + + // Spring + context = new AnnotationConfigApplicationContext(ModuleConfig.class); - for (String beanName : ctx.getBeanDefinitionNames()) { - System.out.println(beanName); - } - - Game game = ctx.getBean(Game.class); - game.start(window); - game.render(); + Game game = context.getBean(Game.class); + + // Start game + game.start(stage); + game.render(); } + @Override + public void stop() throws Exception { + if (context != null) { + context.close(); + } + } } diff --git a/Core/src/main/java/module-info.java b/Core/src/main/java/module-info.java index 8b2d21c22..69df7323d 100644 --- a/Core/src/main/java/module-info.java +++ b/Core/src/main/java/module-info.java @@ -1,16 +1,20 @@ module Core { requires Common; + requires CommonBullet; - requires CommonBullet; - requires javafx.graphics; + requires javafx.graphics; requires spring.context; requires spring.core; requires spring.beans; + requires CommonAsteroids; + requires Asteroid; + + exports dk.sdu.mmmi.cbse.main; - opens dk.sdu.mmmi.cbse.main to javafx.graphics,spring.core; + opens dk.sdu.mmmi.cbse.main to javafx.graphics, spring.core; + uses dk.sdu.mmmi.cbse.common.services.IGamePluginService; uses dk.sdu.mmmi.cbse.common.services.IEntityProcessingService; uses dk.sdu.mmmi.cbse.common.services.IPostEntityProcessingService; } - diff --git a/EnemyShips/pom.xml b/EnemyShips/pom.xml new file mode 100644 index 000000000..2b767cab2 --- /dev/null +++ b/EnemyShips/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + dk.sdu.mmmi.cbse + asteroids.jpms + 1.0.1-SNAPSHOT + + + Enemy + jar + + + dk.sdu.mmmi.cbse + Bullet + 1.0.1-SNAPSHOT + + + + dk.sdu.mmmi.cbse + Common + 1.0.1-SNAPSHOT + + + dk.sdu.mmmi.cbse + CommonBullet + 1.0.1-SNAPSHOT + + + + \ No newline at end of file diff --git a/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java b/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java new file mode 100644 index 000000000..dc060d82f --- /dev/null +++ b/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java @@ -0,0 +1,6 @@ +package dk.sdu.mmmi.cbse.enemies; + +import dk.sdu.mmmi.cbse.common.data.Entity; + +public class Enemy extends Entity { +} \ No newline at end of file diff --git a/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java b/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java new file mode 100644 index 000000000..bd15c7ede --- /dev/null +++ b/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java @@ -0,0 +1,118 @@ +package dk.sdu.mmmi.cbse.enemies; + +import dk.sdu.mmmi.cbse.common.bullet.BulletSPI; +import dk.sdu.mmmi.cbse.common.data.Entity; +import dk.sdu.mmmi.cbse.common.data.GameData; +import dk.sdu.mmmi.cbse.common.data.World; +import dk.sdu.mmmi.cbse.common.services.IEntityProcessingService; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.ServiceLoader; + +import static java.util.stream.Collectors.toList; + +public class EnemyControlSystem implements IEntityProcessingService { + + private final Random random = new Random(); + private final int maxEnemies = 5; + private final float spawnInterval = 1f; + private float spawnTimer = 0; + + // Per-enemy state tracking + private final Map directionChangeTimers = new HashMap<>(); + private final Map shootCooldownTimers = new HashMap<>(); + + @Override + public void process(GameData gameData, World world) { + spawnTimer += gameData.getDelta(); + spawnEnemiesAggressively(gameData, world); + + for (Entity enemy : world.getEntities(Enemy.class)) { + handleMovement(enemy, gameData); + handleBounds(enemy, gameData); + maybeShoot(enemy, gameData, world); + } + + // Clean up memory if enemies are destroyed + directionChangeTimers.keySet().removeIf(e -> !world.getEntities().contains(e)); + shootCooldownTimers.keySet().removeIf(e -> !world.getEntities().contains(e)); + } + + private void spawnEnemiesAggressively(GameData gameData, World world) { + int currentCount = world.getEntities(Enemy.class).size(); + + while (currentCount < maxEnemies && spawnTimer >= spawnInterval) { + Entity newEnemy = new EnemyPlugin().createEnemy(gameData); + world.addEntity(newEnemy); + + // Initialize per-enemy timers + directionChangeTimers.put(newEnemy, 0f); + shootCooldownTimers.put(newEnemy, 0f); + + spawnTimer -= spawnInterval; + currentCount++; + } + } + + private void handleMovement(Entity enemy, GameData gameData) { + float timer = directionChangeTimers.getOrDefault(enemy, 0f); + timer += gameData.getDelta(); + + // Random direction change every 1,5 seconds + if (timer >= 1.5f) { + int direction = random.nextBoolean() ? 1 : -1; + enemy.setRotation(enemy.getRotation() + direction * (5 + random.nextInt(6))); // 5–10 degrees + timer = 0f; + } + directionChangeTimers.put(enemy, timer); + + // move forward + double radians = Math.toRadians(enemy.getRotation()); + enemy.setX(enemy.getX() + Math.cos(radians)); + enemy.setY(enemy.getY() + Math.sin(radians)); + } + + private void handleBounds(Entity enemy, GameData gameData) { + boolean bounced = false; + + if (enemy.getX() < 0 || enemy.getX() > gameData.getDisplayWidth()) { + bounced = true; + enemy.setX(Math.max(0, Math.min(enemy.getX(), gameData.getDisplayWidth()))); + } + + if (enemy.getY() < 0 || enemy.getY() > gameData.getDisplayHeight()) { + bounced = true; + enemy.setY(Math.max(0, Math.min(enemy.getY(), gameData.getDisplayHeight()))); + } + + if (bounced) { + enemy.setRotation(enemy.getRotation() + 180); + } + } + + private void maybeShoot(Entity enemy, GameData gameData, World world) { + float shootTimer = shootCooldownTimers.getOrDefault(enemy, 0f); + shootTimer += gameData.getDelta(); + + if (shootTimer >= 2.5f) { + if (random.nextDouble() < 0.2) { // 20% chance to shoot + getBulletSPIs().stream().findFirst().ifPresent(spi -> + world.addEntity(spi.createBullet(enemy, gameData)) + ); + } + shootTimer = 0f; + } + + shootCooldownTimers.put(enemy, shootTimer); + } + + private Collection getBulletSPIs() { + return ServiceLoader.load(BulletSPI.class) + .stream() + .map(ServiceLoader.Provider::get) + .collect(toList()); + } +} diff --git a/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java b/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java new file mode 100644 index 000000000..5a6954740 --- /dev/null +++ b/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java @@ -0,0 +1,75 @@ +package dk.sdu.mmmi.cbse.enemies; + +import dk.sdu.mmmi.cbse.common.data.Entity; +import dk.sdu.mmmi.cbse.common.data.GameData; +import dk.sdu.mmmi.cbse.common.data.World; +import dk.sdu.mmmi.cbse.common.services.IGamePluginService; +import javafx.scene.paint.Color; + +import java.util.Random; + +public class EnemyPlugin implements IGamePluginService { + + private Entity enemy; + + @Override + public void start(GameData gameData, World world) { + enemy = createEnemy(gameData); + world.addEntity(enemy); + } + + Entity createEnemy(GameData gameData) { + Entity enemyShip = new Enemy(); + + Random random = new Random(); + float x, y; + float rotation; + + int side = random.nextInt(4); // 0 = left, 1 = right, 2 = top, 3 = bottom + + switch (side) { + case 0: // Left edge + x = 0; + y = random.nextInt(gameData.getDisplayHeight()); + rotation = random.nextInt(120) - 60; // Aim rightward + break; + case 1: // Right edge + x = gameData.getDisplayWidth(); + y = random.nextInt(gameData.getDisplayHeight()); + rotation = 180 + random.nextInt(120) - 60; // Aim leftward + break; + case 2: // Top edge + x = random.nextInt(gameData.getDisplayWidth()); + y = 0; + rotation = 90 + random.nextInt(120) - 60; // Aim downward + break; + case 3: // Bottom edge + x = random.nextInt(gameData.getDisplayWidth()); + y = gameData.getDisplayHeight(); + rotation = 270 + random.nextInt(120) - 60; // Aim upward + break; + default: + x = gameData.getDisplayWidth() / 2f; + y = gameData.getDisplayHeight() / 2f; + rotation = random.nextInt(360); + } + + enemyShip.setX(x); + enemyShip.setY(y); + enemyShip.setRotation(rotation); + enemyShip.setRadius(10); + + // enemy shape + enemyShip.setPolygonCoordinates(-5, -5, 10, 0, -5, 5); + + // enemy color + enemyShip.setColor(Color.RED); + + return enemyShip; + } + + @Override + public void stop(GameData gameData, World world) { + world.removeEntity(enemy); + } +} diff --git a/EnemyShips/src/main/java/module-info.java b/EnemyShips/src/main/java/module-info.java new file mode 100644 index 000000000..6738f35cd --- /dev/null +++ b/EnemyShips/src/main/java/module-info.java @@ -0,0 +1,16 @@ +module Enemy { + exports dk.sdu.mmmi.cbse.enemies; + + requires Common; + requires CommonBullet; + requires Bullet; + requires javafx.graphics; + + provides dk.sdu.mmmi.cbse.common.services.IGamePluginService + with dk.sdu.mmmi.cbse.enemies.EnemyPlugin; + + provides dk.sdu.mmmi.cbse.common.services.IEntityProcessingService + with dk.sdu.mmmi.cbse.enemies.EnemyControlSystem; + + uses dk.sdu.mmmi.cbse.common.bullet.BulletSPI; +} diff --git a/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerControlSystem.java b/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerControlSystem.java index 4a8039f81..4d85185c3 100644 --- a/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerControlSystem.java +++ b/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerControlSystem.java @@ -32,12 +32,12 @@ public void process(GameData gameData, World world) { player.setX(player.getX() + changeX); player.setY(player.getY() + changeY); } - if(gameData.getKeys().isDown(GameKeys.SPACE)) { + if(gameData.getKeys().isDown(GameKeys.SPACE)) { getBulletSPIs().stream().findFirst().ifPresent( spi -> {world.addEntity(spi.createBullet(player, gameData));} ); } - + if (player.getX() < 0) { player.setX(1); } @@ -62,3 +62,5 @@ private Collection getBulletSPIs() { return ServiceLoader.load(BulletSPI.class).stream().map(ServiceLoader.Provider::get).collect(toList()); } } + + diff --git a/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerPlugin.java b/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerPlugin.java index 6a0fe84e7..97cb2741b 100644 --- a/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerPlugin.java +++ b/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/PlayerPlugin.java @@ -4,35 +4,30 @@ import dk.sdu.mmmi.cbse.common.data.GameData; import dk.sdu.mmmi.cbse.common.data.World; import dk.sdu.mmmi.cbse.common.services.IGamePluginService; +import javafx.scene.paint.Color; + public class PlayerPlugin implements IGamePluginService { private Entity player; - public PlayerPlugin() { - } - @Override - public void start(GameData gameData, World world) { - - // Add entities to the world - player = createPlayerShip(gameData); + public void start(GameData data, World world) { + player = initPlayer(data); + player.setColor(Color.DARKGRAY); world.addEntity(player); } - private Entity createPlayerShip(GameData gameData) { - - Entity playerShip = new Player(); - playerShip.setPolygonCoordinates(-5,-5,10,0,-5,5); - playerShip.setX(gameData.getDisplayHeight()/2); - playerShip.setY(gameData.getDisplayWidth()/2); - playerShip.setRadius(8); - return playerShip; - } - @Override - public void stop(GameData gameData, World world) { - // Remove entities + public void stop(GameData data, World world) { world.removeEntity(player); } + private Entity initPlayer(GameData data) { + Entity p = new Player(); + p.setPolygonCoordinates(-6, -5, 10, 0, -6, 5); + p.setX(data.getDisplayWidth() * 0.5f); + p.setY(data.getDisplayHeight() * 0.5f); + p.setRadius(8); + return p; + } } diff --git a/Player/src/main/java/module-info.java b/Player/src/main/java/module-info.java index 5694901da..fc9dae06a 100644 --- a/Player/src/main/java/module-info.java +++ b/Player/src/main/java/module-info.java @@ -3,8 +3,11 @@ import dk.sdu.mmmi.cbse.common.services.IGamePluginService; module Player { + + exports dk.sdu.mmmi.cbse.playersystem; requires Common; - requires CommonBullet; + requires CommonBullet; + requires javafx.graphics; uses dk.sdu.mmmi.cbse.common.bullet.BulletSPI; provides IGamePluginService with dk.sdu.mmmi.cbse.playersystem.PlayerPlugin; provides IEntityProcessingService with dk.sdu.mmmi.cbse.playersystem.PlayerControlSystem; diff --git a/pom.xml b/pom.xml index 7b6de18c0..575a14e77 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,9 @@ CommonAsteroids Asteroids Collision + EnemyShips + + java From 7857fdb3b09d27d040d3ec930064e72d7564eff2 Mon Sep 17 00:00:00 2001 From: khaybar21 <143800306+khaybar21@users.noreply.github.com> Date: Sun, 1 Jun 2025 11:51:35 +0200 Subject: [PATCH 2/2] Split Package Task --- Collision/pom.xml | 7 +------ Core/pom.xml | 7 +------ .../mmmi/cbse/playersystem/{Player.java => NewEntity.java} | 2 +- {EnemyShips => plugins/EnemyShips}/pom.xml | 0 .../java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java | 0 .../main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java | 0 .../src/main/java/dk/sdu/mmmi/cbse/enemies/NewEntity.java | 2 +- .../EnemyShips}/src/main/java/module-info.java | 0 plugins/EnemyShips/target/maven-archiver/pom.properties | 3 +++ .../compile/default-compile/createdFiles.lst | 4 ++++ .../compile/default-compile/inputFiles.lst | 4 ++++ pom.xml | 2 +- 12 files changed, 16 insertions(+), 15 deletions(-) rename Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/{Player.java => NewEntity.java} (74%) rename {EnemyShips => plugins/EnemyShips}/pom.xml (100%) rename {EnemyShips => plugins/EnemyShips}/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java (100%) rename {EnemyShips => plugins/EnemyShips}/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java (100%) rename EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java => plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/NewEntity.java (66%) rename {EnemyShips => plugins/EnemyShips}/src/main/java/module-info.java (100%) create mode 100644 plugins/EnemyShips/target/maven-archiver/pom.properties create mode 100644 plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/Collision/pom.xml b/Collision/pom.xml index 16d62e9bc..4d304651e 100644 --- a/Collision/pom.xml +++ b/Collision/pom.xml @@ -34,12 +34,7 @@ CommonAsteroids ${project.version} - - ${project.groupId} - Enemy - 1.0.1-SNAPSHOT - true - + diff --git a/Core/pom.xml b/Core/pom.xml index b7e859563..f5557c778 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -90,12 +90,7 @@ org.springframework spring-jcl - - dk.sdu.mmmi.cbse - Enemy - 1.0.1-SNAPSHOT - true - + dk.sdu.mmmi.cbse diff --git a/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/Player.java b/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/NewEntity.java similarity index 74% rename from Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/Player.java rename to Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/NewEntity.java index 4b7590b1c..f7f84efc0 100644 --- a/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/Player.java +++ b/Player/src/main/java/dk/sdu/mmmi/cbse/playersystem/NewEntity.java @@ -6,6 +6,6 @@ * * @author Emil */ -public class Player extends Entity { +public class NewEntity extends Entity { } diff --git a/EnemyShips/pom.xml b/plugins/EnemyShips/pom.xml similarity index 100% rename from EnemyShips/pom.xml rename to plugins/EnemyShips/pom.xml diff --git a/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java b/plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java similarity index 100% rename from EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java rename to plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java diff --git a/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java b/plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java similarity index 100% rename from EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java rename to plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java diff --git a/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java b/plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/NewEntity.java similarity index 66% rename from EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java rename to plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/NewEntity.java index dc060d82f..38adc8b54 100644 --- a/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java +++ b/plugins/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/NewEntity.java @@ -2,5 +2,5 @@ import dk.sdu.mmmi.cbse.common.data.Entity; -public class Enemy extends Entity { +public class NewEntity extends Entity { } \ No newline at end of file diff --git a/EnemyShips/src/main/java/module-info.java b/plugins/EnemyShips/src/main/java/module-info.java similarity index 100% rename from EnemyShips/src/main/java/module-info.java rename to plugins/EnemyShips/src/main/java/module-info.java diff --git a/plugins/EnemyShips/target/maven-archiver/pom.properties b/plugins/EnemyShips/target/maven-archiver/pom.properties new file mode 100644 index 000000000..96970e402 --- /dev/null +++ b/plugins/EnemyShips/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=Enemy +groupId=dk.sdu.mmmi.cbse +version=1.0.1-SNAPSHOT diff --git a/plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 000000000..57c31418c --- /dev/null +++ b/plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,4 @@ +module-info.class +dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.class +dk/sdu/mmmi/cbse/enemies/EnemyPlugin.class +dk/sdu/mmmi/cbse/enemies/Enemy.class diff --git a/plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 000000000..222194617 --- /dev/null +++ b/plugins/EnemyShips/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,4 @@ +/Users/khaybaromar/Desktop/AsteroidsFX/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyPlugin.java +/Users/khaybaromar/Desktop/AsteroidsFX/EnemyShips/src/main/java/module-info.java +/Users/khaybaromar/Desktop/AsteroidsFX/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/Enemy.java +/Users/khaybaromar/Desktop/AsteroidsFX/EnemyShips/src/main/java/dk/sdu/mmmi/cbse/enemies/EnemyControlSystem.java diff --git a/pom.xml b/pom.xml index 575a14e77..e60599690 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ CommonAsteroids Asteroids Collision - EnemyShips +