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;
}
public void setObject() {
}
public void setObject() {}
public void setNPC() {
panel.npc[0] = new OldManNPC(panel);

View File

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