diff --git a/.clang-tidy b/.clang-tidy index d75b495..e7fd100 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -19,7 +19,9 @@ Checks: - modernize-* - -modernize-use-trailing-return-type # Excluido (estilo controversial) - -modernize-avoid-c-arrays # Excluido (arrays C son OK en algunos contextos) -# - performance-* + # ✅ Check 9: performance-* (91 fixes aplicados) + - performance-* + - -performance-enum-size # Excluido (tamaño de enum no crítico) # - bugprone-unchecked-optional-access # - bugprone-sizeof-expression # - bugprone-suspicious-missing-comma diff --git a/source/core/graphics/shape.cpp b/source/core/graphics/shape.cpp index fc38a7f..dc218bb 100644 --- a/source/core/graphics/shape.cpp +++ b/source/core/graphics/shape.cpp @@ -21,7 +21,7 @@ bool Shape::carregar(const std::string& filepath) { // Llegir fitxer std::ifstream file(filepath); if (!file.is_open()) { - std::cerr << "[Shape] Error: no es pot obrir " << filepath << std::endl; + std::cerr << "[Shape] Error: no es pot obrir " << filepath << '\n'; return false; } @@ -55,7 +55,7 @@ bool Shape::parsejar_fitxer(const std::string& contingut) { try { escala_defecte_ = std::stof(extract_value(line)); } catch (...) { - std::cerr << "[Shape] Warning: escala invàlida, usant 1.0" << std::endl; + std::cerr << "[Shape] Warning: escala invàlida, usant 1.0" << '\n'; escala_defecte_ = 1.0F; } } else if (starts_with(line, "center:")) { @@ -66,7 +66,7 @@ bool Shape::parsejar_fitxer(const std::string& contingut) { primitives_.push_back({PrimitiveType::POLYLINE, points}); } else { std::cerr << "[Shape] Warning: polyline amb menys de 2 punts ignorada" - << std::endl; + << '\n'; } } else if (starts_with(line, "line:")) { auto points = parse_points(extract_value(line)); @@ -74,14 +74,14 @@ bool Shape::parsejar_fitxer(const std::string& contingut) { primitives_.push_back({PrimitiveType::LINE, points}); } else { std::cerr << "[Shape] Warning: line ha de tenir exactament 2 punts" - << std::endl; + << '\n'; } } // Comandes desconegudes ignorades silenciosament } if (primitives_.empty()) { - std::cerr << "[Shape] Error: cap primitiva carregada" << std::endl; + std::cerr << "[Shape] Error: cap primitiva carregada" << '\n'; return false; } @@ -127,7 +127,7 @@ void Shape::parse_center(const std::string& value) { centre_.x = std::stof(trim(val.substr(0, comma))); centre_.y = std::stof(trim(val.substr(comma + 1))); } catch (...) { - std::cerr << "[Shape] Warning: centre invàlid, usant (0,0)" << std::endl; + std::cerr << "[Shape] Warning: centre invàlid, usant (0,0)" << '\n'; centre_ = {.x = 0.0F, .y = 0.0F}; } } @@ -148,7 +148,7 @@ std::vector Shape::parse_points(const std::string& str) const { points.push_back({x, y}); } catch (...) { std::cerr << "[Shape] Warning: punt invàlid ignorat: " << pair - << std::endl; + << '\n'; } } } diff --git a/source/core/graphics/shape_loader.cpp b/source/core/graphics/shape_loader.cpp index e9f2623..99a7f5d 100644 --- a/source/core/graphics/shape_loader.cpp +++ b/source/core/graphics/shape_loader.cpp @@ -17,7 +17,7 @@ std::shared_ptr ShapeLoader::load(const std::string& filename) { // Check cache first auto it = cache_.find(filename); if (it != cache_.end()) { - std::cout << "[ShapeLoader] Cache hit: " << filename << std::endl; + std::cout << "[ShapeLoader] Cache hit: " << filename << '\n'; return it->second; // Cache hit } @@ -33,7 +33,7 @@ std::shared_ptr ShapeLoader::load(const std::string& filename) { std::vector data = Resource::Helper::loadFile(normalized); if (data.empty()) { std::cerr << "[ShapeLoader] Error: no s'ha pogut carregar " << normalized - << std::endl; + << '\n'; return nullptr; } @@ -42,19 +42,19 @@ std::shared_ptr ShapeLoader::load(const std::string& filename) { auto shape = std::make_shared(); if (!shape->parsejar_fitxer(file_content)) { std::cerr << "[ShapeLoader] Error: no s'ha pogut parsejar " << normalized - << std::endl; + << '\n'; return nullptr; } // Verify shape is valid if (!shape->es_valida()) { - std::cerr << "[ShapeLoader] Error: forma invàlida " << normalized << std::endl; + std::cerr << "[ShapeLoader] Error: forma invàlida " << normalized << '\n'; return nullptr; } // Cache and return std::cout << "[ShapeLoader] Carregat: " << normalized << " (" << shape->get_nom() - << ", " << shape->get_num_primitives() << " primitives)" << std::endl; + << ", " << shape->get_num_primitives() << " primitives)" << '\n'; cache_[filename] = shape; return shape; @@ -62,7 +62,7 @@ std::shared_ptr ShapeLoader::load(const std::string& filename) { void ShapeLoader::clear_cache() { std::cout << "[ShapeLoader] Netejant caché (" << cache_.size() << " formes)" - << std::endl; + << '\n'; cache_.clear(); } diff --git a/source/core/graphics/starfield.cpp b/source/core/graphics/starfield.cpp index b83f27d..945171f 100644 --- a/source/core/graphics/starfield.cpp +++ b/source/core/graphics/starfield.cpp @@ -26,7 +26,7 @@ Starfield::Starfield(SDL_Renderer* renderer, shape_estrella_ = ShapeLoader::load("star.shp"); if (!shape_estrella_ || !shape_estrella_->es_valida()) { - std::cerr << "ERROR: No s'ha pogut carregar star.shp" << std::endl; + std::cerr << "ERROR: No s'ha pogut carregar star.shp" << '\n'; return; } diff --git a/source/core/graphics/vector_text.cpp b/source/core/graphics/vector_text.cpp index fd3ebf9..9cdb0aa 100644 --- a/source/core/graphics/vector_text.cpp +++ b/source/core/graphics/vector_text.cpp @@ -29,7 +29,7 @@ void VectorText::load_charset() { chars_[c] = shape; } else { std::cerr << "[VectorText] Warning: no s'ha pogut carregar " << filename - << std::endl; + << '\n'; } } @@ -42,7 +42,7 @@ void VectorText::load_charset() { chars_[c] = shape; } else { std::cerr << "[VectorText] Warning: no s'ha pogut carregar " << filename - << std::endl; + << '\n'; } } @@ -57,7 +57,7 @@ void VectorText::load_charset() { chars_[c] = shape; } else { std::cerr << "[VectorText] Warning: no s'ha pogut carregar " << filename - << std::endl; + << '\n'; } } @@ -72,12 +72,12 @@ void VectorText::load_charset() { chars_[c] = shape; } else { std::cerr << "[VectorText] Warning: no s'ha pogut carregar " << filename - << std::endl; + << '\n'; } } std::cout << "[VectorText] Carregats " << chars_.size() << " caràcters" - << std::endl; + << '\n'; } std::string VectorText::get_shape_filename(char c) const { @@ -230,7 +230,7 @@ void VectorText::render(const std::string& text, const Punt& posicio, float esca } else { // Carácter no soportado: saltar (o renderizar '?' en el futuro) std::cerr << "[VectorText] Warning: caràcter no suportat '" << c << "'" - << std::endl; + << '\n'; current_x += char_width_scaled + spacing_scaled; } } diff --git a/source/core/input/mouse.cpp b/source/core/input/mouse.cpp index 8730d40..d47740c 100644 --- a/source/core/input/mouse.cpp +++ b/source/core/input/mouse.cpp @@ -19,12 +19,12 @@ constexpr Uint32 IGNORE_MOTION_DURATION = 1000; // Ignorar primers 1000ms void forceHide() { // Forçar ocultació sincronitzant estat SDL i estat intern std::cout << "[Mouse::forceHide] Ocultant cursor i sincronitzant estat. cursor_visible=" << cursor_visible - << " -> false" << std::endl; + << " -> false" << '\n'; SDL_HideCursor(); cursor_visible = false; last_mouse_move_time = 0; initialization_time = SDL_GetTicks(); // Marcar temps per ignorar esdeveniments inicials - std::cout << "[Mouse::forceHide] Ignorant moviments durant " << IGNORE_MOTION_DURATION << "ms" << std::endl; + std::cout << "[Mouse::forceHide] Ignorant moviments durant " << IGNORE_MOTION_DURATION << "ms" << '\n'; } void setForceHidden(bool force) { @@ -59,13 +59,13 @@ void handleEvent(const SDL_Event& event) { // Ignorar esdeveniments fantasma de SDL durant el període inicial if (initialization_time > 0 && (current_time - initialization_time < IGNORE_MOTION_DURATION)) { std::cout << "[Mouse::handleEvent] Ignorant moviment fantasma de SDL. time=" << current_time - << " (inicialització fa " << (current_time - initialization_time) << "ms)" << std::endl; + << " (inicialització fa " << (current_time - initialization_time) << "ms)" << '\n'; return; } last_mouse_move_time = current_time; if (!cursor_visible) { - std::cout << "[Mouse::handleEvent] Mostrant cursor per moviment REAL. time=" << last_mouse_move_time << std::endl; + std::cout << "[Mouse::handleEvent] Mostrant cursor per moviment REAL. time=" << last_mouse_move_time << '\n'; SDL_ShowCursor(); cursor_visible = true; } @@ -82,7 +82,7 @@ void updateCursorVisibility() { Uint32 current_time = SDL_GetTicks(); if (cursor_visible && (current_time - last_mouse_move_time > cursor_hide_time)) { std::cout << "[Mouse::updateCursorVisibility] Ocultant cursor per timeout. current=" << current_time - << " last=" << last_mouse_move_time << " diff=" << (current_time - last_mouse_move_time) << std::endl; + << " last=" << last_mouse_move_time << " diff=" << (current_time - last_mouse_move_time) << '\n'; SDL_HideCursor(); cursor_visible = false; } diff --git a/source/core/rendering/sdl_manager.cpp b/source/core/rendering/sdl_manager.cpp index 33c8a94..091405d 100644 --- a/source/core/rendering/sdl_manager.cpp +++ b/source/core/rendering/sdl_manager.cpp @@ -31,7 +31,7 @@ SDLManager::SDLManager() max_zoom_(1.0F) { // Inicialitzar SDL3 if (!SDL_Init(SDL_INIT_VIDEO)) { - std::cerr << "Error inicialitzant SDL3: " << SDL_GetError() << std::endl; + std::cerr << "Error inicialitzant SDL3: " << SDL_GetError() << '\n'; return; } @@ -48,7 +48,7 @@ SDLManager::SDLManager() ); if (finestra_ == nullptr) { - std::cerr << "Error creant finestra: " << SDL_GetError() << std::endl; + std::cerr << "Error creant finestra: " << SDL_GetError() << '\n'; SDL_Quit(); return; } @@ -60,7 +60,7 @@ SDLManager::SDLManager() renderer_ = SDL_CreateRenderer(finestra_, nullptr); if (renderer_ == nullptr) { - std::cerr << "Error creant renderer: " << SDL_GetError() << std::endl; + std::cerr << "Error creant renderer: " << SDL_GetError() << '\n'; SDL_DestroyWindow(finestra_); SDL_Quit(); return; @@ -74,7 +74,7 @@ SDLManager::SDLManager() std::cout << "SDL3 inicialitzat: " << current_width_ << "x" << current_height_ << " (logic: " << Defaults::Game::WIDTH << "x" - << Defaults::Game::HEIGHT << ")" << std::endl; + << Defaults::Game::HEIGHT << ")" << '\n'; } // Constructor amb configuració @@ -95,7 +95,7 @@ SDLManager::SDLManager(int width, int height, bool fullscreen) max_zoom_(1.0F) { // Inicialitzar SDL3 if (!SDL_Init(SDL_INIT_VIDEO)) { - std::cerr << "Error inicialitzant SDL3: " << SDL_GetError() << std::endl; + std::cerr << "Error inicialitzant SDL3: " << SDL_GetError() << '\n'; return; } @@ -115,7 +115,7 @@ SDLManager::SDLManager(int width, int height, bool fullscreen) finestra_ = SDL_CreateWindow(window_title.c_str(), current_width_, current_height_, flags); if (finestra_ == nullptr) { - std::cerr << "Error creant finestra: " << SDL_GetError() << std::endl; + std::cerr << "Error creant finestra: " << SDL_GetError() << '\n'; SDL_Quit(); return; } @@ -129,7 +129,7 @@ SDLManager::SDLManager(int width, int height, bool fullscreen) renderer_ = SDL_CreateRenderer(finestra_, nullptr); if (renderer_ == nullptr) { - std::cerr << "Error creant renderer: " << SDL_GetError() << std::endl; + std::cerr << "Error creant renderer: " << SDL_GetError() << '\n'; SDL_DestroyWindow(finestra_); SDL_Quit(); return; @@ -153,7 +153,7 @@ SDLManager::SDLManager(int width, int height, bool fullscreen) if (is_fullscreen_) { std::cout << " [FULLSCREEN]"; } - std::cout << std::endl; + std::cout << '\n'; } SDLManager::~SDLManager() { @@ -168,7 +168,7 @@ SDLManager::~SDLManager() { } SDL_Quit(); - std::cout << "SDL3 netejat correctament" << std::endl; + std::cout << "SDL3 netejat correctament" << '\n'; } void SDLManager::calculateMaxWindowSize() { @@ -181,13 +181,13 @@ void SDLManager::calculateMaxWindowSize() { max_height_ = mode->h - 100; std::cout << "Display detectat: " << mode->w << "x" << mode->h << " (max finestra: " << max_width_ << "x" << max_height_ << ")" - << std::endl; + << '\n'; } else { // Fallback conservador max_width_ = 1920; max_height_ = 1080; std::cerr << "No s'ha pogut detectar el display, usant fallback: " - << max_width_ << "x" << max_height_ << std::endl; + << max_width_ << "x" << max_height_ << '\n'; } // Calculate max zoom immediately after determining max size @@ -209,7 +209,7 @@ void SDLManager::calculateMaxZoom() { max_zoom_ = std::max(max_zoom_, Defaults::Window::MIN_ZOOM); std::cout << "Max zoom: " << max_zoom_ << "x (display: " - << max_width_ << "x" << max_height_ << ")" << std::endl; + << max_width_ << "x" << max_height_ << ")" << '\n'; } void SDLManager::applyZoom(float new_zoom) { @@ -249,7 +249,7 @@ void SDLManager::applyZoom(float new_zoom) { Options::window.zoom_factor = zoom_factor_; std::cout << "Zoom: " << zoom_factor_ << "x (" - << new_width << "x" << new_height << ")" << std::endl; + << new_width << "x" << new_height << ")" << '\n'; } void SDLManager::updateLogicalPresentation() { @@ -279,7 +279,7 @@ void SDLManager::updateViewport() { std::cout << "Viewport: " << scaled_width << "x" << scaled_height << " @ (" << offset_x << "," << offset_y << ") [scale=" << scale << "]" - << std::endl; + << '\n'; } void SDLManager::updateRenderingContext() const { @@ -295,7 +295,7 @@ void SDLManager::increaseWindowSize() { float new_zoom = zoom_factor_ + Defaults::Window::ZOOM_INCREMENT; applyZoom(new_zoom); - std::cout << "F2: Zoom aumentat a " << zoom_factor_ << "x" << std::endl; + std::cout << "F2: Zoom aumentat a " << zoom_factor_ << "x" << '\n'; } void SDLManager::decreaseWindowSize() { @@ -306,7 +306,7 @@ void SDLManager::decreaseWindowSize() { float new_zoom = zoom_factor_ - Defaults::Window::ZOOM_INCREMENT; applyZoom(new_zoom); - std::cout << "F1: Zoom reduït a " << zoom_factor_ << "x" << std::endl; + std::cout << "F1: Zoom reduït a " << zoom_factor_ << "x" << '\n'; } void SDLManager::applyWindowSize(int new_width, int new_height) { @@ -352,7 +352,7 @@ void SDLManager::toggleFullscreen() { SDL_SetWindowFullscreen(finestra_, true); std::cout << "F3: Fullscreen activat (guardada: " - << windowed_width_ << "x" << windowed_height_ << ")" << std::endl; + << windowed_width_ << "x" << windowed_height_ << ")" << '\n'; } else { // EXITING FULLSCREEN is_fullscreen_ = false; @@ -362,7 +362,7 @@ void SDLManager::toggleFullscreen() { applyWindowSize(windowed_width_, windowed_height_); std::cout << "F3: Fullscreen desactivat (restaurada: " - << windowed_width_ << "x" << windowed_height_ << ")" << std::endl; + << windowed_width_ << "x" << windowed_height_ << ")" << '\n'; } Options::window.fullscreen = is_fullscreen_; @@ -392,7 +392,7 @@ bool SDLManager::handleWindowEvent(const SDL_Event& event) { std::cout << "Finestra redimensionada: " << current_width_ << "x" << current_height_ << " (zoom ≈" << zoom_factor_ << "x)" - << std::endl; + << '\n'; return true; } return false; diff --git a/source/core/system/global_events.cpp b/source/core/system/global_events.cpp index 9c340c7..0024ec2 100644 --- a/source/core/system/global_events.cpp +++ b/source/core/system/global_events.cpp @@ -20,7 +20,7 @@ bool handle(const SDL_Event& event, SDLManager& sdl, ContextEscenes& context) { // 1. Permitir que Input procese el evento (para hotplug de gamepads) auto event_msg = Input::get()->handleEvent(event); if (!event_msg.empty()) { - std::cout << "[Input] " << event_msg << std::endl; + std::cout << "[Input] " << event_msg << '\n'; } // 2. Procesar SDL_EVENT_QUIT directamente (no es input de juego) diff --git a/source/game/entities/bala.cpp b/source/game/entities/bala.cpp index 13758a4..03ce6e5 100644 --- a/source/game/entities/bala.cpp +++ b/source/game/entities/bala.cpp @@ -26,7 +26,7 @@ Bala::Bala(SDL_Renderer* renderer) forma_ = Graphics::ShapeLoader::load("bullet.shp"); if (!forma_ || !forma_->es_valida()) { - std::cerr << "[Bala] Error: no s'ha pogut carregar bullet.shp" << std::endl; + std::cerr << "[Bala] Error: no s'ha pogut carregar bullet.shp" << '\n'; } } diff --git a/source/game/entities/enemic.cpp b/source/game/entities/enemic.cpp index d59ef65..b15bd35 100644 --- a/source/game/entities/enemic.cpp +++ b/source/game/entities/enemic.cpp @@ -68,7 +68,7 @@ void Enemic::inicialitzar(TipusEnemic tipus, const Punt* ship_pos) { // Carregar forma forma_ = Graphics::ShapeLoader::load(shape_file); if (!forma_ || !forma_->es_valida()) { - std::cerr << "[Enemic] Error: no s'ha pogut carregar " << shape_file << std::endl; + std::cerr << "[Enemic] Error: no s'ha pogut carregar " << shape_file << '\n'; } // [MODIFIED] Posició aleatòria amb comprovació de seguretat @@ -106,7 +106,7 @@ void Enemic::inicialitzar(TipusEnemic tipus, const Punt* ship_pos) { centre_.y = static_cast((std::rand() % range_y) + static_cast(min_y)); std::cout << "[Enemic] Advertència: spawn sense zona segura després de " - << Defaults::Enemies::Spawn::MAX_SPAWN_ATTEMPTS << " intents" << std::endl; + << Defaults::Enemies::Spawn::MAX_SPAWN_ATTEMPTS << " intents" << '\n'; } } else { // [EXISTING] No ship position: spawn anywhere (backward compatibility) diff --git a/source/game/entities/nau.cpp b/source/game/entities/nau.cpp index b3577ff..2472e8c 100644 --- a/source/game/entities/nau.cpp +++ b/source/game/entities/nau.cpp @@ -28,7 +28,7 @@ Nau::Nau(SDL_Renderer* renderer, const char* shape_file) forma_ = Graphics::ShapeLoader::load(shape_file); if (!forma_ || !forma_->es_valida()) { - std::cerr << "[Nau] Error: no s'ha pogut carregar " << shape_file << std::endl; + std::cerr << "[Nau] Error: no s'ha pogut carregar " << shape_file << '\n'; } } diff --git a/source/game/escenes/escena_joc.cpp b/source/game/escenes/escena_joc.cpp index 5729c50..0166cbf 100644 --- a/source/game/escenes/escena_joc.cpp +++ b/source/game/escenes/escena_joc.cpp @@ -40,7 +40,7 @@ EscenaJoc::EscenaJoc(SDLManager& sdl, ContextEscenes& context) << (config_partida_.jugador1_actiu ? "ACTIU" : "INACTIU") << ", P2: " << (config_partida_.jugador2_actiu ? "ACTIU" : "INACTIU") - << std::endl; + << '\n'; // Consumir opcions (preparació per MODE_DEMO futur) auto opcio = context_.consumir_opcio(); @@ -133,7 +133,7 @@ void EscenaJoc::inicialitzar() { if (!stage_config_) { stage_config_ = StageSystem::StageLoader::carregar("data/stages/stages.yaml"); if (!stage_config_) { - std::cerr << "[EscenaJoc] Error: no s'ha pogut carregar stages.yaml" << std::endl; + std::cerr << "[EscenaJoc] Error: no s'ha pogut carregar stages.yaml" << '\n'; // Continue without stage system (will crash, but helps debugging) } } @@ -414,7 +414,7 @@ void EscenaJoc::actualitzar(float delta_time) { // [DEBUG] Log entrada a LEVEL_START static bool first_entry = true; if (first_entry) { - std::cout << "[LEVEL_START] ENTERED with P1 pos.y=" << naus_[0].get_centre().y << std::endl; + std::cout << "[LEVEL_START] ENTERED with P1 pos.y=" << naus_[0].get_centre().y << '\n'; first_entry = false; } @@ -1442,5 +1442,5 @@ void EscenaJoc::unir_jugador(uint8_t player_id) { // No visual message, just spawn (per user requirement) - std::cout << "[EscenaJoc] Jugador " << (int)(player_id + 1) << " s'ha unit a la partida!" << std::endl; + std::cout << "[EscenaJoc] Jugador " << (int)(player_id + 1) << " s'ha unit a la partida!" << '\n'; } diff --git a/source/game/escenes/escena_logo.cpp b/source/game/escenes/escena_logo.cpp index 5d24fdc..30f7b7f 100644 --- a/source/game/escenes/escena_logo.cpp +++ b/source/game/escenes/escena_logo.cpp @@ -144,7 +144,7 @@ void EscenaLogo::inicialitzar_lletres() { for (const auto& fitxer : fitxers) { auto forma = ShapeLoader::load(fitxer); if (!forma || !forma->es_valida()) { - std::cerr << "[EscenaLogo] Error carregant " << fitxer << std::endl; + std::cerr << "[EscenaLogo] Error carregant " << fitxer << '\n'; continue; } diff --git a/source/game/escenes/escena_titol.cpp b/source/game/escenes/escena_titol.cpp index f32de63..2e7d123 100644 --- a/source/game/escenes/escena_titol.cpp +++ b/source/game/escenes/escena_titol.cpp @@ -120,7 +120,7 @@ void EscenaTitol::inicialitzar_titol() { for (const auto& fitxer : fitxers_orni) { auto forma = ShapeLoader::load(fitxer); if (!forma || !forma->es_valida()) { - std::cerr << "[EscenaTitol] Error carregant " << fitxer << std::endl; + std::cerr << "[EscenaTitol] Error carregant " << fitxer << '\n'; continue; } @@ -194,7 +194,7 @@ void EscenaTitol::inicialitzar_titol() { for (const auto& fitxer : fitxers_attack) { auto forma = ShapeLoader::load(fitxer); if (!forma || !forma->es_valida()) { - std::cerr << "[EscenaTitol] Error carregant " << fitxer << std::endl; + std::cerr << "[EscenaTitol] Error carregant " << fitxer << '\n'; continue; } @@ -487,7 +487,7 @@ void EscenaTitol::actualitzar(float delta_time) { << (config_partida_.jugador1_actiu ? "ACTIU" : "INACTIU") << ", P2: " << (config_partida_.jugador2_actiu ? "ACTIU" : "INACTIU") - << std::endl; + << '\n'; context_.canviar_escena(Escena::JOC); estat_actual_ = EstatTitol::PLAYER_JOIN_PHASE; diff --git a/source/game/stage_system/spawn_controller.cpp b/source/game/stage_system/spawn_controller.cpp index 40749ce..36dd745 100644 --- a/source/game/stage_system/spawn_controller.cpp +++ b/source/game/stage_system/spawn_controller.cpp @@ -21,7 +21,7 @@ void SpawnController::configurar(const ConfigStage* config) { void SpawnController::iniciar() { if (config_ == nullptr) { - std::cerr << "[SpawnController] Error: config_ és null" << std::endl; + std::cerr << "[SpawnController] Error: config_ és null" << '\n'; return; } @@ -29,7 +29,7 @@ void SpawnController::iniciar() { generar_spawn_events(); std::cout << "[SpawnController] Stage " << static_cast(config_->stage_id) - << ": generats " << spawn_queue_.size() << " spawn events" << std::endl; + << ": generats " << spawn_queue_.size() << " spawn events" << '\n'; } void SpawnController::reset() { diff --git a/source/game/stage_system/stage_loader.cpp b/source/game/stage_system/stage_loader.cpp index d2411cf..19a25a0 100644 --- a/source/game/stage_system/stage_loader.cpp +++ b/source/game/stage_system/stage_loader.cpp @@ -23,7 +23,7 @@ std::unique_ptr StageLoader::carregar(const std::string& pa // Load from resource system std::vector data = Resource::Helper::loadFile(normalized); if (data.empty()) { - std::cerr << "[StageLoader] Error: no es pot carregar " << normalized << std::endl; + std::cerr << "[StageLoader] Error: no es pot carregar " << normalized << '\n'; return nullptr; } @@ -37,7 +37,7 @@ std::unique_ptr StageLoader::carregar(const std::string& pa // Parse metadata if (!yaml.contains("metadata")) { - std::cerr << "[StageLoader] Error: falta camp 'metadata'" << std::endl; + std::cerr << "[StageLoader] Error: falta camp 'metadata'" << '\n'; return nullptr; } if (!parse_metadata(yaml["metadata"], config->metadata)) { @@ -46,12 +46,12 @@ std::unique_ptr StageLoader::carregar(const std::string& pa // Parse stages if (!yaml.contains("stages")) { - std::cerr << "[StageLoader] Error: falta camp 'stages'" << std::endl; + std::cerr << "[StageLoader] Error: falta camp 'stages'" << '\n'; return nullptr; } if (!yaml["stages"].is_sequence()) { - std::cerr << "[StageLoader] Error: 'stages' ha de ser una llista" << std::endl; + std::cerr << "[StageLoader] Error: 'stages' ha de ser una llista" << '\n'; return nullptr; } @@ -69,11 +69,11 @@ std::unique_ptr StageLoader::carregar(const std::string& pa } std::cout << "[StageLoader] Carregats " << config->stages.size() - << " stages correctament" << std::endl; + << " stages correctament" << '\n'; return config; } catch (const std::exception& e) { - std::cerr << "[StageLoader] Excepció: " << e.what() << std::endl; + std::cerr << "[StageLoader] Excepció: " << e.what() << '\n'; return nullptr; } } @@ -81,7 +81,7 @@ std::unique_ptr StageLoader::carregar(const std::string& pa bool StageLoader::parse_metadata(const fkyaml::node& yaml, MetadataStages& meta) { try { if (!yaml.contains("version") || !yaml.contains("total_stages")) { - std::cerr << "[StageLoader] Error: metadata incompleta" << std::endl; + std::cerr << "[StageLoader] Error: metadata incompleta" << '\n'; return false; } @@ -93,7 +93,7 @@ bool StageLoader::parse_metadata(const fkyaml::node& yaml, MetadataStages& meta) return true; } catch (const std::exception& e) { - std::cerr << "[StageLoader] Error parsing metadata: " << e.what() << std::endl; + std::cerr << "[StageLoader] Error parsing metadata: " << e.what() << '\n'; return false; } } @@ -103,7 +103,7 @@ bool StageLoader::parse_stage(const fkyaml::node& yaml, ConfigStage& stage) { if (!yaml.contains("stage_id") || !yaml.contains("total_enemies") || !yaml.contains("spawn_config") || !yaml.contains("enemy_distribution") || !yaml.contains("difficulty_multipliers")) { - std::cerr << "[StageLoader] Error: stage incompleta" << std::endl; + std::cerr << "[StageLoader] Error: stage incompleta" << '\n'; return false; } @@ -122,13 +122,13 @@ bool StageLoader::parse_stage(const fkyaml::node& yaml, ConfigStage& stage) { if (!stage.es_valid()) { std::cerr << "[StageLoader] Error: stage " << static_cast(stage.stage_id) - << " no és vàlid" << std::endl; + << " no és vàlid" << '\n'; return false; } return true; } catch (const std::exception& e) { - std::cerr << "[StageLoader] Error parsing stage: " << e.what() << std::endl; + std::cerr << "[StageLoader] Error parsing stage: " << e.what() << '\n'; return false; } } @@ -137,7 +137,7 @@ bool StageLoader::parse_spawn_config(const fkyaml::node& yaml, ConfigSpawn& conf try { if (!yaml.contains("mode") || !yaml.contains("initial_delay") || !yaml.contains("spawn_interval")) { - std::cerr << "[StageLoader] Error: spawn_config incompleta" << std::endl; + std::cerr << "[StageLoader] Error: spawn_config incompleta" << '\n'; return false; } @@ -148,7 +148,7 @@ bool StageLoader::parse_spawn_config(const fkyaml::node& yaml, ConfigSpawn& conf return true; } catch (const std::exception& e) { - std::cerr << "[StageLoader] Error parsing spawn_config: " << e.what() << std::endl; + std::cerr << "[StageLoader] Error parsing spawn_config: " << e.what() << '\n'; return false; } } @@ -157,7 +157,7 @@ bool StageLoader::parse_distribution(const fkyaml::node& yaml, DistribucioEnemic try { if (!yaml.contains("pentagon") || !yaml.contains("quadrat") || !yaml.contains("molinillo")) { - std::cerr << "[StageLoader] Error: enemy_distribution incompleta" << std::endl; + std::cerr << "[StageLoader] Error: enemy_distribution incompleta" << '\n'; return false; } @@ -168,13 +168,13 @@ bool StageLoader::parse_distribution(const fkyaml::node& yaml, DistribucioEnemic // Validar que suma 100 int sum = dist.pentagon + dist.quadrat + dist.molinillo; if (sum != 100) { - std::cerr << "[StageLoader] Error: distribució no suma 100 (suma=" << sum << ")" << std::endl; + std::cerr << "[StageLoader] Error: distribució no suma 100 (suma=" << sum << ")" << '\n'; return false; } return true; } catch (const std::exception& e) { - std::cerr << "[StageLoader] Error parsing distribution: " << e.what() << std::endl; + std::cerr << "[StageLoader] Error parsing distribution: " << e.what() << '\n'; return false; } } @@ -183,7 +183,7 @@ bool StageLoader::parse_multipliers(const fkyaml::node& yaml, MultiplicadorsDifi try { if (!yaml.contains("speed_multiplier") || !yaml.contains("rotation_multiplier") || !yaml.contains("tracking_strength")) { - std::cerr << "[StageLoader] Error: difficulty_multipliers incompleta" << std::endl; + std::cerr << "[StageLoader] Error: difficulty_multipliers incompleta" << '\n'; return false; } @@ -193,18 +193,18 @@ bool StageLoader::parse_multipliers(const fkyaml::node& yaml, MultiplicadorsDifi // Validar rangs raonables if (mult.velocitat < 0.1F || mult.velocitat > 5.0F) { - std::cerr << "[StageLoader] Warning: speed_multiplier fora de rang (0.1-5.0)" << std::endl; + std::cerr << "[StageLoader] Warning: speed_multiplier fora de rang (0.1-5.0)" << '\n'; } if (mult.rotacio < 0.1F || mult.rotacio > 5.0F) { - std::cerr << "[StageLoader] Warning: rotation_multiplier fora de rang (0.1-5.0)" << std::endl; + std::cerr << "[StageLoader] Warning: rotation_multiplier fora de rang (0.1-5.0)" << '\n'; } if (mult.tracking_strength < 0.0F || mult.tracking_strength > 2.0F) { - std::cerr << "[StageLoader] Warning: tracking_strength fora de rang (0.0-2.0)" << std::endl; + std::cerr << "[StageLoader] Warning: tracking_strength fora de rang (0.0-2.0)" << '\n'; } return true; } catch (const std::exception& e) { - std::cerr << "[StageLoader] Error parsing multipliers: " << e.what() << std::endl; + std::cerr << "[StageLoader] Error parsing multipliers: " << e.what() << '\n'; return false; } } @@ -220,20 +220,20 @@ ModeSpawn StageLoader::parse_spawn_mode(const std::string& mode_str) { return ModeSpawn::WAVE; } std::cerr << "[StageLoader] Warning: mode de spawn desconegut '" << mode_str - << "', usant PROGRESSIVE" << std::endl; + << "', usant PROGRESSIVE" << '\n'; return ModeSpawn::PROGRESSIVE; } bool StageLoader::validar_config(const ConfigSistemaStages& config) { if (config.stages.empty()) { - std::cerr << "[StageLoader] Error: cap stage carregat" << std::endl; + std::cerr << "[StageLoader] Error: cap stage carregat" << '\n'; return false; } if (config.stages.size() != config.metadata.total_stages) { std::cerr << "[StageLoader] Warning: nombre de stages (" << config.stages.size() << ") no coincideix amb metadata.total_stages (" - << static_cast(config.metadata.total_stages) << ")" << std::endl; + << static_cast(config.metadata.total_stages) << ")" << '\n'; } // Validar stage_id consecutius @@ -241,7 +241,7 @@ bool StageLoader::validar_config(const ConfigSistemaStages& config) { if (config.stages[i].stage_id != i + 1) { std::cerr << "[StageLoader] Error: stage_id no consecutius (esperat " << i + 1 << ", trobat " << static_cast(config.stages[i].stage_id) - << ")" << std::endl; + << ")" << '\n'; return false; } } diff --git a/source/game/stage_system/stage_manager.cpp b/source/game/stage_system/stage_manager.cpp index 60e5b3e..6bec169 100644 --- a/source/game/stage_system/stage_manager.cpp +++ b/source/game/stage_system/stage_manager.cpp @@ -16,7 +16,7 @@ StageManager::StageManager(const ConfigSistemaStages* config) stage_actual_(1), timer_transicio_(0.0F) { if (config_ == nullptr) { - std::cerr << "[StageManager] Error: config és null" << std::endl; + std::cerr << "[StageManager] Error: config és null" << '\n'; } } @@ -26,7 +26,7 @@ void StageManager::inicialitzar() { canviar_estat(EstatStage::INIT_HUD); std::cout << "[StageManager] Inicialitzat a stage " << static_cast(stage_actual_) - << std::endl; + << '\n'; } void StageManager::actualitzar(float delta_time, bool pausar_spawn) { @@ -51,7 +51,7 @@ void StageManager::actualitzar(float delta_time, bool pausar_spawn) { void StageManager::stage_completat() { std::cout << "[StageManager] Stage " << static_cast(stage_actual_) << " completat!" - << std::endl; + << '\n'; canviar_estat(EstatStage::LEVEL_COMPLETED); } @@ -104,7 +104,7 @@ void StageManager::canviar_estat(EstatStage nou_estat) { std::cout << "LEVEL_COMPLETED"; break; } - std::cout << std::endl; + std::cout << '\n'; } void StageManager::processar_init_hud(float delta_time) { @@ -142,7 +142,7 @@ void StageManager::processar_level_completed(float delta_time) { if (stage_actual_ > config_->metadata.total_stages) { stage_actual_ = 1; std::cout << "[StageManager] Totes les stages completades! Tornant a stage 1" - << std::endl; + << '\n'; } // Load next stage @@ -155,7 +155,7 @@ void StageManager::carregar_stage(uint8_t stage_id) { const ConfigStage* stage_config = config_->obte_stage(stage_id); if (stage_config == nullptr) { std::cerr << "[StageManager] Error: no es pot trobar stage " << static_cast(stage_id) - << std::endl; + << '\n'; return; } @@ -164,7 +164,7 @@ void StageManager::carregar_stage(uint8_t stage_id) { spawn_controller_.iniciar(); std::cout << "[StageManager] Carregat stage " << static_cast(stage_id) << ": " - << static_cast(stage_config->total_enemics) << " enemics" << std::endl; + << static_cast(stage_config->total_enemics) << " enemics" << '\n'; } } // namespace StageSystem