events are now world-bound

This commit is contained in:
2025-12-12 13:27:42 +01:00
parent 4aabe84d59
commit de42dd6bd6

View File

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