cyross-ruby-miyako 2.0.0 → 2.0.5.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.
Files changed (102) hide show
  1. data/README +106 -154
  2. data/defines.h +144 -0
  3. data/{miyako_no_katana/extconf.rb → extconf.rb} +10 -0
  4. data/extern.h +29 -0
  5. data/install_miyako.rb +26 -14
  6. data/lib/Miyako/API/audio.rb +2 -2
  7. data/lib/Miyako/API/basic_data.rb +183 -41
  8. data/lib/Miyako/API/bitmap.rb +474 -2
  9. data/lib/Miyako/API/choices.rb +215 -48
  10. data/lib/Miyako/API/collision.rb +267 -251
  11. data/lib/Miyako/API/diagram.rb +58 -70
  12. data/lib/Miyako/API/drawing.rb +93 -52
  13. data/lib/Miyako/API/fixedmap.rb +233 -120
  14. data/lib/Miyako/API/font.rb +59 -40
  15. data/lib/Miyako/API/input.rb +34 -27
  16. data/lib/Miyako/API/layout.rb +154 -172
  17. data/lib/Miyako/API/map.rb +285 -159
  18. data/lib/Miyako/API/map_event.rb +4 -4
  19. data/lib/Miyako/API/modules.rb +1 -1
  20. data/lib/Miyako/API/movie.rb +8 -5
  21. data/lib/Miyako/API/parts.rb +44 -9
  22. data/lib/Miyako/API/plane.rb +37 -2
  23. data/lib/Miyako/API/screen.rb +90 -22
  24. data/lib/Miyako/API/shape.rb +118 -37
  25. data/lib/Miyako/API/sprite.rb +475 -61
  26. data/lib/Miyako/API/sprite_animation.rb +83 -63
  27. data/lib/Miyako/API/spriteunit.rb +47 -13
  28. data/lib/Miyako/API/story.rb +123 -47
  29. data/lib/Miyako/API/textbox.rb +361 -132
  30. data/lib/Miyako/API/utility.rb +388 -0
  31. data/lib/Miyako/API/viewport.rb +54 -349
  32. data/lib/Miyako/API/yuki.rb +570 -353
  33. data/lib/Miyako/EXT/miyako_cairo.rb +5 -3
  34. data/lib/Miyako/EXT/slides.rb +22 -1
  35. data/lib/Miyako/miyako.rb +12 -13
  36. data/logo/EGSR_logo.png +0 -0
  37. data/logo/EGSR_logo_bg.png +0 -0
  38. data/logo/EGSR_logo_fg.png +0 -0
  39. data/logo/EGSR_title_banner.png +0 -0
  40. data/logo/EGSR_title_logo.png +0 -0
  41. data/logo/miyako.png +0 -0
  42. data/logo/miyako_banner.png +0 -0
  43. data/logo/space.png +0 -0
  44. data/miyako_basicdata.c +590 -0
  45. data/miyako_bitmap.c +1225 -0
  46. data/miyako_collision.c +403 -0
  47. data/miyako_drawing.c +187 -0
  48. data/miyako_font.c +334 -0
  49. data/miyako_hsv.c +830 -0
  50. data/miyako_layout.c +191 -0
  51. data/miyako_no_katana.c +1074 -0
  52. data/miyako_transform.c +438 -0
  53. data/miyako_utility.c +288 -0
  54. data/sample/Animation1/m1ku.rb +10 -31
  55. data/sample/Animation1/readme.txt +6 -6
  56. data/sample/Animation2/lex.rb +1 -0
  57. data/sample/Animation2/readme.txt +6 -6
  58. data/sample/Diagram_sample/diagram_sample_yuki2.rb +152 -48
  59. data/sample/Diagram_sample/readme.txt +9 -6
  60. data/sample/Room3/blue.rb +234 -187
  61. data/sample/Room3/ending.rb +68 -63
  62. data/sample/Room3/green.rb +159 -124
  63. data/sample/Room3/main.rb +50 -32
  64. data/sample/Room3/main_component.rb +3 -2
  65. data/sample/Room3/readme.txt +6 -6
  66. data/sample/Room3/red.rb +161 -134
  67. data/sample/Room3/room3.rb +1 -0
  68. data/sample/Room3/title.rb +75 -62
  69. data/sample/ball_action_sample.rb +204 -0
  70. data/sample/blit_rop.rb +70 -0
  71. data/sample/cairo_sample.rb +25 -0
  72. data/sample/circle_collision_test.rb +66 -0
  73. data/sample/collision_test.rb +33 -0
  74. data/sample/collision_test2.rb +108 -0
  75. data/sample/fixed_map_test/fixed_map_sample.rb +23 -32
  76. data/sample/fixed_map_test/readme.txt +38 -38
  77. data/sample/map_test/chara.rb +17 -9
  78. data/sample/map_test/main_parts.rb +30 -9
  79. data/sample/map_test/main_scene.rb +57 -41
  80. data/sample/map_test/map_manager.rb +13 -30
  81. data/sample/map_test/map_test.rb +2 -2
  82. data/sample/map_test/oasis.rb +17 -11
  83. data/sample/map_test/readme.txt +50 -48
  84. data/sample/map_test/route.rb +46 -33
  85. data/sample/map_test/town.rb +19 -13
  86. data/sample/polygon_test.rb +35 -0
  87. data/sample/rasterscroll.rb +25 -0
  88. data/sample/takahashi.rb +42 -0
  89. data/sample/text.png +0 -0
  90. data/sample/textbox_sample.rb +190 -0
  91. data/sample/transform.rb +54 -0
  92. data/sample/utility_test.rb +73 -0
  93. data/sample/utility_test2.rb +61 -0
  94. data/sample/utility_test3.rb +64 -0
  95. data/sample/utility_test4.rb +73 -0
  96. data/uninstall_miyako.rb +19 -0
  97. data/win/miyako_no_katana.so +0 -0
  98. metadata +165 -148
  99. data/miyako.png +0 -0
  100. data/miyako_banner.png +0 -0
  101. data/miyako_no_katana/miyako_no_katana.c +0 -3301
  102. data/sample/fixed_map_test/map_sample.rb +0 -121
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -31,7 +31,8 @@ module Miyako
31
31
  @@idx_ix = [-1, 2, 4]
