diff --git a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts index 9b04c4f..8a924fe 100644 --- a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts +++ b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts @@ -8,6 +8,7 @@ BombPlacedPayload, HurricaneHitPayload, PlayerHitPayload, + CurrentHurricanesPayload, UpdateHurricanesPayload, domain, PlaceBombPayload, @@ -71,7 +72,7 @@ ): void; publishCurrentHurricanesToRoom( roomId: domain.room.Room["roomId"], - hurricanes: UpdateHurricanesPayload, + hurricanes: CurrentHurricanesPayload, ): void; publishUpdateHurricanesToRoom( roomId: domain.room.Room["roomId"], diff --git a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts index 733ba8d..cd8ff80 100644 --- a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts @@ -38,13 +38,13 @@ }; type TickPublishStep = { - key: "hurricaneSnapshot" | "hurricaneDelta" | "player" | "map"; + key: "currentHurricanes" | "updateHurricanes" | "player" | "map"; run: (params: TickUpdatePublishParams) => void; }; const TICK_PUBLISH_STEPS: TickPublishStep[] = [ { - key: "hurricaneSnapshot", + key: "currentHurricanes", run: ({ roomId, output, tickData }) => { if (tickData.hurricaneSync.snapshotUpdates.length === 0) { return; @@ -57,7 +57,7 @@ }, }, { - key: "hurricaneDelta", + key: "updateHurricanes", run: ({ roomId, output, tickData }) => { if (tickData.hurricaneSync.deltaUpdates.length === 0) { return; diff --git a/apps/server/src/domains/game/loop/HurricaneSystem.ts b/apps/server/src/domains/game/loop/HurricaneSystem.ts index 8d78a13..4f0b946 100644 --- a/apps/server/src/domains/game/loop/HurricaneSystem.ts +++ b/apps/server/src/domains/game/loop/HurricaneSystem.ts @@ -264,7 +264,10 @@ return min + Math.random() * Math.max(0, max - min); } - /** スナップショット同期が必要なら全量ペイロードを返す */ + /** + * current-hurricanes 用の全量同期を返す + * 初回同期と定期再同期の両方で同じ全量ペイロードを利用する + */ private consumeSnapshotUpdates(elapsedMs: number): HurricaneStatePayload[] { if (this.hurricanes.length === 0) { return []; diff --git a/apps/server/src/network/handlers/game/createGameOutputAdapter.ts b/apps/server/src/network/handlers/game/createGameOutputAdapter.ts index d25cf3c..dd718e4 100644 --- a/apps/server/src/network/handlers/game/createGameOutputAdapter.ts +++ b/apps/server/src/network/handlers/game/createGameOutputAdapter.ts @@ -13,6 +13,7 @@ HurricaneHitPayload, PlayerHitPayload, PongPayload, + CurrentHurricanesPayload, CurrentPlayersPayload, RemovePlayerPayload, UpdateHurricanesPayload, @@ -107,7 +108,7 @@ }, publishCurrentHurricanesToRoom: ( roomId: RoomId, - hurricanes: UpdateHurricanesPayload, + hurricanes: CurrentHurricanesPayload, ) => { emitReliableToRoom(roomId, protocol.SocketEvents.CURRENT_HURRICANES, hurricanes); },