ruby-miyako 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1115 -0
- data/Rakefile +7 -0
- data/defines.h +144 -0
- data/extconf.rb +44 -0
- data/extern.h +29 -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 +87 -0
- data/lib/Miyako/API/audio.rb +584 -0
- data/lib/Miyako/API/basic_data.rb +1026 -0
- data/lib/Miyako/API/bitmap.rb +534 -0
- data/lib/Miyako/API/choices.rb +481 -0
- data/lib/Miyako/API/collision.rb +638 -0
- data/lib/Miyako/API/diagram.rb +586 -0
- data/lib/Miyako/API/drawing.rb +151 -0
- data/lib/Miyako/API/exceptions.rb +105 -0
- data/lib/Miyako/API/fixedmap.rb +462 -0
- data/lib/Miyako/API/font.rb +430 -0
- data/lib/Miyako/API/input.rb +456 -0
- data/lib/Miyako/API/layout.rb +644 -0
- data/lib/Miyako/API/map.rb +583 -0
- data/lib/Miyako/API/map_event.rb +222 -0
- data/lib/Miyako/API/modules.rb +357 -0
- data/lib/Miyako/API/movie.rb +166 -0
- data/lib/Miyako/API/parts.rb +188 -0
- data/lib/Miyako/API/plane.rb +205 -0
- data/lib/Miyako/API/screen.rb +341 -0
- data/lib/Miyako/API/shape.rb +443 -0
- data/lib/Miyako/API/sprite.rb +773 -0
- data/lib/Miyako/API/sprite_animation.rb +494 -0
- data/lib/Miyako/API/sprite_list.rb +1135 -0
- data/lib/Miyako/API/spriteunit.rb +168 -0
- data/lib/Miyako/API/story.rb +350 -0
- data/lib/Miyako/API/textbox.rb +773 -0
- data/lib/Miyako/API/utility.rb +419 -0
- data/lib/Miyako/API/viewport.rb +190 -0
- data/lib/Miyako/API/yuki.rb +1180 -0
- data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
- data/lib/Miyako/EXT/raster_scroll.rb +138 -0
- data/lib/Miyako/EXT/slides.rb +157 -0
- data/lib/Miyako/miyako.rb +201 -0
- data/lib/Miyako/miyako_require_only.rb +35 -0
- data/logo/EGSR_logo.png +0 -0
- data/logo/EGSR_logo_bg.png +0 -0
- data/logo/EGSR_logo_fg.png +0 -0
- data/logo/EGSR_title_banner.png +0 -0
- data/logo/EGSR_title_logo.png +0 -0
- data/logo/miyako.png +0 -0
- data/logo/miyako_banner.png +0 -0
- data/logo/space.png +0 -0
- data/miyako_basicdata.c +484 -0
- data/miyako_bitmap.c +1225 -0
- data/miyako_collision.c +403 -0
- data/miyako_drawing.c +187 -0
- data/miyako_font.c +334 -0
- data/miyako_hsv.c +830 -0
- data/miyako_input_audio.c +254 -0
- data/miyako_layout.c +191 -0
- data/miyako_no_katana.c +1086 -0
- data/miyako_sprite2.c +431 -0
- data/miyako_transform.c +438 -0
- data/miyako_utility.c +288 -0
- data/sample/Animation1/m1ku.rb +68 -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 +96 -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 +329 -0
- data/sample/Diagram_sample/readme.txt +90 -0
- data/sample/Diagram_sample/wait_cursor.png +0 -0
- data/sample/Room3/blue.rb +297 -0
- data/sample/Room3/ending.rb +180 -0
- data/sample/Room3/green.rb +220 -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 +120 -0
- data/sample/Room3/main_component.rb +59 -0
- data/sample/Room3/readme.txt +76 -0
- data/sample/Room3/red.rb +227 -0
- data/sample/Room3/room3.rb +25 -0
- data/sample/Room3/title.rb +184 -0
- data/sample/ball_action_sample.rb +204 -0
- data/sample/blit_rop.rb +70 -0
- data/sample/cairo_sample.rb +25 -0
- data/sample/circle_collision_test.rb +66 -0
- data/sample/collision_test.rb +33 -0
- data/sample/collision_test2.rb +108 -0
- data/sample/fixed_map_test/cursor.png +0 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +140 -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/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 +58 -0
- data/sample/map_test/chr1.png +0 -0
- data/sample/map_test/cursor.png +0 -0
- data/sample/map_test/main_parts.rb +69 -0
- data/sample/map_test/main_scene.rb +153 -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 +75 -0
- data/sample/map_test/map_test.rb +23 -0
- data/sample/map_test/mapchip.csv +21 -0
- data/sample/map_test/oasis.rb +71 -0
- data/sample/map_test/readme.txt +89 -0
- data/sample/map_test/route.rb +157 -0
- data/sample/map_test/sea.png +0 -0
- data/sample/map_test/town.rb +74 -0
- data/sample/map_test/wait_cursor.png +0 -0
- data/sample/map_test/window.png +0 -0
- data/sample/polygon_test.rb +35 -0
- data/sample/rasterscroll.rb +25 -0
- data/sample/takahashi.rb +42 -0
- data/sample/text.png +0 -0
- data/sample/textbox_sample.rb +192 -0
- data/sample/transform.rb +54 -0
- data/sample/utility_test.rb +73 -0
- data/sample/utility_test2.rb +61 -0
- data/sample/utility_test3.rb +64 -0
- data/sample/utility_test4.rb +73 -0
- data/uninstall_miyako.rb +19 -0
- data/win/miyako_no_katana.so +0 -0
- metadata +216 -0
@@ -0,0 +1,222 @@
|
|
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
|
+
require 'csv'
|
24
|
+
require 'forwardable'
|
25
|
+
|
26
|
+
module Miyako
|
27
|
+
#==マップ上のイベント全体を管理するクラス
|
28
|
+
#Map/FixedMapクラス内で使用する
|
29
|
+
#使い方:
|
30
|
+
#
|
31
|
+
#(1)インスタンスを生成する
|
32
|
+
#
|
33
|
+
#em = MapEventManager.new
|
34
|
+
#
|
35
|
+
#(2)MapEventクラスとIDを登録する
|
36
|
+
#
|
37
|
+
#(例)MapEventモジュールをmixinしたクラスXを、ID=0のイベントとして登録
|
38
|
+
#
|
39
|
+
#em.add(0, X)
|
40
|
+
#
|
41
|
+
#(3)Map/FixedMapクラスインスタンス生成時に引数として渡す
|
42
|
+
#
|
43
|
+
#@map = Map.new(...,em)
|
44
|
+
#
|
45
|
+
#(注)登録するIDは、イベントレイヤー上の番号と対応しておくこと
|
46
|
+
class MapEventManager
|
47
|
+
#===インスタンスを生成する
|
48
|
+
#_map_obj_:: Managerが属するMap/FixedMapクラスのインスタンス
|
49
|
+
#返却値:: 生成されたインスタンス
|
50
|
+
def initialize
|
51
|
+
@map = nil
|
52
|
+
@id2event = Hash.new
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize_copy(obj) #:nodoc:
|
56
|
+
@map = @map.dup if @map
|
57
|
+
@id2event = @id2event.dup
|
58
|
+
end
|
59
|
+
|
60
|
+
def set(map) #:nodoc:
|
61
|
+
@map = map
|
62
|
+
end
|
63
|
+
|
64
|
+
#===イベントクラスをマップに追加登録する
|
65
|
+
#_id_:: マップ(イベントレイヤ)上の番号。
|
66
|
+
#イベントレイヤ上に存在しない番号を渡してもエラーや警告は発しない
|
67
|
+
#_event_:: イベントクラス。クラスのインスタンスではないことに注意!
|
68
|
+
#返却値:: 自分自身を返す
|
69
|
+
def add(id, event)
|
70
|
+
@id2event[id] = event
|
71
|
+
return self
|
72
|
+
end
|
73
|
+
|
74
|
+
#===イベントが登録されているかを確認する
|
75
|
+
#引数で渡した番号に対応するイベントクラスが登録されているかどうかを確認する
|
76
|
+
#_id_:: イベントクラスに対応した番号
|
77
|
+
#返却値:: イベントクラスが登録されている時はtrueを返す
|
78
|
+
def include?(id)
|
79
|
+
raise MiyakoError, "This MapEventManager instance is not set Map/FixedMap instance!" unless @map
|
80
|
+
return @id2event.has_key?(id)
|
81
|
+
end
|
82
|
+
|
83
|
+
#===イベントのインスタンスを生成する(番号指定)
|
84
|
+
#インスタンス生成と同時に、マップ上の座標を渡して初期位置を設定する
|
85
|
+
#登録していないIDを指定するとエラーになる
|
86
|
+
#
|
87
|
+
#設置は、マップ上の座標に設置する。表示上の座標ではない事に注意。
|
88
|
+
#_id_:: イベントクラスと登録した際の番号
|
89
|
+
#_x_:: イベントを設置する位置(X座標)
|
90
|
+
#_y_:: イベントを設置する位置(Y座標)
|
91
|
+
#返却値:: 生成したインスタンス
|
92
|
+
def create(id, x = 0, y = 0)
|
93
|
+
raise MiyakoError, "This MapEventManager instance is not set Map/FixedMap instance!" unless @map
|
94
|
+
raise MiyakoError, "Unknown Map Event ID! : #{id}" unless include?(id)
|
95
|
+
return @id2event[id].new(@map, x, y)
|
96
|
+
end
|
97
|
+
|
98
|
+
#===すべての登録済みイベントクラスの登録を解除する
|
99
|
+
def clear
|
100
|
+
@id2event.keys.each{|k| @id2event[k] = nil }
|
101
|
+
end
|
102
|
+
|
103
|
+
def dispose
|
104
|
+
@map = nil
|
105
|
+
@id2event.clear
|
106
|
+
@id2event = nil
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
#==マップ上のイベントを管理するモジュール
|
111
|
+
#実際に使う際にはmix-inして使う
|
112
|
+
module MapEvent
|
113
|
+
include SpriteBase
|
114
|
+
include Animation
|
115
|
+
|
116
|
+
#===イベントのインスタンスを作成する
|
117
|
+
#引数として渡せるX,Y座標の値は、表示上ではなく理論上の座標位置
|
118
|
+
#_map_obj_:: 関連づけられたMap/FixedMapクラスのインスタンス
|
119
|
+
#_x_:: マップ上のX座標の値。デフォルトは0
|
120
|
+
#_y_:: マップ上のY座標の値。デフォルトは0
|
121
|
+
#返却値:: 生成されたインスタンス
|
122
|
+
def initialize(map_obj, x = 0, y = 0)
|
123
|
+
init(map_obj, x, y)
|
124
|
+
end
|
125
|
+
|
126
|
+
#===イベント生成時のテンプレートメソッド
|
127
|
+
#イベントクラスからインスタンスが生成された時の初期化処理を実装する
|
128
|
+
#_map_obj_:: 関連づけられたMap/FixedMapクラスのインスタンス
|
129
|
+
#_x_:: マップ上のX座標の値
|
130
|
+
#_y_:: マップ上のY座標の値
|
131
|
+
def init(map_obj, x, y)
|
132
|
+
end
|
133
|
+
|
134
|
+
#===インスタンス内の表示やデータを更新するテンプレートメソッド
|
135
|
+
#マップ画像が更新された時に呼び出される
|
136
|
+
#_map_obj_:: インスタンスが組み込まれているMap/FixedMapクラスのインスタンス
|
137
|
+
#_events_:: マップに登録されているイベントインスタンスの配列
|
138
|
+
#_params_:: 開発者が明示的に用意した引数。内容はハッシュ
|
139
|
+
def update(map_obj, events, params)
|
140
|
+
end
|
141
|
+
|
142
|
+
#===イベントを指定の分量で移動させる(テンプレートメソッド)
|
143
|
+
#_dx_:: 移動量(x座標)。単位はピクセル
|
144
|
+
#_dy_:: 移動量(y座標)。単位はピクセル
|
145
|
+
#返却値:: 自分自身を返す
|
146
|
+
def move!(dx,dy)
|
147
|
+
return self
|
148
|
+
end
|
149
|
+
|
150
|
+
#===イベントを指定の位置へ移動させる(テンプレートメソッド)
|
151
|
+
#_x_:: 移動先の位置(x座標)。単位はピクセル
|
152
|
+
#_y_:: 移動先の位置(y座標)。単位はピクセル
|
153
|
+
#返却値:: 自分自身を返す
|
154
|
+
def move_to!(x,y)
|
155
|
+
return self
|
156
|
+
end
|
157
|
+
|
158
|
+
#===イベントを指定の分量で移動させたときの値を求める(テンプレートメソッド)
|
159
|
+
#_dx_:: 移動量(x座標)。単位はピクセル
|
160
|
+
#_dy_:: 移動量(y座標)。単位はピクセル
|
161
|
+
#返却値:: 移動した位置のインスタンスを返す
|
162
|
+
def move(dx,dy)
|
163
|
+
return Position.new(0,0)
|
164
|
+
end
|
165
|
+
|
166
|
+
#===イベントを指定の位置へ移動させたときの値を求める(テンプレートメソッド)
|
167
|
+
#_x_:: 移動先の位置(x座標)。単位はピクセル
|
168
|
+
#_y_:: 移動先の位置(y座標)。単位はピクセル
|
169
|
+
#返却値:: 移動した位置のインスタンスを返す
|
170
|
+
def move_to(x,y)
|
171
|
+
return Position.new(0,0)
|
172
|
+
end
|
173
|
+
|
174
|
+
#===イベント発生可否問い合わせ(テンプレートメソッド)
|
175
|
+
#イベント発生が可能なときはtrueを返す(その後、startメソッドを呼び出す)処理を実装する
|
176
|
+
#_param_:: 問い合わせに使用するパラメータ群。デフォルトはnil
|
177
|
+
#返却値:: イベント発生可能ならばtrue
|
178
|
+
def met?(*params)
|
179
|
+
return false
|
180
|
+
end
|
181
|
+
|
182
|
+
#===画面に画像を描画する(テンプレートメソッド)
|
183
|
+
#イベントで所持している画像を描画するメソッドを実装する
|
184
|
+
#(イベント内部で用意している画像の描画用テンプレートメソッド)
|
185
|
+
def render
|
186
|
+
end
|
187
|
+
|
188
|
+
#===イベントを発生させる(テンプレートメソッド)
|
189
|
+
#ここに、イベント発生イベントを実装する。更新はupdateメソッドに実装する
|
190
|
+
#_param_:: イベント発生に必要なパラメータ群。デフォルトはnil
|
191
|
+
#返却値:: 自分自身を返す
|
192
|
+
def start(*params)
|
193
|
+
return self
|
194
|
+
end
|
195
|
+
|
196
|
+
#===イベントを停止・終了させる(テンプレートメソッド)
|
197
|
+
#ここに、イベント停止・終了イベントを実装する。更新はupdateメソッドに実装する
|
198
|
+
#_param_:: イベント発生に必要なパラメータ群。デフォルトはnil
|
199
|
+
#返却値:: 自分自身を返す
|
200
|
+
def stop(*params)
|
201
|
+
return self
|
202
|
+
end
|
203
|
+
|
204
|
+
#===イベント発生中問い合わせ(テンプレートメソッド)
|
205
|
+
#ここに、イベント発生中の問い合わせ処理を実装する。
|
206
|
+
#_param_:: あとで書く
|
207
|
+
#返却値:: イベント発生中の時はtrue
|
208
|
+
def executing?
|
209
|
+
return false
|
210
|
+
end
|
211
|
+
|
212
|
+
#===イベント終了後の後処理(テンプレートメソッド)
|
213
|
+
#ここに、イベント終了後の後処理を実装する。
|
214
|
+
def final
|
215
|
+
end
|
216
|
+
|
217
|
+
#===イベントに使用しているインスタンスを解放する(テンプレートメソッド)
|
218
|
+
#ここに、インスタンス解放処理を実装する。
|
219
|
+
def dispose
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
@@ -0,0 +1,357 @@
|
|
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
|
+
=begin rdoc
|
25
|
+
==基本スプライトモジュール
|
26
|
+
スプライトの基本メソッドで構成されるテンプレートモジュール
|
27
|
+
=end
|
28
|
+
module SpriteBase
|
29
|
+
#===スプライトインスタンスを取得するメソッドのテンプレート
|
30
|
+
#_data_:: あとで書く
|
31
|
+
#返却値:: 自分自身を返す
|
32
|
+
def to_sprite(data = nil)
|
33
|
+
return self
|
34
|
+
end
|
35
|
+
|
36
|
+
#===SpriteUnit構造体を取得するメソッドのテンプレート
|
37
|
+
#返却値:: nilを返す
|
38
|
+
def to_unit
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
|
42
|
+
#===描画可能・不可状態を返すメソッドのテンプレート
|
43
|
+
#返却値:: falseを返す
|
44
|
+
def visible
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
|
48
|
+
#===描画可能・不可状態を設定するメソッドのテンプレート
|
49
|
+
#返却値:: falseを返す
|
50
|
+
def visible=(v)
|
51
|
+
return self
|
52
|
+
end
|
53
|
+
|
54
|
+
#===描画可能状態にするメソッドのテンプレート
|
55
|
+
def show
|
56
|
+
self.visible = true
|
57
|
+
end
|
58
|
+
|
59
|
+
#===描画不可能状態にするメソッドのテンプレート
|
60
|
+
def hide
|
61
|
+
self.visible = false
|
62
|
+
end
|
63
|
+
|
64
|
+
#===領域の矩形を取得するメソッドのテンプレート
|
65
|
+
#返却値:: nilを返す
|
66
|
+
def rect
|
67
|
+
return nil
|
68
|
+
end
|
69
|
+
|
70
|
+
#===領域の最大矩形を取得するメソッドのテンプレート
|
71
|
+
#返却値:: nilを返す
|
72
|
+
def broad_rect
|
73
|
+
return nil
|
74
|
+
end
|
75
|
+
|
76
|
+
#===画像(Bitmapクラスのインスタンス)を取得するメソッドのテンプレート
|
77
|
+
#返却値:: nilを返す
|
78
|
+
def bitmap
|
79
|
+
return nil
|
80
|
+
end
|
81
|
+
|
82
|
+
#===画像内での描画開始位置(x座標)を取得するメソッドのテンプレート
|
83
|
+
#返却値:: 0を返す
|
84
|
+
def ox
|
85
|
+
return 0
|
86
|
+
end
|
87
|
+
|
88
|
+
#===画像内での描画開始位置(y座標)を取得するメソッドのテンプレート
|
89
|
+
#返却値:: 0を返す
|
90
|
+
def oy
|
91
|
+
return 0
|
92
|
+
end
|
93
|
+
|
94
|
+
#===画面への描画を指示するメソッドのテンプレート
|
95
|
+
#_block_:: 呼び出し時にブロック付き呼び出しが行われたときのブロック本体。呼び先に渡すことが出来る。ブロックがなければnilが入る
|
96
|
+
#返却値:: 自分自身を返す
|
97
|
+
def render(&block)
|
98
|
+
return self
|
99
|
+
end
|
100
|
+
|
101
|
+
#===画像への描画を指示するメソッドのテンプレート
|
102
|
+
#_dst_:: 対象の画像
|
103
|
+
#_block_:: 呼び出し時にブロック付き呼び出しが行われたときのブロック本体。呼び先に渡すことが出来る。ブロックがなければnilが入る
|
104
|
+
#返却値:: 自分自身を返す
|
105
|
+
def render_to(dst, &block)
|
106
|
+
return self
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
=begin rdoc
|
111
|
+
==基本アニメーションモジュール
|
112
|
+
アニメーションの基本メソッドで構成されるテンプレートモジュール
|
113
|
+
=end
|
114
|
+
module Animation
|
115
|
+
#===アニメーションを開始するメソッドのテンプレート
|
116
|
+
#返却値:: 自分自身を返す
|
117
|
+
def start
|
118
|
+
return self
|
119
|
+
end
|
120
|
+
|
121
|
+
#===アニメーションを停止するメソッドのテンプレート
|
122
|
+
#返却値:: 自分自身を返す
|
123
|
+
def stop
|
124
|
+
return self
|
125
|
+
end
|
126
|
+
|
127
|
+
#===アニメーションパターンを先頭に戻すメソッドのテンプレート
|
128
|
+
#返却値:: 自分自身を返す
|
129
|
+
def reset
|
130
|
+
return self
|
131
|
+
end
|
132
|
+
|
133
|
+
#===アニメーションを更新するメソッドのテンプレート
|
134
|
+
#返却値:: falseを返す(アニメーションパターンが更新されたときにtrueを返す)
|
135
|
+
def update_animation
|
136
|
+
return false
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
#==複数スプライト管理(配列)機能を追加するモジュール
|
141
|
+
#配列にスプライトとして最低限の機能を追加する。
|
142
|
+
#また、独自にswapなどのメソッドを追加。
|
143
|
+
#render、render_toを用意し、一気に描画が可能。配列の要素順に描画される。
|
144
|
+
#各要素の位置関係は関与していない(そこがPartsとの違い)
|
145
|
+
module SpriteArray
|
146
|
+
include SpriteBase
|
147
|
+
include Animation
|
148
|
+
include Enumerable
|
149
|
+
|
150
|
+
#===各要素からスプライト以外の要素を取り除いた配列を作成する
|
151
|
+
#SpriteBaseモジュール、もしくはSpriteArrayモジュールをインクルードしていない要素を削除した配列を返す
|
152
|
+
#登録されている名前順の配列になる。
|
153
|
+
#返却値:: 生成したスプライトを返す
|
154
|
+
def sprite_only
|
155
|
+
self.select{|e| e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
|
156
|
+
end
|
157
|
+
|
158
|
+
#===各要素からスプライト以外の要素を取り除いた配列を破壊的に作成する
|
159
|
+
#SpriteBaseモジュール、もしくはSpriteArrayモジュールをインクルードしていない要素を削除する
|
160
|
+
#登録されている名前順の配列になる。
|
161
|
+
#返却値:: 自分自身を返す
|
162
|
+
def sprite_only!
|
163
|
+
self.delete_if{|e| !e.class.include?(SpriteBase) && !e.class.include?(SpriteArray)}
|
164
|
+
end
|
165
|
+
|
166
|
+
#===配列要素を複製したコピー配列を取得する
|
167
|
+
#通常、インスタンスの複写に使われるdup,cloneメソッドは、同じ配列要素を見ているが、
|
168
|
+
#このメソッドでは、要素も複製したものが複製される(各要素のdeep_copyメソッドを呼び出す)
|
169
|
+
#返却値:: 複写した配列を返す
|
170
|
+
def deep_copy
|
171
|
+
self.map{|e| e.deep_copy }
|
172
|
+
end
|
173
|
+
|
174
|
+
#===各要素の描画可能状態を取得する
|
175
|
+
#各要素のvisibleメソッドの値を配列で取得する。
|
176
|
+
#登録されている名前順の配列になる。
|
177
|
+
#返却値:: true/falseの配列
|
178
|
+
def visible
|
179
|
+
return self.sprite_only.map{|e| e.visible}
|
180
|
+
end
|
181
|
+
|
182
|
+
#===各要素の描画可能状態を一気に設定する
|
183
|
+
#すべての要素のvisibleメソッドの値を変更する
|
184
|
+
#登録されている名前順の配列になる。
|
185
|
+
#_v_:: 設定する値(true/false)
|
186
|
+
#返却値:: 自分自身を返す
|
187
|
+
def visible=(v)
|
188
|
+
self.sprite_only.each{|e| e.visible = v}
|
189
|
+
return self
|
190
|
+
end
|
191
|
+
|
192
|
+
#===各要素の位置を変更する(変化量を指定)
|
193
|
+
#ブロックを渡したとき、戻り値として[更新したdx,更新したdy]とした配列を返すと、
|
194
|
+
#それがその要素での移動量となる。
|
195
|
+
#ブロックの引数は、|要素, インデックス(0,1,2,...), dx, dy|となる。
|
196
|
+
#(例)q=[a, b, c]
|
197
|
+
# #各スプライトの位置=すべて(10,15)
|
198
|
+
# q.move!(20,25) => aの位置:(30,40)
|
199
|
+
# bの位置:(30,40)
|
200
|
+
# cの位置:(30,40)
|
201
|
+
# q.move!(20,25){|e,i,dx,dy|
|
202
|
+
# [i*dx, i*dy]
|
203
|
+
# }
|
204
|
+
# => aの位置:(10,15)
|
205
|
+
# bの位置:(30,40)
|
206
|
+
# cの位置:(50,65)
|
207
|
+
#_dx_:: 移動量(x方向)。単位はピクセル
|
208
|
+
#_dy_:: 移動量(y方向)。単位はピクセル
|
209
|
+
#返却値:: 自分自身を返す
|
210
|
+
def move!(dx, dy)
|
211
|
+
if block_given?
|
212
|
+
self.sprite_only.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy))}
|
213
|
+
else
|
214
|
+
self.sprite_only.each{|e| e.move!(dx, dy)}
|
215
|
+
end
|
216
|
+
self
|
217
|
+
end
|
218
|
+
|
219
|
+
#===各要素の位置を変更する(変化量を指定)
|
220
|
+
#ブロックを渡したとき、戻り値として[更新したdx,更新したdy]とした配列を返すと、
|
221
|
+
#それがその要素での移動量となる。
|
222
|
+
#ブロックの引数は、|要素, インデックス(0,1,2,...), x, y|となる。
|
223
|
+
#(例)q=[a, b, c]
|
224
|
+
# #各スプライトの位置=すべて(10,15)
|
225
|
+
# q.move!(20,25) => aの位置:(20,25)
|
226
|
+
# bの位置:(20,25)
|
227
|
+
# cの位置:(20,25)
|
228
|
+
# q.move!(20,25){|e,i,dx,dy|
|
229
|
+
# [i*dx, i*dy]
|
230
|
+
# }
|
231
|
+
# => aの位置:( 0, 0)
|
232
|
+
# bの位置:(20,25)
|
233
|
+
# cの位置:(40,50)
|
234
|
+
#_x_:: 移動先位置(x方向)。単位はピクセル
|
235
|
+
#_y_:: 移動先位置(y方向)。単位はピクセル
|
236
|
+
#返却値:: 自分自身を返す
|
237
|
+
def move_to!(x, y)
|
238
|
+
if block_given?
|
239
|
+
self.sprite_only.each_with_index{|e, i| e.move_to!(*(yield e, i, x, y))}
|
240
|
+
else
|
241
|
+
self.sprite_only.each{|e| e.move_to!(x, y)}
|
242
|
+
end
|
243
|
+
self
|
244
|
+
end
|
245
|
+
|
246
|
+
#===描く画像のアニメーションを開始する
|
247
|
+
#各要素のstartメソッドを呼び出す
|
248
|
+
#返却値:: 自分自身を返す
|
249
|
+
def start
|
250
|
+
self.sprite_only.each{|sprite| sprite.start }
|
251
|
+
return self
|
252
|
+
end
|
253
|
+
|
254
|
+
#===描く画像のアニメーションを停止する
|
255
|
+
#各要素のstopメソッドを呼び出す
|
256
|
+
#返却値:: 自分自身を返す
|
257
|
+
def stop
|
258
|
+
self.sprite_only.each{|sprite| sprite.stop }
|
259
|
+
return self
|
260
|
+
end
|
261
|
+
|
262
|
+
#===描く画像のアニメーションを先頭パターンに戻す
|
263
|
+
#各要素のresetメソッドを呼び出す
|
264
|
+
#返却値:: 自分自身を返す
|
265
|
+
def reset
|
266
|
+
self.sprite_only.each{|sprite| sprite.reset }
|
267
|
+
return self
|
268
|
+
end
|
269
|
+
|
270
|
+
#===描く画像のアニメーションを更新する
|
271
|
+
#各要素のupdate_animationメソッドを呼び出す
|
272
|
+
#返却値:: 描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す
|
273
|
+
def update_animation
|
274
|
+
self.sprite_only.map{|e|
|
275
|
+
e.update_animation
|
276
|
+
}
|
277
|
+
end
|
278
|
+
|
279
|
+
#===指定した要素の内容を入れ替える
|
280
|
+
#配列の先頭から順にrenderメソッドを呼び出す。
|
281
|
+
#描画するインスタンスは、引数がゼロのrenderメソッドを持っているもののみ(持っていないときは呼び出さない)
|
282
|
+
#_idx1,idx2_:: 入れ替え対象の配列要素インデックス
|
283
|
+
#返却値:: 自分自身を帰す
|
284
|
+
def swap(idx1, idx2)
|
285
|
+
l = self.length
|
286
|
+
raise MiyakoValueError, "Illegal index range! : idx1:#{idx1}" if (idx1 >= l || idx1 < -l)
|
287
|
+
raise MiyakoValueError, "Illegal index range! : idx2:#{idx2}" if (idx2 >= l || idx2 < -l)
|
288
|
+
self[idx1], self[idx2] = self[idx2], self[idx1]
|
289
|
+
return self
|
290
|
+
end
|
291
|
+
|
292
|
+
#===配列の要素を画面に描画する
|
293
|
+
#配列の先頭から順にrenderメソッドを呼び出す。
|
294
|
+
#描画するインスタンスは、SpriteBaseモジュールがmixinされているクラスのみ
|
295
|
+
#返却値:: 自分自身を帰す
|
296
|
+
def render
|
297
|
+
self.sprite_only.each{|e| e.render }
|
298
|
+
return self
|
299
|
+
end
|
300
|
+
|
301
|
+
#===配列の要素を対象の画像に描画する
|
302
|
+
#配列の先頭から順にrender_toメソッドを呼び出す。
|
303
|
+
#_dst_:: 描画対象の画像インスタンス
|
304
|
+
#返却値:: 自分自身を帰す
|
305
|
+
def render_to(dst)
|
306
|
+
self.each{|e| e.render_to(dst) }
|
307
|
+
return self
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
#==ディープコピーを実装するモジュール
|
312
|
+
#dup、cloneとは違い、「ディープコピー(配列などの要素も複製するコピー)」を実装するためのモジュール。
|
313
|
+
module DeepCopy
|
314
|
+
#===複製を取得する
|
315
|
+
#ただし、再定義しているクラス(例:Arrayクラス)以外はdupメソッドの結果
|
316
|
+
#返却値:: 複写したインスタンスを返す
|
317
|
+
def deep_dup
|
318
|
+
(self && self.methods.include?(:dup)) ? self.dup : self
|
319
|
+
end
|
320
|
+
|
321
|
+
#===複製を取得する
|
322
|
+
#ただし、再定義しているクラス(例:Arrayクラス)以外はdupメソッドの結果
|
323
|
+
#返却値:: 複写したインスタンスを返す
|
324
|
+
def deep_clone
|
325
|
+
self.deep_dup
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
class Object
|
331
|
+
include Miyako::DeepCopy
|
332
|
+
end
|
333
|
+
|
334
|
+
class Array
|
335
|
+
include Miyako::SpriteArray
|
336
|
+
|
337
|
+
#===複製を取得する
|
338
|
+
#ただし、配列の要素もdeep_dupメソッドで複製する
|
339
|
+
#返却値:: 複写したインスタンスを返す
|
340
|
+
def deep_dup
|
341
|
+
self.dup.map{|e| (e && e.methods.include?(:deep_dup)) ? e.deep_dup : e }
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
class Hash
|
346
|
+
#===複製を取得する
|
347
|
+
#ただし、配列の要素もdeep_dupメソッドで複製する
|
348
|
+
#返却値:: 複写したインスタンスを返す
|
349
|
+
def deep_dup
|
350
|
+
ret = self.dup
|
351
|
+
ret.keys.each{|key|
|
352
|
+
v = ret[key]
|
353
|
+
(v && v.methods.include?(:deep_dup)) ? v.deep_dup : v
|
354
|
+
}
|
355
|
+
ret
|
356
|
+
end
|
357
|
+
end
|