Skip to content

Commit

Permalink
Fix en renderización de vigas rotadas
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
JuanPF56 committed Dec 6, 2023
1 parent 9012f56 commit 4d17517
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion src/client/animacion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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> rect_interseccion = camara.getRectangulo().GetIntersection(Rect(coord_x, coord_y, dimensiones.first, dimensiones.second));
std::optional<Rect> rect_interseccion = camara.getRectangulo().GetIntersection(Rect(coord_x, coord_y, dimension_x, dimension_y));

coord_x -= camara.getPosicionX();
coord_y -= camara.getPosicionY();
Expand Down

0 comments on commit 4d17517

Please sign in to comment.