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.
- data/README +977 -0
- data/Rakefile +7 -0
- data/img/cursor.png +0 -0
- data/img/cursors.png +0 -0
- data/img/dice.png +0 -0
- data/img/wait_cursor.png +0 -0
- data/img/win_base.png +0 -0
- data/img/window.png +0 -0
- data/install_miyako.rb +75 -0
- data/lib/Miyako/API/audio.rb +198 -0
- data/lib/Miyako/API/basic_data.rb +431 -0
- data/lib/Miyako/API/bitmap.rb +35 -0
- data/lib/Miyako/API/choices.rb +308 -0
- data/lib/Miyako/API/collision.rb +444 -0
- data/lib/Miyako/API/diagram.rb +573 -0
- data/lib/Miyako/API/drawing.rb +110 -0
- data/lib/Miyako/API/fixedmap.rb +315 -0
- data/lib/Miyako/API/font.rb +384 -0
- data/lib/Miyako/API/input.rb +440 -0
- data/lib/Miyako/API/layout.rb +451 -0
- data/lib/Miyako/API/map.rb +403 -0
- data/lib/Miyako/API/map_event.rb +198 -0
- data/lib/Miyako/API/modules.rb +109 -0
- data/lib/Miyako/API/movie.rb +151 -0
- data/lib/Miyako/API/parts.rb +154 -0
- data/lib/Miyako/API/plane.rb +131 -0
- data/lib/Miyako/API/screen.rb +257 -0
- data/lib/Miyako/API/shape.rb +362 -0
- data/lib/Miyako/API/sprite.rb +338 -0
- data/lib/Miyako/API/sprite_animation.rb +461 -0
- data/lib/Miyako/API/spriteunit.rb +113 -0
- data/lib/Miyako/API/story.rb +224 -0
- data/lib/Miyako/API/textbox.rb +496 -0
- data/lib/Miyako/API/viewport.rb +435 -0
- data/lib/Miyako/API/yuki.rb +779 -0
- data/lib/Miyako/EXT/miyako_cairo.rb +60 -0
- data/lib/Miyako/EXT/raster_scroll.rb +138 -0
- data/lib/Miyako/EXT/slides.rb +136 -0
- data/lib/Miyako/miyako.rb +172 -0
- data/miyako.png +0 -0
- data/miyako_banner.png +0 -0
- data/miyako_no_katana/extconf.rb +34 -0
- data/miyako_no_katana/miyako_no_katana.c +3301 -0
- data/sample/Animation1/m1ku.rb +89 -0
- data/sample/Animation1/m1ku_arm_0.png +0 -0
- data/sample/Animation1/m1ku_arm_1.png +0 -0
- data/sample/Animation1/m1ku_arm_2.png +0 -0
- data/sample/Animation1/m1ku_arm_3.png +0 -0
- data/sample/Animation1/m1ku_back.jpg +0 -0
- data/sample/Animation1/m1ku_body.png +0 -0
- data/sample/Animation1/m1ku_eye_0.png +0 -0
- data/sample/Animation1/m1ku_eye_1.png +0 -0
- data/sample/Animation1/m1ku_eye_2.png +0 -0
- data/sample/Animation1/m1ku_eye_3.png +0 -0
- data/sample/Animation1/m1ku_hair_front.png +0 -0
- data/sample/Animation1/m1ku_hair_rear.png +0 -0
- data/sample/Animation1/readme.txt +72 -0
- data/sample/Animation2/lex.rb +95 -0
- data/sample/Animation2/lex_back.png +0 -0
- data/sample/Animation2/lex_body.png +0 -0
- data/sample/Animation2/lex_roadroller.png +0 -0
- data/sample/Animation2/lex_wheel_0.png +0 -0
- data/sample/Animation2/lex_wheel_1.png +0 -0
- data/sample/Animation2/lex_wheel_2.png +0 -0
- data/sample/Animation2/readme.txt +72 -0
- data/sample/Animation2/song_title.png +0 -0
- data/sample/Diagram_sample/back.png +0 -0
- data/sample/Diagram_sample/chr01.png +0 -0
- data/sample/Diagram_sample/chr02.png +0 -0
- data/sample/Diagram_sample/cursor.png +0 -0
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +283 -0
- data/sample/Diagram_sample/readme.txt +87 -0
- data/sample/Diagram_sample/wait_cursor.png +0 -0
- data/sample/Room3/blue.rb +250 -0
- data/sample/Room3/ending.rb +175 -0
- data/sample/Room3/green.rb +185 -0
- data/sample/Room3/image/akamatsu.png +0 -0
- data/sample/Room3/image/aoyama.png +0 -0
- data/sample/Room3/image/congra.png +0 -0
- data/sample/Room3/image/congratulation.png +0 -0
- data/sample/Room3/image/congratulation_bg.png +0 -0
- data/sample/Room3/image/cursor.png +0 -0
- data/sample/Room3/image/midori.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
- data/sample/Room3/image/room_blue.png +0 -0
- data/sample/Room3/image/room_green.png +0 -0
- data/sample/Room3/image/room_red.png +0 -0
- data/sample/Room3/image/start.png +0 -0
- data/sample/Room3/image/three_doors.png +0 -0
- data/sample/Room3/image/wait_cursor.png +0 -0
- data/sample/Room3/main.rb +102 -0
- data/sample/Room3/main_component.rb +58 -0
- data/sample/Room3/readme.txt +76 -0
- data/sample/Room3/red.rb +200 -0
- data/sample/Room3/room3.rb +26 -0
- data/sample/Room3/title.rb +171 -0
- data/sample/fixed_map_test/cursor.png +0 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +149 -0
- data/sample/fixed_map_test/map.csv +19 -0
- data/sample/fixed_map_test/map_01.png +0 -0
- data/sample/fixed_map_test/map_sample.rb +121 -0
- data/sample/fixed_map_test/mapchip.csv +23 -0
- data/sample/fixed_map_test/monster.png +0 -0
- data/sample/fixed_map_test/readme.txt +72 -0
- data/sample/map_test/chara.rb +50 -0
- data/sample/map_test/chr1.png +0 -0
- data/sample/map_test/cursor.png +0 -0
- data/sample/map_test/main_parts.rb +48 -0
- data/sample/map_test/main_scene.rb +137 -0
- data/sample/map_test/map.png +0 -0
- data/sample/map_test/map2.png +0 -0
- data/sample/map_test/map_layer.csv +127 -0
- data/sample/map_test/map_manager.rb +92 -0
- data/sample/map_test/map_test.rb +23 -0
- data/sample/map_test/mapchip.csv +21 -0
- data/sample/map_test/oasis.rb +65 -0
- data/sample/map_test/readme.txt +87 -0
- data/sample/map_test/route.rb +144 -0
- data/sample/map_test/sea.png +0 -0
- data/sample/map_test/town.rb +68 -0
- data/sample/map_test/wait_cursor.png +0 -0
- data/sample/map_test/window.png +0 -0
- data/win/miyako_no_katana.so +0 -0
- 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
|