diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java index 3882c1e0910fa85dfd653a439af08406de48d0ce..9594f016e560088fa42c59e54e4386fee2060aea 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java @@ -1,5 +1,6 @@ package de.hdm_stuttgart.battlearena.Controller; +import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass; import de.hdm_stuttgart.battlearena.Model.Entity.EntityFactory; import de.hdm_stuttgart.battlearena.Model.Entity.EntityType; import de.hdm_stuttgart.battlearena.Model.Entity.IEntity; @@ -32,6 +33,9 @@ public class GameSceneController implements Initializable { IEntity player; IEntity enemy; + EntityClass playerClass = EntityClass.HUMAN; + EntityClass enemyClass = EntityClass.HUMAN; + TileManager tileManager; //map data @@ -63,8 +67,8 @@ public class GameSceneController implements Initializable { graphicsContext2D = canvas2D.getGraphicsContext2D(); graphicsContext2D.setImageSmoothing(false); - player = EntityFactory.createEntity(EntityType.PLAYER, graphicsContext2D, inputHandler); - enemy = EntityFactory.createEntity(EntityType.ENEMY_PLAYER, graphicsContext2D, inputHandler); + player = EntityFactory.createEntity(EntityType.PLAYER, graphicsContext2D, inputHandler, playerClass); + enemy = EntityFactory.createEntity(EntityType.ENEMY_PLAYER, graphicsContext2D, inputHandler, enemyClass); tileManager = new TileManager(graphicsContext2D, diffTileCount, horizontalTileCount, verticalTileCount, mapString); @@ -72,8 +76,8 @@ public class GameSceneController implements Initializable { @Override public void handle(long l) { graphicsContext2D.clearRect(0, 0, canvas2D.getWidth(), canvas2D.getHeight()); - updateContent(); renderContent(graphicsContext2D); + updateContent(); } }; gameLoop.start(); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java index a34f2234082ae2840c1039d6c4ffac034321c88a..75ae76e99d63cd951ad1ef6ec36834e015b57db2 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EnemyHandler.java @@ -19,6 +19,8 @@ class EnemyHandler implements IEntity{ private int entitySpeed = 3; + private int health = 10; + @Override public void initializeEntity() { @@ -65,4 +67,11 @@ class EnemyHandler implements IEntity{ return 3; } + @Override + public int gotHit(int damageDone) { + log.debug(health); + return health -= damageDone; + } + + } \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityClass.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityClass.java new file mode 100644 index 0000000000000000000000000000000000000000..03b800acd74ad72318dee1df4dbf6528c53bf6d6 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityClass.java @@ -0,0 +1,8 @@ +package de.hdm_stuttgart.battlearena.Model.Entity; + +public enum EntityClass { + HUMAN, + HIGH_BORN, + LOW_BORN, + SENTINELS +} \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java index 189243ff476d3e4a545dbd2ec2cec155e5159613..fdc56cc2fd9580d781dbf299401d5976f8f7e6ab 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/EntityFactory.java @@ -11,10 +11,10 @@ public class EntityFactory { private static final Logger log = LogManager.getLogger(EntityFactory.class); - public static IEntity createEntity(EntityType entityType, GraphicsContext gameScene, InputHandler inputHandler) { + public static IEntity createEntity(EntityType entityType, GraphicsContext gameScene, InputHandler inputHandler, EntityClass entityClass) { if (entityType == EntityType.PLAYER) { log.debug("Entity " + entityType + " created"); - return new Player(gameScene, inputHandler); + return new Player(gameScene, inputHandler, entityClass); } else if (entityType == EntityType.ENEMY_PLAYER) { log.debug("Entity " + entityType + " created"); return new EnemyHandler(); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java index 9f0d341285a0afb78d5f047ae6d976a966712795..8914040bf4e8122faccdb93bd431ab7b890e80bb 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/IEntity.java @@ -24,4 +24,6 @@ public interface IEntity { int getEntitySpeed(); + int gotHit(int damageDone); + } \ No newline at end of file diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java index f3242a2dc72b074b55fe35869a4941d36d141ce2..8472c37772342b534d8807adbfc7bee41821d4f7 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java @@ -37,6 +37,8 @@ class Player implements IEntity { swordLeft, swordRight; + private final EntityClass entityClass; + private int spriteCounter = 0; private int spriteNumber = 1; @@ -48,9 +50,13 @@ class Player implements IEntity { private int playerSpeed; private EntityDirection playerDirection; - public Player(GraphicsContext gameScene, InputHandler inputHandler) { + private int health = 10; + private int damage = 1; + + public Player(GraphicsContext gameScene, InputHandler inputHandler, EntityClass entityClass) { this.gameScene = gameScene; this.inputHandler = inputHandler; + this.entityClass = entityClass; initializeEntity(); loadEntitySprites(); @@ -68,23 +74,75 @@ class Player implements IEntity { @Override public void loadEntitySprites() { try { - directionDownOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/downOne.png"))); - directionDownTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/downTwo.png"))); - directionUpOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upOne.png"))); - directionUpTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upTwo.png"))); - directionLeftOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftOne.png"))); - directionLeftTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftTwo.png"))); - directionRightOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightOne.png"))); - directionRightTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightTwo.png"))); - swordUp = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordUp.png"))); - swordDown = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordDown.png"))); - swordLeft = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordLeft.png"))); - swordRight = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordRight.png"))); + if (entityClass == EntityClass.HUMAN) { + loadHumanSprites(); + loadWeaponSprites(); + } else if (entityClass == EntityClass.HIGH_BORN) { + loadHighBornSprites(); + loadWeaponSprites(); + } else if (entityClass == EntityClass.LOW_BORN) { + loadLowBornSprites(); + loadWeaponSprites(); + } else { + loadSentinelsSprites(); + loadWeaponSprites(); + } } catch (Exception e) { log.error(e); } } + private void loadHumanSprites() { + directionDownOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown01.png"))); + directionDownTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown02.png"))); + directionUpOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upOne.png"))); + directionUpTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upTwo.png"))); + directionLeftOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftOne.png"))); + directionLeftTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftTwo.png"))); + directionRightOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightOne.png"))); + directionRightTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightTwo.png"))); + } + + private void loadHighBornSprites() { + directionDownOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown01.png"))); + directionDownTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown02.png"))); + directionUpOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upOne.png"))); + directionUpTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upTwo.png"))); + directionLeftOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftOne.png"))); + directionLeftTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftTwo.png"))); + directionRightOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightOne.png"))); + directionRightTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightTwo.png"))); + } + + private void loadLowBornSprites() { + directionDownOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown01.png"))); + directionDownTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown02.png"))); + directionUpOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upOne.png"))); + directionUpTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upTwo.png"))); + directionLeftOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftOne.png"))); + directionLeftTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftTwo.png"))); + directionRightOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightOne.png"))); + directionRightTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightTwo.png"))); + } + + private void loadSentinelsSprites() { + directionDownOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown01.png"))); + directionDownTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/HumanDown02.png"))); + directionUpOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upOne.png"))); + directionUpTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/upTwo.png"))); + directionLeftOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftOne.png"))); + directionLeftTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/leftTwo.png"))); + directionRightOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightOne.png"))); + directionRightTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/player/rightTwo.png"))); + } + + private void loadWeaponSprites() { + swordUp = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordUp.png"))); + swordDown = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordDown.png"))); + swordLeft = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordLeft.png"))); + swordRight = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/textures/weapons/SwordRight.png"))); + } + @Override public void updateEntityMovement(GameSceneController gameScene) { if (inputHandler.isMoveUp() || inputHandler.isMoveDown() || inputHandler.isMoveLeft() || inputHandler.isMoveRight()) { @@ -144,6 +202,9 @@ class Player implements IEntity { @Override public void attack(IEntity entity, GraphicsContext graphicsContext) { BoundingBox hitBox; + + //Added and subtracted numbers from variables are the pixel insets of the player sprite + int attackRange = 30; int attackWidth = 10; @@ -153,7 +214,7 @@ class Player implements IEntity { graphicsContext.strokeRect(mapPosX+playerWidth, mapPosY-10, attackWidth, attackRange); graphicsContext.drawImage(swordUp, mapPosX+8, mapPosY-10, 32, 32); if (hitBox.intersects(entity.getBoxCollider())) { - //todo: implement health + entity.gotHit(damage); graphicsContext.strokeText("Hit", 10, 10); } } else if (playerDirection == EntityDirection.DOWN) { @@ -161,7 +222,7 @@ class Player implements IEntity { graphicsContext.strokeRect(mapPosX+playerWidth, mapPosY+playerHeight, attackWidth, attackRange); graphicsContext.drawImage(swordDown, mapPosX+8, mapPosY+playerHeight, 32, 32); if (hitBox.intersects(entity.getBoxCollider())) { - //todo: implement health + entity.gotHit(damage); graphicsContext.strokeText("Hit", 10, 10); } } else if (playerDirection == EntityDirection.LEFT) { @@ -171,7 +232,7 @@ class Player implements IEntity { attackRange, attackWidth); graphicsContext.drawImage(swordLeft, mapPosX-8, mapPosY+8, 32, 32); if (hitBox.intersects(entity.getBoxCollider())) { - //todo: implement health + entity.gotHit(damage); graphicsContext.strokeText("Hit", 10, 10); } } else { @@ -181,7 +242,7 @@ class Player implements IEntity { attackRange, attackWidth); graphicsContext.drawImage(swordRight, mapPosX+playerWidth+8, mapPosY+8, 32, 32); if (hitBox.intersects(entity.getBoxCollider())) { - //todo: implement health + entity.gotHit(damage); graphicsContext.strokeText("Hit", 10, 10); } } @@ -262,6 +323,11 @@ class Player implements IEntity { return playerSpeed; } + @Override + public int gotHit(int damageDone) { + return health -= damageDone; + } + public int getMapPosX() { return mapPosX; } diff --git a/src/main/resources/textures/player/HumanDown01.png b/src/main/resources/textures/player/HumanDown01.png new file mode 100644 index 0000000000000000000000000000000000000000..ee8c9024a240bfec9f28cdecffff3060d3eb769e Binary files /dev/null and b/src/main/resources/textures/player/HumanDown01.png differ diff --git a/src/main/resources/textures/player/HumanDown02.png b/src/main/resources/textures/player/HumanDown02.png new file mode 100644 index 0000000000000000000000000000000000000000..3a96754826bed31e6baad1d519a71c2e97680821 Binary files /dev/null and b/src/main/resources/textures/player/HumanDown02.png differ