cyross-ruby-miyako 2.0.5.1 → 2.1.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 +1092 -929
- data/Rakefile +7 -7
- data/defines.h +144 -144
- data/extern.h +29 -29
- data/install_miyako.rb +87 -87
- data/lib/Miyako/API/audio.rb +572 -198
- data/lib/Miyako/API/basic_data.rb +825 -573
- data/lib/Miyako/API/bitmap.rb +534 -507
- data/lib/Miyako/API/choices.rb +481 -475
- data/lib/Miyako/API/collision.rb +486 -460
- data/lib/Miyako/API/diagram.rb +586 -561
- data/lib/Miyako/API/drawing.rb +151 -151
- data/lib/Miyako/API/exceptions.rb +105 -0
- data/lib/Miyako/API/fixedmap.rb +462 -428
- data/lib/Miyako/API/font.rb +430 -403
- data/lib/Miyako/API/input.rb +456 -447
- data/lib/Miyako/API/layout.rb +636 -433
- data/lib/Miyako/API/map.rb +583 -529
- data/lib/Miyako/API/map_event.rb +222 -198
- data/lib/Miyako/API/modules.rb +357 -109
- data/lib/Miyako/API/movie.rb +166 -154
- data/lib/Miyako/API/parts.rb +276 -189
- data/lib/Miyako/API/plane.rb +205 -166
- data/lib/Miyako/API/screen.rb +341 -325
- data/lib/Miyako/API/shape.rb +443 -443
- data/lib/Miyako/API/sprite.rb +771 -752
- data/lib/Miyako/API/sprite_animation.rb +490 -481
- data/lib/Miyako/API/sprite_list.rb +1135 -0
- data/lib/Miyako/API/spriteunit.rb +168 -147
- data/lib/Miyako/API/story.rb +350 -300
- data/lib/Miyako/API/textbox.rb +770 -725
- data/lib/Miyako/API/utility.rb +419 -388
- data/lib/Miyako/API/viewport.rb +189 -139
- data/lib/Miyako/API/yuki.rb +1226 -996
- data/lib/Miyako/EXT/miyako_cairo.rb +62 -62
- data/lib/Miyako/EXT/raster_scroll.rb +138 -138
- data/lib/Miyako/EXT/slides.rb +157 -157
- data/lib/Miyako/miyako.rb +201 -171
- data/lib/Miyako/miyako_require_only.rb +35 -0
- data/miyako_basicdata.c +590 -590
- data/miyako_bitmap.c +1225 -1225
- data/miyako_collision.c +403 -403
- data/miyako_drawing.c +187 -187
- data/miyako_font.c +334 -334
- data/miyako_hsv.c +830 -830
- data/miyako_input_audio.c +254 -0
- data/miyako_layout.c +191 -191
- data/miyako_no_katana.c +1078 -1074
- data/miyako_sprite2.c +431 -0
- data/miyako_transform.c +438 -438
- data/miyako_utility.c +288 -288
- data/sample/Animation1/m1ku.rb +68 -68
- data/sample/Animation2/lex.rb +96 -96
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +328 -386
- data/sample/Room3/blue.rb +297 -297
- data/sample/Room3/ending.rb +180 -180
- data/sample/Room3/green.rb +220 -220
- data/sample/Room3/main.rb +119 -119
- data/sample/Room3/main_component.rb +59 -59
- data/sample/Room3/red.rb +227 -227
- data/sample/Room3/room3.rb +25 -27
- data/sample/Room3/title.rb +184 -184
- data/sample/ball_action_sample.rb +204 -204
- data/sample/blit_rop.rb +70 -70
- data/sample/cairo_sample.rb +25 -25
- data/sample/circle_collision_test.rb +66 -66
- data/sample/collision_test.rb +33 -33
- data/sample/collision_test2.rb +108 -108
- data/sample/fixed_map_test/fixed_map_sample.rb +140 -140
- data/sample/fixed_map_test/readme.txt +72 -72
- data/sample/map_test/chara.rb +58 -58
- data/sample/map_test/main_parts.rb +69 -69
- data/sample/map_test/main_scene.rb +153 -153
- data/sample/map_test/map_manager.rb +75 -75
- data/sample/map_test/map_test.rb +23 -23
- data/sample/map_test/oasis.rb +71 -71
- data/sample/map_test/readme.txt +89 -89
- data/sample/map_test/route.rb +157 -157
- data/sample/map_test/town.rb +74 -74
- data/sample/polygon_test.rb +35 -35
- data/sample/rasterscroll.rb +24 -24
- data/sample/takahashi.rb +42 -42
- data/sample/textbox_sample.rb +189 -189
- data/sample/transform.rb +54 -54
- data/sample/utility_test.rb +73 -73
- data/sample/utility_test2.rb +61 -61
- data/sample/utility_test3.rb +64 -64
- data/sample/utility_test4.rb +73 -73
- data/uninstall_miyako.rb +19 -19
- data/win/miyako_no_katana.so +0 -0
- metadata +7 -2
data/lib/Miyako/API/drawing.rb
CHANGED
@@ -1,151 +1,151 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
=begin
|
3
|
-
--
|
4
|
-
Miyako v2.
|
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
|
-
# 線形描画モジュール
|
24
|
-
module Miyako
|
25
|
-
#==線形描画モジュール
|
26
|
-
module Drawing
|
27
|
-
#===画像全体を指定の色で塗りつぶす
|
28
|
-
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
29
|
-
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
30
|
-
#_color_:: 塗りつぶす色。Color.to_rgbメソッドのパラメータでの指定が可能
|
31
|
-
#返却値:: 自分自身を返す
|
32
|
-
def Drawing.fill(sprite, color)
|
33
|
-
color = Color.to_rgb(color)
|
34
|
-
methods = sprite.methods
|
35
|
-
raise MiyakoError,
|
36
|
-
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
37
|
-
bitmap = methods.include?(:to_unit) ? sprite.to_unit.bitmap : methods.include?(:bitmap) ? sprite.bitmap : sprite
|
38
|
-
bitmap.draw_rect(0,0, bitmap.w, bitmap.h, color, true, color[3]==255 ? nil : color[3])
|
39
|
-
return self
|
40
|
-
end
|
41
|
-
|
42
|
-
#===画像内に点を描画する
|
43
|
-
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
44
|
-
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
45
|
-
#_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
|
46
|
-
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
47
|
-
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
48
|
-
#返却値:: 自分自身を返す
|
49
|
-
def Drawing.pset(sprite, point, color)
|
50
|
-
methods = sprite.methods
|
51
|
-
raise MiyakoError,
|
52
|
-
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
53
|
-
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
54
|
-
bitmap[point[0], point[1]] = Color.to_rgb(color)
|
55
|
-
return self
|
56
|
-
end
|
57
|
-
|
58
|
-
#===画像内に直線を引く
|
59
|
-
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
60
|
-
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
61
|
-
#_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
|
62
|
-
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
63
|
-
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
64
|
-
#返却値:: 自分自身を返す
|
65
|
-
def Drawing.line(sprite, rect, color, aa = false)
|
66
|
-
color = Color.to_rgb(color)
|
67
|
-
methods = sprite.methods
|
68
|
-
raise MiyakoError,
|
69
|
-
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
70
|
-
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
71
|
-
bitmap.draw_line(
|
72
|
-
rect[0], rect[1], rect[0]+rect[2]-1, rect[1]+rect[3]-1,
|
73
|
-
color, aa, color[3]==255 ? nil : color[3]
|
74
|
-
)
|
75
|
-
return self
|
76
|
-
end
|
77
|
-
|
78
|
-
#===画像内に矩形を描画する
|
79
|
-
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
80
|
-
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
81
|
-
#_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
|
82
|
-
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
83
|
-
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
84
|
-
#返却値:: 自分自身を返す
|
85
|
-
def Drawing.rect(sprite, rect, color, fill = false)
|
86
|
-
color = Color.to_rgb(color)
|
87
|
-
methods = sprite.methods
|
88
|
-
raise MiyakoError,
|
89
|
-
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
90
|
-
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
91
|
-
bitmap.draw_rect(
|
92
|
-
rect[0], rect[1], rect[2]-1, rect[3]-1,
|
93
|
-
color, fill, color[3]==255 ? nil : color[3]
|
94
|
-
)
|
95
|
-
return self
|
96
|
-
end
|
97
|
-
|
98
|
-
#===画像内に円を描画する
|
99
|
-
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
100
|
-
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
101
|
-
#_point_:: 中心の位置。2要素の整数の配列、もしくはPoint構造体を使用可能
|
102
|
-
#_r_:: 円の半径。整数を使用可能。
|
103
|
-
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
104
|
-
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
105
|
-
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
106
|
-
#返却値:: 自分自身を返す
|
107
|
-
def Drawing.circle(sprite, point, r, color, fill = false, aa = false)
|
108
|
-
color = Color.to_rgb(color)
|
109
|
-
methods = sprite.methods
|
110
|
-
raise MiyakoError,
|
111
|
-
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
112
|
-
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
113
|
-
bitmap.draw_circle(*point.to_a[0..1], r, color, fill, aa, color[3]==255 ? nil : color[3])
|
114
|
-
return self
|
115
|
-
end
|
116
|
-
|
117
|
-
#===画像内に楕円を描画する
|
118
|
-
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
119
|
-
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
120
|
-
#_point_:: 楕円の中心位置。2要素の整数の配列かPoint構造体を使用
|
121
|
-
#_rx_:: x方向半径。1以上の整数
|
122
|
-
#_ry_:: y方向半径。1以上の整数
|
123
|
-
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
124
|
-
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
125
|
-
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
126
|
-
#返却値:: 自分自身を返す
|
127
|
-
def Drawing.ellipse(sprite, point, rx, ry, color, fill = false, aa = false)
|
128
|
-
color = Color.to_rgb(color)
|
129
|
-
methods = sprite.methods
|
130
|
-
raise MiyakoError,
|
131
|
-
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
132
|
-
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
133
|
-
bitmap.draw_ellipse(
|
134
|
-
point[0], point[1], rx, ry,
|
135
|
-
color, fill, aa, color[3]==255 ? nil : color[3]
|
136
|
-
)
|
137
|
-
end
|
138
|
-
|
139
|
-
#===画像内に多角形を描画する
|
140
|
-
#多角形を描画するとき、頂点のリストは、[x,y]で示した配列のリスト(配列)を渡す。
|
141
|
-
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
142
|
-
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
143
|
-
#_points_:: 座標の配列。2要素の整数の配列かPoint構造体を使用
|
144
|
-
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
145
|
-
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
146
|
-
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
147
|
-
#返却値:: 自分自身を返す
|
148
|
-
def Drawing.polygon(sprite, points, color, fill = false, aa = false)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
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
|
+
# 線形描画モジュール
|
24
|
+
module Miyako
|
25
|
+
#==線形描画モジュール
|
26
|
+
module Drawing
|
27
|
+
#===画像全体を指定の色で塗りつぶす
|
28
|
+
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
29
|
+
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
30
|
+
#_color_:: 塗りつぶす色。Color.to_rgbメソッドのパラメータでの指定が可能
|
31
|
+
#返却値:: 自分自身を返す
|
32
|
+
def Drawing.fill(sprite, color)
|
33
|
+
color = Color.to_rgb(color)
|
34
|
+
methods = sprite.methods
|
35
|
+
raise MiyakoError,
|
36
|
+
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
37
|
+
bitmap = methods.include?(:to_unit) ? sprite.to_unit.bitmap : methods.include?(:bitmap) ? sprite.bitmap : sprite
|
38
|
+
bitmap.draw_rect(0,0, bitmap.w, bitmap.h, color, true, color[3]==255 ? nil : color[3])
|
39
|
+
return self
|
40
|
+
end
|
41
|
+
|
42
|
+
#===画像内に点を描画する
|
43
|
+
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
44
|
+
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
45
|
+
#_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
|
46
|
+
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
47
|
+
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
48
|
+
#返却値:: 自分自身を返す
|
49
|
+
def Drawing.pset(sprite, point, color)
|
50
|
+
methods = sprite.methods
|
51
|
+
raise MiyakoError,
|
52
|
+
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
53
|
+
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
54
|
+
bitmap[point[0], point[1]] = Color.to_rgb(color)
|
55
|
+
return self
|
56
|
+
end
|
57
|
+
|
58
|
+
#===画像内に直線を引く
|
59
|
+
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
60
|
+
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
61
|
+
#_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
|
62
|
+
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
63
|
+
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
64
|
+
#返却値:: 自分自身を返す
|
65
|
+
def Drawing.line(sprite, rect, color, aa = false)
|
66
|
+
color = Color.to_rgb(color)
|
67
|
+
methods = sprite.methods
|
68
|
+
raise MiyakoError,
|
69
|
+
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
70
|
+
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
71
|
+
bitmap.draw_line(
|
72
|
+
rect[0], rect[1], rect[0]+rect[2]-1, rect[1]+rect[3]-1,
|
73
|
+
color, aa, color[3]==255 ? nil : color[3]
|
74
|
+
)
|
75
|
+
return self
|
76
|
+
end
|
77
|
+
|
78
|
+
#===画像内に矩形を描画する
|
79
|
+
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
80
|
+
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
81
|
+
#_rect_:: 描画する矩形。画像の左上を[0,0]とする。4要素の整数の配列かRect構造体を使用
|
82
|
+
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
83
|
+
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
84
|
+
#返却値:: 自分自身を返す
|
85
|
+
def Drawing.rect(sprite, rect, color, fill = false)
|
86
|
+
color = Color.to_rgb(color)
|
87
|
+
methods = sprite.methods
|
88
|
+
raise MiyakoError,
|
89
|
+
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
90
|
+
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
91
|
+
bitmap.draw_rect(
|
92
|
+
rect[0], rect[1], rect[2]-1, rect[3]-1,
|
93
|
+
color, fill, color[3]==255 ? nil : color[3]
|
94
|
+
)
|
95
|
+
return self
|
96
|
+
end
|
97
|
+
|
98
|
+
#===画像内に円を描画する
|
99
|
+
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
100
|
+
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
101
|
+
#_point_:: 中心の位置。2要素の整数の配列、もしくはPoint構造体を使用可能
|
102
|
+
#_r_:: 円の半径。整数を使用可能。
|
103
|
+
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
104
|
+
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
105
|
+
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
106
|
+
#返却値:: 自分自身を返す
|
107
|
+
def Drawing.circle(sprite, point, r, color, fill = false, aa = false)
|
108
|
+
color = Color.to_rgb(color)
|
109
|
+
methods = sprite.methods
|
110
|
+
raise MiyakoError,
|
111
|
+
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
112
|
+
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
113
|
+
bitmap.draw_circle(*point.to_a[0..1], r, color, fill, aa, color[3]==255 ? nil : color[3])
|
114
|
+
return self
|
115
|
+
end
|
116
|
+
|
117
|
+
#===画像内に楕円を描画する
|
118
|
+
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
119
|
+
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
120
|
+
#_point_:: 楕円の中心位置。2要素の整数の配列かPoint構造体を使用
|
121
|
+
#_rx_:: x方向半径。1以上の整数
|
122
|
+
#_ry_:: y方向半径。1以上の整数
|
123
|
+
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
124
|
+
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
125
|
+
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
126
|
+
#返却値:: 自分自身を返す
|
127
|
+
def Drawing.ellipse(sprite, point, rx, ry, color, fill = false, aa = false)
|
128
|
+
color = Color.to_rgb(color)
|
129
|
+
methods = sprite.methods
|
130
|
+
raise MiyakoError,
|
131
|
+
"this method needs sprite have to_method or bitmap method!" if !methods.include?(:to_unit) && !methods.include?(:bitmap)
|
132
|
+
bitmap = sprite.methods.include?(:to_unit) ? sprite.to_unit.bitmap : sprite.bitmap
|
133
|
+
bitmap.draw_ellipse(
|
134
|
+
point[0], point[1], rx, ry,
|
135
|
+
color, fill, aa, color[3]==255 ? nil : color[3]
|
136
|
+
)
|
137
|
+
end
|
138
|
+
|
139
|
+
#===画像内に多角形を描画する
|
140
|
+
#多角形を描画するとき、頂点のリストは、[x,y]で示した配列のリスト(配列)を渡す。
|
141
|
+
#引数spriteにto_unitもしくはbitmapメソッドが定義されていない場合は例外が発生する。
|
142
|
+
#_sprite_:: 描画対象のスプライト(to_unitもしくはbitmapメソッドを持つインスタンス)
|
143
|
+
#_points_:: 座標の配列。2要素の整数の配列かPoint構造体を使用
|
144
|
+
#_color_:: 描画色。Color.to_rgbメソッドのパラメータでの指定が可能
|
145
|
+
#_fill_:: 描画の属性。falseで縁のみ描画、trueで内部も塗りつぶす。デフォルトはfalse
|
146
|
+
#_aa_:: アンチエイリアスの指定。trueでオン。デフォルトはfalse
|
147
|
+
#返却値:: 自分自身を返す
|
148
|
+
def Drawing.polygon(sprite, points, color, fill = false, aa = false)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,105 @@
|
|
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
|
+
# 例外クラス群
|
24
|
+
module Miyako
|
25
|
+
|
26
|
+
#==Miyakoの汎用例外クラス
|
27
|
+
class MiyakoError < Exception
|
28
|
+
end
|
29
|
+
|
30
|
+
#==Miyakoの入出力例外クラス
|
31
|
+
class MiyakoIOError < MiyakoError
|
32
|
+
#===ファイルが見つからなかったときの例外を生成する
|
33
|
+
#「ファイルが見つからない」というエラーメッセージを発する
|
34
|
+
#例外インスタンスを生成する
|
35
|
+
#_path_:: 見つからなかったファイルパス
|
36
|
+
#返却値:: 生成した例外インスタンス
|
37
|
+
def MiyakoIOError.no_file(path)
|
38
|
+
MiyakoIOError.exception("Not found file: #{path}")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
#==Miyakoのファイル形式例外クラス
|
43
|
+
class MiyakoFileFormatError < MiyakoIOError
|
44
|
+
#===ファイルが見つからなかったときの例外を生成する
|
45
|
+
#「ファイルが見つからない」というエラーメッセージを発する
|
46
|
+
#例外インスタンスを生成する
|
47
|
+
#_path_:: 見つからなかったファイルパス
|
48
|
+
#返却値:: 生成した例外インスタンス
|
49
|
+
def MiyakoIOError.illegal_file_foramt(path)
|
50
|
+
MiyakoIOError.exception("Illegal file format.: #{path}")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
#==Miyakoの不正値クラス
|
55
|
+
class MiyakoValueError < MiyakoError
|
56
|
+
#===不正な値が使われたときの例外を生成する
|
57
|
+
#「不正な値が使われました」というエラーメッセージを発する
|
58
|
+
#例外インスタンスを生成する
|
59
|
+
#_value_:: 使用した値
|
60
|
+
#返却値:: 生成した例外インスタンス
|
61
|
+
def MiyakoValueError.illegal_value(value)
|
62
|
+
MiyakoValueError.exception("Illegal value: #{value}")
|
63
|
+
end
|
64
|
+
|
65
|
+
#===範囲外の値が設定されたときの例外を生成する
|
66
|
+
#「範囲外の値が参照しました」というエラーメッセージを発する
|
67
|
+
#例外インスタンスを生成する
|
68
|
+
#_value_:: 使用した値
|
69
|
+
#_min_:: 範囲の下限値
|
70
|
+
#_max_:: 範囲の上限値
|
71
|
+
#返却値:: 生成した例外インスタンス
|
72
|
+
def MiyakoValueError.over_range(value, min, max)
|
73
|
+
min = "" unless min
|
74
|
+
max = "" unless max
|
75
|
+
MiyakoValueError.exception("Out of range: #{value} (range: #{min}..#{max})")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#==Proc、ブロック関連エラー(ブロックが渡っていない、など)
|
80
|
+
class MiyakoProcError < MiyakoError
|
81
|
+
|
82
|
+
#===ブロックが必要なときの例外を生成する
|
83
|
+
#返却値:: 生成した例外インスタンス
|
84
|
+
def MiyakoProcError.need_block
|
85
|
+
MiyakoProcError.exception("This method needs block!")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
#==クラス関連エラー
|
90
|
+
class MiyakoTypeError < MiyakoError
|
91
|
+
end
|
92
|
+
|
93
|
+
#==コピーエラー(複写時に起きる例外(複写禁止なのに複写した、など))
|
94
|
+
class MiyakoCopyError < MiyakoError
|
95
|
+
|
96
|
+
#===複製不可のインスタンスを複製したときの例外を生成する
|
97
|
+
#「このインスタンスは複製できません」というエラーメッセージを発する
|
98
|
+
#例外インスタンスを生成する
|
99
|
+
#_class_name_:: 複製しようとした値のクラス名
|
100
|
+
#返却値:: 生成した例外インスタンス
|
101
|
+
def MiyakoCopyError.not_copy(class_name)
|
102
|
+
MiyakoCopyError.exception("#{class_name} class instance cannot allow dup/clone!")
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
data/lib/Miyako/API/fixedmap.rb
CHANGED
@@ -1,428 +1,462 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
=begin
|
3
|
-
--
|
4
|
-
Miyako v2.
|
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
|
-
class FixedMap
|
29
|
-
include
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
@
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@
|
64
|
-
@
|
65
|
-
@
|
66
|
-
@
|
67
|
-
@
|
68
|
-
@
|
69
|
-
@
|
70
|
-
@
|
71
|
-
@
|
72
|
-
@
|
73
|
-
@
|
74
|
-
@
|
75
|
-
@
|
76
|
-
@
|
77
|
-
@
|
78
|
-
@
|
79
|
-
@
|
80
|
-
@cdivsx = @
|
81
|
-
@
|
82
|
-
@
|
83
|
-
@cmodsy = @
|
84
|
-
@
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
(
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
return
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
#
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
#
|
333
|
-
#
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
def
|
344
|
-
|
345
|
-
end
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
def
|
378
|
-
|
379
|
-
end
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
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
|
+
class FixedMap
|
29
|
+
include SpriteBase
|
30
|
+
include Animation
|
31
|
+
include Layout
|
32
|
+
|
33
|
+
@@idx_ix = [-1, 2, 4]
|
34
|
+
@@idx_iy = [-1, 0, 6]
|
35
|
+
|
36
|
+
attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
|
37
|
+
attr_reader :name, :map_layers, :mapchips, :pos, :size, :w, :h
|
38
|
+
|
39
|
+
#==あとで書く
|
40
|
+
class FixedMapLayer #:nodoc: all
|
41
|
+
include SpriteBase
|
42
|
+
include Animation
|
43
|
+
extend Forwardable
|
44
|
+
|
45
|
+
@@use_chip_list = Hash.new(nil)
|
46
|
+
|
47
|
+
attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
|
48
|
+
attr_accessor :mapchip, :mapchip_units
|
49
|
+
attr_reader :pos
|
50
|
+
|
51
|
+
def round(v, max) #:nodoc:
|
52
|
+
v = max + (v % max) if v < 0
|
53
|
+
v %= max if v >= max
|
54
|
+
return v
|
55
|
+
end
|
56
|
+
|
57
|
+
def reSize #:nodoc:
|
58
|
+
@cw = @real_size.w % @ow == 0 ? @real_size.w / @ow : (@real_size.w + @ow - 1)/ @ow + 1
|
59
|
+
@ch = @real_size.h % @oh == 0 ? @real_size.h / @oh : (@real_size.h + @oh - 1)/ @oh + 1
|
60
|
+
end
|
61
|
+
|
62
|
+
def initialize(mapchip, mapdat, layer_size) #:nodoc:
|
63
|
+
@mapchip = mapchip
|
64
|
+
@pos = Point.new(0, 0)
|
65
|
+
@size = layer_size.dup
|
66
|
+
@ow = @mapchip.chip_size.w
|
67
|
+
@oh = @mapchip.chip_size.h
|
68
|
+
@real_size = Size.new(@size.w * @ow, @size.h * @oh)
|
69
|
+
@mapdat = mapdat
|
70
|
+
@baseimg = nil
|
71
|
+
@baseimg = @mapchip.chip_image
|
72
|
+
@units = nil
|
73
|
+
@visible = true
|
74
|
+
@divpx = get_div_array(0, @real_size.w, @ow)
|
75
|
+
@divpy = get_div_array(0, @real_size.h, @oh)
|
76
|
+
@modpx = get_mod_array(0, @real_size.w, @ow)
|
77
|
+
@modpy = get_mod_array(0, @real_size.h, @oh)
|
78
|
+
@modpx2 = get_mod_array(0, @size.w * 2 + 1, @size.w)
|
79
|
+
@modpy2 = get_mod_array(0, @size.h * 2 + 1, @size.h)
|
80
|
+
@cdivsx = get_div_array(0, @mapchip.chips, @mapchip.size.w)
|
81
|
+
@cmodsx = get_mod_array(0, @mapchip.chips, @mapchip.size.w)
|
82
|
+
@cdivsy = get_div_array(0, @mapchip.chips, @mapchip.size.h)
|
83
|
+
@cmodsy = get_mod_array(0, @mapchip.chips, @mapchip.size.h)
|
84
|
+
@cdivsx = @cdivsx.map{|v| v * @ow }
|
85
|
+
@cdivsy = @cdivsy.map{|v| v * @oh }
|
86
|
+
@cmodsx = @cmodsx.map{|v| v * @ow }
|
87
|
+
@cmodsy = @cmodsy.map{|v| v * @oh }
|
88
|
+
@mapchip_units = Array.new(@mapchip.chips){|idx|
|
89
|
+
SpriteUnitFactory.create(:bitmap=>@baseimg.bitmap,
|
90
|
+
:ox => (idx % @mapchip.size.w) * @ow, :oy => (idx / @mapchip.size.w) * @oh,
|
91
|
+
:ow => @ow, :oh => @oh)
|
92
|
+
}
|
93
|
+
reSize
|
94
|
+
end
|
95
|
+
|
96
|
+
def initialize_copy(obj) #:nodoc:
|
97
|
+
@mapchip = @mapchip.dup
|
98
|
+
@size = @size.dup
|
99
|
+
@mapchip_unit = @mapchip_unit.dup
|
100
|
+
@divpx = get_div_array(0, @real_size.w, @ow)
|
101
|
+
@divpy = get_div_array(0, @real_size.h, @oh)
|
102
|
+
@modpx = get_mod_array(0, @real_size.w, @ow)
|
103
|
+
@modpy = get_mod_array(0, @real_size.h, @oh)
|
104
|
+
@modpx2 = get_mod_array(0, @size.w * 2 + 1, @size.w)
|
105
|
+
@modpy2 = get_mod_array(0, @size.h * 2 + 1, @size.h)
|
106
|
+
@cdivsx = get_div_array(0, @mapchip.chips, @mapchip.size.w)
|
107
|
+
@cmodsx = get_mod_array(0, @mapchip.chips, @mapchip.size.w)
|
108
|
+
@cdivsy = get_div_array(0, @mapchip.chips, @mapchip.size.h)
|
109
|
+
@cmodsy = get_mod_array(0, @mapchip.chips, @mapchip.size.h)
|
110
|
+
@cdivsx = @cdivsx.map{|v| v * @ow }
|
111
|
+
@cdivsy = @cdivsy.map{|v| v * @oh }
|
112
|
+
@cmodsx = @cmodsx.map{|v| v * @ow }
|
113
|
+
@cmodsy = @cmodsy.map{|v| v * @oh }
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_div_array(s, t, v) #:nodoc:
|
117
|
+
a = Array.new
|
118
|
+
(s..t).each{|i| a.push(i / v)}
|
119
|
+
return a
|
120
|
+
end
|
121
|
+
|
122
|
+
def get_mod_array(s, t, v) #:nodoc:
|
123
|
+
a = Array.new
|
124
|
+
(s..t).each{|i| a.push(i % v)}
|
125
|
+
return a
|
126
|
+
end
|
127
|
+
|
128
|
+
def convert_position(x, y) #:nodoc:
|
129
|
+
return Point.new(@modpx2[round(x, @size.w)],
|
130
|
+
@modpy2[round(y, @size.h)])
|
131
|
+
end
|
132
|
+
|
133
|
+
#===指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す
|
134
|
+
#但し、引数には、Rect(x,y,w,h)形式のインスタンスを渡す
|
135
|
+
#_rect_:: キャラクタの矩形
|
136
|
+
#返却値:: マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ)
|
137
|
+
def product_position(rect)
|
138
|
+
return Utility.product_position(rect, @mapchip.chip_size)
|
139
|
+
end
|
140
|
+
|
141
|
+
#===指定の矩形のキャラクタに掛かるマップチップの左上位置の組み合わせを返す
|
142
|
+
#但し、引数には、Square([x1,y1,x2,y2])形式のインスタンスを渡す
|
143
|
+
#_square_:: キャラクタの矩形
|
144
|
+
#返却値:: マップチップ左上位置の配列(キャラクタに掛かる位置の組み合わせ)
|
145
|
+
def product_position_by_square(square)
|
146
|
+
return Utility.product_position_by_square(square, @mapchip.chip_size)
|
147
|
+
end
|
148
|
+
|
149
|
+
#===実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得
|
150
|
+
#イベントレイヤーでの番号はイベント番号と一致する
|
151
|
+
#_x_:: マップチップ単位での位置(ピクセル単位)
|
152
|
+
#_y_:: マップチップ単位での位置(ピクセル単位)
|
153
|
+
#返却値:: マップチップ番号(マップチップが設定されている時は0以上の整数、設定されていない場合は-1が返る)
|
154
|
+
def get_code(x, y)
|
155
|
+
pos = convert_position(x / @mapchip.chip_size[0], y / @mapchip.chip_size[1])
|
156
|
+
return @mapdat[pos.y][pos.x]
|
157
|
+
end
|
158
|
+
|
159
|
+
#===キャラクタとマップチップが重なっているかどうか問い合わせる
|
160
|
+
#指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと重なっているかどうか問い合わせる
|
161
|
+
#引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
|
162
|
+
#指定の位置のマップチップ番号が-1(未定義)のときはfalseを返す
|
163
|
+
#_type_:: 移動形式(0以上の整数)
|
164
|
+
#_pos_:: 調査対象のマップチップの位置
|
165
|
+
#_collision_:: キャラクタのコリジョン
|
166
|
+
#_rect_:: キャラクタの矩形
|
167
|
+
#返却値:: コリジョンが重なっていればtrueを返す
|
168
|
+
def collision?(type, pos, collision, rect)
|
169
|
+
code = get_code(*pos.to_a)
|
170
|
+
return false if code == -1
|
171
|
+
return @mapchip.collision_table[type][code].collision?(pos, collision, rect)
|
172
|
+
end
|
173
|
+
|
174
|
+
#===キャラクタとマップチップが隣り合っているかどうか問い合わせる
|
175
|
+
#指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンと隣り合っているかどうか問い合わせる
|
176
|
+
#引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
|
177
|
+
#指定の位置のマップチップ番号が-1(未定義)のときはfalseを返す
|
178
|
+
#_type_:: 移動形式(0以上の整数)
|
179
|
+
#_pos_:: 調査対象のマップチップの位置
|
180
|
+
#_collision_:: キャラクタのコリジョン
|
181
|
+
#_rect_:: キャラクタの矩形
|
182
|
+
#返却値:: コリジョンが隣り合っていればtrueを返す
|
183
|
+
def meet?(type, pos, collision, rect)
|
184
|
+
code = get_code(*pos.to_a)
|
185
|
+
return false if code == -1
|
186
|
+
return @mapchip.collision_table[type][code].meet?(pos, collision, rect)
|
187
|
+
end
|
188
|
+
|
189
|
+
#===キャラクタとマップチップが覆い被さっているかどうか問い合わせる
|
190
|
+
#指定の矩形のキャラクタが、指定の位置のマップチップのコリジョンを覆い被さっているかどうか問い合わせる
|
191
|
+
#引数は、Rect(x,y,w,h)形式(Rect構造体、[x,y,w,h]の配列)で渡す
|
192
|
+
#指定の位置のマップチップ番号が-1(未定義)のときはfalseを返す
|
193
|
+
#_type_:: 移動形式(0以上の整数)
|
194
|
+
#_pos_:: 調査対象のマップチップの位置
|
195
|
+
#_collision_:: キャラクタのコリジョン
|
196
|
+
#_rect_:: キャラクタの矩形
|
197
|
+
#返却値:: どちらかのコリジョンが覆い被さっていればtrueを返す
|
198
|
+
def cover?(type, pos, collision, rect)
|
199
|
+
code = get_code(*pos.to_a)
|
200
|
+
return false if code == -1
|
201
|
+
return @mapchip.collision_table[type][code].cover?(pos, collision, rect)
|
202
|
+
end
|
203
|
+
|
204
|
+
#===キャラクタとマップチップが重なっているかどうか問い合わせる
|
205
|
+
#指定の位置と方向で、指定の位置のマップチップ上で移動できるかどうか問い合わせる
|
206
|
+
#指定の位置のマップチップ番号が-1(未定義)のとき、移動していない(dx==0 and dy==0)ときはtrueを返す
|
207
|
+
#_type_:: 移動形式(0以上の整数)
|
208
|
+
#_inout_:: 入退形式(:in もしくは :out)
|
209
|
+
#_pos_:: 調査対象のマップチップの位置
|
210
|
+
#_dx_:: 移動量(x座標)
|
211
|
+
#_dy_:: 移動量(y座標)
|
212
|
+
#返却値:: 移動可能ならばtrueを返す
|
213
|
+
def can_access?(type, inout, pos, dx, dy)
|
214
|
+
code = get_code(pos[0]+dx, pos[1]+dy)
|
215
|
+
return true if code == -1
|
216
|
+
index = AccessIndex.index2(inout, dx, dy)
|
217
|
+
return true if index == -1
|
218
|
+
return @mapchip.access_table[type][code][index]
|
219
|
+
end
|
220
|
+
|
221
|
+
def dispose #:nodoc:
|
222
|
+
@mapdat = nil
|
223
|
+
@baseimg = nil
|
224
|
+
end
|
225
|
+
|
226
|
+
#===マップレイヤーを画面に描画する
|
227
|
+
#すべてのマップチップを画面に描画する
|
228
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
229
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
230
|
+
#ブロックの引数は、|画面のSpriteUnit|となる。
|
231
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
232
|
+
#返却値:: 自分自身を返す
|
233
|
+
def render
|
234
|
+
end
|
235
|
+
|
236
|
+
#===マップを画像に描画する
|
237
|
+
#すべてのマップチップを画像に描画する
|
238
|
+
#各レイヤ-を、レイヤーインデックス番号の若い順に描画する
|
239
|
+
#但し、マップイベントは描画しない
|
240
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
241
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
242
|
+
#ブロックの引数は、|転送先のSpriteUnit|となる。
|
243
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
244
|
+
#_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
|
245
|
+
#返却値:: 自分自身を返す
|
246
|
+
def render_to(dst)
|
247
|
+
end
|
248
|
+
|
249
|
+
def_delegators(:@size, :w, :h)
|
250
|
+
end
|
251
|
+
|
252
|
+
|
253
|
+
#===インスタンスを生成する
|
254
|
+
#各レイヤにMapChip構造体を渡す
|
255
|
+
#但し、すべてのレイヤーに同一のMapChip構造体を使うときは、単体で渡すことも可能
|
256
|
+
#第1引数にto_aメソッドが実装されていれば、配列化した要素をMapChip構造体として各レイヤに渡す
|
257
|
+
#また、各レイヤにMapChip構造体を渡すとき、レイヤ数より要素数が少ないときは、
|
258
|
+
#先頭に戻って繰り返し渡す仕様になっている
|
259
|
+
#各MapChip構造体のマップチップの大きさを同じにしておく必要がある
|
260
|
+
#_mapchips_:: マップチップ構造体群(MapChip構造体単体もしくは配列)
|
261
|
+
#_layer_csv_:: レイヤーファイル(CSVファイル)
|
262
|
+
#_event_manager_:: MapEventManagerクラスのインスタンス
|
263
|
+
#返却値:: 生成したインスタンス
|
264
|
+
def initialize(mapchips, layer_csv, event_manager)
|
265
|
+
raise MiyakoIOError.no_file(layer_csv) unless File.exist?(layer_csv)
|
266
|
+
init_layout
|
267
|
+
@visible = true
|
268
|
+
@event_layers = []
|
269
|
+
@em = event_manager.dup
|
270
|
+
@em.set(self)
|
271
|
+
@mapchips = mapchips.to_a
|
272
|
+
layer_data = CSV.readlines(layer_csv)
|
273
|
+
|
274
|
+
raise MiyakoFileFormatError, "This file is not Miyako Map Layer file! : #{layer_csv}" unless layer_data.shift[0] == "Miyako Maplayer"
|
275
|
+
|
276
|
+
tmp = layer_data.shift # 空行の空読み込み
|
277
|
+
|
278
|
+
@size = Size.new(tmp[0].to_i, tmp[1].to_i)
|
279
|
+
@w = @size.w * @mapchips.first.chip_size.w
|
280
|
+
@h = @size.h * @mapchips.first.chip_size.h
|
281
|
+
|
282
|
+
layers = layer_data.shift[0].to_i
|
283
|
+
|
284
|
+
evlist = []
|
285
|
+
brlist = []
|
286
|
+
layers.times{|n|
|
287
|
+
name = layer_data.shift[0]
|
288
|
+
values = []
|
289
|
+
@size.h.times{|y|
|
290
|
+
values << layer_data.shift.map{|m| m.to_i}
|
291
|
+
}
|
292
|
+
if name == "<event>"
|
293
|
+
evlist << values
|
294
|
+
else
|
295
|
+
brlist << values
|
296
|
+
end
|
297
|
+
}
|
298
|
+
|
299
|
+
@event_layer = nil
|
300
|
+
|
301
|
+
evlist.each{|events|
|
302
|
+
event_layer = Array.new
|
303
|
+
events.each_with_index{|ly, y|
|
304
|
+
ly.each_with_index{|code, x|
|
305
|
+
next unless @em.include?(code)
|
306
|
+
event_layer.push(@em.create(code, x * @mapchips.first.chip_size.w, y * @mapchips.first.chip_size.h))
|
307
|
+
}
|
308
|
+
}
|
309
|
+
@event_layers << event_layer
|
310
|
+
}
|
311
|
+
|
312
|
+
mc = @mapchips.cycle
|
313
|
+
@mapchips = mc.take(layers)
|
314
|
+
@map_layers = []
|
315
|
+
brlist.each{|br|
|
316
|
+
br = br.map{|b| b.map{|bb| bb >= @mapchips.first.chips ? -1 : bb } }
|
317
|
+
@map_layers.push(FixedMapLayer.new(mc.next, br, @size))
|
318
|
+
}
|
319
|
+
set_layout_size(@w, @h)
|
320
|
+
end
|
321
|
+
|
322
|
+
def initialize_copy(obj) #:nodoc:
|
323
|
+
@map_layers = @map_layers.dup
|
324
|
+
@event_layers = @event_layers.dup
|
325
|
+
@em = em.dup
|
326
|
+
@mapchips = @mapchips.dup
|
327
|
+
@size = @size.dup
|
328
|
+
copy_layout
|
329
|
+
end
|
330
|
+
|
331
|
+
#===マップにイベントを追加する
|
332
|
+
#_idx_:: 追加するイベントレイヤの指標
|
333
|
+
#_code_:: イベント番号(Map.newメソッドで渡したイベント番号に対応)
|
334
|
+
#_x_:: マップ上の位置(x方向)
|
335
|
+
#_y_:: マップ常温位置(y方向)
|
336
|
+
#返却値:: 自分自身を返す
|
337
|
+
def add_event(idx, code, x, y)
|
338
|
+
return self unless @em.include?(code)
|
339
|
+
@event_layers[idx].push(@em.create(code, x, y))
|
340
|
+
return self
|
341
|
+
end
|
342
|
+
|
343
|
+
def update_layout_position #:nodoc:
|
344
|
+
@map_layers.each{|ml| ml.pos.move_to!(*@layout.pos) }
|
345
|
+
end
|
346
|
+
|
347
|
+
def [](idx) #:nodoc:
|
348
|
+
return @map_layers[idx]
|
349
|
+
end
|
350
|
+
|
351
|
+
#===実座標を使用して、指定のレイヤー・位置のマップチップ番号を取得
|
352
|
+
#イベントレイヤーでの番号はイベント番号と一致する
|
353
|
+
#ブロックを渡すと、求めたマップチップ番号をブロック引数として受け取る評価を行える
|
354
|
+
#_idx_:: マップレイヤー配列のインデックス
|
355
|
+
#_x_:: マップチップ単位での位置(ピクセル単位)
|
356
|
+
#_y_:: マップチップ単位での位置(ピクセル単位)
|
357
|
+
#返却値:: マップチップ番号(マップチップが設定されている時は0以上の整数、設定されていない場合は-1が返る)
|
358
|
+
def get_code(idx, x = 0, y = 0)
|
359
|
+
code = @map_layers[idx].get_code(x, y)
|
360
|
+
yield code if block_given?
|
361
|
+
return code
|
362
|
+
end
|
363
|
+
|
364
|
+
#===対象のマップチップ番号の画像を置き換える
|
365
|
+
#_idx_:: 置き換えるマップチップレイヤー番号
|
366
|
+
#_code_:: 置き換えるマップチップ番号
|
367
|
+
#_base_:: 置き換え対象の画像・アニメーション
|
368
|
+
#返却値:: 自分自身を返す
|
369
|
+
def set_mapchip_base(idx, code, base)
|
370
|
+
@map_layers[idx].mapchip_units[code] = base
|
371
|
+
return self
|
372
|
+
end
|
373
|
+
|
374
|
+
#===現在の画面の最大の大きさを矩形で取得する
|
375
|
+
#但し、FixedMapの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
|
376
|
+
#返却値:: 画像の大きさ(Rect構造体のインスタンス)
|
377
|
+
def broad_rect
|
378
|
+
return self.rect
|
379
|
+
end
|
380
|
+
|
381
|
+
#===スプライトに変換した画像を表示する
|
382
|
+
#すべてのパーツを貼り付けた、1枚のスプライトを返す
|
383
|
+
#引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
|
384
|
+
#返却値:: 描画したスプライト
|
385
|
+
def to_sprite
|
386
|
+
rect = self.broad_rect
|
387
|
+
sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
|
388
|
+
Drawing.fill(sprite, [0,0,0])
|
389
|
+
Bitmap.ck_to_ac!(sprite, [0,0,0])
|
390
|
+
self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
|
391
|
+
yield sprite if block_given?
|
392
|
+
return sprite
|
393
|
+
end
|
394
|
+
|
395
|
+
#===SpriteUnit構造体を生成する
|
396
|
+
#いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
|
397
|
+
#返却値:: 生成したSpriteUnit構造体
|
398
|
+
def to_unit
|
399
|
+
return self.to_sprite.to_unit
|
400
|
+
end
|
401
|
+
|
402
|
+
#===マップチップ1枚の大きさを取得する
|
403
|
+
#マップチップの大きさが32×32ピクセルの場合は、[32,32]のSize構造体が返る
|
404
|
+
#返却値:: マップチップのサイズ(Size構造体)
|
405
|
+
def chipSize
|
406
|
+
return @mapchips.first.chip_size
|
407
|
+
end
|
408
|
+
|
409
|
+
#===すべてのマップイベントを終了させる
|
410
|
+
#マップに登録しているイベントすべてのfinalメソッドを呼び出す
|
411
|
+
def final
|
412
|
+
@event_layers.each{|ee| ee.each{|e| e.final }}
|
413
|
+
end
|
414
|
+
|
415
|
+
#===マップ情報を解放する
|
416
|
+
def dispose
|
417
|
+
@map_layers.each{|l|
|
418
|
+
l.dispose
|
419
|
+
l = nil
|
420
|
+
}
|
421
|
+
@map_layers = Array.new
|
422
|
+
|
423
|
+
@event_layers.each{|ee|
|
424
|
+
ee.each{|e| e.dispose }
|
425
|
+
ee.clear
|
426
|
+
}
|
427
|
+
@event_layers.clear
|
428
|
+
|
429
|
+
@mapchips.clear
|
430
|
+
@mapchips = nil
|
431
|
+
end
|
432
|
+
|
433
|
+
#===マップに登録しているイベントインスタンス(マップイベント)を取得する
|
434
|
+
#返却値:: マップイベントの配列
|
435
|
+
def events
|
436
|
+
return @event_layers
|
437
|
+
end
|
438
|
+
|
439
|
+
#===マップを画面に描画する
|
440
|
+
#すべてのマップチップを画面に描画する
|
441
|
+
#各レイヤ-を、レイヤーインデックス番号の若い順に描画する
|
442
|
+
#但し、マップイベントは描画しない
|
443
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
444
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
445
|
+
#ブロックの引数は、|画面のSpriteUnit|となる。
|
446
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
447
|
+
#返却値:: 自分自身を返す
|
448
|
+
def render
|
449
|
+
end
|
450
|
+
|
451
|
+
#===マップレイヤーを画像に転送する
|
452
|
+
#すべてのマップチップを画像に描画する
|
453
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
454
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
455
|
+
#ブロックの引数は、|転送先のSpriteUnit|となる。
|
456
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
457
|
+
#_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
|
458
|
+
#返却値:: 自分自身を返す
|
459
|
+
def render_to(dst)
|
460
|
+
end
|
461
|
+
end
|
462
|
+
end
|