32
32
  @@idx_iy = [-1, 0, 6]
33
33
 
34
- attr_reader :name, :map_layers, :pos, :w, :h
34
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
35
+ attr_reader :name, :map_layers, :mapchips, :pos, :size, :w, :h
35
36
 
36
37
  #==あとで書く
37
38
  class FixedMapLayer #:nodoc: all
@@ -39,7 +40,8 @@ module Miyako
39
40
 
40
41
  @@use_chip_list = Hash.new(nil)
41
42
 
42
- attr_accessor :mapchip_units
43
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
44
+ attr_accessor :mapchip, :mapchip_units
43
45
  attr_reader :pos
44
46
 
45
47
  def round(v, max) #:nodoc:
@@ -53,9 +55,9 @@ module Miyako
53
55
  @ch = @real_size.h % @oh == 0 ? @real_size.h / @oh : (@real_size.h + @oh - 1)/ @oh + 1
54
56
  end
55
57
 
56
- def initialize(mapchip, mapdat, layer_size, pos) #:nodoc:
58
+ def initialize(mapchip, mapdat, layer_size) #:nodoc:
57
59
  @mapchip = mapchip
58
- @pos = pos.dup
60
+ @pos = Point.new(0, 0)
59
61
  @size = layer_size.dup
60
62
  @ow = @mapchip.chip_size.w
61
63
  @oh = @mapchip.chip_size.h
@@ -64,7 +66,7 @@ module Miyako
64
66
  @baseimg = nil
65
67
  @baseimg = @mapchip.chip_image
66
68
  @units = nil
67
- @visible = false
69
+ @visible = true
68
70
  @divpx = get_div_array(0, @real_size.w, @ow)
69
71
  @divpy = get_div_array(0, @real_size.h, @oh)
