cyross-ruby-miyako 2.0.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 +977 -0
- data/Rakefile +7 -0
- data/img/cursor.png +0 -0
- data/img/cursors.png +0 -0
- data/img/dice.png +0 -0
- data/img/wait_cursor.png +0 -0
- data/img/win_base.png +0 -0
- data/img/window.png +0 -0
- data/install_miyako.rb +75 -0
- data/lib/Miyako/API/audio.rb +198 -0
- data/lib/Miyako/API/basic_data.rb +431 -0
- data/lib/Miyako/API/bitmap.rb +35 -0
- data/lib/Miyako/API/choices.rb +308 -0
- data/lib/Miyako/API/collision.rb +444 -0
- data/lib/Miyako/API/diagram.rb +573 -0
- data/lib/Miyako/API/drawing.rb +110 -0
- data/lib/Miyako/API/fixedmap.rb +315 -0
- data/lib/Miyako/API/font.rb +384 -0
- data/lib/Miyako/API/input.rb +440 -0
- data/lib/Miyako/API/layout.rb +451 -0
- data/lib/Miyako/API/map.rb +403 -0
- data/lib/Miyako/API/map_event.rb +198 -0
- data/lib/Miyako/API/modules.rb +109 -0
- data/lib/Miyako/API/movie.rb +151 -0
- data/lib/Miyako/API/parts.rb +154 -0
- data/lib/Miyako/API/plane.rb +131 -0
- data/lib/Miyako/API/screen.rb +257 -0
- data/lib/Miyako/API/shape.rb +362 -0
- data/lib/Miyako/API/sprite.rb +338 -0
- data/lib/Miyako/API/sprite_animation.rb +461 -0
- data/lib/Miyako/API/spriteunit.rb +113 -0
- data/lib/Miyako/API/story.rb +224 -0
- data/lib/Miyako/API/textbox.rb +496 -0
- data/lib/Miyako/API/viewport.rb +435 -0
- data/lib/Miyako/API/yuki.rb +779 -0
- data/lib/Miyako/EXT/miyako_cairo.rb +60 -0
- data/lib/Miyako/EXT/raster_scroll.rb +138 -0
- data/lib/Miyako/EXT/slides.rb +136 -0
- data/lib/Miyako/miyako.rb +172 -0
- data/miyako.png +0 -0
- data/miyako_banner.png +0 -0
- data/miyako_no_katana/extconf.rb +34 -0
- data/miyako_no_katana/miyako_no_katana.c +3301 -0
- data/sample/Animation1/m1ku.rb +89 -0
- data/sample/Animation1/m1ku_arm_0.png +0 -0
- data/sample/Animation1/m1ku_arm_1.png +0 -0
- data/sample/Animation1/m1ku_arm_2.png +0 -0
- data/sample/Animation1/m1ku_arm_3.png +0 -0
- data/sample/Animation1/m1ku_back.jpg +0 -0
- data/sample/Animation1/m1ku_body.png +0 -0
- data/sample/Animation1/m1ku_eye_0.png +0 -0
- data/sample/Animation1/m1ku_eye_1.png +0 -0
- data/sample/Animation1/m1ku_eye_2.png +0 -0
- data/sample/Animation1/m1ku_eye_3.png +0 -0
- data/sample/Animation1/m1ku_hair_front.png +0 -0
- data/sample/Animation1/m1ku_hair_rear.png +0 -0
- data/sample/Animation1/readme.txt +72 -0
- data/sample/Animation2/lex.rb +95 -0
- data/sample/Animation2/lex_back.png +0 -0
- data/sample/Animation2/lex_body.png +0 -0
- data/sample/Animation2/lex_roadroller.png +0 -0
- data/sample/Animation2/lex_wheel_0.png +0 -0
- data/sample/Animation2/lex_wheel_1.png +0 -0
- data/sample/Animation2/lex_wheel_2.png +0 -0
- data/sample/Animation2/readme.txt +72 -0
- data/sample/Animation2/song_title.png +0 -0
- data/sample/Diagram_sample/back.png +0 -0
- data/sample/Diagram_sample/chr01.png +0 -0
- data/sample/Diagram_sample/chr02.png +0 -0
- data/sample/Diagram_sample/cursor.png +0 -0
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +283 -0
- data/sample/Diagram_sample/readme.txt +87 -0
- data/sample/Diagram_sample/wait_cursor.png +0 -0
- data/sample/Room3/blue.rb +250 -0
- data/sample/Room3/ending.rb +175 -0
- data/sample/Room3/green.rb +185 -0
- data/sample/Room3/image/akamatsu.png +0 -0
- data/sample/Room3/image/aoyama.png +0 -0
- data/sample/Room3/image/congra.png +0 -0
- data/sample/Room3/image/congratulation.png +0 -0
- data/sample/Room3/image/congratulation_bg.png +0 -0
- data/sample/Room3/image/cursor.png +0 -0
- data/sample/Room3/image/midori.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
- data/sample/Room3/image/room_blue.png +0 -0
- data/sample/Room3/image/room_green.png +0 -0
- data/sample/Room3/image/room_red.png +0 -0
- data/sample/Room3/image/start.png +0 -0
- data/sample/Room3/image/three_doors.png +0 -0
- data/sample/Room3/image/wait_cursor.png +0 -0
- data/sample/Room3/main.rb +102 -0
- data/sample/Room3/main_component.rb +58 -0
- data/sample/Room3/readme.txt +76 -0
- data/sample/Room3/red.rb +200 -0
- data/sample/Room3/room3.rb +26 -0
- data/sample/Room3/title.rb +171 -0
- data/sample/fixed_map_test/cursor.png +0 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +149 -0
- data/sample/fixed_map_test/map.csv +19 -0
- data/sample/fixed_map_test/map_01.png +0 -0
- data/sample/fixed_map_test/map_sample.rb +121 -0
- data/sample/fixed_map_test/mapchip.csv +23 -0
- data/sample/fixed_map_test/monster.png +0 -0
- data/sample/fixed_map_test/readme.txt +72 -0
- data/sample/map_test/chara.rb +50 -0
- data/sample/map_test/chr1.png +0 -0
- data/sample/map_test/cursor.png +0 -0
- data/sample/map_test/main_parts.rb +48 -0
- data/sample/map_test/main_scene.rb +137 -0
- data/sample/map_test/map.png +0 -0
- data/sample/map_test/map2.png +0 -0
- data/sample/map_test/map_layer.csv +127 -0
- data/sample/map_test/map_manager.rb +92 -0
- data/sample/map_test/map_test.rb +23 -0
- data/sample/map_test/mapchip.csv +21 -0
- data/sample/map_test/oasis.rb +65 -0
- data/sample/map_test/readme.txt +87 -0
- data/sample/map_test/route.rb +144 -0
- data/sample/map_test/sea.png +0 -0
- data/sample/map_test/town.rb +68 -0
- data/sample/map_test/wait_cursor.png +0 -0
- data/sample/map_test/window.png +0 -0
- data/win/miyako_no_katana.so +0 -0
- metadata +194 -0
@@ -0,0 +1,444 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
--
|
4
|
+
Miyako v2.0
|
5
|
+
Copyright (C) 2007-2008 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
|
+
#コリジョンの範囲は、元データ(スプライト等)の左上端を[0,0]として考案する
|
26
|
+
#本クラスに設定できる方向(direction)・移動量(amount)は、コリジョンの範囲・位置に影響しない
|
27
|
+
class Collision
|
28
|
+
extend Forwardable
|
29
|
+
|
30
|
+
# コリジョンの範囲([x,y,w,h])
|
31
|
+
attr_accessor :rect
|
32
|
+
# 元データの位置([x,y])
|
33
|
+
attr_accessor :pos
|
34
|
+
# 移動方向([dx,dy], dx,dy:-1,0,1)
|
35
|
+
attr_accessor :direction
|
36
|
+
# 移動量([w,h])
|
37
|
+
attr_accessor :amount
|
38
|
+
|
39
|
+
#===コリジョンのインスタンスを作成する
|
40
|
+
#_rect_:: コリジョンを設定する範囲
|
41
|
+
#_pos_:: 元データの位置
|
42
|
+
#返却値:: 作成されたコリジョン
|
43
|
+
def initialize(rect, pos)
|
44
|
+
@rect = Rect.new(*(rect.to_a[0..3]))
|
45
|
+
@pos = Point.new(*(pos.to_a[0..1]))
|
46
|
+
@direction = Point.new(0, 0)
|
47
|
+
@amount = Size.new(0, 0)
|
48
|
+
end
|
49
|
+
|
50
|
+
#===コリジョンの方向を転換する
|
51
|
+
#_dx_:: 変換する方向(x軸方向、-1,0,1の3種類)
|
52
|
+
#_dy_:: 変換する方向(y軸方向、-1,0,1の3種類)
|
53
|
+
#返却値:: 自分自身を返す
|
54
|
+
def turn(dx, dy)
|
55
|
+
@direction = Point.new(dx, dy)
|
56
|
+
return self
|
57
|
+
end
|
58
|
+
|
59
|
+
#===コリジョンの移動量を変更する
|
60
|
+
#_mx_:: 変更する移動量(x軸方向)
|
61
|
+
#_my_:: 変更する移動量(y軸方向)
|
62
|
+
#返却値:: 自分自身を返す
|
63
|
+
def adjust(mx, my)
|
64
|
+
@amount = Size.new(mx, my)
|
65
|
+
return self
|
66
|
+
end
|
67
|
+
|
68
|
+
#===当たり判定を行う(領域が重なっている)
|
69
|
+
#_c2_:: 判定対象のコリジョンインスタンス
|
70
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
71
|
+
def collision?(c2)
|
72
|
+
return Collision.collision?(self, c2)
|
73
|
+
end
|
74
|
+
|
75
|
+
#===当たり判定を行う(領域が当たっている(重なっていない))
|
76
|
+
#_c2_:: 判定対象のコリジョンインスタンス
|
77
|
+
#返却値:: 領域が当たっていれば true を返す
|
78
|
+
def meet?(c2)
|
79
|
+
return Collision.meet?(self, c2)
|
80
|
+
end
|
81
|
+
|
82
|
+
#===当たり判定を行う(移動後に領域が重なっている(移動前は重なっていない))
|
83
|
+
#_c2_:: 判定対象のコリジョンインスタンス
|
84
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
85
|
+
def into?(c2)
|
86
|
+
return Collision.into?(self, c2)
|
87
|
+
end
|
88
|
+
|
89
|
+
#===当たり判定を行う(移動後に領域が離れている(移動前は重なっている))
|
90
|
+
#_c2_:: 判定対象のコリジョンインスタンス
|
91
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
92
|
+
def out?(c2)
|
93
|
+
return Collision.out?(self, c2)
|
94
|
+
end
|
95
|
+
|
96
|
+
#===当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている))
|
97
|
+
#_c2_:: 判定対象のコリジョンインスタンス
|
98
|
+
#返却値:: 領域が覆われていれば true を返す
|
99
|
+
def cover?(c2)
|
100
|
+
return Collision.cover?(self, c2)
|
101
|
+
end
|
102
|
+
|
103
|
+
#===コリジョンをの位置を、指定の移動量で移動する
|
104
|
+
#_x_:: 移動量(x方向)。単位はピクセル
|
105
|
+
#_y_:: 移動量(y方向)。単位はピクセル
|
106
|
+
#返却値:: 自分自身を返す
|
107
|
+
def move(x, y)
|
108
|
+
@pos.move(x, y)
|
109
|
+
return self
|
110
|
+
end
|
111
|
+
|
112
|
+
#===コリジョンをの位置を、指定の位置へ移動する
|
113
|
+
#_x_:: 移動先の位置(x方向)。単位はピクセル
|
114
|
+
#_y_:: 移動先の位置(y方向)。単位はピクセル
|
115
|
+
#返却値:: 自分自身を返す
|
116
|
+
def move_to(x, y)
|
117
|
+
@pos.move_to(x, y)
|
118
|
+
return self
|
119
|
+
end
|
120
|
+
|
121
|
+
#===当たり判定を行う(領域が重なっている)
|
122
|
+
#_c1_:: 判定対象のコリジョンインスタンス(1)
|
123
|
+
#_c2_:: 判定対象のコリジョンインスタンス(2)
|
124
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
125
|
+
def Collision.collision?(c1, c2)
|
126
|
+
l1 = c1.pos[0] + c1.rect[0]
|
127
|
+
t1 = c1.pos[1] + c1.rect[1]
|
128
|
+
r1 = l1 + c1.rect[2] - 1
|
129
|
+
b1 = t1 + c1.rect[3] - 1
|
130
|
+
l2 = c2.pos[0] + c2.rect[0]
|
131
|
+
t2 = c2.pos[1] + c2.rect[1]
|
132
|
+
r2 = l2 + c2.rect[2] - 1
|
133
|
+
b2 = t2 + c2.rect[3] - 1
|
134
|
+
v = 0
|
135
|
+
v |= 1 if l1 <= l2 && l2 <= r1
|
136
|
+
v |= 1 if l1 <= r2 && r2 <= r1
|
137
|
+
v |= 2 if t1 <= t2 && t2 <= b1
|
138
|
+
v |= 2 if t1 <= b2 && b2 <= b1
|
139
|
+
return v == 3
|
140
|
+
end
|
141
|
+
|
142
|
+
#===当たり判定を行う(移動後の領域が重なっている)
|
143
|
+
#_c1_:: 判定対象のコリジョンインスタンス(1)
|
144
|
+
#_c2_:: 判定対象のコリジョンインスタンス(2)
|
145
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
146
|
+
def Collision.collision_with_move?(c1, c2)
|
147
|
+
l1 = c1.pos[0] + c1.rect[0] + c1.direction[0] * c1.amount[0]
|
148
|
+
t1 = c1.pos[1] + c1.rect[1] + c1.direction[1] * c1.amount[1]
|
149
|
+
r1 = l1 + c1.rect[2] - 1
|
150
|
+
b1 = t1 + c1.rect[3] - 1
|
151
|
+
l2 = c2.pos[0] + c2.rect[0] + c2.direction[0] * c2.amount[0]
|
152
|
+
t2 = c2.pos[1] + c2.rect[1] + c2.direction[1] * c2.amount[1]
|
153
|
+
r2 = l2 + c2.rect[2] - 1
|
154
|
+
b2 = t2 + c2.rect[3] - 1
|
155
|
+
v = 0
|
156
|
+
v |= 1 if l1 <= l2 && l2 <= r1
|
157
|
+
v |= 1 if l1 <= r2 && r2 <= r1
|
158
|
+
v |= 2 if t1 <= t2 && t2 <= b1
|
159
|
+
v |= 2 if t1 <= b2 && b2 <= b1
|
160
|
+
return v == 3
|
161
|
+
end
|
162
|
+
|
163
|
+
#===当たり判定を行う(領域が当たっている(重なっていない))
|
164
|
+
#_c1_:: 判定対象のコリジョンインスタンス(1)
|
165
|
+
#_c2_:: 判定対象のコリジョンインスタンス(2)
|
166
|
+
#返却値:: 領域が当たっていれば true を返す
|
167
|
+
def Collision.meet?(c1, c2)
|
168
|
+
l1 = c1.pos[0] + c1.rect[0]
|
169
|
+
t1 = c1.pos[1] + c1.rect[1]
|
170
|
+
r1 = l1 + c1.rect[2]
|
171
|
+
b1 = t1 + c1.rect[3]
|
172
|
+
l2 = c2.pos[0] + c2.rect[0]
|
173
|
+
t2 = c2.pos[1] + c2.rect[1]
|
174
|
+
r2 = l2 + c2.rect[2]
|
175
|
+
b2 = t2 + c2.rect[3]
|
176
|
+
v = 0
|
177
|
+
v |= 1 if r1 == l2
|
178
|
+
v |= 1 if b1 == t2
|
179
|
+
v |= 1 if l1 == r2
|
180
|
+
v |= 1 if t1 == b2
|
181
|
+
return v == 1
|
182
|
+
end
|
183
|
+
|
184
|
+
#===当たり判定を行う(移動後に領域が重なっている(移動前は重なっていない))
|
185
|
+
#_c1_:: 判定対象のコリジョンインスタンス(1)
|
186
|
+
#_c2_:: 判定対象のコリジョンインスタンス(2)
|
187
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
188
|
+
def Collision.into?(c1, c2)
|
189
|
+
f1 = Collision.collision?(c1, c2)
|
190
|
+
f2 = Collision.collision_with_move?(c1, c2)
|
191
|
+
return !f1 & f2
|
192
|
+
end
|
193
|
+
|
194
|
+
#===当たり判定を行う(移動後に領域が離れている(移動前は重なっている))
|
195
|
+
#_c1_:: 判定対象のコリジョンインスタンス(1)
|
196
|
+
#_c2_:: 判定対象のコリジョンインスタンス(2)
|
197
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
198
|
+
def Collision.out?(c1, c2)
|
199
|
+
f1 = Collision.collision?(c1, c2)
|
200
|
+
f2 = Collision.collision_with_move?(c1, c2)
|
201
|
+
return f1 & !f2
|
202
|
+
end
|
203
|
+
|
204
|
+
#===当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている))
|
205
|
+
#_c1_:: 判定対象のコリジョンインスタンス(1)
|
206
|
+
#_c2_:: 判定対象のコリジョンインスタンス(2)
|
207
|
+
#返却値:: 領域が覆われていれば true を返す
|
208
|
+
def Collision.cover?(c1, c2)
|
209
|
+
l1 = c1.pos[0] + c1.rect[0]
|
210
|
+
t1 = c1.pos[1] + c1.rect[1]
|
211
|
+
r1 = l1 + c1.rect[2]
|
212
|
+
b1 = t1 + c1.rect[3]
|
213
|
+
l2 = c2.pos[0] + c2.rect[0]
|
214
|
+
t2 = c2.pos[1] + c2.rect[1]
|
215
|
+
r2 = l2 + c2.rect[2]
|
216
|
+
b2 = t2 + c2.rect[3]
|
217
|
+
v = 0
|
218
|
+
v |= 1 if l1 <= l2 && r2 <= r1
|
219
|
+
v |= 2 if t1 <= t2 && b2 <= b1
|
220
|
+
v |= 4 if l2 <= l1 && r1 <= r2
|
221
|
+
v |= 8 if t2 <= t1 && b1 <= b2
|
222
|
+
return v == 3 || v == 12
|
223
|
+
end
|
224
|
+
|
225
|
+
#===あとで書く
|
226
|
+
#返却値:: あとで書く
|
227
|
+
def dispose
|
228
|
+
@pos.clear
|
229
|
+
@pos = nil
|
230
|
+
@rect.clear
|
231
|
+
@rect = nil
|
232
|
+
@amount.clear
|
233
|
+
@amount = nil
|
234
|
+
@direction.clear
|
235
|
+
@direction = nil
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
#==コリジョン管理クラス
|
240
|
+
#複数のコリジョンと元オブジェクトを配列の様に一括管理できる
|
241
|
+
#当たり判定を一括処理することで高速化を図る
|
242
|
+
class Collisions
|
243
|
+
include Enumerable
|
244
|
+
extend Forwardable
|
245
|
+
|
246
|
+
#===コリジョンのインスタンスを作成する
|
247
|
+
#_collisions_:: コリジョンの配列。デフォルトは []
|
248
|
+
#_pos_:: 元データの配列。デフォルトは []
|
249
|
+
#返却値:: 作成されたインスタンス
|
250
|
+
def initialize(collisions=[], bodies=[])
|
251
|
+
@collisions = Array.new(collisions).zip(bodies)
|
252
|
+
end
|
253
|
+
|
254
|
+
#===コリジョンと本体を追加する
|
255
|
+
#_collisions_:: コリジョン
|
256
|
+
#_pos_:: 元データ
|
257
|
+
#返却値:: 自分自身を返す
|
258
|
+
def add(collision, body)
|
259
|
+
@collisions << [collision, body]
|
260
|
+
return self
|
261
|
+
end
|
262
|
+
|
263
|
+
#===インスタンスに、コリジョンと本体の集合を追加する
|
264
|
+
#_collisions_:: コリジョンの配列
|
265
|
+
#_pos_:: 元データの配列
|
266
|
+
#返却値:: 自分自身を返す
|
267
|
+
def append(collisions, bodies)
|
268
|
+
@collisions.concat(collisions.zip(bodies))
|
269
|
+
return self
|
270
|
+
end
|
271
|
+
|
272
|
+
#===インデックス形式でのコリジョン・本体の取得
|
273
|
+
#_idx_:: 配列のインデックス番号
|
274
|
+
#返却値:: インデックスに対応したコリジョンと本体との対。
|
275
|
+
#インデックスが範囲外の時はnilが返る
|
276
|
+
def [](idx)
|
277
|
+
return @collisions[idx]
|
278
|
+
end
|
279
|
+
|
280
|
+
#===コリジョン・本体の削除
|
281
|
+
#対応したインデックスのコリジョンと
|
282
|
+
#_idx_:: 配列のインデックス番号
|
283
|
+
#返却値:: 削除したコリジョンと本体との対
|
284
|
+
#インデックスが範囲外の時はnilが返る
|
285
|
+
def delete(idx)
|
286
|
+
return @collisions.delete_at(idx)
|
287
|
+
end
|
288
|
+
|
289
|
+
#===インデックス形式でのコリジョン・本体の取得
|
290
|
+
#_idx_:: 配列のインデックス番号
|
291
|
+
#返却値:: インデックスに対応したコリジョンと本体との対
|
292
|
+
def clear
|
293
|
+
@collisions.clear
|
294
|
+
return self
|
295
|
+
end
|
296
|
+
|
297
|
+
#===タッピングを行う
|
298
|
+
#ブロックを渡すことにより、タッピングを行う
|
299
|
+
#ブロック内の引数は、|コリジョン,本体|の2が渡される
|
300
|
+
#返却値:: 自分自身を返す
|
301
|
+
def each
|
302
|
+
@collisions.each{|cb| yield cb[0], cb[1] }
|
303
|
+
return self
|
304
|
+
end
|
305
|
+
|
306
|
+
#===タッピングを行う
|
307
|
+
#ブロックを渡すことにより、タッピングを行う
|
308
|
+
#ブロック内の引数は、|コリジョン,本体|の2が渡される
|
309
|
+
#_idx_:: 配列のインデックス
|
310
|
+
#返却値:: 自分自身を返す
|
311
|
+
def tap(idx)
|
312
|
+
yield @collisions[idx][0], @collisions[idx][1]
|
313
|
+
return self
|
314
|
+
end
|
315
|
+
|
316
|
+
#===すべてのコリジョンの方向を転換する
|
317
|
+
#_dx_:: 変換する方向(x軸方向、-1,0,1の3種類)
|
318
|
+
#_dy_:: 変換する方向(y軸方向、-1,0,1の3種類)
|
319
|
+
#返却値:: 自分自身を返す
|
320
|
+
def turn(dx, dy)
|
321
|
+
@collisions.each{|cs| cs.turn(dx, dy) }
|
322
|
+
return self
|
323
|
+
end
|
324
|
+
|
325
|
+
#===すべてのコリジョンの移動量を変更する
|
326
|
+
#_mx_:: 変更する移動量(x軸方向)
|
327
|
+
#_my_:: 変更する移動量(y軸方向)
|
328
|
+
#返却値:: 自分自身を返す
|
329
|
+
def adjust(mx, my)
|
330
|
+
@collisions.each{|cs| cs.adjust(mx, my) }
|
331
|
+
return self
|
332
|
+
end
|
333
|
+
|
334
|
+
#===当たり判定を行う(領域が重なっている)
|
335
|
+
#判定に引っかかったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す
|
336
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
337
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
338
|
+
#返却値:: コリジョンと本体の対。
|
339
|
+
def collision?(c)
|
340
|
+
return @collisions.detect{|cc| c.collision?(cc[0])}
|
341
|
+
end
|
342
|
+
|
343
|
+
#===当たり判定を行う(領域が当たっている(重なっていない))
|
344
|
+
#判定に引っかかったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す
|
345
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
346
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
347
|
+
#返却値:: コリジョンと本体の対。
|
348
|
+
#返却値:: 領域が当たっていれば true を返す
|
349
|
+
def meet?(c)
|
350
|
+
return @collisions.detect{|cc| c.meet?(cc[0])}
|
351
|
+
end
|
352
|
+
|
353
|
+
#===当たり判定を行う(移動後に領域が重なっている(移動前は重なっていない))
|
354
|
+
#判定に引っかかったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す
|
355
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
356
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
357
|
+
#返却値:: コリジョンと本体の対。
|
358
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
359
|
+
def into?(c)
|
360
|
+
return @collisions.detect{|cc| c.into?(cc[0])}
|
361
|
+
end
|
362
|
+
|
363
|
+
#===当たり判定を行う(移動後に領域が離れている(移動前は重なっている))
|
364
|
+
#判定に引っかかったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す
|
365
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
366
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
367
|
+
#返却値:: コリジョンと本体の対。
|
368
|
+
#返却値:: 1ピクセルでも重なっていれば true を返す
|
369
|
+
def out?(c)
|
370
|
+
return @collisions.detect{|cc| c.out?(cc[0])}
|
371
|
+
end
|
372
|
+
|
373
|
+
#===当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている))
|
374
|
+
#判定に引っかかったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す
|
375
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
376
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
377
|
+
#返却値:: コリジョンと本体の対。
|
378
|
+
#返却値:: 領域が覆われていれば true を返す
|
379
|
+
def cover?(c)
|
380
|
+
return @collisions.detect{|cc| c.cover?(cc[0])}
|
381
|
+
end
|
382
|
+
|
383
|
+
#===当たり判定を行う(領域が重なっている)
|
384
|
+
#判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す
|
385
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
386
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
387
|
+
#返却値:: コリジョンと本体の対の配列。
|
388
|
+
def collision_all?(c)
|
389
|
+
return @collisions.select{|cc| c.collision?(cc[0])}
|
390
|
+
end
|
391
|
+
|
392
|
+
#===当たり判定を行う(領域が当たっている(重なっていない))
|
393
|
+
#判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す
|
394
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
395
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
396
|
+
#返却値:: コリジョンと本体の対の配列。
|
397
|
+
def meet_all?(c)
|
398
|
+
return @collisions.select{|cc| c.meet?(cc[0])}
|
399
|
+
end
|
400
|
+
|
401
|
+
#===当たり判定を行う(移動後に領域が重なっている(移動前は重なっていない))
|
402
|
+
#判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す
|
403
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
404
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
405
|
+
#返却値:: コリジョンと本体の対の配列。
|
406
|
+
def into_all?(c)
|
407
|
+
return @collisions.select{|cc| c.into?(cc[0])}
|
408
|
+
end
|
409
|
+
|
410
|
+
#===当たり判定を行う(移動後に領域が離れている(移動前は重なっている))
|
411
|
+
#判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す
|
412
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
413
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
414
|
+
#返却値:: コリジョンと本体の対の配列。
|
415
|
+
def out_all?(c)
|
416
|
+
return @collisions.select{|cc| c.out?(cc[0])}
|
417
|
+
end
|
418
|
+
|
419
|
+
#===当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている))
|
420
|
+
#判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す
|
421
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
422
|
+
#_c_:: 判定対象のコリジョンインスタンス
|
423
|
+
#返却値:: コリジョンと本体の対の配列。
|
424
|
+
def cover_all?(c)
|
425
|
+
return @collisions.select{|cc| c.cover?(cc[0])}
|
426
|
+
end
|
427
|
+
|
428
|
+
#===インデックス形式でのコリジョン・本体の取得
|
429
|
+
#判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す
|
430
|
+
#当たり判定に引っかかったコリジョンが無い場合はnilを返す
|
431
|
+
#_idx_:: 配列のインデックス番号
|
432
|
+
#返却値:: インデックスに対応したコリジョンと本体との対
|
433
|
+
def [](idx)
|
434
|
+
return [@collisions[idx], @bodies[idx]]
|
435
|
+
end
|
436
|
+
|
437
|
+
#===あとで書く
|
438
|
+
#返却値:: あとで書く
|
439
|
+
def dispose
|
440
|
+
@collisions.clear
|
441
|
+
@collisions = nil
|
442
|
+
end
|
443
|
+
end
|
444
|
+
end
|