Class: Miyako::Story
Overview
シーン実行クラス
用意したシーンインスタンスを実行
Defined Under Namespace
Modules: Scene Classes: ScenePool
Constant Summary collapse
- @@sub_scenes =
[:sub_scene, :sub_routine]
Instance Attribute Summary collapse
-
#hand_over ⇒ Object
Returns the value of attribute hand_over.
Instance Method Summary collapse
-
#dispose ⇒ Object
内部の情報を解放する.
-
#get_scene(n, s) ⇒ Object
:nodoc:.
-
#initialize ⇒ Story
constructor
インスタンスの作成 ストーリー情報の初期か 返却値:: 生成したインスタンス.
-
#initialize_copy(obj) ⇒ Object
:nodoc:.
-
#next_label ⇒ Object
:nodoc:.
-
#prev_label ⇒ Object
:nodoc:.
-
#run(n) ⇒ Object
Storyの実行を始める “obj.run(MainScene)”と記述すると、SceneモジュールをmixinしたMainSceneクラスのインスタンスを作成し、評価を始める n:: 最初に実行するシーン名(クラス名を定数で).
-
#upper_label ⇒ Object
:nodoc:.
Constructor Details
Instance Attribute Details
#hand_over ⇒ Object
Returns the value of attribute hand_over.
28 29 30 |
# File 'lib/Miyako/API/story.rb', line 28 def hand_over @hand_over end |
Instance Method Details
#dispose ⇒ Object
内部の情報を解放する
130 131 132 |
# File 'lib/Miyako/API/story.rb', line 130 def dispose @scene_cache.keys.each{|k| @scene_cache[del_symbol].dispose } end |
#get_scene(n, s) ⇒ Object
:nodoc:
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/Miyako/API/story.rb', line 66 def get_scene(n, s) #:nodoc: class_symbol = n.to_s if @scene_cache_list.length == @scene_cache_max del_symbol = @scene_cache_list.shift @scene_cache[del_symbol].dispose @scene_cache.delete(del_symbol) end @scene_cache_list.delete(class_symbol) @scene_cache_list.push(class_symbol) @scene_cache[class_symbol] ||= n.new(self) return @scene_cache[class_symbol] end |
#initialize_copy(obj) ⇒ Object
:nodoc:
60 61 62 63 64 |
# File 'lib/Miyako/API/story.rb', line 60 def initialize_copy(obj) #:nodoc: @stack = @stack.dup @scene_cache = @scene_cache.dup @scene_cache_list = @scene_cache_list.dup end |
#next_label ⇒ Object
:nodoc:
36 37 38 |
# File 'lib/Miyako/API/story.rb', line 36 def next_label #:nodoc: return @next_label end |
#prev_label ⇒ Object
:nodoc:
32 33 34 |
# File 'lib/Miyako/API/story.rb', line 32 def prev_label #:nodoc: return @prev_label end |
#run(n) ⇒ Object
Storyの実行を始める
“obj.run(MainScene)”と記述すると、SceneモジュールをmixinしたMainSceneクラスのインスタンスを作成し、評価を始める
- n
-
最初に実行するシーン名(クラス名を定数で)
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/Miyako/API/story.rb', line 82 def run(n) return nil if n == nil u = nil on = nil @stack = Array.new # reset @hand_over = nil while n != nil @prev_label = on on = n raise MiyakoValueError, "Illegal Script-label name! : #{n}" unless Scene.has_scene?(n.to_s) raise MiyakoValueError, "This scene cannot use for Standard Scene! : #{n}" if n.scene_type != :scene u = get_scene(n, @stack.size) if u == nil u.hand_over = @hand_over @hand_over = nil u.init_inner(@prev_label, self.upper_label) u.setup Miyako.main_loop do bk_n = on n = u.update n, @hand_over = n if n and n.kind_of?(Array) u.render break unless n && on.eql?(n) end u.clear_hand_over u.next = n @next_label = n u.final if n.nil? if @@sub_scenes.include?(u.class.scene_type) && @stack.empty? == false n, u = @stack.pop next end break elsif @@sub_scenes.include?(n.scene_type) @stack.push([on, u]) u = nil else u = nil end end @scene_cache_list.each{|sy| @scene_cache[sy].dispose } @scene_cache.clear @scene_cache_list.clear end |
#upper_label ⇒ Object
:nodoc:
40 41 42 |
# File 'lib/Miyako/API/story.rb', line 40 def upper_label #:nodoc: return @stack.empty? ? nil : @stack.last[0] end |