ruby-miyako-mswin32 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.
Files changed (148) hide show
  1. data/README +1115 -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 +87 -0
  9. data/lib/Miyako/API/audio.rb +584 -0
  10. data/lib/Miyako/API/basic_data.rb +1026 -0
  11. data/lib/Miyako/API/bitmap.rb +534 -0
  12. data/lib/Miyako/API/choices.rb +481 -0
  13. data/lib/Miyako/API/collision.rb +638 -0
  14. data/lib/Miyako/API/diagram.rb +586 -0
  15. data/lib/Miyako/API/drawing.rb +151 -0
  16. data/lib/Miyako/API/exceptions.rb +105 -0
  17. data/lib/Miyako/API/fixedmap.rb +462 -0
  18. data/lib/Miyako/API/font.rb +430 -0
  19. data/lib/Miyako/API/input.rb +456 -0
  20. data/lib/Miyako/API/layout.rb +644 -0
  21. data/lib/Miyako/API/map.rb +583 -0
  22. data/lib/Miyako/API/map_event.rb +222 -0
  23. data/lib/Miyako/API/modules.rb +357 -0
  24. data/lib/Miyako/API/movie.rb +166 -0
  25. data/lib/Miyako/API/parts.rb +188 -0
  26. data/lib/Miyako/API/plane.rb +205 -0
  27. data/lib/Miyako/API/screen.rb +341 -0
  28. data/lib/Miyako/API/shape.rb +443 -0
  29. data/lib/Miyako/API/sprite.rb +773 -0
  30. data/lib/Miyako/API/sprite_animation.rb +494 -0
  31. data/lib/Miyako/API/sprite_list.rb +1135 -0
  32. data/lib/Miyako/API/spriteunit.rb +168 -0
  33. data/lib/Miyako/API/story.rb +350 -0
  34. data/lib/Miyako/API/textbox.rb +773 -0
  35. data/lib/Miyako/API/utility.rb +419 -0
  36. data/lib/Miyako/API/viewport.rb +190 -0
  37. data/lib/Miyako/API/yuki.rb +1180 -0
  38. data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
  39. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  40. data/lib/Miyako/EXT/slides.rb +157 -0
  41. data/lib/Miyako/miyako.rb +201 -0
  42. data/lib/Miyako/miyako_no_katana.so +0 -0
  43. data/lib/Miyako/miyako_require_only.rb +35 -0
  44. data/logo/EGSR_logo.png +0 -0
  45. data/logo/EGSR_logo_bg.png +0 -0
  46. data/logo/EGSR_logo_fg.png +0 -0
  47. data/logo/EGSR_title_banner.png +0 -0
  48. data/logo/EGSR_title_logo.png +0 -0
  49. data/logo/miyako.png +0 -0
  50. data/logo/miyako_banner.png +0 -0
  51. data/logo/space.png +0 -0
  52. data/sample/Animation1/m1ku.rb +68 -0
  53. data/sample/Animation1/m1ku_arm_0.png +0 -0
  54. data/sample/Animation1/m1ku_arm_1.png +0 -0
  55. data/sample/Animation1/m1ku_arm_2.png +0 -0
  56. data/sample/Animation1/m1ku_arm_3.png +0 -0
  57. data/sample/Animation1/m1ku_back.jpg +0 -0
  58. data/sample/Animation1/m1ku_body.png +0 -0
  59. data/sample/Animation1/m1ku_eye_0.png +0 -0
  60. data/sample/Animation1/m1ku_eye_1.png +0 -0
  61. data/sample/Animation1/m1ku_eye_2.png +0 -0
  62. data/sample/Animation1/m1ku_eye_3.png +0 -0
  63. data/sample/Animation1/m1ku_hair_front.png +0 -0
  64. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  65. data/sample/Animation1/readme.txt +72 -0
  66. data/sample/Animation2/lex.rb +96 -0
  67. data/sample/Animation2/lex_back.png +0 -0
  68. data/sample/Animation2/lex_body.png +0 -0
  69. data/sample/Animation2/lex_roadroller.png +0 -0
  70. data/sample/Animation2/lex_wheel_0.png +0 -0
  71. data/sample/Animation2/lex_wheel_1.png +0 -0
  72. data/sample/Animation2/lex_wheel_2.png +0 -0
  73. data/sample/Animation2/readme.txt +72 -0
  74. data/sample/Animation2/song_title.png +0 -0
  75. data/sample/Diagram_sample/back.png +0 -0
  76. data/sample/Diagram_sample/chr01.png +0 -0
  77. data/sample/Diagram_sample/chr02.png +0 -0
  78. data/sample/Diagram_sample/cursor.png +0 -0
  79. data/sample/Diagram_sample/diagram_sample_yuki2.rb +329 -0
  80. data/sample/Diagram_sample/readme.txt +90 -0
  81. data/sample/Diagram_sample/wait_cursor.png +0 -0
  82. data/sample/Room3/blue.rb +297 -0
  83. data/sample/Room3/ending.rb +180 -0
  84. data/sample/Room3/green.rb +220 -0
  85. data/sample/Room3/image/akamatsu.png +0 -0
  86. data/sample/Room3/image/aoyama.png +0 -0
  87. data/sample/Room3/image/congra.png +0 -0
  88. data/sample/Room3/image/congratulation.png +0 -0
  89. data/sample/Room3/image/congratulation_bg.png +0 -0
  90. data/sample/Room3/image/cursor.png +0 -0
  91. data/sample/Room3/image/midori.png +0 -0
  92. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  93. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  94. data/sample/Room3/image/room_blue.png +0 -0
  95. data/sample/Room3/image/room_green.png +0 -0
  96. data/sample/Room3/image/room_red.png +0 -0
  97. data/sample/Room3/image/start.png +0 -0
  98. data/sample/Room3/image/three_doors.png +0 -0
  99. data/sample/Room3/image/wait_cursor.png +0 -0
  100. data/sample/Room3/main.rb +120 -0
  101. data/sample/Room3/main_component.rb +59 -0
  102. data/sample/Room3/readme.txt +76 -0
  103. data/sample/Room3/red.rb +227 -0
  104. data/sample/Room3/room3.rb +25 -0
  105. data/sample/Room3/title.rb +184 -0
  106. data/sample/ball_action_sample.rb +204 -0
  107. data/sample/blit_rop.rb +70 -0
  108. data/sample/cairo_sample.rb +25 -0
  109. data/sample/circle_collision_test.rb +66 -0
  110. data/sample/collision_test.rb +33 -0
  111. data/sample/collision_test2.rb +108 -0
  112. data/sample/fixed_map_test/cursor.png +0 -0
  113. data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
  114. data/sample/fixed_map_test/map.csv +19 -0
  115. data/sample/fixed_map_test/map_01.png +0 -0
  116. data/sample/fixed_map_test/mapchip.csv +23 -0
  117. data/sample/fixed_map_test/monster.png +0 -0
  118. data/sample/fixed_map_test/readme.txt +72 -0
  119. data/sample/map_test/chara.rb +58 -0
  120. data/sample/map_test/chr1.png +0 -0
  121. data/sample/map_test/cursor.png +0 -0
  122. data/sample/map_test/main_parts.rb +69 -0
  123. data/sample/map_test/main_scene.rb +153 -0
  124. data/sample/map_test/map.png +0 -0
  125. data/sample/map_test/map2.png +0 -0
  126. data/sample/map_test/map_layer.csv +127 -0
  127. data/sample/map_test/map_manager.rb +75 -0
  128. data/sample/map_test/map_test.rb +23 -0
  129. data/sample/map_test/mapchip.csv +21 -0
  130. data/sample/map_test/oasis.rb +71 -0
  131. data/sample/map_test/readme.txt +89 -0
  132. data/sample/map_test/route.rb +157 -0
  133. data/sample/map_test/sea.png +0 -0
  134. data/sample/map_test/town.rb +74 -0
  135. data/sample/map_test/wait_cursor.png +0 -0
  136. data/sample/map_test/window.png +0 -0
  137. data/sample/polygon_test.rb +35 -0
  138. data/sample/rasterscroll.rb +25 -0
  139. data/sample/takahashi.rb +42 -0
  140. data/sample/text.png +0 -0
  141. data/sample/textbox_sample.rb +190 -0
  142. data/sample/transform.rb +54 -0
  143. data/sample/utility_test.rb +73 -0
  144. data/sample/utility_test2.rb +61 -0
  145. data/sample/utility_test3.rb +64 -0
  146. data/sample/utility_test4.rb +73 -0
  147. data/uninstall_miyako.rb +19 -0
  148. metadata +199 -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