Class RoomFinder

java.lang.Object
com.github.yellowstonegames.place.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 '#'.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    com.github.yellowstonegames.grid.Region
     
    com.github.yellowstonegames.grid.Region
     
    com.github.yellowstonegames.grid.Region
     
    com.github.yellowstonegames.grid.Region
     
    char[][]
    A copy of the dungeon map, however it was passed to the constructor.
    com.github.tommyettinger.ds.ObjectObjectOrderedMap<com.github.yellowstonegames.grid.Region, com.github.tommyettinger.ds.ObjectList<com.github.yellowstonegames.grid.Region>>
    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.
    com.github.yellowstonegames.grid.Coord[]
    When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.
    com.github.tommyettinger.ds.ObjectObjectOrderedMap<com.github.yellowstonegames.grid.Region, com.github.tommyettinger.ds.ObjectList<com.github.yellowstonegames.grid.Region>>
    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.
    com.github.yellowstonegames.grid.Coord[]
    When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.
    int[][]
     
    int
     
    char[][]
    A copy of the dungeon map, however it was passed to the constructor.
    com.github.yellowstonegames.grid.Coord[]
    When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.
    com.github.tommyettinger.ds.ObjectObjectOrderedMap<com.github.yellowstonegames.grid.Region, com.github.tommyettinger.ds.ObjectList<com.github.yellowstonegames.grid.Region>>
    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
     
  • 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 (typically obtained with PlaceGenerator.getEnvironment() after generating a map with PlaceGenerator.getPlaceGrid()), and finds rooms, corridors, caves, and their connections on the map.
  • Method Summary

    Modifier and Type
    Method
    Description
    com.github.tommyettinger.ds.ObjectList<char[][]>
    Gets all the caves this found during construction, returning them as an ObjectList of 2D char arrays, where an individual room is "masked" so only its contents have normal map chars and the rest have only '#'.
    com.github.tommyettinger.ds.ObjectList<char[][]>
    Gets all the corridors this found during construction, returning them as an ObjectList of 2D char arrays, where an individual corridor is "masked" so only its contents have normal map chars and the rest have only '#'.
    com.github.tommyettinger.ds.ObjectList<char[][]>
    Gets all the rooms, corridors, and caves this found during construction, returning them as an ObjectList 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 '#'.
    com.github.tommyettinger.ds.ObjectList<char[][]>
    Gets all the rooms this found during construction, returning them as an ObjectList 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(com.github.tommyettinger.ds.ObjectList<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.
    com.github.tommyettinger.ds.ObjectList<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 ObjectList 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.
    reset(char[][] dungeon)
     
    reset(char[][] dungeon, int environmentKind)
     
    reset(char[][] dungeon, int[][] environment)
     
     

    Methods inherited from class Object

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

    • map

      public char[][] map
      A copy of the dungeon map, however it was passed to the constructor.
    • basic

      public char[][] basic
      A copy of the dungeon map, however it was passed to the constructor.
    • environment

      public int[][] environment
    • rooms

      public com.github.tommyettinger.ds.ObjectObjectOrderedMap<com.github.yellowstonegames.grid.Region, com.github.tommyettinger.ds.ObjectList<com.github.yellowstonegames.grid.Region>> 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

      public com.github.tommyettinger.ds.ObjectObjectOrderedMap<com.github.yellowstonegames.grid.Region, com.github.tommyettinger.ds.ObjectList<com.github.yellowstonegames.grid.Region>> 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

      public com.github.tommyettinger.ds.ObjectObjectOrderedMap<com.github.yellowstonegames.grid.Region, com.github.tommyettinger.ds.ObjectList<com.github.yellowstonegames.grid.Region>> 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

      public com.github.yellowstonegames.grid.Region allRooms
    • allCaves

      public com.github.yellowstonegames.grid.Region allCaves
    • allCorridors

      public com.github.yellowstonegames.grid.Region allCorridors
    • allFloors

      public com.github.yellowstonegames.grid.Region allFloors
    • connections

      public com.github.yellowstonegames.grid.Coord[] connections
      When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.
    • doorways

      public com.github.yellowstonegames.grid.Coord[] doorways
      When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.
    • mouths

      public com.github.yellowstonegames.grid.Coord[] mouths
      When a RoomFinder is constructed, it stores all points of rooms that are adjacent to another region here.
    • width

      public int width
    • height

      public int height
  • 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 DungeonTools.ROOM_FLOOR (or its equivalent, 1).
      Parameters:
      dungeon - a 2D char array that uses '#', box drawing characters, or ' ' for walls.
      environmentKind - if 1 (DungeonTools.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 (typically obtained with PlaceGenerator.getEnvironment() after generating a map with PlaceGenerator.getPlaceGrid()), 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 DungeonTools; typically produced by a call to getEnvironment() in a PlaceGenerator after dungeon generation.
  • Method Details

    • reset

      public RoomFinder reset(char[][] dungeon)
    • reset

      public RoomFinder reset(char[][] dungeon, int environmentKind)
    • reset

      public RoomFinder reset(char[][] dungeon, int[][] environment)
    • findRooms

      public com.github.tommyettinger.ds.ObjectList<char[][]> findRooms()
      Gets all the rooms this found during construction, returning them as an ObjectList 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 ObjectList of 2D char arrays representing rooms.
    • findCorridors

      public com.github.tommyettinger.ds.ObjectList<char[][]> findCorridors()
      Gets all the corridors this found during construction, returning them as an ObjectList 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 ObjectList of 2D char arrays representing corridors.
    • findCaves

      public com.github.tommyettinger.ds.ObjectList<char[][]> findCaves()
      Gets all the caves this found during construction, returning them as an ObjectList 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 ObjectList of 2D char arrays representing caves.
    • findRegions

      public com.github.tommyettinger.ds.ObjectList<char[][]> findRegions()
      Gets all the rooms, corridors, and caves this found during construction, returning them as an ObjectList 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 ObjectList of 2D char arrays representing rooms, corridors, or caves.
    • merge

      public static char[][] merge(com.github.tommyettinger.ds.ObjectList<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 ObjectList 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 com.github.tommyettinger.ds.ObjectList<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 ObjectList 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 ObjectList of masked 2D char arrays where anything not in a connected region is '#'
    • toString

      public String toString()
      Overrides:
      toString in class Object