// collision.hpp - Utilitats de detecció de colisiones
// © 2025 Orni Attack - Sistema de física

#pragma once

#include "core/entities/entity.hpp"
#include "core/types.hpp"

namespace Physics {

// Comprobación genèrica de colisión entre dues entidades
inline bool check_collision(const Entities::Entity& a, const Entities::Entity& b, float amplifier = 1.0F) {
    // Comprovar si ambdós són col·lisionables
    if (!a.isCollidable() || !b.isCollidable()) {
        return false;
    }

    // Calcular radi combinat (con amplificador per hitbox generós)
    float suma_radis = (a.getCollisionRadius() + b.getCollisionRadius()) * amplifier;
    float suma_radis_sq = suma_radis * suma_radis;

    // Comprobación distancia al cuadrado (sin sqrt)
    const Vec2& pos_a = a.getCenter();
    const Vec2& pos_b = b.getCenter();
    float dx = pos_a.x - pos_b.x;
    float dy = pos_a.y - pos_b.y;
    float dist_sq = (dx * dx) + (dy * dy);

    return dist_sq <= suma_radis_sq;
}

}  // namespace Physics
