設計思想と責務
Simpludifyは、TypeScriptのコードで2Dゲームを合理的につくるためのエンジンです。最小の行数や最大の機能数を目標にせず、理解しやすく、一貫していて、柔軟で保守しやすいAPIを優先します。
高水準から低水準へ
既定値とCharacterのような便利なプリセットを用意し、必要ならActor/Componentやrenderer契約へ進めます。短く書くために所有権や失敗時の意味を隠しません。便利さのために同じ機能の別名APIを増やすことも避けます。
ActorとComponentの合成が基本です。イベントは疎結合な通知の道具であり、すべてのゲームロジックをイベント化する必要はありません。盤面配列、状態機械、純粋関数も普通に利用できます。
依存方向
| 層 | 責務 | 持ち込まないもの |
|---|---|---|
| Core | 同期Scene、Actor/Component、入力スナップショット、時刻、イベント、座標、接触 | DOM、Pixi、Node、Electron |
| Web | 非同期準備、描画、ブラウザ入力、DOM UI、フレーム駆動 | Electronの実行依存 |
| ゲーム | 勝敗、盤面、敵、アイテム、ゲーム状態 | エンジン内部の直接操作 |
| ツール・公式サイト | 型検査、テスト、ビルド、配信、説明 | ゲーム実行時の必須サービス |
シミュレーションと描画を分け、Headlessで同じゲームロジックをテストします。明示的なseed・入力・時間によって再現可能にし、型・IDE補完・機械可読CLI診断を活用します。AIによるコード生成や解析もこれらの公開された契約を使い、専用サービスへの依存を必須にしません。
予測可能なライフサイクル
Scene・Actor・Componentが資源を所有し、破棄時に購読・タイマー・入力・表示を解放します。追加の更新は次ステップ、削除・無効化は後続処理へ即時反映します。入力→更新→位置補正と接触→タイマー→Scene callbackの順序を定義します。
Webが非同期準備とキャンセルを担当し、Coreのライフサイクルを同期に保ちます。準備前の失敗は旧Sceneを維持します。コミット後の通知や更新の失敗は変更を自動ロールバックしません。詳細契約は英語Architectureで維持しています。
軽量な衝突、明確な意味
円や矩形で絵を近似し、基本的なゲームの接触と位置補正に集中します。輪郭一致、精密な剛体物理、複雑なCCDを先行実装しません。
近似的な計算を使うことは、APIの順序や寿命が不定でよいことを意味しません。Trigger/Solidの組み合わせ、イベント順序、無効化や破棄時の挙動を明文化し、自動テストで検証します。
実用性の判断基準
実際のゲームで必要性を確認してから機能を追加します。Signal Runは衝突・状態・UIの統合例です。Blockfallは落ち物パズルの統合例で、盤面・回転・行消去を通常のゲームロジックとして実装しています。専用の盤面機能やCollider依存を追加せず、公開APIとヘッドレステストで検証します。
将来の通信との関係
静的配信、外部サービスなしの単体動作、オンライン通信、専用サーバーは別の概念です。通信方式(P2P等)、シミュレーションの実行場所、状態の権威(プレイヤーホスト・サーバー等)も独立して検討します。現在ネットワークAPIは実装していません。DOM非依存Coreの境界を維持して将来の選択肢を残します。