70
72
  @modpx = get_mod_array(0, @real_size.w, @ow)
@@ -104,170 +106,237 @@ module Miyako
104
106
  @modpy2[round(y, @size.h)])
105
107
  end
106
108
 
107
- def get_code(x, y) #:nodoc:
108
- pos = convert_position(x, y)
109
+ #===指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す
110
+ #但し、引数には、Rect(x,y,w,h)形式のインスタンスを渡す
111
+ #_rect_:: キャラクタの矩形
112
+ #返却値:: マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ)
113
+ def product_position(rect)
114
+ return Utility.product_position(rect, @mapchip.chip_size)
115
+ end
116
+
117
+ #===指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す
118
+ #但し、引数には、Square([x1,y1,x2,y2])形式のインスタンスを渡す
119
+ #_square_:: キャラクタの矩形
120
+ #返却値:: マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ)
121
+ def product_position_by_square(square)
122
+ return Utility.product_position_by_square(square, @mapchip.chip_size)
123
+ end
124
+
125
+ #===実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得
126
+ #イベントレイヤーでの番号はイベント番号と一致する
127
+ #_x_:: マップチップ単位での位置(ピクセル単位)
128
+ #_y_:: マップチップ単位での位置(ピクセル単位)
129
+ #返却値:: マップチップ番号(マップチップが設定されている時は0以上の整数、設定されていない場合は-1が返る)
130
+ def get_code(x, y)
131
+ pos = convert_position(x / @mapchip.chip_size[0], y / @mapchip.chip_size[1])
109
132
  return @mapdat[pos.y][pos.x]
110
133
  end
111
134
 
135
+ #===キャラクタとマップチップが重なっているかどうか問い合わせる
136
+ #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと重なっているかどうか問い合わせる
137
+ #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
138
+ #指定の位置のマップチップ番号が-1(未定義)のときはfalseを返す
139
+ #_type_:: 移動形式(0以上の整数)
140
+ #_pos_:: 調査対象のマップチップの位置
141
+ #_collision_:: キャラクタのコリジョン
142
+ #_rect_:: キャラクタの矩形
143
+ #返却値:: コリジョンが重なっていればtrueを返す
144
+ def collision?(type, pos, collision, rect)
145
+ code = get_code(*pos.to_a)
146
+ return false if code == -1
147
+ return @mapchip.collision_table[type][code].collision?(pos, collision, rect)
148
+ end
149
+
150
+ #===キャラクタとマップチップが隣り合っているかどうか問い合わせる
151
+ #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと隣り合っているかどうか問い合わせる
152
+ #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
153
+ #指定の位置のマップチップ番号が-1(未定義)のときはfalseを返す
154
+ #_type_:: 移動形式(0以上の整数)
155
+ #_pos_:: 調査対象のマップチップの位置
156
+ #_collision_:: キャラクタのコリジョン
157
+ #_rect_:: キャラクタの矩形
158
+ #返却値:: コリジョンが隣り合っていればtrueを返す
159
+ def meet?(type, pos, collision, rect)
160
+ code = get_code(*pos.to_a)
161
+ return false if code == -1
162
+ return @mapchip.collision_table[type][code].meet?(pos, collision, rect)
163
+ end
164
+
165
+ #===キャラクタとマップチップが覆い被さっているかどうか問い合わせる
166
+ #指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンを覆い被さっているかどうか問い合わせる
167
+ #引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
168
+ #指定の位置のマップチップ番号が-1(未定義)のときはfalseを返す
169
+ #_type_:: 移動形式(0以上の整数)
170
+ #_pos_:: 調査対象のマップチップの位置
171
+ #_collision_:: キャラクタのコリジョン
172
+ #_rect_:: キャラクタの矩形
173
+ #返却値:: どちらかのコリジョンが覆い被さっていればtrueを返す
174
+ def cover?(type, pos, collision, rect)
175
+ code = get_code(*pos.to_a)
176
+ return false if code == -1
177
+ return @mapchip.collision_table[type][code].cover?(pos, collision, rect)
178
+ end
179
+
180
+ #===キャラクタとマップチップが重なっているかどうか問い合わせる
181
+ #指定の位置と方向で、指定の位置のマップチップ上で移動できるかどうか問い合わせる
182
+ #指定の位置のマップチップ番号が-1(未定義)のとき、移動していない(dx==0 and dy==0)ときはtrueを返す
183
+ #_type_:: 移動形式(0以上の整数)
184
+ #_inout_:: 入退形式(:in もしくは :out)
185
+ #_pos_:: 調査対象のマップチップの位置
186
+ #_dx_:: 移動量(x座標)
187
+ #_dy_:: 移動量(y座標)
188
+ #返却値:: 移動可能ならばtrueを返す
189
+ def can_access?(type, inout, pos, dx, dy)
190
+ code = get_code(pos[0]+dx, pos[1]+dy)
191
+ return true if code == -1
192
+ index = AccessIndex.index2(inout, dx, dy)
193
+ return true if index == -1
194
+ return @mapchip.access_table[type][code][index]
195
+ end
196
+
112
197
  def dispose #:nodoc:
