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.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • RoomFinder

      public RoomFinder​(char[][] dungeon)
      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

      public 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. Defaults to treating all areas as cave unless environmentKind is MixedGenerator.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

      public 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.
      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

      public 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 '#'.
      Returns:
      an ArrayList of 2D char arrays representing rooms.
    • findCorridors

      public 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 '#'.
      Returns:
      an ArrayList of 2D char arrays representing corridors.
    • findCaves

      public 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 '#'. 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

      public 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 '#'.
      Returns:
      an ArrayList of 2D char arrays representing rooms, corridors, or caves.
    • merge

      public 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. 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 merged
      width - the width of any map this returns
      height - 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

      public 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.
      Parameters:
      x - the x coordinate of a position that should be in a room or corridor
      y - 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

      public 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.
      Parameters:
      x - the x coordinate of a position that should be in a room or corridor
      y - 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

      public 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.
      Parameters:
      x - the x coordinate of a position that should be in a room or corridor
      y - 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 '#'