Newer
Older
PixelPaintWar / apps / client / src / scenes / game / input / presentation / GameUiPresenter.ts
/**
 * GameUiPresenter
 * ゲーム画面の表示用データ変換を提供する
 * 残り時間と開始カウントダウンの表示生成を扱う
 */
import { config } from "@client/config";

/** 残り秒数を mm:ss 形式へ変換する */
export const formatRemainingTime = (remainingSec: number): string => {
  const mins = Math.floor(remainingSec / 60);
  const secs = Math.floor(remainingSec % 60);
  return `${mins}:${secs.toString().padStart(2, "0")}`;
};

/** 開始カウントダウン表示文字列を生成する */
export const buildStartCountdownText = (
  remainingSec: number,
): string | null => {
  return remainingSec > 0 ? String(remainingSec) : null;
};

/** ゲーム画面の初期残り時間表示を返す */
export const getInitialTimeDisplay = (): string => {
  return formatRemainingTime(config.GAME_CONFIG.GAME_DURATION_SEC);
};

/** 被弾回数からハートゲージ表示を生成する */
export const buildRespawnHeartGauge = (localBombHitCount: number): string => {
  const maxHearts = Math.max(
    1,
    Math.floor(config.GAME_CONFIG.PLAYER_RESPAWN_HIT_COUNT),
  );
  const clampedHitCount = Math.min(Math.max(localBombHitCount, 0), maxHearts);
  const remainingHearts = maxHearts - clampedHitCount;

  return `${"❤️".repeat(remainingHearts)}${"🤍".repeat(clampedHitCount)}`;
};