fix: arreglades les colisions "the static cast menner"

This commit is contained in:
2025-10-16 14:14:33 +02:00
parent 9db902c024
commit 545d471654
4 changed files with 55 additions and 26 deletions

View File

@@ -39,7 +39,8 @@ bool checkCollision(const Circle& a, const Circle& b) {
}
// Detector de colisiones entre un circulo y un rectangulo
bool checkCollision(const Circle& a, const SDL_FRect& b) {
bool checkCollision(const Circle& a, const SDL_FRect& rect) {
SDL_Rect b = toSDLRect(rect);
// Closest point on collision box
int cX, cY;
@@ -72,7 +73,9 @@ bool checkCollision(const Circle& a, const SDL_FRect& b) {
}
// Detector de colisiones entre dos rectangulos
bool checkCollision(const SDL_FRect& a, const SDL_FRect& b) {
bool checkCollision(const SDL_FRect& rect_a, const SDL_FRect& rect_b) {
SDL_Rect a = toSDLRect(rect_a);
SDL_Rect b = toSDLRect(rect_b);
// Calcula las caras del rectangulo a
const int leftA = a.x;
const int rightA = a.x + a.w;
@@ -107,7 +110,10 @@ bool checkCollision(const SDL_FRect& a, const SDL_FRect& b) {
}
// Detector de colisiones entre un punto y un rectangulo
bool checkCollision(const SDL_FPoint& p, const SDL_FRect& r) {
bool checkCollision(const SDL_FPoint& point, const SDL_FRect& rect) {
SDL_Rect r = toSDLRect(rect);
SDL_Point p = toSDLPoint(point);
// Comprueba si el punto está a la izquierda del rectangulo
if (p.x < r.x) {
return false;
@@ -133,7 +139,8 @@ bool checkCollision(const SDL_FPoint& p, const SDL_FRect& r) {
}
// Detector de colisiones entre una linea horizontal y un rectangulo
bool checkCollision(const LineHorizontal& l, const SDL_FRect& r) {
bool checkCollision(const LineHorizontal& l, const SDL_FRect& rect) {
SDL_Rect r = toSDLRect(rect);
// Comprueba si la linea esta por encima del rectangulo
if (l.y < r.y) {
return false;
@@ -159,7 +166,8 @@ bool checkCollision(const LineHorizontal& l, const SDL_FRect& r) {
}
// Detector de colisiones entre una linea vertical y un rectangulo
bool checkCollision(const LineVertical& l, const SDL_FRect& r) {
bool checkCollision(const LineVertical& l, const SDL_FRect& rect) {
SDL_Rect r = toSDLRect(rect);
// Comprueba si la linea esta por la izquierda del rectangulo
if (l.x < r.x) {
return false;
@@ -185,7 +193,9 @@ bool checkCollision(const LineVertical& l, const SDL_FRect& r) {
}
// Detector de colisiones entre una linea horizontal y un punto
bool checkCollision(const LineHorizontal& l, const SDL_FPoint& p) {
bool checkCollision(const LineHorizontal& l, const SDL_FPoint& point) {
SDL_Point p = toSDLPoint(point);
// Comprueba si el punto esta sobre la linea
if (p.y > l.y) {
return false;
@@ -211,7 +221,7 @@ bool checkCollision(const LineHorizontal& l, const SDL_FPoint& p) {
}
// Detector de colisiones entre dos lineas
SDL_FPoint checkCollision(const Line& l1, const Line& l2) {
SDL_Point checkCollision(const Line& l1, const Line& l2) {
const float x1 = l1.x1;
const float y1 = l1.y1;
const float x2 = l1.x2;
@@ -232,13 +242,13 @@ SDL_FPoint checkCollision(const Line& l1, const Line& l2) {
const float x = x1 + (uA * (x2 - x1));
const float y = y1 + (uA * (y2 - y1));
return {(float)round(x), (float)round(y)};
return {static_cast<int>(round(x)), static_cast<int>(round(y))};
}
return {-1, -1};
}
// Detector de colisiones entre dos lineas
SDL_FPoint checkCollision(const LineDiagonal& l1, const LineVertical& l2) {
SDL_Point checkCollision(const LineDiagonal& l1, const LineVertical& l2) {
const float x1 = l1.x1;
const float y1 = l1.y1;
const float x2 = l1.x2;
@@ -259,7 +269,7 @@ SDL_FPoint checkCollision(const LineDiagonal& l1, const LineVertical& l2) {
const float x = x1 + (uA * (x2 - x1));
const float y = y1 + (uA * (y2 - y1));
return {(float)x, (float)y};
return {static_cast<int>(x), static_cast<int>(y)};
}
return {-1, -1};
}
@@ -279,7 +289,9 @@ void normalizeLine(LineDiagonal& l) {
}
// Detector de colisiones entre un punto y una linea diagonal
bool checkCollision(const SDL_FPoint& p, const LineDiagonal& l) {
bool checkCollision(const SDL_FPoint& point, const LineDiagonal& l) {
SDL_Point p = toSDLPoint(point);
// Comprueba si el punto está en alineado con la linea
if (abs(p.x - l.x1) != abs(p.y - l.y1)) {
return false;