Package squidpony.squidgrid.mapping
Class RoomFinder
java.lang.Object
squidpony.squidgrid.mapping.RoomFinder
public class RoomFinder extends Object
A small class that can analyze a dungeon or other map and identify areas as being "room" or "corridor" based on how
thick the walkable areas are (corridors are at most 2 cells wide at their widest, rooms are anything else). Most
methods of this class return 2D char arrays or Lists thereof, with the subset of the map that is in a specific region
kept the same, but everything else replaced with '#'.
Created by Tommy Ettinger on 2/3/2016.
- See Also:
A simpler but faster alternative
-
Field Summary
Fields Modifier and Type Field Description GreasedRegion
allCaves
GreasedRegion
allCorridors
GreasedRegion
allFloors
GreasedRegion
allRooms
char[][]
basic
A copy of the dungeon map, however it was passed to the constructor.OrderedMap<GreasedRegion,List<GreasedRegion>>
caves
Not likely to be used directly, but there may be things you can do with these that are cumbersome using only RoomFinder's simpler API.Coord[]
connections
When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.OrderedMap<GreasedRegion,List<GreasedRegion>>
corridors
Not likely to be used directly, but there may be things you can do with these that are cumbersome using only RoomFinder's simpler API.Coord[]
doorways
When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.int[][]
environment
int
height
char[][]
map
A copy of the dungeon map, however it was passed to the constructor.Coord[]
mouths
When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.OrderedMap<GreasedRegion,List<GreasedRegion>>
rooms
Not likely to be used directly, but there may be things you can do with these that are cumbersome using only RoomFinder's simpler API.int
width
-
Constructor Summary
Constructors Constructor Description RoomFinder(char[][] dungeon)
Constructs a RoomFinder given a dungeon map, and finds rooms, corridors, and their connections on the map.RoomFinder(char[][] dungeon, int environmentKind)
Constructs a RoomFinder given a dungeon map and a general kind of environment for the whole map, then finds rooms, corridors, and their connections on the map.RoomFinder(char[][] dungeon, int[][] environment)
Constructs a RoomFinder given a dungeon map and an environment map (which currently is only produced by MixedGenerator by the getEnvironment() method after generate() is called, but other classes that use MixedGenerator may also expose that environment, such as SerpentMapGenerator.getEnvironment()), and finds rooms, corridors, caves, and their connections on the map. -
Method Summary
Modifier and Type Method Description ArrayList<char[][]>
findCaves()
Gets all the caves this found during construction, returning them as an ArrayList of 2D char arrays, where an individual room is "masked" so only its contents have normal map chars and the rest have only '#'.ArrayList<char[][]>
findCorridors()
Gets all the corridors this found during construction, returning them as an ArrayList of 2D char arrays, where an individual corridor is "masked" so only its contents have normal map chars and the rest have only '#'.ArrayList<char[][]>
findRegions()
Gets all the rooms, corridors, and caves this found during construction, returning them as an ArrayList of 2D char arrays, where an individual room or corridor is "masked" so only its contents have normal map chars and the rest have only '#'.ArrayList<char[][]>
findRooms()
Gets all the rooms this found during construction, returning them as an ArrayList of 2D char arrays, where an individual room is "masked" so only its contents have normal map chars and the rest have only '#'.static char[][]
merge(ArrayList<char[][]> regions, int width, int height)
Merges multiple 2D char arrays where the '#' character means "no value", and combines them so all cells with value are on one map, with '#' filling any other cells.char[][]
regionAt(int x, int y)
Takes an x, y position and finds the room, corridor, or cave at that position, if there is one, returning the same 2D char array format as the other methods.ArrayList<char[][]>
regionsConnected(int x, int y)
Takes an x, y position and finds the rooms or corridors that are directly connected to the room, corridor or cave at that position, and returns the group as an ArrayList of 2D char arrays, one per connecting region.char[][]
regionsNear(int x, int y)
Takes an x, y position and finds the room or corridor at that position and the rooms, corridors or caves that it directly connects to, and returns the group as one merged 2D char array.
-
Field Details
-
map
A copy of the dungeon map, however it was passed to the constructor. -
basic
A copy of the dungeon map, however it was passed to the constructor. -
environment
-
rooms
Not likely to be used directly, but there may be things you can do with these that are cumbersome using only RoomFinder's simpler API. -
corridors
Not likely to be used directly, but there may be things you can do with these that are cumbersome using only RoomFinder's simpler API. -
caves
Not likely to be used directly, but there may be things you can do with these that are cumbersome using only RoomFinder's simpler API. -
allRooms
-
allCaves
-
allCorridors
-
allFloors
-
connections
When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here. -
doorways
When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here. -
mouths
When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here. -
width
-
height
-
-
Constructor Details
-
RoomFinder
Constructs a RoomFinder given a dungeon map, and finds rooms, corridors, and their connections on the map. Does not find caves; if a collection of caves is requested from this, it will be non-null but empty.- Parameters:
dungeon
- a 2D char array that uses '#', box drawing characters, or ' ' for walls.
-
RoomFinder
Constructs a RoomFinder given a dungeon map and a general kind of environment for the whole map, then finds rooms, corridors, and their connections on the map. Defaults to treating all areas as cave unlessenvironmentKind
isMixedGenerator.ROOM_FLOOR
(or its equivalent, 1).- Parameters:
dungeon
- a 2D char array that uses '#', box drawing characters, or ' ' for walls.environmentKind
- if 1 (MixedGenerator.ROOM_FLOOR
), this will find rooms and corridors, else caves
-
RoomFinder
Constructs a RoomFinder given a dungeon map and an environment map (which currently is only produced by MixedGenerator by the getEnvironment() method after generate() is called, but other classes that use MixedGenerator may also expose that environment, such as SerpentMapGenerator.getEnvironment()), and finds rooms, corridors, caves, and their connections on the map.- Parameters:
dungeon
- a 2D char array that uses '#' for walls.environment
- a 2D int array using constants from MixedGenerator; typically produced by a call to getEnvironment() in MixedGenerator or SerpentMapGenerator after dungeon generation.
-
-
Method Details
-
findRooms
Gets all the rooms this found during construction, returning them as an ArrayList of 2D char arrays, where an individual room is "masked" so only its contents have normal map chars and the rest have only '#'.- Returns:
- an ArrayList of 2D char arrays representing rooms.
-
findCorridors
Gets all the corridors this found during construction, returning them as an ArrayList of 2D char arrays, where an individual corridor is "masked" so only its contents have normal map chars and the rest have only '#'.- Returns:
- an ArrayList of 2D char arrays representing corridors.
-
findCaves
Gets all the caves this found during construction, returning them as an ArrayList of 2D char arrays, where an individual room is "masked" so only its contents have normal map chars and the rest have only '#'. Will only return a non-empty collection if the two-arg constructor was used and the environment contains caves.- Returns:
- an ArrayList of 2D char arrays representing caves.
-
findRegions
Gets all the rooms, corridors, and caves this found during construction, returning them as an ArrayList of 2D char arrays, where an individual room or corridor is "masked" so only its contents have normal map chars and the rest have only '#'.- Returns:
- an ArrayList of 2D char arrays representing rooms, corridors, or caves.
-
merge
Merges multiple 2D char arrays where the '#' character means "no value", and combines them so all cells with value are on one map, with '#' filling any other cells. If regions is empty, this uses width and height to construct a blank map, all '#'. It will also use width and height for the size of the returned 2D array.- Parameters:
regions
- An ArrayList of 2D char array regions, where '#' is an empty value and all others will be mergedwidth
- the width of any map this returnsheight
- the height of any map this returns- Returns:
- a 2D char array that merges all non-'#' areas in regions, and fills the rest with '#'
-
regionAt
Takes an x, y position and finds the room, corridor, or cave at that position, if there is one, returning the same 2D char array format as the other methods.- Parameters:
x
- the x coordinate of a position that should be in a room or corridory
- the y coordinate of a position that should be in a room or corridor- Returns:
- a masked 2D char array where anything not in the current region is '#'
-
regionsNear
Takes an x, y position and finds the room or corridor at that position and the rooms, corridors or caves that it directly connects to, and returns the group as one merged 2D char array.- Parameters:
x
- the x coordinate of a position that should be in a room or corridory
- the y coordinate of a position that should be in a room or corridor- Returns:
- a masked 2D char array where anything not in the current region or one nearby is '#'
-
regionsConnected
Takes an x, y position and finds the rooms or corridors that are directly connected to the room, corridor or cave at that position, and returns the group as an ArrayList of 2D char arrays, one per connecting region.- Parameters:
x
- the x coordinate of a position that should be in a room or corridory
- the y coordinate of a position that should be in a room or corridor- Returns:
- an ArrayList of masked 2D char arrays where anything not in a connected region is '#'
-