package squidpony.squidgrid.mapping.styled;
import squidpony.tileset.*;
/**
* An enumeration of all the kinds of dungeon that DungeonBoneGen
* knows how to draw already. Each value has a Javadoc description.
* Created by Tommy Ettinger on 3/10/2015.
*/
public enum TilesetType {
/**
* A generally useful kind of dungeon for ruins or underground manufactured areas.
*/
DEFAULT_DUNGEON,
/**
* A good general kind of cave, with long distances between merging paths.
*/
CAVES_LIMIT_CONNECTIVITY,
/**
* Only usable if using Chebyshev distances; many connections are diagonal-only.
*/
CAVES_TINY_CORRIDORS,
/**
* Most parts of the cave are large and open, but tiny corridors link them, providing hiding places.
*/
CORNER_CAVES,
/**
* Very basic demo dungeon.
*/
HORIZONTAL_CORRIDORS_A,
/**
* Slightly less basic demo dungeon.
*/
HORIZONTAL_CORRIDORS_B,
/**
* A bit more complexity in this demo dungeon.
*/
HORIZONTAL_CORRIDORS_C,
/**
* A reference implementation of where you can place walls; mostly floor.
*/
LIMIT_CONNECTIVITY_FAT,
/**
* A reference implementation of where you can place walls; mostly wall.
*/
LIMITED_CONNECTIVITY,
/**
* A generally good maze; MAZE_A and MAZE_B should both be interchangeable, but not on the same map.
*/
MAZE_A,
/**
* A generally good maze; MAZE_A and MAZE_B should both be interchangeable, but not on the same map.
*/
MAZE_B,
/**
* A map that's less dungeon-like than the others, with lots of open space.
*/
OPEN_AREAS,
/**
* An excellent natural cave style that looks worn down haphazardly, as by burrowing creatures or deep rivers.
*/
REFERENCE_CAVES,
/**
* Mostly open, kinda weird.
*/
ROOMS_AND_CORRIDORS_A,
/**
* Mostly open, but with long corridors that should be a good fit for ranged combat.
*/
ROOMS_AND_CORRIDORS_B,
/**
* A nice old-school roguelike map, with thin corridors and rectangular rooms.
*/
ROOMS_LIMIT_CONNECTIVITY,
/**
* A thing of beauty. Good for maps that need to seem otherworldly or unusual, like heavenly planes.
*/
ROUND_ROOMS_DIAGONAL_CORRIDORS,
/**
* A more open cave, but portions of this may seem artificial. Consider alternating with REFERENCE_CAVES .
*/
SIMPLE_CAVES,
/**
* Kinda... not the best map. Very predictable.
*/
SQUARE_ROOMS_WITH_RANDOM_RECTS;
/**
* @return The {@link Tileset} corresponding to this type.
*/
public Tileset getTileset() {
switch (this) {
case CAVES_LIMIT_CONNECTIVITY:
return CavesLimitConnectivity.INSTANCE;
case CAVES_TINY_CORRIDORS:
return CavesTinyCorridors.INSTANCE;
case CORNER_CAVES:
return CornerCaves.INSTANCE;
case DEFAULT_DUNGEON:
return DefaultDungeon.INSTANCE;
case HORIZONTAL_CORRIDORS_A:
return HorizontalCorridorsV1.INSTANCE;
case HORIZONTAL_CORRIDORS_B:
return HorizontalCorridorsV2.INSTANCE;
case HORIZONTAL_CORRIDORS_C:
return HorizontalCorridorsV3.INSTANCE;
case LIMITED_CONNECTIVITY:
return LimitedConnectivity.INSTANCE;
case LIMIT_CONNECTIVITY_FAT:
return LimitConnectivityFat.INSTANCE;
case MAZE_A:
return Maze2Wide.INSTANCE;
case MAZE_B:
return MazePlus2Wide.INSTANCE;
case OPEN_AREAS:
return OpenAreas.INSTANCE;
case REFERENCE_CAVES:
return OpenAreas.INSTANCE;
case ROOMS_AND_CORRIDORS_A:
return RoomsAndCorridors.INSTANCE;
case ROOMS_AND_CORRIDORS_B:
return RoomsAndCorridors2WideDiagonalBias.INSTANCE;
case ROOMS_LIMIT_CONNECTIVITY:
return RoomsLimitConnectivity.INSTANCE;
case ROUND_ROOMS_DIAGONAL_CORRIDORS:
return RoundRoomsDiagonalCorridors.INSTANCE;
case SIMPLE_CAVES:
return SimpleCaves2Wide.INSTANCE;
case SQUARE_ROOMS_WITH_RANDOM_RECTS:
return SquareRoomsWithRandomRects.INSTANCE;
}
throw new IllegalStateException("Unmatched: " + this);
}
/**
* Returns MixedGenerator.CAVE_FLOOR (which is 3) or MixedGenerator.ROOM_FLOOR (which is 1) based on whether this
* TilesetType predominantly generates caves or rooms. This is relevant for certain feature placement.
* @return 3 if this produces mostly caves, or 1 if it produces mostly rooms
*/
public int environment() {
int caves = 3, rooms = 1;
switch (this) {
case CAVES_LIMIT_CONNECTIVITY:
return caves;
case CAVES_TINY_CORRIDORS:
return caves;
case CORNER_CAVES:
return caves;
case DEFAULT_DUNGEON:
return rooms;
case HORIZONTAL_CORRIDORS_A:
return rooms;
case HORIZONTAL_CORRIDORS_B:
return rooms;
case HORIZONTAL_CORRIDORS_C:
return rooms;
case LIMITED_CONNECTIVITY:
return rooms;
case LIMIT_CONNECTIVITY_FAT:
return rooms;
case MAZE_A:
return rooms;
case MAZE_B:
return rooms;
case OPEN_AREAS:
return caves;
case REFERENCE_CAVES:
return caves;
case ROOMS_AND_CORRIDORS_A:
return rooms;
case ROOMS_AND_CORRIDORS_B:
return rooms;
case ROOMS_LIMIT_CONNECTIVITY:
return rooms;
case ROUND_ROOMS_DIAGONAL_CORRIDORS:
return rooms;
case SIMPLE_CAVES:
return caves;
case SQUARE_ROOMS_WITH_RANDOM_RECTS:
return rooms;
}
throw new IllegalStateException("Unmatched: " + this);
}
}