From de42dd6bd624047e978e258d6b7f151aa30c8099 Mon Sep 17 00:00:00 2001 From: Maurice Date: Fri, 12 Dec 2025 13:27:42 +0100 Subject: [PATCH] events are now world-bound --- .../jgame2d/core/handlers/EventHandler.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/de/miaurizius/jgame2d/core/handlers/EventHandler.java b/src/de/miaurizius/jgame2d/core/handlers/EventHandler.java index e04c611..9dbaac9 100644 --- a/src/de/miaurizius/jgame2d/core/handlers/EventHandler.java +++ b/src/de/miaurizius/jgame2d/core/handlers/EventHandler.java @@ -3,34 +3,40 @@ package de.miaurizius.jgame2d.core.handlers; import de.miaurizius.jgame2d.core.GamePanel; import de.miaurizius.jgame2d.core.enums.Direction; import de.miaurizius.jgame2d.core.enums.GameState; +import de.miaurizius.jgame2d.core.enums.Map; import java.awt.*; public class EventHandler { GamePanel panel; - EventRect[][] eventRect; + EventRect[][][] eventRect; int prevEventX, prevEventY; boolean canTouchEvent = true; public EventHandler(GamePanel 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 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; + while(map < Map.values().length && col < panel.maxWorldCol && row < panel.maxWorldRow) { + eventRect[map][col][row] = new EventRect(); + eventRect[map][col][row].x = 23; + eventRect[map][col][row].y = 23; + eventRect[map][col][row].width = 2; + eventRect[map][col][row].height = 2; + eventRect[map][col][row].eventRectDefaultX = eventRect[map][col][row].x; + eventRect[map][col][row].eventRectDefaultY = eventRect[map][col][row].y; col++; if(col == panel.maxWorldCol) { col = 0; row++; + if(row == panel.maxWorldRow) { + row = 0; + map++; + } } } } @@ -54,12 +60,12 @@ public class EventHandler { 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[eventCol][eventRow].x = eventCol*panel.tileSize + eventRect[eventCol][eventRow].x; - eventRect[eventCol][eventRow].y = eventRow*panel.tileSize + eventRect[eventCol][eventRow].y; + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].x = eventCol*panel.tileSize + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].x; + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].y = eventRow*panel.tileSize + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].y; if( - panel.player.solidArea.intersects(eventRect[eventCol][eventRow]) && + panel.player.solidArea.intersects(eventRect[panel.currentMap.getIndex()][eventCol][eventRow]) && (reqDirection == null || panel.player.direction == reqDirection) && - !eventRect[eventCol][eventRow].eventDone + !eventRect[panel.currentMap.getIndex()][eventCol][eventRow].eventDone ) { hit = true; prevEventX = panel.player.worldX; @@ -67,8 +73,8 @@ public class EventHandler { } panel.player.solidArea.x = panel.player.solidAreaDefaultX; panel.player.solidArea.y = panel.player.solidAreaDefaultY; - eventRect[eventCol][eventRow].x = eventRect[eventCol][eventRow].eventRectDefaultX; - eventRect[eventCol][eventRow].y = eventRect[eventCol][eventRow].eventRectDefaultY; + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].x = eventRect[panel.currentMap.getIndex()][eventCol][eventRow].eventRectDefaultX; + eventRect[panel.currentMap.getIndex()][eventCol][eventRow].y = eventRect[panel.currentMap.getIndex()][eventCol][eventRow].eventRectDefaultY; return hit; }