Package squidpony.squidgrid.mapping
Class SectionMap
java.lang.Object
squidpony.squidgrid.mapping.SectionMap
- All Implemented Interfaces:
Serializable
public class SectionMap extends Object implements Serializable
A Map-like collection that allows storing subdivisions of a 2D array with names (always Strings) and
identifying numbers, then looking up
If your code uses the
Not to be confused with
Created by Tommy Ettinger on 11/28/2016.
Coords to find the associated name and/or number, or or looking up
a subdivision with a name or number to get a GreasedRegion back. This also stores connections between
sections, which can be useful as part of a graph-like algorithm. It is fed the information it needs by a
RoomFinder instance passed to the constructor or to reinitialize(RoomFinder). A RoomFinder is ready
for usage after generating any dungeon with SectionDungeonGenerator or one of its subclasses; the field
SectionDungeonGenerator.finder should usually be all that needs to be given to this class. If you don't use
SectionDungeonGenerator, there's no reason you can't construct a RoomFinder independently and pass that (they can
take a little time to construct on large or very complex maps, but shouldn't be heavy after construction).
If your code uses the
Zone interface, then the GreasedRegion objects this
can return do implement Zone, MutableZone, and Iterable of Coord.
GreasedRegion is significantly faster than the alternatives (CoordPacker and manual
Lists of Coord) for the spatial manipulations that RoomFinder needs to do to find room-like shapes, and this just
gets its GreasedRegion values from RoomFinder directly.
Not to be confused with
RegionMap, which has different functionality and a different
pupose; RegionMap simply is a slight extension on OrderedMap to conveniently handle regions as short arrays produced
by CoordPacker, while this class offers additional features for labeling and looking up
sections of a map that were found by a RoomFinder.
Created by Tommy Ettinger on 11/28/2016.
- See Also:
- Serialized Form
-
Field Summary
Fields Modifier and Type Field Description protected ArrayList<IntVLA>connectionsprotected int[][]mapprotected Arrangement<String>namesprotected ArrayList<GreasedRegion>regions -
Constructor Summary
Constructors Constructor Description SectionMap()This shouldn't usually be used unless you for some reason need to construct a SectionMap before you have access to a dungeon for it to map.SectionMap(RoomFinder rf)The preferred constructor; takes a RoomFinder (often one already created in dungeon generation and available viaSectionDungeonGenerator.finder) and uses it to give unique String names and identifying numbers to each room, corridor, and cave area that had been identified by that RoomFinder.SectionMap(SectionMap other)Copy constructor; takes an already-initialized SectionMap and deep-copies each element into this one. -
Method Summary
Modifier and Type Method Description booleancontains(int number)Checks if this contains the given identifying number.booleancontains(int x, int y)Checks if this contains the given position (that is, x and y are within map bounds).booleancontains(String name)Checks if this contains the given name.booleancontains(Coord position)Checks if this contains the given position (that is, it is within map bounds).IntVLAnameToConnections(String name)Gets the list of connected sections (by their identifying numbers) given a name of a section.intnameToNumber(String name)Gets the identifying number corresponding to the given name.GreasedRegionnameToRegion(String name)Gets the GreasedRegion that has the given name.IntVLAnumberToConnections(int number)Gets the list of connected sections (by their identifying numbers) given an identifying number of a section.StringnumberToName(int number)Gets the name that corresponds to the given identifying number.GreasedRegionnumberToRegion(int number)Gets the GreasedRegion that has the given identifying number.IntVLApositionToConnections(int x, int y)Gets the list of connected sections (by their identifying numbers) given a position inside that section.IntVLApositionToConnections(Coord position)Gets the list of connected sections (by their identifying numbers) given a position inside that section.GreasedRegionpositionToContaining(int x, int y)Gets the GreasedRegion (a group of points as made by the constructor) that contains the given x, y point.GreasedRegionpositionToContaining(Coord position)Gets the GreasedRegion (a group of points as made by the constructor) that contains the given x, y point.StringpositionToName(int x, int y)Gets the name of the area that contains the given x, y position.StringpositionToName(Coord position)Gets the name of the area that contains the given position.intpositionToNumber(int x, int y)Gets the identifying number of the area that contains the given x, y position.intpositionToNumber(Coord position)Gets the identifying number of the area that contains the given position.SectionMapreinitialize(RoomFinder rf)If this SectionMap hasn't been initialized or the map has completely changed (such as if the player went to a different floor of a dungeon), then you can call this method to avoid discarding some of the state from an earlier SectionMap.intsize()The number of regions this knows about; includes an entry for "unused cells" so this may be one larger than the amount of GreasedRegions present in a RoomFinder used to construct this.
-
Field Details
-
Constructor Details
-
SectionMap
public SectionMap()This shouldn't usually be used unless you for some reason need to construct a SectionMap before you have access to a dungeon for it to map. If you do need this, then you must callreinitialize(RoomFinder)to get any use out of this object. -
SectionMap
The preferred constructor; takes a RoomFinder (often one already created in dungeon generation and available viaSectionDungeonGenerator.finder) and uses it to give unique String names and identifying numbers to each room, corridor, and cave area that had been identified by that RoomFinder. In the rare but possible chance that a room, corridor, or cave overlaps with another such area, the one given the highest identifying number takes precedence, but this should probably only happen if RoomFinder was subclassed or its internal state was modified. Any cells that aren't a room, corridor, or cave (usually this contains all walls) are given identifying number 0, with the corresponding name "unused0." All other cells will then have positive, non-zero identifying numbers. Rooms are named next, starting at "room1" and going up to "room2" and so on until all rooms are named; the 1 in the name corresponds to the identifying number. After the last room has been found, e.g. "room5", then corridors are named, starting after the last room's number, so in the example that would be "corridor6", followed by "corridor7". The numbers in the names still correspond to identifying numbers. After corridors, caves follow the same pattern; in this example "cave8" would be followed by "cave9".- Parameters:
rf- a RoomFinder object; usually obtained viaSectionDungeonGenerator.finder
-
SectionMap
Copy constructor; takes an already-initialized SectionMap and deep-copies each element into this one. Allows null forother, which will make an empty SectionMap. This shouldn't be needed very often because SectionMap values are immutable, though their contents can in some cases be mutated independently, and this would allow one SectionMap to be copied and then have its items changed without changing the original.- Parameters:
other- a SectionMap to deep-copy into this one
-
-
Method Details
-
reinitialize
If this SectionMap hasn't been initialized or the map has completely changed (such as if the player went to a different floor of a dungeon), then you can call this method to avoid discarding some of the state from an earlier SectionMap. This does all the same stepsSectionMap(RoomFinder)does, so refer to that constructor's documentation for the names and numbers this assigns.- Parameters:
rf- a RoomFinder object; usually obtained viaSectionDungeonGenerator.finder- Returns:
- this for chaining.
-
positionToNumber
Gets the identifying number of the area that contains the given x, y position.- Parameters:
x- the x-coordinate to find the identifying number for; should be within bounds of the mapy- the y-coordinate to find the identifying number for; should be within bounds of the map- Returns:
- the corresponding identifying number, or -1 if the parameters are invalid
-
positionToNumber
Gets the identifying number of the area that contains the given position.- Parameters:
position- the Coord to find the identifying number for; should be within bounds of the map and non-null- Returns:
- the corresponding identifying number, or -1 if position is invalid or null
-
positionToName
Gets the name of the area that contains the given x, y position.- Parameters:
x- the x-coordinate to find the name for; should be within bounds of the mapy- the y-coordinate to find the name for; should be within bounds of the map- Returns:
- the corresponding name as a String, or null if the parameters are invalid
-
positionToName
Gets the name of the area that contains the given position.- Parameters:
position- a Coord that should be within bounds of the map and non-null- Returns:
- the corresponding name as a String, or null if position is invalid or null
-
nameToNumber
Gets the identifying number corresponding to the given name.- Parameters:
name- the name to look up, like "room1"- Returns:
- the corresponding identifying number, or -1 if no such name exists
-
numberToName
Gets the name that corresponds to the given identifying number.- Parameters:
number- the number to look up, like 1- Returns:
- the corresponding name as a String, or null if no such number is used
-
numberToRegion
Gets the GreasedRegion that has the given identifying number.- Parameters:
number- the number to look up, like 1- Returns:
- the corresponding GreasedRegion, or null if no such number is used
-
nameToRegion
Gets the GreasedRegion that has the given name.- Parameters:
name- the name to look up, like "room1"- Returns:
- the corresponding GreasedRegion, or null if no such name exists
-
positionToContaining
Gets the GreasedRegion (a group of points as made by the constructor) that contains the given x, y point.- Parameters:
x- the x-coordinate to find the containing region for; should be within bounds of the mapy- the y-coordinate to find the containing region for; should be within bounds of the map- Returns:
- the GreasedRegion containing the given point, or null if the parameters are invalid
-
positionToContaining
Gets the GreasedRegion (a group of points as made by the constructor) that contains the given x, y point.- Parameters:
position- the Coord to find the containing region for; should be within bounds of the map and non-null- Returns:
- the GreasedRegion containing the given Coord, or null if position is invalid or null
-
numberToConnections
Gets the list of connected sections (by their identifying numbers) given an identifying number of a section.- Parameters:
number- an identifying number; should be non-negative and less thansize()- Returns:
- an IntVLA storing the identifying numbers of connected sections, or null if given an invalid parameter
-
nameToConnections
Gets the list of connected sections (by their identifying numbers) given a name of a section.- Parameters:
name- a String name; should be present in this SectionMap or this will return null- Returns:
- an IntVLA storing the identifying numbers of connected sections, or null if given an invalid parameter
-
positionToConnections
Gets the list of connected sections (by their identifying numbers) given a position inside that section.- Parameters:
x- the x-coordinate of the position to look up; should be within boundsy- the y-coordinate of the position to look up; should be within bounds- Returns:
- an IntVLA storing the identifying numbers of connected sections, or null if given invalid parameters
-
positionToConnections
Gets the list of connected sections (by their identifying numbers) given a position inside that section.- Parameters:
position- the Coord position to look up; should be within bounds and non-null- Returns:
- an IntVLA storing the identifying numbers of connected sections, or null if given an invalid parameter
-
size
The number of regions this knows about; includes an entry for "unused cells" so this may be one larger than the amount of GreasedRegions present in a RoomFinder used to construct this.- Returns:
- the size of this SectionMap
-
contains
Checks if this contains the given name.- Parameters:
name- the name to check- Returns:
- true if this contains the name, false otherwise
-
contains
Checks if this contains the given identifying number.- Parameters:
number- the number to check- Returns:
- true if this contains the identifying number, false otherwise
-
contains
Checks if this contains the given position (that is, x and y are within map bounds).- Parameters:
x- the x-coordinate of the position to checky- the y-coordinate of the position to check- Returns:
- true if the given position is in bounds, false otherwise
-
contains
Checks if this contains the given position (that is, it is within map bounds).- Parameters:
position- the position to check- Returns:
- true if position is non-null and is in bounds, false otherwise
-