cyross-ruby-miyako-mswin32 2.0.5

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.
Files changed (145) hide show
  1. data/README +929 -0
  2. data/img/cursor.png +0 -0
  3. data/img/cursors.png +0 -0
  4. data/img/dice.png +0 -0
  5. data/img/wait_cursor.png +0 -0
  6. data/img/win_base.png +0 -0
  7. data/img/window.png +0 -0
  8. data/install_miyako.rb +61 -0
  9. data/lib/Miyako/API/audio.rb +198 -0
  10. data/lib/Miyako/API/basic_data.rb +573 -0
  11. data/lib/Miyako/API/bitmap.rb +507 -0
  12. data/lib/Miyako/API/choices.rb +475 -0
  13. data/lib/Miyako/API/collision.rb +460 -0
  14. data/lib/Miyako/API/diagram.rb +561 -0
  15. data/lib/Miyako/API/drawing.rb +151 -0
  16. data/lib/Miyako/API/fixedmap.rb +428 -0
  17. data/lib/Miyako/API/font.rb +403 -0
  18. data/lib/Miyako/API/input.rb +447 -0
  19. data/lib/Miyako/API/layout.rb +433 -0
  20. data/lib/Miyako/API/map.rb +529 -0
  21. data/lib/Miyako/API/map_event.rb +198 -0
  22. data/lib/Miyako/API/modules.rb +109 -0
  23. data/lib/Miyako/API/movie.rb +154 -0
  24. data/lib/Miyako/API/parts.rb +189 -0
  25. data/lib/Miyako/API/plane.rb +166 -0
  26. data/lib/Miyako/API/screen.rb +325 -0
  27. data/lib/Miyako/API/shape.rb +443 -0
  28. data/lib/Miyako/API/sprite.rb +752 -0
  29. data/lib/Miyako/API/sprite_animation.rb +481 -0
  30. data/lib/Miyako/API/spriteunit.rb +147 -0
  31. data/lib/Miyako/API/story.rb +300 -0
  32. data/lib/Miyako/API/textbox.rb +725 -0
  33. data/lib/Miyako/API/utility.rb +388 -0
  34. data/lib/Miyako/API/viewport.rb +140 -0
  35. data/lib/Miyako/API/yuki.rb +996 -0
  36. data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
  37. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  38. data/lib/Miyako/EXT/slides.rb +157 -0
  39. data/lib/Miyako/miyako.rb +171 -0
  40. data/lib/Miyako/miyako_no_katana.so +0 -0
  41. data/logo/EGSR_logo.png +0 -0
  42. data/logo/EGSR_logo_bg.png +0 -0
  43. data/logo/EGSR_logo_fg.png +0 -0
  44. data/logo/EGSR_title_banner.png +0 -0
  45. data/logo/EGSR_title_logo.png +0 -0
  46. data/logo/miyako.png +0 -0
  47. data/logo/miyako_banner.png +0 -0
  48. data/logo/space.png +0 -0
  49. data/sample/Animation1/m1ku.rb +68 -0
  50. data/sample/Animation1/m1ku_arm_0.png +0 -0
  51. data/sample/Animation1/m1ku_arm_1.png +0 -0
  52. data/sample/Animation1/m1ku_arm_2.png +0 -0
  53. data/sample/Animation1/m1ku_arm_3.png +0 -0
  54. data/sample/Animation1/m1ku_back.jpg +0 -0
  55. data/sample/Animation1/m1ku_body.png +0 -0
  56. data/sample/Animation1/m1ku_eye_0.png +0 -0
  57. data/sample/Animation1/m1ku_eye_1.png +0 -0
  58. data/sample/Animation1/m1ku_eye_2.png +0 -0
  59. data/sample/Animation1/m1ku_eye_3.png +0 -0
  60. data/sample/Animation1/m1ku_hair_front.png +0 -0
  61. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  62. data/sample/Animation1/readme.txt +72 -0
  63. data/sample/Animation2/lex.rb +96 -0
  64. data/sample/Animation2/lex_back.png +0 -0
  65. data/sample/Animation2/lex_body.png +0 -0
  66. data/sample/Animation2/lex_roadroller.png +0 -0
  67. data/sample/Animation2/lex_wheel_0.png +0 -0
  68. data/sample/Animation2/lex_wheel_1.png +0 -0
  69. data/sample/Animation2/lex_wheel_2.png +0 -0
  70. data/sample/Animation2/readme.txt +72 -0
  71. data/sample/Animation2/song_title.png +0 -0
  72. data/sample/Diagram_sample/back.png +0 -0
  73. data/sample/Diagram_sample/chr01.png +0 -0
  74. data/sample/Diagram_sample/chr02.png +0 -0
  75. data/sample/Diagram_sample/cursor.png +0 -0
  76. data/sample/Diagram_sample/diagram_sample_yuki2.rb +387 -0
  77. data/sample/Diagram_sample/readme.txt +90 -0
  78. data/sample/Diagram_sample/wait_cursor.png +0 -0
  79. data/sample/Room3/blue.rb +297 -0
  80. data/sample/Room3/ending.rb +180 -0
  81. data/sample/Room3/green.rb +220 -0
  82. data/sample/Room3/image/akamatsu.png +0 -0
  83. data/sample/Room3/image/aoyama.png +0 -0
  84. data/sample/Room3/image/congra.png +0 -0
  85. data/sample/Room3/image/congratulation.png +0 -0
  86. data/sample/Room3/image/congratulation_bg.png +0 -0
  87. data/sample/Room3/image/cursor.png +0 -0
  88. data/sample/Room3/image/midori.png +0 -0
  89. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  90. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  91. data/sample/Room3/image/room_blue.png +0 -0
  92. data/sample/Room3/image/room_green.png +0 -0
  93. data/sample/Room3/image/room_red.png +0 -0
  94. data/sample/Room3/image/start.png +0 -0
  95. data/sample/Room3/image/three_doors.png +0 -0
  96. data/sample/Room3/image/wait_cursor.png +0 -0
  97. data/sample/Room3/main.rb +120 -0
  98. data/sample/Room3/main_component.rb +59 -0
  99. data/sample/Room3/readme.txt +76 -0
  100. data/sample/Room3/red.rb +227 -0
  101. data/sample/Room3/room3.rb +27 -0
  102. data/sample/Room3/title.rb +184 -0
  103. data/sample/ball_action_sample.rb +204 -0
  104. data/sample/blit_rop.rb +70 -0
  105. data/sample/cairo_sample.rb +25 -0
  106. data/sample/circle_collision_test.rb +62 -0
  107. data/sample/collision_test.rb +33 -0
  108. data/sample/collision_test2.rb +104 -0
  109. data/sample/fixed_map_test/cursor.png +0 -0
  110. data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
  111. data/sample/fixed_map_test/map.csv +19 -0
  112. data/sample/fixed_map_test/map_01.png +0 -0
  113. data/sample/fixed_map_test/mapchip.csv +23 -0
  114. data/sample/fixed_map_test/monster.png +0 -0
  115. data/sample/fixed_map_test/readme.txt +72 -0
  116. data/sample/map_test/chara.rb +58 -0
  117. data/sample/map_test/chr1.png +0 -0
  118. data/sample/map_test/cursor.png +0 -0
  119. data/sample/map_test/main_parts.rb +69 -0
  120. data/sample/map_test/main_scene.rb +153 -0
  121. data/sample/map_test/map.png +0 -0
  122. data/sample/map_test/map2.png +0 -0
  123. data/sample/map_test/map_layer.csv +127 -0
  124. data/sample/map_test/map_manager.rb +75 -0
  125. data/sample/map_test/map_test.rb +23 -0
  126. data/sample/map_test/mapchip.csv +21 -0
  127. data/sample/map_test/oasis.rb +71 -0
  128. data/sample/map_test/readme.txt +89 -0
  129. data/sample/map_test/route.rb +157 -0
  130. data/sample/map_test/sea.png +0 -0
  131. data/sample/map_test/town.rb +74 -0
  132. data/sample/map_test/wait_cursor.png +0 -0
  133. data/sample/map_test/window.png +0 -0
  134. data/sample/polygon_test.rb +35 -0
  135. data/sample/rasterscroll.rb +25 -0
  136. data/sample/takahashi.rb +42 -0
  137. data/sample/text.png +0 -0
  138. data/sample/textbox_sample.rb +190 -0
  139. data/sample/transform.rb +54 -0
  140. data/sample/utility_test.rb +73 -0
  141. data/sample/utility_test2.rb +61 -0
  142. data/sample/utility_test3.rb +64 -0
  143. data/sample/utility_test4.rb +73 -0
  144. data/uninstall_miyako.rb +19 -0
  145. metadata +196 -0
