v2.2.0: fixed various un-triggered logic errors in builder code
This commit is contained in:
+35
@@ -22,6 +22,7 @@
|
|||||||
package com.shatteredpixel.shatteredpixeldungeon.levels.builders;
|
package com.shatteredpixel.shatteredpixeldungeon.levels.builders;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.connection.ConnectionRoom;
|
||||||
import com.watabou.utils.Random;
|
import com.watabou.utils.Random;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -48,7 +49,41 @@ public class BranchesBuilder extends RegularBuilder {
|
|||||||
placeRoom(branchable, entrance, shop, Random.Float(360f));
|
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<>();
|
ArrayList<Room> roomsToBranch = new ArrayList<>();
|
||||||
|
roomsToBranch.addAll(mainPathRooms);
|
||||||
roomsToBranch.addAll(multiConnections);
|
roomsToBranch.addAll(multiConnections);
|
||||||
if (exit != null) roomsToBranch.add(exit);
|
if (exit != null) roomsToBranch.add(exit);
|
||||||
roomsToBranch.addAll(singleConnections);
|
roomsToBranch.addAll(singleConnections);
|
||||||
|
|||||||
+1
-1
@@ -130,7 +130,7 @@ public class FigureEightBuilder extends RegularBuilder {
|
|||||||
ArrayList<Room> secondLoopTemp = new ArrayList<>();
|
ArrayList<Room> secondLoopTemp = new ArrayList<>();
|
||||||
secondLoopTemp.add(landmarkRoom);
|
secondLoopTemp.add(landmarkRoom);
|
||||||
secondLoopTemp.addAll(roomsToLoop);
|
secondLoopTemp.addAll(roomsToLoop);
|
||||||
secondLoopTemp.add((secondLoopTemp.size()+1)/2, exit);
|
if (exit != null) secondLoopTemp.add((secondLoopTemp.size()+1)/2, exit);
|
||||||
|
|
||||||
secondLoop = new ArrayList<>();
|
secondLoop = new ArrayList<>();
|
||||||
for (Room r : secondLoopTemp){
|
for (Room r : secondLoopTemp){
|
||||||
|
|||||||
+11
-16
@@ -44,21 +44,19 @@ public class LineBuilder extends RegularBuilder {
|
|||||||
|
|
||||||
entrance.setSize();
|
entrance.setSize();
|
||||||
entrance.setPos(0, 0);
|
entrance.setPos(0, 0);
|
||||||
branchable.add(entrance);
|
|
||||||
|
mainPathRooms.add(0, entrance);
|
||||||
|
if (exit != null) mainPathRooms.add(exit);
|
||||||
|
|
||||||
if (shop != null){
|
if (shop != null){
|
||||||
placeRoom(rooms, entrance, shop, direction + 180f);
|
placeRoom(rooms, entrance, shop, direction + 180f);
|
||||||
}
|
}
|
||||||
|
|
||||||
int roomsOnPath = (int)(multiConnections.size()*pathLength) + Random.chances(pathLenJitterChances);
|
Room prev = entrance;
|
||||||
roomsOnPath = Math.min(roomsOnPath, multiConnections.size());
|
|
||||||
|
|
||||||
Room curr = entrance;
|
|
||||||
|
|
||||||
float[] pathTunnels = pathTunnelChances.clone();
|
float[] pathTunnels = pathTunnelChances.clone();
|
||||||
for (int i = 0; i <= roomsOnPath; i++){
|
for (int i = 1; i < mainPathRooms.size(); i++){
|
||||||
if (i == roomsOnPath && exit == null)
|
Room r = mainPathRooms.get(i);
|
||||||
continue;
|
|
||||||
|
|
||||||
int tunnels = Random.chances(pathTunnels);
|
int tunnels = Random.chances(pathTunnels);
|
||||||
if (tunnels == -1){
|
if (tunnels == -1){
|
||||||
@@ -69,22 +67,19 @@ public class LineBuilder extends RegularBuilder {
|
|||||||
|
|
||||||
for (int j = 0; j < tunnels; j++){
|
for (int j = 0; j < tunnels; j++){
|
||||||
ConnectionRoom t = ConnectionRoom.createRoom();
|
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);
|
branchable.add(t);
|
||||||
rooms.add(t);
|
rooms.add(t);
|
||||||
curr = t;
|
prev = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
Room r = (i == roomsOnPath ? exit : multiConnections.get(i));
|
placeRoom(rooms, prev, r, direction + Random.Float(-pathVariance, pathVariance));
|
||||||
placeRoom(rooms, curr, r, direction + Random.Float(-pathVariance, pathVariance));
|
|
||||||
branchable.add(r);
|
branchable.add(r);
|
||||||
curr = r;
|
prev = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<Room> roomsToBranch = new ArrayList<>();
|
ArrayList<Room> roomsToBranch = new ArrayList<>();
|
||||||
for (int i = roomsOnPath; i < multiConnections.size(); i++){
|
roomsToBranch.addAll(multiConnections);
|
||||||
roomsToBranch.add(multiConnections.get(i));
|
|
||||||
}
|
|
||||||
roomsToBranch.addAll(singleConnections);
|
roomsToBranch.addAll(singleConnections);
|
||||||
weightRooms(branchable);
|
weightRooms(branchable);
|
||||||
createBranches(rooms, branchable, roomsToBranch, branchTunnelChances);
|
createBranches(rooms, branchable, roomsToBranch, branchTunnelChances);
|
||||||
|
|||||||
+1
-1
@@ -84,7 +84,7 @@ public class LoopBuilder extends RegularBuilder {
|
|||||||
float startAngle = Random.Float(0, 360);
|
float startAngle = Random.Float(0, 360);
|
||||||
|
|
||||||
mainPathRooms.add(0, entrance);
|
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<>();
|
ArrayList<Room> loop = new ArrayList<>();
|
||||||
float[] pathTunnels = pathTunnelChances.clone();
|
float[] pathTunnels = pathTunnelChances.clone();
|
||||||
|
|||||||
Reference in New Issue
Block a user