まだお勉強中 *現状整理 [#r4754381] 分析の観点で考えています。実装とは大幅に異なる可能性があります。 描画に関する主要な機能は3+αのエンジンに分けられる。 仮にUrd/Berd/Skuldとする。 **Urd [#l623cdac] |RIGHT:~一言で言うと|descript.txt + surface.txt + SSPの設定| |RIGHT:~責務|永続化readonlyデータの保持、管理| |RIGHT:~持っているデータ|サーフェイス毎の定義(collision, animation, element)、キャラクタ毎の定義(alignmenttodesktop, defaultsurface等)| |RIGHT:~提供するサービス|データのread、永続化| **Berd [#ua6d01e3] |RIGHT:~一言で言うと|起動中のプロパティ値| |RIGHT:~責務|各種プロパティ値の保持、値変更の際のイベント発行| |RIGHT:~持っているデータ|喋り速度、スケール、透明度、キャラ毎の現在のサーフェイス、alignment、位置| |RIGHT:~提供するサービス|データのread/write、イベント発行| **Skuld [#o329dd00] |RIGHT:~一言で言うと|スケジューラ| |RIGHT:~責務|タイムラインの保持、実行(決められた時刻に決められたコマンドを呼ぶ)| |RIGHT:~持っているデータ|タイムライン(何ms後に何をするか)| |RIGHT:~提供するサービス|タイムラインの実行| *** タイムラインから呼ばれるコマンド [#n63a410e] SakuraScriptに明示的に書くコマンドの他に、以下のようなものもある。 - neverでないアニメーション終了時に、次のアニメーション開始タイミングを決める - バルーン、選択肢等のタイムアウト **その他 [#w72aad04] *** SakuraScriptパーサ [#p6c27327] 文法解釈し、全てのコマンドをタイムライン上に並べていく。実際は分解する所までしかやらないで、一つのコマンドが終わったら、次のコマンドを実行すべき時間が確定するのかな? *** レンダラー [#o30922e0] 必要な描画作業を行う。 * ユースケース [#q886c7e8] * シナリオ [#q886c7e8] あんなこといいな、できたらいいな? ** CROWの動的SERIKO [#k2ae3447] 起動中のゴーストが自らsurface.txtを書き換える。 ネットワークから動的にダウンロードするゴーストや、複雑な成長をするゴースト。 ** ゴーストエディタ [#v9356c66] - 起動中のゴーストのsurface.txtを書き換えて、ワンクリックでテストしてセーブ。 - SHIORIレスでアニメーション定義だけをごりごり書いてデバッグできるツール。 ** こないだの重力ゴースト [#icd014cd] 起動中のゴーストにmoveを外部から送ったり、さらに上書き的にmoveさせたり、特定の位置まで動かしてから外部ツールが何かをしたり(同期が必要、の意)。 ** デスクトップNScripter [#zc962ea9] 特に今と変わらないけど、例えばバルーンレス(デスクトップに直接書いちゃう)とか。 *方針 [#f37d8a24] ***BerdとUrdの一体化 [#sdbd9764] 全部ファイルで永続化。ゴースト側から読み書き可能にする。 多分もうなってるんじゃないかな。 ***APIは非同期 [#wa27b7c6] タイムラインをバイパスしていきなりコマンド呼ぶのはリスキーな気がする。 とすると、呼び出し時はSkuldに渡して、必要に応じてイベントを発行してもらう。