fix: bucles cap a ranges algorithms (38 troballes)

This commit is contained in:
2026-05-14 21:36:21 +02:00
parent 0aa9f8fe0a
commit b4d3776239
14 changed files with 110 additions and 169 deletions

View File

@@ -108,32 +108,23 @@ auto CollisionMap::getSlopeHeight(SDL_FPoint p, Tile slope) -> int {
// Comprueba las colisiones con paredes derechas
auto CollisionMap::checkRightSurfaces(const SDL_FRect& rect) -> int { // NOLINT(readability-convert-member-functions-to-static)
for (const auto& s : right_walls_) {
if (checkCollision(s, rect)) {
return s.x;
}
}
return Collision::NONE;
auto it = std::ranges::find_if(right_walls_,
[&rect](const auto& s) { return checkCollision(s, rect); });
return (it != right_walls_.end()) ? it->x : Collision::NONE;
}
// Comprueba las colisiones con paredes izquierdas
auto CollisionMap::checkLeftSurfaces(const SDL_FRect& rect) -> int { // NOLINT(readability-convert-member-functions-to-static)
for (const auto& s : left_walls_) {
if (checkCollision(s, rect)) {
return s.x;
}
}
return Collision::NONE;
auto it = std::ranges::find_if(left_walls_,
[&rect](const auto& s) { return checkCollision(s, rect); });
return (it != left_walls_.end()) ? it->x : Collision::NONE;
}
// Comprueba las colisiones con techos
auto CollisionMap::checkTopSurfaces(const SDL_FRect& rect) -> int { // NOLINT(readability-convert-member-functions-to-static)
for (const auto& s : top_floors_) {
if (checkCollision(s, rect)) {
return s.y;
}
}
return Collision::NONE;
auto it = std::ranges::find_if(top_floors_,
[&rect](const auto& s) { return checkCollision(s, rect); });
return (it != top_floors_.end()) ? it->y : Collision::NONE;
}
// Comprueba las colisiones punto con techos
@@ -145,22 +136,16 @@ auto CollisionMap::checkTopSurfaces(const SDL_FPoint& p) -> bool {
// Comprueba las colisiones con suelos
auto CollisionMap::checkBottomSurfaces(const SDL_FRect& rect) -> int { // NOLINT(readability-convert-member-functions-to-static)
for (const auto& s : bottom_floors_) {
if (checkCollision(s, rect)) {
return s.y;
}
}
return Collision::NONE;
auto it = std::ranges::find_if(bottom_floors_,
[&rect](const auto& s) { return checkCollision(s, rect); });
return (it != bottom_floors_.end()) ? it->y : Collision::NONE;
}
// Comprueba las colisiones con conveyor belts
auto CollisionMap::checkAutoSurfaces(const SDL_FRect& rect) -> int { // NOLINT(readability-convert-member-functions-to-static)
for (const auto& s : conveyor_belt_floors_) {
if (checkCollision(s, rect)) {
return s.y;
}
}
return Collision::NONE;
auto it = std::ranges::find_if(conveyor_belt_floors_,
[&rect](const auto& s) { return checkCollision(s, rect); });
return (it != conveyor_belt_floors_.end()) ? it->y : Collision::NONE;
}
// Comprueba las colisiones punto con conveyor belts
@@ -208,18 +193,16 @@ auto CollisionMap::checkRightSlopes(const SDL_FPoint& p) -> bool {
// Obtiene puntero a slope en un punto (prioriza left_slopes_ sobre right_slopes_)
auto CollisionMap::getSlopeAtPoint(const SDL_FPoint& p) const -> const LineDiagonal* { // NOLINT(readability-convert-member-functions-to-static)
// Primero busca en rampas izquierdas
for (const auto& slope : left_slopes_) {
if (checkCollision(p, slope)) {
return &slope;
}
auto pred = [&p](const auto& slope) { return static_cast<bool>(checkCollision(p, slope)); };
auto left_it = std::ranges::find_if(left_slopes_, pred);
if (left_it != left_slopes_.end()) {
return &(*left_it);
}
// Luego busca en rampas derechas
for (const auto& slope : right_slopes_) {
if (checkCollision(p, slope)) {
return &slope;
}
auto right_it = std::ranges::find_if(right_slopes_, pred);
if (right_it != right_slopes_.end()) {
return &(*right_it);
}
// No hay colisión con ninguna slope