Skip to content
Snippets Groups Projects
Commit bd73d149 authored by Scherbaum Maximilian's avatar Scherbaum Maximilian
Browse files

update: split collision detection in map and entity in CollisionHandler.java,...

update: split collision detection in map and entity in CollisionHandler.java, implemented attack method in Player.java, updated key inputs in InputHandler.java #35 #34
parent a46a4fff
No related branches found
No related tags found
4 merge requests!74V1,!73Initial commit,!71Merge DataBase into Development,!3merging player for integration testing
......@@ -54,6 +54,7 @@ public class GameSceneController implements Initializable {
private void updateContent() {
player.updateEntityMovement(this);
enemy.updateEntityMovement(this);
player.attack(enemy, graphicsContext2D);
}
private void renderContent(GraphicsContext graphicsContext) {
......
package de.hdm_stuttgart.battlearena.Model.Entity;
import javafx.scene.shape.Rectangle;
import javafx.geometry.BoundingBox;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
......@@ -13,68 +13,15 @@ public class CollisionHandler {
log.debug("CollisionHandler initialized");
}
public boolean handleEntityCollision(IEntity player, IEntity entity) {
Rectangle playerBoxCollider = player.getBoxCollider();
Rectangle entityBoxCollider = entity.getBoxCollider();
int playerColliderLeftX = (int) playerBoxCollider.getX();
int playerColliderRightX = (int) (playerBoxCollider.getX() + playerBoxCollider.getWidth());
int playerColliderTopY = (int) playerBoxCollider.getY();
int playerColliderBottomY = (int) (playerBoxCollider.getY() + playerBoxCollider.getHeight());
int entityColliderLeftX = (int) entityBoxCollider.getX();
int entityColliderRightX = (int) (entityBoxCollider.getX() + entityBoxCollider.getWidth());
int entityColliderTopY = (int) entityBoxCollider.getY();
int entityColliderBottomY = (int) (entityBoxCollider.getY() + entityBoxCollider.getHeight());
int playerSpeed = player.getEntitySpeed();
int nextPlayerXPos;
int nextPlayerYPos;
public boolean handleBoxCollision(BoundingBox colliderA, BoundingBox colliderB) {
return colliderA.getMaxX() > colliderB.getMinX() &&
colliderA.getMinX() < colliderB.getMaxX() &&
colliderA.getMaxY() > colliderB.getMinY() &&
colliderA.getMinY() < colliderB.getMaxY();
}
switch (player.getEntityDirection()) {
case UP:
nextPlayerYPos = playerColliderTopY - playerSpeed;
return nextPlayerYPos <= entityColliderBottomY &&
playerColliderTopY > entityColliderBottomY &&
playerColliderLeftX >= entityColliderLeftX &&
playerColliderLeftX <= entityColliderRightX ||
nextPlayerYPos <= entityColliderBottomY &&
playerColliderTopY > entityColliderBottomY &&
playerColliderRightX >= entityColliderLeftX &&
playerColliderRightX <= entityColliderRightX;
case DOWN:
nextPlayerYPos = playerColliderBottomY + playerSpeed;
return nextPlayerYPos >= entityColliderTopY &&
playerColliderBottomY < entityColliderTopY &&
playerColliderLeftX >= entityColliderLeftX &&
playerColliderLeftX <= entityColliderRightX ||
nextPlayerYPos >= entityColliderTopY &&
playerColliderBottomY < entityColliderTopY &&
playerColliderRightX >= entityColliderLeftX &&
playerColliderRightX <= entityColliderRightX;
case LEFT:
nextPlayerXPos = playerColliderLeftX - playerSpeed;
return nextPlayerXPos <= entityColliderRightX &&
playerColliderLeftX > entityColliderRightX &&
playerColliderTopY >= entityColliderTopY &&
playerColliderTopY <= entityColliderBottomY ||
nextPlayerXPos <= entityColliderRightX &&
playerColliderLeftX > entityColliderRightX &&
playerColliderBottomY >= entityColliderTopY &&
playerColliderBottomY <= entityColliderBottomY;
case RIGHT:
nextPlayerXPos = playerColliderRightX + playerSpeed;
return nextPlayerXPos >= entityColliderLeftX &&
playerColliderLeftX < entityColliderLeftX &&
playerColliderTopY >= entityColliderTopY &&
playerColliderTopY <= entityColliderBottomY ||
nextPlayerXPos >= entityColliderLeftX &&
playerColliderLeftX < entityColliderLeftX &&
playerColliderBottomY >= entityColliderTopY &&
playerColliderBottomY <= entityColliderBottomY;
default:
return false;
}
public boolean handleMapCollision() {
return false;
}
}
\ No newline at end of file
package de.hdm_stuttgart.battlearena.Model.Entity;
import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
import javafx.geometry.BoundingBox;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
......@@ -11,7 +13,7 @@ class EnemyHandler implements IEntity{
private static final Logger log = LogManager.getLogger(EnemyHandler.class);
private final Rectangle boxCollider = new Rectangle(300, 200, 48, 48);
private final BoundingBox boxCollider = new BoundingBox(300, 200, 48, 48);
private EntityDirection entityDirection = EntityDirection.DOWN;
......@@ -32,6 +34,11 @@ class EnemyHandler implements IEntity{
}
@Override
public void attack(IEntity entity, GraphicsContext graphicsContext) {
}
@Override
public void updateEntityAnimation() {
......@@ -44,7 +51,7 @@ class EnemyHandler implements IEntity{
}
@Override
public Rectangle getBoxCollider() {
public BoundingBox getBoxCollider() {
return boxCollider;
}
......
package de.hdm_stuttgart.battlearena.Model.Entity;
import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
import javafx.geometry.BoundingBox;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.shape.Rectangle;
......@@ -12,11 +13,13 @@ public interface IEntity {
void updateEntityMovement(GameSceneController gameScene);
void attack(IEntity entity, GraphicsContext graphicsContext);
void updateEntityAnimation();
void renderEntity(GraphicsContext graphicsContext);
Rectangle getBoxCollider();
BoundingBox getBoxCollider();
EntityDirection getEntityDirection();
......
......@@ -3,9 +3,9 @@ package de.hdm_stuttgart.battlearena.Model.Entity;
import de.hdm_stuttgart.battlearena.Controller.GameSceneController;
import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
import javafx.geometry.BoundingBox;
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;
......@@ -21,13 +21,23 @@ class Player implements IEntity {
GraphicsContext gameScene;
private Rectangle boxCollider;
private BoundingBox boxCollider;
private Image directionDownOne, directionDownTwo, directionUpOne, directionUpTwo, directionLeftOne, directionLeftTwo, directionRightOne, directionRightTwo;
private Image directionDownOne,
directionDownTwo,
directionUpOne,
directionUpTwo,
directionLeftOne,
directionLeftTwo,
directionRightOne,
directionRightTwo;
private int spriteCounter = 0;
private int spriteNumber = 1;
private final int playerWidth = 19;
private final int playerHeight = 35;
private int mapPosX;
private int mapPosY;
private int playerSpeed;
......@@ -45,7 +55,7 @@ class Player implements IEntity {
public void initializeEntity() {
mapPosX = 10;
mapPosY = 10;
boxCollider = new Rectangle(mapPosX+10, mapPosY+10, 32, 32);
boxCollider = new BoundingBox(mapPosX+15,mapPosY+10, playerWidth, playerHeight);
playerSpeed = 3;
playerDirection = EntityDirection.DOWN;
}
......@@ -79,9 +89,12 @@ class Player implements IEntity {
playerDirection = EntityDirection.RIGHT;
}
boolean isColliding = collisionHandler.handleEntityCollision(this, gameScene.getEnemy());
boolean isMapCollision = collisionHandler.handleMapCollision();
int lastMapPosX = mapPosX;
int lastMapPosY = mapPosY;
if (!isColliding) {
if (!isMapCollision) {
switch (playerDirection) {
case UP:
mapPosY -= playerSpeed;
......@@ -97,13 +110,71 @@ class Player implements IEntity {
}
}
boxCollider = new Rectangle(mapPosX + 10, mapPosY + 10, 32, 32);
boolean isEntityCollision = boxCollider.intersects(gameScene.getEnemy().getBoxCollider());
//boolean isEntityCollision = collisionHandler.handleBoxCollision(boxCollider, gameScene.getEnemy().getBoxCollider());
if (isEntityCollision) {
if (playerDirection == EntityDirection.UP) {
mapPosY = lastMapPosY + 30;
} else if (playerDirection == EntityDirection.DOWN) {
mapPosY = lastMapPosY - 30;
} else if (playerDirection == EntityDirection.LEFT) {
mapPosX = lastMapPosX + 30;
} else {
mapPosX = lastMapPosX - 30;
}
}
boxCollider = new BoundingBox(mapPosX+15,mapPosY+10, playerWidth, playerHeight);
updateEntityAnimation();
}
}
@Override
public void attack(IEntity entity, GraphicsContext graphicsContext) {
BoundingBox hitBox;
int attackRange = 30;
int attackWidth = 10;
if (inputHandler.isAttack()){
if (playerDirection == EntityDirection.UP) {
hitBox = new BoundingBox(mapPosX+playerWidth, mapPosY-10, attackWidth, attackRange);
graphicsContext.strokeRect(mapPosX+playerWidth, mapPosY-10, attackWidth, attackRange);
if (hitBox.intersects(entity.getBoxCollider())) {
//todo: implement health
graphicsContext.strokeText("Hit", 10, 10);
}
} else if (playerDirection == EntityDirection.DOWN) {
hitBox = new BoundingBox(mapPosX+playerWidth, mapPosY+playerHeight, attackWidth, attackRange);
graphicsContext.strokeRect(mapPosX+playerWidth, mapPosY+playerHeight, attackWidth, attackRange);
if (hitBox.intersects(entity.getBoxCollider())) {
//todo: implement health
graphicsContext.strokeText("Hit", 10, 10);
}
} else if (playerDirection == EntityDirection.LEFT) {
hitBox = new BoundingBox(mapPosX-attackWidth, mapPosY+((double) playerHeight /2),
attackRange, attackWidth);
graphicsContext.strokeRect(mapPosX-attackWidth, mapPosY+((double) playerHeight /2),
attackRange, attackWidth);
if (hitBox.intersects(entity.getBoxCollider())) {
//todo: implement health
graphicsContext.strokeText("Hit", 10, 10);
}
} else {
hitBox = new BoundingBox(mapPosX+playerWidth+attackWidth, mapPosY+((double) playerHeight /2),
attackRange, attackWidth);
graphicsContext.strokeRect(mapPosX+playerWidth+attackWidth, mapPosY+((double) playerHeight /2),
attackRange, attackWidth);
if (hitBox.intersects(entity.getBoxCollider())) {
//todo: implement health
graphicsContext.strokeText("Hit", 10, 10);
}
}
}
}
@Override
public void updateEntityAnimation() {
spriteCounter++;
......@@ -122,7 +193,8 @@ class Player implements IEntity {
public void renderEntity(GraphicsContext graphicsContext) {
Image playerSprite = null;
graphicsContext.strokeRect(boxCollider.getX(), boxCollider.getY(), boxCollider.getWidth(), boxCollider.getHeight());
//for debugging collision
graphicsContext.strokeRect(mapPosX+15,mapPosY+10, playerWidth, playerHeight);
switch (playerDirection) {
case UP:
......@@ -163,7 +235,7 @@ class Player implements IEntity {
}
@Override
public Rectangle getBoxCollider() {
public BoundingBox getBoxCollider() {
return boxCollider;
}
......
......@@ -18,7 +18,7 @@ public class InputHandler {
return inputHandler;
}
private boolean moveUp, moveDown, moveLeft, moveRight;
private boolean moveUp, moveDown, moveLeft, moveRight, attack;
public void handleKeyPress(KeyEvent event) {
KeyCode code = event.getCode();
......@@ -36,6 +36,8 @@ public class InputHandler {
case D:
moveRight = true;
break;
case SPACE:
attack = true;
}
}
......@@ -55,6 +57,8 @@ public class InputHandler {
case D:
moveRight = false;
break;
case SPACE:
attack = false;
}
}
......@@ -73,4 +77,8 @@ public class InputHandler {
public boolean isMoveRight() {
return moveRight;
}
public boolean isAttack() {
return attack;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment