diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java index aa94a8730..4db6eb0d9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/painters/RegularPainter.java @@ -39,6 +39,7 @@ import com.watabou.utils.Rect; import com.watabou.utils.Reflection; import java.util.ArrayList; +import java.util.HashMap; public abstract class RegularPainter extends Painter { @@ -176,6 +177,8 @@ public abstract class RegularPainter extends Painter { hiddenDoorChance = (0.5f + hiddenDoorChance)/2f; } + roomMerges.clear(); + for (Room r : rooms) { for (Room n : r.connected.keySet()) { @@ -233,14 +236,28 @@ public abstract class RegularPainter extends Painter { } } } + + private HashMap roomMerges = new HashMap<>(); protected boolean joinRooms( Level l, Room r, Room n ) { - //FIXME currently this joins rooms a bit too often! Need to think up some limitations if (!(r instanceof StandardRoom) || !((StandardRoom) r).joinable || !(n instanceof StandardRoom) || !((StandardRoom) n).joinable) { return false; } + + if (roomMerges.get(r) == n) return true; + if (roomMerges.get(n) == r) return true; + + //normal sized rooms can be merged at most once. Large and Giant rooms can be merged many times + if (roomMerges.containsKey(r) || roomMerges.containsValue(r)){ + if (((StandardRoom) r).sizeCat == StandardRoom.SizeCategory.NORMAL) return false; + } + if (roomMerges.containsKey(n) || roomMerges.containsValue(n)){ + if (((StandardRoom) n).sizeCat == StandardRoom.SizeCategory.NORMAL) return false; + } + + //TODO maybe more limitations here, such as limiting maximum width/height for normal sized rooms? Rect w = r.intersect( n ); if (w.left == w.right) { @@ -265,6 +282,8 @@ public abstract class RegularPainter extends Painter { Painter.fill( l, w.left, w.top, w.width(), 1, Terrain.EMPTY ); } + + roomMerges.put(r, n); return true; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossEntranceRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossEntranceRoom.java index 40fa04170..ee4b5673f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossEntranceRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossEntranceRoom.java @@ -28,10 +28,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; public class SewerBossEntranceRoom extends EntranceRoom { - - { - joinable = false; - } public void paint(Level level ) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossExitRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossExitRoom.java index dd895505e..abb85576c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossExitRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/sewerboss/SewerBossExitRoom.java @@ -33,10 +33,6 @@ import com.watabou.noosa.Tilemap; import com.watabou.utils.Point; public class SewerBossExitRoom extends ExitRoom { - - { - joinable = false; - } @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java index b3252bae0..9dde10fd0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BlacksmithRoom.java @@ -31,10 +31,6 @@ import com.watabou.utils.Point; import com.watabou.utils.Random; public class BlacksmithRoom extends StandardRoom { - - { - joinable = false; //TODO maybe joinable? Could be neat in terms of layout - } @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java index 262ea8590..4a580d538 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/BurnedRoom.java @@ -29,6 +29,10 @@ import com.watabou.utils.Point; import com.watabou.utils.Random; public class BurnedRoom extends PatchRoom { + + { + joinable = false; + } @Override public float[] sizeCatProbs() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java index 6fa625330..b89322127 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/EntranceRoom.java @@ -33,7 +33,9 @@ import com.watabou.utils.Random; public class EntranceRoom extends StandardRoom { - //TODO maybe not joinable? It's a little BS to spawn with enemies + { + joinable = false; + } @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java index 54e475c50..6326cea8b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/ExitRoom.java @@ -28,8 +28,6 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; import com.watabou.utils.Point; public class ExitRoom extends StandardRoom { - - //TODO maybe not joinable? @Override public int minWidth() { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java index 7639f323a..999d5f194 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/standard/MinefieldRoom.java @@ -30,6 +30,10 @@ import com.watabou.utils.Random; public class MinefieldRoom extends StandardRoom { + { + joinable = false; + } + @Override public float[] sizeCatProbs() { return new float[]{4, 1, 0};