cyross-ruby-miyako 2.0.5.1 → 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/movie.rb
CHANGED
@@ -1,154 +1,166 @@
|
|
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
|
-
#==動画管理クラス
|
25
|
-
#動画ファイル(MPEGファイル限定)をロード・再生するクラス
|
26
|
-
class Movie
|
27
|
-
include SpriteBase
|
28
|
-
include
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
#
|
38
|
-
#
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
@
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
@
|
51
|
-
|
52
|
-
@
|
53
|
-
|
54
|
-
@
|
55
|
-
|
56
|
-
@movie.
|
57
|
-
|
58
|
-
@movie.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
@
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
def
|
72
|
-
|
73
|
-
@
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
@movie
|
89
|
-
end
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
#
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
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
|
+
#==動画管理クラス
|
25
|
+
#動画ファイル(MPEGファイル限定)をロード・再生するクラス
|
26
|
+
class Movie
|
27
|
+
include SpriteBase
|
28
|
+
include Animation
|
29
|
+
include Layout
|
30
|
+
extend Forwardable
|
31
|
+
|
32
|
+
@@movie_list = []
|
33
|
+
|
34
|
+
attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
|
35
|
+
|
36
|
+
#===動画のインスタンスを作成する
|
37
|
+
#(但し、現在の所、loopパラメータは利用できない)
|
38
|
+
#_fname_:: 動画ファイル名
|
39
|
+
#_loops_:: ループ再生の可否。ループ再生させるときは true を渡す
|
40
|
+
#返却値:: 生成したインスタンス
|
41
|
+
def initialize(fname, loops = true)
|
42
|
+
init_layout
|
43
|
+
|
44
|
+
@x = 0
|
45
|
+
@y = 0
|
46
|
+
|
47
|
+
raise MiyakoIOError.no_file(fname) unless File.exist?(fname)
|
48
|
+
@movie = SDL::MPEG.load(fname)
|
49
|
+
@size = Size.new(@movie.info.width, @movie.info.height)
|
50
|
+
set_layout_size(*(@size.to_a))
|
51
|
+
|
52
|
+
@visible = true
|
53
|
+
@sprite = Sprite.new({:size=>@size , :type=>:movie})
|
54
|
+
@sprite.snap(self)
|
55
|
+
|
56
|
+
@movie.enable_audio(true) unless $not_use_audio
|
57
|
+
@movie.enable_video(true)
|
58
|
+
@movie.set_loop(loops)
|
59
|
+
|
60
|
+
@movie.set_display(@sprite.bitmap)
|
61
|
+
@movie.scale(1.0)
|
62
|
+
@@movie_list.push(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
def update_layout_position #:nodoc:
|
66
|
+
@x = @layout.pos[0]
|
67
|
+
@y = @layout.pos[1]
|
68
|
+
@sprite.move_to!(*@layout.pos)
|
69
|
+
end
|
70
|
+
|
71
|
+
def initialize_copy(obj) #:nodoc:
|
72
|
+
@sprite = @sprite.dup
|
73
|
+
@size = @size.dup
|
74
|
+
copy_layout
|
75
|
+
end
|
76
|
+
|
77
|
+
#===動画再生時の音量を指定する
|
78
|
+
#_v_:: 指定する音量。(0~100までの整数)
|
79
|
+
def set_volume(v)
|
80
|
+
return $not_use_audio
|
81
|
+
raise MiyakoValueError.over_range(v, 0, 100) unless (0..100).cover?(v)
|
82
|
+
@movie.set_volume(v)
|
83
|
+
end
|
84
|
+
|
85
|
+
#===動画再生中かを返す
|
86
|
+
#返却値:: 再生中のときは true を返す
|
87
|
+
def playing?
|
88
|
+
return @movie.status == SDL::MPEG::PLAYING
|
89
|
+
end
|
90
|
+
|
91
|
+
#===動画データを解放する
|
92
|
+
def dispose
|
93
|
+
@movie.stop if playing?
|
94
|
+
@sprite.dispose
|
95
|
+
layout_dispose
|
96
|
+
@@movie_list.delete(self)
|
97
|
+
@movie = nil
|
98
|
+
end
|
99
|
+
|
100
|
+
#===再生領域の範囲を設定する
|
101
|
+
#元動画のうち、表示させたい箇所を Rect クラスのインスタンスか4要素の配列で指定する
|
102
|
+
#_rect_:: 再生領域。
|
103
|
+
def region(rect)
|
104
|
+
@movie.set_display_region(*(rect.to_a))
|
105
|
+
end
|
106
|
+
|
107
|
+
#===動画の再生を一時停止する
|
108
|
+
#再生を裁可するには、 Miyako::Movie#rewind メソッドを呼び出す必要がある
|
109
|
+
#_pause_by_input_:: ダミー
|
110
|
+
def pause(pause_by_input)
|
111
|
+
@movie.pause
|
112
|
+
end
|
113
|
+
|
114
|
+
#===動画を再生させる
|
115
|
+
#動画の先頭から再生する。ブロックを渡したときは、ブロックを評価している間動画を再生する
|
116
|
+
#_vol_:: 動画再生時の音量。0~100の整数
|
117
|
+
def start(vol = nil)
|
118
|
+
if vol
|
119
|
+
raise MiyakoValueError.over_range(vol, 0, 100) unless (0..100).cover?(vol)
|
120
|
+
set_volume(vol) if vol
|
121
|
+
end
|
122
|
+
@movie.play
|
123
|
+
if block_given?
|
124
|
+
yield self
|
125
|
+
@movie.stop
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
#===動画再生を停止する
|
130
|
+
def stop
|
131
|
+
@movie.stop
|
132
|
+
end
|
133
|
+
|
134
|
+
#===再生中の動画の再生位置を返す
|
135
|
+
#位置は秒単位で返す
|
136
|
+
#返却値:: 再生位置
|
137
|
+
def current
|
138
|
+
return @movie.info.current_time
|
139
|
+
end
|
140
|
+
|
141
|
+
#===動画の長さを返す
|
142
|
+
#長さは、秒単位で返す。
|
143
|
+
#返却値:: 動画の長さ
|
144
|
+
def length
|
145
|
+
return @movie.info.total_time
|
146
|
+
end
|
147
|
+
|
148
|
+
#===画面に描画を指示する
|
149
|
+
#現在表示できる選択肢を、現在の状態で描画するよう指示する
|
150
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
151
|
+
#返却値:: 自分自身を返す
|
152
|
+
def render
|
153
|
+
return slef nless @visible
|
154
|
+
@sprite.render
|
155
|
+
return self
|
156
|
+
end
|
157
|
+
|
158
|
+
#===一時停止中の動画の再生を再開する
|
159
|
+
#Miyako::Movie#pause メソッドを実行した後に呼び出す
|
160
|
+
def_delegators(:@movie, :rewind)
|
161
|
+
#===指定時間ぶん、スキップ再生を行う
|
162
|
+
#size:: スキップ長(秒単位)
|
163
|
+
def_delegators(:@movie, :skip)
|
164
|
+
def_delegators(:@sprite, :rect, :broad_rect, :ox, :oy)
|
165
|
+
end
|
166
|
+
end
|
data/lib/Miyako/API/parts.rb
CHANGED
@@ -1,189 +1,276 @@
|
|
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
|
-
#==パーツ構成クラス
|
25
|
-
#複数のスプライト・アニメーションをまとめて一つの部品として構成できるクラス
|
26
|
-
#
|
27
|
-
#最初に、基準となる「レイアウト空間(LayoutSpaceクラスのインスタンス)」を登録し、その上にパーツを加える
|
28
|
-
#
|
29
|
-
#すべてのパーツは、すべてレイアウト空間にスナップされる
|
30
|
-
#(登録したパーツのレイアウト情報が変わることに注意)
|
31
|
-
class Parts
|
32
|
-
include
|
33
|
-
include
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
@
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@parts[name]
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
self
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
self
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
#返却値:: 自分自身
|
105
|
-
def
|
106
|
-
self.
|
107
|
-
end
|
108
|
-
|
109
|
-
|
110
|
-
#返却値:: 自分自身
|
111
|
-
def
|
112
|
-
|
113
|
-
return self
|
114
|
-
end
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
@parts_list
|
162
|
-
@
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
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
|
+
#==パーツ構成クラス
|
25
|
+
#複数のスプライト・アニメーションをまとめて一つの部品として構成できるクラス
|
26
|
+
#
|
27
|
+
#最初に、基準となる「レイアウト空間(LayoutSpaceクラスのインスタンス)」を登録し、その上にパーツを加える
|
28
|
+
#
|
29
|
+
#すべてのパーツは、すべてレイアウト空間にスナップされる
|
30
|
+
#(登録したパーツのレイアウト情報が変わることに注意)
|
31
|
+
class Parts
|
32
|
+
include SpriteBase
|
33
|
+
include Animation
|
34
|
+
include Enumerable
|
35
|
+
include Layout
|
36
|
+
extend Forwardable
|
37
|
+
|
38
|
+
attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
|
39
|
+
|
40
|
+
#===Partsクラスインスタンスを生成
|
41
|
+
#_size_:: パーツ全体の大きさ。Size構造体のインスタンスもしくは要素数が2の配列
|
42
|
+
def initialize(size)
|
43
|
+
@parts = {}
|
44
|
+
@parts_list = []
|
45
|
+
@visible = true
|
46
|
+
|
47
|
+
init_layout
|
48
|
+
set_layout_size(size[0], size[1])
|
49
|
+
end
|
50
|
+
|
51
|
+
def initialize_copy(obj) #:nodoc:
|
52
|
+
copy_layout
|
53
|
+
@parts_list = []
|
54
|
+
@parts = {}
|
55
|
+
obj.names.each{|name| self[name] = obj[name].deep_dup }
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
#===nameで示した補助パーツを返す
|
60
|
+
#_name_:: 補助パーツに与えた名前(シンボル)
|
61
|
+
#返却値:: 自分自身
|
62
|
+
def [](name)
|
63
|
+
return @parts[name]
|
64
|
+
end
|
65
|
+
|
66
|
+
#===補助パーツvalueをnameに割り当てる
|
67
|
+
#_name_:: 補助パーツに与える名前(シンボル)
|
68
|
+
#_value_:: 補助パーツのインスタンス(スプライト、テキストボックス、アニメーション、レイアウトボックスなど)
|
69
|
+
#返却値:: 自分自身
|
70
|
+
def []=(name, value)
|
71
|
+
if @parts_list.include?(name)
|
72
|
+
@parts_list.delete(name)
|
73
|
+
end
|
74
|
+
@parts_list.push(name)
|
75
|
+
@parts[name] = value
|
76
|
+
@parts[name].snap(self)
|
77
|
+
return self
|
78
|
+
end
|
79
|
+
|
80
|
+
#===すべての補助パーツの一覧を配列で返す
|
81
|
+
#返却値:: パーツ名の配列(登録順)
|
82
|
+
def parts
|
83
|
+
return @parts_list
|
84
|
+
end
|
85
|
+
|
86
|
+
#===すべての補助パーツの一覧を配列で返す
|
87
|
+
#返却値:: パーツ名の配列(登録順)
|
88
|
+
def names
|
89
|
+
return @parts_list
|
90
|
+
end
|
91
|
+
|
92
|
+
#===指定の補助パーツを除外する
|
93
|
+
#_name_:: 除外するパーツ名(シンボル)
|
94
|
+
#返却値:: 自分自身
|
95
|
+
def remove(name)
|
96
|
+
self.delete_snap_child(@parts[name])
|
97
|
+
@parts_list.delete(name)
|
98
|
+
@parts.delete(name)
|
99
|
+
return self
|
100
|
+
end
|
101
|
+
|
102
|
+
#===指定の補助パーツを除外する
|
103
|
+
#_name_:: 除外するパーツ名(シンボル)
|
104
|
+
#返却値:: 自分自身
|
105
|
+
def delete(name)
|
106
|
+
return self.remve(name)
|
107
|
+
end
|
108
|
+
|
109
|
+
#===メインパーツと補助パーツに対してブロックを評価する
|
110
|
+
#返却値:: 自分自身
|
111
|
+
def each
|
112
|
+
@parts_list.each{|k| yield @parts[k] }
|
113
|
+
return self
|
114
|
+
end
|
115
|
+
|
116
|
+
#===指定の名前の直前に名前を挿入する
|
117
|
+
#配列上で、スプライト名配列の指定の名前の前になるように名前を挿入する
|
118
|
+
#_key_:: 挿入先の名前。この名前の直前に挿入する
|
119
|
+
#_name_:: 挿入するスプライトの名前
|
120
|
+
#_value_:: (名前が未登録の時の)スプライト本体省略時はnil
|
121
|
+
#返却値:自分自身を返す
|
122
|
+
def insert(key, name, value = nil)
|
123
|
+
raise MiyakoValueError, "Illegal key! : #{key}" unless @parts_list.include?(key)
|
124
|
+
return self if key == name
|
125
|
+
if value
|
126
|
+
@parts[name] = value
|
127
|
+
else
|
128
|
+
raise MiyakoValueError, "name is not regist! : #{name}" unless @parts_list.include?(name)
|
129
|
+
end
|
130
|
+
@parts_list.delete(name) if @parts_list.include?(name)
|
131
|
+
@parts_list.insert(@parts_list.index(key), name)
|
132
|
+
self
|
133
|
+
end
|
134
|
+
|
135
|
+
#===指定の名前の直後に名前を挿入する
|
136
|
+
#配列上で、スプライト名配列の指定の名前の次の名前になるように名前を挿入する
|
137
|
+
#_key_:: 挿入先の名前。この名前の直後に挿入する
|
138
|
+
#_name_:: 挿入するスプライトの名前
|
139
|
+
#_value_:: (名前が未登録の時の)スプライト本体省略時はnil
|
140
|
+
#返却値:自分自身を返す
|
141
|
+
def insert_after(key, name, value = nil)
|
142
|
+
raise MiyakoValueError, "Illegal key! : #{key}" unless @parts_list.include?(key)
|
143
|
+
return self if key == name
|
144
|
+
if value
|
145
|
+
@parts[name] = value
|
146
|
+
else
|
147
|
+
raise MiyakoValueError, "name is not regist! : #{name}" unless @parts_list.include?(name)
|
148
|
+
end
|
149
|
+
@parts_list.delete(name) if @parts_list.include?(name)
|
150
|
+
@parts_list.insert(@parts_list.index(key)-@parts_list.length, name)
|
151
|
+
self
|
152
|
+
end
|
153
|
+
|
154
|
+
#===指定した要素の内容を入れ替える
|
155
|
+
#配列の先頭から順にrenderメソッドを呼び出す。
|
156
|
+
#描画するインスタンスは、SpriteBaseもしくはSpriteArrayモジュールを
|
157
|
+
#mixinしているクラスのインスタンスのみ
|
158
|
+
#_name1,name_:: 入れ替え対象の名前
|
159
|
+
#返却値:: 自分自身を帰す
|
160
|
+
def swap(name1, name2)
|
161
|
+
raise MiyakoValueError, "Illegal name! : idx1:#{name1}" unless @parts_list.include?(name1)
|
162
|
+
raise MiyakoValueError, "Illegal name! : idx2:#{name2}" unless @parts_list.include?(name2)
|
163
|
+
idx1 = @parts_list.index(name1)
|
164
|
+
idx2 = @parts_list.index(name2)
|
165
|
+
@parts_list[idx1], @parts_list[idx2] = @parts_list[idx2], @parts_list[idx1]
|
166
|
+
return self
|
167
|
+
end
|
168
|
+
|
169
|
+
#===名前の順番を反転する
|
170
|
+
#返却値:: 自分自身を帰す
|
171
|
+
def reverse!
|
172
|
+
@parts_list.reverse!
|
173
|
+
return self
|
174
|
+
end
|
175
|
+
|
176
|
+
#===メインパーツと補助パーツのすべてのアニメーションを開始する
|
177
|
+
#返却値:: 自分自身
|
178
|
+
def start
|
179
|
+
self.each{|parts| parts.start }
|
180
|
+
return self
|
181
|
+
end
|
182
|
+
|
183
|
+
#===メインパーツと補助パーツのすべてのアニメーションを停止する
|
184
|
+
#返却値:: 自分自身
|
185
|
+
def stop
|
186
|
+
self.each{|parts| parts.stop }
|
187
|
+
return self
|
188
|
+
end
|
189
|
+
|
190
|
+
#===メインパーツと補助パーツのすべてのアニメーションを更新する
|
191
|
+
#返却値:: 各パーツのupdate_animationの結果を配列として返す
|
192
|
+
def update_animation
|
193
|
+
self.map{|parts| parts.update_animation }
|
194
|
+
end
|
195
|
+
|
196
|
+
#===メインパーツと補助パーツのすべてのアニメーションを、最初のパターンに巻き戻す
|
197
|
+
#返却値:: 自分自身
|
198
|
+
def reset
|
199
|
+
self.each{|parts| parts.reset }
|
200
|
+
return self
|
201
|
+
end
|
202
|
+
|
203
|
+
def update #:nodoc:
|
204
|
+
self.each{|parts| parts.update }
|
205
|
+
return self
|
206
|
+
end
|
207
|
+
|
208
|
+
#===スプライトに変換した画像を表示する
|
209
|
+
#すべてのパーツを貼り付けた、1枚のスプライトを返す
|
210
|
+
#引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
|
211
|
+
#返却値:: 描画したスプライト
|
212
|
+
def to_sprite
|
213
|
+
rect = self.broad_rect
|
214
|
+
sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
|
215
|
+
Drawing.fill(sprite, [0,0,0])
|
216
|
+
Bitmap.ck_to_ac!(sprite, [0,0,0])
|
217
|
+
self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
|
218
|
+
yield sprite if block_given?
|
219
|
+
return sprite
|
220
|
+
end
|
221
|
+
|
222
|
+
#===SpriteUnit構造体を生成する
|
223
|
+
#いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
|
224
|
+
#返却値:: 生成したSpriteUnit構造体
|
225
|
+
def to_unit
|
226
|
+
return self.to_sprite.to_unit
|
227
|
+
end
|
228
|
+
|
229
|
+
#===現在の画面の最大の大きさを矩形で取得する
|
230
|
+
#各パーツの位置により、取得できる矩形の大きさが変わる
|
231
|
+
#但し、パーツ未登録の時は、インスタンス生成時の大きさから矩形を生成する
|
232
|
+
#返却値:: 生成された矩形(Rect構造体のインスタンス)
|
233
|
+
def broad_rect
|
234
|
+
rect = self.rect.to_a
|
235
|
+
return self.rect if @parts_list.length == 0
|
236
|
+
rect_list = rect.zip(*(self.map{|parts| parts.broad_rect.to_a}))
|
237
|
+
# width -> right
|
238
|
+
rect_list[2] = rect_list[2].zip(rect_list[0]).map{|xw| xw[0] + xw[1]}
|
239
|
+
# height -> bottom
|
240
|
+
rect_list[3] = rect_list[3].zip(rect_list[1]).map{|xw| xw[0] + xw[1]}
|
241
|
+
x, y = rect_list[0].min, rect_list[1].min
|
242
|
+
return Rect.new(x, y, rect_list[2].max - x, rect_list[3].max - y)
|
243
|
+
end
|
244
|
+
|
245
|
+
#===パーツに登録しているインスタンスを解放する
|
246
|
+
def dispose
|
247
|
+
@parts_list.clear
|
248
|
+
@parts_list = nil
|
249
|
+
@parts.clear
|
250
|
+
@parts = nil
|
251
|
+
end
|
252
|
+
|
253
|
+
#===パーツを画面に描画する
|
254
|
+
#各パーツの描画範囲は、それぞれのSpriteUnitの(ox,oy)を起点にする。
|
255
|
+
#画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、各パーツを貼り付ける。
|
256
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
257
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
258
|
+
#ブロックの引数は、|パーツのSpriteUnit|となる。
|
259
|
+
#デフォルトでは、描画順は登録順となる。順番を変更したいときは、renderメソッドをオーバーライドする必要がある
|
260
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
261
|
+
def render
|
262
|
+
end
|
263
|
+
|
264
|
+
#===パーツを画面に描画する
|
265
|
+
#各パーツの描画範囲は、それぞれのSpriteUnitの(ox,oy)を起点にする。
|
266
|
+
#転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
|
267
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
268
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
269
|
+
#ブロックの引数は、|パーツのSpriteUnit|となる。
|
270
|
+
#デフォルトでは、描画順は登録順となる。順番を変更したいときは、render_toメソッドをオーバーライドする必要がある
|
271
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
272
|
+
#_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
|
273
|
+
def render_to(dst)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|