events are now world-bound
This commit is contained in:
@@ -3,34 +3,40 @@ package de.miaurizius.jgame2d.core.handlers;
|
|||||||
import de.miaurizius.jgame2d.core.GamePanel;
|
import de.miaurizius.jgame2d.core.GamePanel;
|
||||||
import de.miaurizius.jgame2d.core.enums.Direction;
|
import de.miaurizius.jgame2d.core.enums.Direction;
|
||||||
import de.miaurizius.jgame2d.core.enums.GameState;
|
import de.miaurizius.jgame2d.core.enums.GameState;
|
||||||
|
import de.miaurizius.jgame2d.core.enums.Map;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
public class EventHandler {
|
public class EventHandler {
|
||||||
|
|
||||||
GamePanel panel;
|
GamePanel panel;
|
||||||
EventRect[][] eventRect;
|
EventRect[][][] eventRect;
|
||||||
int prevEventX, prevEventY;
|
int prevEventX, prevEventY;
|
||||||
boolean canTouchEvent = true;
|
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 EventRect[Map.values().length][panel.maxWorldCol][panel.maxWorldRow];
|
||||||
|
|
||||||
|
int map = 0;
|
||||||
int col = 0;
|
int col = 0;
|
||||||
int row = 0;
|
int row = 0;
|
||||||
while(col < panel.maxWorldCol && row < panel.maxWorldRow) {
|
while(map < Map.values().length && col < panel.maxWorldCol && row < panel.maxWorldRow) {
|
||||||
eventRect[col][row] = new EventRect();
|
eventRect[map][col][row] = new EventRect();
|
||||||
eventRect[col][row].x = 23;
|
eventRect[map][col][row].x = 23;
|
||||||
eventRect[col][row].y = 23;
|
eventRect[map][col][row].y = 23;
|
||||||
eventRect[col][row].width = 2;
|
eventRect[map][col][row].width = 2;
|
||||||
eventRect[col][row].height = 2;
|
eventRect[map][col][row].height = 2;
|
||||||
eventRect[col][row].eventRectDefaultX = eventRect[col][row].x;
|
eventRect[map][col][row].eventRectDefaultX = eventRect[map][col][row].x;
|
||||||
eventRect[col][row].eventRectDefaultY = eventRect[col][row].y;
|
eventRect[map][col][row].eventRectDefaultY = eventRect[map][col][row].y;
|
||||||
col++;
|
col++;
|
||||||
if(col == panel.maxWorldCol) {
|
if(col == panel.maxWorldCol) {
|
||||||
col = 0;
|
col = 0;
|
||||||
row++;
|
row++;
|
||||||
|
if(row == panel.maxWorldRow) {
|
||||||
|
row = 0;
|
||||||
|
map++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,12 +60,12 @@ public class EventHandler {
|
|||||||
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[eventCol][eventRow].x = eventCol*panel.tileSize + eventRect[eventCol][eventRow].x;
|
eventRect[panel.currentMap.getIndex()][eventCol][eventRow].x = eventCol*panel.tileSize + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].x;
|
||||||
eventRect[eventCol][eventRow].y = eventRow*panel.tileSize + eventRect[eventCol][eventRow].y;
|
eventRect[panel.currentMap.getIndex()][eventCol][eventRow].y = eventRow*panel.tileSize + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].y;
|
||||||
if(
|
if(
|
||||||
panel.player.solidArea.intersects(eventRect[eventCol][eventRow]) &&
|
panel.player.solidArea.intersects(eventRect[panel.currentMap.getIndex()][eventCol][eventRow]) &&
|
||||||
(reqDirection == null || panel.player.direction == reqDirection) &&
|
(reqDirection == null || panel.player.direction == reqDirection) &&
|
||||||
!eventRect[eventCol][eventRow].eventDone
|
!eventRect[panel.currentMap.getIndex()][eventCol][eventRow].eventDone
|
||||||
) {
|
) {
|
||||||
hit = true;
|
hit = true;
|
||||||
prevEventX = panel.player.worldX;
|
prevEventX = panel.player.worldX;
|
||||||
@@ -67,8 +73,8 @@ public class EventHandler {
|
|||||||
}
|
}
|
||||||
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[eventCol][eventRow].x = eventRect[eventCol][eventRow].eventRectDefaultX;
|
eventRect[panel.currentMap.getIndex()][eventCol][eventRow].x = eventRect[panel.currentMap.getIndex()][eventCol][eventRow].eventRectDefaultX;
|
||||||
eventRect[eventCol][eventRow].y = eventRect[eventCol][eventRow].eventRectDefaultY;
|
eventRect[panel.currentMap.getIndex()][eventCol][eventRow].y = eventRect[panel.currentMap.getIndex()][eventCol][eventRow].eventRectDefaultY;
|
||||||
return hit;
|
return hit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user