added collision for monsters (and made test world-setup)

This commit is contained in:
2025-11-29 00:08:42 +01:00
parent 71dc34b418
commit d07077a5f1
4 changed files with 52 additions and 84 deletions

View File

@@ -18,19 +18,31 @@ public class AssetSetter {
} }
public void setNPC() { public void setNPC() {
// panel.npc[0] = new OldManNPC(panel);
// panel.npc[0].worldX = panel.tileSize*21;
// panel.npc[0].worldY = panel.tileSize*21;
panel.npc[0] = new OldManNPC(panel); panel.npc[0] = new OldManNPC(panel);
panel.npc[0].worldX = panel.tileSize*21; panel.npc[0].worldX = panel.tileSize*9;
panel.npc[0].worldY = panel.tileSize*21; panel.npc[0].worldY = panel.tileSize*10;
} }
public void setMonster() { public void setMonster() {
// panel.monster[0] = new GreenSlimeMON(panel);
// panel.monster[0].worldX = panel.tileSize*23;
// panel.monster[0].worldY = panel.tileSize*36;
//
// panel.monster[1] = new GreenSlimeMON(panel);
// panel.monster[1].worldX = panel.tileSize*23;
// panel.monster[1].worldY = panel.tileSize*37;
panel.monster[0] = new GreenSlimeMON(panel); panel.monster[0] = new GreenSlimeMON(panel);
panel.monster[0].worldX = panel.tileSize*23; panel.monster[0].worldX = panel.tileSize*11;
panel.monster[0].worldY = panel.tileSize*36; panel.monster[0].worldY = panel.tileSize*10;
panel.monster[1] = new GreenSlimeMON(panel); panel.monster[1] = new GreenSlimeMON(panel);
panel.monster[1].worldX = panel.tileSize*23; panel.monster[1].worldX = panel.tileSize*11;
panel.monster[1].worldY = panel.tileSize*37; panel.monster[1].worldY = panel.tileSize*11;
} }
} }

View File

@@ -66,36 +66,13 @@ public class CollisionHandler {
obj.solidArea.x += obj.worldX; obj.solidArea.x += obj.worldX;
obj.solidArea.y += obj.worldY; obj.solidArea.y += obj.worldY;
switch (entity.direction) { parseSolidArea(entity);
case UP:
entity.solidArea.y -= entity.speed; if (entity.solidArea.intersects(obj.solidArea)) {
if (entity.solidArea.intersects(obj.solidArea)) { if (obj.collision) entity.collisionOn = true;
if (obj.collision) entity.collisionOn = true; if (player) index = c;
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.x = entity.solidAreaDefaultX;
entity.solidArea.y = entity.solidAreaDefaultY; entity.solidArea.y = entity.solidAreaDefaultY;
obj.solidArea.x = obj.solidAreaDefaultX; obj.solidArea.x = obj.solidAreaDefaultX;
@@ -120,36 +97,13 @@ public class CollisionHandler {
e.solidArea.x += e.worldX; e.solidArea.x += e.worldX;
e.solidArea.y += e.worldY; e.solidArea.y += e.worldY;
switch (entity.direction) { parseSolidArea(entity);
case UP:
entity.solidArea.y -= entity.speed; if (entity.solidArea.intersects(e.solidArea) && e != entity) {
if (entity.solidArea.intersects(e.solidArea)) { entity.collisionOn = true;
entity.collisionOn = true; index = c;
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.x = entity.solidAreaDefaultX;
entity.solidArea.y = entity.solidAreaDefaultY; entity.solidArea.y = entity.solidAreaDefaultY;
e.solidArea.x = e.solidAreaDefaultX; e.solidArea.x = e.solidAreaDefaultX;
@@ -166,28 +120,23 @@ public class CollisionHandler {
panel.player.solidArea.x += panel.player.worldX; panel.player.solidArea.x += panel.player.worldX;
panel.player.solidArea.y += panel.player.worldY; panel.player.solidArea.y += panel.player.worldY;
switch (entity.direction) { parseSolidArea(entity);
case UP:
entity.solidArea.y -= entity.speed; if (entity.solidArea.intersects(panel.player.solidArea)) entity.collisionOn = true;
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.x = entity.solidAreaDefaultX;
entity.solidArea.y = entity.solidAreaDefaultY; entity.solidArea.y = entity.solidAreaDefaultY;
panel.player.solidArea.x = panel.player.solidAreaDefaultX; panel.player.solidArea.x = panel.player.solidAreaDefaultX;
panel.player.solidArea.y = panel.player.solidAreaDefaultY; panel.player.solidArea.y = panel.player.solidAreaDefaultY;
} }
private void parseSolidArea(Entity entity) {
switch (entity.direction) {
case UP -> entity.solidArea.y -= entity.speed;
case DOWN -> entity.solidArea.y += entity.speed;
case LEFT -> entity.solidArea.x -= entity.speed;
case RIGHT -> entity.solidArea.x += entity.speed;
}
}
} }

View File

@@ -59,6 +59,8 @@ public class Entity {
collisionOn = false; collisionOn = false;
panel.collisionH.checkTile(this); panel.collisionH.checkTile(this);
panel.collisionH.checkObject(this, false); panel.collisionH.checkObject(this, false);
panel.collisionH.checkEntity(this, panel.npc);
panel.collisionH.checkEntity(this, panel.monster);
panel.collisionH.checkPlayer(this); panel.collisionH.checkPlayer(this);
if(!collisionOn) { if(!collisionOn) {

View File

@@ -34,8 +34,10 @@ public class Player extends Entity {
} }
public void setDefaultValues() { public void setDefaultValues() {
worldX = panel.tileSize * 23; // worldX = panel.tileSize * 23;
worldY = panel.tileSize * 21; // worldY = panel.tileSize * 21;
worldX = panel.tileSize * 10;
worldY = panel.tileSize * 13;
speed = 4; speed = 4;
direction = Direction.DOWN; direction = Direction.DOWN;
@@ -75,6 +77,9 @@ public class Player extends Entity {
int npcIndex = panel.collisionH.checkEntity(this, panel.npc); int npcIndex = panel.collisionH.checkEntity(this, panel.npc);
interactNPC(npcIndex); interactNPC(npcIndex);
// CHECK MONSTER COLLISION
int monsterIndex = panel.collisionH.checkEntity(this, panel.monster);
// CHECK EVENT // CHECK EVENT
panel.eventH.checkEvent(); panel.eventH.checkEvent();