From f3335f9df4632ae1a99f4c1475b11a6614ed9f34 Mon Sep 17 00:00:00 2001 From: Maurice Date: Thu, 27 Nov 2025 00:11:45 +0100 Subject: [PATCH] Item pickup --- .../miaurizius/jgame2d/core/AssetSetter.java | 2 +- .../jgame2d/core/CollisionHandler.java | 54 +++++++++++++++++++ src/de/miaurizius/jgame2d/entity/Entity.java | 1 + src/de/miaurizius/jgame2d/entity/Player.java | 21 ++++++++ src/de/miaurizius/jgame2d/object/DoorObj.java | 1 + .../jgame2d/object/SuperObject.java | 3 ++ 6 files changed, 81 insertions(+), 1 deletion(-) diff --git a/src/de/miaurizius/jgame2d/core/AssetSetter.java b/src/de/miaurizius/jgame2d/core/AssetSetter.java index 0a501ee..887bf9e 100644 --- a/src/de/miaurizius/jgame2d/core/AssetSetter.java +++ b/src/de/miaurizius/jgame2d/core/AssetSetter.java @@ -27,7 +27,7 @@ public class AssetSetter { panel.obj[3] = new DoorObj(); panel.obj[3].worldX = 10 * panel.tileSize; - panel.obj[3].worldY = 9 * panel.tileSize; + panel.obj[3].worldY = 11 * panel.tileSize; panel.obj[4] = new DoorObj(); panel.obj[4].worldX = 8 * panel.tileSize; diff --git a/src/de/miaurizius/jgame2d/core/CollisionHandler.java b/src/de/miaurizius/jgame2d/core/CollisionHandler.java index cebaffe..a09053e 100644 --- a/src/de/miaurizius/jgame2d/core/CollisionHandler.java +++ b/src/de/miaurizius/jgame2d/core/CollisionHandler.java @@ -1,6 +1,7 @@ package de.miaurizius.jgame2d.core; import de.miaurizius.jgame2d.entity.Entity; +import de.miaurizius.jgame2d.object.SuperObject; public class CollisionHandler { @@ -51,4 +52,57 @@ public class CollisionHandler { } } + public int checkObject(Entity entity, boolean player) { + int index = 999; + int c = -1; + + for(SuperObject obj : panel.obj) { + c++; + if (obj != null) { + + entity.solidArea.x += entity.worldX; + entity.solidArea.y += entity.worldY; + + obj.solidArea.x += obj.worldX; + obj.solidArea.y += obj.worldY; + + switch (entity.direction) { + case UP: + entity.solidArea.y -= entity.speed; + if (entity.solidArea.intersects(obj.solidArea)) { + if (obj.collision) entity.collisionOn = true; + if (player) index = c; + } + break; + case DOWN: + entity.solidArea.y += entity.speed; + if (entity.solidArea.intersects(obj.solidArea)) { + if (obj.collision) entity.collisionOn = true; + if (player) index = c; + } + break; + case LEFT: + entity.solidArea.x -= entity.speed; + if (entity.solidArea.intersects(obj.solidArea)) { + if (obj.collision) entity.collisionOn = true; + if (player) index = c; + } + break; + case RIGHT: + entity.solidArea.x += entity.speed; + if (entity.solidArea.intersects(obj.solidArea)) { + if (obj.collision) entity.collisionOn = true; + if (player) index = c; + } + break; + } + entity.solidArea.x = entity.solidAreaDefaultX; + entity.solidArea.y = entity.solidAreaDefaultY; + obj.solidArea.x = obj.solidAreaDefaultX; + obj.solidArea.y = obj.solidAreaDefaultY; + } + } + return index; + } + } diff --git a/src/de/miaurizius/jgame2d/entity/Entity.java b/src/de/miaurizius/jgame2d/entity/Entity.java index 9988295..cbb1c8d 100644 --- a/src/de/miaurizius/jgame2d/entity/Entity.java +++ b/src/de/miaurizius/jgame2d/entity/Entity.java @@ -17,6 +17,7 @@ public class Entity { public int spriteNum = 1; public Rectangle solidArea; + public int solidAreaDefaultX, solidAreaDefaultY; public boolean collisionOn = false; } diff --git a/src/de/miaurizius/jgame2d/entity/Player.java b/src/de/miaurizius/jgame2d/entity/Player.java index cbec2a3..ed09cc1 100644 --- a/src/de/miaurizius/jgame2d/entity/Player.java +++ b/src/de/miaurizius/jgame2d/entity/Player.java @@ -16,6 +16,7 @@ public class Player extends Entity { public final int screenX; public final int screenY; + int hasKey = 0; public Player(GamePanel panel, KeyHandler keyH) { this.panel = panel; @@ -27,6 +28,8 @@ public class Player extends Entity { solidArea = new Rectangle(); solidArea.x = 12; solidArea.y = 20; + solidAreaDefaultX = solidArea.x; + solidAreaDefaultY = solidArea.y; solidArea.width = 24; solidArea.height = 24; @@ -67,6 +70,8 @@ public class Player extends Entity { // CHECK TILE COLLISION collisionOn = false; panel.collisionH.checkTile(this); + int objIndex = panel.collisionH.checkObject(this, true); + pickObject(objIndex); if(!collisionOn) { switch (direction) { @@ -86,6 +91,22 @@ public class Player extends Entity { } } + public void pickObject(int index) { + if(index == 999) return; + switch(panel.obj[index].name.toLowerCase()) { + case "key": + hasKey++; + panel.obj[index] = null; + break; + case "door": + if(hasKey > 0) { + panel.obj[index] = null; + hasKey--; + } + break; + } + } + public void draw(Graphics2D graphics2d) { BufferedImage image = switch (direction) { case UP -> (spriteNum == 1) ? up1 : up2; diff --git a/src/de/miaurizius/jgame2d/object/DoorObj.java b/src/de/miaurizius/jgame2d/object/DoorObj.java index 37f10ca..7ea9e54 100644 --- a/src/de/miaurizius/jgame2d/object/DoorObj.java +++ b/src/de/miaurizius/jgame2d/object/DoorObj.java @@ -13,6 +13,7 @@ public class DoorObj extends SuperObject { } catch(IOException e) { e.printStackTrace(); } + collision = true; } } diff --git a/src/de/miaurizius/jgame2d/object/SuperObject.java b/src/de/miaurizius/jgame2d/object/SuperObject.java index b2e543f..2cf6bbd 100644 --- a/src/de/miaurizius/jgame2d/object/SuperObject.java +++ b/src/de/miaurizius/jgame2d/object/SuperObject.java @@ -11,6 +11,9 @@ public class SuperObject { public String name; public boolean collision = false; public int worldX, worldY; + public Rectangle solidArea = new Rectangle(0, 0, 48, 48); + public int solidAreaDefaultX = 0; + public int solidAreaDefaultY = 0; public void draw(Graphics2D graphics2D, GamePanel panel) { int screenX = worldX - panel.player.worldX + panel.player.screenX;