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,435 @@
|
|
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
|
+
ViewportExecStruct = Struct.new(:x, :y)
|
26
|
+
#==ビューポートクラス
|
27
|
+
#描画時の表示範囲を変更する
|
28
|
+
#画面全体を基準(640x480の画面のときは(0,0)-(639,479)の範囲)として、範囲を設定する
|
29
|
+
#範囲の設定はいつでも行えるが、描画にはrenderメソッドを呼び出した時の値が反映される
|
30
|
+
class Viewport
|
31
|
+
@@r_exec = ViewportExecStruct.new
|
32
|
+
@@r_exec.x = [lambda{|vp, rect, dx| self.move_to(rect[0] + dx, rect[1])},
|
33
|
+
lambda{|vp, rect, dx| self.move_to(vp[0] + vp[2] - rect[2], rect[1])},
|
34
|
+
lambda{|vp, rect, dx| self.move_to(vp[0], rect[1])}
|
35
|
+
]
|
36
|
+
@@r_exec.y = [lambda{|vp, rect, dy| self.move_to(rect[0],rect[1] + dy)},
|
37
|
+
lambda{|vp, rect, dy| self.move_to(rect[0],vp[1] + vp[3] - rect[3])},
|
38
|
+
lambda{|vp, rect, dy| self.move_to(rect[0],vp[1])}
|
39
|
+
]
|
40
|
+
|
41
|
+
#===ビューポートのインスタンスを生成する
|
42
|
+
#_x_,_y_: ビューポートの左上位置
|
43
|
+
#_w_,_h_: ビューポートの大きさ(共に0以上、マイナスのときはエラーが出る)
|
44
|
+
def initialize(x, y, w, h)
|
45
|
+
raise MiyakoError, "Illegal size! w:#{w} h:#{h}" if (w < 0 || h < 0)
|
46
|
+
@rect = Rect.new(x, y, w, h)
|
47
|
+
@sq = Rect.new(x, y, x+w-1, y+h-1)
|
48
|
+
end
|
49
|
+
|
50
|
+
#===ビューポートの内容を画面に反映する
|
51
|
+
#ブロックが渡ってきたときは、範囲を変更して指定することが出来る(この変更は、本メソッドを呼ぶ時だけ有効)
|
52
|
+
#ブロックの引数は、|Rect構造体|が渡される。
|
53
|
+
#_block_:: 呼び出し時にブロック付き呼び出しが行われたときのブロック本体。呼び先に渡すことが出来る。ブロックがなければnilが入る
|
54
|
+
def render(&block)
|
55
|
+
if block_given?
|
56
|
+
rect = @rect.dup
|
57
|
+
yield rect
|
58
|
+
Screen.screen.set_clip_rect(rect)
|
59
|
+
else
|
60
|
+
Screen.screen.set_clip_rect(@rect)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
#===ビューポートの左上位置を変更する
|
65
|
+
#移動量を指定して、位置を変更する
|
66
|
+
#_dx_:: 移動量(x方向)
|
67
|
+
#_dy_:: 移動量(y方向)
|
68
|
+
#返却値:: 自分自身を返す
|
69
|
+
def move(dx,dy)
|
70
|
+
@rect.move(dx,dy)
|
71
|
+
@sq.move(dx, dy)
|
72
|
+
return self
|
73
|
+
end
|
74
|
+
|
75
|
+
#===ビューポートの左上位置を変更する
|
76
|
+
#移動先を指定して、位置を変更する
|
77
|
+
#_x_:: 移動先位置(x方向)
|
78
|
+
#_y_:: 移動先位置(y方向)
|
79
|
+
#返却値:: 自分自身を返す
|
80
|
+
def move_to(x,y)
|
81
|
+
@rect.move_to(x,y)
|
82
|
+
@sq.move_to(x, y)
|
83
|
+
end
|
84
|
+
|
85
|
+
#===ビューポートの大きさを変更する
|
86
|
+
#幅と高さを指定して変更する
|
87
|
+
#_w_:: 幅
|
88
|
+
#_h_:: 高さ
|
89
|
+
#返却値:: 自分自身を返す
|
90
|
+
def resize(w,h)
|
91
|
+
raise MiyakoError, "Illegal size! w:#{w} h:#{h}" if (w < 0 || h < 0)
|
92
|
+
@rect.resize(w,h)
|
93
|
+
@sq.resize(w, h)
|
94
|
+
return self
|
95
|
+
end
|
96
|
+
|
97
|
+
#===インスタンスを解放する
|
98
|
+
def dispose
|
99
|
+
@rect = nil
|
100
|
+
@sq = nil
|
101
|
+
end
|
102
|
+
|
103
|
+
#===ビューポートのインスタンスを取得する
|
104
|
+
#返却値:: ビューポートの矩形(Rect構造体インスタンス)の複製
|
105
|
+
def viewport
|
106
|
+
return @rect.dup
|
107
|
+
end
|
108
|
+
|
109
|
+
#===ビューポートのインスタンスを「左、右、上、下」の形式で取得する
|
110
|
+
#返却値:: ビューポートの矩形(Square構造体インスタンス)の複製
|
111
|
+
def square
|
112
|
+
return @sq.dup
|
113
|
+
end
|
114
|
+
|
115
|
+
#===移動先がViewportの範囲内かどうかを判別する
|
116
|
+
#
|
117
|
+
#移動後の座標が表示範囲外に引っかかっているかをtrue/falseの配列[x,y]で取得する
|
118
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
119
|
+
#_dx_:: x座標の移動量
|
120
|
+
#_dy_:: y座標の移動量
|
121
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
122
|
+
#返却値:: 判別の結果([x,y]の配列)
|
123
|
+
def in_bounds?(rect, dx, dy, flag = true)
|
124
|
+
bx, by = in_bounds_x?(rect, dx, flag), in_bounds_y?(rect, dy, flag)
|
125
|
+
yield bx, by if block_given?
|
126
|
+
return [bx, by]
|
127
|
+
end
|
128
|
+
|
129
|
+
#===移動先がViewportの範囲内かどうかを判別する(x座標のみ)
|
130
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
131
|
+
#
|
132
|
+
#移動後の座標が表示範囲内に引っかかっているかをtrue/falseで取得する
|
133
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
134
|
+
#_dx_:: x座標の移動量
|
135
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
136
|
+
#返却値:: あとで書く
|
137
|
+
def in_bounds_x?(rect, dx, flag = true)
|
138
|
+
nx = rect[0] + dx
|
139
|
+
return flag ? (nx >= @rect[0] && ((nx + rect[2]) < @sq[2])) : (nx > @rect[0] && (nx + rect[2] - 1) < @sq[2])
|
140
|
+
end
|
141
|
+
|
142
|
+
#===移動先がViewportの範囲内かどうかを判別する(y座標のみ)
|
143
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
144
|
+
#
|
145
|
+
#移動後の座標が表示範囲内に引っかかっているかをtrue/falseで取得する
|
146
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
147
|
+
#_dy_:: y座標の移動量
|
148
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
149
|
+
#返却値:: あとで書く
|
150
|
+
def in_bounds_y?(rect, dy, flag = true)
|
151
|
+
ny = rect[1] + dy
|
152
|
+
return flag ? (ny >= @rect[1] && ((ny + rect[3]) < @sq[3])) : (ny > @rect[1] && (ny + rect[3] - 1) < @sq[3])
|
153
|
+
end
|
154
|
+
|
155
|
+
#===移動先がViewportの範囲内かどうかを判別して、その状態によって値を整数で返す
|
156
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
157
|
+
#
|
158
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは-1、プラス方向で出るときは1を返す
|
159
|
+
#
|
160
|
+
#返却値は上記値を[x,y]の配列で生成される。
|
161
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
162
|
+
#_dx_:: x座標の移動量
|
163
|
+
#_dy_:: y座標の移動量
|
164
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
165
|
+
#返却値:: 判別の結果([x,y]の配列)
|
166
|
+
def in_bounds_ex?(rect, dx, dy, flag = true)
|
167
|
+
bx, by = in_bounds_ex_x?(rect, dx, flag), in_bounds_ex_y?(rect, dy, flag)
|
168
|
+
yield bx, by if block_given?
|
169
|
+
return [bx, by]
|
170
|
+
end
|
171
|
+
|
172
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す(x座標)
|
173
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
174
|
+
#
|
175
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは-1、プラス方向で出るときは1を返す
|
176
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
177
|
+
#_dx_:: x座標の移動量
|
178
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
179
|
+
#返却値:: 判別の結果
|
180
|
+
def in_bounds_ex_x?(rect, dx, flag = true)
|
181
|
+
nx = rect[0] + dx
|
182
|
+
return -1 if (nx < @rect[0]) || (flag && (nx == @rect[0]))
|
183
|
+
return ((nx + rect[2] - 1) > @sq[2]) || (flag && ((nx + rect[2] - 1) == @sq[2])) ? 1 : 0
|
184
|
+
end
|
185
|
+
|
186
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す(y座標)
|
187
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
188
|
+
#
|
189
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは-1、プラス方向で出るときは1を返す
|
190
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
191
|
+
#_dy_:: y座標の移動量
|
192
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
193
|
+
#返却値:: 判別の結果
|
194
|
+
def in_bounds_ex_y?(rect, dy, flag = true)
|
195
|
+
ny = rect[1] + dy
|
196
|
+
return -1 if (ny < @rect[1]) || (flag && (ny == @rect[1]))
|
197
|
+
return ((ny + rect[3] - 1) > @sq[3]) || (flag && ((ny + rect[3] - 1) == @sq[3])) ? 1 : 0
|
198
|
+
end
|
199
|
+
|
200
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める
|
201
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
202
|
+
#
|
203
|
+
#返却値はLayout#in_bounds_ex?の値と同じ
|
204
|
+
#_dx_:: x座標の移動量
|
205
|
+
#_dy_:: y座標の移動量
|
206
|
+
#_viewport_:: 移動範囲。デフォルトはnil(Screen.viewportが設定される)
|
207
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
208
|
+
#返却値:: 判別の結果の配列([x,y])
|
209
|
+
def round(rect, dx, dy, flag = true)
|
210
|
+
bx, by = round_x(rect, dx, flag), round_y(rect, dy, flag)
|
211
|
+
yield bx, by if block_given?
|
212
|
+
return [bx, by]
|
213
|
+
end
|
214
|
+
|
215
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める(x座標)
|
216
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
217
|
+
#
|
218
|
+
#返却値はLayout#in_bounds_ex_x?の値と同じ
|
219
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
220
|
+
#_dx_:: x座標の移動量
|
221
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
222
|
+
#返却値:: 判別の結果
|
223
|
+
def round_x(rect, dx, flag = true)
|
224
|
+
return 0 if dx == 0
|
225
|
+
fx = in_bounds_ex_x?(rect, dx, flag)
|
226
|
+
@@r_exec.x[fx][@rect, rect, dx]
|
227
|
+
return fx
|
228
|
+
end
|
229
|
+
|
230
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める(y座標)
|
231
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
232
|
+
#
|
233
|
+
#返却値はLayout#in_bounds_ex_y?の値と同じ
|
234
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
235
|
+
#_dy_:: y座標の移動量
|
236
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
237
|
+
#返却値:: 判別の結果
|
238
|
+
def round_y(rect, dy, flag = true)
|
239
|
+
return 0 if dy == 0
|
240
|
+
fy = in_bounds_ex_y?(rect, dy, flag)
|
241
|
+
@@r_exec.y[fy][@rect, rect, dy]
|
242
|
+
return fy
|
243
|
+
end
|
244
|
+
|
245
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
|
246
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
247
|
+
#
|
248
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは1、プラス方向で出るときは-1を返す
|
249
|
+
#
|
250
|
+
#返却値は上記値を[x,y]の配列で生成される。
|
251
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
252
|
+
#_dx_:: x座標の移動量
|
253
|
+
#_dy_:: y座標の移動量
|
254
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
255
|
+
#返却値:: 判別の結果([x,y]の配列)
|
256
|
+
def in_bounds_rev?(rect, dx, dy, flag = true)
|
257
|
+
bx, by = in_bounds_rev_x?(rect, dx, flag), in_bounds_rev_y?(rect, dy, flag)
|
258
|
+
yield bx, by if block_given?
|
259
|
+
return [bx, by]
|
260
|
+
end
|
261
|
+
|
262
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す(x座標)
|
263
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
264
|
+
#
|
265
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは1、プラス方向で出るときは-1を返す
|
266
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
267
|
+
#_dx_:: x座標の移動量
|
268
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
269
|
+
#返却値:: 判別の結果
|
270
|
+
def in_bounds_rev_x?(rect, dx, flag = true)
|
271
|
+
nx = rect[0] + dx
|
272
|
+
return 1 if (nx < @rect[0]) || (flag && (nx == @rect[0]))
|
273
|
+
return ((nx + rect[1] - 1) > @sq[2]) || (flag && ((nx + rect[1] - 1) == @sq[2])) ? -1 : 0
|
274
|
+
end
|
275
|
+
|
276
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す(y座標)
|
277
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
278
|
+
#
|
279
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは1、プラス方向で出るときは-1を返す
|
280
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
281
|
+
#_dx_:: x座標の移動量
|
282
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
283
|
+
#返却値:: 判別の結果
|
284
|
+
def in_bounds_rev_y?(rect, dy, flag = true)
|
285
|
+
ny = rect[1] + dy
|
286
|
+
return 1 if (ny < @rect[1]) || (flag && (ny == @rect[1]))
|
287
|
+
return ((ny + rect[3]) > @sq[3]) || (flag && ((ny + rect[3]) == @sq[3])) ? -1 : 0
|
288
|
+
end
|
289
|
+
|
290
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める
|
291
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
292
|
+
#
|
293
|
+
#返却値はLayout#in_bounds_rev?の値と同じ
|
294
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
295
|
+
#_dx_:: x座標の移動量
|
296
|
+
#_dy_:: y座標の移動量
|
297
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
298
|
+
#返却値:: 判別の結果の配列([x,y])
|
299
|
+
def round_rev(rect, dx, dy, flag = true)
|
300
|
+
bx, by = round_rev_x(rect, dx, flag), round_rev_y(rect, dy, flag)
|
301
|
+
yield bx, by if block_given?
|
302
|
+
return [bx, by]
|
303
|
+
end
|
304
|
+
|
305
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める(x座標)
|
306
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
307
|
+
#
|
308
|
+
#返却値はLayout#in_bounds_rev_x?の値と同じ
|
309
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
310
|
+
#_dx_:: x座標の移動量
|
311
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
312
|
+
#返却値:: 判別の結果
|
313
|
+
def round_rev_x(rect, dx, flag = true)
|
314
|
+
return 0 if dx == 0
|
315
|
+
fx = in_bounds_rev_x?(rect, dx, flag)
|
316
|
+
@@r_exec.x[-fx][@rect, rect, dx]
|
317
|
+
return fx
|
318
|
+
end
|
319
|
+
|
320
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める(y座標)
|
321
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
322
|
+
#
|
323
|
+
#返却値はLayout#in_bounds_rev_y?の値と同じ
|
324
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
325
|
+
#_dy_:: x座標の移動量
|
326
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
327
|
+
#返却値:: 判別の結果
|
328
|
+
def round_rev_y(rect, dy, flag = true)
|
329
|
+
return 0 if dy == 0
|
330
|
+
fy = in_bounds_rev_y?(rect, dy, flag)
|
331
|
+
@@r_exec.y[-fy][@rect, rect, dy]
|
332
|
+
return fy
|
333
|
+
end
|
334
|
+
|
335
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す
|
336
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
337
|
+
#
|
338
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは1、プラス方向で出るときは-1を返す
|
339
|
+
#
|
340
|
+
#返却値は上記値を[x,y]の配列で生成される。
|
341
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
342
|
+
#_dx_:: x座標の移動量
|
343
|
+
#_dy_:: y座標の移動量
|
344
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
345
|
+
#返却値:: 判別の結果([x,y]の配列)
|
346
|
+
def in_bounds_rev2?(rect, dx, dy, flag = true)
|
347
|
+
bx, by = in_bounds_rev2_x?(rect, dx, flag), in_bounds_rev2_y?(rect, dy, flag)
|
348
|
+
yield bx, by if block_given?
|
349
|
+
return [bx, by]
|
350
|
+
end
|
351
|
+
|
352
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す(x座標)
|
353
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
354
|
+
#
|
355
|
+
#移動後の座標が表示範囲内のときは0、マイナス方向で表示範囲外に出るときは1、プラス方向で出るときは-1を返す
|
356
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
357
|
+
#_dx_:: x座標の移動量
|
358
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
359
|
+
#返却値:: 判別の結果
|
360
|
+
def in_bounds_rev2_x?(rect, dx, flag = true)
|
361
|
+
return 0 if dx == 0
|
362
|
+
dir = (dx <=> 0)
|
363
|
+
nx = rect[0] + dx
|
364
|
+
return -dir if (nx < @rect[0]) || (flag && (nx == @rect[0]))
|
365
|
+
return ((nx + rect[2] - 1) > @sq[2]) || (flag && ((nx + rect[2] - 1) == @sq[2])) ? -dir : dir
|
366
|
+
end
|
367
|
+
|
368
|
+
#===移動先が表示範囲内かどうかを判別して、その状態によって値を整数で返す(y座標)
|
369
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
370
|
+
#
|
371
|
+
#移動後に表示範囲外に出るときは符号を反転、範囲内の時は移動量をそのまま返す
|
372
|
+
#移動後に表示範囲外に出るときは符号を反転、範囲内の時は移動量をそのまま返す
|
373
|
+
#移動量が0のときは、0を返す
|
374
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
375
|
+
#_dx_:: x座標の移動量
|
376
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
377
|
+
#返却値:: 判別の結果
|
378
|
+
def in_bounds_rev2_y?(rect, dy, flag = true)
|
379
|
+
return 0 if dy == 0
|
380
|
+
dir = (dy <=> 0)
|
381
|
+
ny = rect[1] + dy
|
382
|
+
return -dir if (ny < @rect[1]) || (flag && (ny == @rect[1]))
|
383
|
+
return ((ny + rect[3] - 1) > @sq[3]) || (flag && ((ny + rect[3] - 1) == @sq[3])) ? -dir : dir
|
384
|
+
end
|
385
|
+
|
386
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める
|
387
|
+
#表示範囲はビューポート(Layout#viewport メソッドで取得可能)の範囲。デフォルトは画面の範囲内と同じ
|
388
|
+
#
|
389
|
+
#返却値はLayout#in_bounds_rev?の値と同じ
|
390
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
391
|
+
#_dx_:: x座標の移動量
|
392
|
+
#_dy_:: y座標の移動量
|
393
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
394
|
+
#返却値:: 判別の結果の配列([x,y])
|
395
|
+
def round_rev2(rect, dx, dy, flag = true)
|
396
|
+
bx, by = round_rev2_x(rect, dx, flag), round_rev2_y(rect, dy, flag)
|
397
|
+
yield bx, by if block_given?
|
398
|
+
return [bx, by]
|
399
|
+
end
|
400
|
+
|
401
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める(x座標)
|
402
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
403
|
+
#
|
404
|
+
#返却値はLayout#in_bounds_rev_x?の値と同じ
|
405
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
406
|
+
#_dx_:: x座標の移動量
|
407
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
408
|
+
#返却値:: 判別の結果
|
409
|
+
def round_rev2_x(rect, dx, flag = true)
|
410
|
+
return 0 if dx == 0
|
411
|
+
fxx = (dx <=> 0)
|
412
|
+
fx = in_bounds_rev2_x?(rect, dx, flag)
|
413
|
+
fx2 = (fxx == 0 || fx * fxx > 0 ? 0 : -fx)
|
414
|
+
@@r_exec.x[fx2][@rect, rect, dx]
|
415
|
+
return fx
|
416
|
+
end
|
417
|
+
|
418
|
+
#===移動先が表示範囲外に引っかかるときは、移動範囲内に丸める(y座標)
|
419
|
+
#表示範囲はビューポートの範囲。デフォルトは画面の範囲内と同じ
|
420
|
+
#
|
421
|
+
#返却値はLayout#in_bounds_rev_y?の値と同じ
|
422
|
+
#_rect_:: 判別対象の矩形。Rect構造体のインスタンス([x,y,w,h]で構成された4要素の配列)
|
423
|
+
#_dy_:: x座標の移動量
|
424
|
+
#_flag_:: 画面の端いっぱいも表示範囲外に含めるときはtrueを設定する。デフォルトはtrue
|
425
|
+
#返却値:: 判別の結果
|
426
|
+
def round_rev2_y(rect, dy, flag = true)
|
427
|
+
return 0 if dy == 0
|
428
|
+
fyy = (dy <=> 0)
|
429
|
+
fy = in_bounds_rev2_y?(rect, dy, flag)
|
430
|
+
fy2 = (fyy == 0 || fy * fyy > 0 ? 0 : -fy)
|
431
|
+
@@r_exec.y[fy2][@rect, rect, dy]
|
432
|
+
return fy
|
433
|
+
end
|
434
|
+
end
|
435
|
+
end
|