Module: Miyako::Story::Scene
- Defined in:
- lib/Miyako/API/story.rb
Overview
シーンモジュール
本モジュールをmixinすることにより、シーンを示すインスタンスを作成することができる mixinするときに気をつけなければいけないのは、本モジュールでは以下の モジュール変数を 予約しているため、これらの変数の値を勝手に変えてはいけない ・@@scenesモジュール変数(シーンクラス一覧が入っているハッシュ) ・@@poolモジュール変数(シーン情報が入っているハッシュ) (互換性のために@nowを残しているが、now_sceneのみを使うときは値を上書きしてもかまわない)) また、シーンには「シーン形式」がある。 種類は、シーケンスな移動が出来る「通常シーン」、終了したときに移動元に戻る「サブシーン」、 現在実行中のシーン上で並行に実行する「オーバーシーン」の3種類。 デフォルトは「通常シーン」となっている。 判別は、scene_typeクラスメソッドを呼び出すことで可能。デフォルトは、 通常シーンを示すシンボル“:scene”が返る。 形式を変えるには、scene_typeクラスメソッドをオーバーライドし、返却値を変える。 サブシーンの時はシンボル“:sub_scene”を返すように実装する (注1)同じクラス名のシーンを繰り返し実行したいときは、いったん別のダミーシーンを 介してから元のシーンへ移動する必要がある (注2)オーバーシーン内では、シーンの移動が出来ないが、入れ子形式で 別のオーバーシーンを積み上げる形なら移動可能。
Constant Summary collapse
- @@scenes =
{}
- @@pool =
{}
Class Method Summary collapse
-
.has_scene?(s) ⇒ Boolean
:nodoc:.
-
.included(c) ⇒ Object
:nodoc:.
-
.listup ⇒ Object
登録しているシーン一覧をリストアップする リストの内容は、“シーンクラス名(文字列),シーンクラス(ポインタ), 解説(noticeメソッドの内容)”という書式で取得できる 返却値:: リストアップしたシーンの配列.
-
.listup2csv(csvfname) ⇒ Object
Scene.#listupメソッドの内容をCSVファイルに保存する csvname:: 保存するCSVファイルパス.
-
.scenes ⇒ Object
:nodoc:.
Instance Method Summary collapse
- #clear_hand_over ⇒ Object
-
#dispose ⇒ Object
シーンに使用したデータの解放を記述するテンプレートメソッド initメソッドと対になっているというイメージ.
-
#final ⇒ Object
シーン内で使用したオブジェクトの後始末を行うテンプレートメソッド ここでは、解放処理(dispose)ではなく、終了処理(値を変更するなど)に実装する setupメソッドと対になっているというイメージ.
-
#hand_over ⇒ Object
前シーンから引き継いだオブジェクトを参照する.
- #hand_over=(obj) ⇒ Object
-
#init ⇒ Object
シーン内で使用するオブジェクトの初期化テンプレートメソッド シーン内で使用するインスタンスを生成するときなどにこのメソッドを実装する.
-
#init_inner(p, u) ⇒ Object
:nodoc:.
-
#initialize(story, handover = nil, check_only = false) ⇒ Object
:nodoc:.
-
#next=(label) ⇒ Object
:nodoc:.
-
#next_scene ⇒ Object
:nodoc:.
-
#notice ⇒ Object
シーンの解説を返す(テンプレートメソッド) Sceneモジュールをmixinしたとき、解説文を返す実装をしておくと、 Scene.#lisutupメソッドを呼び出したときに、noticeメソッドの結果を取得できる 返却値:: シーンの解説(文字列).
-
#now_scene ⇒ Object
現在実行中のシーンを返す 現在実行しているシーンをクラス名で返す 返却値:: 前回実行したシーン名(Classクラスインスタンス).
-
#prev_scene ⇒ Object
前回実行したシーンを返す 前回実行しているシーンをクラス名で返す 但し、最初のシーンの場合はnilを返す 返却値:: 前回実行したシーン名(Classクラスインスタンス).
-
#render ⇒ Object
シーンで指定しているインスタンスを画面に描画するテンプレートメソッド.
-
#setup ⇒ Object
シーン内で使用するオブジェクトの初期設定テンプレートメソッド シーン内で使用するインスタンスの設定を行うときにこのメソッドを実装する (シーン生成時に生成したインスタンスはキャッシュされ、再利用することができることに注意).
-
#story ⇒ Object
前回実行したシーンを返す 前回実行しているシーンをクラス名で返す 但し、最初のシーンの場合はnilを返す 返却値:: 前回実行したシーン名(Classクラスインスタンス).
-
#update ⇒ Object
シーンの情報を更新するテンプレートメソッド.
-
#upper_scene ⇒ Object
サブルーチンの呼び元シーンを返す サブルーチンを呼び出したシーンをクラス名で返す サブルーチンではないときはnilを返す 返却値:: 前回実行したシーン名(Classクラスインスタンス).
Class Method Details
.has_scene?(s) ⇒ Boolean
:nodoc:
174 175 176 |
# File 'lib/Miyako/API/story.rb', line 174 def self.has_scene?(s) #:nodoc: return @@scenes.has_key?(s) end |
.included(c) ⇒ Object
:nodoc:
161 162 163 164 165 166 167 168 |
# File 'lib/Miyako/API/story.rb', line 161 def self.included(c) #:nodoc: unless c.singleton_methods.include?(:scene_type) def c.scene_type return :scene end end @@scenes[c.to_s] = c end |
.listup ⇒ Object
登録しているシーン一覧をリストアップする
リストの内容は、“シーンクラス名(文字列),シーンクラス(ポインタ), 解説(noticeメソッドの内容)”という書式で取得できる
- 返却値
-
リストアップしたシーンの配列
291 292 293 294 295 296 |
# File 'lib/Miyako/API/story.rb', line 291 def self.listup list = Array.new sns = @@scenes sns.keys.sort.each{|k| list.push("#{k}, #{sns[k]}, \"#{sns[k].notice}\"\n") } return list end |
.listup2csv(csvfname) ⇒ Object
Scene.#listupメソッドの内容をCSVファイルに保存する
- csvname
-
保存するCSVファイルパス
300 301 302 303 304 |
# File 'lib/Miyako/API/story.rb', line 300 def self.listup2csv(csvfname) csvfname += ".csv" if csvfname !~ /\.csv$/ list = self.listup File.open(csvfname, "w"){|f| list.each{|l| f.print l } } end |
.scenes ⇒ Object
:nodoc:
170 171 172 |
# File 'lib/Miyako/API/story.rb', line 170 def self.scenes #:nodoc: return @@scenes end |
Instance Method Details
#clear_hand_over ⇒ Object
208 209 210 |
# File 'lib/Miyako/API/story.rb', line 208 def clear_hand_over @@pool[self.object_id].hand_over = nil end |
#dispose ⇒ Object
シーンに使用したデータの解放を記述するテンプレートメソッド
initメソッドと対になっているというイメージ
272 273 |
# File 'lib/Miyako/API/story.rb', line 272 def dispose end |
#final ⇒ Object
シーン内で使用したオブジェクトの後始末を行うテンプレートメソッド
ここでは、解放処理(dispose)ではなく、終了処理(値を変更するなど)に実装する setupメソッドと対になっているというイメージ
267 268 |
# File 'lib/Miyako/API/story.rb', line 267 def final end |
#hand_over ⇒ Object
前シーンから引き継いだオブジェクトを参照する
199 200 201 |
# File 'lib/Miyako/API/story.rb', line 199 def hand_over return @@pool[self.object_id].hand_over end |
#hand_over=(obj) ⇒ Object
203 204 205 206 |
# File 'lib/Miyako/API/story.rb', line 203 def hand_over=(obj) @@pool[self.object_id].hand_over = obj @@pool[self.object_id].story.hand_over = obj end |
#init ⇒ Object
シーン内で使用するオブジェクトの初期化テンプレートメソッド
シーン内で使用するインスタンスを生成するときなどにこのメソッドを実装する
241 242 |
# File 'lib/Miyako/API/story.rb', line 241 def init end |
#init_inner(p, u) ⇒ Object
:nodoc:
185 186 187 188 |
# File 'lib/Miyako/API/story.rb', line 185 def init_inner(p, u) #:nodoc: @@pool[self.object_id].prev = p @@pool[self.object_id].upper = u end |
#initialize(story, handover = nil, check_only = false) ⇒ Object
:nodoc:
178 179 180 181 182 183 |
# File 'lib/Miyako/API/story.rb', line 178 def initialize(story, handover=nil, check_only=false) #:nodoc: return if check_only @@pool[self.object_id] = ScenePool.new(story, nil, nil, nil, handover) @now = self.now_scene self.init end |
#next=(label) ⇒ Object
:nodoc:
275 276 277 |
# File 'lib/Miyako/API/story.rb', line 275 def next=(label) #:nodoc: @@pool[self.object_id].next = label end |
#next_scene ⇒ Object
:nodoc:
220 221 222 |
# File 'lib/Miyako/API/story.rb', line 220 def next_scene #:nodoc: return @@pool[self.object_id].next end |
#notice ⇒ Object
シーンの解説を返す(テンプレートメソッド)
Sceneモジュールをmixinしたとき、解説文を返す実装をしておくと、 Scene.#lisutupメソッドを呼び出したときに、noticeメソッドの結果を取得できる
- 返却値
-
シーンの解説(文字列)
283 284 285 |
# File 'lib/Miyako/API/story.rb', line 283 def notice return "" end |
#now_scene ⇒ Object
現在実行中のシーンを返す
現在実行しているシーンをクラス名で返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
235 236 237 |
# File 'lib/Miyako/API/story.rb', line 235 def now_scene return self.class end |
#prev_scene ⇒ Object
前回実行したシーンを返す
前回実行しているシーンをクラス名で返す 但し、最初のシーンの場合はnilを返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
228 229 230 |
# File 'lib/Miyako/API/story.rb', line 228 def prev_scene return @@pool[self.object_id].prev end |
#render ⇒ Object
シーンで指定しているインスタンスを画面に描画するテンプレートメソッド
261 262 |
# File 'lib/Miyako/API/story.rb', line 261 def render end |
#setup ⇒ Object
シーン内で使用するオブジェクトの初期設定テンプレートメソッド
シーン内で使用するインスタンスの設定を行うときにこのメソッドを実装する (シーン生成時に生成したインスタンスはキャッシュされ、再利用することができることに注意)
247 248 |
# File 'lib/Miyako/API/story.rb', line 247 def setup end |
#story ⇒ Object
前回実行したシーンを返す
前回実行しているシーンをクラス名で返す 但し、最初のシーンの場合はnilを返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
194 195 196 |
# File 'lib/Miyako/API/story.rb', line 194 def story return @@pool[self.object_id].story end |
#update ⇒ Object
シーンの情報を更新するテンプレートメソッド
現在実行しているシーンを繰り返し実行する場合はインスタンス変数@nowを返すように実装する nilを返すとシーンの処理を終了する(元のStory#runメソッド呼び出しの次に処理が移る) 但し、scene_typeメソッドの結果が:sub_routneのとき、移動元シーンに戻る
- 返却値
-
移動先シーンクラス
256 257 258 |
# File 'lib/Miyako/API/story.rb', line 256 def update return now_scene end |
#upper_scene ⇒ Object
サブルーチンの呼び元シーンを返す
サブルーチンを呼び出したシーンをクラス名で返す サブルーチンではないときはnilを返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
216 217 218 |
# File 'lib/Miyako/API/story.rb', line 216 def upper_scene return @@pool[self.object_id].upper end |