void RoomGenerator::build_room()

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);
                    }
                }
            }
        }
    }
}