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.
- data/README +106 -154
- data/defines.h +144 -0
- data/{miyako_no_katana/extconf.rb → extconf.rb} +10 -0
- data/extern.h +29 -0
- data/install_miyako.rb +26 -14
- data/lib/Miyako/API/audio.rb +2 -2
- data/lib/Miyako/API/basic_data.rb +183 -41
- data/lib/Miyako/API/bitmap.rb +474 -2
- data/lib/Miyako/API/choices.rb +215 -48
- data/lib/Miyako/API/collision.rb +267 -251
- data/lib/Miyako/API/diagram.rb +58 -70
- data/lib/Miyako/API/drawing.rb +93 -52
- data/lib/Miyako/API/fixedmap.rb +233 -120
- data/lib/Miyako/API/font.rb +59 -40
- data/lib/Miyako/API/input.rb +34 -27
- data/lib/Miyako/API/layout.rb +154 -172
- data/lib/Miyako/API/map.rb +285 -159
- data/lib/Miyako/API/map_event.rb +4 -4
- data/lib/Miyako/API/modules.rb +1 -1
- data/lib/Miyako/API/movie.rb +8 -5
- data/lib/Miyako/API/parts.rb +44 -9
- data/lib/Miyako/API/plane.rb +37 -2
- data/lib/Miyako/API/screen.rb +90 -22
- data/lib/Miyako/API/shape.rb +118 -37
- data/lib/Miyako/API/sprite.rb +475 -61
- data/lib/Miyako/API/sprite_animation.rb +83 -63
- data/lib/Miyako/API/spriteunit.rb +47 -13
- data/lib/Miyako/API/story.rb +123 -47
- data/lib/Miyako/API/textbox.rb +361 -132
- data/lib/Miyako/API/utility.rb +388 -0
- data/lib/Miyako/API/viewport.rb +54 -349
- data/lib/Miyako/API/yuki.rb +570 -353
- data/lib/Miyako/EXT/miyako_cairo.rb +5 -3
- data/lib/Miyako/EXT/slides.rb +22 -1
- data/lib/Miyako/miyako.rb +12 -13
- data/logo/EGSR_logo.png +0 -0
- data/logo/EGSR_logo_bg.png +0 -0
- data/logo/EGSR_logo_fg.png +0 -0
- data/logo/EGSR_title_banner.png +0 -0
- data/logo/EGSR_title_logo.png +0 -0
- data/logo/miyako.png +0 -0
- data/logo/miyako_banner.png +0 -0
- data/logo/space.png +0 -0
- data/miyako_basicdata.c +590 -0
- data/miyako_bitmap.c +1225 -0
- data/miyako_collision.c +403 -0
- data/miyako_drawing.c +187 -0
- data/miyako_font.c +334 -0
- data/miyako_hsv.c +830 -0
- data/miyako_layout.c +191 -0
- data/miyako_no_katana.c +1074 -0
- data/miyako_transform.c +438 -0
- data/miyako_utility.c +288 -0
- data/sample/Animation1/m1ku.rb +10 -31
- data/sample/Animation1/readme.txt +6 -6
- data/sample/Animation2/lex.rb +1 -0
- data/sample/Animation2/readme.txt +6 -6
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +152 -48
- data/sample/Diagram_sample/readme.txt +9 -6
- data/sample/Room3/blue.rb +234 -187
- data/sample/Room3/ending.rb +68 -63
- data/sample/Room3/green.rb +159 -124
- data/sample/Room3/main.rb +50 -32
- data/sample/Room3/main_component.rb +3 -2
- data/sample/Room3/readme.txt +6 -6
- data/sample/Room3/red.rb +161 -134
- data/sample/Room3/room3.rb +1 -0
- data/sample/Room3/title.rb +75 -62
- data/sample/ball_action_sample.rb +204 -0
- data/sample/blit_rop.rb +70 -0
- data/sample/cairo_sample.rb +25 -0
- data/sample/circle_collision_test.rb +66 -0
- data/sample/collision_test.rb +33 -0
- data/sample/collision_test2.rb +108 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +23 -32
- data/sample/fixed_map_test/readme.txt +38 -38
- data/sample/map_test/chara.rb +17 -9
- data/sample/map_test/main_parts.rb +30 -9
- data/sample/map_test/main_scene.rb +57 -41
- data/sample/map_test/map_manager.rb +13 -30
- data/sample/map_test/map_test.rb +2 -2
- data/sample/map_test/oasis.rb +17 -11
- data/sample/map_test/readme.txt +50 -48
- data/sample/map_test/route.rb +46 -33
- data/sample/map_test/town.rb +19 -13
- data/sample/polygon_test.rb +35 -0
- data/sample/rasterscroll.rb +25 -0
- data/sample/takahashi.rb +42 -0
- data/sample/text.png +0 -0
- data/sample/textbox_sample.rb +190 -0
- data/sample/transform.rb +54 -0
- data/sample/utility_test.rb +73 -0
- data/sample/utility_test2.rb +61 -0
- data/sample/utility_test3.rb +64 -0
- data/sample/utility_test4.rb +73 -0
- data/uninstall_miyako.rb +19 -0
- data/win/miyako_no_katana.so +0 -0
- metadata +165 -148
- data/miyako.png +0 -0
- data/miyako_banner.png +0 -0
- data/miyako_no_katana/miyako_no_katana.c +0 -3301
- data/sample/fixed_map_test/map_sample.rb +0 -121
data/lib/Miyako/API/fixedmap.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
=begin
|
3
3
|
--
|
4
4
|
Miyako v2.0
|
5
|
-
Copyright (C) 2007-
|
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
|
-
|
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 :
|
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
|
58
|
+
def initialize(mapchip, mapdat, layer_size) #:nodoc:
|
57
59
|
@mapchip = mapchip
|
58
|
-
@pos =
|
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 =
|
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
|
-
|
108
|
-
|
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
|
-
|
122
|
-
|
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
|
-
|
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
|
-
@
|
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
|
-
|
140
|
-
@w =
|
141
|
-
@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
|
-
|
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
|
-
|
264
|
+
@size.h.times{|y|
|
155
265
|
values << layer_data.shift.map{|m| m.to_i}
|
156
266
|
}
|
157
|
-
|
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
|
-
|
164
|
-
|
165
|
-
|
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
|
-
|
281
|
+
event_layer.push(@em.create(code, x * @mapchips.first.chip_size.w, y * @mapchips.first.chip_size.h))
|
169
282
|
}
|
170
283
|
}
|
171
|
-
|
172
|
-
|
284
|
+
@event_layers << event_layer
|
285
|
+
}
|
286
|
+
|
287
|
+
mc = @mapchips.cycle
|
288
|
+
@mapchips = mc.take(layers)
|
173
289
|
@map_layers = []
|
174
|
-
|
175
|
-
br =
|
176
|
-
@map_layers.push(FixedMapLayer.new(
|
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
|
-
#
|
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
|
-
@
|
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
|
-
|
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
|
-
|
204
|
-
|
205
|
-
#
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
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 @
|
372
|
+
return @mapchips.first.chip_size
|
282
373
|
end
|
283
374
|
|
284
|
-
|
285
|
-
|
375
|
+
#===すべてのマップイベントを終了させる
|
376
|
+
#マップに登録しているイベントすべてのfinalメソッドを呼び出す
|
286
377
|
def final
|
287
|
-
@
|
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
|
-
|
305
|
-
|
306
|
-
|
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 @
|
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
|