cyross-ruby-miyako 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. data/README +977 -0
  2. data/Rakefile +7 -0
  3. data/img/cursor.png +0 -0
  4. data/img/cursors.png +0 -0
  5. data/img/dice.png +0 -0
  6. data/img/wait_cursor.png +0 -0
  7. data/img/win_base.png +0 -0
  8. data/img/window.png +0 -0
  9. data/install_miyako.rb +75 -0
  10. data/lib/Miyako/API/audio.rb +198 -0
  11. data/lib/Miyako/API/basic_data.rb +431 -0
  12. data/lib/Miyako/API/bitmap.rb +35 -0
  13. data/lib/Miyako/API/choices.rb +308 -0
  14. data/lib/Miyako/API/collision.rb +444 -0
  15. data/lib/Miyako/API/diagram.rb +573 -0
  16. data/lib/Miyako/API/drawing.rb +110 -0
  17. data/lib/Miyako/API/fixedmap.rb +315 -0
  18. data/lib/Miyako/API/font.rb +384 -0
  19. data/lib/Miyako/API/input.rb +440 -0
  20. data/lib/Miyako/API/layout.rb +451 -0
  21. data/lib/Miyako/API/map.rb +403 -0
  22. data/lib/Miyako/API/map_event.rb +198 -0
  23. data/lib/Miyako/API/modules.rb +109 -0
  24. data/lib/Miyako/API/movie.rb +151 -0
  25. data/lib/Miyako/API/parts.rb +154 -0
  26. data/lib/Miyako/API/plane.rb +131 -0
  27. data/lib/Miyako/API/screen.rb +257 -0
  28. data/lib/Miyako/API/shape.rb +362 -0
  29. data/lib/Miyako/API/sprite.rb +338 -0
  30. data/lib/Miyako/API/sprite_animation.rb +461 -0
  31. data/lib/Miyako/API/spriteunit.rb +113 -0
  32. data/lib/Miyako/API/story.rb +224 -0
  33. data/lib/Miyako/API/textbox.rb +496 -0
  34. data/lib/Miyako/API/viewport.rb +435 -0
  35. data/lib/Miyako/API/yuki.rb +779 -0
  36. data/lib/Miyako/EXT/miyako_cairo.rb +60 -0
  37. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  38. data/lib/Miyako/EXT/slides.rb +136 -0
  39. data/lib/Miyako/miyako.rb +172 -0
  40. data/miyako.png +0 -0
  41. data/miyako_banner.png +0 -0
  42. data/miyako_no_katana/extconf.rb +34 -0
  43. data/miyako_no_katana/miyako_no_katana.c +3301 -0
  44. data/sample/Animation1/m1ku.rb +89 -0
  45. data/sample/Animation1/m1ku_arm_0.png +0 -0
  46. data/sample/Animation1/m1ku_arm_1.png +0 -0
  47. data/sample/Animation1/m1ku_arm_2.png +0 -0
  48. data/sample/Animation1/m1ku_arm_3.png +0 -0
  49. data/sample/Animation1/m1ku_back.jpg +0 -0
  50. data/sample/Animation1/m1ku_body.png +0 -0
  51. data/sample/Animation1/m1ku_eye_0.png +0 -0
  52. data/sample/Animation1/m1ku_eye_1.png +0 -0
  53. data/sample/Animation1/m1ku_eye_2.png +0 -0
  54. data/sample/Animation1/m1ku_eye_3.png +0 -0
  55. data/sample/Animation1/m1ku_hair_front.png +0 -0
  56. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  57. data/sample/Animation1/readme.txt +72 -0
  58. data/sample/Animation2/lex.rb +95 -0
  59. data/sample/Animation2/lex_back.png +0 -0
  60. data/sample/Animation2/lex_body.png +0 -0
  61. data/sample/Animation2/lex_roadroller.png +0 -0
  62. data/sample/Animation2/lex_wheel_0.png +0 -0
  63. data/sample/Animation2/lex_wheel_1.png +0 -0
  64. data/sample/Animation2/lex_wheel_2.png +0 -0
  65. data/sample/Animation2/readme.txt +72 -0
  66. data/sample/Animation2/song_title.png +0 -0
  67. data/sample/Diagram_sample/back.png +0 -0
  68. data/sample/Diagram_sample/chr01.png +0 -0
  69. data/sample/Diagram_sample/chr02.png +0 -0
  70. data/sample/Diagram_sample/cursor.png +0 -0
  71. data/sample/Diagram_sample/diagram_sample_yuki2.rb +283 -0
  72. data/sample/Diagram_sample/readme.txt +87 -0
  73. data/sample/Diagram_sample/wait_cursor.png +0 -0
  74. data/sample/Room3/blue.rb +250 -0
  75. data/sample/Room3/ending.rb +175 -0
  76. data/sample/Room3/green.rb +185 -0
  77. data/sample/Room3/image/akamatsu.png +0 -0
  78. data/sample/Room3/image/aoyama.png +0 -0
  79. data/sample/Room3/image/congra.png +0 -0
  80. data/sample/Room3/image/congratulation.png +0 -0
  81. data/sample/Room3/image/congratulation_bg.png +0 -0
  82. data/sample/Room3/image/cursor.png +0 -0
  83. data/sample/Room3/image/midori.png +0 -0
  84. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  85. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  86. data/sample/Room3/image/room_blue.png +0 -0
  87. data/sample/Room3/image/room_green.png +0 -0
  88. data/sample/Room3/image/room_red.png +0 -0
  89. data/sample/Room3/image/start.png +0 -0
  90. data/sample/Room3/image/three_doors.png +0 -0
  91. data/sample/Room3/image/wait_cursor.png +0 -0
  92. data/sample/Room3/main.rb +102 -0
  93. data/sample/Room3/main_component.rb +58 -0
  94. data/sample/Room3/readme.txt +76 -0
  95. data/sample/Room3/red.rb +200 -0
  96. data/sample/Room3/room3.rb +26 -0
  97. data/sample/Room3/title.rb +171 -0
  98. data/sample/fixed_map_test/cursor.png +0 -0
  99. data/sample/fixed_map_test/fixed_map_sample.rb +149 -0
  100. data/sample/fixed_map_test/map.csv +19 -0
  101. data/sample/fixed_map_test/map_01.png +0 -0
  102. data/sample/fixed_map_test/map_sample.rb +121 -0
  103. data/sample/fixed_map_test/mapchip.csv +23 -0
  104. data/sample/fixed_map_test/monster.png +0 -0
  105. data/sample/fixed_map_test/readme.txt +72 -0
  106. data/sample/map_test/chara.rb +50 -0
  107. data/sample/map_test/chr1.png +0 -0
  108. data/sample/map_test/cursor.png +0 -0
  109. data/sample/map_test/main_parts.rb +48 -0
  110. data/sample/map_test/main_scene.rb +137 -0
  111. data/sample/map_test/map.png +0 -0
  112. data/sample/map_test/map2.png +0 -0
  113. data/sample/map_test/map_layer.csv +127 -0
  114. data/sample/map_test/map_manager.rb +92 -0
  115. data/sample/map_test/map_test.rb +23 -0
  116. data/sample/map_test/mapchip.csv +21 -0
  117. data/sample/map_test/oasis.rb +65 -0
  118. data/sample/map_test/readme.txt +87 -0
  119. data/sample/map_test/route.rb +144 -0
  120. data/sample/map_test/sea.png +0 -0
  121. data/sample/map_test/town.rb +68 -0
  122. data/sample/map_test/wait_cursor.png +0 -0
  123. data/sample/map_test/window.png +0 -0
  124. data/win/miyako_no_katana.so +0 -0
  125. metadata +194 -0
