Read the title above. P.S. how can we sort an arraylist from greatest to least based on one variable?
I want to know this because on the Procedural Cave Generation tutorial, there is this code bit.
// [...]
void ProcessMap() {
// [...]
List<Room> survivingRooms = new List<Room> ();
// [...]
survivingRooms.Sort ();
survivingRooms [0].isMainRoom = true;
survivingRooms [0].isAccessibleFromMainRoom = true;
ConnectClosestRooms (survivingRooms);
}
struct Coord {
public int tileX;
public int tileY;
public Coord(int x, int y) {
tileX = x;
tileY = y;
}
}
class Room : IComparable<Room> {
public List<Coord> tiles;
public List<Coord> edgeTiles;
public List<Room> connectedRooms;
public int roomSize;
public bool isAccessibleFromMainRoom;
public bool isMainRoom;
public Room() {
}
public Room(List<Coord> roomTiles, int[,] map) {
tiles = roomTiles;
roomSize = tiles.Count;
connectedRooms = new List<Room>();
edgeTiles = new List<Coord>();
foreach (Coord tile in tiles) {
for (int x = tile.tileX-1; x <= tile.tileX+1; x++) {
for (int y = tile.tileY-1; y <= tile.tileY+1; y++) {
if (x == tile.tileX || y == tile.tileY) {
if (map[x,y] == 1) {
edgeTiles.Add(tile);
}
}
}
}
}
}
public void SetAccessibleFromMainRoom() {
if (!isAccessibleFromMainRoom) {
isAccessibleFromMainRoom = true;
foreach (Room connectedRoom in connectedRooms) {
connectedRoom.SetAccessibleFromMainRoom();
}
}
}
public static void ConnectRooms(Room roomA, Room roomB) {
if (roomA.isAccessibleFromMainRoom) {
roomB.SetAccessibleFromMainRoom ();
} else if (roomB.isAccessibleFromMainRoom) {
roomA.SetAccessibleFromMainRoom();
}
roomA.connectedRooms.Add (roomB);
roomB.connectedRooms.Add (roomA);
}
public bool IsConnected(Room otherRoom) {
return connectedRooms.Contains(otherRoom);
}
public int CompareTo(Room otherRoom) {
return otherRoom.roomSize.CompareTo (roomSize);
}
}
}