|
|
|
@@ -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;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|