diff --git a/source/game/title/ship_animator3d.cpp b/source/game/title/ship_animator3d.cpp index 35561b8..697dc61 100644 --- a/source/game/title/ship_animator3d.cpp +++ b/source/game/title/ship_animator3d.cpp @@ -24,10 +24,11 @@ namespace Title { constexpr float SHIP_EXIT_Z = 800.0F; constexpr Vec3 VANISHING_POINT{.x = 0.0F, .y = 0.0F, .z = SHIP_EXIT_Z}; - // Distància que la nau recorre durant EXITING, sumada al forward_dir - // sobre la posició inicial de l'exit. La nau travessa el VP i continua - // allunyant-se per perspectiva fins gairebé desaparèixer per mida. - constexpr float SHIP_EXIT_TRAVEL = 2500.0F; + // Profunditat addicional darrere del VP cap a la qual les naus exiting + // convergeixen. Així P1 (X<0) i P2 (X>0) mantenen sempre els seus + // hemisferis i no es creuen al passar pel VP — totes dues acaben al + // centre projectat (640, 360) sense travessar-lo. + constexpr float SHIP_EXIT_OVERFLOW = 700.0F; // Directors VP → origen de cada nau, normalitzats. P1 ve des de "les 7" // del rellotge (baix-esquerra), P2 des de "les 5" (baix-dreta). Els @@ -283,13 +284,12 @@ namespace Title { const float PROGRESS = std::min(1.0F, ship.state_time / EXIT_DURATION); const float EASED = Easing::easeInQuad(PROGRESS); - // Destí: forward_dir prolongat des de l'inici de l'exit. La nau - // segueix la mateixa línia recta (mateix path), travessa el VP i - // continua allunyant-se fins a la mida visual ~0. + // Destí: punt fix a (VP.x, VP.y, VP.z + OVERFLOW). Cada nau s'apropa + // al centre projectat des del seu costat sense creuar el VP. const Vec3 EXIT_DEST{ - .x = ship.initial_position.x + (ship.forward_dir.x * SHIP_EXIT_TRAVEL), - .y = ship.initial_position.y + (ship.forward_dir.y * SHIP_EXIT_TRAVEL), - .z = ship.initial_position.z + (ship.forward_dir.z * SHIP_EXIT_TRAVEL), + .x = VANISHING_POINT.x, + .y = VANISHING_POINT.y, + .z = VANISHING_POINT.z + SHIP_EXIT_OVERFLOW, }; ship.current_position.x = Easing::lerp(ship.initial_position.x, EXIT_DEST.x, EASED); ship.current_position.y = Easing::lerp(ship.initial_position.y, EXIT_DEST.y, EASED);