@@ -0,0 +1,189 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
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
+ #==パーツ構成クラス
25
+ #複数のスプライト・アニメーションをまとめて一つの部品として構成できるクラス
26
+ #
27
+ #最初に、基準となる「レイアウト空間(LayoutSpaceクラスのインスタンス)」を登録し、その上にパーツを加える
28
+ #
29
+ #すべてのパーツは、すべてレイアウト空間にスナップされる
30
+ #(登録したパーツのレイアウト情報が変わることに注意)
31
+ class Parts
32
+ include Enumerable
33
+ include Layout
34
+ extend Forwardable
35
+
36
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
37
+
38
+ #===Partsクラスインスタンスを生成
39
+ #_size_:: パーツ全体の大きさ。Size構造体のインスタンスもしくは要素数が2の配列
40
+ def initialize(size)
41
+ @parts = {}
42
+ @parts_list = []
43
+ @visible = true
44
+
45
+ init_layout
46
+ set_layout_size(size[0], size[1])
47
+ end
48
+
49
+ #===nameで示した補助パーツを返す
50
+ #_name_:: 補助パーツに与えた名前(シンボル)
51
+ #返却値:: 自分自身
52
+ def [](name)
53
+ return @parts[name]
54
+ end
55
+
56
+ #===補助パーツvalueをnameに割り当てる
57
+ #_name_:: 補助パーツに与える名前(シンボル)
58
+ #_value_:: 補助パーツのインスタンス(スプライト、テキストボックス、アニメーション、レイアウトボックスなど)
59
+ #返却値:: 自分自身
60
+ def []=(name, value)
61
+ @parts_list.push(name)
62
+ @parts[name] = value
63
+ @parts[name].snap(self)
64
+ return self
65
+ end
66
+
67
+ #===すべての補助パーツの一覧を配列で返す
68
+ #返却値:: パーツ名の配列(登録順)
69
+ def parts
70
+ return @parts_list
71
+ end
72
+
73
+ #===指定の補助パーツを除外する
74
+ #_name_:: 除外するパーツ名(シンボル)
75
+ #返却値:: 自分自身
76
+ def remove(name)
77
+ self.delete_snap_child(@parts[name])
78
+ @parts.delete(name)
79
+ return self
80
+ end
81
+
82
+ #===メインパーツと補助パーツに対してブロックを評価する
83
+ #返却値:: 自分自身
84
+ def each
85
+ @parts_list.each{|k| yield @parts[k] }
86
+ return self
87
+ end
88
+
89
+ #===メインパーツと補助パーツのすべてのアニメーションを開始する
90
+ #返却値:: 自分自身
91
+ def start
92
+ self.each{|parts| parts.start }
93
+ return self
94
+ end
95
+
96
+ #===メインパーツと補助パーツのすべてのアニメーションを停止する
97
+ #返却値:: 自分自身
98
+ def stop
99
+ self.each{|parts| parts.stop }
100
+ return self
101
+ end
102
+
103
+ #===メインパーツと補助パーツのすべてのアニメーションを更新する
104
+ #返却値:: 自分自身
105
+ def update_animation
106
+ self.each{|parts| parts.update_animation }
107
+ end
108
+
109
+ #===メインパーツと補助パーツのすべてのアニメーションを、最初のパターンに巻き戻す
110
+ #返却値:: 自分自身
111
+ def reset
112
+ self.each{|parts| parts.reset }
113
+ return self
114
+ end
115
+
116
+ def update #:nodoc:
117
+ self.each{|parts| parts.update }
118
+ return self
119
+ end
120
+
121
+ #===スプライトに変換した画像を表示する
122
+ #すべてのパーツを貼り付けた、1枚のスプライトを返す
123
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
124
+ #返却値:: 描画したスプライト
125
+ def to_sprite
126
+ rect = self.broad_rect
127
+ sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
128
+ Drawing.fill(sprite, [0,0,0])
129
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
130
+ self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
131
+ yield sprite if block_given?
132
+ return sprite
133
+ end
134
+
135
+ #===SpriteUnit構造体を生成する
136
+ #いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
137
+ #返却値:: 生成したSpriteUnit構造体
138
+ def to_unit
139
+ return self.to_sprite.to_unit
140
+ end
141
+
142
+ #===現在の画面の最大の大きさを矩形で取得する
143
+ #各パーツの位置により、取得できる矩形の大きさが変わる
144
+ #但し、パーツ未登録の時は、インスタンス生成時の大きさから矩形を生成する
145
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
146
+ def broad_rect
147
+ rect = self.rect.to_a
148
+ return self.rect if @parts_list.length == 0
149
+ rect_list = rect.zip(*(self.map{|parts| parts.broad_rect.to_a}))
150
+ # width -> right
151
+ rect_list[2] = rect_list[2].zip(rect_list[0]).map{|xw| xw[0] + xw[1]}
152
+ # height -> bottom
153
+ rect_list[3] = rect_list[3].zip(rect_list[1]).map{|xw| xw[0] + xw[1]}
154
+ x, y = rect_list[0].min, rect_list[1].min
155
+ return Rect.new(x, y, rect_list[2].max - x, rect_list[3].max - y)
156
+ end
157
+
158
+ #===パーツに登録しているインスタンスを解放する
159
+ def dispose
160
+ @parts_list.clear
161
+ @parts_list = nil
162
+ @parts.clear
163
+ @parts = nil
164
+ end
165
+
166
+ #===パーツを画面に描画する
167
+ #各パーツの描画範囲は、それぞれのSpriteUnitの(ox,oy)を起点にする。
168
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、各パーツを貼り付ける。
169
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
170
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
171
+ #ブロックの引数は、|パーツのSpriteUnit|となる。
172
+ #デフォルトでは、描画順は登録順となる。順番を変更したいときは、renderメソッドをオーバーライドする必要がある
173
+ #visibleメソッドの値がfalseのときは描画されない。
174
+ def render
175
+ end
176
+
177
+ #===パーツを画面に描画する
178
+ #各パーツの描画範囲は、それぞれのSpriteUnitの(ox,oy)を起点にする。
179
+ #転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
180
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
181
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
182
+ #ブロックの引数は、|パーツのSpriteUnit|となる。
183
+ #デフォルトでは、描画順は登録順となる。順番を変更したいときは、render_toメソッドをオーバーライドする必要がある
184
+ #visibleメソッドの値がfalseのときは描画されない。
185
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
186
+ def render_to(dst)
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,166 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
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
+ #==プレーン(画面いっぱいにタイル表示される画像)を表現するクラス
25
+ class Plane
26
+ extend Forwardable
27
+
28
+ def resize #:nodoc:
29
+ @size = Size.new(((Screen.w + @sprite.ow - 1) / @sprite.ow + 2),
30
+ ((Screen.h + @sprite.oh - 1) / @sprite.oh + 2))
31
+ end
32
+
33
+ #===インスタンスの作成
34
+ #パラメータは、Sprite.newのパラメータと同じ。但し、追加のパラメータがある。
35
+ #
36
+ #:sprite => (インスタンス) : 表示対象のスプライト(アニメーション)のインスタンス
37
+ #
38
+ #_param_:: プレーンの情報(:sprite(=>Sprite・SpriteAnimationクラスのインスタンス))
39
+ #返却値:: 生成したインスタンス
40
+ def initialize(param)
41
+ if param.has_key?(:sprite)
42
+ @sprite = param[:sprite]
43
+ else
44
+ @sprite = Sprite.new(param)
45
+ end
46
+ resize
47
+ @pos = Point.new(0, 0)
48
+ @visible = true
49
+ end
50
+
51
+ #===プレーン画像左上の x 座標の値を取得する
52
+ #元画像の左上の位置がどこにあるのかを示す
53
+ #返却値:: x 座標の値
54
+ def x
55
+ return @pos.x
56
+ end
57
+
58
+ #===プレーン画像左上の y 座標の値を取得する
59
+ #元画像の左上の位置がどこにあるのかを示す
60
+ #返却値:: y 座標の値
61
+ def y
62
+ return @pos.y
63
+ end
64
+
65
+ #===プレーンの表示位置を移動させる
66
+ #画像スクロールと同じ効果を得る
67
+ #_dx_:: 移動量(x 座標)
68
+ #_dy_:: 移動量(y 座標)
69
+ #返却値:: 自分自身を返す
70
+ def move(dx, dy)
71
+ @pos.move(dx, dy)
72
+ @pos.x %= @sprite.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
73
+ @pos.y %= @sprite.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
74
+ return self
75
+ end
76
+
77
+ #===プレーンの表示位置を移動させる(移動位置指定)
78
+ #画像スクロールと同じ効果を得る
79
+ #_x_:: 移動先の位置(x 座標)
80
+ #_y_:: 移動先の位置(y 座標)
81
+ #返却値:: 自分自身を返す
82
+ def move_to(x, y)
83
+ @pos.move_to(x, y)
84
+ @pos.x %= @screen.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
85
+ @pos.y %= @screen.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
86
+ return self
87
+ end
88
+
89
+ #===画像の表示矩形を取得する
90
+ #Planeの大きさを矩形で取得する。値は、Screen.rectメソッドの値と同じ。
91
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
92
+ def rect
93
+ return Screen.rect
94
+ end
95
+
96
+ #===現在の画面の最大の大きさを矩形で取得する
97
+ #但し、Planeの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
98
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
99
+ def broad_rect
100
+ return self.rect
101
+ end
102
+
103
+ #===プレーンのデータを解放する
104
+ def dispose
105
+ @sprite.dispose
106
+ end
107
+
108
+ #===画面に描画を指示する
109
+ #現在表示できるプレーンを、現在の状態で描画するよう指示する
110
+ #--
111
+ #(但し、実際に描画されるのはScreen.renderメソッドが呼び出された時)
112
+ #++
113
+ #返却値:: 自分自身を返す
114
+ def render
115
+ @size.h.times{|y|
116
+ @size.w.times{|x|
117
+ u = @sprite.to_unit
118
+ u.move_to(x * @sprite.ow + @pos.x, y * @sprite.oh + @pos.y)
119
+ Screen.render_screen(u) if u.x >= 0 && u.y >= 0 && u.x + u.ow <= Screen.bitmap.w && u.y + u.oh <= Screen.bitmap.h
120
+ }
121
+ }
122
+ return self
123
+ end
124
+
125
+ #===現在表示されているプレーンをSpriteクラスのインスタンスとして取得
126
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
127
+ #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
128
+ def to_sprite
129
+ sprite = Sprite.new(:size=>self.rect.to_a[2..3], :type=>:ac)
130
+ Drawing.fill(sprite, [0,0,0])
131
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
132
+ self.render_to(sprite)
133
+ yield sprite if block_given?
134
+ return sprite
135
+ end
136
+
137
+ #===SpriteUnit構造体を生成する
138
+ #いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
139
+ #返却値:: 生成したSpriteUnit構造体
140
+ def to_unit
141
+ return self.to_sprite.to_unit
142
+ end
143
+
144
+ def Plane::resize #:nodoc:
145
+ @@planes.each{|p| p.resize }
146
+ return nil
147
+ end
148
+
149
+ #===プレーンを画面に描画する
150
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点にする。
151
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
152
+ #visibleメソッドの値がfalseのときは描画されない。
153
+ def render
154
+ end
155
+
156
+ #===プレーンを画像に描画する
157
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点にする。
158
+ #転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
159
+ #visibleメソッドの値がfalseのときは描画されない。
160
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
161
+ def render_to(dst)
162
+ end
163
+
164
+ def_delegators(:sprite)
165
+ end
166
+ end
@@ -0,0 +1,325 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
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 'singleton'
24
+
25
+ module Miyako
26
+ #プログラムで使用する色深度を示す。デフォルトは現在システムが使用している色深度
27
+ $miyako_bpp ||= SDL.video_info.bpp
28
+ #色深度が32ビット以外の時はエラーを返す
29
+ raise MiyakoError, "Unsupported Color bits! : #{$miyako_bpp}" unless [32].include?($miyako_bpp)
30
+
31
+ #==画面管理モジュール
32
+ module Screen
33
+ #デフォルトの画面解像度(幅)
34
+ DefaultWidth = 640
35
+ #デフォルトの画面解像度(高さ)
36
+ DefaultHeight = 480
37
+ #Miyakoで使用する色深度
38
+ BPP = $miyako_bpp
39
+ #fpsの最大値(1000fps)
40
+ FpsMax = 1000
41
+ #画面モードの数(ウインドウモード、フルスクリーンモード)
42
+ WINMODES = 2
43
+ #ウインドウモードを示す値
44
+ WINDOW_MODE = 0
45
+ #フルスクリーンモードを示す値
46
+ FULLSCREEN_MODE = 1
47
+
48
+ #ウインドウモード・フルスクリーンモードを切り替える際のフラグを示す配列
49
+ ScreenFlag = $miyako_use_opengl ? [SDL::OPENGL, SDL::OPENGL | SDL::FULLSCREEN] : [SDL::HWSURFACE | SDL::DOUBLEBUF | SDL::ANYFORMAT, SDL::ANYFORMAT | SDL::FULLSCREEN]
50
+
51
+ if $miyako_use_opengl
52
+ SDL::GL.set_attr(SDL::GL::RED_SIZE, 8)
53
+ SDL::GL.set_attr(SDL::GL::GREEN_SIZE, 8)
54
+ SDL::GL.set_attr(SDL::GL::BLUE_SIZE, 8)
55
+ SDL::GL.set_attr(SDL::GL::ALPHA_SIZE, 8)
56
+ SDL::GL.set_attr(SDL::GL::DEPTH_SIZE, 32)
57
+ SDL::GL.set_attr(SDL::GL::STENCIL_SIZE, 32)
58
+ SDL::GL.set_attr(SDL::GL::DOUBLEBUFFER, 1)
59
+ end
60
+
61
+ def Screen::get_fps_count
62
+ return @@fps == 0 ? 0 : FpsMax / @@fps
63
+ end
64
+
65
+ @@fps = 0 # fps=0 : no-limit
66
+ @@fpsView = false
67
+ @@fpscnt = Screen::get_fps_count
68
+ @@interval = 0
69
+ @@min_interval = 3
70
+ @@min_interval_r = @@min_interval / 1000
71
+ @@t = 0
72
+ @@freezing = false
73
+ @@mode = WINDOW_MODE
74
+ @@unit = SpriteUnitFactory.create
75
+
76
+ @@size = Size.new(DefaultWidth, DefaultHeight)
77
+ @@in_the_scene = false
78
+
79
+ @@screen = nil
80
+ @@viewport = nil
81
+
82
+ @@pre_render_array = []
83
+ @@auto_render_array = []
84
+
85
+ #===画面の状態(ウインドウモードとフルスクリーンモード)を設定する
86
+ #_v_:: ウィンドウモードのときは、Screen::WINDOW_MODE、 フルスクリーンモードのときはScreen::FULLSCREEN_MODE
87
+ def Screen::set_mode(v)
88
+ if v.to_i == WINDOW_MODE || v.to_i == FULLSCREEN_MODE
89
+ @@mode = v.to_i
90
+ Screen::check_mode_error
91
+ end
92
+ end
93
+
94
+ #=== 事前描画インスタンス配列を取得する
95
+ #Screenモジュールに属している事前レンダー(プリレンダー)配列にアクセス可能
96
+ #この配列に取り込んだインスタンスは、配列インデックスの順に描画される
97
+ #また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため)
98
+ #但し、配列の要素が配列のときは、再帰的に描画が可能
99
+ #描画は、Screen.pre_renderメソッドの明示的呼び出しで実行される
100
+ #返却値:: 自動描画配列
101
+ def Screen::pre_render_array
102
+ @@pre_render_array
103
+ end
104
+
105
+ #=== 自動描画インスタンス配列を取得する
106
+ #Screenモジュールに属しているオートレンダー(自動描画)配列にアクセス可能
107
+ #この配列に取り込んだインスタンスは、配列インデックスの順に描画される
108
+ #また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため)
109
+ #但し、配列の要素が配列のときは、再帰的に描画が可能
110
+ #返却値:: 自動描画配列
111
+ def Screen::auto_render_array
112
+ @@auto_render_array
113
+ end
114
+
115
+ #===ウインドウモードとフルスクリーンモードを切り替える
116
+ def Screen::toggle_mode
117
+ @@mode = (@@mode + 1) % WINMODES
118
+ Screen::check_mode_error
119
+ end
120
+
121
+ def Screen::fps # :nodoc:
122
+ return @@fps
123
+ end
124
+
125
+ def Screen::fps=(val) # :nodoc:
126
+ @@fps = val
127
+ @@fpscnt = @@fps == 0 ? 0 : Screen::get_fps_count
128
+ end
129
+
130
+ def Screen::fps_view # :nodoc:
131
+ return @@fpsView
132
+ end
133
+
134
+ def Screen::fps_view=(val) # :nodoc:
135
+ @@fpsView = val
136
+ end
137
+
138
+ #===画面を管理するインスタンスを取得する
139
+ #返却値:: 画面インスタンス(SDL::Screenクラスのインスタンス)
140
+ def Screen::bitmap
141
+ return @@screen
142
+ end
143
+
144
+ #===画面の幅を取得する
145
+ #返却値:: 画面の幅(ピクセル)
146
+ def Screen::w
147
+ return @@size[0]
148
+ end
149
+
150
+ #===画面の高さを取得する
151
+ #返却値:: 画面の高さ(ピクセル)
152
+ def Screen::h
153
+ return @@size[1]
154
+ end
155
+
156
+ #===画面を管理するSpriteUnitを取得する
157
+ #得られるインスタンスは複写していないので、インスタンスの値を調整するには、dupメソッドで複製する必要がある
158
+ #返却値:: SpriteUnitインスタンス
159
+ def Screen::to_unit
160
+ return @@unit
161
+ end
162
+
163
+ #===画像の回転・拡大・縮小の中心座標を取得する
164
+ #x方向の中心座標を取得する
165
+ #返却値:: 中心座標。
166
+ def Screen::center_x
167
+ return @@unit.cx
168
+ end
169
+
170
+ #===画像の回転・拡大・縮小の中心座標を取得する
171
+ #x方向の中心座標を取得する
172
+ #_pos_:: 中心座標
173
+ def Screen::center_x=(pos)
174
+ @@unit.cx = pos
175
+ end
176
+
177
+ #===画像の回転・拡大・縮小の中心座標を取得する
178
+ #y方向の中心座標を取得する
179
+ #返却値:: 中心座標。
180
+ def Screen::center_y
181
+ return @@unit.cy
182
+ end
183
+
184
+ #===画像の回転・拡大・縮小の中心座標を取得する
185
+ #y方向の中心座標を取得する
186
+ #_pos_:: 中心座標
187
+ def Screen::center_y=(pos)
188
+ @@unit.cy = pos
189
+ end
190
+
191
+ #===現在の画面の大きさを矩形で取得する
192
+ #返却値:: 画像の大きさ(Rect構造体のインスタンス)
193
+ def Screen::rect
194
+ return Rect.new(*([0, 0]+@@size.to_a))
195
+ end
196
+
197
+ #===現在の画面の最大の大きさを矩形で取得する
198
+ #但し、Screenの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
199
+ #返却値:: 画像の大きさ(Rect構造体のインスタンス)
200
+ def Screen::broad_rect
201
+ return Screen.rect
202
+ end
203
+
204
+ #===現在のビューポート(表示区画)を取得する
205
+ #ビューポートの設定は、Viewport#renderで行う
206
+ #返却値:: ビューポート(Viewportクラスのインスタンス)
207
+ def Screen::viewport
208
+ return @@viewport
209
+ end
210
+
211
+ #===現在の画面の大きさを取得する
212
+ #返却値:: 画像の大きさ(Size構造体のインスタンス)
213
+ def Screen::size
214
+ return @@size.dup
215
+ end
216
+
217
+ #===Segment構造体を生成する
218
+ # 生成される線分は、x方向が[0,w-1]、y方向が[0,h-1]となる
219
+ #返却値:: 生成したSegment構造体インスタンス
220
+ def Screen::segment
221
+ return Segment.new([0, @@size[0]-1], [0, @@size[1]-1])
222
+ end
223
+
224
+ #===画面のサーフェスを生成する
225
+ #グローバル変数$miyako_open_screen==falseの時に有効
226
+ #画面サーフェスを生成し、表示させる
227
+ #require 'Miyako/miyako'を記述する前に、"$miyako_open_screen=false"と記述すると
228
+ def Screen::open
229
+ @@screen = SDL::Screen.open(*(@@size.to_a << BPP << ScreenFlag[@@mode]))
230
+ SpriteUnitFactory.apply(@@unit, {:bitmap=>@@screen, :ow=>@@screen.w, :oh=>@@screen.h})
231
+ @@viewport = Viewport.new(0, 0, @@screen.w, @@screen.h)
232
+ end
233
+
234
+ def Screen::set_screen #:nodoc:
235
+ return false unless SDL.checkVideoMode(*(@@size.to_a << BPP << ScreenFlag[@@mode]))
236
+ self.open
237
+ return true
238
+ end
239
+
240
+ #===画面の大きさを変更する
241
+ #単位はピクセル単位
242
+ #_w_:: 画面の幅
243
+ #_h_:: 画面の高さ
244
+ #返却値:: 変更に成功したときは trueを返す
245
+ def Screen::set_size(w, h)
246
+ return unless @@screen
247
+ return false unless SDL.checkVideoMode(w, h, BPP, ScreenFlag[@@mode])
248
+ @@size = Size.new(w, h)
249
+ self.open
250
+ return true
251
+ end
252
+
253
+ def Screen::check_mode_error #:nodoc:
254
+ unless Screen::set_screen
255
+ print "Sorry, this system not supported display...\n";
256
+ exit(1)
257
+ end
258
+ end
259
+
260
+ Screen::check_mode_error
261
+
262
+ #===現在表示されている画面を画像(Spriteクラスのインスタンス)として取り込む
263
+ #_param_:: Spriteインスタンスを生成するときに渡すパラメータ(但し、:sizeと:typeのみ使用する)
264
+ #_rect_:: 取り込む画像の矩形(4要素の配列もしくはRect構造体のインスタンス)
265
+ #デフォルトは画面の大きさ
266
+ #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
267
+ def Screen::capture(param, rect = ([0, 0] + @@size.to_a))
268
+ param = param.dup
269
+ param[:size] = Size.new(*(rect[2..3]))
270
+ dst = Sprite.new(param)
271
+ SDL.blit_surface(*([@@screen] + rect.to_a << dst.bitmap << 0 << 0))
272
+ return dst
273
+ end
274
+
275
+ #===現在表示されている画面を複製し、Spriteクラスのインスタンスとして取得
276
+ #Screen.captureとの違いは、パラメータ・サイズは不変(画面の大きさで複製)で取り扱う。
277
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
278
+ #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
279
+ def Screen::to_sprite
280
+ dst = Sprite.new(:size => Size.new(*(rect[2..3])), :type => :ac)
281
+ Bitmap.screen_to_ac(Screen, dst)
282
+ yield dst if block_given?
283
+ return dst
284
+ end
285
+
286
+ #===画像を消去する
287
+ #画像を黒色([0,0,0,0])で塗りつぶす
288
+ def Screen::clear
289
+ return unless @@screen
290
+ @@screen.fillRect(0, 0, @@screen.w, @@screen.h, [0, 0, 0, 0])
291
+ end
292
+
293
+ #===プリレンダー配列に登録されたインスタンスを画面に描画する
294
+ #Screen.pre_render_arrayに登録したインスタンスを描画する
295
+ def Screen::pre_render
296
+ end
297
+
298
+ #===画面を更新する
299
+ #描画した画面を、実際にミニ見える形に反映させる
300
+ #呼び出し時に画面の消去は行われないため、消去が必要なときは明示的にScreen.clearメソッドを呼び出す必要がある
301
+ #また、自動描画配列にインスタンスを入れているときは、このメソッドを呼び出した時に描画されるため
302
+ #(つまり、表示の最後に描画される)、描画の順番に注意して配列を利用すること
303
+ def Screen::render
304
+ Shape.text(
305
+ {
306
+ :text => (FpsMax/(@@interval == 0 ? 1 : @@interval)).to_s() + " fps",
307
+ :font => Font.sans_serif
308
+ }
309
+ ).render if @@fpsView
310
+ Screen::update_tick
311
+ @@screen.flip
312
+ end
313
+
314
+ #===インスタンスの内容を画面に描画する
315
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
316
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
317
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
318
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
319
+ #ブロックの引数は、|インスタンスのSpriteUnit,画面のSpriteUnit|となる。
320
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
321
+ #返却値:: 自分自身を返す
322
+ def Screen::render_screen(src)
323
+ end
324
+ end
325
+ end