ruby-miyako 2.1.0 → 2.1.1

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.
Files changed (72) hide show
  1. data/README +275 -20
  2. data/extern.h +21 -1
  3. data/install_miyako.rb +5 -3
  4. data/lib/Miyako/API/audio.rb +11 -6
  5. data/lib/Miyako/API/basic_data.rb +0 -985
  6. data/lib/Miyako/API/bitmap.rb +19 -22
  7. data/lib/Miyako/API/choices.rb +203 -69
  8. data/lib/Miyako/API/collision.rb +451 -9
  9. data/lib/Miyako/API/color.rb +177 -0
  10. data/lib/Miyako/API/diagram.rb +18 -20
  11. data/lib/Miyako/API/fixedmap.rb +207 -73
  12. data/lib/Miyako/API/font.rb +111 -18
  13. data/lib/Miyako/API/i_yuki.rb +1201 -0
  14. data/lib/Miyako/API/input.rb +65 -0
  15. data/lib/Miyako/API/layout.rb +41 -29
  16. data/lib/Miyako/API/map.rb +202 -157
  17. data/lib/Miyako/API/map_event.rb +86 -19
  18. data/lib/Miyako/API/map_struct.rb +268 -0
  19. data/lib/Miyako/API/modules.rb +136 -37
  20. data/lib/Miyako/API/movie.rb +8 -8
  21. data/lib/Miyako/API/parts.rb +63 -20
  22. data/lib/Miyako/API/plane.rb +4 -4
  23. data/lib/Miyako/API/screen.rb +16 -8
  24. data/lib/Miyako/API/sprite.rb +290 -23
  25. data/lib/Miyako/API/sprite_animation.rb +23 -11
  26. data/lib/Miyako/API/sprite_list.rb +406 -183
  27. data/lib/Miyako/API/story.rb +4 -65
  28. data/lib/Miyako/API/struct_point.rb +157 -0
  29. data/lib/Miyako/API/struct_rect.rb +233 -0
  30. data/lib/Miyako/API/struct_segment.rb +641 -0
  31. data/lib/Miyako/API/struct_size.rb +158 -0
  32. data/lib/Miyako/API/struct_square.rb +253 -0
  33. data/lib/Miyako/API/textbox.rb +49 -35
  34. data/lib/Miyako/API/viewport.rb +5 -5
  35. data/lib/Miyako/API/wait_counter.rb +350 -0
  36. data/lib/Miyako/API/yuki.rb +95 -60
  37. data/lib/Miyako/EXT/raster_scroll.rb +30 -8
  38. data/lib/Miyako/EXT/slides.rb +6 -6
  39. data/lib/Miyako/miyako.rb +25 -11
  40. data/lib/miyako.rb +28 -0
  41. data/lib/miyako_require_only.rb +35 -0
  42. data/miyako_basicdata.c +201 -17
  43. data/miyako_collision.c +315 -6
  44. data/miyako_diagram.c +331 -0
  45. data/miyako_drawing.c +26 -7
  46. data/miyako_font.c +259 -129
  47. data/miyako_input_audio.c +24 -14
  48. data/miyako_layout.c +106 -8
  49. data/miyako_no_katana.c +398 -171
  50. data/miyako_sprite2.c +275 -38
  51. data/miyako_transform.c +113 -107
  52. data/miyako_utility.c +34 -48
  53. data/miyako_yuki.c +241 -0
  54. data/sample/Diagram_sample/diagram_sample_yuki2.rb +30 -30
  55. data/sample/Room3/blue.rb +19 -19
  56. data/sample/Room3/green.rb +9 -9
  57. data/sample/Room3/main.rb +12 -12
  58. data/sample/Room3/red.rb +12 -12
  59. data/sample/Room3/title.rb +15 -10
  60. data/sample/collision_test2.rb +2 -1
  61. data/sample/fixed_map_test/fixed_map_sample.rb +7 -6
  62. data/sample/map_test/main_scene.rb +12 -10
  63. data/sample/map_test/map_manager.rb +14 -13
  64. data/sample/rasterscroll.rb +5 -5
  65. data/sample/takahashi.rb +3 -3
  66. data/sample/textbox_sample.rb +7 -6
  67. data/sample/transform.rb +2 -1
  68. data/uninstall_miyako.rb +4 -1
  69. data/win/miyako_no_katana.so +0 -0
  70. metadata +15 -4
  71. data/lib/Miyako/EXT/miyako_cairo.rb +0 -62
  72. data/sample/cairo_sample.rb +0 -25
