サイログ。

~雑多な記事置き場~

Yukiに「ページ機能」を追加しました

Yukiに新しい概念として「ページ」を追加しました。
ただし、これは必須ではなくオプション的機能です。必ず使う必要はありません。

「ページ」とは?

簡単に言うと、「Yukiスクリプトの区切り」です。
適当な連続するスクリプトを括って、名前を付けることが出来ます。

たとえば、ひとつのシナリオに、「A」「B」「C」の3つのページがあるとします。
イメージとしてはこんな感じです。

yuki_plot{
ページ :A
ページ :B
ページ :C
}

  • 最初から実行する
  • セーブ時はBまで進んだので、Aをすっ飛ばしてBから始める
  • シナリオの流れから、いきなりCから始める

というふうに使えます。

実装

今回、Miyako2.0に3つのメソッドを追加してgithubに登録しました。

ページとして括りたい範囲を、pageメソッドで括ります。引数として、ページの名前を指定します。もちろん、ブロックを渡していなければ例外が発生します。
上記のイメージを実装に近づけると以下のようになります。

yuki_plot{
  page :A do
    :
  end
  page :B do
    :
  end
  page :C do
    :
  end
}

(注1)ちなみに、最初にも書きましたが、必ずpageで括れという話ではありません。直接スクリプトを書くことも出来ます。
(注2)pageメソッドは、ページの最後でpauseメソッドを呼び出します。呼び出したくないときは、第二引数にfalseを指定して下さい。

now_pageメソッドは、現在処理中のページ名を取得することが出来ます。
現在、ページBを実行している時は「:B」が値として返ってきます。ページで括られていない、Yukiが実行されていないときはnilが返ってきます。

次に移動するときですが、select_first_pageメソッドを使います。引数として、移動させたいページを指定します。

# ex1
yuki.select_first_page :B

# ex2
yuki.setup do
  select_first_page :C
end

このように指定すると、次にYukiに実行が移動したときに、指定したページをシーケンシャルに検索します。最後までにページが見つかれば、そのページから処理を開始します。
検索させないとき(キャンセルしたいとき)は、引数にnilを渡します。
(注1)このメソッドは、検索の途中、Yukiスクリプト内でpageメソッドで括られていない箇所があった場合は、それの実行を優先します
(注2)Yukiに実行が移動したときに既にそのページが終了しているときは、Yukiの処理を終了します