ruby-miyako 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (164) hide show
  1. data/README +1115 -0
  2. data/Rakefile +7 -0
  3. data/defines.h +144 -0
  4. data/extconf.rb +44 -0
  5. data/extern.h +29 -0
  6. data/img/cursor.png +0 -0
  7. data/img/cursors.png +0 -0
  8. data/img/dice.png +0 -0
  9. data/img/wait_cursor.png +0 -0
  10. data/img/win_base.png +0 -0
  11. data/img/window.png +0 -0
  12. data/install_miyako.rb +87 -0
  13. data/lib/Miyako/API/audio.rb +584 -0
  14. data/lib/Miyako/API/basic_data.rb +1026 -0
  15. data/lib/Miyako/API/bitmap.rb +534 -0
  16. data/lib/Miyako/API/choices.rb +481 -0
  17. data/lib/Miyako/API/collision.rb +638 -0
  18. data/lib/Miyako/API/diagram.rb +586 -0
  19. data/lib/Miyako/API/drawing.rb +151 -0
  20. data/lib/Miyako/API/exceptions.rb +105 -0
  21. data/lib/Miyako/API/fixedmap.rb +462 -0
  22. data/lib/Miyako/API/font.rb +430 -0
  23. data/lib/Miyako/API/input.rb +456 -0
  24. data/lib/Miyako/API/layout.rb +644 -0
  25. data/lib/Miyako/API/map.rb +583 -0
  26. data/lib/Miyako/API/map_event.rb +222 -0
  27. data/lib/Miyako/API/modules.rb +357 -0
  28. data/lib/Miyako/API/movie.rb +166 -0
  29. data/lib/Miyako/API/parts.rb +188 -0
  30. data/lib/Miyako/API/plane.rb +205 -0
  31. data/lib/Miyako/API/screen.rb +341 -0
  32. data/lib/Miyako/API/shape.rb +443 -0
  33. data/lib/Miyako/API/sprite.rb +773 -0
  34. data/lib/Miyako/API/sprite_animation.rb +494 -0
  35. data/lib/Miyako/API/sprite_list.rb +1135 -0
  36. data/lib/Miyako/API/spriteunit.rb +168 -0
  37. data/lib/Miyako/API/story.rb +350 -0
  38. data/lib/Miyako/API/textbox.rb +773 -0
  39. data/lib/Miyako/API/utility.rb +419 -0
  40. data/lib/Miyako/API/viewport.rb +190 -0
  41. data/lib/Miyako/API/yuki.rb +1180 -0
  42. data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
  43. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  44. data/lib/Miyako/EXT/slides.rb +157 -0
  45. data/lib/Miyako/miyako.rb +201 -0
  46. data/lib/Miyako/miyako_require_only.rb +35 -0
  47. data/logo/EGSR_logo.png +0 -0
  48. data/logo/EGSR_logo_bg.png +0 -0
  49. data/logo/EGSR_logo_fg.png +0 -0
  50. data/logo/EGSR_title_banner.png +0 -0
  51. data/logo/EGSR_title_logo.png +0 -0
  52. data/logo/miyako.png +0 -0
  53. data/logo/miyako_banner.png +0 -0
  54. data/logo/space.png +0 -0
  55. data/miyako_basicdata.c +484 -0
  56. data/miyako_bitmap.c +1225 -0
  57. data/miyako_collision.c +403 -0
  58. data/miyako_drawing.c +187 -0
  59. data/miyako_font.c +334 -0
  60. data/miyako_hsv.c +830 -0
  61. data/miyako_input_audio.c +254 -0
  62. data/miyako_layout.c +191 -0
  63. data/miyako_no_katana.c +1086 -0
  64. data/miyako_sprite2.c +431 -0
  65. data/miyako_transform.c +438 -0
  66. data/miyako_utility.c +288 -0
  67. data/sample/Animation1/m1ku.rb +68 -0
  68. data/sample/Animation1/m1ku_arm_0.png +0 -0
  69. data/sample/Animation1/m1ku_arm_1.png +0 -0
  70. data/sample/Animation1/m1ku_arm_2.png +0 -0
  71. data/sample/Animation1/m1ku_arm_3.png +0 -0
  72. data/sample/Animation1/m1ku_back.jpg +0 -0
  73. data/sample/Animation1/m1ku_body.png +0 -0
  74. data/sample/Animation1/m1ku_eye_0.png +0 -0
  75. data/sample/Animation1/m1ku_eye_1.png +0 -0
  76. data/sample/Animation1/m1ku_eye_2.png +0 -0
  77. data/sample/Animation1/m1ku_eye_3.png +0 -0
  78. data/sample/Animation1/m1ku_hair_front.png +0 -0
  79. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  80. data/sample/Animation1/readme.txt +72 -0
  81. data/sample/Animation2/lex.rb +96 -0
  82. data/sample/Animation2/lex_back.png +0 -0
  83. data/sample/Animation2/lex_body.png +0 -0
  84. data/sample/Animation2/lex_roadroller.png +0 -0
  85. data/sample/Animation2/lex_wheel_0.png +0 -0
  86. data/sample/Animation2/lex_wheel_1.png +0 -0
  87. data/sample/Animation2/lex_wheel_2.png +0 -0
  88. data/sample/Animation2/readme.txt +72 -0
  89. data/sample/Animation2/song_title.png +0 -0
  90. data/sample/Diagram_sample/back.png +0 -0
  91. data/sample/Diagram_sample/chr01.png +0 -0
  92. data/sample/Diagram_sample/chr02.png +0 -0
  93. data/sample/Diagram_sample/cursor.png +0 -0
  94. data/sample/Diagram_sample/diagram_sample_yuki2.rb +329 -0
  95. data/sample/Diagram_sample/readme.txt +90 -0
  96. data/sample/Diagram_sample/wait_cursor.png +0 -0
  97. data/sample/Room3/blue.rb +297 -0
  98. data/sample/Room3/ending.rb +180 -0
  99. data/sample/Room3/green.rb +220 -0
  100. data/sample/Room3/image/akamatsu.png +0 -0
  101. data/sample/Room3/image/aoyama.png +0 -0
  102. data/sample/Room3/image/congra.png +0 -0
  103. data/sample/Room3/image/congratulation.png +0 -0
  104. data/sample/Room3/image/congratulation_bg.png +0 -0
  105. data/sample/Room3/image/cursor.png +0 -0
  106. data/sample/Room3/image/midori.png +0 -0
  107. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  108. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  109. data/sample/Room3/image/room_blue.png +0 -0
  110. data/sample/Room3/image/room_green.png +0 -0
  111. data/sample/Room3/image/room_red.png +0 -0
  112. data/sample/Room3/image/start.png +0 -0
  113. data/sample/Room3/image/three_doors.png +0 -0
  114. data/sample/Room3/image/wait_cursor.png +0 -0
  115. data/sample/Room3/main.rb +120 -0
  116. data/sample/Room3/main_component.rb +59 -0
  117. data/sample/Room3/readme.txt +76 -0
  118. data/sample/Room3/red.rb +227 -0
  119. data/sample/Room3/room3.rb +25 -0
  120. data/sample/Room3/title.rb +184 -0
  121. data/sample/ball_action_sample.rb +204 -0
  122. data/sample/blit_rop.rb +70 -0
  123. data/sample/cairo_sample.rb +25 -0
  124. data/sample/circle_collision_test.rb +66 -0
  125. data/sample/collision_test.rb +33 -0
  126. data/sample/collision_test2.rb +108 -0
  127. data/sample/fixed_map_test/cursor.png +0 -0
  128. data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
  129. data/sample/fixed_map_test/map.csv +19 -0
  130. data/sample/fixed_map_test/map_01.png +0 -0
  131. data/sample/fixed_map_test/mapchip.csv +23 -0
  132. data/sample/fixed_map_test/monster.png +0 -0
  133. data/sample/fixed_map_test/readme.txt +72 -0
  134. data/sample/map_test/chara.rb +58 -0
  135. data/sample/map_test/chr1.png +0 -0
  136. data/sample/map_test/cursor.png +0 -0
  137. data/sample/map_test/main_parts.rb +69 -0
  138. data/sample/map_test/main_scene.rb +153 -0
  139. data/sample/map_test/map.png +0 -0
  140. data/sample/map_test/map2.png +0 -0
  141. data/sample/map_test/map_layer.csv +127 -0
  142. data/sample/map_test/map_manager.rb +75 -0
  143. data/sample/map_test/map_test.rb +23 -0
  144. data/sample/map_test/mapchip.csv +21 -0
  145. data/sample/map_test/oasis.rb +71 -0
  146. data/sample/map_test/readme.txt +89 -0
  147. data/sample/map_test/route.rb +157 -0
  148. data/sample/map_test/sea.png +0 -0
  149. data/sample/map_test/town.rb +74 -0
  150. data/sample/map_test/wait_cursor.png +0 -0
  151. data/sample/map_test/window.png +0 -0
  152. data/sample/polygon_test.rb +35 -0
  153. data/sample/rasterscroll.rb +25 -0
  154. data/sample/takahashi.rb +42 -0
  155. data/sample/text.png +0 -0
  156. data/sample/textbox_sample.rb +192 -0
  157. data/sample/transform.rb +54 -0
  158. data/sample/utility_test.rb +73 -0
  159. data/sample/utility_test2.rb +61 -0
  160. data/sample/utility_test3.rb +64 -0
  161. data/sample/utility_test4.rb +73 -0
  162. data/uninstall_miyako.rb +19 -0
  163. data/win/miyako_no_katana.so +0 -0
  164. metadata +216 -0
