// collision.hpp - Utilitats de detecció de col·lisions // © 2025 Orni Attack - Sistema de física #pragma once #include "core/entities/entitat.hpp" #include "core/types.hpp" namespace Physics { // Comprovació genèrica de col·lisió entre dues entitats inline bool check_collision(const Entities::Entitat& a, const Entities::Entitat& b, float amplifier = 1.0F) { // Comprovar si ambdós són col·lisionables if (!a.es_collidable() || !b.es_collidable()) { return false; } // Calcular radi combinat (amb amplificador per hitbox generós) float suma_radis = (a.get_collision_radius() + b.get_collision_radius()) * amplifier; float suma_radis_sq = suma_radis * suma_radis; // Comprovació distància al quadrat (sense sqrt) const Punt& pos_a = a.get_centre(); const Punt& pos_b = b.get_centre(); 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