cyross-ruby-miyako 2.0.5.1.0 → 2.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 +1092 -929
- data/Rakefile +7 -7
- data/defines.h +144 -144
- data/extern.h +29 -29
- data/install_miyako.rb +87 -87
- data/lib/Miyako/API/audio.rb +572 -198
- data/lib/Miyako/API/basic_data.rb +825 -573
- data/lib/Miyako/API/bitmap.rb +534 -507
- data/lib/Miyako/API/choices.rb +481 -475
- data/lib/Miyako/API/collision.rb +486 -460
- data/lib/Miyako/API/diagram.rb +586 -561
- data/lib/Miyako/API/drawing.rb +151 -151
- data/lib/Miyako/API/exceptions.rb +105 -0
- data/lib/Miyako/API/fixedmap.rb +462 -428
- data/lib/Miyako/API/font.rb +430 -403
- data/lib/Miyako/API/input.rb +456 -447
- data/lib/Miyako/API/layout.rb +636 -433
- data/lib/Miyako/API/map.rb +583 -529
- data/lib/Miyako/API/map_event.rb +222 -198
- data/lib/Miyako/API/modules.rb +357 -109
- data/lib/Miyako/API/movie.rb +166 -154
- data/lib/Miyako/API/parts.rb +276 -189
- data/lib/Miyako/API/plane.rb +205 -166
- data/lib/Miyako/API/screen.rb +341 -325
- data/lib/Miyako/API/shape.rb +443 -443
- data/lib/Miyako/API/sprite.rb +771 -752
- data/lib/Miyako/API/sprite_animation.rb +490 -481
- data/lib/Miyako/API/sprite_list.rb +1135 -0
- data/lib/Miyako/API/spriteunit.rb +168 -147
- data/lib/Miyako/API/story.rb +350 -300
- data/lib/Miyako/API/textbox.rb +770 -725
- data/lib/Miyako/API/utility.rb +419 -388
- data/lib/Miyako/API/viewport.rb +189 -139
- data/lib/Miyako/API/yuki.rb +1226 -996
- data/lib/Miyako/EXT/miyako_cairo.rb +62 -62
- data/lib/Miyako/EXT/raster_scroll.rb +138 -138
- data/lib/Miyako/EXT/slides.rb +157 -157
- data/lib/Miyako/miyako.rb +201 -171
- data/lib/Miyako/miyako_require_only.rb +35 -0
- data/miyako_basicdata.c +590 -590
- data/miyako_bitmap.c +1225 -1225
- data/miyako_collision.c +403 -403
- data/miyako_drawing.c +187 -187
- data/miyako_font.c +334 -334
- data/miyako_hsv.c +830 -830
- data/miyako_input_audio.c +254 -0
- data/miyako_layout.c +191 -191
- data/miyako_no_katana.c +1078 -1074
- data/miyako_sprite2.c +431 -0
- data/miyako_transform.c +438 -438
- data/miyako_utility.c +288 -288
- data/sample/Animation1/m1ku.rb +68 -68
- data/sample/Animation2/lex.rb +96 -96
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +328 -386
- data/sample/Room3/blue.rb +297 -297
- data/sample/Room3/ending.rb +180 -180
- data/sample/Room3/green.rb +220 -220
- data/sample/Room3/main.rb +119 -119
- data/sample/Room3/main_component.rb +59 -59
- data/sample/Room3/red.rb +227 -227
- data/sample/Room3/room3.rb +25 -27
- data/sample/Room3/title.rb +184 -184
- data/sample/ball_action_sample.rb +204 -204
- data/sample/blit_rop.rb +70 -70
- data/sample/cairo_sample.rb +25 -25
- data/sample/circle_collision_test.rb +66 -66
- data/sample/collision_test.rb +33 -33
- data/sample/collision_test2.rb +108 -108
- data/sample/fixed_map_test/fixed_map_sample.rb +140 -140
- data/sample/fixed_map_test/readme.txt +72 -72
- data/sample/map_test/chara.rb +58 -58
- data/sample/map_test/main_parts.rb +69 -69
- data/sample/map_test/main_scene.rb +153 -153
- data/sample/map_test/map_manager.rb +75 -75
- data/sample/map_test/map_test.rb +23 -23
- data/sample/map_test/oasis.rb +71 -71
- data/sample/map_test/readme.txt +89 -89
- data/sample/map_test/route.rb +157 -157
- data/sample/map_test/town.rb +74 -74
- data/sample/polygon_test.rb +35 -35
- data/sample/rasterscroll.rb +24 -24
- data/sample/takahashi.rb +42 -42
- data/sample/textbox_sample.rb +189 -189
- data/sample/transform.rb +54 -54
- data/sample/utility_test.rb +73 -73
- data/sample/utility_test2.rb +61 -61
- data/sample/utility_test3.rb +64 -64
- data/sample/utility_test4.rb +73 -73
- data/uninstall_miyako.rb +19 -19
- data/win/miyako_no_katana.so +0 -0
- metadata +7 -2
data/lib/Miyako/API/modules.rb
CHANGED
@@ -1,109 +1,357 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
=begin
|
3
|
-
--
|
4
|
-
Miyako v2.
|
5
|
-
Copyright (C) 2007-2009 Cyross Makoto
|
6
|
-
|
7
|
-
This library is free software; you can redistribute it and/or
|
8
|
-
modify it under the terms of the GNU Lesser General Public
|
9
|
-
License as published by the Free Software Foundation; either
|
10
|
-
version 2.1 of the License, or (at your option) any later version.
|
11
|
-
|
12
|
-
This library is distributed in the hope that it will be useful,
|
13
|
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15
|
-
Lesser General Public License for more details.
|
16
|
-
|
17
|
-
You should have received a copy of the GNU Lesser General Public
|
18
|
-
License along with this library; if not, write to the Free Software
|
19
|
-
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
-
++
|
21
|
-
=end
|
22
|
-
|
23
|
-
module Miyako
|
24
|
-
=begin rdoc
|
25
|
-
==基本スプライトモジュール
|
26
|
-
スプライトの基本メソッドで構成されるテンプレートモジュール
|
27
|
-
=end
|
28
|
-
module SpriteBase
|
29
|
-
#===スプライトインスタンスを取得するメソッドのテンプレート
|
30
|
-
#_data_:: あとで書く
|
31
|
-
#返却値:: 自分自身を返す
|
32
|
-
def to_sprite(data = nil)
|
33
|
-
return self
|
34
|
-
end
|
35
|
-
|
36
|
-
#===SpriteUnit構造体を取得するメソッドのテンプレート
|
37
|
-
#返却値:: nilを返す
|
38
|
-
def to_unit
|
39
|
-
return nil
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
#返却値::
|
44
|
-
def
|
45
|
-
return
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
#返却値::
|
50
|
-
def
|
51
|
-
return
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
#返却値::
|
105
|
-
def
|
106
|
-
return
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
--
|
4
|
+
Miyako v2.1
|
5
|
+
Copyright (C) 2007-2009 Cyross Makoto
|
6
|
+
|
7
|
+
This library is free software; you can redistribute it and/or
|
8
|
+
modify it under the terms of the GNU Lesser General Public
|
9
|
+
License as published by the Free Software Foundation; either
|
10
|
+
version 2.1 of the License, or (at your option) any later version.
|
11
|
+
|
12
|
+
This library is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15
|
+
Lesser General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Lesser General Public
|
18
|
+
License along with this library; if not, write to the Free Software
|
19
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
+
++
|
21
|
+
=end
|
22
|
+
|
23
|
+
module Miyako
|
24
|
+
=begin rdoc
|
25
|
+
==基本スプライトモジュール
|
26
|
+
スプライトの基本メソッドで構成されるテンプレートモジュール
|
27
|
+
=end
|
28
|
+
module SpriteBase
|
29
|
+
#===スプライトインスタンスを取得するメソッドのテンプレート
|
30
|
+
#_data_:: あとで書く
|
31
|
+
#返却値:: 自分自身を返す
|
32
|
+
def to_sprite(data = nil)
|
33
|
+
return self
|
34
|
+
end
|
35
|
+
|
36
|
+
#===SpriteUnit構造体を取得するメソッドのテンプレート
|
37
|
+
#返却値:: nilを返す
|
38
|
+
def to_unit
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
|
42
|
+
#===描画可能・不可状態を返すメソッドのテンプレート
|
43
|
+
#返却値:: falseを返す
|
44
|
+
def visible
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
|
48
|
+
#===描画可能・不可状態を設定するメソッドのテンプレート
|
49
|
+
#返却値:: falseを返す
|
50
|
+
def visible=(v)
|
51
|
+
return self
|
52
|
+
end
|
53
|
+
|
54
|
+
#===描画可能状態にするメソッドのテンプレート
|
55
|
+
def show
|
56
|
+
self.visible = true
|
57
|
+
end
|
58
|
+
|
59
|
+
#===描画不可能状態にするメソッドのテンプレート
|
60
|
+
def hide
|
61
|
+
self.visible = false
|
62
|
+
end
|
63
|
+
|
64
|
+
#===領域の矩形を取得するメソッドのテンプレート
|
65
|
+
#返却値:: nilを返す
|
66
|
+
def rect
|
67
|
+
return nil
|
68
|
+
end
|
69
|
+
|
70
|
+
#===領域の最大矩形を取得するメソッドのテンプレート
|
71
|
+
#返却値:: nilを返す
|
72
|
+
def broad_rect
|
73
|
+
return nil
|
74
|
+
end
|
75
|
+
|
76
|
+
#===画像(Bitmapクラスのインスタンス)を取得するメソッドのテンプレート
|
77
|
+
#返却値:: nilを返す
|
78
|
+
def bitmap
|
79
|
+
return nil
|
80
|
+
end
|
81
|
+
|
82
|
+
#===画像内での描画開始位置(x座標)を取得するメソッドのテンプレート
|
83
|
+
#返却値:: 0を返す
|
84
|
+
def ox
|
85
|
+
return 0
|
86
|
+
end
|
87
|
+
|
88
|
+
#===画像内での描画開始位置(y座標)を取得するメソッドのテンプレート
|
89
|
+
#返却値:: 0を返す
|
90
|
+
def oy
|
91
|
+
return 0
|
92
|
+
end
|
93
|
+
|
94
|
+
#===画面への描画を指示するメソッドのテンプレート
|
95
|
+
#_block_:: 呼び出し時にブロック付き呼び出しが行われたときのブロック本体。呼び先に渡すことが出来る。ブロックがなければnilが入る
|
96
|
+
#返却値:: 自分自身を返す
|
97
|
+
def render(&block)
|
98
|
+
return self
|
99
|
+
end
|
100
|
+
|
101
|
+
#===画像への描画を指示するメソッドのテンプレート
|
102
|
+
#_dst_:: 対象の画像
|
103
|
+
#_block_:: 呼び出し時にブロック付き呼び出しが行われたときのブロック本体。呼び先に渡すことが出来る。ブロックがなければnilが入る
|
104
|
+
#返却値:: 自分自身を返す
|
105
|
+
def render_to(dst, &block)
|
106
|
+
return self
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
=begin rdoc
|
111
|
+
==基本アニメーションモジュール
|
112
|
+
アニメーションの基本メソッドで構成されるテンプレートモジュール
|
113
|
+
=end
|
114
|
+
module Animation
|
115
|
+
#===アニメーションを開始するメソッドのテンプレート
|
116
|
+
#返却値:: 自分自身を返す
|
117
|
+
def start
|
118
|
+
return self
|
119
|
+
end
|
120
|
+
|
121
|
+
#===アニメーションを停止するメソッドのテンプレート
|
122
|
+
#返却値:: 自分自身を返す
|
123
|
+
def stop
|
124
|
+
return self
|
125
|
+
end
|
126
|
+
|
127
|
+
#===アニメーションパターンを先頭に戻すメソッドのテンプレート
|
128
|
+
#返却値:: 自分自身を返す
|
129
|
+
def reset
|
130
|
+
return self
|
131
|
+
end
|
132
|
+
|
133
|
+
#===アニメーションを更新するメソッドのテンプレート
|
134
|
+
#返却値:: falseを返す(アニメーションパターンが更新されたときにtrueを返す)
|
135
|
+
def update_animation
|
136
|
+
return false
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
#==複数スプライト管理(配列)機能を追加するモジュール
|
141
|
+
#配列にスプライトとして最低限の機能を追加する。
|
142
|
+
#また、独自にswapなどのメソッドを追加。
|
143
|
+
#render、render_toを用意し、一気に描画が可能。配列の要素順に描画される。
|
144
|
+
#各要素の位置関係は関与していない(そこがPartsとの違い)
|
145
|
+
module SpriteArray
|
146
|
+
include SpriteBase
|
147
|
+
include Animation
|
148
|
+
include Enumerable
|
149
|
+
|
150
|
+
#===各要素からスプライト以外の要素を取り除いた配列を作成する
|
151
|
+
#SpriteBaseモジュール、もしくはSpriteArrayモジュールをインクルードしていない要素を削除した配列を返す
|
152
|
+
#登録されている名前順の配列になる。
|
153
|
+
#返却値:: 生成したスプライトを返す
|
154
|
+
def sprite_only
|
155
|
+
self.select{|e| e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
|
156
|
+
end
|
157
|
+
|
158
|
+
#===各要素からスプライト以外の要素を取り除いた配列を破壊的に作成する
|
159
|
+
#SpriteBaseモジュール、もしくはSpriteArrayモジュールをインクルードしていない要素を削除する
|
160
|
+
#登録されている名前順の配列になる。
|
161
|
+
#返却値:: 自分自身を返す
|
162
|
+
def sprite_only!
|
163
|
+
self.delete_if{|e| !e.class.include?(SpriteBase) && !e.class.include?(SpriteArray)}
|
164
|
+
end
|
165
|
+
|
166
|
+
#===配列要素を複製したコピー配列を取得する
|
167
|
+
#通常、インスタンスの複写に使われるdup,cloneメソッドは、同じ配列要素を見ているが、
|
168
|
+
#このメソッドでは、要素も複製したものが複製される(各要素のdeep_copyメソッドを呼び出す)
|
169
|
+
#返却値:: 複写した配列を返す
|
170
|
+
def deep_copy
|
171
|
+
self.map{|e| e.deep_copy }
|
172
|
+
end
|
173
|
+
|
174
|
+
#===各要素の描画可能状態を取得する
|
175
|
+
#各要素のvisibleメソッドの値を配列で取得する。
|
176
|
+
#登録されている名前順の配列になる。
|
177
|
+
#返却値:: true/falseの配列
|
178
|
+
def visible
|
179
|
+
return self.sprite_only.map{|e| e.visible}
|
180
|
+
end
|
181
|
+
|
182
|
+
#===各要素の描画可能状態を一気に設定する
|
183
|
+
#すべての要素のvisibleメソッドの値を変更する
|
184
|
+
#登録されている名前順の配列になる。
|
185
|
+
#_v_:: 設定する値(true/false)
|
186
|
+
#返却値:: 自分自身を返す
|
187
|
+
def visible=(v)
|
188
|
+
self.sprite_only.each{|e| e.visible = v}
|
189
|
+
return self
|
190
|
+
end
|
191
|
+
|
192
|
+
#===各要素の位置を変更する(変化量を指定)
|
193
|
+
#ブロックを渡したとき、戻り値として[更新したdx,更新したdy]とした配列を返すと、
|
194
|
+
#それがその要素での移動量となる。
|
195
|
+
#ブロックの引数は、|要素, インデックス(0,1,2,...), dx, dy|となる。
|
196
|
+
#(例)q=[a, b, c]
|
197
|
+
# #各スプライトの位置=すべて(10,15)
|
198
|
+
# q.move!(20,25) => aの位置:(30,40)
|
199
|
+
# bの位置:(30,40)
|
200
|
+
# cの位置:(30,40)
|
201
|
+
# q.move!(20,25){|e,i,dx,dy|
|
202
|
+
# [i*dx, i*dy]
|
203
|
+
# }
|
204
|
+
# => aの位置:(10,15)
|
205
|
+
# bの位置:(30,40)
|
206
|
+
# cの位置:(50,65)
|
207
|
+
#_dx_:: 移動量(x方向)。単位はピクセル
|
208
|
+
#_dy_:: 移動量(y方向)。単位はピクセル
|
209
|
+
#返却値:: 自分自身を返す
|
210
|
+
def move!(dx, dy)
|
211
|
+
if block_given?
|
212
|
+
self.sprite_only.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy))}
|
213
|
+
else
|
214
|
+
self.sprite_only.each{|e| e.move!(dx, dy)}
|
215
|
+
end
|
216
|
+
self
|
217
|
+
end
|
218
|
+
|
219
|
+
#===各要素の位置を変更する(変化量を指定)
|
220
|
+
#ブロックを渡したとき、戻り値として[更新したdx,更新したdy]とした配列を返すと、
|
221
|
+
#それがその要素での移動量となる。
|
222
|
+
#ブロックの引数は、|要素, インデックス(0,1,2,...), x, y|となる。
|
223
|
+
#(例)q=[a, b, c]
|
224
|
+
# #各スプライトの位置=すべて(10,15)
|
225
|
+
# q.move!(20,25) => aの位置:(20,25)
|
226
|
+
# bの位置:(20,25)
|
227
|
+
# cの位置:(20,25)
|
228
|
+
# q.move!(20,25){|e,i,dx,dy|
|
229
|
+
# [i*dx, i*dy]
|
230
|
+
# }
|
231
|
+
# => aの位置:( 0, 0)
|
232
|
+
# bの位置:(20,25)
|
233
|
+
# cの位置:(40,50)
|
234
|
+
#_x_:: 移動先位置(x方向)。単位はピクセル
|
235
|
+
#_y_:: 移動先位置(y方向)。単位はピクセル
|
236
|
+
#返却値:: 自分自身を返す
|
237
|
+
def move_to!(x, y)
|
238
|
+
if block_given?
|
239
|
+
self.sprite_only.each_with_index{|e, i| e.move_to!(*(yield e, i, x, y))}
|
240
|
+
else
|
241
|
+
self.sprite_only.each{|e| e.move_to!(x, y)}
|
242
|
+
end
|
243
|
+
self
|
244
|
+
end
|
245
|
+
|
246
|
+
#===描く画像のアニメーションを開始する
|
247
|
+
#各要素のstartメソッドを呼び出す
|
248
|
+
#返却値:: 自分自身を返す
|
249
|
+
def start
|
250
|
+
self.sprite_only.each{|sprite| sprite.start }
|
251
|
+
return self
|
252
|
+
end
|
253
|
+
|
254
|
+
#===描く画像のアニメーションを停止する
|
255
|
+
#各要素のstopメソッドを呼び出す
|
256
|
+
#返却値:: 自分自身を返す
|
257
|
+
def stop
|
258
|
+
self.sprite_only.each{|sprite| sprite.stop }
|
259
|
+
return self
|
260
|
+
end
|
261
|
+
|
262
|
+
#===描く画像のアニメーションを先頭パターンに戻す
|
263
|
+
#各要素のresetメソッドを呼び出す
|
264
|
+
#返却値:: 自分自身を返す
|
265
|
+
def reset
|
266
|
+
self.sprite_only.each{|sprite| sprite.reset }
|
267
|
+
return self
|
268
|
+
end
|
269
|
+
|
270
|
+
#===描く画像のアニメーションを更新する
|
271
|
+
#各要素のupdate_animationメソッドを呼び出す
|
272
|
+
#返却値:: 描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す
|
273
|
+
def update_animation
|
274
|
+
self.sprite_only.map{|e|
|
275
|
+
e.update_animation
|
276
|
+
}
|
277
|
+
end
|
278
|
+
|
279
|
+
#===指定した要素の内容を入れ替える
|
280
|
+
#配列の先頭から順にrenderメソッドを呼び出す。
|
281
|
+
#描画するインスタンスは、引数がゼロのrenderメソッドを持っているもののみ(持っていないときは呼び出さない)
|
282
|
+
#_idx1,idx2_:: 入れ替え対象の配列要素インデックス
|
283
|
+
#返却値:: 自分自身を帰す
|
284
|
+
def swap(idx1, idx2)
|
285
|
+
l = self.length
|
286
|
+
raise MiyakoValueError, "Illegal index range! : idx1:#{idx1}" if (idx1 >= l || idx1 < -l)
|
287
|
+
raise MiyakoValueError, "Illegal index range! : idx2:#{idx2}" if (idx2 >= l || idx2 < -l)
|
288
|
+
self[idx1], self[idx2] = self[idx2], self[idx1]
|
289
|
+
return self
|
290
|
+
end
|
291
|
+
|
292
|
+
#===配列の要素を画面に描画する
|
293
|
+
#配列の先頭から順にrenderメソッドを呼び出す。
|
294
|
+
#描画するインスタンスは、SpriteBaseモジュールがmixinされているクラスのみ
|
295
|
+
#返却値:: 自分自身を帰す
|
296
|
+
def render
|
297
|
+
self.sprite_only.each{|e| e.render }
|
298
|
+
return self
|
299
|
+
end
|
300
|
+
|
301
|
+
#===配列の要素を対象の画像に描画する
|
302
|
+
#配列の先頭から順にrender_toメソッドを呼び出す。
|
303
|
+
#_dst_:: 描画対象の画像インスタンス
|
304
|
+
#返却値:: 自分自身を帰す
|
305
|
+
def render_to(dst)
|
306
|
+
self.each{|e| e.render_to(dst) }
|
307
|
+
return self
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
#==ディープコピーを実装するモジュール
|
312
|
+
#dup、cloneとは違い、「ディープコピー(配列などの要素も複製するコピー)」を実装するためのモジュール。
|
313
|
+
module DeepCopy
|
314
|
+
#===複製を取得する
|
315
|
+
#ただし、再定義しているクラス(例:Arrayクラス)以外はdupメソッドの結果
|
316
|
+
#返却値:: 複写したインスタンスを返す
|
317
|
+
def deep_dup
|
318
|
+
(self && self.methods.include?(:dup)) ? self.dup : self
|
319
|
+
end
|
320
|
+
|
321
|
+
#===複製を取得する
|
322
|
+
#ただし、再定義しているクラス(例:Arrayクラス)以外はdupメソッドの結果
|
323
|
+
#返却値:: 複写したインスタンスを返す
|
324
|
+
def deep_clone
|
325
|
+
self.deep_dup
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
class Object
|
331
|
+
include Miyako::DeepCopy
|
332
|
+
end
|
333
|
+
|
334
|
+
class Array
|
335
|
+
include Miyako::SpriteArray
|
336
|
+
|
337
|
+
#===複製を取得する
|
338
|
+
#ただし、配列の要素もdeep_dupメソッドで複製する
|
339
|
+
#返却値:: 複写したインスタンスを返す
|
340
|
+
def deep_dup
|
341
|
+
self.dup.map{|e| (e && e.methods.include?(:deep_dup)) ? e.deep_dup : e }
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
class Hash
|
346
|
+
#===複製を取得する
|
347
|
+
#ただし、配列の要素もdeep_dupメソッドで複製する
|
348
|
+
#返却値:: 複写したインスタンスを返す
|
349
|
+
def deep_dup
|
350
|
+
ret = self.dup
|
351
|
+
ret.keys.each{|key|
|
352
|
+
v = ret[key]
|
353
|
+
(v && v.methods.include?(:deep_dup)) ? v.deep_dup : v
|
354
|
+
}
|
355
|
+
ret
|
356
|
+
end
|
357
|
+
end
|