From a929346463c34e539e1a98f395fb82621eec4f13 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 17 Oct 2025 09:34:20 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20SHAPE=20mode=20-=20regenerar=20figuras?= =?UTF-8?q?=20al=20cambiar=20tama=C3=B1o=20con=20F4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Al entrar o salir del modo fullscreen real (F4), el área de juego cambia de tamaño. Si estábamos en modo SHAPE, las bolas aparecían centradas pero sin formar la figura. PROBLEMA RAÍZ: - changeScenario() recrea las bolas en nuevas posiciones - NO se regeneraban los targets de la figura (puntos 3D) - NO se reactivaba la atracción física hacia los targets - Resultado: bolas centradas sin formar figura SOLUCIÓN: Después de changeScenario() en ambas transiciones de F4: 1. Llamar a generateShape() (Engine, no ShapeManager) 2. Reactivar enableShapeAttraction(true) en todas las bolas Esto sigue el mismo patrón usado en Engine::changeScenario() (línea 515). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- source/engine.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source/engine.cpp b/source/engine.cpp index ec49cfa..66855fa 100644 --- a/source/engine.cpp +++ b/source/engine.cpp @@ -790,6 +790,17 @@ void Engine::toggleRealFullscreen() { // Actualizar tamaño de pantalla para boids (wrapping boundaries) boid_manager_->updateScreenSize(current_screen_width_, current_screen_height_); + + // Si estamos en modo SHAPE, regenerar la figura con nuevas dimensiones + if (current_mode_ == SimulationMode::SHAPE) { + generateShape(); // Regenerar figura con nuevas dimensiones de pantalla + + // Activar atracción física en las bolas nuevas (crítico tras changeScenario) + auto& balls = scene_manager_->getBallsMutable(); + for (auto& ball : balls) { + ball->enableShapeAttraction(true); + } + } } SDL_free(displays); } @@ -812,6 +823,17 @@ void Engine::toggleRealFullscreen() { // Reinicar la escena con resolución original scene_manager_->updateScreenSize(current_screen_width_, current_screen_height_); scene_manager_->changeScenario(scene_manager_->getCurrentScenario(), current_mode_); + + // Si estamos en modo SHAPE, regenerar la figura con nuevas dimensiones + if (current_mode_ == SimulationMode::SHAPE) { + generateShape(); // Regenerar figura con nuevas dimensiones de pantalla + + // Activar atracción física en las bolas nuevas (crítico tras changeScenario) + auto& balls = scene_manager_->getBallsMutable(); + for (auto& ball : balls) { + ball->enableShapeAttraction(true); + } + } } }