ruby-miyako 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +275 -20
- data/extern.h +21 -1
- data/install_miyako.rb +5 -3
- data/lib/Miyako/API/audio.rb +11 -6
- data/lib/Miyako/API/basic_data.rb +0 -985
- data/lib/Miyako/API/bitmap.rb +19 -22
- data/lib/Miyako/API/choices.rb +203 -69
- data/lib/Miyako/API/collision.rb +451 -9
- data/lib/Miyako/API/color.rb +177 -0
- data/lib/Miyako/API/diagram.rb +18 -20
- data/lib/Miyako/API/fixedmap.rb +207 -73
- data/lib/Miyako/API/font.rb +111 -18
- data/lib/Miyako/API/i_yuki.rb +1201 -0
- data/lib/Miyako/API/input.rb +65 -0
- data/lib/Miyako/API/layout.rb +41 -29
- data/lib/Miyako/API/map.rb +202 -157
- data/lib/Miyako/API/map_event.rb +86 -19
- data/lib/Miyako/API/map_struct.rb +268 -0
- data/lib/Miyako/API/modules.rb +136 -37
- data/lib/Miyako/API/movie.rb +8 -8
- data/lib/Miyako/API/parts.rb +63 -20
- data/lib/Miyako/API/plane.rb +4 -4
- data/lib/Miyako/API/screen.rb +16 -8
- data/lib/Miyako/API/sprite.rb +290 -23
- data/lib/Miyako/API/sprite_animation.rb +23 -11
- data/lib/Miyako/API/sprite_list.rb +406 -183
- data/lib/Miyako/API/story.rb +4 -65
- data/lib/Miyako/API/struct_point.rb +157 -0
- data/lib/Miyako/API/struct_rect.rb +233 -0
- data/lib/Miyako/API/struct_segment.rb +641 -0
- data/lib/Miyako/API/struct_size.rb +158 -0
- data/lib/Miyako/API/struct_square.rb +253 -0
- data/lib/Miyako/API/textbox.rb +49 -35
- data/lib/Miyako/API/viewport.rb +5 -5
- data/lib/Miyako/API/wait_counter.rb +350 -0
- data/lib/Miyako/API/yuki.rb +95 -60
- data/lib/Miyako/EXT/raster_scroll.rb +30 -8
- data/lib/Miyako/EXT/slides.rb +6 -6
- data/lib/Miyako/miyako.rb +25 -11
- data/lib/miyako.rb +28 -0
- data/lib/miyako_require_only.rb +35 -0
- data/miyako_basicdata.c +201 -17
- data/miyako_collision.c +315 -6
- data/miyako_diagram.c +331 -0
- data/miyako_drawing.c +26 -7
- data/miyako_font.c +259 -129
- data/miyako_input_audio.c +24 -14
- data/miyako_layout.c +106 -8
- data/miyako_no_katana.c +398 -171
- data/miyako_sprite2.c +275 -38
- data/miyako_transform.c +113 -107
- data/miyako_utility.c +34 -48
- data/miyako_yuki.c +241 -0
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +30 -30
- data/sample/Room3/blue.rb +19 -19
- data/sample/Room3/green.rb +9 -9
- data/sample/Room3/main.rb +12 -12
- data/sample/Room3/red.rb +12 -12
- data/sample/Room3/title.rb +15 -10
- data/sample/collision_test2.rb +2 -1
- data/sample/fixed_map_test/fixed_map_sample.rb +7 -6
- data/sample/map_test/main_scene.rb +12 -10
- data/sample/map_test/map_manager.rb +14 -13
- data/sample/rasterscroll.rb +5 -5
- data/sample/takahashi.rb +3 -3
- data/sample/textbox_sample.rb +7 -6
- data/sample/transform.rb +2 -1
- data/uninstall_miyako.rb +4 -1
- data/win/miyako_no_katana.so +0 -0
- metadata +15 -4
- data/lib/Miyako/EXT/miyako_cairo.rb +0 -62
- data/sample/cairo_sample.rb +0 -25
data/lib/Miyako/API/map.rb
CHANGED
@@ -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
|
-
|
170
|
+
#指定の位置のマップチップ番号が以下の時はnilを返す
|
171
|
+
#1)-1(未定義)のとき
|
172
|
+
#2)FixexMapLayer#ignore_listに含まれているとき
|
173
|
+
#3)引数ignoresに含まれているとき
|
247
174
|
#_type_:: 移動形式(0以上の整数)
|
248
175
|
#_pos_:: 調査対象のマップチップの位置
|
249
176
|
#_collision_:: キャラクタのコリジョン
|
250
|
-
#
|
177
|
+
#_cpos_:: キャラクタの位置
|
251
178
|
#返却値:: コリジョンが重なっていれば、そのときのマップチップ番号を返す。重なっていなければnilを返す
|
252
|
-
def collision?(type, pos, collision,
|
179
|
+
def collision?(type, pos, collision, cpos, *ignores)
|
253
180
|
code = get_code(*pos.to_a)
|
254
|
-
return nil if code ==
|
255
|
-
return @mapchip.collision_table[type][code].collision?(pos, collision,
|
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
|
-
|
188
|
+
#指定の位置のマップチップ番号が以下の時はnilを返す
|
189
|
+
#1)-1(未定義)のとき
|
190
|
+
#2)FixexMapLayer#ignore_listに含まれているとき
|
191
|
+
#3)引数ignoresに含まれているとき
|
262
192
|
#_type_:: 移動形式(0以上の整数)
|
263
193
|
#_pos_:: 調査対象のマップチップの位置
|
264
194
|
#_collision_:: キャラクタのコリジョン
|
265
|
-
#
|
195
|
+
#_cpos_:: キャラクタの位置
|
266
196
|
#返却値:: コリジョンが隣り合っていれば、そのときのマップチップ番号を返す。隣り合っていなければnilを返す
|
267
|
-
def meet?(type, pos, collision,
|
197
|
+
def meet?(type, pos, collision, cpos, *ignores)
|
268
198
|
code = get_code(*pos.to_a)
|
269
|
-
return nil if code ==
|
270
|
-
return @mapchip.collision_table[type][code].meet?(pos, collision,
|
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
|
-
|
206
|
+
#指定の位置のマップチップ番号が以下の時はnilを返す
|
207
|
+
#1)-1(未定義)のとき
|
208
|
+
#2)FixexMapLayer#ignore_listに含まれているとき
|
209
|
+
#3)引数ignoresに含まれているとき
|
277
210
|
#_type_:: 移動形式(0以上の整数)
|
278
211
|
#_pos_:: 調査対象のマップチップの位置
|
279
212
|
#_collision_:: キャラクタのコリジョン
|
280
|
-
#
|
213
|
+
#_cpos_:: キャラクタの位置
|
281
214
|
#返却値:: どちらかのコリジョンが覆い被さっていれば、そのときのマップチップ番号を返す。
|
282
215
|
#被さっていなければnilを返す
|
283
|
-
def cover?(type, pos, collision,
|
216
|
+
def cover?(type, pos, collision, cpos, *ignores)
|
284
217
|
code = get_code(*pos.to_a)
|
285
|
-
return nil if code ==
|
286
|
-
return @mapchip.collision_table[type][code].cover?(pos, collision,
|
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
|
-
|
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 ==
|
301
|
-
index =
|
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
|
-
#
|
341
|
-
#_event_manager_:: MapEventManager
|
280
|
+
#_map_struct_:: MapStruct構造体のインスタンス
|
281
|
+
#_event_manager_:: MapEventManagerクラスのインスタンス。省略時(イベントを使わない時)はnil
|
342
282
|
#返却値:: 生成したインスタンス
|
343
|
-
def initialize(mapchips,
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
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 =
|
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
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
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
|
-
|
386
|
-
|
311
|
+
end
|
312
|
+
|
313
|
+
@event_layers << [] if @event_layers.empty?
|
387
314
|
|
388
315
|
mc = @mapchips.cycle
|
389
|
-
@mapchips = mc.take(
|
316
|
+
@mapchips = mc.take(map_struct.layer_num)
|
390
317
|
@map_layers = []
|
391
|
-
|
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_::
|
410
|
-
#_y_::
|
337
|
+
#_x_:: マップ上の初期位置(x方向)
|
338
|
+
#_y_:: マップ上の初期位置(y方向)
|
411
339
|
#返却値:: 自分自身を返す
|
412
340
|
def add_event(idx, code, x, y)
|
413
|
-
|
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
|
#各レイヤ-を、レイヤーインデックス番号の若い順に描画する
|