Newer
Older
PixelPaintWar / apps / server / src / domains / game / application / useCases / reportBombHitUseCase.ts
/**
 * reportBombHitUseCase
 * 被弾報告を受け取り,死亡通知の配信処理へ橋渡しする
 * Bot被弾はサーバー側GameLoopで直接検知するため,自プレイヤーの報告のみ受け付ける
 */
import type {
  BombHitOutputPort,
  BombHitReportValidationPort,
  ReportBombHitInput,
} from "../ports/gameUseCasePorts";
import { shouldPublishPlayerDeadFromBombHit } from "./reportBombHitValidation";

type ReportBombHitUseCaseParams = {
  roomId: string;
  validation: BombHitReportValidationPort;
  input: ReportBombHitInput;
  output: BombHitOutputPort;
};

/** 被弾報告を受け取り,死亡通知を同一ルームへ配信する */
export const reportBombHitUseCase = ({
  roomId,
  validation,
  input,
  output,
}: ReportBombHitUseCaseParams): void => {
  if (!shouldPublishPlayerDeadFromBombHit(validation, input)) {
    return;
  }

  const deadPlayerId = input.socketId;

  output.publishPlayerDeadToOthersInRoom(roomId, deadPlayerId, {
    playerId: deadPlayerId,
  });
};