Compare commits

..

2 Commits

Author SHA1 Message Date
39aae4b867 removed unnecessary parameters 2025-11-28 22:17:02 +01:00
984a28a901 added one time only events 2025-11-28 22:14:53 +01:00
2 changed files with 49 additions and 18 deletions

View File

@@ -11,9 +11,7 @@ public class AssetSetter {
this.panel = panel; this.panel = panel;
} }
public void setObject() { public void setObject() {}
}
public void setNPC() { public void setNPC() {
panel.npc[0] = new OldManNPC(panel); panel.npc[0] = new OldManNPC(panel);

View File

@@ -9,37 +9,63 @@ import java.awt.*;
public class EventHandler { public class EventHandler {
GamePanel panel; GamePanel panel;
Rectangle eventRect; EventRect[][] eventRect;
int eventRectDefaultX, eventRectDefaultY; int prevEventX, prevEventY;
boolean canTouchEvent = true;
public EventHandler(GamePanel panel) { public EventHandler(GamePanel panel) {
this.panel = panel; this.panel = panel;
eventRect = new EventRect[panel.maxWorldCol][panel.maxWorldRow];
eventRect = new Rectangle(); int col = 0;
eventRect.x = 23; int row = 0;
eventRect.y = 23; while(col < panel.maxWorldCol && row < panel.maxWorldRow) {
eventRect.width = 2; eventRect[col][row] = new EventRect();
eventRect.height = 2; eventRect[col][row].x = 23;
eventRectDefaultX = eventRect.x; eventRect[col][row].y = 23;
eventRectDefaultY = eventRect.y; eventRect[col][row].width = 2;
eventRect[col][row].height = 2;
eventRect[col][row].eventRectDefaultX = eventRect[col][row].x;
eventRect[col][row].eventRectDefaultY = eventRect[col][row].y;
col++;
if(col == panel.maxWorldCol) {
col = 0;
row++;
}
}
} }
public void checkEvent() { public void checkEvent() {
// Check if the player char is more than 1 tile away from the last event
int xDistance = Math.abs(panel.player.worldX - prevEventX); //return absolute number
int yDistance = Math.abs(panel.player.worldY - prevEventY);
int distance = Math.max(xDistance, yDistance); //picks greater number
if(distance > panel.tileSize) canTouchEvent = true;
if(!canTouchEvent) return;
if(hit(27,16, Direction.RIGHT)) damagePit(GameState.DIALOGUE); if(hit(27,16, Direction.RIGHT)) damagePit(GameState.DIALOGUE);
if(hit(23,12, Direction.UP)) healingPool(GameState.DIALOGUE); if(hit(23,12, null)) healingPool(GameState.DIALOGUE);
} }
public boolean hit(int eventCol, int eventRow, Direction reqDirection) { public boolean hit(int eventCol, int eventRow, Direction reqDirection) {
boolean hit = false; boolean hit = false;
panel.player.solidArea.x = panel.player.worldX + panel.player.solidArea.x; panel.player.solidArea.x = panel.player.worldX + panel.player.solidArea.x;
panel.player.solidArea.y = panel.player.worldY + panel.player.solidArea.y; panel.player.solidArea.y = panel.player.worldY + panel.player.solidArea.y;
eventRect.x = eventCol*panel.tileSize + eventRect.x; eventRect[eventCol][eventRow].x = eventCol*panel.tileSize + eventRect[eventCol][eventRow].x;
eventRect.y = eventRow*panel.tileSize + eventRect.y; eventRect[eventCol][eventRow].y = eventRow*panel.tileSize + eventRect[eventCol][eventRow].y;
if(panel.player.solidArea.intersects(eventRect)) if(reqDirection == null || panel.player.direction == reqDirection) hit = true; if(
panel.player.solidArea.intersects(eventRect[eventCol][eventRow]) &&
(reqDirection == null || panel.player.direction == reqDirection) &&
!eventRect[eventCol][eventRow].eventDone
) {
hit = true;
prevEventX = panel.player.worldX;
prevEventY = panel.player.worldY;
}
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;
eventRect.x = eventRectDefaultX; eventRect[eventCol][eventRow].x = eventRect[eventCol][eventRow].eventRectDefaultX;
eventRect.y = eventRectDefaultY; eventRect[eventCol][eventRow].y = eventRect[eventCol][eventRow].eventRectDefaultY;
return hit; return hit;
} }
@@ -47,6 +73,7 @@ public class EventHandler {
panel.gameState = gameState; panel.gameState = gameState;
panel.ui.currentDialogue = "You have fallen into a pit!"; panel.ui.currentDialogue = "You have fallen into a pit!";
panel.player.life -= 1; panel.player.life -= 1;
canTouchEvent = false;
} }
public void healingPool(GameState gameState) { public void healingPool(GameState gameState) {
@@ -54,6 +81,12 @@ public class EventHandler {
panel.gameState = gameState; panel.gameState = gameState;
panel.ui.currentDialogue = "You drank the holy water.\nYour life has been recovered!"; panel.ui.currentDialogue = "You drank the holy water.\nYour life has been recovered!";
panel.player.life = panel.player.maxLife; panel.player.life = panel.player.maxLife;
canTouchEvent = false;
} }
static private class EventRect extends Rectangle {
int eventRectDefaultX, eventRectDefaultY;
boolean eventDone = false;
} }
}