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
@@ -26,32 +26,33 @@ module Miyako
|
|
26
26
|
class ListPairStruct < Struct
|
27
27
|
include SpriteBase
|
28
28
|
include Animation
|
29
|
+
include Layout
|
29
30
|
|
30
31
|
# ディープコピー
|
31
32
|
def deep_dup
|
32
33
|
[self[0], self[1].dup]
|
33
34
|
end
|
34
|
-
|
35
|
+
|
35
36
|
# ディープコピー
|
36
37
|
def deep_clone
|
37
38
|
self.deep_copy
|
38
39
|
end
|
39
|
-
|
40
|
+
|
40
41
|
# 構造体を配列に変換する
|
41
42
|
def to_ary
|
42
43
|
[self[0], self[1]]
|
43
44
|
end
|
44
|
-
|
45
|
+
|
45
46
|
# 構造体を配列に変換する
|
46
47
|
def to_a
|
47
48
|
self.to_ary
|
48
49
|
end
|
49
|
-
|
50
|
+
|
50
51
|
# 構造体を文字列に変換する
|
51
52
|
def to_s
|
52
53
|
"#{self[0]} : #{self[1]}"
|
53
54
|
end
|
54
|
-
|
55
|
+
|
55
56
|
#===スプライトの移動(変化量を指定)
|
56
57
|
#_dx_:: 移動量(x方向)。単位はピクセル
|
57
58
|
#_dy_:: 移動量(y方向)。単位はピクセル
|
@@ -69,7 +70,7 @@ module Miyako
|
|
69
70
|
self[1].move_to!(x, y)
|
70
71
|
self
|
71
72
|
end
|
72
|
-
|
73
|
+
|
73
74
|
#===本体のアニメーションを開始する
|
74
75
|
#各要素のstartメソッドを呼び出す
|
75
76
|
#返却値:: 自分自身を返す
|
@@ -77,7 +78,7 @@ module Miyako
|
|
77
78
|
self[1].start
|
78
79
|
return self
|
79
80
|
end
|
80
|
-
|
81
|
+
|
81
82
|
#===本体のアニメーションを停止する
|
82
83
|
#各要素のstopメソッドを呼び出す
|
83
84
|
#返却値:: 自分自身を返す
|
@@ -85,7 +86,7 @@ module Miyako
|
|
85
86
|
self[1].stop
|
86
87
|
return self
|
87
88
|
end
|
88
|
-
|
89
|
+
|
89
90
|
#===本体のアニメーションを先頭パターンに戻す
|
90
91
|
#各要素のresetメソッドを呼び出す
|
91
92
|
#返却値:: 自分自身を返す
|
@@ -93,7 +94,7 @@ module Miyako
|
|
93
94
|
self[1].reset
|
94
95
|
return self
|
95
96
|
end
|
96
|
-
|
97
|
+
|
97
98
|
#===本体のアニメーションを更新する
|
98
99
|
#各要素のupdate_animationメソッドを呼び出す
|
99
100
|
#返却値:: 本体のupdate_spriteメソッドを呼び出した結果
|
@@ -105,14 +106,14 @@ module Miyako
|
|
105
106
|
def render
|
106
107
|
self[1].render
|
107
108
|
end
|
108
|
-
|
109
|
+
|
109
110
|
#指定の画像に描画する
|
110
111
|
#_dst_:: 描画先インスタンス
|
111
112
|
def render_to(dst)
|
112
113
|
self[1].render_to(dst)
|
113
114
|
end
|
114
115
|
end
|
115
|
-
|
116
|
+
|
116
117
|
#===名前-本体ペアを構成する構造体
|
117
118
|
#ハッシュのようにキー・バリュー構成を持たせるための構造体
|
118
119
|
#_name_:: 名前
|
@@ -132,10 +133,11 @@ module Miyako
|
|
132
133
|
class SpriteList
|
133
134
|
include SpriteBase
|
134
135
|
include Animation
|
136
|
+
include Layout
|
135
137
|
include Enumerable
|
136
138
|
|
137
139
|
attr_accessor :visible
|
138
|
-
|
140
|
+
|
139
141
|
#===ハッシュを元にSpriteListを生成する
|
140
142
|
#ハッシュのキーをスプライト名にして生成する
|
141
143
|
#_hash_:: 生成元のハッシュ
|
@@ -144,7 +146,7 @@ module Miyako
|
|
144
146
|
body = SpriteList.new
|
145
147
|
hash.each{|k, v| body.push(k ,v)}
|
146
148
|
end
|
147
|
-
|
149
|
+
|
148
150
|
#===ハッシュを元にSpriteListを生成する
|
149
151
|
#引数を省略すると空のSpriteListを生成する。
|
150
152
|
#要素が[スプライト名,スプライト]の配列となる配列を引数として渡すこともできる。
|
@@ -154,50 +156,47 @@ module Miyako
|
|
154
156
|
#_pairs_:: 生成元のインスタンス
|
155
157
|
#返却値:: 生成したインスタンス
|
156
158
|
def initialize(pairs = nil)
|
157
|
-
@
|
158
|
-
@n2v = {}
|
159
|
+
@list = []
|
159
160
|
if pairs.is_a?(Array)
|
160
161
|
pairs.each_with_index{|pair, i|
|
161
|
-
if pair.is_a?(Array)
|
162
|
-
@
|
163
|
-
@n2v[pair[0]] = ListPair.new(*pair)
|
162
|
+
if pair.is_a?(Array) || pair.is_a?(ListPair)
|
163
|
+
@list << ListPair.new(*pair)
|
164
164
|
else
|
165
165
|
name = sprintf("s_%03d", i).to_sym
|
166
|
-
@
|
167
|
-
@n2v[name] = ListPair.new(name, pair)
|
166
|
+
@list << ListPair.new(name, pair)
|
168
167
|
end
|
169
168
|
}
|
170
169
|
elsif pairs.is_a?(Hash)
|
171
170
|
pairs.each{|key, value|
|
172
|
-
@
|
173
|
-
@n2v[key] = ListPair.new(key, value)
|
171
|
+
@list << ListPair.new(key, value)
|
174
172
|
}
|
175
173
|
end
|
176
174
|
@visible = true
|
177
175
|
end
|
178
|
-
|
176
|
+
|
179
177
|
#===内部で使用している配列などを新しいインスタンスに置き換える
|
180
178
|
#initialize_copy用で元・新インスタンスで配列などを共用している場合に対応
|
181
179
|
def reflesh
|
182
|
-
@
|
183
|
-
@n2v = {}
|
180
|
+
@list = []
|
184
181
|
end
|
185
|
-
|
182
|
+
|
186
183
|
def initialize_copy(obj) #:nodoc:
|
187
184
|
reflesh
|
188
185
|
obj.names.each{|name| self.push([name, obj[name].deep_dup]) }
|
189
186
|
@visible = obj.visible
|
190
187
|
end
|
191
|
-
|
188
|
+
|
192
189
|
#===スプライト以外のインスタンスを削除したSpriteListを生成する
|
193
190
|
#新しいSpriteListを作成し、本体がnilや、SpriteBaseもしくはSpritArrayモジュールを
|
194
191
|
#mixinしていない対を削除する。
|
195
192
|
#返却値:: 新しく生成したインスタンス
|
196
193
|
def sprite_only
|
197
|
-
ret =
|
198
|
-
|
199
|
-
|
200
|
-
|
194
|
+
ret = SpriteList.new
|
195
|
+
@list.each{|pair|
|
196
|
+
name = pair.name
|
197
|
+
body = pair.body
|
198
|
+
ret[name] = pair.value if !body.class.include?(SpriteBase) &&
|
199
|
+
!body.class.include?(SpriteArray)
|
201
200
|
}
|
202
201
|
return ret
|
203
202
|
end
|
@@ -207,11 +206,10 @@ module Miyako
|
|
207
206
|
#mixinしていない対を削除する。
|
208
207
|
#返却値:: 自分自身を帰す
|
209
208
|
def sprite_only!
|
210
|
-
@
|
211
|
-
if
|
212
|
-
!
|
213
|
-
@
|
214
|
-
@names.delete(name)
|
209
|
+
@list.each{|pair|
|
210
|
+
if !pair.body.class.include?(SpriteBase) &&
|
211
|
+
!pair.body.class.include?(SpriteArray)
|
212
|
+
@list.delete(pair)
|
215
213
|
end
|
216
214
|
}
|
217
215
|
return self
|
@@ -222,112 +220,129 @@ module Miyako
|
|
222
220
|
#名前が登録されている順に渡ってくる
|
223
221
|
#返却値:: 自分自身を帰す
|
224
222
|
def each
|
223
|
+
return self.to_enum(:each) unless block_given?
|
225
224
|
self.to_a.each{|pair| yield pair}
|
226
225
|
end
|
227
|
-
|
226
|
+
|
228
227
|
#===ブロックを受け取り、スプライト名リストの各要素にたいして処理を行う
|
229
228
|
#ブロック引数には、|スプライト名,スプライト本体|が渡ってくる
|
230
229
|
#名前が登録されている順に渡ってくる
|
231
230
|
#返却値:: 自分自身を帰す
|
232
231
|
def each_pair
|
233
|
-
|
232
|
+
return self.to_enum(:each_pair) unless block_given?
|
233
|
+
@list.each{|pair| yield *pair}
|
234
234
|
end
|
235
|
-
|
235
|
+
|
236
236
|
#===ブロックを受け取り、名前リストの各要素にたいして処理を行う
|
237
237
|
#ブロック引数には、|スプライト名|が渡ってくる
|
238
238
|
#名前が登録されている順に渡ってくる
|
239
239
|
#返却値:: 自分自身を帰す
|
240
240
|
def each_name
|
241
|
-
|
241
|
+
return self.to_enum(:each_name) unless block_given?
|
242
|
+
@list.each{|pair| yield pair.name}
|
242
243
|
end
|
243
|
-
|
244
|
+
|
244
245
|
#===ブロックを受け取り、値リストの各要素にたいして処理を行う
|
245
246
|
#ブロック引数には、|スプライト本体|の配列として渡ってくる
|
246
247
|
#名前が登録されている順に渡ってくる
|
247
248
|
#返却値:: 自分自身を帰す
|
248
249
|
def each_value
|
249
|
-
|
250
|
+
return self.to_enum(:each_value) unless block_given?
|
251
|
+
@list.each{|pair| yield pair.body}
|
250
252
|
end
|
251
|
-
|
253
|
+
|
252
254
|
#===ブロックを受け取り、配列インデックスにたいして処理を行う
|
253
255
|
#ブロック引数には、|スプライト名に対応する配列インデックス|の配列として渡ってくる
|
254
256
|
#0,1,2,...の順に渡ってくる
|
255
257
|
#返却値:: 自分自身を帰す
|
256
258
|
def each_index
|
257
|
-
|
259
|
+
return self.to_enum(:each_index) unless block_given?
|
260
|
+
@list.length.times{|idx| yield idx}
|
258
261
|
end
|
259
|
-
|
262
|
+
|
263
|
+
#===スプライト名配列を取得する
|
264
|
+
#SpriteList#show,hideメソッドを呼び出す際、すべての要素を表示・非表示にするときに使う
|
265
|
+
#返却値:: スプライト名配列
|
266
|
+
def all
|
267
|
+
@list.map{|pair| pair.name }
|
268
|
+
end
|
269
|
+
|
260
270
|
#===スプライト名配列を取得する
|
261
271
|
#名前が登録されている順に渡ってくる
|
262
272
|
#返却値:: スプライト名配列
|
263
273
|
def names
|
264
|
-
@
|
274
|
+
@list.map{|pair| pair.name }
|
265
275
|
end
|
266
|
-
|
276
|
+
|
267
277
|
#===スプライト配列を取得する
|
268
278
|
#名前が登録されている順に渡ってくる
|
269
279
|
#返却値:: スプライト本体配列
|
270
280
|
def values
|
271
|
-
@
|
281
|
+
@list.map{|pair| pair.body }
|
272
282
|
end
|
273
|
-
|
283
|
+
|
274
284
|
#===名前-本体ペア配列を取得する
|
275
285
|
#名前が登録されている順にListPair構造体の構造体を構成して返す
|
276
286
|
#返却値:: ListPair構造体の配列
|
277
287
|
def pairs
|
278
|
-
@
|
288
|
+
@list
|
279
289
|
end
|
280
|
-
|
290
|
+
|
281
291
|
#===リストが空っぽかどうか確かめる
|
282
292
|
#リストに何も登録されていないかどうか確かめる
|
283
293
|
#返却値:: 空っぽの時はtrue、なにか登録されているときはfalse
|
284
294
|
def empty?
|
285
|
-
@
|
295
|
+
@list.empty?
|
296
|
+
end
|
297
|
+
|
298
|
+
def index(pair)
|
299
|
+
@list.index(pair)
|
286
300
|
end
|
287
301
|
|
288
302
|
#===内容が同じかどうか比較する
|
289
303
|
#リストに含まれるスプライト名(順番も)・値が同じかどうか比較する
|
290
304
|
#返却値:: 同じときはtrue、違うときはfalseを返す
|
291
305
|
def eql?(other)
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
306
|
+
return false unless other.class.method_defined?(:index)
|
307
|
+
@list.find{|pair|
|
308
|
+
self.index(pair) == other.index(pair) &&
|
309
|
+
pair.body.eql?(other[pair.name].body)
|
310
|
+
} != nil
|
296
311
|
end
|
297
|
-
|
312
|
+
|
298
313
|
#===リストに名前が登録されているか確認する
|
299
314
|
#スプライト名リスト内に、引数で指定した名前が含まれているか調べる
|
300
315
|
#(include?メソッドと同じ)
|
301
316
|
#_name_:: 検索対象の名前
|
302
317
|
#返却値:: 名前が含まれていればtrue、含まれていなければfalseと返す
|
303
318
|
def has_key?(name)
|
304
|
-
|
319
|
+
self.names.include?(name)
|
305
320
|
end
|
306
|
-
|
321
|
+
|
307
322
|
#===リストに名前が登録されているか確認する
|
308
323
|
#スプライト名リスト内に、引数で指定した名前が含まれているか調べる
|
309
324
|
#(include?メソッドと同じ)
|
310
325
|
#_name_:: 検索対象の名前
|
311
326
|
#返却値:: 名前が含まれていればtrue、含まれていなければfalseと返す
|
312
327
|
def has_name?(name)
|
313
|
-
|
328
|
+
self.names.include?(name)
|
314
329
|
end
|
315
|
-
|
330
|
+
|
316
331
|
#===リストに名前が登録されているか確認する
|
317
332
|
#スプライト名リスト内に、引数で指定した名前が含まれているか調べる
|
318
333
|
#(has_name?メソッドと同じ)
|
319
334
|
#_name_:: 検索対象の名前
|
320
335
|
#返却値:: 名前が含まれていればtrue、含まれていなければfalseと返す
|
321
336
|
def include?(name)
|
322
|
-
|
337
|
+
self.names.include?(name)
|
323
338
|
end
|
324
|
-
|
339
|
+
|
325
340
|
#===リストにスプライトが登録されているか確認する
|
326
341
|
#スプライトリスト内に、引数で指定したスプライトが含まれているか調べる
|
327
342
|
#_value_:: 検索対象のスプライト
|
328
343
|
#返却値:: スプライトが含まれていればtrue、含まれていなければfalseと返す
|
329
344
|
def has_value?(value)
|
330
|
-
|
345
|
+
self.values.include?(value)
|
331
346
|
end
|
332
347
|
|
333
348
|
#===リストの長さを求める
|
@@ -335,7 +350,7 @@ module Miyako
|
|
335
350
|
#(sizeメソッドと同じ)
|
336
351
|
#返却値:: リストの要素数(殻のときは0)
|
337
352
|
def length
|
338
|
-
@
|
353
|
+
@list.length
|
339
354
|
end
|
340
355
|
|
341
356
|
#===リストの長さを求める
|
@@ -343,7 +358,7 @@ module Miyako
|
|
343
358
|
#(lengthメソッドと同じ)
|
344
359
|
#返却値:: リストの要素数(殻のときは0)
|
345
360
|
def size
|
346
|
-
@
|
361
|
+
@list.length
|
347
362
|
end
|
348
363
|
|
349
364
|
#===スプライト名を探し、あればその対を返す
|
@@ -352,7 +367,7 @@ module Miyako
|
|
352
367
|
#_name_:: 検索対象のスプライト名
|
353
368
|
#返却値:: 見つかればListPair構造体、無ければnil
|
354
369
|
def assoc(name)
|
355
|
-
@
|
370
|
+
@list.find(nil){|pair| pair.name == name }
|
356
371
|
end
|
357
372
|
|
358
373
|
#===スプライトが登録されている名前を求める
|
@@ -362,40 +377,40 @@ module Miyako
|
|
362
377
|
#_name_:: 検索対象のスプライト名
|
363
378
|
#返却値:: 名前が見つかったときはそのスプライト名、無ければnil
|
364
379
|
def name(value)
|
365
|
-
@
|
380
|
+
@list.find(nil){|pair| pair.value.eql?(value) }
|
366
381
|
end
|
367
|
-
|
382
|
+
|
368
383
|
#===名前が何番目にあるかを求める
|
369
384
|
#スプライト名リスト中、指定したスプライト名のインデックスを求める
|
370
385
|
#(内部でHash#indexメソッドを呼び出している)
|
371
386
|
#_name_:: 検索対象のスプライト名
|
372
387
|
#返却値:: 名前が見つかったときはそのインデックス(0以上の整数)、無ければnil
|
373
388
|
def index(name)
|
374
|
-
|
389
|
+
self.names.index(name)
|
375
390
|
end
|
376
|
-
|
391
|
+
|
377
392
|
#===リストの先頭要素を求める
|
378
393
|
#リストの先頭からn要素をSpriteListとして返す。
|
379
394
|
#リストが空のとき、nが0のときはnilを返す
|
380
395
|
#_n_:: 先頭からの数。省略時は1
|
381
396
|
#返却値:: 先頭からn個の要素を設定したSpriteList
|
382
397
|
def first(n=1)
|
383
|
-
return nil if @
|
398
|
+
return nil if @list.empty?
|
384
399
|
return nil if n == 0
|
385
|
-
SpriteList.new(@
|
400
|
+
SpriteList.new(@list.first(n))
|
386
401
|
end
|
387
|
-
|
402
|
+
|
388
403
|
#===リストの終端要素を求める
|
389
404
|
#リストの終端からn要素をSpriteListとして返す。
|
390
405
|
#リストが空のとき、nが0のときはnilを返す
|
391
406
|
#_n_:: 終端からの数。省略時は1
|
392
407
|
#返却値:: 終端からn個の要素を設定したSpriteList
|
393
408
|
def last(n=1)
|
394
|
-
return nil if @
|
409
|
+
return nil if @list.empty?
|
395
410
|
return nil if n == 0
|
396
|
-
SpriteList.new(@
|
411
|
+
SpriteList.new(@list.last(n))
|
397
412
|
end
|
398
|
-
|
413
|
+
|
399
414
|
#===名前・スプライトの対を登録する
|
400
415
|
#リストに名前・スプライトをリストの後ろに追加する
|
401
416
|
#効果はSpriteList#pushと同じ
|
@@ -404,7 +419,7 @@ module Miyako
|
|
404
419
|
def <<(pair)
|
405
420
|
self.push(pair)
|
406
421
|
end
|
407
|
-
|
422
|
+
|
408
423
|
#===引数と自分自身との和集合を取る
|
409
424
|
#otherと自分自身で一方でも割り付けられた名前の本体のみ登録する(方法はpush・addと同じ)
|
410
425
|
#名前がバッティングしたときは引数の本体を優先する
|
@@ -415,7 +430,7 @@ module Miyako
|
|
415
430
|
other.to_a.each{|pair| list.add(pair[0], pair[1].dup)}
|
416
431
|
list
|
417
432
|
end
|
418
|
-
|
433
|
+
|
419
434
|
#===引数と自分自身との積集合を取る
|
420
435
|
#otherと自分自身で両方割り付けられた名前のみ登録されたリストを生成する
|
421
436
|
#内容は自分自身の本体を割り当てる
|
@@ -426,7 +441,7 @@ module Miyako
|
|
426
441
|
self.to_a.each{|pair| list.add(pair[0], pair[1].dup) if other.has_key?(pair[0])}
|
427
442
|
list
|
428
443
|
end
|
429
|
-
|
444
|
+
|
430
445
|
#===引数と自分自身との差集合を取る
|
431
446
|
#otherと自分自身で両方割り付けられた名前を取り除いたリストを生成する
|
432
447
|
#_other_:: 計算をするSpriteList
|
@@ -436,7 +451,7 @@ module Miyako
|
|
436
451
|
self.to_a.each{|pair| list.add(pair[0], pair[1].dup) unless other.has_key?(pair[0])}
|
437
452
|
list
|
438
453
|
end
|
439
|
-
|
454
|
+
|
440
455
|
#===引数と自分自身とのANDを取る
|
441
456
|
#方法は積集合と同じ(#*参照)
|
442
457
|
#_other_:: 計算をするSpriteList
|
@@ -444,7 +459,7 @@ module Miyako
|
|
444
459
|
def &(other)
|
445
460
|
self * other
|
446
461
|
end
|
447
|
-
|
462
|
+
|
448
463
|
#===引数と自分自身とのORを取る
|
449
464
|
#方法は和集合と同じ(#+参照)
|
450
465
|
#_other_:: 計算をするSpriteList
|
@@ -452,7 +467,7 @@ module Miyako
|
|
452
467
|
def |(other)
|
453
468
|
self + other
|
454
469
|
end
|
455
|
-
|
470
|
+
|
456
471
|
#===引数と内容が同じかどうかを確認する
|
457
472
|
#方法は#eql?と同じ(#eql?参照)
|
458
473
|
#_other_:: 比較元SpriteList
|
@@ -470,7 +485,7 @@ module Miyako
|
|
470
485
|
def add(name, sprite)
|
471
486
|
self.push([name, sprite])
|
472
487
|
end
|
473
|
-
|
488
|
+
|
474
489
|
#===名前・スプライトの対を登録する
|
475
490
|
#リストに名前・スプライトをリストの後ろに追加する
|
476
491
|
#効果はSpriteList#addと同じだが、複数の対を登録できることが特徴
|
@@ -483,22 +498,21 @@ module Miyako
|
|
483
498
|
unless sprite.class.include?(SpriteBase) || sprite.class.include?(SpriteArray)
|
484
499
|
raise MiyakoValueError, "Illegal Sprite!"
|
485
500
|
end
|
486
|
-
|
487
|
-
@
|
488
|
-
@
|
501
|
+
pair = ListPair.new(name, sprite)
|
502
|
+
@list.reject!{|pair| pair.name == name}
|
503
|
+
@list << pair
|
489
504
|
}
|
490
505
|
return self
|
491
506
|
end
|
492
|
-
|
507
|
+
|
493
508
|
#===リストの終端から名前・スプライトの対を取り出す
|
494
509
|
#リストに名前・スプライトをリストの終端から取り除いて、取り除いた対を返す
|
495
510
|
#返却値:: 終端にあった名前に対応するListPair構造体
|
496
511
|
def pop
|
497
|
-
return nil if @
|
498
|
-
|
499
|
-
@n2v.delete(name)
|
512
|
+
return nil if @list.empty?
|
513
|
+
@list.pop
|
500
514
|
end
|
501
|
-
|
515
|
+
|
502
516
|
#===名前・スプライトを登録する
|
503
517
|
#リストに名前・スプライトをリストの先頭に追加する
|
504
518
|
#(先頭に追加することがSpriteList#<<,add,pushとの違い)
|
@@ -506,12 +520,11 @@ module Miyako
|
|
506
520
|
#_sprite_:: スプライト本体
|
507
521
|
#返却値:: 追加した自分自身を渡す
|
508
522
|
def unshift(name, sprite)
|
509
|
-
@
|
510
|
-
@
|
511
|
-
@n2v[name] = ListPair.new(name, sprite)
|
523
|
+
@list.reject!{|pair| pair.name == name}
|
524
|
+
@list.unshift(ListPair.new(name, sprite))
|
512
525
|
return self
|
513
526
|
end
|
514
|
-
|
527
|
+
|
515
528
|
#===指定した名前の要素を取り除いたSpriteListを取得する
|
516
529
|
#登録されていない名前が指定されたときは何もしない
|
517
530
|
#(例)a=SpriteList(pair(:a),pair(:b),pair(:c))
|
@@ -527,7 +540,7 @@ module Miyako
|
|
527
540
|
list = self.dup
|
528
541
|
list.delete_if!{|name, sprite| !names.include?(name)}
|
529
542
|
end
|
530
|
-
|
543
|
+
|
531
544
|
#===指定した名前の要素を取り除く
|
532
545
|
#登録されていない名前が指定されたときは何もしない
|
533
546
|
#(例)a=SpriteList(pair(:a),pair(:b),pair(:c))
|
@@ -542,7 +555,7 @@ module Miyako
|
|
542
555
|
def slice!(*names)
|
543
556
|
self.delete_if!{|name, sprite| !names.include?(name)}
|
544
557
|
end
|
545
|
-
|
558
|
+
|
546
559
|
#===指定した数の要素を先頭から取り除く
|
547
560
|
#SpriteListの先頭からn個の要素を取り除いて、新しいSpriteListとする。
|
548
561
|
#nがマイナスの時は、後ろからn個の要素を取り除く。
|
@@ -565,10 +578,9 @@ module Miyako
|
|
565
578
|
#_n_:: 取り除く要素数。省略時は1
|
566
579
|
#返却値:: 取り除いた要素から作られたSpriteList
|
567
580
|
def shift(n = 1)
|
568
|
-
return nil if @
|
581
|
+
return nil if @list.empty?
|
569
582
|
return SpriteList.new if n == 0
|
570
|
-
|
571
|
-
SpriteList.new(names.map{|name| @n2v.delete(name).to_a})
|
583
|
+
SpriteList.new(@list.shift(n))
|
572
584
|
end
|
573
585
|
|
574
586
|
#===指定した数の要素を先頭から取り除く
|
@@ -584,11 +596,12 @@ module Miyako
|
|
584
596
|
# =>a=SpriteList(pair(:a),pair(:b),pair(:c))
|
585
597
|
# b=nil
|
586
598
|
#_n_:: 取り除く要素数。省略時は1
|
587
|
-
#返却値::
|
599
|
+
#返却値:: 取り除いたSpriteListPair
|
588
600
|
def delete(name)
|
589
|
-
|
590
|
-
|
591
|
-
|
601
|
+
pair = @list.find{|pair| pair.name == name}
|
602
|
+
return nil unless pair
|
603
|
+
@list.delete(pair)
|
604
|
+
pair
|
592
605
|
end
|
593
606
|
|
594
607
|
#===指定したインデックスの要素を取り除く
|
@@ -606,7 +619,7 @@ module Miyako
|
|
606
619
|
#_idx_:: 取り除く要素数。省略時は1
|
607
620
|
#返却値:: 取り除いた要素から作られたSpriteList
|
608
621
|
def delete_at(idx)
|
609
|
-
self.delete(@
|
622
|
+
self.delete(@list[idx])
|
610
623
|
end
|
611
624
|
|
612
625
|
#===ブロックの評価結果が真のときのみ削除するSpriteListを作成
|
@@ -619,7 +632,7 @@ module Miyako
|
|
619
632
|
#返却値:: 取り除いた後のSpriteList
|
620
633
|
def delete_if
|
621
634
|
ret = self.deep_dup
|
622
|
-
ret.each{|pair| ret.delete(pair
|
635
|
+
ret.each{|pair| ret.delete(pair) if yield(*pair)}
|
623
636
|
ret
|
624
637
|
end
|
625
638
|
|
@@ -633,7 +646,7 @@ module Miyako
|
|
633
646
|
#返却値:: 取り除いた後のSpriteList
|
634
647
|
def reject
|
635
648
|
ret = self.deep_dup
|
636
|
-
ret.each{|pair| ret.delete(pair
|
649
|
+
ret.each{|pair| ret.delete(pair) if yield(*pair)}
|
637
650
|
ret
|
638
651
|
end
|
639
652
|
|
@@ -646,7 +659,7 @@ module Miyako
|
|
646
659
|
# b=SpriteList(pair(:b))
|
647
660
|
#返却値:: 取り除いた後のSpriteList
|
648
661
|
def delete_if!
|
649
|
-
self.each{|pair| self.delete(pair
|
662
|
+
self.each{|pair| self.delete(pair) if yield(*pair)}
|
650
663
|
self
|
651
664
|
end
|
652
665
|
|
@@ -659,10 +672,10 @@ module Miyako
|
|
659
672
|
# b=SpriteList(pair(:b))
|
660
673
|
#返却値:: 取り除いた後のSpriteList
|
661
674
|
def reject!
|
662
|
-
self.each{|pair| self.delete(pair
|
675
|
+
self.each{|pair| self.delete(pair) if yield(*pair)}
|
663
676
|
self
|
664
677
|
end
|
665
|
-
|
678
|
+
|
666
679
|
#===別のSpriteListと破壊的につなげる
|
667
680
|
#自分自身にotherで指定したListの要素をつなげる。
|
668
681
|
#ただし、既に自分自身に登録されている要素は追加しない。
|
@@ -676,7 +689,7 @@ module Miyako
|
|
676
689
|
other.each{|pair| self.add(pair[0],pair[1].dup) unless self.has_name?(pair[0]) }
|
677
690
|
self
|
678
691
|
end
|
679
|
-
|
692
|
+
|
680
693
|
#===引数と自分自身との結果をマージする
|
681
694
|
#otherで割り付けられた名前のうち、自分では登録されていないものは新規登録する(方法はpushと同じ)
|
682
695
|
#名前がバッティングしたときは自分自身の本体を優先する
|
@@ -687,7 +700,7 @@ module Miyako
|
|
687
700
|
ret.names.each{|name| yield name, self[name], other[name] } if block_given?
|
688
701
|
ret
|
689
702
|
end
|
690
|
-
|
703
|
+
|
691
704
|
#===自分自身と引数との結果を破壊的にマージする
|
692
705
|
#otherで割り付けられた名前のうち、自分では登録されていないものは新規登録する(方法はpushと同じ)
|
693
706
|
#名前がバッティングしたときは自分自身の本体を優先する
|
@@ -698,20 +711,21 @@ module Miyako
|
|
698
711
|
self.names.each{|name| yield name, self[name], other[name] } if block_given?
|
699
712
|
self
|
700
713
|
end
|
701
|
-
|
714
|
+
|
702
715
|
#===名前-スプライトの対を繰り返し取得する
|
703
716
|
#インスタンスを配列化し、周回して要素を取得できるEnumeratorを生成する
|
704
717
|
#例:a=SpriteList(pair(:a),pair(:b),pair(:c)).cycle
|
705
718
|
# =>pair(:a),pair(:b),pair(:c),pair(:a),pair(:b),pair(:c),pair(:a)...
|
706
719
|
#返却値:: 生成されたEnumerator
|
707
720
|
def cycle(&block)
|
721
|
+
return self.to_enum(:cycle) unless block_given?
|
708
722
|
self.to_a.cycle(&block)
|
709
723
|
end
|
710
724
|
|
711
725
|
#===名前の順番をシャッフルしたSpriteListを返す
|
712
726
|
#自分自身を複製し、登録されている名前の順番をシャッフルして返す
|
713
727
|
#例:a=SpriteList(pair(:a),pair(:b),pair(:c))
|
714
|
-
# a.shuffle
|
728
|
+
# a.shuffle
|
715
729
|
# =>SpriteList(pair(:a),pair(:b),pair(:c)) or SpriteList(pair(:a),pair(:c),pair(:b)) or
|
716
730
|
# SpriteList(pair(:b),pair(:a),pair(:c)) or SpriteList(pair(:b),pair(:c),pair(:a)) or
|
717
731
|
# SpriteList(pair(:c),pair(:a),pair(:b)) or SpriteList(pair(:c),pair(:b),pair(:a))
|
@@ -724,13 +738,13 @@ module Miyako
|
|
724
738
|
#===名前の順番をシャッフルする
|
725
739
|
#自分自身で登録されている名前の順番をシャッフルする
|
726
740
|
#例:a=SpriteList(pair(:a),pair(:b),pair(:c))
|
727
|
-
# a.shuffle!
|
741
|
+
# a.shuffle!
|
728
742
|
# =>a=SpriteList(pair(:a),pair(:b),pair(:c)) or SpriteList(pair(:a),pair(:c),pair(:b)) or
|
729
743
|
# SpriteList(pair(:b),pair(:a),pair(:c)) or SpriteList(pair(:b),pair(:c),pair(:a)) or
|
730
744
|
# SpriteList(pair(:c),pair(:a),pair(:b)) or SpriteList(pair(:c),pair(:b),pair(:a))
|
731
745
|
#返却値:: シャッフルした自分自身
|
732
746
|
def shuffle!
|
733
|
-
@
|
747
|
+
@list.shuffle!
|
734
748
|
self
|
735
749
|
end
|
736
750
|
|
@@ -789,9 +803,9 @@ module Miyako
|
|
789
803
|
def permutation(n, &block)
|
790
804
|
self.to_a.permutation(n, &block)
|
791
805
|
end
|
792
|
-
|
806
|
+
|
793
807
|
private :reflesh
|
794
|
-
|
808
|
+
|
795
809
|
#===内容を引数のものに置き換える
|
796
810
|
#現在登録されているデータをいったん解除し、
|
797
811
|
#引数として渡ってきたSpriteListの無いようにデータを置き換える
|
@@ -817,7 +831,7 @@ module Miyako
|
|
817
831
|
ret = self.dup
|
818
832
|
ret.reverse!
|
819
833
|
end
|
820
|
-
|
834
|
+
|
821
835
|
#===名前の順番を破壊的に反転する
|
822
836
|
#例:a=SpriteList(pair(:a),pair(:b),pair(:c),pair(:d))
|
823
837
|
# a.reverse!
|
@@ -825,10 +839,10 @@ module Miyako
|
|
825
839
|
# a=SpriteList(pair(:d),pair(:c),pair(:b),pair(:a))
|
826
840
|
#返却値:: 自分自身を帰す
|
827
841
|
def reverse!
|
828
|
-
@
|
842
|
+
@list.reverse!
|
829
843
|
return self
|
830
844
|
end
|
831
|
-
|
845
|
+
|
832
846
|
#===名前と関連付けられたスプライトを取得する
|
833
847
|
#関連付けられているスプライトが見つからなければnilが返る
|
834
848
|
#例:a=SpriteList(pair(:a),pair(:b),pair(:c),pair(:d))
|
@@ -837,9 +851,10 @@ module Miyako
|
|
837
851
|
#_name_:: 名前
|
838
852
|
#返却値:: 名前に関連付けられたスプライト
|
839
853
|
def [](name)
|
840
|
-
|
854
|
+
pair = @list.find{|pair| pair.name == name }
|
855
|
+
return pair ? pair.body : nil
|
841
856
|
end
|
842
|
-
|
857
|
+
|
843
858
|
#===名前と関連付けられたスプライトを置き換える
|
844
859
|
#名前に対応したスプライトを、引数で指定したものに置き換える。
|
845
860
|
#ただし、まだ名前が登録されていないときは、新規追加と同じになる。
|
@@ -852,11 +867,11 @@ module Miyako
|
|
852
867
|
#_sprite_:: スプライト
|
853
868
|
#返却値:: 登録された自分自身
|
854
869
|
def []=(name, sprite)
|
855
|
-
return self.push([name, sprite]) unless
|
856
|
-
@
|
870
|
+
return self.push([name, sprite]) unless self.names.include?(name)
|
871
|
+
@list[self.names.index(name)].body = sprite
|
857
872
|
return self
|
858
873
|
end
|
859
|
-
|
874
|
+
|
860
875
|
#===名前の一覧から新しいSpriteListを生成する
|
861
876
|
#リストの順番はnamesの順番と同じ
|
862
877
|
#自分自身に登録されていない名前があったときはnilが登録される
|
@@ -867,11 +882,9 @@ module Miyako
|
|
867
882
|
#_names_:: 取り出した名前のリスト名前
|
868
883
|
#返却値:: 生成されたSpriteList
|
869
884
|
def pairs_at(*names)
|
870
|
-
|
871
|
-
names.each{|name| ret[name] = @n2v[name]}
|
872
|
-
ret
|
885
|
+
SpriteList.new(@list.select{|pair| names.include?(pair.name)})
|
873
886
|
end
|
874
|
-
|
887
|
+
|
875
888
|
#===名前の一覧から本体のリストを生成する
|
876
889
|
#本体のみの配列を返す。要素の順番はnamesの順番と同じ
|
877
890
|
#自分自身に登録されていない名前があったときはnilが登録される
|
@@ -882,9 +895,9 @@ module Miyako
|
|
882
895
|
#_names_:: 取り出した名前のリスト名前
|
883
896
|
#返却値:: 生成された配列
|
884
897
|
def values_at(*names)
|
885
|
-
names.map{|
|
898
|
+
@list.search{|pair| names.include?(pair.name)}.map{|pair| pair.body }
|
886
899
|
end
|
887
|
-
|
900
|
+
|
888
901
|
#===SpriteListを配列化し、同じ位置の要素を一つの配列にまとめる
|
889
902
|
#自分自身に登録されていない名前があったときはnilが登録される
|
890
903
|
#例:SpriteList(pair(:a),pair(:b),pair(:c)).zip(SpriteList(pair(:d),pair(:e),pair(:f))
|
@@ -903,7 +916,7 @@ module Miyako
|
|
903
916
|
lists = lists.map{|list| list.to_a}
|
904
917
|
self.to_a.zip(*lists, &block)
|
905
918
|
end
|
906
|
-
|
919
|
+
|
907
920
|
#===各要素の位置を変更する(変化量を指定)
|
908
921
|
#ブロックを渡したとき、戻り値として[更新したdx,更新したdy]とした配列を返すと、
|
909
922
|
#それがその要素での移動量となる。
|
@@ -924,12 +937,11 @@ module Miyako
|
|
924
937
|
#返却値:: 自分自身を返す
|
925
938
|
def move!(dx, dy)
|
926
939
|
if block_given?
|
927
|
-
@
|
928
|
-
pair
|
929
|
-
pair.move!(*(yield pair, i, dx, dy))
|
940
|
+
@list.each_with_index{|pair, i|
|
941
|
+
pair.body.move!(*(yield pair, i, dx, dy))
|
930
942
|
}
|
931
943
|
else
|
932
|
-
@
|
944
|
+
@list.each{|pair| pair.body.move!(dx, dy) }
|
933
945
|
end
|
934
946
|
self
|
935
947
|
end
|
@@ -954,12 +966,11 @@ module Miyako
|
|
954
966
|
#返却値:: 自分自身を返す
|
955
967
|
def move_to!(x, y)
|
956
968
|
if block_given?
|
957
|
-
@
|
958
|
-
pair
|
959
|
-
pair.move_to!(*(yield pair, i, x, y))
|
969
|
+
@list.each_with_index{|pair, i|
|
970
|
+
pair.body.move_to!(*(yield pair, i, x, y))
|
960
971
|
}
|
961
972
|
else
|
962
|
-
@
|
973
|
+
@list.each{|pair| pair.body.move_to!(x, y) }
|
963
974
|
end
|
964
975
|
self
|
965
976
|
end
|
@@ -981,39 +992,39 @@ module Miyako
|
|
981
992
|
# => [pair(:a),pair(:b),pair(:c)]
|
982
993
|
#返却値:: 生成した配列
|
983
994
|
def to_ary
|
984
|
-
@
|
995
|
+
@list.dup
|
985
996
|
end
|
986
|
-
|
997
|
+
|
987
998
|
#===スプライト名とスプライト本体とのハッシュを取得する
|
988
999
|
#スプライト名とスプライト本体が対になったハッシュを作成して返す
|
989
1000
|
#例:SpriteList(pair(:a),pair(:b),pair(:c)).to_hash
|
990
1001
|
# => {:a=>spr(:a),:b=>spr(:b),:c=>spr(:c)}
|
991
1002
|
#返却値:: 生成したハッシュ
|
992
1003
|
def to_hash
|
993
|
-
@
|
1004
|
+
@list.inject({}){|r, pair| r[pair.name] = pair.value}
|
994
1005
|
end
|
995
|
-
|
1006
|
+
|
996
1007
|
#===リストの中身を消去する
|
997
1008
|
#リストに登録されているスプライト名・スプライト本体への登録を解除する
|
998
1009
|
def clear
|
999
|
-
@
|
1000
|
-
@n2v.clear
|
1010
|
+
@list.clear
|
1001
1011
|
end
|
1002
|
-
|
1012
|
+
|
1003
1013
|
#===オブジェクトを解放する
|
1004
1014
|
def dispose
|
1005
|
-
@
|
1006
|
-
@
|
1007
|
-
@n2v.clear
|
1008
|
-
@n2v = nil
|
1015
|
+
@list.clear
|
1016
|
+
@list = nil
|
1009
1017
|
end
|
1010
|
-
|
1018
|
+
|
1011
1019
|
#===名前に対して値を渡す
|
1012
1020
|
#仕様はHash#fetchと同じ
|
1013
1021
|
def fetch(name, default = nil, &block)
|
1014
|
-
@
|
1022
|
+
ret = @list.find(nil){|pair| pair.name == name}
|
1023
|
+
ret = default unless ret
|
1024
|
+
yield ret if block_given?
|
1025
|
+
ret
|
1015
1026
|
end
|
1016
|
-
|
1027
|
+
|
1017
1028
|
#===指定の名前の直前に名前を挿入する
|
1018
1029
|
#配列上で、keyの前にnameを挿入する
|
1019
1030
|
#例:SpriteList(pair(:a),pair(:b),pair(:c)).insert(:b, :d, spr(:d))
|
@@ -1025,18 +1036,18 @@ module Miyako
|
|
1025
1036
|
#_value_:: (名前が未登録の時の)スプライト本体省略時はnil
|
1026
1037
|
#返却値:自分自身を返す
|
1027
1038
|
def insert(key, name, value = nil)
|
1028
|
-
raise MiyakoValueError, "Illegal key! : #{key}" unless
|
1039
|
+
raise MiyakoValueError, "Illegal key! : #{key}" unless self.names.include?(key)
|
1029
1040
|
return self if key == name
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
raise MiyakoValueError, "name is not regist! : #{name}" unless
|
1041
|
+
pair = ListPair.new(name, value)
|
1042
|
+
unless value
|
1043
|
+
pair = @list.find{|pair| pair.name == name}
|
1044
|
+
raise MiyakoValueError, "name is not regist! : #{name}" unless pair
|
1034
1045
|
end
|
1035
|
-
|
1036
|
-
@
|
1046
|
+
self.delete(name)
|
1047
|
+
@list.insert(self.names.index(key), pair)
|
1037
1048
|
self
|
1038
1049
|
end
|
1039
|
-
|
1050
|
+
|
1040
1051
|
#===指定の名前の直後に名前を挿入する
|
1041
1052
|
#配列上で、keyの後ろにnameを挿入する
|
1042
1053
|
#例:SpriteList(pair(:a),pair(:b),pair(:c)).insert_after(:b, :d, spr(:d))
|
@@ -1045,35 +1056,247 @@ module Miyako
|
|
1045
1056
|
# => SpriteList(pair(:a),pair(:c),pair(:b))
|
1046
1057
|
#_key_:: 挿入先の名前。この名前の直後に挿入する
|
1047
1058
|
#_name_:: 挿入するスプライトの名前
|
1048
|
-
#_value_:: (名前が未登録の時の)
|
1059
|
+
#_value_:: (名前が未登録の時の)スプライト本体。省略時はnil
|
1049
1060
|
#返却値:自分自身を返す
|
1050
1061
|
def insert_after(key, name, value = nil)
|
1051
|
-
raise MiyakoValueError, "Illegal key! : #{key}" unless
|
1062
|
+
raise MiyakoValueError, "Illegal key! : #{key}" unless self.names.include?(key)
|
1052
1063
|
return self if key == name
|
1053
1064
|
if value
|
1054
|
-
|
1065
|
+
pair = ListPair.new(name, value)
|
1055
1066
|
else
|
1056
|
-
|
1067
|
+
pair = @list.find{|pair| pair.name == name}
|
1068
|
+
raise MiyakoValueError, "name is not regist! : #{name}" unless pair
|
1057
1069
|
end
|
1058
|
-
|
1059
|
-
@
|
1070
|
+
self.delete(name)
|
1071
|
+
@list.insert(self.names.index(key)-@list.length, pair)
|
1060
1072
|
self
|
1061
1073
|
end
|
1062
|
-
|
1074
|
+
|
1063
1075
|
#===指定した要素の内容を入れ替える
|
1064
1076
|
#例:SpriteList(pair(:a),pair(:b),pair(:c),pair(:d)).insert(:b, :d)
|
1065
1077
|
# => SpriteList(pair(:a),pair(:d),pair(:c),pair(:b))
|
1066
1078
|
#_name1,name_:: 入れ替え対象の名前
|
1067
1079
|
#返却値:: 自分自身を帰す
|
1068
1080
|
def swap(name1, name2)
|
1069
|
-
|
1070
|
-
raise MiyakoValueError, "Illegal name! :
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1081
|
+
names = self.names
|
1082
|
+
raise MiyakoValueError, "Illegal name! : idx1:#{name1}" unless names.include?(name1)
|
1083
|
+
raise MiyakoValueError, "Illegal name! : idx2:#{name2}" unless names.include?(name2)
|
1084
|
+
idx1 = names.index(name1)
|
1085
|
+
idx2 = names.index(name2)
|
1086
|
+
@list[idx1], @list[idx2] = @list[idx2], @list[idx1]
|
1074
1087
|
return self
|
1075
1088
|
end
|
1076
|
-
|
1089
|
+
|
1090
|
+
#===指定の名前の順番に最前面から表示するように入れ替える
|
1091
|
+
#namesで示した名前一覧の順番を逆転させて、配列の一番後ろに入れ替える。
|
1092
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1093
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1094
|
+
#(例)
|
1095
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:d, :a, :e, :b,:c]
|
1096
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1097
|
+
#返却値:自分自身を返す
|
1098
|
+
def to_first_inner(name)
|
1099
|
+
raise MiyakoError, "Canoot regist name! #{name}" unless self.names.include?(name)
|
1100
|
+
@list.unshift(self.delete(name))
|
1101
|
+
end
|
1102
|
+
|
1103
|
+
private :to_first_inner
|
1104
|
+
|
1105
|
+
#===配列の最初で、指定の名前の順番に描画するように入れ替える
|
1106
|
+
#namesで示した名前一覧の順番を逆転させて、配列の一番後ろに入れ替える。
|
1107
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1108
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1109
|
+
#(例)
|
1110
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:d, :a, :e, :b,:c]
|
1111
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1112
|
+
#返却値:入れ替えたSpriteListの複製を返す
|
1113
|
+
def to_first(*names)
|
1114
|
+
ret = self.dup
|
1115
|
+
ret.to_first!(*names)
|
1116
|
+
end
|
1117
|
+
|
1118
|
+
#===配列の最初で、指定の名前の順番に描画するように破壊的に入れ替える
|
1119
|
+
#namesで示した名前一覧の順番を逆転させて、配列の一番後ろに入れ替える。
|
1120
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1121
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1122
|
+
#(例)
|
1123
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:b,:c,:e,:a,:d]
|
1124
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1125
|
+
#返却値:自分自身を返す
|
1126
|
+
def to_first!(*names)
|
1127
|
+
names.reverse.each{|name| to_first_inner(name) }
|
1128
|
+
self
|
1129
|
+
end
|
1130
|
+
|
1131
|
+
#===指定の名前の順番に最前面から表示するように入れ替える
|
1132
|
+
#namesで示した名前一覧の順番を逆転させて、配列の一番後ろに入れ替える。
|
1133
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1134
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1135
|
+
#(例)
|
1136
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:b,:c,:e,:a,:d]
|
1137
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1138
|
+
#返却値:自分自身を返す
|
1139
|
+
def pickup_inner(name)
|
1140
|
+
raise MiyakoError, "Canoot regist name! #{name}" unless self.names.include?(name)
|
1141
|
+
@list.push(self.delete(name))
|
1142
|
+
end
|
1143
|
+
|
1144
|
+
private :pickup_inner
|
1145
|
+
|
1146
|
+
#===指定の名前の順番に最前面から表示するように入れ替える
|
1147
|
+
#namesで示した名前一覧の順番を逆転させて、配列の一番後ろに入れ替える。
|
1148
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1149
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1150
|
+
#(例)
|
1151
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:b,:c,:e,:a,:d]
|
1152
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1153
|
+
#返却値:入れ替えたSpriteListの複製を返す
|
1154
|
+
def pickup(*names)
|
1155
|
+
ret = self.dup
|
1156
|
+
ret.pickup!(*names)
|
1157
|
+
end
|
1158
|
+
|
1159
|
+
#===指定の名前の順番に最前面から表示するように破壊的に入れ替える
|
1160
|
+
#namesで示した名前一覧の順に、配列の一番後ろに入れ替える。
|
1161
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1162
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1163
|
+
#(例)
|
1164
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:b,:c,:e,:a,:d]
|
1165
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1166
|
+
#返却値:自分自身を返す
|
1167
|
+
def pickup!(*names)
|
1168
|
+
names.reverse.each{|name| pickup_inner(name) }
|
1169
|
+
self
|
1170
|
+
end
|
1171
|
+
|
1172
|
+
#===配列の最後で、指定の名前の順番に描画するように入れ替える
|
1173
|
+
#配列の最後に、namesで示した名前一覧の順に要素を入れ替える。
|
1174
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1175
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1176
|
+
#(例)
|
1177
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:b,:c,:d,:a,:e]
|
1178
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1179
|
+
#返却値:入れ替えたSpriteListの複製を返す
|
1180
|
+
def to_last(*names)
|
1181
|
+
ret = self.dup
|
1182
|
+
ret.to_last!(*names)
|
1183
|
+
end
|
1184
|
+
|
1185
|
+
#===配列の最後で、指定の名前の順番に描画するように破壊的に入れ替える
|
1186
|
+
#配列の最後に、namesで示した名前一覧の順に要素を入れ替える。
|
1187
|
+
#(renderメソッドは、配列の一番後ろのスプライトが一番前に描画されるため
|
1188
|
+
#存在しない名前を指定すると例外MiyakoErrorが発生する
|
1189
|
+
#(例)
|
1190
|
+
#[:a,:b,:c,:d,:e]のとき、pickup(:d,:a,:e) -> [:b,:c,:d,:a,:e]
|
1191
|
+
#_names_:: 入れ替えるスプライトの名前一覧
|
1192
|
+
#返却値:自分自身を返す
|
1193
|
+
def to_last!(*names)
|
1194
|
+
names.each{|name| pickup_inner(name) }
|
1195
|
+
self
|
1196
|
+
end
|
1197
|
+
|
1198
|
+
#===要素全体もしくは一部を描画可能状態にする
|
1199
|
+
#他のshowメソッドとの違いは、名前のリストを引数に取れること(省略可)。
|
1200
|
+
#paramsで指定した名前に対応したスプライトのみ描画可能にする
|
1201
|
+
#paramsの省略時は自分自身を描画可能にする(現在、どの要素が描画可能かは考えない。他クラスのshowと同じ動作)
|
1202
|
+
#すべての要素を描画可能にしたいときは、引数にSpriteList#allを使用する
|
1203
|
+
#paramsに登録されていない名前が含まれているときは無視される
|
1204
|
+
#また、ブロック(名前nameとスプライトbodyが引数)を渡したときは、リストに渡した名前一覧のうち、
|
1205
|
+
#ブロックを評価した結果がtrueのときのみ描画可能にする。
|
1206
|
+
#(引数paramsを省略したときは、すべての要素に対してブロックを評価すると見なす)
|
1207
|
+
#_params_:: 表示対象に名前リスト。
|
1208
|
+
def show(*params)
|
1209
|
+
if block_given?
|
1210
|
+
if params == []
|
1211
|
+
@list.each{|pair| pair.body.show if yield(pair.name, pair.body) }
|
1212
|
+
else
|
1213
|
+
@list.each{|pair|
|
1214
|
+
next unless params.include?(pair.name)
|
1215
|
+
pair.body.show if yield(pair.name, pair.body)
|
1216
|
+
}
|
1217
|
+
end
|
1218
|
+
elsif params == []
|
1219
|
+
self.visible = true
|
1220
|
+
else
|
1221
|
+
@list.each{|pair| pair.body.show if params.include?(pair.name) }
|
1222
|
+
end
|
1223
|
+
end
|
1224
|
+
|
1225
|
+
#===要素全体もしくは一部を描画不可能状態にする
|
1226
|
+
#他のhideメソッドとの違いは、名前のリストを引数に取れること(省略可)。
|
1227
|
+
#paramsで指定した名前に対応したスプライトのみ描画不可能にする
|
1228
|
+
#paramsの省略時は自分自身を描画不可にする(現在、どの要素が描画不可になっているかは考えない。他クラスのhideと同じ動作)
|
1229
|
+
#すべての要素を描画不可能にしたいときは、引数にSpriteList#allを使用する
|
1230
|
+
#paramsに登録されていない名前が含まれているときは無視される
|
1231
|
+
#また、ブロック(名前nameとスプライトbodyが引数)を渡したときは、リストに渡した名前一覧のうち、
|
1232
|
+
#ブロックを評価した結果がtrueのときのみ描画可能にする。
|
1233
|
+
#(引数paramsを省略したときは、すべての要素に対してブロックを評価すると見なす)
|
1234
|
+
#_params_:: 表示対象に名前リスト。
|
1235
|
+
def hide(*params)
|
1236
|
+
if block_given?
|
1237
|
+
if params == []
|
1238
|
+
@list.each{|pair| pair.body.hide if yield(pair.name, pair.body) }
|
1239
|
+
else
|
1240
|
+
@list.each{|pair|
|
1241
|
+
next unless params.include?(pair.name)
|
1242
|
+
pair.body.hide if yield(pair.name, pair.body)
|
1243
|
+
}
|
1244
|
+
end
|
1245
|
+
elsif params == []
|
1246
|
+
self.visible = false
|
1247
|
+
else
|
1248
|
+
@list.each{|pair| pair.body.hide if params.include?(pair.name) }
|
1249
|
+
end
|
1250
|
+
end
|
1251
|
+
|
1252
|
+
#===要素全体もしくは一部のみ描画可能状態にする
|
1253
|
+
#paramsで指定した名前に対応したスプライトのみ描画可能にし、それ以外を描画不可能にする
|
1254
|
+
#paramsに登録されていない名前が含まれているときは無視される
|
1255
|
+
#paramsを省略したときは、すべての要素を描画可能にする
|
1256
|
+
#また、ブロック(名前nameとスプライトbodyが引数)を渡したときは、リストに渡した名前一覧のうち、
|
1257
|
+
#ブロックを評価した結果がtrueのときのみ描画可能にする。
|
1258
|
+
#_params_:: 表示対象に名前リスト。
|
1259
|
+
def show_only(*params)
|
1260
|
+
if block_given?
|
1261
|
+
if params == []
|
1262
|
+
@list.each{|pair| yield(pair.name, pair.body) ? pair.body.show : pair.body.hide }
|
1263
|
+
else
|
1264
|
+
@list.each{|pair|
|
1265
|
+
next unless params.include?(pair.name)
|
1266
|
+
yield(pair.name, pair.body) ? pair.body.show : pair.body.hide
|
1267
|
+
}
|
1268
|
+
end
|
1269
|
+
elsif params == []
|
1270
|
+
@list.each{|pair| pair.body.show }
|
1271
|
+
else
|
1272
|
+
@list.each{|pair| params.include?(pair.name) ? pair.body.show : pair.body.hide }
|
1273
|
+
end
|
1274
|
+
end
|
1275
|
+
|
1276
|
+
#===要素全体もしくは一部のみ描画不可能状態にする
|
1277
|
+
#paramsで指定した名前に対応したスプライトのみ描画不可能にし、それ以外を描画可能にする
|
1278
|
+
#paramsに登録されていない名前が含まれているときは無視される
|
1279
|
+
#paramsを省略したときは、すべての要素を描画不可能にする
|
1280
|
+
#また、ブロック(名前nameとスプライトbodyが引数)を渡したときは、リストに渡した名前一覧のうち、
|
1281
|
+
#ブロックを評価した結果がtrueのときのみ描画可能にする。
|
1282
|
+
#_params_:: 表示対象に名前リスト。
|
1283
|
+
def hide_only(*params)
|
1284
|
+
if block_given?
|
1285
|
+
if params == []
|
1286
|
+
@list.each{|pair| yield(pair.name, pair.body) ? pair.body.hide : pair.body.show }
|
1287
|
+
else
|
1288
|
+
@list.each{|pair|
|
1289
|
+
next unless params.include?(pair.name)
|
1290
|
+
yield(pair.name, pair.body) ? pair.body.hide : pair.body.show
|
1291
|
+
}
|
1292
|
+
end
|
1293
|
+
elsif params == []
|
1294
|
+
@list.each{|pair| pair.body.hide }
|
1295
|
+
else
|
1296
|
+
@list.each{|pair| params.include?(pair.name) ? pair.body.hide : pair.body.show }
|
1297
|
+
end
|
1298
|
+
end
|
1299
|
+
|
1077
1300
|
#===各要素のアニメーションを開始する
|
1078
1301
|
#各要素のstartメソッドを呼び出す
|
1079
1302
|
#返却値:: 自分自身を返す
|
@@ -1081,7 +1304,7 @@ module Miyako
|
|
1081
1304
|
self.sprite_only.each{|pair| pair[1].start }
|
1082
1305
|
return self
|
1083
1306
|
end
|
1084
|
-
|
1307
|
+
|
1085
1308
|
#===各要素のアニメーションを停止する
|
1086
1309
|
#各要素のstopメソッドを呼び出す
|
1087
1310
|
#返却値:: 自分自身を返す
|
@@ -1089,7 +1312,7 @@ module Miyako
|
|
1089
1312
|
self.sprite_only.each{|pair| pair[1].stop }
|
1090
1313
|
return self
|
1091
1314
|
end
|
1092
|
-
|
1315
|
+
|
1093
1316
|
#===各要素のアニメーションを先頭パターンに戻す
|
1094
1317
|
#各要素のresetメソッドを呼び出す
|
1095
1318
|
#返却値:: 自分自身を返す
|
@@ -1097,14 +1320,14 @@ module Miyako
|
|
1097
1320
|
self.sprite_only.each{|pair| pair[1].reset }
|
1098
1321
|
return self
|
1099
1322
|
end
|
1100
|
-
|
1323
|
+
|
1101
1324
|
#===各要素のアニメーションを更新する
|
1102
1325
|
#各要素のupdate_animationメソッドを呼び出す
|
1103
1326
|
#返却値:: 各要素のupdate_spriteメソッドを呼び出した結果を配列で返す
|
1104
1327
|
def update_animation
|
1105
1328
|
self.sprite_only.map{|pair| pair[1].update_animation }
|
1106
1329
|
end
|
1107
|
-
|
1330
|
+
|
1108
1331
|
#===配列の要素を画面に描画する
|
1109
1332
|
#配列の先頭から順にrenderメソッドを呼び出す。
|
1110
1333
|
#返却値:: 自分自身を帰す
|
@@ -1113,7 +1336,7 @@ module Miyako
|
|
1113
1336
|
self.sprite_only.each{|pair| pair[1].render }
|
1114
1337
|
return self
|
1115
1338
|
end
|
1116
|
-
|
1339
|
+
|
1117
1340
|
#===配列の要素を対象の画像に描画する
|
1118
1341
|
#配列の先頭から順にrender_toメソッドを呼び出す。
|
1119
1342
|
#_dst_:: 描画対象の画像インスタンス
|
@@ -1123,7 +1346,7 @@ module Miyako
|
|
1123
1346
|
self.sprite_only.each{|pair| pair[1].render_to(dst) }
|
1124
1347
|
return self
|
1125
1348
|
end
|
1126
|
-
|
1349
|
+
|
1127
1350
|
#===オブジェクトを文字列に変換する
|
1128
1351
|
#いったん、名前とスプライトとの対の配列に変換し、to_sメソッドで文字列化する。
|
1129
1352
|
#例:[[name1, sprite1], [name2, sprite2],...]
|