ruby-miyako 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (164) hide show
  1. data/README +1115 -0
  2. data/Rakefile +7 -0
  3. data/defines.h +144 -0
  4. data/extconf.rb +44 -0
  5. data/extern.h +29 -0
  6. data/img/cursor.png +0 -0
  7. data/img/cursors.png +0 -0
  8. data/img/dice.png +0 -0
  9. data/img/wait_cursor.png +0 -0
  10. data/img/win_base.png +0 -0
  11. data/img/window.png +0 -0
  12. data/install_miyako.rb +87 -0
  13. data/lib/Miyako/API/audio.rb +584 -0
  14. data/lib/Miyako/API/basic_data.rb +1026 -0
  15. data/lib/Miyako/API/bitmap.rb +534 -0
  16. data/lib/Miyako/API/choices.rb +481 -0
  17. data/lib/Miyako/API/collision.rb +638 -0
  18. data/lib/Miyako/API/diagram.rb +586 -0
  19. data/lib/Miyako/API/drawing.rb +151 -0
  20. data/lib/Miyako/API/exceptions.rb +105 -0
  21. data/lib/Miyako/API/fixedmap.rb +462 -0
  22. data/lib/Miyako/API/font.rb +430 -0
  23. data/lib/Miyako/API/input.rb +456 -0
  24. data/lib/Miyako/API/layout.rb +644 -0
  25. data/lib/Miyako/API/map.rb +583 -0
  26. data/lib/Miyako/API/map_event.rb +222 -0
  27. data/lib/Miyako/API/modules.rb +357 -0
  28. data/lib/Miyako/API/movie.rb +166 -0
  29. data/lib/Miyako/API/parts.rb +188 -0
  30. data/lib/Miyako/API/plane.rb +205 -0
  31. data/lib/Miyako/API/screen.rb +341 -0
  32. data/lib/Miyako/API/shape.rb +443 -0
  33. data/lib/Miyako/API/sprite.rb +773 -0
  34. data/lib/Miyako/API/sprite_animation.rb +494 -0
  35. data/lib/Miyako/API/sprite_list.rb +1135 -0
  36. data/lib/Miyako/API/spriteunit.rb +168 -0
  37. data/lib/Miyako/API/story.rb +350 -0
  38. data/lib/Miyako/API/textbox.rb +773 -0
  39. data/lib/Miyako/API/utility.rb +419 -0
  40. data/lib/Miyako/API/viewport.rb +190 -0
  41. data/lib/Miyako/API/yuki.rb +1180 -0
  42. data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
  43. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  44. data/lib/Miyako/EXT/slides.rb +157 -0
  45. data/lib/Miyako/miyako.rb +201 -0
  46. data/lib/Miyako/miyako_require_only.rb +35 -0
  47. data/logo/EGSR_logo.png +0 -0
  48. data/logo/EGSR_logo_bg.png +0 -0
  49. data/logo/EGSR_logo_fg.png +0 -0
  50. data/logo/EGSR_title_banner.png +0 -0
  51. data/logo/EGSR_title_logo.png +0 -0
  52. data/logo/miyako.png +0 -0
  53. data/logo/miyako_banner.png +0 -0
  54. data/logo/space.png +0 -0
  55. data/miyako_basicdata.c +484 -0
  56. data/miyako_bitmap.c +1225 -0
  57. data/miyako_collision.c +403 -0
  58. data/miyako_drawing.c +187 -0
  59. data/miyako_font.c +334 -0
  60. data/miyako_hsv.c +830 -0
  61. data/miyako_input_audio.c +254 -0
  62. data/miyako_layout.c +191 -0
  63. data/miyako_no_katana.c +1086 -0
  64. data/miyako_sprite2.c +431 -0
  65. data/miyako_transform.c +438 -0
  66. data/miyako_utility.c +288 -0
  67. data/sample/Animation1/m1ku.rb +68 -0
  68. data/sample/Animation1/m1ku_arm_0.png +0 -0
  69. data/sample/Animation1/m1ku_arm_1.png +0 -0
  70. data/sample/Animation1/m1ku_arm_2.png +0 -0
  71. data/sample/Animation1/m1ku_arm_3.png +0 -0
  72. data/sample/Animation1/m1ku_back.jpg +0 -0
  73. data/sample/Animation1/m1ku_body.png +0 -0
  74. data/sample/Animation1/m1ku_eye_0.png +0 -0
  75. data/sample/Animation1/m1ku_eye_1.png +0 -0
  76. data/sample/Animation1/m1ku_eye_2.png +0 -0
  77. data/sample/Animation1/m1ku_eye_3.png +0 -0
  78. data/sample/Animation1/m1ku_hair_front.png +0 -0
  79. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  80. data/sample/Animation1/readme.txt +72 -0
  81. data/sample/Animation2/lex.rb +96 -0
  82. data/sample/Animation2/lex_back.png +0 -0
  83. data/sample/Animation2/lex_body.png +0 -0
  84. data/sample/Animation2/lex_roadroller.png +0 -0
  85. data/sample/Animation2/lex_wheel_0.png +0 -0
  86. data/sample/Animation2/lex_wheel_1.png +0 -0
  87. data/sample/Animation2/lex_wheel_2.png +0 -0
  88. data/sample/Animation2/readme.txt +72 -0
  89. data/sample/Animation2/song_title.png +0 -0
  90. data/sample/Diagram_sample/back.png +0 -0
  91. data/sample/Diagram_sample/chr01.png +0 -0
  92. data/sample/Diagram_sample/chr02.png +0 -0
  93. data/sample/Diagram_sample/cursor.png +0 -0
  94. data/sample/Diagram_sample/diagram_sample_yuki2.rb +329 -0
  95. data/sample/Diagram_sample/readme.txt +90 -0
  96. data/sample/Diagram_sample/wait_cursor.png +0 -0
  97. data/sample/Room3/blue.rb +297 -0
  98. data/sample/Room3/ending.rb +180 -0
  99. data/sample/Room3/green.rb +220 -0
  100. data/sample/Room3/image/akamatsu.png +0 -0
  101. data/sample/Room3/image/aoyama.png +0 -0
  102. data/sample/Room3/image/congra.png +0 -0
  103. data/sample/Room3/image/congratulation.png +0 -0
  104. data/sample/Room3/image/congratulation_bg.png +0 -0
  105. data/sample/Room3/image/cursor.png +0 -0
  106. data/sample/Room3/image/midori.png +0 -0
  107. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  108. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  109. data/sample/Room3/image/room_blue.png +0 -0
  110. data/sample/Room3/image/room_green.png +0 -0
  111. data/sample/Room3/image/room_red.png +0 -0
  112. data/sample/Room3/image/start.png +0 -0
  113. data/sample/Room3/image/three_doors.png +0 -0
  114. data/sample/Room3/image/wait_cursor.png +0 -0
  115. data/sample/Room3/main.rb +120 -0
  116. data/sample/Room3/main_component.rb +59 -0
  117. data/sample/Room3/readme.txt +76 -0
  118. data/sample/Room3/red.rb +227 -0
  119. data/sample/Room3/room3.rb +25 -0
  120. data/sample/Room3/title.rb +184 -0
  121. data/sample/ball_action_sample.rb +204 -0
  122. data/sample/blit_rop.rb +70 -0
  123. data/sample/cairo_sample.rb +25 -0
  124. data/sample/circle_collision_test.rb +66 -0
  125. data/sample/collision_test.rb +33 -0
  126. data/sample/collision_test2.rb +108 -0
  127. data/sample/fixed_map_test/cursor.png +0 -0
  128. data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
  129. data/sample/fixed_map_test/map.csv +19 -0
  130. data/sample/fixed_map_test/map_01.png +0 -0
  131. data/sample/fixed_map_test/mapchip.csv +23 -0
  132. data/sample/fixed_map_test/monster.png +0 -0
  133. data/sample/fixed_map_test/readme.txt +72 -0
  134. data/sample/map_test/chara.rb +58 -0
  135. data/sample/map_test/chr1.png +0 -0
  136. data/sample/map_test/cursor.png +0 -0
  137. data/sample/map_test/main_parts.rb +69 -0
  138. data/sample/map_test/main_scene.rb +153 -0
  139. data/sample/map_test/map.png +0 -0
  140. data/sample/map_test/map2.png +0 -0
  141. data/sample/map_test/map_layer.csv +127 -0
  142. data/sample/map_test/map_manager.rb +75 -0
  143. data/sample/map_test/map_test.rb +23 -0
  144. data/sample/map_test/mapchip.csv +21 -0
  145. data/sample/map_test/oasis.rb +71 -0
  146. data/sample/map_test/readme.txt +89 -0
  147. data/sample/map_test/route.rb +157 -0
  148. data/sample/map_test/sea.png +0 -0
  149. data/sample/map_test/town.rb +74 -0
  150. data/sample/map_test/wait_cursor.png +0 -0
  151. data/sample/map_test/window.png +0 -0
  152. data/sample/polygon_test.rb +35 -0
  153. data/sample/rasterscroll.rb +25 -0
  154. data/sample/takahashi.rb +42 -0
  155. data/sample/text.png +0 -0
  156. data/sample/textbox_sample.rb +192 -0
  157. data/sample/transform.rb +54 -0
  158. data/sample/utility_test.rb +73 -0
  159. data/sample/utility_test2.rb +61 -0
  160. data/sample/utility_test3.rb +64 -0
  161. data/sample/utility_test4.rb +73 -0
  162. data/uninstall_miyako.rb +19 -0
  163. data/win/miyako_no_katana.so +0 -0
  164. metadata +216 -0
