diff --git a/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java b/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java index 150d96e..cb61332 100644 --- a/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java +++ b/src/de/miaurizius/jgame2d/core/handlers/CollisionHandler.java @@ -106,4 +106,89 @@ public class CollisionHandler { return index; } + //NPC OR MONSTER COLLISION + public int checkEntity(Entity entity, Entity[] target) { + int index = 999; + int c = -1; + + for(Entity e : target) { + c++; + if (e != null) { + + entity.solidArea.x += entity.worldX; + entity.solidArea.y += entity.worldY; + + e.solidArea.x += e.worldX; + e.solidArea.y += e.worldY; + + switch (entity.direction) { + case UP: + entity.solidArea.y -= entity.speed; + if (entity.solidArea.intersects(e.solidArea)) { + entity.collisionOn = true; + index = c; + } + break; + case DOWN: + entity.solidArea.y += entity.speed; + if (entity.solidArea.intersects(e.solidArea)) { + entity.collisionOn = true; + index = c; + } + break; + case LEFT: + entity.solidArea.x -= entity.speed; + if (entity.solidArea.intersects(e.solidArea)) { + entity.collisionOn = true; + index = c; + } + break; + case RIGHT: + entity.solidArea.x += entity.speed; + if (entity.solidArea.intersects(e.solidArea)) { + entity.collisionOn = true; + index = c; + } + break; + } + entity.solidArea.x = entity.solidAreaDefaultX; + entity.solidArea.y = entity.solidAreaDefaultY; + e.solidArea.x = e.solidAreaDefaultX; + e.solidArea.y = e.solidAreaDefaultY; + } + } + return index; + } + + public void checkPlayer(Entity entity) { + entity.solidArea.x += entity.worldX; + entity.solidArea.y += entity.worldY; + + panel.player.solidArea.x += panel.player.worldX; + panel.player.solidArea.y += panel.player.worldY; + + switch (entity.direction) { + case UP: + entity.solidArea.y -= entity.speed; + if (entity.solidArea.intersects(panel.player.solidArea)) entity.collisionOn = true; + break; + case DOWN: + entity.solidArea.y += entity.speed; + if (entity.solidArea.intersects(panel.player.solidArea)) entity.collisionOn = true; + break; + case LEFT: + entity.solidArea.x -= entity.speed; + if (entity.solidArea.intersects(panel.player.solidArea)) entity.collisionOn = true; + break; + case RIGHT: + entity.solidArea.x += entity.speed; + if (entity.solidArea.intersects(panel.player.solidArea)) entity.collisionOn = true; + break; + } + entity.solidArea.x = entity.solidAreaDefaultX; + entity.solidArea.y = entity.solidAreaDefaultY; + panel.player.solidArea.x = panel.player.solidAreaDefaultX; + panel.player.solidArea.y = panel.player.solidAreaDefaultY; + } + } diff --git a/src/de/miaurizius/jgame2d/entity/Entity.java b/src/de/miaurizius/jgame2d/entity/Entity.java index c9f31f0..d903127 100644 --- a/src/de/miaurizius/jgame2d/entity/Entity.java +++ b/src/de/miaurizius/jgame2d/entity/Entity.java @@ -35,6 +35,8 @@ public class Entity { setAction(); collisionOn = false; panel.collisionH.checkTile(this); + panel.collisionH.checkObject(this, false); + panel.collisionH.checkPlayer(this); if(!collisionOn) { switch (direction) { diff --git a/src/de/miaurizius/jgame2d/entity/Player.java b/src/de/miaurizius/jgame2d/entity/Player.java index 2f95a7d..74823a1 100644 --- a/src/de/miaurizius/jgame2d/entity/Player.java +++ b/src/de/miaurizius/jgame2d/entity/Player.java @@ -62,9 +62,15 @@ public class Player extends Entity { // CHECK TILE COLLISION collisionOn = false; panel.collisionH.checkTile(this); + + // CHECK OBJECT COLLISION int objIndex = panel.collisionH.checkObject(this, true); pickObject(objIndex); + // CHECK ENTITY COLLISION + int npcIndex = panel.collisionH.checkEntity(this, panel.npc); + interactNPC(npcIndex); + if(!collisionOn) { switch (direction) { case UP -> worldY -= speed; @@ -88,6 +94,11 @@ public class Player extends Entity { } + public void interactNPC(int index) { + if(index == 999) return; + System.out.println("npc collision detected"); + } + public void draw(Graphics2D graphics2d) { BufferedImage image = switch (direction) { case UP -> (spriteNum == 1) ? up1 : up2;