@@ -20,99 +20,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
20
  ++
21
21
  =end
22
22
 
23
- require 'csv'
24
23
  require 'forwardable'
25
24
 
26
25
  module Miyako
27
- #==マップチップ構造体に配列化メソッド(to_a)を定義するための構造体クラス
28
- #インデックス参照メソッドを追加
29
- class MapChipStruct < Struct
30
- #===インスタンスを配列化する
31
- #Map/FixedMap.newメソッド内部で、MapChip構造体と、その配列とのダックタイピングのために用意
32
- #返却値:: 自分自身を[]囲んだオブジェクトを返す
33
- def to_a
34
- return [self]
35
- end
36
- end
37
-
38
- #=マップチップ定義構造体
39
- MapChip = MapChipStruct.new(:chip_image, :chips, :size, :chip_size, :access_types, :collision_table, :access_table)
40
-
41
- #=マップチップ作成ファクトリクラス
42
- class MapChipFactory
43
- #===マップチップを作成するためのファクトリクラス
44
- #_csv_filename_:: マップチップファイル名(CSVファイル)
45
- #_use_alpha_:: 画像にαチャネルを使うかどうかのフラグ。trueのときは画像のαチャネルを使用、falseのときはカラーキーを使用。デフォルトはtrue
46
- def MapChipFactory.load(csv_filename, use_alpha = true)
47
- raise MiyakoIOError.no_file(csv_filename) unless File.exist?(csv_filename)
48
- lines = CSV.read(csv_filename)
49
- raise MiyakoFileFormatError, "This file is not Miyako Map Chip file! : #{csv_filename}" unless lines.shift[0] == "Miyako Mapchip"
50
- spr = use_alpha ? Sprite.new({:filename => lines.shift[0], :type => :alpha_channel}) : Sprite.new({:file_name => lines.shift[0], :type => :color_key})
51
- tmp = lines.shift
52
- chip_size = Size.new(tmp[0].to_i, tmp[1].to_i)
53
- size = Size.new(spr.w / chip_size.w, spr.h / chip_size.h)
54
- chips = size.w * size.h
55
- access_types = lines.shift[0].to_i
56
- collision_table = Array.new(access_types){|at|
57
- Array.new(chips){|n| Collision.new(lines.shift.map{|s| s.to_i}) }
58
- }
59
- access_table = Array.new(access_types){|at|
60
- Array.new(chips){|n|
61
- lines.shift.map{|s|
62
- v = eval(s)
63
- next v if (v == true || v == false)
64
- v = v.to_i
65
- next false if v == 0
66
- true
67
- }
68
- }
69
- }
70
- return MapChip.new(spr, chips, size, chip_size, access_types, collision_table, access_table)
71
- end
72
- end
73
-
74
- #==アクセス方向定義クラス
75
- #マップチップのアクセステーブルを参照する際に、状態(入る(:in)・出る(:out))と
76
- #方向(:left, :right, :up, :down)から、アクセステーブルの指標を取得する必要がある。
77
- #このクラスでは、その指標を取得するメソッドを用意している
78
- class AccessIndex
79
- @@accesses = {
80
- in: { right: 2, left: 4, up: 6, down: 0},
81
- out: { right: 3, left: 5, up: 1, down: 7}
82
- }
83
- @@accesses2 = {
84
- in: [[-1,0,6],[2,-1,-1],[4,-1,-1]],
85
- out: [[-1,7,1],[3,-1,-1],[5,-1,-1]]
86
- }
87
-
88
- #===状態と方向からアクセステーブルの指標を取得する
89
- #アクセステーブルには、2種類の状態(入る=:in, 出る=:out)と、
90
- #4種類の方向(左=:left, 右=:right, 上=:up, 下=:down)から構成される
91
- #配列となっている。本メソッドで、状態・方向に対応するシンボルから配列の要素指標を取得する。
92
- #指定外のシンボルを渡すと例外が発生する
93
- #_state_:: 状態を示すシンボル(:in, :out)
94
- #_direction_:: 方向を示すシンボル(:left, :right, :up, :down)
95
- #返却値:: アクセステーブルの指標番号(整数)
96
- def AccessIndex.index(state, direction)
97
- raise MiyakoValueError, "can't find AcceessIndex state symbol! #{state}" unless @@accesses.has_key?(state)
98
- raise MiyakoValueError, "can't find AcceessIndex direction symbol! #{direction}" unless @@accesses[state].has_key?(direction)
99
- return @@accesses[state][direction]
100
- end
101
-
102
- #===状態と移動量からアクセステーブルの指標を取得する
103
- #アクセステーブルには、2種類の状態(入る=:in, 出る=:out)と、移動量(dx,dy)から構成される
104
- #配列となっている。本メソッドで、状態に対応するシンボル、整数から配列の要素指標を取得する。
105
- #指定外のシンボルを渡すと例外が発生する
106
- #_state_:: 状態を示すシンボル(:in, :out)
107
- #_dx_:: x方向移動量
108
- #_dy_:: y方向移動量
109
- #返却値:: アクセステーブルの指標番号(整数)。何も移動しない場合は-1が返る
110
- def AccessIndex.index2(state, dx, dy)
111
- raise MiyakoValueError, "can't find AcceessIndex state symbol! #{state}" unless @@accesses.has_key?(state)
112
- return @@accesses2[state][dx < -1 ? -1 : dx > 1 ? 1 : 0][dy < -1 ? -1 : dy > 1 ? 1 : 0]
113
- end
114
- end
115
-
116
26
  #==マップ定義クラス
