cd38101f99
Primera sub-fase del naming sweep. Punt era un struct sense
operacions, conservat per compatibilitat amb el Pascal original.
Substituit per Vec2, un aggregate amb operadors aritmetics, dot,
length, normalized i length_squared (camelBack: lengthSquared)
seguint les regles del .clang-tidy del projecte.
Canvis:
- core/types.hpp reescrit: nou struct Vec2 amb +=,-=,*=,/=,
unary -, ==, dot, length, lengthSquared, normalized
- Operadors fora de la classe: +, -, *, / (amb float per ambdues
bandes), - unari, ==
- Vec2 segueix sent aggregate (sense constructors definits):
els 'designated initializers' del codi existent funcionen igual:
Vec2{.x = ..., .y = ...}
- Sed global sobre 35 fitxers: tots els 'Punt' -> 'Vec2'
Net: 35 fitxers tocats, +180 / -114. Compila i enllaça.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
33 lines
1.0 KiB
C++
33 lines
1.0 KiB
C++
// 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 Vec2& pos_a = a.get_centre();
|
|
const Vec2& 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
|