SOULGATE/server/combat.py
2026-05-04 03:42:47 +02:00

35 lines
977 B
Python

# combat.py : maths pures (hitbox, normalisation, distance segment)
import math
def circle_overlap(ax, ay, ar, bx, by, br):
# comparer les carres evite math.sqrt
dx = ax - bx
dy = ay - by
dist_sq = dx * dx + dy * dy
radii = ar + br
return dist_sq <= radii * radii
def normalize(dx, dy):
mag_sq = dx * dx + dy * dy
if mag_sq == 0.0:
return 0.0, 0.0
mag = math.sqrt(mag_sq)
return dx / mag, dy / mag
def segment_point_dist(px, py, ax, ay, bx, by):
# distance min entre le point P et le segment [AB], utilise pour la charge de Kael
dx, dy = bx - ax, by - ay
if dx == 0.0 and dy == 0.0:
# A == B, le segment est un point
return math.sqrt((px - ax) ** 2 + (py - ay) ** 2)
# projection de P sur AB, clamp entre 0 et 1
t = max(0.0, min(1.0, ((px - ax) * dx + (py - ay) * dy) / (dx * dx + dy * dy)))
cx, cy = ax + t * dx, ay + t * dy
return math.sqrt((px - cx) ** 2 + (py - cy) ** 2)