v2.2.0: fixed various un-triggered logic errors in builder code
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.levels.builders;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -47,8 +48,42 @@ public class BranchesBuilder extends RegularBuilder {
|
||||
if (shop != null){
|
||||
placeRoom(branchable, entrance, shop, Random.Float(360f));
|
||||
}
|
||||
|
||||
|
||||
//we place up to 2 or 3 main path rooms first so that levelgen has a starting point for branches
|
||||
int mainBranchRooms = Math.max(Random.Int(2, 3), mainPathRooms.size());
|
||||
float[] pathTunnels = pathTunnelChances.clone();
|
||||
for (int i = 1; i < mainBranchRooms; i++){
|
||||
Room prev = entrance;
|
||||
Room r = mainPathRooms.get(0);
|
||||
|
||||
int tunnels = Random.chances(pathTunnels);
|
||||
if (tunnels == -1){
|
||||
pathTunnels = pathTunnelChances.clone();
|
||||
tunnels = Random.chances(pathTunnels);
|
||||
}
|
||||
pathTunnels[tunnels]--;
|
||||
|
||||
for (int j = 0; j < tunnels; j++){
|
||||
ConnectionRoom t = ConnectionRoom.createRoom();
|
||||
float result;
|
||||
do {
|
||||
result = placeRoom(rooms, prev, t, Random.Float(360f));
|
||||
} while (result == -1);
|
||||
branchable.add(t);
|
||||
rooms.add(t);
|
||||
prev = t;
|
||||
}
|
||||
|
||||
float result;
|
||||
do {
|
||||
result = placeRoom(rooms, prev, r, Random.Float(360f));
|
||||
} while (result == -1);
|
||||
branchable.add(r);
|
||||
mainPathRooms.remove(r);
|
||||
}
|
||||
|
||||
ArrayList<Room> roomsToBranch = new ArrayList<>();
|
||||
roomsToBranch.addAll(mainPathRooms);
|
||||
roomsToBranch.addAll(multiConnections);
|
||||
if (exit != null) roomsToBranch.add(exit);
|
||||
roomsToBranch.addAll(singleConnections);
|
||||
|
||||
@@ -130,7 +130,7 @@ public class FigureEightBuilder extends RegularBuilder {
|
||||
ArrayList<Room> secondLoopTemp = new ArrayList<>();
|
||||
secondLoopTemp.add(landmarkRoom);
|
||||
secondLoopTemp.addAll(roomsToLoop);
|
||||
secondLoopTemp.add((secondLoopTemp.size()+1)/2, exit);
|
||||
if (exit != null) secondLoopTemp.add((secondLoopTemp.size()+1)/2, exit);
|
||||
|
||||
secondLoop = new ArrayList<>();
|
||||
for (Room r : secondLoopTemp){
|
||||
|
||||
@@ -44,47 +44,42 @@ public class LineBuilder extends RegularBuilder {
|
||||
|
||||
entrance.setSize();
|
||||
entrance.setPos(0, 0);
|
||||
branchable.add(entrance);
|
||||
|
||||
mainPathRooms.add(0, entrance);
|
||||
if (exit != null) mainPathRooms.add(exit);
|
||||
|
||||
if (shop != null){
|
||||
placeRoom(rooms, entrance, shop, direction + 180f);
|
||||
}
|
||||
|
||||
int roomsOnPath = (int)(multiConnections.size()*pathLength) + Random.chances(pathLenJitterChances);
|
||||
roomsOnPath = Math.min(roomsOnPath, multiConnections.size());
|
||||
|
||||
Room curr = entrance;
|
||||
|
||||
Room prev = entrance;
|
||||
|
||||
float[] pathTunnels = pathTunnelChances.clone();
|
||||
for (int i = 0; i <= roomsOnPath; i++){
|
||||
if (i == roomsOnPath && exit == null)
|
||||
continue;
|
||||
|
||||
for (int i = 1; i < mainPathRooms.size(); i++){
|
||||
Room r = mainPathRooms.get(i);
|
||||
|
||||
int tunnels = Random.chances(pathTunnels);
|
||||
if (tunnels == -1){
|
||||
pathTunnels = pathTunnelChances.clone();
|
||||
tunnels = Random.chances(pathTunnels);
|
||||
}
|
||||
pathTunnels[tunnels]--;
|
||||
|
||||
|
||||
for (int j = 0; j < tunnels; j++){
|
||||
ConnectionRoom t = ConnectionRoom.createRoom();
|
||||
placeRoom(rooms, curr, t, direction + Random.Float(-pathVariance, pathVariance));
|
||||
placeRoom(rooms, prev, t, direction + Random.Float(-pathVariance, pathVariance));
|
||||
branchable.add(t);
|
||||
rooms.add(t);
|
||||
curr = t;
|
||||
prev = t;
|
||||
}
|
||||
|
||||
Room r = (i == roomsOnPath ? exit : multiConnections.get(i));
|
||||
placeRoom(rooms, curr, r, direction + Random.Float(-pathVariance, pathVariance));
|
||||
placeRoom(rooms, prev, r, direction + Random.Float(-pathVariance, pathVariance));
|
||||
branchable.add(r);
|
||||
curr = r;
|
||||
prev = r;
|
||||
}
|
||||
|
||||
ArrayList<Room> roomsToBranch = new ArrayList<>();
|
||||
for (int i = roomsOnPath; i < multiConnections.size(); i++){
|
||||
roomsToBranch.add(multiConnections.get(i));
|
||||
}
|
||||
roomsToBranch.addAll(multiConnections);
|
||||
roomsToBranch.addAll(singleConnections);
|
||||
weightRooms(branchable);
|
||||
createBranches(rooms, branchable, roomsToBranch, branchTunnelChances);
|
||||
|
||||
@@ -84,7 +84,7 @@ public class LoopBuilder extends RegularBuilder {
|
||||
float startAngle = Random.Float(0, 360);
|
||||
|
||||
mainPathRooms.add(0, entrance);
|
||||
mainPathRooms.add((mainPathRooms.size()+1)/2, exit);
|
||||
if (exit != null) mainPathRooms.add((mainPathRooms.size()+1)/2, exit);
|
||||
|
||||
ArrayList<Room> loop = new ArrayList<>();
|
||||
float[] pathTunnels = pathTunnelChances.clone();
|
||||
|
||||
Reference in New Issue
Block a user