From 4d1751760542fb2bf8a755d6a55e7d29fff81ce4 Mon Sep 17 00:00:00 2001 From: JuanPF56 Date: Tue, 5 Dec 2023 21:07:16 -0300 Subject: [PATCH] =?UTF-8?q?Fix=20en=20renderizaci=C3=B3n=20de=20vigas=20ro?= =?UTF-8?q?tadas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Las imagenes rotadas no consideraban la intersección con la cámara correctamente. Ahora utilizo la hipotenusa (el máximo que puede llegar a ocupar la imagen para cualquier ángulo) como ambas dimensiones. Esto evita tener que calcular los vértices rotados, dado que SDL no permite rotar rectángulos. --- src/client/animacion.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/client/animacion.cpp b/src/client/animacion.cpp index 856ba8f0..53f59f5c 100644 --- a/src/client/animacion.cpp +++ b/src/client/animacion.cpp @@ -21,6 +21,8 @@ void Animacion::dibujarComun(Camara& camara, int& pos_x, int& pos_y, radianes& a int coord_x = pos_x; int coord_y = pos_y; + int dimension_x = dimensiones.first; + int dimension_y = dimensiones.second; if (centro == Centro::CENTRO) { coord_x -= dimensiones.first / 2; @@ -34,9 +36,15 @@ void Animacion::dibujarComun(Camara& camara, int& pos_x, int& pos_y, radianes& a coord_x -= dimensiones.first; } + if (angulo != 0) { + // Si la imagen esta rotada utilizo la hipotenusa como dimensiones de interseccion. + // Es más fácil que calcular el máximo de los vertices de la imagen rotada. + dimension_x = sqrt(dimensiones.first * dimensiones.first + dimensiones.second * dimensiones.second); + dimension_y = dimension_x; + } if (seguir_camara) { - std::optional rect_interseccion = camara.getRectangulo().GetIntersection(Rect(coord_x, coord_y, dimensiones.first, dimensiones.second)); + std::optional rect_interseccion = camara.getRectangulo().GetIntersection(Rect(coord_x, coord_y, dimension_x, dimension_y)); coord_x -= camara.getPosicionX(); coord_y -= camara.getPosicionY();