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,451 @@
|
|
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
|
+
class Numeric
|
24
|
+
#===自身の値を割合として、値を算出する
|
25
|
+
#_base_:: 算出元の値
|
26
|
+
#返却値:: baseのself割りの値を返す
|
27
|
+
#
|
28
|
+
#(例)self=0.5、base=1000のとき、1000*0.5=500が出力される
|
29
|
+
def ratio(base)
|
30
|
+
return self * base
|
31
|
+
end
|
32
|
+
|
33
|
+
#===自身の値をパーセンテージとして、値を算出する
|
34
|
+
#_base_:: 算出元の値
|
35
|
+
#返却値:: baseのself%の値を返す
|
36
|
+
#
|
37
|
+
#(例)self=10、base=100のとき、100*10/100(%)=10が出力される
|
38
|
+
def percent(base)
|
39
|
+
return self * base / 100
|
40
|
+
end
|
41
|
+
|
42
|
+
#ピクセル値をそのまま返す
|
43
|
+
#返却値:: 自分自身を返す
|
44
|
+
def px
|
45
|
+
return self
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
module Miyako
|
50
|
+
|
51
|
+
#==レイアウト情報を示す構造体
|
52
|
+
LayoutStruct = Struct.new(:pos, :size, :base, :off, :snap, :zero, :margin, :lower, :middle, :upper, :loc)
|
53
|
+
#==スナップ構造体
|
54
|
+
LayoutSnapStruct = Struct.new(:sprite, :children)
|
55
|
+
#==レイアウト表示位置ラムダ構造体
|
56
|
+
LayoutSideStruct = Struct.new(:inside, :between, :outside)
|
57
|
+
|
58
|
+
#==レイアウト管理モジュール
|
59
|
+
#位置情報やスナップ、座標丸めなどを管理する
|
60
|
+
#なお、本モジュールをmixinした場合は、インスタンス変数 @layout が予約される。
|
61
|
+
#@kayoutへの参照のみ許される。
|
62
|
+
module Layout
|
63
|
+
#===現在の位置情報を別のインスタンス変数に反映させるためのテンプレートメソッド
|
64
|
+
#move や centering などのメソッドを呼び出した際に@layout[:pos]の値を反映させるときに使う
|
65
|
+
#(例)@sprite.move(*@layout[:pos])
|
66
|
+
def update_layout_position
|
67
|
+
end
|
68
|
+
|
69
|
+
#===レイアウト管理の初期化
|
70
|
+
#mixin したクラスの initialize メソッド内で必ず呼び出しておくこと
|
71
|
+
def init_layout
|
72
|
+
@layout = LayoutStruct.new
|
73
|
+
@layout.pos = Point.new(0, 0)
|
74
|
+
@layout.size = Size.new(0, 0)
|
75
|
+
@layout.base = Rect.new(0, 0, nil, nil)
|
76
|
+
@layout.off = Point.new(0, 0)
|
77
|
+
@layout.snap = LayoutSnapStruct.new(nil, Array.new)
|
78
|
+
@layout.zero = lambda{|data| 0 }
|
79
|
+
@layout.margin = [@layout.zero, @layout.zero]
|
80
|
+
|
81
|
+
@layout.lower = LayoutSideStruct.new
|
82
|
+
@layout.lower.inside = lambda{|pos, base_size| @layout.base[pos] + @layout.margin[pos][base_size].to_i}
|
83
|
+
@layout.lower.between = lambda{|pos, base_size| @layout.base[pos] - @layout.size[pos]/2 + @layout.margin[pos][base_size].to_i}
|
84
|
+
@layout.lower.outside = lambda{|pos, base_size| @layout.base[pos] - @layout.size[pos] + @layout.margin[pos][base_size].to_i}
|
85
|
+
@layout.middle = LayoutSideStruct.new
|
86
|
+
@layout.middle.inside = lambda{|pos, base_size| @layout.base[pos] + base_size/2 - @layout.size[pos] + @layout.margin[pos][base_size].to_i}
|
87
|
+
@layout.middle.between= lambda{|pos, base_size| @layout.base[pos] + base_size/2 - @layout.size[pos]/2 + @layout.margin[pos][base_size].to_i}
|
88
|
+
@layout.middle.outside = lambda{|pos, base_size| @layout.base[pos] + base_size/2 + @layout.margin[pos][base_size].to_i}
|
89
|
+
@layout.upper = LayoutSideStruct.new
|
90
|
+
@layout.upper.inside = lambda{|pos, base_size| @layout.base[pos] + base_size - @layout.size[pos] - @layout.margin[pos][base_size].to_i}
|
91
|
+
@layout.upper.between = lambda{|pos, base_size| @layout.base[pos] + base_size - @layout.size[pos]/2 - @layout.margin[pos][base_size].to_i}
|
92
|
+
@layout.upper.outside = lambda{|pos, base_size| @layout.base[pos] + base_size + @layout.margin[pos][base_size].to_i}
|
93
|
+
|
94
|
+
@layout.loc = [@layout.lower.inside, @layout.lower.inside]
|
95
|
+
end
|
96
|
+
|
97
|
+
#===mixinしたインスタンスの位置を左端(x軸)に移動させる
|
98
|
+
#ブロックでは、数値を返却することで、左端からのマージンを設定できる
|
99
|
+
#ブロック引数は、自分自身の幅
|
100
|
+
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
101
|
+
#返却値:: 自分自身
|
102
|
+
def left(side=:inside, &margin)
|
103
|
+
set_layout_inner(0, @layout.lower[side], margin)
|
104
|
+
return self
|
105
|
+
end
|
106
|
+
|
107
|
+
#===mixinしたインスタンスの位置を中間(x軸)に移動させる
|
108
|
+
#ブロックでは、数値を返却することで、真ん中からのマージンを設定できる
|
109
|
+
#ブロック引数は、自分自身の幅
|
110
|
+
#_side_:: 設置する側。但し機能するのは :between のみ。デフォルトは :between
|
111
|
+
#返却値:: 自分自身
|
112
|
+
def center(side=:between, &margin)
|
113
|
+
set_layout_inner(0, @layout.middle[side], margin)
|
114
|
+
return self
|
115
|
+
end
|
116
|
+
|
117
|
+
#===mixinしたインスタンスの位置を右端(x軸)に移動させる
|
118
|
+
#ブロックでは、数値を返却することで、右端からのマージンを設定できる
|
119
|
+
#ブロック引数は、自分自身の幅
|
120
|
+
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
121
|
+
#返却値:: 自分自身
|
122
|
+
def right(side=:inside, &margin)
|
123
|
+
set_layout_inner(0, @layout.upper[side], margin)
|
124
|
+
return self
|
125
|
+
end
|
126
|
+
|
127
|
+
#===mixinしたインスタンスの位置を上端(y軸)に移動させる
|
128
|
+
#ブロックでは、数値を返却することで、上端からのマージンを設定できる
|
129
|
+
#ブロック引数は、自分自身の幅
|
130
|
+
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
131
|
+
#返却値:: 自分自身
|
132
|
+
def top(side=:inside, &margin)
|
133
|
+
set_layout_inner(1, @layout.lower[side], margin)
|
134
|
+
return self
|
135
|
+
end
|
136
|
+
|
137
|
+
#===mixinしたインスタンスの位置を中間(y軸)に移動させる
|
138
|
+
#ブロックでは、数値を返却することで、真ん中からのマージンを設定できる
|
139
|
+
#ブロック引数は、自分自身の幅
|
140
|
+
#_side_:: 設置する側。但し機能するのは :between のみ。デフォルトは :between
|
141
|
+
#返却値:: 自分自身
|
142
|
+
def middle(side=:between, &margin)
|
143
|
+
set_layout_inner(1, @layout.middle[side], margin)
|
144
|
+
return self
|
145
|
+
end
|
146
|
+
|
147
|
+
#===mixinしたインスタンスの位置を下端(y軸)に移動させる
|
148
|
+
#ブロックでは、数値を返却することで、下端からのマージンを設定できる
|
149
|
+
#ブロック引数は、自分自身の幅
|
150
|
+
#_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
|
151
|
+
#返却値:: 自分自身
|
152
|
+
def bottom(side=:inside, &margin)
|
153
|
+
set_layout_inner(1, @layout.upper[side], margin)
|
154
|
+
return self
|
155
|
+
end
|
156
|
+
|
157
|
+
def set_layout_inner(pos, lambda, margin) #:nodoc:
|
158
|
+
@layout.loc[pos] = lambda
|
159
|
+
@layout.margin[pos] = margin || @layout.zero
|
160
|
+
@layout.off.x = 0 if pos == 0
|
161
|
+
@layout.off.y = 0 if pos == 1
|
162
|
+
calc_layout
|
163
|
+
end
|
164
|
+
|
165
|
+
private :set_layout_inner
|
166
|
+
|
167
|
+
#===レイアウトに関するインスタンスを解放する
|
168
|
+
#インスタンス変数 @layout 内のインスタンスを解放する
|
169
|
+
def layout_dispose
|
170
|
+
@layout.snap.sprite.delete_snap_child(self) if @layout.snap.sprite
|
171
|
+
@layout.snap.children.each{|sc| sc.reset_snap }
|
172
|
+
end
|
173
|
+
|
174
|
+
#=== mixin されたインスタンスの x 座標の値を取得する
|
175
|
+
#返却値:: x 座標の値(@layout[:pos][0]の値)
|
176
|
+
def x
|
177
|
+
return @layout.pos[0]
|
178
|
+
end
|
179
|
+
|
180
|
+
#=== mixin されたインスタンスの y 座標の値を取得する
|
181
|
+
#返却値:: y 座標の値(@layout[:pos][1]の値)
|
182
|
+
def y
|
183
|
+
return @layout.pos[1]
|
184
|
+
end
|
185
|
+
|
186
|
+
#=== mixin されたインスタンスの幅を取得する
|
187
|
+
#返却値:: インスタンスの幅(@layout[:size][0]の値)
|
188
|
+
def w
|
189
|
+
return @layout.size[0]
|
190
|
+
end
|
191
|
+
|
192
|
+
#=== mixin されたインスタンスの高さを取得する
|
193
|
+
#返却値:: インスタンスの高さ(@layout[:size][1]の値)
|
194
|
+
def h
|
195
|
+
return @layout.size[1]
|
196
|
+
end
|
197
|
+
|
198
|
+
#=== mixin されたインスタンスの位置情報(x,yの値)を取得する
|
199
|
+
#返却値:: インスタンスの位置情報(@layout[:pos]の値)
|
200
|
+
def pos
|
201
|
+
return @layout.pos
|
202
|
+
end
|
203
|
+
|
204
|
+
#=== mixin されたインスタンスのサイズ情報(w,hの値)を取得する
|
205
|
+
#返却値:: インスタンスのサイズ情報(@layout[:size]の値)
|
206
|
+
def size
|
207
|
+
return @layout.size
|
208
|
+
end
|
209
|
+
|
210
|
+
#=== mixin されたインスタンスの表示上の幅を取得する
|
211
|
+
#返却値:: インスタンスの幅(@layout[:size][0]の値)
|
212
|
+
def ow
|
213
|
+
return @layout.size[0]
|
214
|
+
end
|
215
|
+
|
216
|
+
#=== mixin されたインスタンスの表示上の高さを取得する
|
217
|
+
#返却値:: インスタンスの高さ(@layout[:size][0]の値)
|
218
|
+
def oh
|
219
|
+
return @layout.size[1]
|
220
|
+
end
|
221
|
+
|
222
|
+
#===インスタンスのサイズをレイアウト情報に反映させる
|
223
|
+
#_w_:: インスタンスの幅(たとえば、Sprite#ow の値)
|
224
|
+
#_h_:: インスタンスの幅(たとえば、Sprite#oh の値)
|
225
|
+
#返却値:: 自分自身を返す
|
226
|
+
def set_layout_size(w, h)
|
227
|
+
@layout.size[0] = w
|
228
|
+
@layout.size[1] = h
|
229
|
+
calc_layout
|
230
|
+
return self
|
231
|
+
end
|
232
|
+
|
233
|
+
def get_base_width #:nodoc:
|
234
|
+
return @layout.base[2] || Screen.w
|
235
|
+
end
|
236
|
+
|
237
|
+
def get_base_height #:nodoc:
|
238
|
+
return @layout.base[3] || Screen.h
|
239
|
+
end
|
240
|
+
|
241
|
+
private :get_base_width, :get_base_height
|
242
|
+
|
243
|
+
#===レイアウト情報の値を更新する
|
244
|
+
def calc_layout
|
245
|
+
@layout.pos[0] = @layout.loc[0][0, get_base_width] + @layout.off[0]
|
246
|
+
@layout.pos[1] = @layout.loc[1][1, get_base_height] + @layout.off[1]
|
247
|
+
update_layout_position
|
248
|
+
@layout.snap.children.each{|sc|
|
249
|
+
sc.snap
|
250
|
+
}
|
251
|
+
end
|
252
|
+
|
253
|
+
#===あとで書く
|
254
|
+
#_w_:: あとで書く
|
255
|
+
#_h_:: あとで書く
|
256
|
+
#返却値:: あとで書く
|
257
|
+
def set_base_size(w, h)
|
258
|
+
@layout.base[2] = w
|
259
|
+
@layout.base[3] = h
|
260
|
+
calc_layout
|
261
|
+
return self
|
262
|
+
end
|
263
|
+
|
264
|
+
#===あとで書く
|
265
|
+
#返却値:: あとで書く
|
266
|
+
def reset_base_size
|
267
|
+
@layout.base[2] = nil
|
268
|
+
@layout.base[3] = nil
|
269
|
+
calc_layout
|
270
|
+
return self
|
271
|
+
end
|
272
|
+
|
273
|
+
#===あとで書く
|
274
|
+
#_x_:: あとで書く
|
275
|
+
#_y_:: あとで書く
|
276
|
+
#返却値:: あとで書く
|
277
|
+
def set_base_point(x, y)
|
278
|
+
@layout.base[0], @layout.base[1] = [x, y]
|
279
|
+
calc_layout
|
280
|
+
return self
|
281
|
+
end
|
282
|
+
|
283
|
+
#===あとで書く
|
284
|
+
#_x_:: あとで書く
|
285
|
+
#_y_:: あとで書く
|
286
|
+
#_w_:: あとで書く
|
287
|
+
#_h_:: あとで書く
|
288
|
+
#返却値:: あとで書く
|
289
|
+
def set_base(x, y, w, h)
|
290
|
+
@layout.base[0] = x
|
291
|
+
@layout.base[1] = y
|
292
|
+
@layout.base[2] = w
|
293
|
+
@layout.base[3] = h
|
294
|
+
calc_layout
|
295
|
+
return self
|
296
|
+
end
|
297
|
+
|
298
|
+
#===あとで書く
|
299
|
+
#返却値:: あとで書く
|
300
|
+
def reset_base
|
301
|
+
@layout.base[0] = 0
|
302
|
+
@layout.base[1] = 0
|
303
|
+
@layout.base[2] = nil
|
304
|
+
@layout.base[3] = nil
|
305
|
+
calc_layout
|
306
|
+
return self
|
307
|
+
end
|
308
|
+
|
309
|
+
#===あとで書く
|
310
|
+
#返却値:: あとで書く
|
311
|
+
def get_base
|
312
|
+
return @layout.base
|
313
|
+
end
|
314
|
+
|
315
|
+
#===あとで書く
|
316
|
+
#返却値:: あとで書く
|
317
|
+
def rect
|
318
|
+
return Rect.new(*(@layout.pos.to_a + @layout.size.to_a))
|
319
|
+
end
|
320
|
+
|
321
|
+
#===インスタンスのレイアウトを指定の別のインスタンスに依存(スナップ)させる
|
322
|
+
#引数 spr で指定したインスタンスのレイアウト情報は、レシーバのレイアウト情報に依存した位置情報を算出される
|
323
|
+
#デフォルトでは、画面にスナップされている状態になっている
|
324
|
+
#_spr_:: 位置情報を依存させるインスタンス。デフォルトは nil (画面が対象になる)
|
325
|
+
#返却値:: 自分自身を返す
|
326
|
+
def snap(spr = nil)
|
327
|
+
if spr
|
328
|
+
@layout.snap.sprite.delete_snap_child(self) if @layout.snap.sprite
|
329
|
+
@layout.snap.sprite = spr
|
330
|
+
spr.add_snap_child(self)
|
331
|
+
end
|
332
|
+
if @layout.snap.sprite
|
333
|
+
rect = @layout.snap.sprite.rect
|
334
|
+
@layout.base[0] = rect[0]
|
335
|
+
@layout.base[1] = rect[1]
|
336
|
+
@layout.base[2] = rect[2]
|
337
|
+
@layout.base[3] = rect[3]
|
338
|
+
end
|
339
|
+
calc_layout
|
340
|
+
return self
|
341
|
+
end
|
342
|
+
|
343
|
+
#===すべてのインスタンスとの依存関係を解消する
|
344
|
+
#返却値:: 自分自身を返す
|
345
|
+
def reset_snap
|
346
|
+
@layout.snap.sprite =nil
|
347
|
+
@layout.snap.children = Array.new
|
348
|
+
calc_layout
|
349
|
+
return self
|
350
|
+
end
|
351
|
+
|
352
|
+
def add_snap_child(spr) #:nodoc:
|
353
|
+
@layout.snap.children.push(spr) unless @layout.snap.children.include?(spr)
|
354
|
+
calc_layout
|
355
|
+
return self
|
356
|
+
end
|
357
|
+
|
358
|
+
def delete_snap_child(spr) #:nodoc:
|
359
|
+
spr.each{|s| @layout.snap.children.delete(s) }
|
360
|
+
calc_layout
|
361
|
+
return self
|
362
|
+
end
|
363
|
+
|
364
|
+
def get_snap_children #:nodoc:
|
365
|
+
return @layout.snap.children
|
366
|
+
end
|
367
|
+
|
368
|
+
def set_snap_children(cs) #:nodoc:
|
369
|
+
@layout.snap.children.each{|c| c.set_snap_sprite(nil) }
|
370
|
+
@layout.snap.children = cs
|
371
|
+
@layout.snap.children.each{|c|
|
372
|
+
c.set_snap_sprite(self)
|
373
|
+
}
|
374
|
+
calc_layout
|
375
|
+
return self
|
376
|
+
end
|
377
|
+
|
378
|
+
def get_snap_sprite #:nodoc:
|
379
|
+
return @layout.snap.sprite
|
380
|
+
end
|
381
|
+
|
382
|
+
def set_snap_sprite(ss) #:nodoc:
|
383
|
+
@layout.snap.sprite.delete_snap_child(self) if @layout.snap.sprite
|
384
|
+
@layout.snap.sprite = ss
|
385
|
+
@layout.snap.sprite.add_snap_child(self) if @layout.snap.sprite
|
386
|
+
calc_layout
|
387
|
+
return self
|
388
|
+
end
|
389
|
+
|
390
|
+
#===インスタンスを画面(スナップ先インスタンス)の中心に移動する
|
391
|
+
#返却値:: 自分自身を返す
|
392
|
+
def centering
|
393
|
+
center
|
394
|
+
middle
|
395
|
+
return self
|
396
|
+
end
|
397
|
+
|
398
|
+
#===インスタンスを指定の移動量で移動させる
|
399
|
+
#_x_:: x 座標の移動量
|
400
|
+
#_y_:: y 座標の移動量
|
401
|
+
#返却値:: 自分自身を返す
|
402
|
+
def move(x, y)
|
403
|
+
@layout.off[0] = @layout.off[0] + x
|
404
|
+
@layout.off[1] = @layout.off[1] + y
|
405
|
+
calc_layout
|
406
|
+
return self
|
407
|
+
end
|
408
|
+
|
409
|
+
#===インスタンスを指定の位置に移動させる
|
410
|
+
#_x_:: 移動後の x 座標の位置
|
411
|
+
#_y_:: 移動後の y 座標の位置
|
412
|
+
#返却値:: 自分自身を返す
|
413
|
+
def move_to(x, y)
|
414
|
+
move(x - @layout.pos[0], y - @layout.pos[1])
|
415
|
+
return self
|
416
|
+
end
|
417
|
+
end
|
418
|
+
|
419
|
+
#==レイアウト空間クラス
|
420
|
+
#画像を持たず、レイアウト空間のみを持つインスタンス
|
421
|
+
#画像同士が離れているレイアウト構成を構築する際に用いる
|
422
|
+
class LayoutSpace
|
423
|
+
include SpriteBase
|
424
|
+
include Animation
|
425
|
+
include Layout
|
426
|
+
include SingleEnumerable
|
427
|
+
extend Forwardable
|
428
|
+
|
429
|
+
attr_accessor :dp, :visible
|
430
|
+
|
431
|
+
#===インスタンスを生成する
|
432
|
+
#_size_:: インスタンスの大きさ[w,h]で指定する
|
433
|
+
#返却値:: 生成されたインスタンスを返す
|
434
|
+
def initialize(size)
|
435
|
+
init_layout
|
436
|
+
set_layout_size(*(size.to_a))
|
437
|
+
end
|
438
|
+
|
439
|
+
#===現在の画面の最大の大きさを矩形で取得する
|
440
|
+
#但し、LayoutSpaceの場合は最大の大きさ=スプライトの大きさなので、rectと同じ値が得られる
|
441
|
+
#返却値:: 生成された矩形(Rect構造体のインスタンス)
|
442
|
+
def broad_rect
|
443
|
+
return self.rect
|
444
|
+
end
|
445
|
+
|
446
|
+
#===インスタンスを解放させる
|
447
|
+
def dispose
|
448
|
+
layout_dispose
|
449
|
+
end
|
450
|
+
end
|
451
|
+
end
|