Newer
Older
PixelPaintWar / packages / shared / src / domains / game / bombHit.logic.ts
/**
 * bombHit.logic
 * 爆弾とプレイヤーの円当たり判定を行う純関数を提供する
 * 同チーム無効判定と二乗距離比較をまとめて扱う
 */
import type { BombHitCheckInput, BombHitCheckResult } from "./bombHit.type";

/** 爆弾とプレイヤーの当たり判定を実行する */
export const checkBombHit = ({
  bomb,
  player,
}: BombHitCheckInput): BombHitCheckResult => {
  const isSameTeam = bomb.teamId === player.teamId;
  const deltaX = bomb.x - player.x;
  const deltaY = bomb.y - player.y;
  const distanceSquared = deltaX * deltaX + deltaY * deltaY;
  const sumRadius = bomb.radius + player.radius;
  const thresholdSquared = sumRadius * sumRadius;
  const isHit = !isSameTeam && distanceSquared < thresholdSquared;

  return {
    isHit,
    isSameTeam,
    distanceSquared,
    thresholdSquared,
  };
};