in procgen/src/roomgen.cpp [38:69]
void RoomGenerator::build_room(int idx, std::set<int> &room) {
std::queue<int> curr;
if (game->get_obj(idx) != SPACE)
return;
curr.push(idx);
while (curr.size() > 0) {
int curr_idx = curr.front();
curr.pop();
if (game->get_obj(curr_idx) != SPACE)
continue;
int x, y;
game->to_grid_xy(curr_idx, &x, &y);
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if ((i == 0 || j == 0) && (i + j != 0)) {
int next_idx = game->to_grid_idx(x + i, y + j);
if (!set_contains(room, next_idx) && game->get_obj(next_idx) == SPACE) {
curr.push(next_idx);
room.insert(next_idx);
}
}
}
}
}
}