diff --git a/apps/client/src/scenes/game/application/network/handlers/PlayerSyncHandler.ts b/apps/client/src/scenes/game/application/network/handlers/PlayerSyncHandler.ts index fc7c7e6..fe4a42c 100644 --- a/apps/client/src/scenes/game/application/network/handlers/PlayerSyncHandler.ts +++ b/apps/client/src/scenes/game/application/network/handlers/PlayerSyncHandler.ts @@ -29,11 +29,13 @@ export class PlayerSyncHandler { private readonly worldContainer: Container; private readonly playerRepository: PlayerRepository; + private readonly myId: string; private readonly playerControllerFactory: PlayerControllerFactory; constructor({ worldContainer, playerRepository, myId, appearanceResolver }: PlayerSyncHandlerOptions) { this.worldContainer = worldContainer; this.playerRepository = playerRepository; + this.myId = myId; this.playerControllerFactory = new PlayerControllerFactory({ myId, appearanceResolver, @@ -52,9 +54,13 @@ this.replacePlayerController(payload.id, payload); }; - /** プレイヤー差分更新を反映する */ + /** プレイヤー差分更新を反映する(自分自身は除外する) */ public handlePlayerUpdates = (changedPlayers: UpdatePlayersPayload): void => { changedPlayers.forEach((playerData) => { + if (playerData.id === this.myId) { + return; + } + const target = this.playerRepository.getById(playerData.id); if (target && target instanceof RemotePlayerController) { target.applyRemoteUpdate({ x: playerData.x, y: playerData.y }); diff --git a/apps/server/src/application/coordinators/startGameCoordinator.ts b/apps/server/src/application/coordinators/startGameCoordinator.ts index 72407a7..1d09b4a 100644 --- a/apps/server/src/application/coordinators/startGameCoordinator.ts +++ b/apps/server/src/application/coordinators/startGameCoordinator.ts @@ -102,7 +102,6 @@ roomId: updatedRoom.roomId, playerIds: sessionPlayerIds, playerNamesById, - recipientPlayerIds: humanPlayerIds, gameSession: gameManager, bombStore: gameManager, onGameEnd: () => { diff --git a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts index c071fea..ebfd42f 100644 --- a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts +++ b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts @@ -48,8 +48,8 @@ /** ゲーム系ユースケースが利用する送信出力ポート */ export interface GameOutputPort { publishPongToSocket(payload: PongPayload): void; - publishUpdatePlayersToSocket( - socketId: string, + publishUpdatePlayersToRoom( + roomId: domain.room.Room["roomId"], players: UpdatePlayersPayload, ): void; publishMapCellUpdatesToRoom( @@ -98,7 +98,7 @@ /** start-game 系フローで利用する送信出力ポート */ export type StartGameOutputPort = Pick< GameOutputPort, - | "publishUpdatePlayersToSocket" + | "publishUpdatePlayersToRoom" | "publishMapCellUpdatesToRoom" | "publishGameEndToRoom" | "publishGameResultToRoom" diff --git a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts index c800c3c..17c2776 100644 --- a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts @@ -15,22 +15,10 @@ } from "@server/logging/index"; import { createBotBombActionHandler } from "../services/bot/index.js"; -const excludeRecipientFromPlayerUpdates = < - TPlayerUpdate extends { id: string }, ->( - playerUpdates: TPlayerUpdate[], - recipientId: string, -): TPlayerUpdate[] => { - return playerUpdates.filter( - (playerUpdate) => playerUpdate.id !== recipientId, - ); -}; - type StartGameUseCaseParams = { roomId: string; playerIds: string[]; playerNamesById: Record; - recipientPlayerIds?: string[]; gameSession: StartGamePort; bombStore: BombPlacementPort; onGameEnd: () => void; @@ -42,13 +30,11 @@ roomId, playerIds, playerNamesById, - recipientPlayerIds, gameSession, bombStore, onGameEnd, output, }: StartGameUseCaseParams) => { - const updateRecipients = recipientPlayerIds ?? playerIds; const handleBotBombAction = createBotBombActionHandler({ roomId, bombStore, @@ -68,18 +54,7 @@ { onTick: (tickData) => { if (tickData.playerUpdates.length > 0) { - updateRecipients.forEach((playerId) => { - const updatesForPlayer = excludeRecipientFromPlayerUpdates( - tickData.playerUpdates, - playerId, - ); - - if (updatesForPlayer.length === 0) { - return; - } - - output.publishUpdatePlayersToSocket(playerId, updatesForPlayer); - }); + output.publishUpdatePlayersToRoom(roomId, tickData.playerUpdates); } if (tickData.cellUpdates.length > 0) { diff --git a/apps/server/src/network/handlers/game/createGameOutputAdapter.ts b/apps/server/src/network/handlers/game/createGameOutputAdapter.ts index c8f85b3..4832f45 100644 --- a/apps/server/src/network/handlers/game/createGameOutputAdapter.ts +++ b/apps/server/src/network/handlers/game/createGameOutputAdapter.ts @@ -50,13 +50,13 @@ publishPongToSocket: (payload: PongPayload) => { common.emitToSocket(protocol.SocketEvents.PONG, payload); }, - publishUpdatePlayersToSocket: ( - socketId: string, + publishUpdatePlayersToRoom: ( + roomId: RoomId, players: UpdatePlayersPayload, ) => { const sanitizedPlayers = sanitizeUpdatePlayersPayload(players); - common.emitToSocketById( - socketId, + common.emitToRoom( + roomId, protocol.SocketEvents.UPDATE_PLAYERS, sanitizedPlayers, );