// polygon_renderer.cpp - Implementació de renderitzat de polígons // © 1999 Visente i Sergi (versió Pascal) // © 2025 Port a C++20 amb SDL3 // // ============================================================================== // DEPRECATED: Use core/rendering/shape_renderer.cpp instead // ============================================================================== #include "core/rendering/polygon_renderer.hpp" #include #include #include "core/defaults.hpp" #include "core/rendering/line_renderer.hpp" namespace Rendering { void rota_tri(SDL_Renderer* renderer, const Triangle& tri, float angul, float velocitat, bool dibuixar) { // Rotar i dibuixar triangle (nau) // Conversió de coordenades polars a cartesianes amb rotació // Basat en el codi Pascal original: lines 271-284 // Convertir cada punt polar a cartesià // x = (r + velocitat) * cos(angle_punt + angle_nau) + centre.x // y = (r + velocitat) * sin(angle_punt + angle_nau) + centre.y int x1 = static_cast(std::round((tri.p1.r + velocitat) * std::cos(tri.p1.angle + angul))) + tri.centre.x; int y1 = static_cast(std::round((tri.p1.r + velocitat) * std::sin(tri.p1.angle + angul))) + tri.centre.y; int x2 = static_cast(std::round((tri.p2.r + velocitat) * std::cos(tri.p2.angle + angul))) + tri.centre.x; int y2 = static_cast(std::round((tri.p2.r + velocitat) * std::sin(tri.p2.angle + angul))) + tri.centre.y; int x3 = static_cast(std::round((tri.p3.r + velocitat) * std::cos(tri.p3.angle + angul))) + tri.centre.x; int y3 = static_cast(std::round((tri.p3.r + velocitat) * std::sin(tri.p3.angle + angul))) + tri.centre.y; // Dibuixar les 3 línies que formen el triangle linea(renderer, x1, y1, x2, y2, dibuixar); linea(renderer, x1, y1, x3, y3, dibuixar); linea(renderer, x3, y3, x2, y2, dibuixar); } void rota_pol(SDL_Renderer* renderer, const Poligon& pol, float angul, bool dibuixar) { // Rotar i dibuixar polígon (enemics i bales) // Conversió de coordenades polars a cartesianes amb rotació // Basat en el codi Pascal original: lines 286-296 // Array temporal per emmagatzemar punts convertits a cartesianes std::array xy; // Convertir cada punt polar a cartesià for (uint8_t i = 0; i < pol.n; i++) { xy[i].x = static_cast(std::round( pol.ipuntx[i].r * std::cos(pol.ipuntx[i].angle + angul))) + pol.centre.x; xy[i].y = static_cast(std::round( pol.ipuntx[i].r * std::sin(pol.ipuntx[i].angle + angul))) + pol.centre.y; } // Dibuixar línies entre punts consecutius for (uint8_t i = 0; i < pol.n - 1; i++) { linea(renderer, xy[i].x, xy[i].y, xy[i + 1].x, xy[i + 1].y, dibuixar); } // Tancar el polígon (últim punt → primer punt) linea(renderer, xy[pol.n - 1].x, xy[pol.n - 1].y, xy[0].x, xy[0].y, dibuixar); } } // namespace Rendering