From c3cb735462b92740092b6da66ddb119425929d32 Mon Sep 17 00:00:00 2001 From: Toni Helenius Date: Sun, 12 Jan 2025 15:49:09 +0200 Subject: [PATCH] Properly update the tiles' room IDs --- .../openkeeper/game/component/MapTile.java | 4 ++-- .../game/controller/GameWorldController.java | 6 +++--- .../openkeeper/game/controller/IMapController.java | 8 ++++++++ .../openkeeper/game/controller/MapController.java | 14 +++++++++----- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/toniarts/openkeeper/game/component/MapTile.java b/src/toniarts/openkeeper/game/component/MapTile.java index b78aab36..fd33db65 100644 --- a/src/toniarts/openkeeper/game/component/MapTile.java +++ b/src/toniarts/openkeeper/game/component/MapTile.java @@ -17,11 +17,10 @@ package toniarts.openkeeper.game.component; import com.simsilica.es.EntityComponent; +import com.simsilica.es.EntityId; import java.awt.Point; import java.util.HashMap; import java.util.Map; - -import com.simsilica.es.EntityId; import toniarts.openkeeper.tools.convert.map.Tile; /** @@ -63,6 +62,7 @@ public MapTile(MapTile mapTile) { this.bridgeTerrainType = mapTile.bridgeTerrainType; this.p = mapTile.p; this.index = mapTile.index; + this.room = mapTile.room; if (mapTile.selection != null && !mapTile.selection.isEmpty()) { this.selection = HashMap.newHashMap(4); diff --git a/src/toniarts/openkeeper/game/controller/GameWorldController.java b/src/toniarts/openkeeper/game/controller/GameWorldController.java index baa083c2..58b6427a 100644 --- a/src/toniarts/openkeeper/game/controller/GameWorldController.java +++ b/src/toniarts/openkeeper/game/controller/GameWorldController.java @@ -402,7 +402,7 @@ public void build(Vector2f start, Vector2f end, short playerId, short roomId) { substractGoldCapacityFromPlayer(firstInstance); // Important to update the gold here firstInstance.addCoordinates(instancePlots); for (Point p : instancePlots) { - mapController.getRoomCoordinates().put(p, firstInstance); + mapController.addRoomCoordinate(firstInstance, p); } // Update the merged room @@ -416,7 +416,7 @@ public void build(Vector2f start, Vector2f end, short playerId, short roomId) { updatableTiles.addAll(Arrays.asList(WorldUtils.getSurroundingTiles(mapController.getMapData(), p, true))); if (!firstInstance.equals(instance)) { firstInstance.addCoordinate(p); - mapController.getRoomCoordinates().put(p, firstInstance); + mapController.addRoomCoordinate(firstInstance, p); } } } @@ -425,7 +425,7 @@ public void build(Vector2f start, Vector2f end, short playerId, short roomId) { } // Update - mapController.updateRooms(updatableTiles.toArray(new Point[0])); + mapController.updateRooms(updatableTiles.toArray(Point[]::new)); // New room, calculate gold capacity RoomInstance instance = mapController.getRoomCoordinates().get(instancePlots.get(0)); diff --git a/src/toniarts/openkeeper/game/controller/IMapController.java b/src/toniarts/openkeeper/game/controller/IMapController.java index 7f6e2df1..20c292b5 100644 --- a/src/toniarts/openkeeper/game/controller/IMapController.java +++ b/src/toniarts/openkeeper/game/controller/IMapController.java @@ -218,4 +218,12 @@ public interface IMapController extends IMapInformation, IGa */ public int getPlayerSkeletonCapacity(short playerId); + /** + * Add a coordinate to a room + * + * @param roomInstance roomInstance to add + * @param point coordinate to add + */ + public void addRoomCoordinate(RoomInstance roomInstance, Point point); + } diff --git a/src/toniarts/openkeeper/game/controller/MapController.java b/src/toniarts/openkeeper/game/controller/MapController.java index 3e633b0a..67a63a03 100644 --- a/src/toniarts/openkeeper/game/controller/MapController.java +++ b/src/toniarts/openkeeper/game/controller/MapController.java @@ -375,12 +375,10 @@ public void removeRoomInstances(RoomInstance... instances) { roomController.remove(); roomControllers.remove(instance); - for (Point p : instance.getCoordinates()) { - roomCoordinates.remove(p); - } - - // Remove room from the tiles for (Point roomCoordinate : instance.getCoordinates()) { + roomCoordinates.remove(roomCoordinate); + + // Remove room from the tile IMapTileController roomTile = mapData.getTile(roomCoordinate); if (roomTile.getRoomId().equals(roomController.getEntityId())) { roomTile.setRoomId(null); @@ -831,4 +829,10 @@ public int getPlayerSkeletonCapacity(short playerId) { public boolean isSolid(Point p) { return mapInformation.isSolid(p); } + + @Override + public void addRoomCoordinate(RoomInstance roomInstance, Point point) { + roomCoordinates.put(point, roomInstance); + getMapData().getTile(point).setRoomId(getRoomController(roomInstance).getEntityId()); + } }