113
198
  @mapdat = nil
114
199
  @baseimg = nil
115
200
  end
116
201
 
202
+ #===マップレイヤーを画面に描画する
203
+ #すべてのマップチップを画面に描画する
204
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
205
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
206
+ #ブロックの引数は、|画面のSpriteUnit|となる。
207
+ #visibleメソッドの値がfalseのときは描画されない。
208
+ #返却値:: 自分自身を返す
209
+ def render
210
+ end
211
+
212
+ #===マップを画像に描画する
213
+ #すべてのマップチップを画像に描画する
214
+ #各レイヤ-を、レイヤーインデックス番号の若い順に描画する
215
+ #但し、マップイベントは描画しない
216
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
217
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
218
+ #ブロックの引数は、|転送先のSpriteUnit|となる。
219
+ #visibleメソッドの値がfalseのときは描画されない。
220
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
221
+ #返却値:: 自分自身を返す
222
+ def render_to(dst)
223
+ end
224
+
117
225
  def_delegators(:@size, :w, :h)
118
226
  end
119
227
 
120
- #===あとで書く
121
- #_mapchip_:: あとで書く
122
- #_layer_csv_:: あとで書く
228
+
229
+ #===インスタンスを生成する
230
+ #各レイヤにMapChip構造体を渡す
231
+ #但し、すべてのレイヤーに同一のMapChip構造体を使うときは、単体で渡すことも可能
232
+ #第1引数にto_aメソッドが実装されていれば、配列化した要素をMapChip構造体として各レイヤに渡す
233
+ #また、各レイヤにMapChip構造体を渡すとき、レイヤ数より要素数が少ないときは、
234
+ #先頭に戻って繰り返し渡す仕様になっている
235
+ #各MapChip構造体のマップチップの大きさを同じにしておく必要がある
236
+ #_mapchips_:: マップチップ構造体群(MapChip構造体単体もしくは配列)
237
+ #_layer_csv_:: レイヤーファイル(CSVファイル)
123
238
  #_event_manager_:: MapEventManagerクラスのインスタンス
124
- #_pos_:: あとで書く
125
- #返却値:: あとで書く
126
- def initialize(mapchip, layer_csv, event_manager, pos = Point.new(0, 0))
239
+ #返却値:: 生成したインスタンス
240
+ def initialize(mapchips, layer_csv, event_manager)
127
241
  init_layout
242
+ @visible = true
243
+ @event_layers = []
128
244
  @em = event_manager.dup
129
245
  @em.set(self)
130
- @mapchip = mapchip
131
- @pos = Point.new(*(pos.to_a))
132
- @coll = Collision.new(Rect.new(0, 0, 0, 0), Point.new(0, 0))
246
+ @mapchips = mapchips.to_a
133
247
  layer_data = CSV.readlines(layer_csv)
134
248
 
135
249
  raise MiyakoError, "This file is not Miyako Map Layer file! : #{layer_csv}" unless layer_data.shift[0] == "Miyako Maplayer"