@@ -0,0 +1,166 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.1
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ #==動画管理クラス
25
+ #動画ファイル(MPEGファイル限定)をロード・再生するクラス
26
+ class Movie
27
+ include SpriteBase
28
+ include Animation
29
+ include Layout
30
+ extend Forwardable
31
+
32
+ @@movie_list = []
33
+
34
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
35
+
36
+ #===動画のインスタンスを作成する
37
+ #(但し、現在の所、loopパラメータは利用できない)
38
+ #_fname_:: 動画ファイル名
39
+ #_loops_:: ループ再生の可否。ループ再生させるときは true を渡す
40
+ #返却値:: 生成したインスタンス
41
+ def initialize(fname, loops = true)
42
+ init_layout
43
+
44
+ @x = 0
45
+ @y = 0
46
+
47
+ raise MiyakoIOError.no_file(fname) unless File.exist?(fname)
48
+ @movie = SDL::MPEG.load(fname)
49
+ @size = Size.new(@movie.info.width, @movie.info.height)
50
+ set_layout_size(*(@size.to_a))
51
+
52
+ @visible = true
53
+ @sprite = Sprite.new({:size=>@size , :type=>:movie})
54
+ @sprite.snap(self)
55
+
56
+ @movie.enable_audio(true) unless $not_use_audio
57
+ @movie.enable_video(true)
58
+ @movie.set_loop(loops)
59
+
60
+ @movie.set_display(@sprite.bitmap)
61
+ @movie.scale(1.0)
62
+ @@movie_list.push(self)
63
+ end
64
+
65
+ def update_layout_position #:nodoc:
66
+ @x = @layout.pos[0]
67
+ @y = @layout.pos[1]
68
+ @sprite.move_to!(*@layout.pos)
69
+ end
70
+
71
+ def initialize_copy(obj) #:nodoc:
72
+ @sprite = @sprite.dup
73
+ @size = @size.dup
74
+ copy_layout
75
+ end
76
+
77
+ #===動画再生時の音量を指定する
78
+ #_v_:: 指定する音量。(0~100までの整数)
79
+ def set_volume(v)
80
+ return $not_use_audio
81
+ raise MiyakoValueError.over_range(v, 0, 100) unless (0..100).cover?(v)
82
+ @movie.set_volume(v)
83
+ end
84
+
85
+ #===動画再生中かを返す
86
+ #返却値:: 再生中のときは true を返す
87
+ def playing?
88
+ return @movie.status == SDL::MPEG::PLAYING
89
+ end
90
+
91
+ #===動画データを解放する
92
+ def dispose
93
+ @movie.stop if playing?
94
+ @sprite.dispose
95
+ layout_dispose
96
+ @@movie_list.delete(self)
97
+ @movie = nil
98
+ end
99
+
100
+ #===再生領域の範囲を設定する
101
+ #元動画のうち、表示させたい箇所を Rect クラスのインスタンスか4要素の配列で指定する
102
+ #_rect_:: 再生領域。
103
+ def region(rect)
104
+ @movie.set_display_region(*(rect.to_a))
105
+ end
106
+
107
+ #===動画の再生を一時停止する
108
+ #再生を裁可するには、 Miyako::Movie#rewind メソッドを呼び出す必要がある
109
+ #_pause_by_input_:: ダミー
110
+ def pause(pause_by_input)
111
+ @movie.pause
112
+ end
113
+
114
+ #===動画を再生させる
115
+ #動画の先頭から再生する。ブロックを渡したときは、ブロックを評価している間動画を再生する
116
+ #_vol_:: 動画再生時の音量。0~100の整数
117
+ def start(vol = nil)
118
+ if vol
119
+ raise MiyakoValueError.over_range(vol, 0, 100) unless (0..100).cover?(vol)
120
+ set_volume(vol) if vol
121
+ end
122
+ @movie.play
123
+ if block_given?
124
+ yield self
125
+ @movie.stop
126
+ end
127
+ end
128
+
129
+ #===動画再生を停止する
130
+ def stop
131
+ @movie.stop
132
+ end
133
+
134
+ #===再生中の動画の再生位置を返す
135
+ #位置は秒単位で返す
136
+ #返却値:: 再生位置
137
+ def current
138
+ return @movie.info.current_time
139
+ end
140
+
141
+ #===動画の長さを返す
142
+ #長さは、秒単位で返す。
143
+ #返却値:: 動画の長さ
144
+ def length
145
+ return @movie.info.total_time
146
+ end
147
+
148
+ #===画面に描画を指示する
149
+ #現在表示できる選択肢を、現在の状態で描画するよう指示する
150
+ #visibleメソッドの値がfalseのときは描画されない。
151
+ #返却値:: 自分自身を返す
152
+ def render
153
+ return slef nless @visible
154
+ @sprite.render
155
+ return self
156
+ end
157
+
158
+ #===一時停止中の動画の再生を再開する
159
+ #Miyako::Movie#pause メソッドを実行した後に呼び出す
160
+ def_delegators(:@movie, :rewind)
161
+ #===指定時間ぶん、スキップ再生を行う
162
+ #size:: スキップ長(秒単位)
163
+ def_delegators(:@movie, :skip)
164
+ def_delegators(:@sprite, :rect, :broad_rect, :ox, :oy)
165
+ end
166
+ end
@@ -0,0 +1,188 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.1
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+
25
+ require 'delegate'
26
+
27
+ #==パーツ構成クラス
28
+ #複数のスプライト・アニメーションをまとめて一つの部品として構成できるクラス
29
+ #
30
+ #最初に、基準となる「レイアウト空間(LayoutSpaceクラスのインスタンス)」を登録し、その上にパーツを加える
31
+ #
32
+ #すべてのパーツは、すべてレイアウト空間にスナップされる
33
+ #(登録したパーツのレイアウト情報が変わることに注意)
34
+ class Parts < Delegator
35
+ include SpriteBase
36
+ include Animation
37
+ include Enumerable
38
+ include Layout
39
+ extend Forwardable
40
+
41
+ #===Partsクラスインスタンスを生成
42
+ #_size_:: パーツ全体の大きさ。Size構造体のインスタンスもしくは要素数が2の配列
43
+ def initialize(size)
44
+ @list = SpriteList.new
45
+
46
+ init_layout
47
+ set_layout_size(size[0], size[1])
48
+ end
49
+
50
+ def __getobj__
51
+ @list
52
+ end
53
+
54
+ def __setobj__(obj)
55
+ end
56
+
57
+ def initialize_copy(obj) #:nodoc:
58
+ copy_layout
59
+ @list = SpriteList.new
60
+ obj.sprite_list.each{|pair|
61
+ @list[pair.name] = pair.body.deep_dup
62
+ @list[pair.name].snap(self)
63
+ }
64
+ self
65
+ end
66
+
67
+ #===補助パーツvalueをnameに割り当てる
68
+ #_name_:: 補助パーツに与える名前(シンボル)
69
+ #_value_:: 補助パーツのインスタンス(スプライト、テキストボックス、アニメーション、レイアウトボックスなど)
70
+ #返却値:: 自分自身
71
+ def []=(name, value)
72
+ @list[name] = value
73
+ @list[name].snap(self)
74
+ self
75
+ end
76
+
77
+ #===名前・スプライトの対を登録する
78
+ #リストに名前・スプライトをリストの後ろに追加する
79
+ #効果はSpriteList#addと同じだが、複数の対を登録できることが特徴
80
+ #(例)push([name1,sprite1])
81
+ # push([name1,sprite1],[name2,sprite2])
82
+ #_pairs_:: 名前とスプライトの対を配列にしたもの。対は、[name,sprite]として渡す。
83
+ #返却値:: 追加した自分自身を渡す
84
+ def push(*pairs)
85
+ pairs.each{|pair|
86
+ @list.push(pair)
87
+ @list[pair[0]].snap(self)
88
+ }
89
+ return self
90
+ end
91
+
92
+ #===指定した数の要素を先頭から取り除く
93
+ #SpriteListの先頭からn個の要素を取り除いて、新しいSpriteListとする。
94
+ #nがマイナスの時は、後ろからn個の要素を取り除く。
95
+ #nが0の時は、空のSpriteListを返す。
96
+ #自分自身に何も登録されていなければnilを返す
97
+ #(例)a=SpriteList(pair(:a),pair(:b),pair(:c))
98
+ # b=a.delete(:b)
99
+ # =>a=SpriteList(pair(:a),pair(:c))
100
+ # b=SpriteList(pair(:b))
101
+ # b=a.delete(:d)
102
+ # =>a=SpriteList(pair(:a),pair(:b),pair(:c))
103
+ # b=nil
104
+ #_n_:: 取り除く要素数。省略時は1
105
+ #返却値:: 取り除いたスプライト
106
+ def delete(name)
107
+ ret = @list.delete
108
+ ret.body.reset_snap
109
+ ret.body
110
+ end
111
+
112
+ def sprite_list #:nodoc:
113
+ return @list
114
+ end
115
+
116
+ #===すべての補助パーツの一覧を配列で返す
117
+ #返却値:: パーツ名の配列(登録順)
118
+ def parts
119
+ return @list.names
120
+ end
121
+
122
+ #===指定の補助パーツを除外する
123
+ #_name_:: 除外するパーツ名(シンボル)
124
+ #返却値:: 自分自身
125
+ def remove(name)
126
+ @list.delete(name)
127
+ return self
128
+ end
129
+
130
+ #===スプライトに変換した画像を表示する
131
+ #すべてのパーツを貼り付けた、1枚のスプライトを返す
132
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
133
+ #返却値:: 描画したスプライト
134
+ def to_sprite
135
+ rect = self.broad_rect
136
+ sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
137
+ Drawing.fill(sprite, [0,0,0])
138
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
139
+ self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
140
+ yield sprite if block_given?
141
+ return sprite
142
+ end
143
+
144
+ #===SpriteUnit構造体を生成する
145
+ #いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
146
+ #返却値:: 生成したSpriteUnit構造体
147
+ def to_unit
148
+ return self.to_sprite.to_unit
149
+ end
150
+
151
+ #===現在の画面の最大の大きさを矩形で取得する
152
+ #各パーツの位置により、取得できる矩形の大きさが変わる
153
+ #但し、パーツ未登録の時は、インスタンス生成時の大きさから矩形を生成する
154
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
155
+ def broad_rect
156
+ rect = self.rect.to_a
157
+ return self.rect if @list.length == 0
158
+ rect_list = rect.zip(*(self.map{|pair| pair[1].broad_rect.to_a}))
159
+ # width -> right
160
+ rect_list[2] = rect_list[2].zip(rect_list[0]).map{|xw| xw[0] + xw[1]}
161
+ # height -> bottom
162
+ rect_list[3] = rect_list[3].zip(rect_list[1]).map{|xw| xw[0] + xw[1]}
163
+ x, y = rect_list[0].min, rect_list[1].min
164
+ return Rect.new(x, y, rect_list[2].max - x, rect_list[3].max - y)
165
+ end
166
+
167
+ #===パーツに登録しているインスタンスを解放する
168
+ def dispose
169
+ @list.dispose
170
+ end
171
+
172
+ # mixinしたモジュールが優先して呼ばれるメソッドを再び移譲
173
+ def_delegators(:@list, :render, :render_to, :visible, :visible=, :show, :hide)
174
+ def_delegators(:@list, :start, :stop, :reset, :update_animation, :each)
175
+
176
+ #===各部品を移動させる
177
+ #Parts#move!はすでに予約されているため、
178
+ #SpriteList#move!はParts#parts_move!に改名。
179
+ #詳細は、SpriteList#move!を参照。
180
+ def_delegator(:@list, :move!, :parts_move!)
181
+
182
+ #===各部品を移動させる
183
+ #Parts#move_to!はすでに予約されているため、
184
+ #SpriteList#move_to!はParts#parts_move_to!に改名。
185
+ #詳細は、SpriteList#move_to!を参照。
186
+ def_delegator(:@list, :move_to!, :parts_move_to!)
187
+ end
188
+ end
@@ -0,0 +1,205 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.1
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ module Miyako
24
+ #==プレーン(画面いっぱいにタイル表示される画像)を表現するクラス
25
+ class Plane
26
+ include SpriteBase
27
+ include Animation
28
+ extend Forwardable
29
+
30
+ def resize #:nodoc:
31
+ @size = Size.new(((Screen.w + @sprite.ow - 1) / @sprite.ow + 2),
32
+ ((Screen.h + @sprite.oh - 1) / @sprite.oh + 2))
33
+ end
34
+
35
+ #===インスタンスの作成
36
+ #パラメータは、Sprite.newのパラメータと同じ。但し、追加のパラメータがある。
37
+ #
38
+ #:sprite => (インスタンス) : 表示対象のスプライト(アニメーション)のインスタンス
39
+ #
40
+ #_param_:: プレーンの情報(:sprite(=>Sprite・SpriteAnimationクラスのインスタンス))
41
+ #返却値:: 生成したインスタンス
42
+ def initialize(param)
43
+ if param.has_key?(:sprite)
44
+ @sprite = param[:sprite]
45
+ else
46
+ @sprite = Sprite.new(param)
47
+ end
48
+ resize
49
+ @pos = Point.new(0, 0)
50
+ @visible = true
51
+ end
52
+
53
+ def initialize_copy(obj) #:nodoc:
54
+ @sprite = @sprite.dup
55
+ @pos = @pos.dup
56
+ end
57
+
58
+ #===プレーン画像左上の x 座標の値を取得する
59
+ #元画像の左上の位置がどこにあるのかを示す
60
+ #返却値:: x 座標の値
61
+ def x
62
+ return @pos.x
63
+ end
64
+
65
+ #===プレーン画像左上の y 座標の値を取得する
66
+ #元画像の左上の位置がどこにあるのかを示す
67
+ #返却値:: y 座標の値
68
+ def y
69
+ return @pos.y
70
+ end
71
+
72
+ #===プレーンの表示位置を移動させる
73
+ #画像スクロールと同じ効果を得る
74
+ #_dx_:: 移動量(x 座標)
75
+ #_dy_:: 移動量(y 座標)
76
+ #返却値:: 自分自身を返す
77
+ def move!(dx, dy)
78
+ @pos.move!(dx, dy)
79
+ @pos.x %= @sprite.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
80
+ @pos.y %= @sprite.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
81
+ return self
82
+ end
83
+
84
+ #===プレーンの表示位置を移動させる(移動位置指定)
85
+ #画像スクロールと同じ効果を得る
86
+ #_x_:: 移動先の位置(x 座標)
87
+ #_y_:: 移動先の位置(y 座標)
88
+ #返却値:: 自分自身を返す
89
+ def move_to!(x, y)
90
+ @pos.move_to!(x, y)
91
+ @pos.x %= @screen.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
92
+ @pos.y %= @screen.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
93
+ return self
94
+ end
95
+
96
+ #===プレーンの表示位置を移動させたときの位置を求める
97
+ #画像スクロールと同じ効果を得る
98
+ #ただし、自分自身の位置は変わらない
99
+ #_dx_:: 移動量(x 座標)
100
+ #_dy_:: 移動量(y 座標)
101
+ #返却値:: 変更したPosition構造体を返す
102
+ def move!(dx, dy)
103
+ @pos.move!(dx, dy)
104
+ @pos.x %= @sprite.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
105
+ @pos.y %= @sprite.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
106
+ return self
107
+ end
108
+
109
+ #===プレーンの表示位置を移動させたときの位置を求める(移動位置指定)
110
+ #画像スクロールと同じ効果を得る
111
+ #ただし、自分自身の位置は変わらない
112
+ #_x_:: 移動先の位置(x 座標)
113
+ #_y_:: 移動先の位置(y 座標)
114
+ #返却値:: 変更したPosition構造体を返す
115
+ def move_to!(x, y)
116
+ @pos.move_to!(x, y)
117
+ @pos.x %= @screen.ow if @pos.x >= @sprite.ow || @pos.x <= -@sprite.ow
118
+ @pos.y %= @screen.oh if @pos.y >= @sprite.oh || @pos.y <= -@sprite.oh
119
+ return self
120
+ end
121
+
122
+ #===画像の表示矩形を取得する
123
+ #Planeの大きさを矩形で取得する。値は、Screen.rectメソッドの値と同じ。
124
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
125
+ def rect
126
+ return Screen.rect
127
+ end
128
+
129
+ #===現在の画面の最大の大きさを矩形で取得する
130
+ #但し、Planeの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
131
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
132
+ def broad_rect
133
+ return self.rect
134
+ end
135
+
136
+ #===プレーンのデータを解放する
137
+ def dispose
138
+ @sprite.dispose
139
+ end
140
+
141
+ #===画面に描画を指示する
142
+ #現在表示できるプレーンを、現在の状態で描画するよう指示する
143
+ #--
144
+ #(但し、実際に描画されるのはScreen.renderメソッドが呼び出された時)
145
+ #++
146
+ #返却値:: 自分自身を返す
147
+ def render
148
+ @size.h.times{|y|
149
+ @size.w.times{|x|
150
+ u = @sprite.to_unit
151
+ u.move_to(x * @sprite.ow + @pos.x, y * @sprite.oh + @pos.y)
152
+ 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
153
+ }
154
+ }
155
+ return self
156
+ end
157
+
158
+ #===描画の素になるスプライトのアニメーションを更新する
159
+ #返却値:: 更新した結果、パターンが変わった・アニメーションが終了したときはtrue、それ以外はfalseを返す
160
+ def update_animation
161
+ return @sprite.update_animation
162
+ end
163
+
164
+ #===現在表示されているプレーンをSpriteクラスのインスタンスとして取得
165
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
166
+ #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
167
+ def to_sprite
168
+ sprite = Sprite.new(:size=>self.rect.to_a[2..3], :type=>:ac)
169
+ Drawing.fill(sprite, [0,0,0])
170
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
171
+ self.render_to(sprite)
172
+ yield sprite if block_given?
173
+ return sprite
174
+ end
175
+
176
+ #===SpriteUnit構造体を生成する
177
+ #いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
178
+ #返却値:: 生成したSpriteUnit構造体
179
+ def to_unit
180
+ return self.to_sprite.to_unit
181
+ end
182
+
183
+ def Plane::resize #:nodoc:
184
+ @@planes.each{|p| p.resize }
185
+ return nil
186
+ end
187
+
188
+ #===プレーンを画面に描画する
189
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点にする。
190
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
191
+ #visibleメソッドの値がfalseのときは描画されない。
192
+ def render
193
+ end
194
+
195
+ #===プレーンを画像に描画する
196
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点にする。
197
+ #転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
198
+ #visibleメソッドの値がfalseのときは描画されない。
199
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
200
+ def render_to(dst)
201
+ end
202
+
203
+ def_delegators(:sprite)
204
+ end
205
+ end