設計思想と責務

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の境界を維持して将来の選択肢を残します。