117
27
  class Map
118
28
  include SpriteBase
@@ -123,6 +33,9 @@ module Miyako
123
33
 
124
34
  attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
125
35
  attr_reader :map_layers, :mapchips, :pos, :size, :w, :h
36
+ alias_method :map_size, :size
37
+ alias_method :map_w, :w
38
+ alias_method :map_h, :h
126
39
 
127
40
  class MapLayer #:nodoc: all
128
41
  include SpriteBase
@@ -130,7 +43,7 @@ module Miyako
130
43
  extend Forwardable
131
44
 
132
45
  attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
133
- attr_reader :mapchip, :mapchip_units, :pos, :size
46
+ attr_reader :mapchip, :mapchip_units, :pos, :size, :ignore_list
134
47
 
135
48
  def round(v, max) #:nodoc:
136
49
  v = max + (v % max) if v < 0
@@ -174,9 +87,11 @@ module Miyako
174
87
  :oh => @oh)
175
88
  }
176
89
  @visible = true
90
+ @def_ignore = -1
91
+ @ignore_list = []
177
92
  resize
178
93
  end
179
-
94
+
180
95
  def initialize_copy(obj) #:nodoc:
181
96
  @mapchip = @mapchip.dup
182
97
  @size = @size.dup
@@ -214,6 +129,15 @@ module Miyako
214
129
  @modpy2[round(y, @size.h)])
215
130
  end
216
131
 
132
+ #===レイヤー配列を取得する
133
+ #レイヤーを構成している配列を取得する
134
+ #取得した配列にアクセスするときの書式は、以下のようになる。
135
+ #layer[y][x]
136
+ #返却値:: 所持しているレイヤー配列
137
+ def layer
138
+ @mapdat
139
+ end
140
+
217
141
  #===実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得
218
142
  #イベントレイヤーでの番号はイベント番号と一致する
219
143
  #_x_:: マップチップ単位での位置(ピクセル単位)
@@ -243,62 +167,76 @@ module Miyako
243
167
  #===キャラクタとマップチップが重なっているかどうか問い合わせる
244
168
  #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと重なっているかどうか問い合わせる
245
169
  #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
246
- #指定の位置のマップチップ番号が-1(未定義)のときはnilを返す
170
+ #指定の位置のマップチップ番号が以下の時はnilを返す
171
+ #1)-1(未定義)のとき
172
+ #2)FixexMapLayer#ignore_listに含まれているとき
173
+ #3)引数ignoresに含まれているとき
247
174
  #_type_:: 移動形式(0以上の整数)
248
175
  #_pos_:: 調査対象のマップチップの位置
249
176
  #_collision_:: キャラクタのコリジョン
250
- #_rect_:: キャラクタの矩形
177
+ #_cpos_:: キャラクタの位置
251
178
  #返却値:: コリジョンが重なっていれば、そのときのマップチップ番号を返す。重なっていなければnilを返す
252
- def collision?(type, pos, collision, rect)
179
+ def collision?(type, pos, collision, cpos, *ignores)
253
180
  code = get_code(*pos.to_a)
