diff --git a/apps/client/src/scenes/game/entities/map/GameMapController.ts b/apps/client/src/scenes/game/entities/map/GameMapController.ts index 9faa689..ff0f999 100644 --- a/apps/client/src/scenes/game/entities/map/GameMapController.ts +++ b/apps/client/src/scenes/game/entities/map/GameMapController.ts @@ -30,13 +30,13 @@ } /** 全体マップ状態を反映する */ - public updateMapState(state: domain.gridMap.MapState): void { + public updateMapState(state: domain.game.gridMap.MapState): void { this.model.applyMapState(state); this.view.renderAll(this.resolveAllCellColors(this.model.getAllTeamIds())); } /** 差分セル更新を反映する */ - public updateCells(updates: domain.gridMap.CellUpdate[]): void { + public updateCells(updates: domain.game.gridMap.CellUpdate[]): void { this.model.applyUpdates(updates); updates.forEach(({ index }) => { diff --git a/apps/client/src/scenes/game/entities/map/GameMapModel.ts b/apps/client/src/scenes/game/entities/map/GameMapModel.ts index 2b1dd3d..c9ad37c 100644 --- a/apps/client/src/scenes/game/entities/map/GameMapModel.ts +++ b/apps/client/src/scenes/game/entities/map/GameMapModel.ts @@ -17,7 +17,7 @@ } /** 全体マップ状態を適用する */ - public applyMapState(state: domain.gridMap.MapState): void { + public applyMapState(state: domain.game.gridMap.MapState): void { const maxLength = Math.min( this.cellTeamIds.length, state.gridColors.length, @@ -28,7 +28,7 @@ } /** 差分セル更新を適用する */ - public applyUpdates(updates: domain.gridMap.CellUpdate[]): void { + public applyUpdates(updates: domain.game.gridMap.CellUpdate[]): void { updates.forEach(({ index, teamId }) => { if (!this.isValidIndex(index)) return; this.cellTeamIds[index] = teamId; diff --git a/apps/client/src/scenes/game/entities/player/PlayerController.ts b/apps/client/src/scenes/game/entities/player/PlayerController.ts index fa4467c..470f039 100644 --- a/apps/client/src/scenes/game/entities/player/PlayerController.ts +++ b/apps/client/src/scenes/game/entities/player/PlayerController.ts @@ -18,7 +18,7 @@ }; /** リモート移動更新を表す型 */ -export type RemoteUpdate = Partial; +export type RemoteUpdate = Partial; /** * ローカル用コントローラーとリモート用コントローラーの共通基底 @@ -30,7 +30,7 @@ /** 共通初期化としてModelとViewを生成する */ protected constructor( - data: domain.player.PlayerData, + data: domain.game.player.PlayerData, isLocal: boolean, appearanceResolver: AppearanceResolver, ) { @@ -57,12 +57,12 @@ } /** 現在座標を取得する */ - public getPosition(): domain.player.MovePayload { + public getPosition(): domain.game.player.MovePayload { return this.model.getPosition(); } /** 外部送信用スナップショットを取得する */ - public getSnapshot(): domain.player.PlayerData { + public getSnapshot(): domain.game.player.PlayerData { return this.model.getSnapshot(); } @@ -82,7 +82,7 @@ export class LocalPlayerController extends BasePlayerController { /** ローカルプレイヤー用コントローラーを初期化する */ constructor( - data: domain.player.PlayerData, + data: domain.game.player.PlayerData, appearanceResolver: AppearanceResolver, ) { super(data, true, appearanceResolver); @@ -104,7 +104,7 @@ export class RemotePlayerController extends BasePlayerController { /** リモートプレイヤー用コントローラーを初期化する */ constructor( - data: domain.player.PlayerData, + data: domain.game.player.PlayerData, appearanceResolver: AppearanceResolver, ) { super(data, false, appearanceResolver); diff --git a/apps/client/src/scenes/game/entities/player/PlayerModel.ts b/apps/client/src/scenes/game/entities/player/PlayerModel.ts index 630f248..1825f8d 100644 --- a/apps/client/src/scenes/game/entities/player/PlayerModel.ts +++ b/apps/client/src/scenes/game/entities/player/PlayerModel.ts @@ -18,7 +18,7 @@ private targetGridY: number; /** 共有プレイヤー情報から初期状態を構築する */ - constructor(data: domain.player.PlayerData) { + constructor(data: domain.game.player.PlayerData) { this.id = data.id; this.name = data.name; this.teamId = data.teamId; @@ -29,12 +29,12 @@ } /** 現在座標を取得する */ - public getPosition(): domain.player.MovePayload { + public getPosition(): domain.game.player.MovePayload { return { x: this.gridX, y: this.gridY }; } /** 送信用スナップショットを取得する */ - public getSnapshot(): domain.player.PlayerData { + public getSnapshot(): domain.game.player.PlayerData { return { id: this.id, name: this.name, @@ -64,7 +64,7 @@ } /** リモート更新の目標座標を設定する */ - public setRemoteTarget(update: Partial): void { + public setRemoteTarget(update: Partial): void { if (update.x !== undefined && this.isFiniteNumber(update.x)) this.targetGridX = update.x; if (update.y !== undefined && this.isFiniteNumber(update.y)) diff --git a/apps/server/src/domains/game/GameManager.ts b/apps/server/src/domains/game/GameManager.ts index 4b0e499..18a1c95 100644 --- a/apps/server/src/domains/game/GameManager.ts +++ b/apps/server/src/domains/game/GameManager.ts @@ -66,7 +66,7 @@ startRoomSession( playerIds: string[], playerNamesById: Record, - onTick: (data: domain.game.TickData) => void, + onTick: (data: domain.game.tick.TickData) => void, onGameEnd: (payload: GameResultPayload) => void, onBotPlaceBomb?: (ownerId: string, payload: PlaceBombPayload) => void, ) { diff --git a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts index 0e247fc..7931dda 100644 --- a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts +++ b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts @@ -23,7 +23,7 @@ startRoomSession( playerIds: string[], playerNamesById: Record, - onTick: (data: domain.game.TickData) => void, + onTick: (data: domain.game.tick.TickData) => void, onGameEnd: (payload: GameResultPayload) => void, onBotPlaceBomb?: (ownerId: string, payload: PlaceBombPayload) => void, ): void; @@ -32,7 +32,7 @@ /** 準備完了ユースケースが利用するゲーム状態参照入力ポート */ export interface ReadyForGamePort { - getRoomPlayers(): domain.player.PlayerData[]; + getRoomPlayers(): domain.game.player.PlayerData[]; getRoomStartTime(): number | undefined; } diff --git a/apps/server/src/domains/game/application/services/GameRoomSession.ts b/apps/server/src/domains/game/application/services/GameRoomSession.ts index cd90ba7..44c1c0b 100644 --- a/apps/server/src/domains/game/application/services/GameRoomSession.ts +++ b/apps/server/src/domains/game/application/services/GameRoomSession.ts @@ -57,7 +57,7 @@ public start( tickRate: number, - onTick: (data: domain.game.TickData) => void, + onTick: (data: domain.game.tick.TickData) => void, onGameEnd: (payload: GameResultPayload) => void, onBotPlaceBomb?: (ownerId: string, payload: PlaceBombPayload) => void, ): void { diff --git a/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts b/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts index 10fcf2e..3bf2800 100644 --- a/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts +++ b/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts @@ -74,7 +74,7 @@ public startRoomSession( playerIds: string[], playerNamesById: Record, - onTick: (data: domain.game.TickData) => void, + onTick: (data: domain.game.tick.TickData) => void, onGameEnd: (payload: GameResultPayload) => void, onBotPlaceBomb?: (ownerId: string, payload: PlaceBombPayload) => void, ) { diff --git a/apps/server/src/domains/game/application/useCases/movePlayerUseCase.ts b/apps/server/src/domains/game/application/useCases/movePlayerUseCase.ts index 054fbfe..54bd04f 100644 --- a/apps/server/src/domains/game/application/useCases/movePlayerUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/movePlayerUseCase.ts @@ -8,7 +8,7 @@ type MovePlayerUseCaseParams = { gameManager: MovePlayerPort; playerId: string; - move: domain.player.MovePayload; + move: domain.game.player.MovePayload; }; /** プレイヤー移動入力をゲーム管理へ委譲する */ diff --git a/apps/server/src/domains/game/entities/map/MapStore.ts b/apps/server/src/domains/game/entities/map/MapStore.ts index 3c9e35b..bf09972 100644 --- a/apps/server/src/domains/game/entities/map/MapStore.ts +++ b/apps/server/src/domains/game/entities/map/MapStore.ts @@ -12,7 +12,7 @@ // 全マスの現在の色(teamId)を保持 private gridColors: number[]; // 次回の送信ループで送る差分リスト - private pendingUpdates: domain.gridMap.CellUpdate[]; + private pendingUpdates: domain.game.gridMap.CellUpdate[]; constructor() { // 初期状態は -1 (無色) などで初期化 @@ -35,7 +35,7 @@ /** * 溜まっている差分を取得し,キューをクリアする(ループ送信時に使用) */ - public getAndClearUpdates(): domain.gridMap.CellUpdate[] { + public getAndClearUpdates(): domain.game.gridMap.CellUpdate[] { return drainPendingUpdates(this.pendingUpdates); } diff --git a/apps/server/src/domains/game/entities/map/mapPainting.ts b/apps/server/src/domains/game/entities/map/mapPainting.ts index efb054c..6135b8f 100644 --- a/apps/server/src/domains/game/entities/map/mapPainting.ts +++ b/apps/server/src/domains/game/entities/map/mapPainting.ts @@ -6,7 +6,7 @@ type PaintCellParams = { gridColors: number[]; - pendingUpdates: domain.gridMap.CellUpdate[]; + pendingUpdates: domain.game.gridMap.CellUpdate[]; index: number; teamId: number; }; diff --git a/apps/server/src/domains/game/entities/map/mapUpdates.ts b/apps/server/src/domains/game/entities/map/mapUpdates.ts index 2d56960..77ce63a 100644 --- a/apps/server/src/domains/game/entities/map/mapUpdates.ts +++ b/apps/server/src/domains/game/entities/map/mapUpdates.ts @@ -6,8 +6,8 @@ /** 差分キューを配列として返却し,キューを空にする */ export const drainPendingUpdates = ( - pendingUpdates: domain.gridMap.CellUpdate[] -): domain.gridMap.CellUpdate[] => { + pendingUpdates: domain.game.gridMap.CellUpdate[] +): domain.game.gridMap.CellUpdate[] => { const updates = [...pendingUpdates]; pendingUpdates.length = 0; return updates; diff --git a/apps/server/src/domains/game/entities/player/Player.ts b/apps/server/src/domains/game/entities/player/Player.ts index 48943b1..2c658c8 100644 --- a/apps/server/src/domains/game/entities/player/Player.ts +++ b/apps/server/src/domains/game/entities/player/Player.ts @@ -4,7 +4,7 @@ */ import { domain } from "@repo/shared"; -export class Player implements domain.player.PlayerData { +export class Player implements domain.game.player.PlayerData { public id: string; public name: string; public x: number = 0; diff --git a/apps/server/src/domains/game/entities/player/playerPosition.ts b/apps/server/src/domains/game/entities/player/playerPosition.ts index 700b0da..316e400 100644 --- a/apps/server/src/domains/game/entities/player/playerPosition.ts +++ b/apps/server/src/domains/game/entities/player/playerPosition.ts @@ -7,5 +7,5 @@ /** プレイヤー座標に対応するグリッドインデックスを返す */ export const getPlayerGridIndex = (player: Player): number | null => { - return domain.gridMap.getGridIndexFromPosition(player.x, player.y); + return domain.game.gridMap.getGridIndexFromPosition(player.x, player.y); }; diff --git a/apps/server/src/domains/game/loop/GameLoop.ts b/apps/server/src/domains/game/loop/GameLoop.ts index 403867b..9e51f34 100644 --- a/apps/server/src/domains/game/loop/GameLoop.ts +++ b/apps/server/src/domains/game/loop/GameLoop.ts @@ -28,7 +28,7 @@ private endMonotonicTimeMs: number = 0; private nextTickAtMs: number = 0; private readonly maxCatchUpTicks: number = 3; - private lastSentPlayers: Map = + private lastSentPlayers: Map = new Map(); private disconnectedBotControlledPlayerIds: Set = new Set(); private botTurnOrchestrator: BotTurnOrchestrator = @@ -39,7 +39,7 @@ private tickRate: number, private players: Map, private mapStore: MapStore, - private onTick: (data: domain.game.TickData) => void, + private onTick: (data: domain.game.tick.TickData) => void, private onGameEnd: () => void, private onBotPlaceBomb?: ( ownerId: string, @@ -178,7 +178,7 @@ this.disconnectedBotControlledPlayerIds.delete(playerId); } - private buildTickData(): domain.game.TickData { + private buildTickData(): domain.game.tick.TickData { const activePlayerIds = new Set(); const playerUpdates = this.collectChangedPlayerUpdates(activePlayerIds); this.cleanupInactivePlayerSnapshots(activePlayerIds); @@ -191,8 +191,8 @@ private collectChangedPlayerUpdates( activePlayerIds: Set, - ): domain.game.TickData["playerUpdates"] { - const changedPlayers: domain.game.TickData["playerUpdates"] = []; + ): domain.game.tick.TickData["playerUpdates"] { + const changedPlayers: domain.game.tick.TickData["playerUpdates"] = []; this.players.forEach((player) => { activePlayerIds.add(player.id); @@ -202,7 +202,7 @@ } // 送信用のプレイヤーデータを構築 - const playerData: domain.game.PlayerPositionUpdate = { + const playerData: domain.game.tick.PlayerPositionUpdate = { id: player.id, x: player.x, y: player.y, diff --git a/apps/server/src/network/handlers/game/gameEventOrchestrators.ts b/apps/server/src/network/handlers/game/gameEventOrchestrators.ts index cffe09a..91b34e9 100644 --- a/apps/server/src/network/handlers/game/gameEventOrchestrators.ts +++ b/apps/server/src/network/handlers/game/gameEventOrchestrators.ts @@ -84,7 +84,7 @@ /** MOVEイベントを調停して移動ユースケースを実行する */ export const handleMoveEvent = ( deps: GameEventOrchestratorDeps, - move: domain.player.MovePayload, + move: domain.game.player.MovePayload, ): void => { const resolved = runWithRuntimeByPlayerId( deps.roomManager, diff --git a/apps/server/src/network/validation/socketPayloadValidators.ts b/apps/server/src/network/validation/socketPayloadValidators.ts index 3fbb775..981940b 100644 --- a/apps/server/src/network/validation/socketPayloadValidators.ts +++ b/apps/server/src/network/validation/socketPayloadValidators.ts @@ -26,7 +26,7 @@ /** MOVEイベントのペイロードが移動座標であるか判定する */ export const isMovePayload = ( value: unknown, -): value is domain.player.MovePayload => { +): value is domain.game.player.MovePayload => { if (typeof value !== "object" || value === null) { return false; } diff --git a/packages/shared/src/domains/index.ts b/packages/shared/src/domains/index.ts index 1d8e204..bb788c0 100644 --- a/packages/shared/src/domains/index.ts +++ b/packages/shared/src/domains/index.ts @@ -10,8 +10,3 @@ export * as game from "./game"; /** room ドメインを再公開する */ export * as room from "./room"; - -/** 後方互換: game 配下へ移動した player を旧パスでも公開する */ -export * as player from "./game/player"; -/** 後方互換: game 配下へ移動した gridMap を旧パスでも公開する */ -export * as gridMap from "./game/gridMap";