diff --git "a/docs/02_ENV/ENV_02_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240.txt" "b/docs/02_ENV/ENV_02_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240.txt" index 972528f..2e27b2a 100644 --- "a/docs/02_ENV/ENV_02_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240.txt" +++ "b/docs/02_ENV/ENV_02_\343\203\207\343\202\243\343\203\254\343\202\257\343\203\210\343\203\252\346\247\213\351\200\240.txt" @@ -8,87 +8,79 @@ ソースコード構造を定義する. プロジェクト全体の構成(設定ファイル・インフラ)については ENV_01 を参照すること. +記載粒度: 全フォルダを漏れなく記載する.ファイルはエントリーポイント(index.ts・main.tsx 等)のみ明記する. +フォルダを追加・削除・移動した場合は本ドキュメントを合わせて更新すること. + 2. クライアント (apps/client/src) ------------------------------------------------------------------------ 2-1. 構成一覧 + src/ - ├── app.tsx # ルートUI - ├── index.css # 全体スタイル - ├── main.tsx # 起動エントリ - ├── vite-env.d.ts # Vite型定義 - ├── assets/ # 画像素材 - ├── components/ - │ └── LandscapeOnlyGate.tsx # 横向き制御ゲート - ├── config/ - │ └── index.ts # クライアント設定 - ├── hooks/ - │ ├── useAppFlow.ts # 画面遷移フック - │ ├── useSocketSubscriptions.ts # WS購読フック - │ ├── application/ # アプリケーション層フック - │ └── types/ # フック型定義 - ├── network/ - │ ├── SocketManager.ts # WSクライアント - │ └── handlers/ - │ ├── CommonHandler.ts # 共通WSハンドラ - │ ├── GameHandler.ts # ゲームWSハンドラ - │ ├── GameSyncHandler.ts # ゲーム同期ハンドラ - │ ├── LobbyHandler.ts # ロビーWSハンドラ - │ ├── TitleHandler.ts # タイトルWSハンドラ - │ └── socketEventBridge.ts # イベントブリッジ - ├── styles/ - │ └── safeArea.ts # セーフエリア定義 - └── scenes/ - ├── game/ - │ ├── GameManager.ts # ゲーム制御 - │ ├── GameScene.tsx # ゲーム画面 - │ ├── GameView.tsx # ゲーム描画 - │ ├── application/ # ゲームアプリケーション層 - │ ├── entities/ - │ │ ├── bomb/ # 爆弾エンティティ - │ │ ├── hurricane/ # ハリケーンエンティティ - │ │ ├── map/ - │ │ │ ├── GameMapController.ts # マップ制御 - │ │ │ ├── GameMapModel.ts # マップモデル - │ │ │ └── GameMapView.ts # マップ描画 - │ │ └── player/ - │ │ ├── PlayerController.ts # プレイヤー制御 - │ │ ├── PlayerModel.ts # プレイヤーモデル - │ │ ├── PlayerRepository.ts # プレイヤーリポジトリ - │ │ └── PlayerView.ts # プレイヤー描画 - │ ├── hooks/ # ゲーム画面フック - │ ├── input/ - │ │ ├── GameInputOverlay.tsx # 入力オーバーレイ - │ │ ├── bomb/ # 爆弾ボタンUI - │ │ ├── hooks/ # 入力共通フック - │ │ ├── minimap/ # ミニマップUI - │ │ ├── joystick/ - │ │ │ ├── common/ # スティック定数・型 - │ │ │ ├── model/ # スティックモデル - │ │ │ ├── hooks/ # スティック制御フック - │ │ │ └── presentation/ # スティック描画 - │ │ └── presentation/ # 入力UI共通表示 - │ ├── presentation/ # ゲームHUD - │ └── styles/ # ゲーム画面スタイル - ├── lobby/ - │ ├── LobbyScene.tsx # ロビー画面 - │ ├── components/ # モーダル・設定UI - │ ├── presentation/ # ロビー表示ロジック - │ └── styles/ # ロビースタイル - ├── result/ - │ ├── ResultScene.tsx # 結果画面 - │ ├── components/ # ランキング・統計表示 - │ ├── hooks/ # 結果画面フック - │ ├── styles/ # 結果画面スタイル - │ └── types/ # 結果画面型定義 - ├── shared/ - │ └── styles/ # シーン共通スタイル - └── title/ - └── TitleScene.tsx # タイトル画面 + ├── main.tsx # 起動エントリ + ├── app.tsx # ルートUI + ├── components/ # 共通コンポーネント + ├── config/ # クライアント設定 + ├── hooks/ # グローバルフック + │ ├── application/ # アプリケーション層フック + │ └── types/ # フック型定義 + ├── network/ # サーバー通信層 + │ └── handlers/ # WSハンドラ・イベントブリッジ + ├── styles/ # 全体スタイル + └── scenes/ # 画面シーン群 + ├── game/ # ゲーム画面 + │ ├── application/ # ゲームアプリケーション層 + │ │ ├── assets/ # ゲームアセット管理 + │ │ ├── combat/ # 戦闘処理 + │ │ ├── culling/ # 描画カリング + │ │ ├── lifecycle/ # ライフサイクル管理 + │ │ ├── loopSteps/ # ゲームループステップ + │ │ ├── network/ # ゲームネットワーク処理 + │ │ │ ├── adapters/ # ネットワークアダプタ + │ │ │ ├── handlers/ # ネットワークハンドラ + │ │ │ └── receivers/ # 受信処理 + │ │ ├── orchestrators/ # オーケストレータ + │ │ ├── runtime/ # ランタイム管理 + │ │ ├── time/ # 時刻・タイマー管理 + │ │ └── ui/ # UI制御 + │ ├── entities/ # 描画・状態管理エンティティ + │ │ ├── bomb/ # 爆弾エンティティ + │ │ ├── hurricane/ # ハリケーンエンティティ + │ │ ├── map/ # マップエンティティ + │ │ └── player/ # プレイヤーエンティティ + │ ├── hooks/ # ゲーム画面フック + │ ├── input/ # 入力UI群 + │ │ ├── bomb/ # 爆弾ボタンUI + │ │ │ ├── hooks/ # 爆弾ボタンフック + │ │ │ └── presentation/ # 爆弾ボタン表示 + │ │ ├── hooks/ # 入力共通フック + │ │ ├── joystick/ # ジョイスティックUI + │ │ │ ├── common/ # スティック定数・型 + │ │ │ ├── hooks/ # スティック制御フック + │ │ │ ├── model/ # スティックモデル + │ │ │ └── presentation/ # スティック描画 + │ │ ├── minimap/ # ミニマップUI + │ │ │ ├── hooks/ # ミニマップフック + │ │ │ └── presentation/ # ミニマップ表示 + │ │ └── presentation/ # 入力UI共通表示 + │ ├── presentation/ # ゲームHUD + │ └── styles/ # ゲーム画面スタイル + ├── lobby/ # ロビー画面 + │ ├── components/ # ロビーUIコンポーネント + │ ├── presentation/ # ロビー表示ロジック + │ └── styles/ # ロビースタイル + ├── result/ # リザルト画面 + │ ├── components/ # リザルトUIコンポーネント + │ ├── hooks/ # リザルト画面フック + │ ├── styles/ # リザルト画面スタイル + │ └── types/ # リザルト画面型定義 + ├── shared/ # シーン間共通リソース + │ └── styles/ # シーン共通スタイル + └── title/ # タイトル画面 2-2. 設計方針 - ・scenes/ 配下にシーン単位(title, lobby, game, result)で分割する + ・scenes/ 配下にシーン単位(title,lobby,game,result)で分割する ・各シーンは MVC ベースの構成とし,entities/ に描画対象を集約する ・network/ 層がサーバーとの通信を担当し,scenes/ 内から直接 protocol を参照しない @@ -97,82 +89,55 @@ ------------------------------------------------------------------------ 3-1. 構成一覧 + src/ - ├── index.ts # サーバー起点 - ├── application/ - │ └── coordinators/ # アプリ統合制御 - ├── common/ # 共通ユーティリティ - ├── config/ # サーバー設定 - ├── logging/ - │ ├── logger.ts # ログ出力 - │ ├── constants/ # ログ定数 - │ └── contracts/ # ログ契約型 - ├── domains/ - │ ├── game/ - │ │ ├── GameManager.ts # ゲーム状態管理 - │ │ ├── application/ - │ │ │ ├── ports/ - │ │ │ │ └── gameUseCasePorts.ts # ユースケース入出力境界 - │ │ │ ├── services/ - │ │ │ │ ├── GameSessionLifecycleService.ts # セッション管理 - │ │ │ │ ├── GamePlayerOperationService.ts # プレイヤー操作 - │ │ │ │ ├── GameRoomSession.ts # ルームセッション - │ │ │ │ ├── TeamAssignmentService.ts # チーム割当 - │ │ │ │ ├── currentPlayersBootstrapBuilder.ts # 初期プレイヤー構築 - │ │ │ │ ├── gameResultCalculator.ts # 結果算出 - │ │ │ │ └── bot/ # Bot AIシステム - │ │ │ └── useCases/ # ゲームユースケース - │ │ ├── entities/ - │ │ │ ├── bomb/ # 爆弾エンティティ - │ │ │ ├── map/ - │ │ │ │ └── MapStore.ts # マップ状態保持 - │ │ │ └── player/ - │ │ │ └── Player.ts # サーバーPlayer - │ │ └── loop/ - │ │ ├── GameLoop.ts # 固定ループ (20Hz) - │ │ ├── HurricaneSystem.ts # ハリケーン制御 - │ │ └── hurricane/ # ハリケーン詳細処理 - │ └── room/ - │ ├── RoomManager.ts # ルーム管理 - │ └── application/ - │ ├── ports/ - │ │ └── roomUseCasePorts.ts # ユースケース入出力境界 - │ ├── services/ # ルームサービス群 - │ └── useCases/ # ルームユースケース - └── network/ - ├── SocketManager.ts # WS接続管理 - ├── adapters/ - │ ├── socketEmitters.ts # 送信アダプタ - │ ├── gamePayloadSanitizers.ts # ゲームペイロード検証・整形 - │ └── realtimeRoomSyncState.ts # リアルタイムルーム同期状態 - ├── handlers/ - │ ├── CommonHandler.ts # 共通WSハンドラ - │ ├── connectionEventLogger.ts # 接続イベントログ - │ ├── createOutputAdapters.ts # 出力アダプタ生成 - │ ├── eventDefinitionRegistrar.ts # イベント定義登録 - │ ├── orchestratorEventLogger.ts # オーケストレータログ - │ ├── payloadGuard.ts # ペイロードガード - │ ├── registerConnectionHandlers.ts # 接続ハンドラ登録 - │ ├── socketEventBridge.ts # イベントブリッジ - │ ├── registration/ # 接続登録コンテキスト - │ ├── game/ - │ │ ├── registerGameHandlers.ts # ゲーム受信イベント配線 - │ │ ├── createGameOutputAdapter.ts # ゲーム出力アダプタ生成 - │ │ ├── gameEventOrchestrators.ts # ゲームイベントオーケストレータ - │ │ ├── aoi/ # 視認範囲フィルタ処理 - │ │ ├── runtime/ # ゲームランタイム解決 - │ │ └── services/ # ゲーム同期サービス群 - │ └── room/ - │ ├── registerRoomHandlers.ts # ルーム受信イベント配線 - │ ├── createRoomOutputAdapter.ts # ルーム出力アダプタ生成 - │ └── roomEventOrchestrators.ts # ルームイベントオーケストレータ - ├── bootstrap/ - │ ├── boot.ts # 起動配線 - │ ├── createHttpServer.ts # HTTP生成 - │ ├── createIo.ts # Socket.IO生成 - │ └── createServerRuntime.ts # ランタイム生成 - ├── types/ # ネットワーク型定義 - └── validation/ # ペイロード検証 + ├── index.ts # サーバー起点 + ├── application/ # アプリケーション統合層 + │ └── coordinators/ # アプリ統合制御 + ├── common/ # 共通ユーティリティ + ├── config/ # サーバー設定 + ├── logging/ # ログ出力基盤 + │ ├── constants/ # ログ定数 + │ └── contracts/ # ログ契約型 + ├── domains/ # ビジネスロジック層 + │ ├── game/ # ゲームドメイン + │ │ ├── application/ # ゲームアプリケーション層 + │ │ │ ├── ports/ # ユースケース入出力境界 + │ │ │ ├── services/ # ゲームサービス群 + │ │ │ │ └── bot/ # Bot AIシステム + │ │ │ │ ├── adapters/ # Botアダプタ + │ │ │ │ ├── combat/ # Bot戦闘行動 + │ │ │ │ ├── movement/ # Bot移動処理 + │ │ │ │ ├── orchestrators/ # Botオーケストレータ + │ │ │ │ ├── policies/ # Bot行動ポリシー + │ │ │ │ ├── roster/ # Bot管理・編成 + │ │ │ │ ├── state/ # Bot状態管理 + │ │ │ │ └── types/ # Bot型定義 + │ │ │ └── useCases/ # ゲームユースケース + │ │ ├── entities/ # ゲームエンティティ + │ │ │ ├── bomb/ # 爆弾エンティティ + │ │ │ ├── map/ # マップ状態 + │ │ │ └── player/ # プレイヤーエンティティ + │ │ └── loop/ # ゲームループ + │ │ └── hurricane/ # ハリケーン詳細処理 + │ └── room/ # ルームドメイン + │ └── application/ # ルームアプリケーション層 + │ ├── ports/ # ユースケース入出力境界 + │ ├── services/ # ルームサービス群 + │ └── useCases/ # ルームユースケース + └── network/ # Socket.IO通信層 + ├── adapters/ # 送信アダプタ群 + ├── bootstrap/ # 起動配線 + ├── handlers/ # イベントハンドラ群 + │ ├── game/ # ゲームイベントハンドラ + │ │ ├── aoi/ # 視認範囲フィルタ処理 + │ │ ├── input/ # ゲーム入力ハンドラ + │ │ ├── runtime/ # ゲームランタイム解決 + │ │ └── services/ # ゲーム同期サービス群 + │ ├── registration/ # 接続登録コンテキスト + │ └── room/ # ルームハンドラ群 + ├── types/ # ネットワーク型定義 + └── validation/ # ペイロード検証 3-2. 設計方針 ・domains/ にビジネスロジックを集約し,game/ と room/ に分離する @@ -185,47 +150,22 @@ ------------------------------------------------------------------------ 4-1. 構成一覧 + src/ - ├── index.ts # 共有エクスポート - ├── config/ - │ ├── index.ts # 設定エクスポート - │ ├── gameConfig.ts # 共通定数 - │ ├── networkConfig.ts # 通信設定 - │ └── teamValidators.ts # チーム検証 - ├── domains/ - │ ├── app/ - │ │ ├── app.const.ts # アプリ定数 - │ │ └── app.type.ts # アプリ型 - │ ├── game/ - │ │ ├── aoi/ # 視認範囲 (Area of Interest) - │ │ ├── bombHit/ # 爆弾判定ロジック・型 - │ │ ├── gridMap/ - │ │ │ ├── gridMap.logic.ts # マップ計算 - │ │ │ ├── gridMap.type.ts # マップ型定義 - │ │ │ └── groupedCellUpdates.ts # セル更新グループ化 - │ │ ├── player/ - │ │ │ ├── player.type.ts # プレイヤー型 - │ │ │ └── moveSync.ts # 移動同期ロジック - │ │ └── tick/ # ティックシステム - │ └── room/ - │ ├── room.const.ts # ルーム定数 - │ └── room.type.ts # ルーム型 - └── protocol/ - ├── socketEvents.ts # イベント名定義 - ├── eventPayloads.ts # ペイロード再公開 - ├── eventPayloadMaps.ts # 型マッピング - ├── socketEventBridge.ts # 型安全ブリッジ - ├── events.ts # イベント再公開 - ├── bombIdentity.ts # 爆弾一意性保証 - ├── payloads/ - │ ├── commonPayloads.ts # 共通ペイロード型 - │ ├── gamePayloads.ts # ゲームペイロード型 - │ ├── lobbyPayloads.ts # ロビーペイロード型 - │ └── playerHitEffectPayloads.ts # ヒットエフェクト型 - └── maps/ - ├── commonEventPayloadMap.ts # 共通イベントマップ - ├── gameEventPayloadMap.ts # ゲームイベントマップ - └── lobbyEventPayloadMap.ts # ロビーイベントマップ + ├── index.ts # 共有エクスポート + ├── config/ # 共通設定・定数 + ├── domains/ # 共有ドメインロジック + │ ├── app/ # アプリ定数・型 + │ ├── game/ # ゲームドメイン共有ロジック + │ │ ├── aoi/ # 視認範囲ロジック + │ │ ├── bombHit/ # 爆弾判定ロジック + │ │ ├── gridMap/ # マップ計算・型 + │ │ ├── player/ # プレイヤー型・移動同期 + │ │ └── tick/ # ティックシステム + │ └── room/ # ルーム定数・型 + └── protocol/ # ソケットイベント定義 + ├── maps/ # イベント方向別型マップ + └── payloads/ # イベントペイロード型 4-2. 設計方針 ・client と server の両方から import される「真実の定義場所」として機能する