254
- return nil if code == -1
255
- return @mapchip.collision_table[type][code].collision?(pos, collision, rect) ? code : nil
181
+ return nil if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
182
+ return @mapchip.collision_table[type][code].collision?(pos, collision, cpos) ? code : nil
256
183
  end
257
184
 
258
185
  #===キャラクタとマップチップが隣り合っているかどうか問い合わせる
259
186
  #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと隣り合っているかどうか問い合わせる
260
187
  #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
261
- #指定の位置のマップチップ番号が-1(未定義)のときはnilを返す
188
+ #指定の位置のマップチップ番号が以下の時はnilを返す
189
+ #1)-1(未定義)のとき
190
+ #2)FixexMapLayer#ignore_listに含まれているとき
191
+ #3)引数ignoresに含まれているとき
262
192
  #_type_:: 移動形式(0以上の整数)
263
193
  #_pos_:: 調査対象のマップチップの位置
264
194
  #_collision_:: キャラクタのコリジョン
265
- #_rect_:: キャラクタの矩形
195
+ #_cpos_:: キャラクタの位置
266
196
  #返却値:: コリジョンが隣り合っていれば、そのときのマップチップ番号を返す。隣り合っていなければnilを返す
267
- def meet?(type, pos, collision, rect)
197
+ def meet?(type, pos, collision, cpos, *ignores)
268
198
  code = get_code(*pos.to_a)
269
- return nil if code == -1
270
- return @mapchip.collision_table[type][code].meet?(pos, collision, rect) ? code : nil
199
+ return nil if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
200
+ return @mapchip.collision_table[type][code].meet?(pos, collision, cpos) ? code : nil
271
201
  end
272
202
 
273
203
  #===キャラクタとマップチップが覆い被さっているかどうか問い合わせる
274
204
  #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンを覆い被さっているかどうか問い合わせる
275
205
  #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
276
- #指定の位置のマップチップ番号が-1(未定義)のときはnilを返す
206
+ #指定の位置のマップチップ番号が以下の時はnilを返す
207
+ #1)-1(未定義)のとき
208
+ #2)FixexMapLayer#ignore_listに含まれているとき
209
+ #3)引数ignoresに含まれているとき
277
210
  #_type_:: 移動形式(0以上の整数)
278
211
  #_pos_:: 調査対象のマップチップの位置
279
212
  #_collision_:: キャラクタのコリジョン
280
- #_rect_:: キャラクタの矩形
213
+ #_cpos_:: キャラクタの位置
281
214
  #返却値:: どちらかのコリジョンが覆い被さっていれば、そのときのマップチップ番号を返す。
282
215
  #被さっていなければnilを返す
283
- def cover?(type, pos, collision, rect)
216
+ def cover?(type, pos, collision, cpos, *ignores)
284
217
  code = get_code(*pos.to_a)
285
- return nil if code == -1
286
- return @mapchip.collision_table[type][code].cover?(pos, collision, rect) ? code : nil
218
+ return nil if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
219
+ return @mapchip.collision_table[type][code].cover?(pos, collision, cpos) ? code : nil
287
220
  end
288
221
 
289
222
  #===キャラクタとマップチップが重なっているかどうか問い合わせる
290
223
  #指定の位置と方向で、指定の位置のマップチップ上で移動できるかどうか問い合わせる
291
- #指定の位置のマップチップ番号が-1(未定義)のとき、移動していない(dx==0 and dy==0)ときはtrueを返す
224
+ #指定の位置のマップチップ番号が以下の時はnilを返す
225
+ #1)-1(未定義)のとき
226
+ #2)FixexMapLayer#ignore_listに含まれているとき
227
+ #3)引数ignoresに含まれているとき
228
+ #また、dx==0, dy==0のときもtrueを返す
292
229
  #_type_:: 移動形式(0以上の整数)
293
230
  #_inout_:: 入退形式(:in もしくは :out)
294
231
  #_pos_:: 調査対象のマップチップの位置
295
232
  #_dx_:: 移動量(x座標)
296
233
  #_dy_:: 移動量(y座標)
297
234
  #返却値:: 移動可能ならばtrueを返す
298
- def can_access?(type, inout, pos, dx, dy)
235
+ def can_access?(type, inout, pos, dx, dy, *ignores)
236
+ return true if dx == 0 and dy == 0
299
237
  code = get_code(pos[0]+dx, pos[1]+dy)
