diff --git a/packages/shared/src/config/index.ts b/packages/shared/src/config/index.ts index 27ba7e8..d183320 100644 --- a/packages/shared/src/config/index.ts +++ b/packages/shared/src/config/index.ts @@ -1,5 +1,21 @@ +/** + * index + * 共有設定値を集約して再公開するエントリ + * ゲーム設定とネットワーク設定の参照口を一本化する + */ + +/** ゲーム全体の共有設定値を再公開する */ export { GAME_CONFIG } from "./gameConfig"; +/** チーム名配列を再公開する */ export { TEAM_NAMES } from "./gameConfig"; +/** 未確定 teamId の既定値を再公開する */ export { UNKNOWN_TEAM_ID } from "./gameConfig"; -export { validateTeamConfig, assertValidTeamId, isUnknownTeamId, isKnownTeamId } from "./gameConfig"; +/** チーム設定関連の検証関数を再公開する */ +export { + validateTeamConfig, + assertValidTeamId, + isUnknownTeamId, + isKnownTeamId, +} from "./gameConfig"; +/** ネットワーク共有設定値を再公開する */ export { NETWORK_CONFIG } from "./networkConfig"; diff --git a/packages/shared/src/config/networkConfig.ts b/packages/shared/src/config/networkConfig.ts index eff99b6..f5ad576 100644 --- a/packages/shared/src/config/networkConfig.ts +++ b/packages/shared/src/config/networkConfig.ts @@ -1,3 +1,10 @@ +/** + * networkConfig + * ネットワーク通信で利用する共有設定値を定義する + * クライアントとサーバーの接続契約を集約する + */ + +/** ソケット通信で利用する共有設定値 */ export const NETWORK_CONFIG = { SOCKET_IO_PATH: "/socket.io", } as const; diff --git a/packages/shared/src/domains/app/app.const.ts b/packages/shared/src/domains/app/app.const.ts index f8beb8d..215be5d 100644 --- a/packages/shared/src/domains/app/app.const.ts +++ b/packages/shared/src/domains/app/app.const.ts @@ -1,9 +1,16 @@ -import type { ScenePhase as ScenePhaseType } from "./app.type"; +/** + * app.const + * アプリ状態領域で利用する定数と派生型を定義する + * 画面遷移フェーズの単一情報源を提供する + */ -// クライアント画面遷移利用フェーズの値 +/** クライアント画面遷移で利用するフェーズ定数 */ export const ScenePhase = { TITLE: "title", LOBBY: "lobby", PLAYING: "playing", RESULT: "result", -} as const satisfies Record; +} as const; + +/** クライアント画面遷移で利用するフェーズ型 */ +export type ScenePhase = (typeof ScenePhase)[keyof typeof ScenePhase]; diff --git a/packages/shared/src/domains/app/app.type.ts b/packages/shared/src/domains/app/app.type.ts index 83777d0..041ba11 100644 --- a/packages/shared/src/domains/app/app.type.ts +++ b/packages/shared/src/domains/app/app.type.ts @@ -1,2 +1,8 @@ -// クライアント画面遷移利用フェーズ型 -export type ScenePhase = "title" | "lobby" | "playing" | "result"; +/** + * app.type + * アプリ状態領域で利用する共有型を再公開する + * 定数定義から導出した型を外部参照向けに提供する + */ + +/** 画面遷移フェーズ型を再公開する */ +export type { ScenePhase } from "./app.const"; diff --git a/packages/shared/src/domains/gridMap/gridMap.type.ts b/packages/shared/src/domains/gridMap/gridMap.type.ts index d85090e..3e7811a 100644 --- a/packages/shared/src/domains/gridMap/gridMap.type.ts +++ b/packages/shared/src/domains/gridMap/gridMap.type.ts @@ -1,7 +1,15 @@ +/** + * gridMap.type + * グリッドマップ領域で利用する共有型を定義する + * マップ状態と差分更新の契約を集約する + */ + +/** マップ全体の色状態を保持する構造 */ export interface MapState { gridColors: number[]; } +/** マップ1セル分の差分更新情報 */ export interface CellUpdate { index: number; teamId: number; diff --git a/packages/shared/src/domains/player/player.type.ts b/packages/shared/src/domains/player/player.type.ts index c478463..108052d 100644 --- a/packages/shared/src/domains/player/player.type.ts +++ b/packages/shared/src/domains/player/player.type.ts @@ -1,4 +1,10 @@ -// クライアント・サーバー間共有プレイヤー基本情報型 +/** + * player.type + * プレイヤー領域で利用する共有型を定義する + * クライアントとサーバーで参照する契約を集約する + */ + +/** クライアントとサーバー間で共有するプレイヤー基本情報 */ export interface PlayerData { id: string; name: string; @@ -8,7 +14,7 @@ teamId: number; // 0〜3 のチームID } -// 移動イベント送信ペイロード型 +/** MOVE イベントで利用する移動入力ペイロード */ export interface MovePayload { // グリッド単位の座標 x: number; diff --git a/packages/shared/src/domains/room/room.const.ts b/packages/shared/src/domains/room/room.const.ts index bf0f189..9617d26 100644 --- a/packages/shared/src/domains/room/room.const.ts +++ b/packages/shared/src/domains/room/room.const.ts @@ -1,8 +1,15 @@ -import type { RoomPhase as RoomPhaseType } from "./room.type"; +/** + * room.const + * ルーム領域で利用する定数と派生型を定義する + * 進行フェーズの単一情報源を提供する + */ -// ルーム進行フェーズ状態の値 +/** ルーム進行フェーズで利用する定数 */ export const RoomPhase = { WAITING: "waiting", PLAYING: "playing", RESULT: "result", -} as const satisfies Record; +} as const; + +/** ルーム進行フェーズで利用する型 */ +export type RoomPhase = (typeof RoomPhase)[keyof typeof RoomPhase]; diff --git a/packages/shared/src/domains/room/room.type.ts b/packages/shared/src/domains/room/room.type.ts index f69dcbd..aa9657d 100644 --- a/packages/shared/src/domains/room/room.type.ts +++ b/packages/shared/src/domains/room/room.type.ts @@ -1,7 +1,11 @@ -// ルーム進行フェーズ状態型 -export type RoomPhase = "waiting" | "playing" | "result"; +/** + * room.type + * ルーム領域で利用する共有型を定義する + * 参加状態とイベントペイロード契約を集約する + */ +import type { RoomPhase } from "./room.const"; -// ルーム所属プレイヤー情報型 +/** ルーム所属プレイヤー情報 */ export interface RoomMember { id: string; name: string; @@ -9,7 +13,7 @@ isReady: boolean; } -// ルーム全体状態データ構造型 +/** ルーム全体状態データ */ export interface Room { roomId: string; ownerId: string; @@ -18,16 +22,16 @@ maxPlayers: number; } -// ルーム参加時送信ペイロード型 +/** ルーム参加時に送信するペイロード */ export interface JoinRoomPayload { roomId: string; playerName: string; } -// ルーム参加拒否理由型 +/** ルーム参加拒否理由 */ export type JoinRoomRejectedReason = "full" | "duplicate"; -// ルーム参加拒否通知ペイロード型 +/** ルーム参加拒否通知ペイロード */ export interface JoinRoomRejectedPayload { roomId: string; reason: JoinRoomRejectedReason; diff --git a/packages/shared/src/protocol/eventPayloadMaps.ts b/packages/shared/src/protocol/eventPayloadMaps.ts index eabb623..5f371c3 100644 --- a/packages/shared/src/protocol/eventPayloadMaps.ts +++ b/packages/shared/src/protocol/eventPayloadMaps.ts @@ -4,7 +4,7 @@ * 機能別に分割した対応表を合成して公開契約を維持する */ import type { - ConnectionLifecycleEventPayloadMap as CommonConnectionLifecycleEventPayloadMap, + ConnectionLifecycleEventPayloadMap, } from "./maps/commonEventPayloadMap"; import type { LobbyClientToServerEventPayloadMap, @@ -18,9 +18,6 @@ /** 接続ライフサイクルイベントのペイロード対応表を再公開する */ export type { ConnectionLifecycleEventPayloadMap } from "./maps/commonEventPayloadMap"; -/** 接続ライフサイクルイベントのペイロード対応表 */ -type ConnectionLifecycleEventPayloadMap = CommonConnectionLifecycleEventPayloadMap; - /** クライアントからサーバーへ送信するイベントごとのペイロード対応表 */ export type ClientToServerEventPayloadMap = & LobbyClientToServerEventPayloadMap diff --git a/packages/shared/src/protocol/maps/gameEventPayloadMap.ts b/packages/shared/src/protocol/maps/gameEventPayloadMap.ts index 7cc6fc9..3c69019 100644 --- a/packages/shared/src/protocol/maps/gameEventPayloadMap.ts +++ b/packages/shared/src/protocol/maps/gameEventPayloadMap.ts @@ -5,6 +5,10 @@ */ import { SocketEvents } from "../socketEvents"; import type { + PingPayload, + PongPayload, +} from "../payloads/commonPayloads"; +import type { BombHitReportPayload, BombPlacedAckPayload, BombPlacedPayload, @@ -16,12 +20,10 @@ NewPlayerPayload, PlaceBombPayload, PlayerDeadPayload, - PingPayload, - PongPayload, RemovePlayerPayload, UpdateMapCellsPayload, UpdatePlayersPayload, -} from "../eventPayloads"; +} from "../payloads/gamePayloads"; /** ゲーム関連のクライアント送信イベントペイロード対応表 */ export type GameClientToServerEventPayloadMap = { diff --git a/packages/shared/src/protocol/maps/lobbyEventPayloadMap.ts b/packages/shared/src/protocol/maps/lobbyEventPayloadMap.ts index 796ff47..9625774 100644 --- a/packages/shared/src/protocol/maps/lobbyEventPayloadMap.ts +++ b/packages/shared/src/protocol/maps/lobbyEventPayloadMap.ts @@ -8,7 +8,7 @@ JoinRoomPayload, RoomJoinRejectedPayload, RoomUpdatePayload, -} from "../eventPayloads"; +} from "../payloads/lobbyPayloads"; /** ロビー関連のクライアント送信イベントペイロード対応表 */ export type LobbyClientToServerEventPayloadMap = { diff --git a/packages/shared/src/protocol/payloads/gamePayloads.ts b/packages/shared/src/protocol/payloads/gamePayloads.ts index a8d5999..87fb74c 100644 --- a/packages/shared/src/protocol/payloads/gamePayloads.ts +++ b/packages/shared/src/protocol/payloads/gamePayloads.ts @@ -24,33 +24,33 @@ }; /** - * 初期同期(CURRENT_PLAYERS)で利用するプレイヤー一覧 + * 初期同期(current-players)で利用するプレイヤー一覧 * 初期同期用のため teamId を含む完全な PlayerData を配信する */ export type InitialPlayerSyncPayload = PlayerData[]; /** - * 差分同期(UPDATE_PLAYERS)で利用するプレイヤー差分配列 + * 差分同期(update-players)で利用するプレイヤー差分配列 * 帯域最適化のため teamId は含めず,id/x/y のみを配信する */ export type DeltaPlayerSyncPayload = PlayerPositionUpdate[]; -/** UPDATE_PLAYERS イベントで送受信するプレイヤー差分配列 */ +/** update-players イベントで送受信するプレイヤー差分配列 */ export type UpdatePlayersPayload = DeltaPlayerSyncPayload; -/** CURRENT_PLAYERS イベントで送受信するプレイヤー一覧 */ +/** current-players イベントで送受信するプレイヤー一覧 */ export type CurrentPlayersPayload = InitialPlayerSyncPayload; -/** UPDATE_MAP_CELLS イベントで送受信するマップ差分配列 */ +/** update-map-cells イベントで送受信するマップ差分配列 */ export type UpdateMapCellsPayload = CellUpdate[]; /** - * NEW_PLAYER イベントで送受信するプレイヤー情報 + * new-player イベントで送受信するプレイヤー情報 * 初回参加通知のため teamId を含む完全な PlayerData を配信する */ export type NewPlayerPayload = PlayerData; -/** REMOVE_PLAYER イベントで送受信するプレイヤーID */ +/** remove-player イベントで送受信するプレイヤーID */ export type RemovePlayerPayload = PlayerData["id"]; /** GAME_START イベントで送受信するゲーム開始情報 */ diff --git a/packages/shared/src/protocol/socketEvents.ts b/packages/shared/src/protocol/socketEvents.ts index f2c9a50..9d46c45 100644 --- a/packages/shared/src/protocol/socketEvents.ts +++ b/packages/shared/src/protocol/socketEvents.ts @@ -19,14 +19,14 @@ READY_FOR_GAME: "ready-for-game", // ゲームプレイ関連イベント名 - CURRENT_PLAYERS: "current_players", - NEW_PLAYER: "new_player", - UPDATE_PLAYERS: "update_players", - REMOVE_PLAYER: "remove_player", + CURRENT_PLAYERS: "current-players", + NEW_PLAYER: "new-player", + UPDATE_PLAYERS: "update-players", + REMOVE_PLAYER: "remove-player", MOVE: "move", PLACE_BOMB: "place-bomb", BOMB_HIT_REPORT: "bomb-hit-report", - UPDATE_MAP_CELLS: "update_map_cells", + UPDATE_MAP_CELLS: "update-map-cells", BOMB_PLACED: "bomb-placed", BOMB_PLACED_ACK: "bomb-placed-ack", PLAYER_DEAD: "player-dead", diff --git a/test/load-bot.ts b/test/load-bot.ts index df8930e..c66661f 100644 --- a/test/load-bot.ts +++ b/test/load-bot.ts @@ -233,7 +233,7 @@ } }); - socket.on("current_players", (players: CurrentPlayer[]) => { + socket.on("current-players", (players: CurrentPlayer[]) => { const self = players.find((player) => player.id === socket.id); if (self) { posX = self.x;