With some help from chat I sorted out how to randomize rooms without overlap.
This commit is contained in:
parent
47c0d4a5f0
commit
fb41c153c1
6 changed files with 126 additions and 52 deletions
|
|
@ -9,25 +9,28 @@ namespace maze {
|
|||
Matrix& $walls;
|
||||
std::vector<Room>& $rooms;
|
||||
std::vector<Point>& $dead_ends;
|
||||
std::unordered_map<Point, bool> $ends_map;
|
||||
|
||||
Builder(Map& map) :
|
||||
$walls(map.$walls), $rooms(map.$rooms), $dead_ends(map.$dead_ends)
|
||||
{
|
||||
init();
|
||||
clear();
|
||||
}
|
||||
|
||||
void init();
|
||||
void clear();
|
||||
void hunt_and_kill(Point on={1,1});
|
||||
void place_rooms();
|
||||
void ensure_doors();
|
||||
void enclose();
|
||||
void randomize_rooms();
|
||||
void randomize_rooms(size_t room_size);
|
||||
void inner_donut(float outer_rad, float inner_rad);
|
||||
void inner_box(size_t outer_size, size_t inner_size);
|
||||
void divide(Point start, Point end);
|
||||
void remove_dead_ends();
|
||||
void dump(const std::string& msg);
|
||||
void perimeter(size_t x, size_t y, size_t width, size_t height, std::function<void(size_t x, size_t y)> cb);
|
||||
void open_box(size_t outer_size, size_t inner_size);
|
||||
void open_box(size_t outer_size);
|
||||
void add_dead_end(Point at);
|
||||
bool room_should_exist(Room& room);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue