cyross-ruby-miyako 2.0.5.1.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +1092 -929
- data/Rakefile +7 -7
- data/defines.h +144 -144
- data/extern.h +29 -29
- data/install_miyako.rb +87 -87
- data/lib/Miyako/API/audio.rb +572 -198
- data/lib/Miyako/API/basic_data.rb +825 -573
- data/lib/Miyako/API/bitmap.rb +534 -507
- data/lib/Miyako/API/choices.rb +481 -475
- data/lib/Miyako/API/collision.rb +486 -460
- data/lib/Miyako/API/diagram.rb +586 -561
- data/lib/Miyako/API/drawing.rb +151 -151
- data/lib/Miyako/API/exceptions.rb +105 -0
- data/lib/Miyako/API/fixedmap.rb +462 -428
- data/lib/Miyako/API/font.rb +430 -403
- data/lib/Miyako/API/input.rb +456 -447
- data/lib/Miyako/API/layout.rb +636 -433
- data/lib/Miyako/API/map.rb +583 -529
- data/lib/Miyako/API/map_event.rb +222 -198
- data/lib/Miyako/API/modules.rb +357 -109
- data/lib/Miyako/API/movie.rb +166 -154
- data/lib/Miyako/API/parts.rb +276 -189
- data/lib/Miyako/API/plane.rb +205 -166
- data/lib/Miyako/API/screen.rb +341 -325
- data/lib/Miyako/API/shape.rb +443 -443
- data/lib/Miyako/API/sprite.rb +771 -752
- data/lib/Miyako/API/sprite_animation.rb +490 -481
- data/lib/Miyako/API/sprite_list.rb +1135 -0
- data/lib/Miyako/API/spriteunit.rb +168 -147
- data/lib/Miyako/API/story.rb +350 -300
- data/lib/Miyako/API/textbox.rb +770 -725
- data/lib/Miyako/API/utility.rb +419 -388
- data/lib/Miyako/API/viewport.rb +189 -139
- data/lib/Miyako/API/yuki.rb +1226 -996
- data/lib/Miyako/EXT/miyako_cairo.rb +62 -62
- data/lib/Miyako/EXT/raster_scroll.rb +138 -138
- data/lib/Miyako/EXT/slides.rb +157 -157
- data/lib/Miyako/miyako.rb +201 -171
- data/lib/Miyako/miyako_require_only.rb +35 -0
- data/miyako_basicdata.c +590 -590
- data/miyako_bitmap.c +1225 -1225
- data/miyako_collision.c +403 -403
- data/miyako_drawing.c +187 -187
- data/miyako_font.c +334 -334
- data/miyako_hsv.c +830 -830
- data/miyako_input_audio.c +254 -0
- data/miyako_layout.c +191 -191
- data/miyako_no_katana.c +1078 -1074
- data/miyako_sprite2.c +431 -0
- data/miyako_transform.c +438 -438
- data/miyako_utility.c +288 -288
- data/sample/Animation1/m1ku.rb +68 -68
- data/sample/Animation2/lex.rb +96 -96
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +328 -386
- data/sample/Room3/blue.rb +297 -297
- data/sample/Room3/ending.rb +180 -180
- data/sample/Room3/green.rb +220 -220
- data/sample/Room3/main.rb +119 -119
- data/sample/Room3/main_component.rb +59 -59
- data/sample/Room3/red.rb +227 -227
- data/sample/Room3/room3.rb +25 -27
- data/sample/Room3/title.rb +184 -184
- data/sample/ball_action_sample.rb +204 -204
- data/sample/blit_rop.rb +70 -70
- data/sample/cairo_sample.rb +25 -25
- data/sample/circle_collision_test.rb +66 -66
- data/sample/collision_test.rb +33 -33
- data/sample/collision_test2.rb +108 -108
- data/sample/fixed_map_test/fixed_map_sample.rb +140 -140
- data/sample/fixed_map_test/readme.txt +72 -72
- data/sample/map_test/chara.rb +58 -58
- data/sample/map_test/main_parts.rb +69 -69
- data/sample/map_test/main_scene.rb +153 -153
- data/sample/map_test/map_manager.rb +75 -75
- data/sample/map_test/map_test.rb +23 -23
- data/sample/map_test/oasis.rb +71 -71
- data/sample/map_test/readme.txt +89 -89
- data/sample/map_test/route.rb +157 -157
- data/sample/map_test/town.rb +74 -74
- data/sample/polygon_test.rb +35 -35
- data/sample/rasterscroll.rb +24 -24
- data/sample/takahashi.rb +42 -42
- data/sample/textbox_sample.rb +189 -189
- data/sample/transform.rb +54 -54
- data/sample/utility_test.rb +73 -73
- data/sample/utility_test2.rb +61 -61
- data/sample/utility_test3.rb +64 -64
- data/sample/utility_test4.rb +73 -73
- data/uninstall_miyako.rb +19 -19
- data/win/miyako_no_katana.so +0 -0
- metadata +7 -2
data/lib/Miyako/API/story.rb
CHANGED
@@ -1,300 +1,350 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
=begin
|
4
|
-
--
|
5
|
-
Miyako v2.
|
6
|
-
Copyright (C) 2007-2009 Cyross Makoto
|
7
|
-
|
8
|
-
This library is free software; you can redistribute it and/or
|
9
|
-
modify it under the terms of the GNU Lesser General Public
|
10
|
-
License as published by the Free Software Foundation; either
|
11
|
-
version 2.1 of the License, or (at your option) any later version.
|
12
|
-
|
13
|
-
This library is distributed in the hope that it will be useful,
|
14
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
-
Lesser General Public License for more details.
|
17
|
-
|
18
|
-
You should have received a copy of the GNU Lesser General Public
|
19
|
-
License along with this library; if not, write to the Free Software
|
20
|
-
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
-
++
|
22
|
-
=end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
@
|
52
|
-
|
53
|
-
|
54
|
-
@
|
55
|
-
|
56
|
-
@
|
57
|
-
|
58
|
-
@
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
uu.
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
@fibers
|
73
|
-
|
74
|
-
@fibers
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
fnum
|
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
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
n
|
146
|
-
|
147
|
-
|
148
|
-
break
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
def
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
def
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
end
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
def
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
def
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
=begin
|
4
|
+
--
|
5
|
+
Miyako v2.1
|
6
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
7
|
+
|
8
|
+
This library is free software; you can redistribute it and/or
|
9
|
+
modify it under the terms of the GNU Lesser General Public
|
10
|
+
License as published by the Free Software Foundation; either
|
11
|
+
version 2.1 of the License, or (at your option) any later version.
|
12
|
+
|
13
|
+
This library is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
Lesser General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU Lesser General Public
|
19
|
+
License along with this library; if not, write to the Free Software
|
20
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
++
|
22
|
+
=end
|
23
|
+
|
24
|
+
require 'singleton'
|
25
|
+
|
26
|
+
module Miyako
|
27
|
+
#==シーン実行クラス
|
28
|
+
#用意したシーンインスタンスを実行
|
29
|
+
class Story
|
30
|
+
|
31
|
+
@@sub_scenes = [:sub_scene, :sub_routine]
|
32
|
+
@@over_scenes = [:over_scene]
|
33
|
+
|
34
|
+
def prev_label #:nodoc:
|
35
|
+
return @prev_label
|
36
|
+
end
|
37
|
+
|
38
|
+
def next_label #:nodoc:
|
39
|
+
return @next_label
|
40
|
+
end
|
41
|
+
|
42
|
+
def upper_label #:nodoc:
|
43
|
+
return @stack.empty? ? nil : @stack.last[0]
|
44
|
+
end
|
45
|
+
|
46
|
+
#===インスタンスの作成
|
47
|
+
#ストーリー情報の初期か
|
48
|
+
#返却値:: 生成したインスタンス
|
49
|
+
def initialize
|
50
|
+
@prev_label = nil
|
51
|
+
@next_label = nil
|
52
|
+
|
53
|
+
@stack = []
|
54
|
+
@fibers = [nil]
|
55
|
+
|
56
|
+
@scene_cache = Hash.new
|
57
|
+
@scene_cache_list = Array.new
|
58
|
+
@scene_cache_max = 20
|
59
|
+
|
60
|
+
@fiber = Proc.new{|sc, num|
|
61
|
+
raise MiyakoValueError, "Illegal Script-label name! : #{sc}" unless Scene.has_scene?(sc.to_s)
|
62
|
+
fnum = nil
|
63
|
+
bk_nn = sc
|
64
|
+
uu = sc.new(self)
|
65
|
+
uu.init_inner(@prev_label, self.upper_label)
|
66
|
+
uu.setup
|
67
|
+
ret = true
|
68
|
+
while ret do
|
69
|
+
nn = uu.update
|
70
|
+
uu.render
|
71
|
+
if fnum && @fibers[fnum]
|
72
|
+
@fibers[fnum].resume(true)
|
73
|
+
elsif nn && !(nn.eql?(uu.class)) && @@over_scenes.include?(nn.scene_type)
|
74
|
+
@fibers << Fiber.new(&@fiber)
|
75
|
+
fnum = @fibers.length - 1
|
76
|
+
@fibers[fnum].resume(nn, fnum)
|
77
|
+
n = bk_nn
|
78
|
+
end
|
79
|
+
break unless nn
|
80
|
+
ret = Fiber.yield
|
81
|
+
end
|
82
|
+
uu.final
|
83
|
+
uu.dispose
|
84
|
+
if (fnum && @fibers[fnum])
|
85
|
+
@fibers[fnum].resume(nil)
|
86
|
+
@fibers[fnum] = nil
|
87
|
+
fnum = nil
|
88
|
+
end
|
89
|
+
@fibers[num] = nil
|
90
|
+
}
|
91
|
+
end
|
92
|
+
|
93
|
+
def initialize_copy(obj) #:nodoc:
|
94
|
+
@stack = @stack.dup
|
95
|
+
@fibers = @fibers.dup
|
96
|
+
@scene_cache = @scene_cache.dup
|
97
|
+
@scene_cache_list = @scene_cache_list.dup
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_scene(n, s) #:nodoc:
|
101
|
+
class_symbol = n.to_s
|
102
|
+
if @scene_cache_list.length == @scene_cache_max
|
103
|
+
del_symbol = @scene_cache_list.shift
|
104
|
+
@scene_cache[del_symbol].dispose
|
105
|
+
@scene_cache.delete(del_symbol)
|
106
|
+
end
|
107
|
+
@scene_cache_list.delete(class_symbol)
|
108
|
+
@scene_cache_list.push(class_symbol)
|
109
|
+
@scene_cache[class_symbol] ||= n.new(self)
|
110
|
+
return @scene_cache[class_symbol]
|
111
|
+
end
|
112
|
+
|
113
|
+
#===Storyの実行を始める
|
114
|
+
#"obj.run(MainScene)"と記述すると、SceneモジュールをmixinしたMainSceneクラスのインスタンスを作成し、評価を始める
|
115
|
+
#_n_:: 最初に実行するシーン名(クラス名を定数で)
|
116
|
+
def run(n)
|
117
|
+
return nil if n == nil
|
118
|
+
u = nil
|
119
|
+
on = nil
|
120
|
+
@stack = Array.new # reset
|
121
|
+
while n != nil
|
122
|
+
@prev_label = on
|
123
|
+
on = n
|
124
|
+
|
125
|
+
raise MiyakoValueError, "Illegal Script-label name! : #{n}" unless Scene.has_scene?(n.to_s)
|
126
|
+
raise MiyakoValueError, "This scene cannot use for Standard Scene! : #{n}" if n.scene_type != :scene
|
127
|
+
u = get_scene(n, @stack.size) if u == nil
|
128
|
+
u.init_inner(@prev_label, self.upper_label)
|
129
|
+
u.setup
|
130
|
+
|
131
|
+
loop do
|
132
|
+
Audio.update
|
133
|
+
Input.update
|
134
|
+
Screen.clear
|
135
|
+
bk_n = on
|
136
|
+
n = u.update
|
137
|
+
u.render
|
138
|
+
if @fibers.first
|
139
|
+
raise MiyakoError, "Double over scene from root!" if n && @@over_scenes.include?(n.scene_type)
|
140
|
+
@fibers.first.resume(true, 0)
|
141
|
+
elsif n && @@over_scenes.include?(n.scene_type)
|
142
|
+
@fibers.clear
|
143
|
+
@fibers << Fiber.new(&@fiber)
|
144
|
+
@fibers.first.resume(n, 0)
|
145
|
+
n = bk_n
|
146
|
+
end
|
147
|
+
Screen.render
|
148
|
+
break unless n && on.eql?(n)
|
149
|
+
end
|
150
|
+
u.next = n
|
151
|
+
@next_label = n
|
152
|
+
u.final
|
153
|
+
if n.nil?
|
154
|
+
if @@sub_scenes.include?(u.class.scene_type) && @stack.empty? == false
|
155
|
+
n, u = @stack.pop
|
156
|
+
next
|
157
|
+
end
|
158
|
+
break
|
159
|
+
elsif @@sub_scenes.include?(n.scene_type)
|
160
|
+
@stack.push([on, u])
|
161
|
+
u = nil
|
162
|
+
else
|
163
|
+
u = nil
|
164
|
+
end
|
165
|
+
end
|
166
|
+
@fibers.each{|fiber| fiber.resume(nil) if fiber } if @fibers.length > 0
|
167
|
+
@scene_cache_list.each{|sy| @scene_cache[sy].dispose }
|
168
|
+
@scene_cache.clear
|
169
|
+
@scene_cache_list.clear
|
170
|
+
end
|
171
|
+
|
172
|
+
#==="over_scene"形式のシーンが実行中かどうか判別する
|
173
|
+
#返却値:: "over_scene"形式のシーンが実行中の時はtrueを返す
|
174
|
+
def over_scene_execute?
|
175
|
+
return @now_fiber != nil
|
176
|
+
end
|
177
|
+
|
178
|
+
#===内部の情報を解放する
|
179
|
+
def dispose
|
180
|
+
@scene_cache.keys.each{|k| @scene_cache[del_symbol].dispose }
|
181
|
+
end
|
182
|
+
|
183
|
+
#==シーン情報格納のための構造体
|
184
|
+
ScenePool = Struct.new(:story, :prev, :next, :upper)
|
185
|
+
|
186
|
+
#==シーンモジュール
|
187
|
+
#本モジュールをmixinすることにより、シーンを示すインスタンスを作成することができる
|
188
|
+
#mixinするときに気をつけなければいけないのは、本モジュールでは以下の
|
189
|
+
#モジュール変数を
|
190
|
+
#予約しているため、これらの変数の値を勝手に変えてはいけない
|
191
|
+
#・@@scenesモジュール変数(シーンクラス一覧が入っているハッシュ)
|
192
|
+
#・@@poolモジュール変数(シーン情報が入っているハッシュ)
|
193
|
+
#(互換性のために@nowを残しているが、now_sceneのみを使うときは値を上書きしてもかまわない))
|
194
|
+
#また、シーンには「シーン形式」がある。
|
195
|
+
#種類は、シーケンスな移動が出来る「通常シーン」、終了したときに移動元に戻る「サブシーン」、
|
196
|
+
#現在実行中のシーン上で並行に実行する「オーバーシーン」の3種類。
|
197
|
+
#デフォルトは「通常シーン」となっている。
|
198
|
+
#判別は、scene_typeクラスメソッドを呼び出すことで可能。デフォルトは、
|
199
|
+
#通常シーンを示すシンボル":scene"が返る。
|
200
|
+
#形式を変えるには、scene_typeクラスメソッドをオーバーライドし、返却値を変える。
|
201
|
+
#サブシーンの時はシンボル":sub_scene"、オーバーシーンのときは
|
202
|
+
#シンボル":over_scene"を返すように実装する
|
203
|
+
#(注1)同じクラス名のシーンを繰り返し実行したいときは、いったん別のダミーシーンを
|
204
|
+
#介してから元のシーンへ移動する必要がある
|
205
|
+
#(注2)オーバーシーン内では、シーンの移動が出来ないが、入れ子形式で
|
206
|
+
#別のオーバーシーンを積み上げる形なら移動可能。
|
207
|
+
module Scene
|
208
|
+
@@scenes = {}
|
209
|
+
@@pool = {}
|
210
|
+
|
211
|
+
def Scene.included(c) #:nodoc:
|
212
|
+
unless c.singleton_methods.include?(:scene_type)
|
213
|
+
def c.scene_type
|
214
|
+
return :scene
|
215
|
+
end
|
216
|
+
end
|
217
|
+
@@scenes[c.to_s] = c
|
218
|
+
end
|
219
|
+
|
220
|
+
def Scene.scenes #:nodoc:
|
221
|
+
return @@scenes
|
222
|
+
end
|
223
|
+
|
224
|
+
def Scene.has_scene?(s) #:nodoc:
|
225
|
+
return @@scenes.has_key?(s)
|
226
|
+
end
|
227
|
+
|
228
|
+
def initialize(story, check_only=false) #:nodoc:
|
229
|
+
return if check_only
|
230
|
+
@@pool[self.object_id] = ScenePool.new(story, nil, nil, nil)
|
231
|
+
@now = self.now_scene
|
232
|
+
self.init
|
233
|
+
end
|
234
|
+
|
235
|
+
def init_inner(p, u) #:nodoc:
|
236
|
+
@@pool[self.object_id].prev = p
|
237
|
+
@@pool[self.object_id].upper = u
|
238
|
+
end
|
239
|
+
|
240
|
+
#===前回実行したシーンを返す
|
241
|
+
#前回実行しているシーンをクラス名で返す
|
242
|
+
#但し、最初のシーンの場合はnilを返す
|
243
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
244
|
+
def story
|
245
|
+
return @@pool[self.object_id].story
|
246
|
+
end
|
247
|
+
|
248
|
+
#===サブルーチンの呼び元シーンを返す
|
249
|
+
#サブルーチンを呼び出したシーンをクラス名で返す
|
250
|
+
#サブルーチンではないときはnilを返す
|
251
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
252
|
+
def upper_scene
|
253
|
+
return @@pool[self.object_id].upper
|
254
|
+
end
|
255
|
+
|
256
|
+
def next_scene #:nodoc:
|
257
|
+
return @@pool[self.object_id].next
|
258
|
+
end
|
259
|
+
|
260
|
+
#===前回実行したシーンを返す
|
261
|
+
#前回実行しているシーンをクラス名で返す
|
262
|
+
#但し、最初のシーンの場合はnilを返す
|
263
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
264
|
+
def prev_scene
|
265
|
+
return @@pool[self.object_id].prev
|
266
|
+
end
|
267
|
+
|
268
|
+
#===現在実行中のシーンを返す
|
269
|
+
#現在実行しているシーンをクラス名で返す
|
270
|
+
#返却値:: 前回実行したシーン名(Classクラスインスタンス)
|
271
|
+
def now_scene
|
272
|
+
return self.class
|
273
|
+
end
|
274
|
+
|
275
|
+
#===シーン内で使用するオブジェクトの初期化テンプレートメソッド
|
276
|
+
#シーン内で使用するインスタンスを生成するときなどにこのメソッドを実装する
|
277
|
+
def init
|
278
|
+
end
|
279
|
+
|
280
|
+
#===シーン内で使用するオブジェクトの初期設定テンプレートメソッド
|
281
|
+
#シーン内で使用するインスタンスの設定を行うときにこのメソッドを実装する
|
282
|
+
#(シーン生成時に生成したインスタンスはキャッシュされ、再利用することができることに注意)
|
283
|
+
def setup
|
284
|
+
end
|
285
|
+
|
286
|
+
#===シーンの情報を更新するテンプレートメソッド
|
287
|
+
#
|
288
|
+
#現在実行しているシーンを繰り返し実行する場合はインスタンス変数@nowを返すように実装する
|
289
|
+
#nilを返すとシーンの処理を終了する(元のStory#runメソッド呼び出しの次に処理が移る)
|
290
|
+
#但し、scene_typeメソッドの結果が:sub_routneのとき、移動元シーンに戻る
|
291
|
+
#返却値:: 移動先シーンクラス
|
292
|
+
def update
|
293
|
+
return now_scene
|
294
|
+
end
|
295
|
+
|
296
|
+
#===シーンで指定しているインスタンスを画面に描画するテンプレートメソッド
|
297
|
+
def render
|
298
|
+
end
|
299
|
+
|
300
|
+
#===シーン内で使用したオブジェクトの後始末を行うテンプレートメソッド
|
301
|
+
#ここでは、解放処理(dispose)ではなく、終了処理(値を変更するなど)に実装する
|
302
|
+
#setupメソッドと対になっているというイメージ
|
303
|
+
def final
|
304
|
+
end
|
305
|
+
|
306
|
+
#===シーンに使用したデータの解放を記述するテンプレートメソッド
|
307
|
+
#initメソッドと対になっているというイメージ
|
308
|
+
def dispose
|
309
|
+
end
|
310
|
+
|
311
|
+
def next=(label) #:nodoc:
|
312
|
+
@@pool[self.object_id].next = label
|
313
|
+
end
|
314
|
+
|
315
|
+
#==="over_scene"形式のシーンが実行中かどうか判別する
|
316
|
+
#返却値:: "over_scene"形式のシーンが実行中の時はtrueを返す
|
317
|
+
def over_scene_execute?
|
318
|
+
return @story.over_scene_execute?
|
319
|
+
end
|
320
|
+
|
321
|
+
#===シーンの解説を返す(テンプレートメソッド)
|
322
|
+
#Sceneモジュールをmixinしたとき、解説文を返す実装をしておくと、
|
323
|
+
#Scene.#lisutupメソッドを呼び出したときに、noticeメソッドの結果を取得できる
|
324
|
+
#返却値:: シーンの解説(文字列)
|
325
|
+
def notice
|
326
|
+
return ""
|
327
|
+
end
|
328
|
+
|
329
|
+
#===登録しているシーン一覧をリストアップする
|
330
|
+
#リストの内容は、"シーンクラス名(文字列),シーンクラス(ポインタ),
|
331
|
+
#解説(noticeメソッドの内容)"という書式で取得できる
|
332
|
+
#返却値:: リストアップしたシーンの配列
|
333
|
+
def Scene.listup
|
334
|
+
list = Array.new
|
335
|
+
sns = @@scenes
|
336
|
+
sns.keys.sort.each{|k| list.push("#{k}, #{sns[k]}, \"#{sns[k].notice}\"\n") }
|
337
|
+
return list
|
338
|
+
end
|
339
|
+
|
340
|
+
#===Scene.#listupメソッドの内容をCSVファイルに保存する
|
341
|
+
#_csvname_:: 保存するCSVファイルパス
|
342
|
+
def Scene.listup2csv(csvfname)
|
343
|
+
csvfname += ".csv" if csvfname !~ /\.csv$/
|
344
|
+
list = self.listup
|
345
|
+
File.open(csvfname, "w"){|f| list.each{|l| f.print l } }
|
346
|
+
end
|
347
|
+
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|