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,308 @@
|
|
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
|
+
#選択肢を構成する要素の集合
|
26
|
+
#
|
27
|
+
#複数のChoice構造体のインスタンスをまとめて、配列として構成されている
|
28
|
+
#選択肢を表示させるときは、body 自体の表示位置を変更させる必要がある
|
29
|
+
#
|
30
|
+
#_body_:: 選択肢を示す画像
|
31
|
+
#_body_selected_:: 選択肢を示す画像(選択時)
|
32
|
+
#_condition_:: 選択肢が選択できる条件を記述したブロック
|
33
|
+
#_selected_:: 選択肢が選択されているときはtrue、選択されていないときはfalse
|
34
|
+
#_result_:: 選択した結果を示すインスタンス
|
35
|
+
#_left_:: 左方向を選択したときに参照するChoice構造体のインスタンス
|
36
|
+
#_right_:: 右方向を選択したときに参照するChoice構造体のインスタンス
|
37
|
+
#_up_:: 上方向を選択したときに参照するChoice構造体のインスタンス
|
38
|
+
#_down_:: 下方向を選択したときに参照するChoice構造体のインスタンス
|
39
|
+
#_base_:: 構造体が要素となっている配列
|
40
|
+
Choice = Struct.new(:body, :body_selected, :condition, :selected, :result, :left, :right, :up, :down, :base)
|
41
|
+
|
42
|
+
#==選択肢を管理するクラス
|
43
|
+
#選択肢は、Shapeクラスから生成したスプライトもしくは画像で構成される
|
44
|
+
class Choices
|
45
|
+
include Layout
|
46
|
+
include SpriteBase
|
47
|
+
include Animation
|
48
|
+
include Enumerable
|
49
|
+
extend Forwardable
|
50
|
+
|
51
|
+
# インスタンスを生成する
|
52
|
+
# 返却値:: 生成された Choices クラスのインスタンス
|
53
|
+
def initialize
|
54
|
+
@choices = []
|
55
|
+
@now = nil
|
56
|
+
@non_select = false
|
57
|
+
@last_selected = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
# 選択肢を作成する
|
61
|
+
# Choice 構造体のインスタンスを作成する
|
62
|
+
#
|
63
|
+
# 構造体には、引数bodyと、必ず true を返す条件ブロックが登録されている。残りは nil
|
64
|
+
#_body_:: 選択肢を示す画像
|
65
|
+
#_body_selected_:: 選択肢を示す画像(選択時)。デフォルトはnil
|
66
|
+
#_selected_:: 生成時に選択されているときはtrue、そうでないときはfalseを設定する
|
67
|
+
#返却値:: 生成された Choice構造体のインスタンス
|
68
|
+
def Choices.create_choice(body, body_selected = nil, selected = false)
|
69
|
+
choice = Choice.new(body, body_selected, Proc.new{ true }, selected,
|
70
|
+
nil, nil, nil, nil, nil, nil)
|
71
|
+
choice.left = choice
|
72
|
+
choice.right = choice
|
73
|
+
choice.up = choice
|
74
|
+
choice.down = choice
|
75
|
+
return choice
|
76
|
+
end
|
77
|
+
|
78
|
+
# 選択肢集合(Choice 構造体の配列)を選択肢リストに登録する
|
79
|
+
def create_choices(choices)
|
80
|
+
choices.each{|v| v.base = choices}
|
81
|
+
@choices.push(choices)
|
82
|
+
@last_selected = @choices[0][0] if (@choices.length == 1 && @last_selcted == nil)
|
83
|
+
return self
|
84
|
+
end
|
85
|
+
|
86
|
+
# 選択肢データを解放する
|
87
|
+
def dispose
|
88
|
+
@choices.each{|c| c.clear }
|
89
|
+
@choices.clear
|
90
|
+
@choices = []
|
91
|
+
end
|
92
|
+
|
93
|
+
def each #:nodoc:
|
94
|
+
@choices.each{|ch| yield ch }
|
95
|
+
end
|
96
|
+
|
97
|
+
def_delegators(:@choices, :push, :pop, :shift, :unshift, :[], :[]=, :clear, :length)
|
98
|
+
|
99
|
+
#===選択を開始する
|
100
|
+
#選択肢の初期位置を指定することができる
|
101
|
+
#_x_:: 初期位置(x 座標)。規定値は 0。nilを渡すと、最後に選択した選択肢が選ばれる。
|
102
|
+
#_y_:: 初期位置(y 座標)。規定値は 0
|
103
|
+
def start_choice(x = 0, y = 0)
|
104
|
+
raise MiyakoError, "Illegal choice position! [#{x}][#{y}]" if (x != nil && x < 0 || x >= @choices.length || y < 0 || y >= @choices[x].length)
|
105
|
+
@now = x ? @choices[x][y] : @last_selected
|
106
|
+
@now.selected = true
|
107
|
+
@last_selected = @now
|
108
|
+
@non_select = false
|
109
|
+
end
|
110
|
+
|
111
|
+
#===選択肢本体を取得する
|
112
|
+
#選択肢の表示対象となる
|
113
|
+
#返却値::
|
114
|
+
def body
|
115
|
+
return @now.body_selected ? @now.body_selected : @now.body
|
116
|
+
end
|
117
|
+
|
118
|
+
#===選択結果を取得する
|
119
|
+
#現在の選択肢が所持している結果インスタンスを返す
|
120
|
+
#返却値:: 選択結果
|
121
|
+
def result
|
122
|
+
return @now.result
|
123
|
+
end
|
124
|
+
|
125
|
+
def update_choices(org, nxt) #:nodoc:
|
126
|
+
obase = org.base
|
127
|
+
nbase = nxt.base
|
128
|
+
unless obase.eql?(nbase)
|
129
|
+
obase.each{|b|
|
130
|
+
b.body.stop
|
131
|
+
b.body_selected.stop if b.body_selected
|
132
|
+
}
|
133
|
+
nbase.each{|b|
|
134
|
+
b.body.start
|
135
|
+
b.body_selected.start if b.body_selected
|
136
|
+
}
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
private :update_choices
|
141
|
+
|
142
|
+
#===選択肢を非選択状態に変更する
|
143
|
+
#現在の選択状態を、全部選択していない状態にする
|
144
|
+
#返却値:: 自分自身を返す
|
145
|
+
def non_select
|
146
|
+
@now.base.each{|c| c.selected = false }
|
147
|
+
@non_select = true
|
148
|
+
return self
|
149
|
+
end
|
150
|
+
|
151
|
+
#===選択肢を変更する
|
152
|
+
#現在の選択状態を、全部選択していない状態にする
|
153
|
+
#_x_:: x方向位置
|
154
|
+
#_y_:: y方向位置
|
155
|
+
#返却値:: 自分自身を返す
|
156
|
+
def select(x, y)
|
157
|
+
raise MiyakoError, "Illegal choice position! [#{x}][#{y}]" if (x < 0 || x >= @choices.length || y < 0 || y >= @choices[x].length)
|
158
|
+
@now = @choices[x][y]
|
159
|
+
return self
|
160
|
+
end
|
161
|
+
|
162
|
+
#===選択肢を非選択状態に変更する
|
163
|
+
#現在の選択状態を、全部選択していない状態にする
|
164
|
+
#返却値:: 自分自身を返す
|
165
|
+
def non_select
|
166
|
+
@now.base.each{|c| c.selected = false }
|
167
|
+
@non_select = true
|
168
|
+
return self
|
169
|
+
end
|
170
|
+
|
171
|
+
#===画面に描画を指示する
|
172
|
+
#現在表示できる選択肢を、現在の状態で描画するよう指示する
|
173
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る。
|
174
|
+
#ブロックの引数は、|インスタンスのSpriteUnit, 画面のSpriteUnit|となる。
|
175
|
+
#返却値:: 自分自身を返す
|
176
|
+
def render(&block)
|
177
|
+
@now.base.each{|c|
|
178
|
+
((c.body_selected && c.selected) ?
|
179
|
+
c.body_selected.render(&block) :
|
180
|
+
c.body.render(&block)) if c.condition.call
|
181
|
+
}
|
182
|
+
return self
|
183
|
+
end
|
184
|
+
|
185
|
+
#===画像に描画を指示する
|
186
|
+
#現在表示できる選択肢を、現在の状態で描画するよう指示する
|
187
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る。
|
188
|
+
#ブロックの引数は、|インスタンスのSpriteUnit, 画像のSpriteUnit|となる。
|
189
|
+
#_dst_:: 描画対象の画像インスタンス
|
190
|
+
#返却値:: 自分自身を返す
|
191
|
+
def render_to(dst, &block)
|
192
|
+
@now.base.each{|c|
|
193
|
+
((c.body_selected && c.selected) ?
|
194
|
+
c.body_selected.render_to(dst, &block) :
|
195
|
+
c.body.render_to(dst, &block)) if c.condition.call
|
196
|
+
}
|
197
|
+
return self
|
198
|
+
end
|
199
|
+
|
200
|
+
#===スプライトに変換した画像を表示する
|
201
|
+
#すべてのパーツを貼り付けた、1枚のスプライトを返す
|
202
|
+
#返却値:: 生成したスプライト
|
203
|
+
def to_sprite
|
204
|
+
rect = self.broad_rect
|
205
|
+
sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
|
206
|
+
self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
|
207
|
+
return sprite
|
208
|
+
end
|
209
|
+
|
210
|
+
#===現在の画面の最大の大きさを矩形で取得する
|
211
|
+
#選択肢の状態により、取得できる矩形の大きさが変わる
|
212
|
+
#但し、選択肢が一つも見つからなかったときはnilを返す
|
213
|
+
#返却値:: 生成された矩形(Rect構造体のインスタンス)
|
214
|
+
def broad_rect
|
215
|
+
choice_list = @now.base.find_all{|c| c.condition.call }.map{|c| (c.body_selected && c.selected) ? c.body_selected : c.body}
|
216
|
+
return nil if choice_list.length == 0
|
217
|
+
return Rect.new(*(choice_list[0].rect.to_a)) if choice_list.length == 1
|
218
|
+
rect = choice_list.shift.to_a
|
219
|
+
rect_list = rect.zip(*(choice_list.map{|c| c.broad_rect.to_a}))
|
220
|
+
# width -> right
|
221
|
+
rect_list[2] = rect_list[2].zip(rect_list[0]).map{|xw| xw[0] + xw[1]}
|
222
|
+
# height -> bottom
|
223
|
+
rect_list[3] = rect_list[3].zip(rect_list[1]).map{|xw| xw[0] + xw[1]}
|
224
|
+
x, y = rect_list[0].min, rect_list[1].min
|
225
|
+
return Rect.new(x, y, rect_list[2].max - x, rect_list[3].max - y)
|
226
|
+
end
|
227
|
+
|
228
|
+
# 選択肢を左移動させる
|
229
|
+
# 返却値:: 自分自身を返す
|
230
|
+
def left
|
231
|
+
@last_selected = @now
|
232
|
+
@now.selected = false
|
233
|
+
obj = @now.left
|
234
|
+
update_choices(@now, obj)
|
235
|
+
@now = obj
|
236
|
+
@now.selected = true
|
237
|
+
return self
|
238
|
+
end
|
239
|
+
|
240
|
+
# 選択肢を右移動させる
|
241
|
+
# 返却値:: 自分自身を返す
|
242
|
+
def right
|
243
|
+
@last_selected = @now
|
244
|
+
@now.selected = false
|
245
|
+
obj = @now.right
|
246
|
+
update_choices(@now, obj)
|
247
|
+
@now = obj
|
248
|
+
@now.selected = true
|
249
|
+
return self
|
250
|
+
end
|
251
|
+
|
252
|
+
# 選択肢を上移動させる
|
253
|
+
# 返却値:: 自分自身を返す
|
254
|
+
def up
|
255
|
+
@last_selected = @now
|
256
|
+
@now.selected = false
|
257
|
+
obj = @now.up
|
258
|
+
update_choices(@now, obj)
|
259
|
+
@now = obj
|
260
|
+
@now.selected = true
|
261
|
+
return self
|
262
|
+
end
|
263
|
+
|
264
|
+
# 選択肢を下移動させる
|
265
|
+
# 返却値:: 自分自身を返す
|
266
|
+
def down
|
267
|
+
@last_selected = @now
|
268
|
+
@now.selected = false
|
269
|
+
obj = @now.down
|
270
|
+
update_choices(@now, obj)
|
271
|
+
@now = obj
|
272
|
+
@now.selected = true
|
273
|
+
return self
|
274
|
+
end
|
275
|
+
|
276
|
+
# 選択肢のアニメーションを開始する
|
277
|
+
# 返却値:: 自分自身を返す
|
278
|
+
def start
|
279
|
+
@now.base.each{|c| c.body.start if c.condition.call }
|
280
|
+
return self
|
281
|
+
end
|
282
|
+
|
283
|
+
# 選択肢のアニメーションを終了させる
|
284
|
+
# 返却値:: 自分自身を返す
|
285
|
+
def stop
|
286
|
+
@now.base.each{|c| c.body.stop if c.condition.call }
|
287
|
+
return self
|
288
|
+
end
|
289
|
+
|
290
|
+
# 選択肢のアニメーションの再生位置を最初に戻す
|
291
|
+
# 返却値:: 自分自身を返す
|
292
|
+
def reset
|
293
|
+
@now.base.each{|c| c.body.reset if c.condition.call }
|
294
|
+
return self
|
295
|
+
end
|
296
|
+
|
297
|
+
# 選択肢のアニメーションを更新させる
|
298
|
+
# (手動で更新する必要があるときに呼び出す)
|
299
|
+
# 返却値:: 自分自身を返す
|
300
|
+
def update_animation
|
301
|
+
@now.base.each{|c|
|
302
|
+
((c.body_selected && c.selected) ?
|
303
|
+
c.body_selected.update_animation :
|
304
|
+
c.body.update_animation) if c.condition.call
|
305
|
+
}
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|