Item pickup
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ public class Entity {
|
||||
public int spriteNum = 1;
|
||||
|
||||
public Rectangle solidArea;
|
||||
public int solidAreaDefaultX, solidAreaDefaultY;
|
||||
public boolean collisionOn = false;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -13,6 +13,7 @@ public class DoorObj extends SuperObject {
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
collision = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user