Module: Miyako::SimpleStory::Scene
- Defined in:
- lib/Miyako/API/simple_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メソッドと対になっているというイメージ.
-
#execute ⇒ Object
シーンの情報を更新するテンプレートメソッド.
-
#hand_over ⇒ Object
前シーンから引き継いだオブジェクトを参照する.
- #hand_over=(obj) ⇒ Object
-
#init ⇒ Object
シーン内で使用するオブジェクトの初期化テンプレートメソッド シーン内で使用するインスタンスを生成するときなどにこのメソッドを実装する.
-
#init_inner(p, u) ⇒ Object
:nodoc:.
-
#initialize(story, handover, 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クラスインスタンス).
-
#story ⇒ Object
前回実行したシーンを返す 前回実行しているシーンをクラス名で返す 但し、最初のシーンの場合はnilを返す 返却値:: 前回実行したシーン名(Classクラスインスタンス).
-
#upper_scene ⇒ Object
サブルーチンの呼び元シーンを返す サブルーチンを呼び出したシーンをクラス名で返す サブルーチンではないときはnilを返す 返却値:: 前回実行したシーン名(Classクラスインスタンス).
Class Method Details
.has_scene?(s) ⇒ Boolean
:nodoc:
144 145 146 |
# File 'lib/Miyako/API/simple_story.rb', line 144 def self.has_scene?(s) #:nodoc: return @@scenes.has_key?(s) end |
.included(c) ⇒ Object
:nodoc:
131 132 133 134 135 136 137 138 |
# File 'lib/Miyako/API/simple_story.rb', line 131 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メソッドの内容)”という書式で取得できる
- 返却値
-
リストアップしたシーンの配列
245 246 247 248 249 250 |
# File 'lib/Miyako/API/simple_story.rb', line 245 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ファイルパス
254 255 256 257 258 |
# File 'lib/Miyako/API/simple_story.rb', line 254 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:
140 141 142 |
# File 'lib/Miyako/API/simple_story.rb', line 140 def self.scenes #:nodoc: return @@scenes end |
Instance Method Details
#clear_hand_over ⇒ Object
178 179 180 |
# File 'lib/Miyako/API/simple_story.rb', line 178 def clear_hand_over @@pool[self.object_id].hand_over = nil end |
#dispose ⇒ Object
シーンに使用したデータの解放を記述するテンプレートメソッド
initメソッドと対になっているというイメージ
226 227 |
# File 'lib/Miyako/API/simple_story.rb', line 226 def dispose end |
#execute ⇒ Object
シーンの情報を更新するテンプレートメソッド
現在実行しているシーンを繰り返し実行する場合はインスタンス変数@nowを返すように実装する nilを返すとシーンの処理を終了する(元のStory#runメソッド呼び出しの次に処理が移る) 但し、scene_typeメソッドの結果が:sub_routneのとき、移動元シーンに戻る
- 返却値
-
移動先シーンクラス
220 221 222 |
# File 'lib/Miyako/API/simple_story.rb', line 220 def execute return now_scene end |
#hand_over ⇒ Object
前シーンから引き継いだオブジェクトを参照する
169 170 171 |
# File 'lib/Miyako/API/simple_story.rb', line 169 def hand_over return @@pool[self.object_id].hand_over end |
#hand_over=(obj) ⇒ Object
173 174 175 176 |
# File 'lib/Miyako/API/simple_story.rb', line 173 def hand_over=(obj) @@pool[self.object_id].hand_over = obj @@pool[self.object_id].story.hand_over = obj end |
#init ⇒ Object
シーン内で使用するオブジェクトの初期化テンプレートメソッド
シーン内で使用するインスタンスを生成するときなどにこのメソッドを実装する
211 212 |
# File 'lib/Miyako/API/simple_story.rb', line 211 def init end |
#init_inner(p, u) ⇒ Object
:nodoc:
155 156 157 158 |
# File 'lib/Miyako/API/simple_story.rb', line 155 def init_inner(p, u) #:nodoc: @@pool[self.object_id].prev = p @@pool[self.object_id].upper = u end |
#initialize(story, handover, check_only = false) ⇒ Object
:nodoc:
148 149 150 151 152 153 |
# File 'lib/Miyako/API/simple_story.rb', line 148 def initialize(story, handover, check_only=false) #:nodoc: return if check_only @@pool[self.object_id] = Miyako::Story::ScenePool.new(story, nil, nil, nil, handover) @now = self.now_scene self.init end |
#next=(label) ⇒ Object
:nodoc:
229 230 231 |
# File 'lib/Miyako/API/simple_story.rb', line 229 def next=(label) #:nodoc: @@pool[self.object_id].next = label end |
#next_scene ⇒ Object
:nodoc:
190 191 192 |
# File 'lib/Miyako/API/simple_story.rb', line 190 def next_scene #:nodoc: return @@pool[self.object_id].next end |
#notice ⇒ Object
シーンの解説を返す(テンプレートメソッド)
Sceneモジュールをmixinしたとき、解説文を返す実装をしておくと、 Scene.#lisutupメソッドを呼び出したときに、noticeメソッドの結果を取得できる
- 返却値
-
シーンの解説(文字列)
237 238 239 |
# File 'lib/Miyako/API/simple_story.rb', line 237 def notice return "" end |
#now_scene ⇒ Object
現在実行中のシーンを返す
現在実行しているシーンをクラス名で返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
205 206 207 |
# File 'lib/Miyako/API/simple_story.rb', line 205 def now_scene return self.class end |
#prev_scene ⇒ Object
前回実行したシーンを返す
前回実行しているシーンをクラス名で返す 但し、最初のシーンの場合はnilを返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
198 199 200 |
# File 'lib/Miyako/API/simple_story.rb', line 198 def prev_scene return @@pool[self.object_id].prev end |
#story ⇒ Object
前回実行したシーンを返す
前回実行しているシーンをクラス名で返す 但し、最初のシーンの場合はnilを返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
164 165 166 |
# File 'lib/Miyako/API/simple_story.rb', line 164 def story @@pool[self.object_id].story end |
#upper_scene ⇒ Object
サブルーチンの呼び元シーンを返す
サブルーチンを呼び出したシーンをクラス名で返す サブルーチンではないときはnilを返す
- 返却値
-
前回実行したシーン名(Classクラスインスタンス)
186 187 188 |
# File 'lib/Miyako/API/simple_story.rb', line 186 def upper_scene return @@pool[self.object_id].upper end |