136
250
 
137
251
  tmp = layer_data.shift # 空行の空読み込み
138
252
 
139
- layer_size = Size.new(tmp[0].to_i, tmp[1].to_i)
140
- @w = layer_size.w * @mapchip.chip_size.w
141
- @h = layer_size.h * @mapchip.chip_size.h
253
+ @size = Size.new(tmp[0].to_i, tmp[1].to_i)
254
+ @w = @size.w * @mapchips.first.chip_size.w
255
+ @h = @size.h * @mapchips.first.chip_size.h
142
256
 
143
257
  layers = layer_data.shift[0].to_i
144
258
 
145
- brlist = {}
259
+ evlist = []
260
+ brlist = []
146
261
  layers.times{|n|
147
262
  name = layer_data.shift[0]
148
- if name == "<event>"
149
- name = :event
150
- else
151
- name = /\<(\d+)\>/.match(name).to_a[1].to_i
152
- end
153
263
  values = []
154
- layer_size.h.times{|y|
264
+ @size.h.times{|y|
155
265
  values << layer_data.shift.map{|m| m.to_i}
156
266
  }
157
- brlist[name] = values
267
+ if name == "<event>"
268
+ evlist << values
269
+ else
270
+ brlist << values
271
+ end
158
272
  }
159
273
 
160
- @map_layers = Array.new
161
274
  @event_layer = nil
162
275
 
163
- if brlist.has_key?(:event)
164
- @event_layer = Array.new
165
- brlist[:event].each_with_index{|ly, y|
276
+ evlist.each{|events|
277
+ event_layer = Array.new
278
+ events.each_with_index{|ly, y|
166
279
  ly.each_with_index{|code, x|
167
280
  next unless @em.include?(code)
168
- @event_layer.push(@em.create(code, x * @mapchip.chip_size.w, y * @mapchip.chip_size.h))
281
+ event_layer.push(@em.create(code, x * @mapchips.first.chip_size.w, y * @mapchips.first.chip_size.h))
169
282
  }
170
283
  }
171
- layers -= 1
172
- end
284
+ @event_layers << event_layer
285
+ }
286
+
287
+ mc = @mapchips.cycle
288
+ @mapchips = mc.take(layers)
173
289
  @map_layers = []
174
- layers.times{|i|
175
- br = brlist[i].map{|b| b.map{|bb| bb >= @mapchip.chips ? -1 : bb } }
176
- @map_layers.push(FixedMapLayer.new(@mapchip, br, layer_size, pos))
290
+ brlist.each{|br|
291
+ br = br.map{|b| b.map{|bb| bb >= @mapchips.first.chips ? -1 : bb } }
292
+ @map_layers.push(FixedMapLayer.new(mc.next, br, @size))
177
293
  }
178
294
  set_layout_size(@w, @h)
179
295
  end
180
296
 
181
297
  #===マップにイベントを追加する
182
- #_code_:: イベント番号(FixedMap.newメソッドで渡したイベント番号に対応)
298
+ #_idx_:: 追加するイベントレイヤの指標
299
+ #_code_:: イベント番号(Map.newメソッドで渡したイベント番号に対応)
183
300
  #_x_:: マップ上の位置(x方向)
184
301
  #_y_:: マップ常温位置(y方向)
185
302
  #返却値:: 自分自身を返す
186
- def add_event(code, x, y)
303
+ def add_event(idx, code, x, y)
187
304
  return self unless @em.include?(code)
188
- @event_layer.push(@em.create(code, x, y))
305
+ @event_layers[idx].push(@em.create(code, x, y))
189
306
  return self
190
307
  end
191
308
 
192
309
  def update_layout_position #:nodoc:
193
- d = Point.new(@layout.pos[0]-@pos.x, @layout.pos[1]-@pos.y)
194
- @pos.move_to(*@layout.pos)
195
- @map_layers.each{|ml| ml.pos.move_to(*@pos) }
310
+ @map_layers.each{|ml| ml.pos.move_to(*@layout.pos) }
196
311
  end
197
312
 
198
313
  def [](idx) #:nodoc:
199
314
  return @map_layers[idx]
200
315
  end
201
316
 
202
- #===あとで書く
203
- #_idx_:: あとで書く
204
- #_x_:: あとで書く
205
- #_y_:: あとで書く
206
- #返却値:: あとで書く
207
- def get_code_real(idx, x, y)
208
- code = @map_layers[idx].get_code((x-@pos[0]) / @mapchip.chip_size[0], (y-@pos[1]) / @mapchip.chip_size[1])
209
- yield code if block_given?
210
- return code
211
- end
212
-
213
- #===あとで書く
214
- #_idx_:: あとで書く
215
- #_x_:: あとで書く
216
- #_y_:: あとで書く
217
- #返却値:: あとで書く
218
- def get_code(idx, x, y)
317
+ #===実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得
318
+ #イベントレイヤーでの番号はイベント番号と一致する
319
+ #ブロックを渡すと、求めたマップチップ番号をブロック引数として受け取る評価を行える
320
+ #_idx_:: マップレイヤー配列のインデックス
321
+ #_x_:: マップチップ単位での位置(ピクセル単位)
322
+ #_y_:: マップチップ単位での位置(ピクセル単位)
323
+ #返却値:: マップチップ番号(マップチップが設定されている時は0以上の整数、設定されていない場合は-1が返る)
324
+ def get_code(idx, x = 0, y = 0)
219
325
  code = @map_layers[idx].get_code(x, y)
220
326
  yield code if block_given?
221
327
  return code
222
328
  end
223
329
 
224
- #===あとで書く
225
- #_idx_:: あとで書く
226
- #_code_:: あとで書く
227
- #_base_:: あとで書く
228
- #返却値:: あとで書く
330
+ #===対象のマップチップ番号の画像を置き換える
331
+ #_idx_:: 置き換えるマップチップレイヤー番号
332
+ #_code_:: 置き換えるマップチップ番号
333
+ #_base_:: 置き換え対象の画像・アニメーション
334
+ #返却値:: 自分自身を返す
229
335
  def set_mapchip_base(idx, code, base)
230
336
  @map_layers[idx].mapchip_units[code] = base
231
337
  return self
232
338
  end
233
339
 
234
- #===あとで書く
235
- #_type_:: あとで書く
236
- #_rect_:: あとで書く
237
- #_collision_:: あとで書く
238
- #返却値:: あとで書く
239
- def get_amount_by_rect(type, rect, collision)
240
- mma = MapMoveAmount.new([], collision.direction.dup)
241
- return mma if(mma.amount[0] == 0 && mma.amount[1] == 0)
242
- dx, dy = collision.direction[0]*collision.amount[0], collision.direction[1]*collision.amount[1]
243
- x, y = rect[0]-@pos[0], rect[1]-@pos[1]
244
- collision.pos = Point.new(x, y)
245
- px1, px2 = (x+dx) / @mapchip.chip_size[0], (x+rect[2]-1+dx) / @mapchip.chip_size[0]
246
- py1, py2 = (y+dy) / @mapchip.chip_size[1], (y+rect[3]-1+dy) / @mapchip.chip_size[1]
247
- (py1..py2).each{|py|
248
- rpy = py * @mapchip.chip_size[1]
249
- (px1..px2).each{|px|
250
- rpx = px * @mapchip.chip_size[0]
251
- @map_layers.each_with_index{|ml, idx|
252
- code = ml.get_code(px, py)
253
- next if code == -1 # not use chip
254
- @coll = @mapchip.collision_table[type][code].dup
255
- @coll.pos = Point.new(rpx, rpy)
256
- atable = @mapchip.access_table[type][code]
257
- if @coll.into?(collision)
258
- mma.amount[0] = mma.amount[0] & atable[@@idx_ix[collision.direction[0]]]
259
- mma.amount[1] = mma.amount[1] & atable[@@idx_iy[collision.direction[1]]]
260
- mma.collisions << [idx, code, :into]
261
- end
262
- }
263
- }
264
- }
265
- mma.amount[0] *= collision.amount[0]
266
- mma.amount[1] *= collision.amount[1]
267
- yield mma if block_given?
268
- return mma
269
- end
270
-
271
340
  #===現在の画面の最大の大きさを矩形で取得する
272
341
  #但し、FixedMapの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
273
342
  #返却値:: 画像の大きさ(Rect構造体のインスタンス)
@@ -275,41 +344,85 @@ module Miyako
275
344
  return self.rect
276
345
  end
277
346
 
278
- #===あとで書く
279
- #返却値:: あとで書く
347
+ #===スプライトに変換した画像を表示する
348
+ #すべてのパーツを貼り付けた、1枚のスプライトを返す
349
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
350
+ #返却値:: 描画したスプライト
351
+ def to_sprite
352
+ rect = self.broad_rect
353
+ sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
354
+ Drawing.fill(sprite, [0,0,0])
355
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
356
+ self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
357
+ yield sprite if block_given?
358
+ return sprite
359
+ end
360
+
361
+ #===SpriteUnit構造体を生成する
362
+ #いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
363
+ #返却値:: 生成したSpriteUnit構造体
364
+ def to_unit
365
+ return self.to_sprite.to_unit
366
+ end
367
+
368
+ #===マップチップ1枚の大きさを取得する
369
+ #マップチップの大きさが32×32ピクセルの場合は、[32,32]のSize構造体が返る
370
+ #返却値:: マップチップのサイズ(Size構造体)
280
371
  def chipSize
281
- return @mapchip.chip_size
372
+ return @mapchips.first.chip_size
282
373
  end
283
374
 
284
- #===あとで書く
285
- #返却値:: あとで書く
375
+ #===すべてのマップイベントを終了させる
376
+ #マップに登録しているイベントすべてのfinalメソッドを呼び出す
286
377
  def final
287
- @event_layer.each{|e| e.final } if @event_layer
378
+ @event_layers.each{|ee| ee.each{|e| e.final }}
288
379
  end
289
380
 
290
- #===あとで書く
291
- #返却値:: あとで書く
381
+ #===マップ情報を解放する
292
382
  def dispose
293
383
  @map_layers.each{|l|
294
384
  l.dispose
295
385
  l = nil
296
386
  }
297
387
  @map_layers = Array.new
298
- if @event_layer
299
- @event_layer.each{|e| e.dispose }
300
- @event_layer = nil
301
- end
302
- end
303
388
 
304
- def re_size #:nodoc:
305
- @map_layers.each{|l| l.reSize }
306
- return self
389
+ @event_layers.each{|ee|
390
+ ee.each{|e| e.dispose }
391
+ ee.clear
392
+ }
393
+ @event_layers.clear
394
+
395
+ @mapchips.clear
396
+ @mapchips = nil
307
397
  end
308
398
 
309
399
  #===マップに登録しているイベントインスタンス(マップイベント)を取得する
310
400
  #返却値:: マップイベントの配列
311
401
  def events
312
- return @event_layer || []
402
+ return @event_layers
403
+ end
404
+
405
+ #===マップを画面に描画する
406
+ #すべてのマップチップを画面に描画する
407
+ #各レイヤ-を、レイヤーインデックス番号の若い順に描画する
408
+ #但し、マップイベントは描画しない
409
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
410
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
411
+ #ブロックの引数は、|画面のSpriteUnit|となる。
412
+ #visibleメソッドの値がfalseのときは描画されない。
413
+ #返却値:: 自分自身を返す
414
+ def render
415
+ end
416
+
417
+ #===マップレイヤーを画像に転送する
418
+ #すべてのマップチップを画像に描画する
419
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
420
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
421
+ #ブロックの引数は、|転送先のSpriteUnit|となる。
422
+ #visibleメソッドの値がfalseのときは描画されない。
423
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
424
+ #返却値:: 自分自身を返す
425
+ def render_to(dst)
313
426
  end
314
427
  end
315
428
  end