@@ -0,0 +1,494 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.1
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ #==アニメーション管理クラス
25
+ #スプライトのアニメーションの構築・実行を管理するクラス
26
+ class SpriteAnimation
27
+ include SpriteBase
28
+ include Animation
29
+ include Layout
30
+ include SingleEnumerable
31
+
32
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
33
+
34
+ #===インスタンスの作成
35
+ #アニメーションを行うための初期設定を行う。
36
+ #アニメーションは2種類の方法があり、
37
+ #
38
+ #「一つのスプライトをow,ohプロパティで分割して、表示開始位置をずらすことでアニメーションを行う」方法と、
39
+ #
40
+ #(RPGのキャラチップを想定。 以降、「単体アニメーション」と呼ぶ)
41
+ #
42
+ #「複数枚のスプライトの配列を渡し、要素順に表示させることでアニメーションを行う」方法がある。
43
+ #
44
+ #(いわゆる「ぱらぱら漫画」方式。 以降、「配列アニメーション」と呼ぶ)
45
+ #
46
+ #「パターン番号」は、キャラクタパターン(画像を一定の大きさ(ow,oh)で切り分けた単位)の番号を意味する。
47
+ #
48
+ #単体アニメーションのときは、画像の左上から0,1,2,...と数える。
49
+ #
50
+ #配列アニメーションのときは、配列のインデックスがパターン番号となる。
51
+ #
52
+ #
53
+ #
54
+ #利用できるパラメータは以下の通り
55
+ #
56
+ #:sprite => sprite|spriteの配列 アニメーションさせるスプライト(インスタンス単体もしくはインスタンスの配列)。必須パラメータ
57
+ #
58
+ #:dir => :h|:v 単体アニメーションのとき、縦方向に位置をずらして表示させる(:h指定時)か、横方向か(:v指定時)を決定する。デフォルトは:h
59
+ #
60
+ #:pattern_list => 表示させるパターン番号を指定するための配列。配列の要素の順にパターンが表示される
61
+ #
62
+ #:loop => アニメーションを繰り返し更新するかどうかを示すフラグ。falseのときは、1回パターンを実行した後、アニメーションを終了する(true/false)
63
+ #
64
+ #_hash_:: パラメータ名とパラメータとのハッシュ
65
+ #返却値:: 生成されたインスタンス
66
+ def initialize(hash)
67
+ init_layout
68
+ @units = Array.new
69
+ @slist = nil
70
+
71
+ hash[:dir] ||= :h
72
+ @dir = hash[:dir]
73
+ s = hash[:sprite]
74
+ hash[:pattern_list] ||= nil
75
+ @plist = hash[:pattern_list]
76
+ hash[:wait] ||= 0
77
+ wait = hash[:wait]
78
+ hash[:move_offset] ||= nil
79
+ @move_offset = hash[:move_offset]
80
+ hash[:position_offset] ||= nil
81
+ @pos_offset = hash[:position_offset]
82
+ hash[:align] ||= :max
83
+ @align = hash[:align]
84
+ hash[:loop] ||= true
85
+ @loop = hash[:loop]
86
+
87
+ @pat_len = 1
88
+ @pat_olen = 1
89
+ @chr_len = 1
90
+ @chr_olen = 1
91
+
92
+ @slist = Array.new
93
+ if s.kind_of?(Sprite)
94
+ @now = s.to_unit unless @now
95
+ set_layout_size(s.ow, s.oh)
96
+ move_to!(s.x, s.y)
97
+ s.snap(self)
98
+ s.left!.top!
99
+ @pat_len = @dir == :h ? s.h : s.w
100
+ @pat_olen = @dir == :h ? s.oh : s.ow
101
+ @chr_len = @dir == :h ? s.w : s.h
102
+ @chr_olen = @dir == :h ? s.ow : s.oh
103
+ @pats = @pat_len / @pat_olen
104
+ elsif s.kind_of?(Array)
105
+ first = s[0]
106
+ @now = first.to_unit unless @now
107
+ set_layout_size(first.ow, first.oh)
108
+ move_to!(first.x, first.y)
109
+ @slist = s.map{|ss|
110
+ ss.snap(self)
111
+ ss.left!.top!
112
+ }
113
+ @pat_len = @slist.length
114
+ @pats = @slist.length
115
+ else
116
+ raise MiyakoTypeError, "Illegal sprite list for SpriteAnimation."
117
+ end
118
+
119
+ if @plist
120
+ if @align == :min
121
+ @pats = @plist.length if @pats > @plist.length
122
+ else
123
+ @pats = @plist.length if @pats < @plist.length
124
+ end
125
+ else
126
+ @plist = Array.new unless @plist
127
+ end
128
+
129
+ if @move_offset
130
+ if @align == :min
131
+ @pats = @move_offset.length if @pats > @move_offset.length
132
+ else
133
+ @pats = @move_offset.length if @pats < @move_offset.length
134
+ end
135
+ else
136
+ @move_offset = Array.new
137
+ end
138
+
139
+ if @pos_offset
140
+ if @align == :min
141
+ @pats = @pos_offset.length if @pats > @pos_offset.length
142
+ else
143
+ @pats = @pos_offset.length if @pats < @pos_offset.length
144
+ end
145
+ else
146
+ @pos_offset = Array.new
147
+ end
148
+
149
+ if wait.kind_of?(Array)
150
+ @waits = wait.collect{|w| w.kind_of?(Float) ? WaitCounter.new(w) : w }
151
+ if @align == :min
152
+ @pats = @waits.length if @pats > @waits.length
153
+ else
154
+ @pats = @waits.length if @pats < @waits.length
155
+ end
156
+ else
157
+ @waits = Array.new
158
+ end
159
+
160
+ if @plist.length == 0
161
+ @pats.times{|p| @plist.push(p)}
162
+ elsif @plist.length < @pats
163
+ @plist = @plist.cycle.take(@pats)
164
+ end
165
+
166
+ if @slist.length == 0
167
+ @slist = Array.new(@pats){|pat| s }
168
+ @units = Array.new(@pats){|pat|
169
+ u = @slist[pat].to_unit.dup
170
+ px = pat % (@pat_len / @pat_olen)
171
+ if @dir == :h
172
+ u.oy = @slist[pat].oh * @plist[px]
173
+ else
174
+ u.ox = @slist[pat].ow * @plist[px]
175
+ end
176
+ u
177
+ }
178
+ elsif @slist.length < @pats
179
+ tmp = @slist
180
+ @slist = @slist.cycle.take(@pats)
181
+ @units = Array.new(@pats){|pat| @slist[pat].to_unit.dup }
182
+ else
183
+ @units = Array.new(@pats){|pat| @slist[pat].to_unit.dup }
184
+ end
185
+
186
+ if @move_offset.length == 0
187
+ @move_offset = Array.new(@pats){|pat| Point.new(0,0) }
188
+ elsif @move_offset.length < @pats
189
+ @move_offset = @move_offset.cycle.take(@pats)
190
+ end
191
+
192
+ if @pos_offset.length == 0
193
+ @pos_offset = Array.new(@pats){|pat| 0 }
194
+ elsif @pos_offset.length < @pats
195
+ @pos_offset = @pos_offset.cycle.take(@pats)
196
+ end
197
+
198
+ if @waits.length == 0
199
+ if wait.kind_of?(Integer)
200
+ @waits = Array.new(@pats){|pat| wait}
201
+ elsif wait.kind_of?(Float)
202
+ @waits = Array.new(@pats){|pat| WaitCounter.new(wait)}
203
+ else
204
+ raise MiyakoTypeError, "Illegal counter class for SpriteAnimation."
205
+ end
206
+ elsif @waits.length < @pats
207
+ @waits = @waits.cycle.take(@pats)
208
+ end
209
+
210
+ @chrs = @chr_len / @chr_olen
211
+
212
+ @cnum = 0
213
+ @pnum = 0
214
+ @cnt = 0
215
+ @exec = false
216
+ @visible = true
217
+
218
+ @now = @units[0]
219
+ @now.move_to!(@slist[@plist[@pnum]].x + @move_offset[@pnum][0],
220
+ @slist[@plist[@pnum]].y + @move_offset[@pnum][1])
221
+ end
222
+
223
+ #===複写時に呼び出されるメソッド
224
+ #複写と同時に、本インスタンスに対するスナップの関係を解消するが、
225
+ #新しいパターンスプライトとスナップをやり直す
226
+ def initialize_copy(obj)
227
+ @units = @units.deep_dup
228
+ @slist = @slist.deep_dup
229
+ @plist = @plist.dup
230
+ @move_offset = @move_offset.dup
231
+ @pos_offset = @pos_offset.dup
232
+ @now = @units[@plist[@pnum]]
233
+ copy_layout
234
+ @slist.each{|s| s.snap(self)}
235
+ end
236
+
237
+ attr_accessor :visible
238
+
239
+ #=== 現在表示しているスプライトの x 座標の値を取得する
240
+ #返却値:: x 座標の値
241
+ def x
242
+ return @now.x
243
+ end
244
+
245
+ #=== 現在表示しているスプライトの y 座標の値を取得する
246
+ #返却値:: y 座標の値
247
+ def y
248
+ return @now.y
249
+ end
250
+
251
+ #=== 現在表示しているスプライトの幅を取得する
252
+ #返却値:: 現在表示しているスプライトの幅(ピクセル単位)
253
+ def w
254
+ return @now.ow
255
+ end
256
+
257
+ #=== 現在表示しているスプライトの高さを取得する
258
+ #返却値:: 現在表示しているスプライトの高さ(ピクセル単位)
259
+ def h
260
+ return @now.oh
261
+ end
262
+
263
+ def update_layout_position #:nodoc:
264
+ @units.each{|u| u.move_to!(*@layout.pos)}
265
+ end
266
+
267
+ #===現在表示しているスプライトのowを取得する
268
+ #返却値:: スプライトのow
269
+ def ow
270
+ return @now.ow
271
+ end
272
+
273
+ #===現在表示しているスプライトのohを取得する
274
+ #返却値:: スプライトのoh
275
+ def oh
276
+ return @now.oh
277
+ end
278
+
279
+ #===表示するパターンの番号を変更する
280
+ #_pnum_:: パターン番号
281
+ def pattern=(pnum)
282
+ @pnum = pnum if pnum < @pats
283
+ set_pat
284
+ @cnt = @waits[@plist[@pnum]] if @exec
285
+ return self
286
+ end
287
+
288
+ #===現在表示しているパターンを取得する
289
+ #返却値:: 現在表示しているスプライトのインスタンス
290
+ def pattern
291
+ return @plist[@pnum]
292
+ end
293
+
294
+ #===キャラクター番号を設定する
295
+ #キャラクター番号(アニメーションさせるときに表示させるパターン群インデックス)
296
+ #を設定する。範囲外のキャラクター番号が設定された時は何も行わない
297
+ #_cnum_:: キャラクター番号
298
+ def character=(cnum)
299
+ return self if (cnum < 0 || cnum >= @chrs)
300
+ @cnum = cnum
301
+ set_chr
302
+ end
303
+
304
+ #===あとで書く
305
+ #_d_:: あとで書く
306
+ #返却値:: あとで書く
307
+ def move_character(d)
308
+ @cnum = (@cnum + d) % @chrs
309
+ @cnum = @cnum + @chrs if @cnum < 0
310
+ set_chr
311
+ return self
312
+ end
313
+
314
+ #===現在のキャラクター番号を取得する
315
+ #返却値:: キャラクター番号(0以上の整数)
316
+ def character
317
+ return @cnum
318
+ end
319
+
320
+ #===アニメーションを開始する
321
+ #パターンがリセットされていないときは、一時停止から復帰した時と同じ動作をする
322
+ #返却値:: 自分自身
323
+ def start
324
+ return self if @exec
325
+ set_pat
326
+ if @dir == :h
327
+ @now.oy += @pos_offset[@pnum]
328
+ else
329
+ @now.ox += @pos_offset[@pnum]
330
+ end
331
+ @cnt = @waits[@plist[@pnum]]
332
+ @cnt.start if @cnt.kind_of?(WaitCounter)
333
+ @exec = true
334
+ return self
335
+ end
336
+
337
+ #===アニメーションを停止する
338
+ #停止しても、表示していたパターンはリセットされていない
339
+ #返却値:: 自分自身
340
+ def stop
341
+ return self unless @exec
342
+ if @dir == :h
343
+ @now.oy -= @pos_offset[@pnum]
344
+ else
345
+ @now.ox -= @pos_offset[@pnum]
346
+ end
347
+ @cnt.stop if @cnt.kind_of?(WaitCounter)
348
+ @exec = false
349
+ return self
350
+ end
351
+
352
+ #===アニメーションの開始・停止を切り替える
353
+ #返却値:: 自分自身
354
+ def toggle_exec
355
+ if @exec
356
+ stop
357
+ else
358
+ start
359
+ end
360
+ return self
361
+ end
362
+
363
+ #===アニメーションの更新を行う
364
+ #アニメーションのカウントをチェックし、カウントが終了したときは新しいパターンに切り替えて、カウントを開始する
365
+ #すべてのパターンのアニメーションが終了すれば、最初のパターンに戻り、カウントを開始する
366
+ #但し、インスタンス生成時に:loop->falseを設定していれば、アニメーションを終了する
367
+ #返却値:: アニメーションパターンが切り替わればtrue、切り替わらないとき、アニメーションが終了したときはfalseを返す
368
+ def update_animation
369
+ end
370
+
371
+ def update_frame #:nodoc:
372
+ if @cnt > 0
373
+ @cnt -= 1
374
+ return false
375
+ end
376
+ @pnum = (@pnum + 1) % @pats
377
+ if @loop == false && @pnum == 0
378
+ stop
379
+ return false
380
+ end
381
+ set_pat
382
+ @cnt = @waits[@plist[@pnum]]
383
+ return true
384
+ end
385
+
386
+ def update_wait_counter #:nodoc:
387
+ return false if @cnt.waiting?
388
+ @pnum = (@pnum + 1) % @pats
389
+ if @loop == false && @pnum == 0
390
+ stop
391
+ return false
392
+ end
393
+ set_pat
394
+ @cnt = @waits[@plist[@pnum]]
395
+ @cnt.start
396
+ return true
397
+ end
398
+
399
+ def set_pat #:nodoc:
400
+ @now = @units[@plist[@pnum]]
401
+ end
402
+
403
+ def set_chr #:nodoc:
404
+ @units.each{|u|
405
+ if @dir == :h
406
+ u.ox = @chr_olen * @cnum
407
+ else
408
+ u.oy = @chr_olen * @cnum
409
+ end
410
+ }
411
+ end
412
+
413
+ #===アニメーションのパターンをリセットする
414
+ #返却値:: 自分自身
415
+ def reset
416
+ @pnum = 0
417
+ @cnt = 0
418
+ return self
419
+ end
420
+
421
+ #===アニメーションが実行中かを返す
422
+ #返却値:: アニメーションが実行されていれば true
423
+ def exec?
424
+ return @exec
425
+ end
426
+
427
+ #===現在実行中のパターンの元になったスプライトユニットを返す
428
+ #得られるインスタンスは内部でしようしてるものの複写
429
+ #返却値:: 現在表示しているスプライトユニット
430
+ def to_unit
431
+ return @now.dup
432
+ end
433
+
434
+ #=== 現在実行中のパターンの画像を返す
435
+ #返却値:: 現在表示している画像(bitmap)
436
+ def bitmap
437
+ return @now.bitmap
438
+ end
439
+
440
+ #===現在実行中のパターンの元になったインスタンスを返す
441
+ #取得するパターンは、元になったインスタンスのto_spriteメソッドを呼び出した時の値となる
442
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
443
+ #返却値:: 現在表示しているスプライト
444
+ def to_sprite(&block)
445
+ return @slist[@plist[@pnum]].to_sprite(&block)
446
+ end
447
+
448
+ #===現在表示しているスプライトの大きさを矩形で取得する
449
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
450
+ def rect
451
+ return Rect.new(@now.x, @now.y, @now.ow, @now.oh)
452
+ end
453
+
454
+ #===現在表示しているスプライトの最大の大きさを矩形で取得する
455
+ #現在のパターンの大きさと同じため、rectメソッドの値と同一となる
456
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
457
+ def broad_rect
458
+ return self.rect
459
+ end
460
+
461
+ #===インスタンスに束縛されているオブジェクトを解放する
462
+ def dispose
463
+ @slist.clear
464
+ @units.each{|u| u.bitmap = nil}
465
+ @units.clear
466
+ @waits.clear
467
+ @plist.clear
468
+ @move_offset.clear
469
+ @pos_offset.clear
470
+ end
471
+
472
+ #===アニメーションの現在の画像を画面に描画する
473
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
474
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
475
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
476
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
477
+ #ブロックの引数は、|インスタンスのSpriteUnit|となる。
478
+ #visibleメソッドの値がfalseのときは描画されない。
479
+ def render
480
+ end
481
+
482
+ #===アニメーションの現在の画像を画像に描画する
483
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
484
+ #転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
485
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
486
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
487
+ #ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
488
+ #visibleメソッドの値がfalseのときは描画されない。
489
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
490
+ def render_to(dst)
491
+ end
492
+ end
493
+ end
494
+