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