From fe26c446aedd77a035248d059a7f4d18ab70b1a9 Mon Sep 17 00:00:00 2001
From: Scherbaum Maximilian <ms622@hdm-stuttgart.de>
Date: Thu, 23 Nov 2023 15:23:47 +0100
Subject: [PATCH] update IEntity.java, update Player.java #6

---
 .../battlearena/Model/Entity/IEntity.java     |  15 +-
 .../battlearena/Model/Entity/Player.java      | 139 +++++++++++++++++-
 2 files changed, 152 insertions(+), 2 deletions(-)

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 fd7bbc62..a8e2b2d1 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
@@ -1,4 +1,17 @@
 package de.hdm_stuttgart.battlearena.Model.Entity;
 
+import javafx.scene.canvas.GraphicsContext;
+
 public interface IEntity {
-}
+
+   void initializeEntity();
+
+   void loadEntitySprites();
+
+   void updateEntityMovement();
+
+   void updateEntityAnimation();
+
+   void renderEntity(GraphicsContext graphicsContext);
+
+}
\ 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 0384286b..5c1d0ab7 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
@@ -1,10 +1,147 @@
 package de.hdm_stuttgart.battlearena.Model.Entity;
 
+import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
+
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.image.Image;
+import javafx.scene.shape.Rectangle;
+
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
+import java.util.Objects;
+
 public class Player implements IEntity {
 
     private static final Logger log = LogManager.getLogger(Player.class);
 
-}
+    InputHandler inputHandler;
+
+    GraphicsContext gameScene;
+
+    private final Rectangle boxCollider = new Rectangle(8, 16, 32, 32);
+
+    private Image directionDownOne, directionDownTwo;
+
+    private int spriteCounter = 0;
+    private int spriteNumber = 1;
+
+    private int mapPosX;
+    private int mapPosY;
+    private int playerSpeed;
+    private String playerDirection;
+
+    public Player(GraphicsContext gameScene, InputHandler inputHandler) {
+        this.gameScene = gameScene;
+        this.inputHandler = inputHandler;
+
+        initializeEntity();
+        loadEntitySprites();
+    }
+
+    @Override
+    public void initializeEntity() {
+        mapPosX = 10;
+        mapPosY = 10;
+        playerSpeed = 3;
+        playerDirection = "down";
+    }
+
+    @Override
+    public void loadEntitySprites() {
+        try {
+            directionDownOne = new Image(Objects.requireNonNull(getClass().getResourceAsStream("textures/player/playerPlaceholder.png")));
+            directionDownTwo = new Image(Objects.requireNonNull(getClass().getResourceAsStream("textures/player/playerPlaceholder.png")));
+        } catch (Exception e) {
+            log.error(e);
+        }
+    }
+
+    @Override
+    public void updateEntityMovement() {
+        if (inputHandler.isMoveUp() || inputHandler.isMoveDown() || inputHandler.isMoveLeft() || inputHandler.isMoveRight()) {
+            if (inputHandler.isMoveUp()) {
+                playerDirection = "up";
+            } else if (inputHandler.isMoveDown()) {
+                playerDirection = "down";
+            } else if (inputHandler.isMoveLeft()) {
+                playerDirection = "left";
+            } else {
+                playerDirection = "right";
+            }
+        }
+
+        boolean isColliding = false;
+
+        if (!isColliding) {
+            switch (playerDirection) {
+                case "up":
+                    mapPosY -= playerSpeed;
+                    break;
+                case "down":
+                    mapPosY += playerSpeed;
+                    break;
+                case "left":
+                    mapPosX -= playerSpeed;
+                    break;
+                case "right":
+                    mapPosX += playerSpeed;
+            }
+        }
+
+        updateEntityAnimation();
+
+    }
+
+    @Override
+    public void updateEntityAnimation() {
+        spriteCounter++;
+
+        if (spriteCounter > 10) {
+            if (spriteNumber == 1) {
+                spriteNumber = 2;
+            } else if (spriteNumber == 2) {
+                spriteNumber = 1;
+            }
+            spriteCounter = 0;
+        }
+    }
+
+    @Override
+    public void renderEntity(GraphicsContext graphicsContext) {
+        Image playerSprite = null;
+
+        switch (playerDirection) {
+            case "up":
+                if (spriteNumber == 1) {
+                    playerSprite = directionDownOne;
+                }
+                if (spriteNumber == 2) {
+                    playerSprite = directionDownTwo;
+                }
+            case "down":
+                if (spriteNumber == 1) {
+                    playerSprite = directionDownOne;
+                }
+                if (spriteNumber == 2) {
+                    playerSprite = directionDownTwo;
+                }
+            case "left":
+                if (spriteNumber == 1) {
+                    playerSprite = directionDownOne;
+                }
+                if (spriteNumber == 2) {
+                    playerSprite = directionDownTwo;
+                }
+            case "right":
+                if (spriteNumber == 1) {
+                    playerSprite = directionDownOne;
+                }
+                if (spriteNumber == 2) {
+                    playerSprite = directionDownTwo;
+                }
+        }
+
+        graphicsContext.drawImage(playerSprite, mapPosX, mapPosY, 48, 48);
+    }
+}
\ No newline at end of file
-- 
GitLab