アーキテクチャ
SKYWARDは描画、決定論的シミュレーション、判断ポリシー、ゲートウェイ境界を分離し、リモート判断が遅くても飛び続けられるようにしています。
実行の流れ
text
Three.js renderer (requestAnimationFrame)
▲ 現在の状態を参照
│
simulation state (60Hz) ── observe() ── telemetry
▲ │
│ controlsForDecision() │ 非同期 /api/decide
│ ▼
localDecision() ◄── fallback ◄── Express + JevClientシミュレーション契約
src/simulation.ts が固定ステップの物理を担当します。機体姿勢、スロットル、目標、弾丸、掃引衝突、地形警告、失速回復、フレア、score、勝敗を扱います。observe() は戦術テレメトリを作り、localDecision() はネットワークなしで決定論的に判断します。
ブラウザは物理を60Hzで進め、Three.jsの海・島・空、HUD、レーダー、カメラを描画します。JEVの回答は操縦入力へ変換されますが、物理時計を置き換えません。
ゲートウェイ境界
server/index.ts は 127.0.0.1:4173 に GET /api/status と POST /api/decide を公開します。server/validation.ts が不正または無制限のテレメトリを拒否し、server/jev.ts がキーをサーバーで読み、Choice/Boolean/Scoreを解析し、期限と安全なエラーを管理します。
公開・静的境界
Pagesサイトはゲームの説明と /play/ の静的な手動/ローカルAI体験を公開します。公開静的ページが AI_GATEWAY_API_KEY を露出しないよう、JEVはローカルNodeサーバーの機能です。
元構想や描画調査はGitHubの恒久的な調査記録を参照してください。