300
- return true if code == -1
301
- index = AccessIndex.index2(inout, dx, dy)
238
+ return true if (code == @def_ignore or @ignore_list.include?(code) or ignores.flatten.include?(code))
239
+ index = MapDir.index2(inout, dx, dy)
302
240
  return true if index == -1
303
241
  return @mapchip.access_table[type][code][index]
304
242
  end
@@ -306,6 +244,8 @@ module Miyako
306
244
  def dispose #:nodoc:
307
245
  @mapdat = nil
308
246
  @baseimg = nil
247
+ @ignore_list.clear
248
+ @ignore_list = []
309
249
  end
310
250
 
311
251
  #===マップレイヤーを画面に描画する
@@ -337,84 +277,82 @@ module Miyako
337
277
  #また、各レイヤにMapChip構造体を渡すとき、レイヤ数より要素数が少ないときは、先頭に戻って繰り返し渡す仕様になっている
338
278
  #各MapChip構造体のマップチップの大きさを同じにしておく必要がある
339
279
  #_mapchips_:: マップチップ構造体群(MapChip構造体単体もしくは配列)
340
- #_layer_csv_:: レイヤーファイル(CSVファイル)
341
- #_event_manager_:: MapEventManagerクラスのインスタンス
280
+ #_map_struct_:: MapStruct構造体のインスタンス
281
+ #_event_manager_:: MapEventManagerクラスのインスタンス。省略時(イベントを使わない時)はnil
342
282
  #返却値:: 生成したインスタンス
343
- def initialize(mapchips, layer_csv, event_manager)
344
- raise MiyakoIOError.no_file(layer_csv) unless File.exist?(layer_csv)
345
- @event_layers = []
346
- @em = event_manager.dup
347
- @em.set(self)
283
+ def initialize(mapchips, map_struct, event_manager=nil)
284
+ if event_manager
285
+ @em = event_manager.dup
286
+ @em.set(self)
287
+ else
288
+ @em = nil
289
+ end
348
290
  @mapchips = mapchips.to_a
349
291
  @visible = true
350
292
  @pos = Point.new(0, 0)
351
- layer_data = CSV.readlines(layer_csv)
352
- raise MiyakoFileFormatError, "This file is not Miyako Map Layer file! : #{layer_csv}" unless layer_data.shift[0] == "Miyako Maplayer"
353
-
354
- tmp = layer_data.shift # 空行の空読み込み
355
293
 
356
- @size = Size.new(*(tmp[0..1].map{|v| v.to_i}))
294
+ @size = map_struct.size
357
295
  @w = @size.w
358
296
  @h = @size.h
359
-
360
- layers = layer_data.shift[0].to_i
361
-
362
- evlist = []
363
- brlist = []
364
- layers.times{|n|
365
- name = layer_data.shift[0]
366
- values = []
367
- @size.h.times{|y|
368
- values << layer_data.shift.map{|m| m.to_i}
369
- }
370
- if name == "<event>"
371
- evlist << values
372
- else
373
- brlist << values
374
- end
375
- }
376
297
 
