v0.6.0: implemented logic for variable tunnel rooms
This commit is contained in:
parent
5b9d276ac1
commit
d559a495cc
|
@ -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<Room> rooms, ArrayList<Room> branchable,
|
||||
ArrayList<Room> roomsToBranch, float[] tunnelChances){
|
||||
ArrayList<Room> roomsToBranch, float[] connChances){
|
||||
|
||||
int i = 0;
|
||||
float angle;
|
||||
int tries;
|
||||
Room curr;
|
||||
ArrayList<Room> tunnelsThisBranch = new ArrayList<>();
|
||||
ArrayList<Room> 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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<Class<?extends ConnectionRoom>, 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user