コード例 #1
0
ファイル: ghost.cpp プロジェクト: deipfei/MacPan
bool ghost::collides_with_map(level l){
    sf::FloatRect rect = get_collision_box();
    for (unsigned i = 0; i < l.get_collisions().size(); i++){
       // std::cout << l.get_collisions
        sf::FloatRect temp = l.get_collisions().at(i);
        if (rect.intersects(temp)){
            if (jailed && ypos >= 250 && (temp.top == 275.1f || temp.top == 300.1f) && temp.left == 225.1f){
                continue;
            }
            return true;
        }
    }
    return false;
}
コード例 #2
0
ファイル: ghost.cpp プロジェクト: deipfei/MacPan
std::vector<int> ghost::find_options(level l){
    std::vector<int> options;
    bool curr = true;
    std::vector<sf::FloatRect> levelcol = l.get_collisions();
    sf::FloatRect colcheck  = sf::FloatRect(collision_box.left, collision_box.top + 10, collision_box.width, collision_box.height);
    for (unsigned i = 0; i < levelcol.size(); i++){
        if (colcheck.intersects(levelcol.at(i))){
            curr = false;
            //break;
        }
    }

    if (curr){
        options.insert(options.end(), 1);
    }
    curr = true;

    colcheck  = sf::FloatRect(collision_box.left + 10, collision_box.top, collision_box.width, collision_box.height);
    for (unsigned i = 0; i < levelcol.size(); i++){
        if (colcheck.intersects(levelcol.at(i))){
            curr = false;
            //break;
        }
    }

    if (curr){
        options.insert(options.end(), 2);
    }
    curr = true;

    colcheck  = sf::FloatRect(collision_box.left, collision_box.top - 10, collision_box.width, collision_box.height);
    for (unsigned i = 0; i < levelcol.size(); i++){
        if (colcheck.intersects(levelcol.at(i))){
            curr = false;
            //break;
        }
    }

    if (curr){
        options.insert(options.end(), 0);
    }
    curr = true;

    colcheck  = sf::FloatRect(collision_box.left - 10, collision_box.top, collision_box.width, collision_box.height);
    for (unsigned i = 0; i < levelcol.size(); i++){
        if (colcheck.intersects(levelcol.at(i))){
            curr = false;
            //break;
        }
    }

    if (curr){
        options.insert(options.end(), 3);
    }
    curr = true;

    return options;
}
コード例 #3
0
ファイル: ghost.cpp プロジェクト: deipfei/MacPan
//search areas perpendicular to direction of travel for places to change direction
bool ghost::search_for_intersection(level l){
    //std::cout << "searching" << std::endl;
    bool opening = false;
    bool curr = true;
    std::vector<sf::FloatRect> levelcol = l.get_collisions();
    if (xvel != 0){
        sf::FloatRect colcheck (collision_box.left, collision_box.top + (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck = sf::FloatRect(collision_box.left, collision_box.top - (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        return curr;
    } else if (yvel != 0){
        sf::FloatRect colcheck (collision_box.left + (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left - (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        return curr;
    } else {
        sf::FloatRect colcheck (collision_box.left, collision_box.top + (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left + (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left - (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left, collision_box.top - (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        return curr;
    }

}