377
- evlist.each{|events|
378
- event_layer = Array.new
379
- events.each_with_index{|ly, y|
380
- ly.each_with_index{|code, x|
381
- next unless @em.include?(code)
382
- event_layer.push(@em.create(code, x * @mapchips.first.chip_size.w, y * @mapchips.first.chip_size.h))
298
+ @event_layers = []
299
+ if map_struct.elayers
300
+ raise MiyakoError "Event Manager is not registered!" unless @em
301
+ map_struct.elayers.each{|events|
302
+ event_layer = Array.new
303
+ events.each_with_index{|ly, y|
304
+ ly.each_with_index{|code, x|
305
+ next unless @em.include?(code)
306
+ event_layer.push(@em.create(code, x * @mapchips.first.chip_size.w, y * @mapchips.first.chip_size.h))
307
+ }
383
308
  }
309
+ @event_layers << event_layer
384
310
  }
385
- @event_layers << event_layer
386
- }
311
+ end
312
+
313
+ @event_layers << [] if @event_layers.empty?
387
314
 
388
315
  mc = @mapchips.cycle
389
- @mapchips = mc.take(layers)
316
+ @mapchips = mc.take(map_struct.layer_num)
390
317
  @map_layers = []
391
- brlist.each{|br|
318
+ map_struct.layers.each{|br|
392
319
  br = br.map{|b| b.map{|bb| bb >= @mapchips.first.chips ? -1 : bb } }
393
320
  @map_layers.push(MapLayer.new(mc.next, br, @size))
394
321
  }
395
322
  end
396
-
323
+
397
324
  def initialize_copy(obj) #:nodoc:
398
325
  @map_layers = @map_layers.dup
399
326
  @event_layers = @event_layers.dup
400
- @em = em.dup
327
+ @em = @em.dup if @em
401
328
  @mapchips = @mapchips.dup
402
329
  @size = @size.dup
403
330
  @pos = @pos.dup
404
331
  end
405
332
 
406
333
  #===マップにイベントを追加する
334
+ # EventManagerが登録されていないときや登録されていないイベント番号で追加したときは例外を返す
407
335
  #_idx_:: 追加するイベントレイヤの指標
408
336
  #_code_:: イベント番号(Map.newメソッドで渡したイベント番号に対応)
409
- #_x_:: マップ上の位置(x方向)
410
- #_y_:: マップ常温位置(y方向)
337
+ #_x_:: マップ上の初期位置(x方向)
338
+ #_y_:: マップ上の初期位置(y方向)
411
339
  #返却値:: 自分自身を返す
412
340
  def add_event(idx, code, x, y)
413
- return self unless @em.include?(code)
341
+ raise MiyakoError "Event Manager is not registered!" unless @em
342
+ raise MiyakoError "Unregisted event code! : #{code}" unless @em.include?(code)
414
343
  @event_layers[idx].push(@em.create(code, x, y))
415
344
  return self
416
345
  end
417
346
 
347
+ #===マップに生成済みのイベントを追加する
348
+ #_idx_:: 追加するイベントレイヤの指標
349
+ #_event_:: イベント番号(Map.newメソッドで渡したイベント番号に対応)
350
+ #返却値:: 自分自身を返す
351
+ def append_event(idx, event)
352
+ @event_layers[idx].push(event)
353
+ return self
354
+ end
355
+
418
356
  #===マップを移動(移動量指定)
419
357
  #_dx_:: 移動量(x方向)
420
358
  #_dy_:: 移動量(y方向)
@@ -507,7 +445,7 @@ module Miyako
507
445
  yield code if block_given?
508
446
  return code
509
447
  end
510
-
448
+
511
449
  #===対象のマップチップ番号の画像を置き換える
512
450
  #_idx_:: 置き換えるマップチップレイヤー番号
513
451
  #_code_:: 置き換えるマップチップ番号
@@ -517,7 +455,7 @@ module Miyako
517
455
  @map_layers[idx].mapchip_units[code] = base
518
456
  return self
519
457
  end
520
-
458
+
521
459
  #===マップチップ1枚の大きさを取得する
522
460
  #マップチップの大きさが32×32ピクセルの場合は、[32,32]のSize構造体が返る
523
461
  #返却値:: マップチップのサイズ(Size構造体)
@@ -555,6 +493,113 @@ module Miyako
555
493
  return @event_layers
556
494
  end
557
495
 
496
+ #===指定のレイヤーのイベントに対してupdateメソッドを呼び出す
497
+ #イベントレイヤーidxの全てのイベントに対してupdateメソッドを呼び出す
498
+ #ただし、updateメソッドに渡されるレイヤーは、idxで指定したレイヤーのイベントのみ渡される
499
+ #_idx_:: 更新するイベントレイヤーの番号
500
+ #_params_:: イベントのupdateメソッドを呼び出すときに渡す引数。可変個数
501
+ #返却値:: レシーバ
502
+ def event_update(idx, *params)
503
+ @event_layers[idx].each{|event| event.update(self, @event_layers[idx], *params) }
504
+ self
505
+ end
506
+
507
+ #===全てのイベントに対してupdateメソッドを呼び出す
508
+ #全レイヤーのイベントを呼び出すことに注意
509
+ #updateメソッドに渡されるレイヤーは、そのイベントが登録されているレイヤーのみ渡される
510
+ #_params_:: イベントのupdateメソッドを呼び出すときに渡す引数。可変個数
511
+ def all_event_update(*params)
512
+ @event_layers.each{|el| el.each{|event| event.update(self, el, *params) } }
513
+ self
514
+ end
515
+
516
+ #===指定のレイヤーのイベントに対してupdate2メソッドを呼び出す
517
+ #イベントレイヤーidxの全てのイベントに対してupdateメソッドを呼び出す
518
+ #_idx_:: 更新するイベントレイヤーの番号
519
+ #_params_:: イベントのupdateメソッドを呼び出すときに渡す引数。可変個数
520
+ #返却値:: レシーバ
521
+ def event_update2(idx, *params)
522
+ @event_layers[idx].each{|event| event.update2(*params) }
523
+ self
524
+ end
525
+
526
+ #===全てのイベントに対してupdate2メソッドを呼び出す
527
+ #全レイヤーのイベントを呼び出すことに注意
528
+ #_params_:: イベントのupdate2メソッドを呼び出すときに渡す引数。可変個数
529
+ def all_event_update2(*params)
530
+ @event_layers.each{|el| el.each{|event| event.update2(*params) } }
531
+ self
532
+ end
533
+
534
+ #===指定のレイヤーのイベントに対してmove!メソッドを呼び出す
535
+ #イベントレイヤーidxの全てのイベントに対してmove!メソッドを呼び出す
536
+ #_idx_:: 更新するイベントレイヤーの番号
537
+ #_dx_:: x座標の移動量
538
+ #_dy_:: y座標の移動量
539
+ #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
540
+ #返却値:: レシーバ
541
+ def event_move!(idx, dx, dy, *params)
542
+ @event_layers[idx].each{|event| event.move!(dx, dy, *params) }
543
+ self
544
+ end
545
+
546
+ #===全てのイベントに対してmove!メソッドを呼び出す
547
+ #全レイヤーのイベントを呼び出すことに注意
548
+ #_dx_:: x座標の移動量
549
+ #_dy_:: y座標の移動量
550
+ #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
551
+ #返却値:: レシーバ
552
+ def all_event_move!(dx, dy, *params)
553
+ @event_layers.each{|el| el.each{|event| event.move!(dx, dy, *params) } }
554
+ self
555
+ end
556
+
557
+ #===指定のレイヤーのイベントに対してsprite_move!メソッドを呼び出す
558
+ #イベントレイヤーidxの全てのイベントに対してsprite_move!メソッドを呼び出す
559
+ #_idx_:: 更新するイベントレイヤーの番号
560
+ #_dx_:: x座標の移動量
561
+ #_dy_:: y座標の移動量
562
+ #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
563
+ #返却値:: レシーバ
564
+ def event_sprite_move!(idx, dx, dy, *params)
565
+ @event_layers[idx].each{|event| event.sprite_move!(dx, dy, *params) }
566
+ self
567
+ end
568
+
569
+ #===全てのイベントに対してsprite_move!メソッドを呼び出す
570
+ #全レイヤーのイベントを呼び出すことに注意
571
+ #_dx_:: x座標の移動量
572
+ #_dy_:: y座標の移動量
573
+ #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
574
+ #返却値:: レシーバ
575
+ def all_event_sprite_move!(dx, dy, *params)
576
+ @event_layers.each{|el| el.each{|event| event.sprite_move!(dx, dy, *params) } }
577
+ self
578
+ end
579
+
580
+ #===指定のレイヤーのイベントに対してsprite_move!メソッドを呼び出す
581
+ #イベントレイヤーidxの全てのイベントに対してsprite_move!メソッドを呼び出す
582
+ #_idx_:: 更新するイベントレイヤーの番号
583
+ #_dx_:: x座標の移動量
584
+ #_dy_:: y座標の移動量
585
+ #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
586
+ #返却値:: レシーバ
587
+ def event_pos_move!(idx, dx, dy, *params)
588
+ @event_layers[idx].each{|event| event.pos_move!(dx, dy, *params) }
589
+ self
590
+ end
591
+
592
+ #===全てのイベントに対してsprite_move!メソッドを呼び出す
593
+ #全レイヤーのイベントを呼び出すことに注意
594
+ #_dx_:: x座標の移動量
595
+ #_dy_:: y座標の移動量
596
+ #_params_:: イベントのmove!メソッドを呼び出すときに渡す引数。可変個数
597
+ #返却値:: レシーバ
598
+ def all_event_pos_move!(dx, dy, *params)
599
+ @event_layers.each{|el| el.each{|event| event.pos_move!(dx, dy, *params) } }
600
+ self
601
+ end
602
+
558
603
  #===マップを画面に描画する
559
604
  #転送する画像は、マップ上のから(-margin.x, -margin.y)(単位:ピクセル)の位置に対応するチップを左上にして描画する
560
605
  #各レイヤ-を、レイヤーインデックス番号の若い順に描画する