@@ -0,0 +1,151 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
5
+ Copyright (C) 2007-2008 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ #==動画管理クラス
25
+ #動画ファイル(MPEGファイル限定)をロード・再生するクラス
26
+ class Movie
27
+ include SpriteBase
28
+ include Layout
29
+ extend Forwardable
30
+
31
+ @@movie_list = []
32
+
33
+ #===動画のインスタンスを作成する
34
+ #(但し、現在の所、loopパラメータは利用できない)
35
+ #_fname_:: 動画ファイル名
36
+ #_loops_:: ループ再生の可否。ループ再生させるときは true を渡す
37
+ #返却値:: 生成したインスタンス
38
+ def initialize(fname, loops = true)
39
+ init_layout
40
+
41
+ @x = 0
42
+ @y = 0
43
+
44
+ @movie = SDL::MPEG.load(fname)
45
+ @size = Size.new(@movie.info.width, @movie.info.height)
46
+ set_layout_size(*(@size.to_a))
47
+
48
+ @sprite = Sprite.new({:size=>@size , :type=>:movie})
49
+ @sprite.snap(self)
50
+
51
+ @movie.enable_audio(true) unless $not_use_audio
52
+ @movie.enable_video(true)
53
+ @movie.set_loop(loops)
54
+
55
+ @movie.set_display(@sprite.bitmap)
56
+ @movie.scale(1.0)
57
+ @@movie_list.push(self)
58
+ end
59
+
60
+ def update_layout_position #:nodoc:
61
+ @x = @layout.pos[0]
62
+ @y = @layout.pos[1]
63
+ end
64
+
65
+ #===動画再生時の音量を指定する
66
+ #_v_:: 指定する音量。(0~100までの整数)
67
+ def set_volume(v)
68
+ return if v < 0 || v > 100 || $not_use_audio
69
+ @movie.set_volume(v)
70
+ end
71
+
72
+ #===動画再生中かを返す
73
+ #返却値:: 再生中のときは true を返す
74
+ def playing?
75
+ return @movie.status == SDL::MPEG::PLAYING
76
+ end
77
+
78
+ #===動画データを解放する
79
+ def dispose
80
+ @movie.stop if playing?
81
+ @sprite.dispose
82
+ layout_dispose
83
+ @@movie_list.delete(self)
84
+ @movie = nil
85
+ end
86
+
87
+ #===再生領域の範囲を設定する
88
+ #元動画のうち、表示させたい箇所を Rect クラスのインスタンスか4要素の配列で指定する
89
+ #_rect_:: 再生領域。
90
+ def region(rect)
91
+ @movie.set_display_region(*(rect.to_a))
92
+ end
93
+
94
+ #===動画の再生を一時停止する
95
+ #再生を裁可するには、 Miyako::Movie#rewind メソッドを呼び出す必要がある
96
+ #_pause_by_input_:: ダミー
97
+ def pause(pause_by_input)
98
+ @movie.pause
99
+ end
100
+
101
+ #===動画を再生させる
102
+ #動画の先頭から再生する。ブロックを渡したときは、ブロックを評価している間動画を再生する
103
+ #_vol_:: 動画再生時の音量。0~100の整数
104
+ def play(vol = nil)
105
+ set_volume(vol) if vol
106
+ @movie.play
107
+ if block_given?
108
+ yield self
109
+ @movie.stop
110
+ end
111
+ end
112
+
113
+ #===動画再生を停止する
114
+ def stop
115
+ @movie.stop
116
+ end
117
+
118
+ #===再生中の動画の再生位置を返す
119
+ #位置は秒単位で返す
120
+ #返却値:: 再生位置
121
+ def current
122
+ return @movie.info.current_time
123
+ end
124
+
125
+ #===動画の長さを返す
126
+ #長さは、秒単位で返す。
127
+ #返却値:: 動画の長さ
128
+ def length
129
+ return @movie.info.total_time
130
+ end
131
+
132
+ #===画面に描画を指示する
133
+ #現在表示できる選択肢を、現在の状態で描画するよう指示する
134
+ #--
135
+ #(但し、実際に描画されるのはScreen.renderメソッドが呼び出された時)
136
+ #++
137
+ #返却値:: 自分自身を返す
138
+ def render
139
+ @sprite.render
140
+ return self
141
+ end
142
+
143
+ #===一時停止中の動画の再生を再開する
144
+ #Miyako::Movie#pause メソッドを実行した後に呼び出す
145
+ def_delegators(:@movie, :rewind)
146
+ #===指定時間ぶん、スキップ再生を行う
147
+ #size:: スキップ長(秒単位)
148
+ def_delegators(:@movie, :skip)
149
+ def_delegators(:@sprite, :rect, :broad_rect, :ox, :oy)
150
+ end
151
+ end
@@ -0,0 +1,154 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
5
+ Copyright (C) 2007-2008 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ #==パーツ構成クラス
25
+ #複数のスプライト・アニメーションをまとめて一つの部品として構成できるクラス
26
+ #
27
+ #最初に、基準となる「レイアウト空間(LayoutSpaceクラスのインスタンス)」を登録し、その上にパーツを加える
28
+ #
29
+ #すべてのパーツは、すべてレイアウト空間にスナップされる
30
+ #(登録したパーツのレイアウト情報が変わることに注意)
31
+ class Parts
32
+ include Enumerable
33
+ include Layout
34
+ extend Forwardable
35
+
36
+ #===Partsクラスインスタンスを生成
37
+ #_size_:: パーツ全体の大きさ。Size構造体のインスタンスもしくは要素数が2の配列
38
+ def initialize(size)
39
+ init_layout
40
+ set_layout_size(size[0], size[1])
41
+
42
+ @parts = {}
43
+ @parts_list = []
44
+ end
45
+
46
+ #===nameで示した補助パーツを返す
47
+ #_name_:: 補助パーツに与えた名前(シンボル)
48
+ #返却値:: 自分自身
49
+ def [](name)
50
+ return @parts[name]
51
+ end
52
+
53
+ #===補助パーツvalueをnameに割り当てる
54
+ #_name_:: 補助パーツに与える名前(シンボル)
55
+ #_value_:: 補助パーツのインスタンス(スプライト、テキストボックス、アニメーション、レイアウトボックスなど)
56
+ #返却値:: 自分自身
57
+ def []=(name, value)
58
+ @parts_list.push(name)
59
+ @parts[name] = value
60
+ @parts[name].snap(self)
61
+ return self
62
+ end
63
+
64
+ #===すべての補助パーツの一覧を配列で返す
65
+ #返却値:: パーツ名の配列(登録順)
66
+ def parts
67
+ return @parts_list
68
+ end
69
+
70
+ #===指定の補助パーツを除外する
71
+ #_name_:: 除外するパーツ名(シンボル)
72
+ #返却値:: 自分自身
73
+ def remove(name)
74
+ self.delete_snap_child(@parts[name])
75
+ @parts.delete(name)
76
+ return self
77
+ end
78
+
79
+ #===メインパーツと補助パーツに対してブロックを評価する
80
+ #返却値:: 自分自身
81
+ def each
82
+ @parts_list.each{|k| yield @parts[k] }
83
+ return self
84
+ end
85
+
86
+ #===メインパーツと補助パーツのすべてのアニメーションを開始する
87
+ #返却値:: 自分自身
88
+ def start
89
+ self.each{|parts| parts.start }
90
+ return self
91
+ end
92
+
93
+ #===メインパーツと補助パーツのすべてのアニメーションを停止する
94
+ #返却値:: 自分自身
95
+ def stop
96
+ self.each{|parts| parts.stop }
97
+ return self
98
+ end
99
+
100
+ #===メインパーツと補助パーツのすべてのアニメーションを更新する(自動実行)
101
+ #返却値:: 自分自身
102
+ def update_animation
103
+ self.each{|parts| parts.update_animation }
104
+ end
105
+
106
+ #===メインパーツと補助パーツのすべてのアニメーションを、最初のパターンに巻き戻す
107
+ #返却値:: 自分自身
108
+ def reset
109
+ self.each{|parts| parts.reset }
110
+ return self
111
+ end
112
+
113
+ #===メインパーツと補助パーツのすべてのアニメーションを更新する(自動実行)
114
+ #返却値:: 自分自身
115
+ def update
116
+ self.update_animation
117
+ return self
118
+ end
119
+
120
+ #===スプライトに変換した画像を表示する
121
+ #すべてのパーツを貼り付けた、1枚のスプライトを返す
122
+ #返却値:: 描画したスプライト
123
+ def to_sprite
124
+ rect = self.broad_rect
125
+ sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
126
+ self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
127
+ return sprite
128
+ end
129
+
130
+ #===現在の画面の最大の大きさを矩形で取得する
131
+ #各パーツの位置により、取得できる矩形の大きさが変わる
132
+ #但し、パーツ未登録の時は、インスタンス生成時の大きさから矩形を生成する
133
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
134
+ def broad_rect
135
+ rect = self.rect.to_a
136
+ return self.rect if @parts_list.length == 0
137
+ rect_list = rect.zip(*(self.map{|parts| parts.broad_rect.to_a}))
138
+ # width -> right
139
+ rect_list[2] = rect_list[2].zip(rect_list[0]).map{|xw| xw[0] + xw[1]}
140
+ # height -> bottom
141
+ rect_list[3] = rect_list[3].zip(rect_list[1]).map{|xw| xw[0] + xw[1]}
142
+ x, y = rect_list[0].min, rect_list[1].min
143
+ return Rect.new(x, y, rect_list[2].max - x, rect_list[3].max - y)
144
+ end
145
+
146
+ #===パーツに登録しているインスタンスを解放する
147
+ def dispose
148
+ @parts_list.clear
149
+ @parts_list = nil
150
+ @parts.clear
151
+ @parts = nil
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,131 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
5
+ Copyright (C) 2007-2008 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ #==プレーン(画面いっぱいにタイル表示される画像)を表現するクラス
25
+ 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
+ end
49
+
50
+ #===プレーン画像左上の x 座標の値を取得する
51
+ #元画像の左上の位置がどこにあるのかを示す
52
+ #返却値:: x 座標の値
53
+ def x
54
+ return @pos.x
55
+ end
56
+
57
+ #===プレーン画像左上の y 座標の値を取得する
58
+ #元画像の左上の位置がどこにあるのかを示す
59
+ #返却値:: y 座標の値
60
+ def y
61
+ return @pos.y
62
+ end
63
+
64
+ #===プレーンの表示位置を移動させる
65
+ #画像スクロールと同じ効果を得る
66
+ #_dx_:: 移動量(x 座標)
67
+ #_dy_:: 移動量(y 座標)
68
+ #返却値:: 自分自身を返す
69
+ def move(dx, dy)
70
+ @pos.move(dx, dy)
71
+ @pos.x %= @sprite.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
72
+ @pos.y %= @sprite.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
73
+ return self
74
+ end
75
+
76
+ #===プレーンの表示位置を移動させる(移動位置指定)
77
+ #画像スクロールと同じ効果を得る
78
+ #_x_:: 移動先の位置(x 座標)
79
+ #_y_:: 移動先の位置(y 座標)
80
+ #返却値:: 自分自身を返す
81
+ def move_to(x, y)
82
+ @pos.move_to(x, y)
83
+ @pos.x %= @screen.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
84
+ @pos.y %= @screen.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
85
+ return self
86
+ end
87
+
88
+ #===画像の表示矩形を取得する
89
+ #Planeの大きさを矩形で取得する。値は、Screen.rectメソッドの値と同じ。
90
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
91
+ def rect
92
+ return Screen.rect
93
+ end
94
+
95
+ #===現在の画面の最大の大きさを矩形で取得する
96
+ #但し、Planeの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
97
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
98
+ def broad_rect
99
+ return self.rect
100
+ end
101
+
102
+ #===プレーンのデータを解放する
103
+ def dispose
104
+ @sprite.dispose
105
+ end
106
+
107
+ #===画面に描画を指示する
108
+ #現在表示できるプレーンを、現在の状態で描画するよう指示する
109
+ #--
110
+ #(但し、実際に描画されるのはScreen.renderメソッドが呼び出された時)
111
+ #++
112
+ #返却値:: 自分自身を返す
113
+ def render
114
+ @size.h.times{|y|
115
+ @size.w.times{|x|
116
+ u = @sprite.to_unit
117
+ u.move_to(x * @sprite.ow + @pos.x, y * @sprite.oh + @pos.y)
118
+ Screen.render_screen(u) if u.x >= 0 && u.y >= 0 && u.x + u.ow <= Screen.screen.w && u.y + u.oh <= Screen.screen.h
119
+ }
120
+ }
121
+ return self
122
+ end
123
+
124
+ def Plane::resize #:nodoc:
125
+ @@planes.each{|p| p.resize }
126
+ return nil
127
+ end
128
+
129
+ def_delegators(:sprite)
130
+ end
131
+ end
@@ -0,0 +1,257 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
5
+ Copyright (C) 2007-2008 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ 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 = Array.new
50
+ ScreenFlag.push(SDL::HWSURFACE | SDL::DOUBLEBUF | SDL::ANYFORMAT)
51
+ ScreenFlag.push(SDL::ANYFORMAT | SDL::FULLSCREEN)
52
+
53
+ def Screen::get_fps_count
54
+ return @@fps == 0 ? 0 : FpsMax / @@fps
55
+ end
56
+
57
+ @@fps = 0 # fps=0 : no-limit
58
+ @@fpsView = false
59
+ @@fpscnt = Screen::get_fps_count
60
+ @@interval = 0
61
+ @@min_interval = 3
62
+ @@min_interval_r = @@min_interval / 1000
63
+ @@t = 0
64
+ @@freezing = false
65
+ @@mode = WINDOW_MODE
66
+ @@unit = SpriteUnitFactory.create
67
+
68
+ @@size = Size.new(DefaultWidth, DefaultHeight)
69
+ @@in_the_scene = false
70
+
71
+ @@screen = nil
72
+ @@viewport = nil
73
+
74
+ #===画面の状態(ウインドウモードとフルスクリーンモード)を設定する
75
+ #_v_:: ウィンドウモードのときは、Screen::WINDOW_MODE、 フルスクリーンモードのときはScreen::FULLSCREEN_MODE
76
+ def Screen::set_mode(v)
77
+ if v.to_i == WINDOW_MODE || v.to_i == FULLSCREEN_MODE
78
+ @@mode = v.to_i
79
+ Screen::check_mode_error
80
+ end
81
+ end
82
+
83
+ #===ウインドウモードとフルスクリーンモードを切り替える
84
+ def Screen::toggle_mode
85
+ @@mode = (@@mode + 1) % WINMODES
86
+ Screen::check_mode_error
87
+ end
88
+
89
+ def Screen::fps # :nodoc:
90
+ return @@fps
91
+ end
92
+
93
+ def Screen::fps=(val) # :nodoc:
94
+ @@fps = val
95
+ @@fpscnt = @@fps == 0 ? 0 : Screen::get_fps_count
96
+ end
97
+
98
+ def Screen::fps_view # :nodoc:
99
+ return @@fpsView
100
+ end
101
+
102
+ def Screen::fps_view=(val) # :nodoc:
103
+ @@fpsView = val
104
+ end
105
+
106
+ #===画面を管理するインスタンスを取得する
107
+ #返却値:: 画面インスタンス(SDL::Screenクラスのインスタンス)
108
+ def Screen::screen
109
+ return @@screen
110
+ end
111
+
112
+ #===画面の幅を取得する
113
+ #返却値:: 画面の幅(ピクセル)
114
+ def Screen::w
115
+ return @@size[0]
116
+ end
117
+
118
+ #===画面の高さを取得する
119
+ #返却値:: 画面の高さ(ピクセル)
120
+ def Screen::h
121
+ return @@size[1]
122
+ end
123
+
124
+ #===画面を管理するSpriteUnitを取得する
125
+ #返却値:: SpriteUnitインスタンス
126
+ def Screen::to_unit
127
+ return @@unit.dup
128
+ end
129
+
130
+ #===画像の回転・拡大・縮小の中心座標を取得する
131
+ #x方向の中心座標を取得する
132
+ #返却値:: 中心座標。
133
+ def Screen::center_x
134
+ return @@unit.cx
135
+ end
136
+
137
+ #===画像の回転・拡大・縮小の中心座標を取得する
138
+ #x方向の中心座標を取得する
139
+ #_pos_:: 中心座標
140
+ def Screen::center_x=(pos)
141
+ @@unit.cx = pos
142
+ end
143
+
144
+ #===画像の回転・拡大・縮小の中心座標を取得する
145
+ #y方向の中心座標を取得する
146
+ #返却値:: 中心座標。
147
+ def Screen::center_y
148
+ return @@unit.cy
149
+ end
150
+
151
+ #===画像の回転・拡大・縮小の中心座標を取得する
152
+ #y方向の中心座標を取得する
153
+ #_pos_:: 中心座標
154
+ def Screen::center_y=(pos)
155
+ @@unit.cy = pos
156
+ end
157
+
158
+ #===現在の画面の大きさを矩形で取得する
159
+ #返却値:: 画像の大きさ(Rect構造体のインスタンス)
160
+ def Screen::rect
161
+ return Rect.new(*([0, 0]+@@size.to_a))
162
+ end
163
+
164
+ #===現在の画面の最大の大きさを矩形で取得する
165
+ #但し、Screenの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
166
+ #返却値:: 画像の大きさ(Rect構造体のインスタンス)
167
+ def Screen::broad_rect
168
+ return Screen.rect
169
+ end
170
+
171
+ #===現在のビューポート(表示区画)を取得する
172
+ #ビューポートの設定は、Viewport#renderで行う
173
+ #返却値:: ビューポート(Viewportクラスのインスタンス)
174
+ def Screen::viewport
175
+ return @@viewport
176
+ end
177
+
178
+ #===現在の画面の大きさを取得する
179
+ #返却値:: 画像の大きさ(Size構造体のインスタンス)
180
+ def Screen::size
181
+ return @@size.dup
182
+ end
183
+
184
+ def Screen::set_screen(f) #:nodoc:
185
+ return false unless SDL.checkVideoMode(*(@@size.to_a << BPP << f))
186
+ @@screen = SDL.setVideoMode(*(@@size.to_a << BPP << f))
187
+ SpriteUnitFactory.apply(@@unit, {:bitmap=>@@screen, :ow=>@@screen.w, :oh=>@@screen.h})
188
+ @@viewport = Viewport.new(0, 0, @@screen.w, @@screen.h)
189
+ return true
190
+ end
191
+
192
+ #===画面の大きさを変更する
193
+ #単位はピクセル単位
194
+ #_w_:: 画面の幅
195
+ #_h_:: 画面の高さ
196
+ #返却値:: 変更に成功したときは trueを返す
197
+ def Screen::set_size(w, h)
198
+ return false unless SDL.checkVideoMode(w, h, BPP, ScreenFlag[@@mode])
199
+ @@size = Size.new(w, h)
200
+ @@screen = SDL.setVideoMode(*(@@size.to_a << BPP << ScreenFlag[@@mode]))
201
+ SpriteUnitFactory.apply(@@unit, {:bitmap=>@@screen, :ow=>@@screen.w, :oh=>@@screen.h})
202
+ @@viewport = Viewport.new(0, 0, @@screen.w, @@screen.h)
203
+ return true
204
+ end
205
+
206
+ def Screen::check_mode_error #:nodoc:
207
+ unless Screen::set_screen(ScreenFlag[@@mode])
208
+ print "Sorry, this system not supported display...\n";
209
+ exit(1)
210
+ end
211
+ end
212
+
213
+ Screen::check_mode_error
214
+
215
+ #===現在表示されている画面を画像(Spriteクラスのインスタンス)として取り込む
216
+ #_param_:: Spriteインスタンスを生成するときに渡すパラメータ(但し、:sizeと:typeのみ使用する)
217
+ #_rect_:: 取り込む画像の矩形(4要素の配列もしくはRect構造体のインスタンス)
218
+ #デフォルトは画面の大きさ
219
+ #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
220
+ def Screen::capture(param, rect = ([0, 0] + @@size.to_a))
221
+ param = param.dup
222
+ param[:size] = Size.new(*(rect[2..3]))
223
+ dst = Sprite.new(param)
224
+ SDL.blit_surface(*([@@screen] + rect.to_a << dst.bitmap << 0 << 0))
225
+ return dst
226
+ end
227
+
228
+ #===現在表示されている画面を複製し、Spriteクラスのインスタンスとして取得
229
+ #Screen.captureとの違いは、パラメータ・サイズは不変(画面の大きさで複製)で取り扱う。
230
+ #
231
+ #_param_:: Spriteインスタンスを生成するときに渡すパラメータ(但し、:sizeと:typeのみ使用する)
232
+ #_rect_:: 取り込む画像の矩形(4要素の配列もしくはRect構造体のインスタンス)
233
+ #デフォルトは画面の大きさ
234
+ #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
235
+ def Screen::to_sprite
236
+ param[:size] = Size.new(*(rect[2..3]))
237
+ dst = Sprite.new(param)
238
+ Bitmap.screen_to_ac!(Screen, dst)
239
+ return dst
240
+ end
241
+
242
+ #===画像を消去する
243
+ #画像を黒色([0,0,0,0])で塗りつぶす
244
+ def Screen::clear
245
+ @@screen.fillRect(0, 0, @@screen.w, @@screen.h, [0, 0, 0, 0])
246
+ end
247
+
248
+ #===画面を更新する
249
+ #描画した画面を、実際にミニ見える形に反映させる
250
+ #呼び出し時に画面の消去は行われないため、明示的にScreen.clearメソッドを呼び出す必要がある
251
+ def Screen::render
252
+ Shape.text({:text => (FpsMax/(@@interval == 0 ? 1 : @@interval)).to_s() + " fps", :font => Font.sans_serif}).render if @@fpsView
253
+ Screen::update_tick
254
+ @@screen.flip
255
+ end
256
+ end
257
+ end