diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/Builder.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/Builder.java index b2ccc99c1..2ea66a5e7 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/Builder.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/Builder.java @@ -22,7 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.builders; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; -import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.TunnelRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom; import com.watabou.utils.GameMath; import com.watabou.utils.Point; import com.watabou.utils.PointF; @@ -246,21 +246,21 @@ public abstract class Builder { //places the rooms in roomsToBranch into branches from rooms in branchable. //note that the three arrays should be separate, they may contain the same rooms however protected static void createBranches( ArrayList rooms, ArrayList branchable, - ArrayList roomsToBranch, float[] tunnelChances){ + ArrayList roomsToBranch, float[] connChances){ int i = 0; float angle; int tries; Room curr; - ArrayList tunnelsThisBranch = new ArrayList<>(); + ArrayList connectingRoomsThisBranch = new ArrayList<>(); while (i < roomsToBranch.size()){ - tunnelsThisBranch.clear(); + connectingRoomsThisBranch.clear(); curr = Random.element(branchable); - int tunnels = Random.chances(tunnelChances); - for (int j = 0; j < tunnels; j++){ - TunnelRoom t = new TunnelRoom(); + int connectingRooms = Random.chances(connChances); + for (int j = 0; j < connectingRooms; j++){ + ConnectionRoom t = ConnectionRoom.createRoom(); tries = 10; do { @@ -269,21 +269,21 @@ public abstract class Builder { } while (angle == -1 && tries >= 0); if (angle == -1) { - for (Room r : tunnelsThisBranch){ + for (Room r : connectingRoomsThisBranch){ r.clearConnections(); rooms.remove(r); } - tunnelsThisBranch.clear(); + connectingRoomsThisBranch.clear(); break; } else { - tunnelsThisBranch.add(t); + connectingRoomsThisBranch.add(t); rooms.add(t); } curr = t; } - if (tunnelsThisBranch.size() != tunnels){ + if (connectingRoomsThisBranch.size() != connectingRooms){ continue; } @@ -297,15 +297,15 @@ public abstract class Builder { } while (angle == -1 && tries >= 0); if (angle == -1){ - for (Room t : tunnelsThisBranch){ + for (Room t : connectingRoomsThisBranch){ t.clearConnections(); rooms.remove(t); } - tunnelsThisBranch.clear(); + connectingRoomsThisBranch.clear(); continue; } - for (Room t : tunnelsThisBranch){ + for (Room t : connectingRoomsThisBranch){ branchable.add(t); } if (r.maxConnections(Room.ALL) > 1 && Random.Int(2) == 0) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LineBuilder.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LineBuilder.java index f91c4fe46..fa6997ef8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LineBuilder.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LineBuilder.java @@ -22,7 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.builders; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; -import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.TunnelRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.special.ShopRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom; @@ -117,7 +117,7 @@ public class LineBuilder extends Builder { int tunnels = Random.chances(pathTunnelChances); for (int j = 0; j < tunnels; j++){ - TunnelRoom t = new TunnelRoom(); + ConnectionRoom t = ConnectionRoom.createRoom(); placeRoom(rooms, curr, t, direction + Random.Float(-pathVariance, pathVariance)); branchable.add(t); rooms.add(t); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LoopBuilder.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LoopBuilder.java index 714b3f177..7f3be771d 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LoopBuilder.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/builders/LoopBuilder.java @@ -22,7 +22,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.builders; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; -import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.TunnelRoom; +import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EmptyRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.EntranceRoom; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ExitRoom; @@ -109,7 +109,7 @@ public class LoopBuilder extends Builder { int tunnels = Random.chances(pathTunnelChances); for (int j = 0; j < tunnels; j++){ - loop.add(new TunnelRoom()); + loop.add(ConnectionRoom.createRoom()); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/ConnectionRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/ConnectionRoom.java index 1a3f279ed..696f2d692 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/ConnectionRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/connection/ConnectionRoom.java @@ -21,7 +21,11 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection; +import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room; +import com.watabou.utils.Random; + +import java.util.HashMap; public abstract class ConnectionRoom extends Room { @@ -45,5 +49,22 @@ public abstract class ConnectionRoom extends Room { else return 4; } + private static HashMap, Float> chances = new HashMap<>(); + static { + chances.put(TunnelRoom.class, 10f); + chances.put(PerimeterRoom.class, 10f); + chances.put(BridgeRoom.class, 3f); + chances.put(WalkwayRoom.class, 3f); + chances.put(MazeConnectionRoom.class, 1f); + } + + public static ConnectionRoom createRoom(){ + try { + return Random.chances(chances).newInstance(); + } catch (Exception e) { + ShatteredPixelDungeon.reportException(e); + return null; + } + } }