cyross-ruby-miyako 2.0.0 → 2.0.5.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 (102) hide show
  1. data/README +106 -154
  2. data/defines.h +144 -0
  3. data/{miyako_no_katana/extconf.rb → extconf.rb} +10 -0
  4. data/extern.h +29 -0
  5. data/install_miyako.rb +26 -14
  6. data/lib/Miyako/API/audio.rb +2 -2
  7. data/lib/Miyako/API/basic_data.rb +183 -41
  8. data/lib/Miyako/API/bitmap.rb +474 -2
  9. data/lib/Miyako/API/choices.rb +215 -48
  10. data/lib/Miyako/API/collision.rb +267 -251
  11. data/lib/Miyako/API/diagram.rb +58 -70
  12. data/lib/Miyako/API/drawing.rb +93 -52
  13. data/lib/Miyako/API/fixedmap.rb +233 -120
  14. data/lib/Miyako/API/font.rb +59 -40
  15. data/lib/Miyako/API/input.rb +34 -27
  16. data/lib/Miyako/API/layout.rb +154 -172
  17. data/lib/Miyako/API/map.rb +285 -159
  18. data/lib/Miyako/API/map_event.rb +4 -4
  19. data/lib/Miyako/API/modules.rb +1 -1
  20. data/lib/Miyako/API/movie.rb +8 -5
  21. data/lib/Miyako/API/parts.rb +44 -9
  22. data/lib/Miyako/API/plane.rb +37 -2
  23. data/lib/Miyako/API/screen.rb +90 -22
  24. data/lib/Miyako/API/shape.rb +118 -37
  25. data/lib/Miyako/API/sprite.rb +475 -61
  26. data/lib/Miyako/API/sprite_animation.rb +83 -63
  27. data/lib/Miyako/API/spriteunit.rb +47 -13
  28. data/lib/Miyako/API/story.rb +123 -47
  29. data/lib/Miyako/API/textbox.rb +361 -132
  30. data/lib/Miyako/API/utility.rb +388 -0
  31. data/lib/Miyako/API/viewport.rb +54 -349
  32. data/lib/Miyako/API/yuki.rb +570 -353
  33. data/lib/Miyako/EXT/miyako_cairo.rb +5 -3
  34. data/lib/Miyako/EXT/slides.rb +22 -1
  35. data/lib/Miyako/miyako.rb +12 -13
  36. data/logo/EGSR_logo.png +0 -0
  37. data/logo/EGSR_logo_bg.png +0 -0
  38. data/logo/EGSR_logo_fg.png +0 -0
  39. data/logo/EGSR_title_banner.png +0 -0
  40. data/logo/EGSR_title_logo.png +0 -0
  41. data/logo/miyako.png +0 -0
  42. data/logo/miyako_banner.png +0 -0
  43. data/logo/space.png +0 -0
  44. data/miyako_basicdata.c +590 -0
  45. data/miyako_bitmap.c +1225 -0
  46. data/miyako_collision.c +403 -0
  47. data/miyako_drawing.c +187 -0
  48. data/miyako_font.c +334 -0
  49. data/miyako_hsv.c +830 -0
  50. data/miyako_layout.c +191 -0
  51. data/miyako_no_katana.c +1074 -0
  52. data/miyako_transform.c +438 -0
  53. data/miyako_utility.c +288 -0
  54. data/sample/Animation1/m1ku.rb +10 -31
  55. data/sample/Animation1/readme.txt +6 -6
  56. data/sample/Animation2/lex.rb +1 -0
  57. data/sample/Animation2/readme.txt +6 -6
  58. data/sample/Diagram_sample/diagram_sample_yuki2.rb +152 -48
  59. data/sample/Diagram_sample/readme.txt +9 -6
  60. data/sample/Room3/blue.rb +234 -187
  61. data/sample/Room3/ending.rb +68 -63
  62. data/sample/Room3/green.rb +159 -124
  63. data/sample/Room3/main.rb +50 -32
  64. data/sample/Room3/main_component.rb +3 -2
  65. data/sample/Room3/readme.txt +6 -6
  66. data/sample/Room3/red.rb +161 -134
  67. data/sample/Room3/room3.rb +1 -0
  68. data/sample/Room3/title.rb +75 -62
  69. data/sample/ball_action_sample.rb +204 -0
  70. data/sample/blit_rop.rb +70 -0
  71. data/sample/cairo_sample.rb +25 -0
  72. data/sample/circle_collision_test.rb +66 -0
  73. data/sample/collision_test.rb +33 -0
  74. data/sample/collision_test2.rb +108 -0
  75. data/sample/fixed_map_test/fixed_map_sample.rb +23 -32
  76. data/sample/fixed_map_test/readme.txt +38 -38
  77. data/sample/map_test/chara.rb +17 -9
  78. data/sample/map_test/main_parts.rb +30 -9
  79. data/sample/map_test/main_scene.rb +57 -41
  80. data/sample/map_test/map_manager.rb +13 -30
  81. data/sample/map_test/map_test.rb +2 -2
  82. data/sample/map_test/oasis.rb +17 -11
  83. data/sample/map_test/readme.txt +50 -48
  84. data/sample/map_test/route.rb +46 -33
  85. data/sample/map_test/town.rb +19 -13
  86. data/sample/polygon_test.rb +35 -0
  87. data/sample/rasterscroll.rb +25 -0
  88. data/sample/takahashi.rb +42 -0
  89. data/sample/text.png +0 -0
  90. data/sample/textbox_sample.rb +190 -0
  91. data/sample/transform.rb +54 -0
  92. data/sample/utility_test.rb +73 -0
  93. data/sample/utility_test2.rb +61 -0
  94. data/sample/utility_test3.rb +64 -0
  95. data/sample/utility_test4.rb +73 -0
  96. data/uninstall_miyako.rb +19 -0
  97. data/win/miyako_no_katana.so +0 -0
  98. metadata +165 -148
  99. data/miyako.png +0 -0
  100. data/miyako_banner.png +0 -0
  101. data/miyako_no_katana/miyako_no_katana.c +0 -3301
  102. data/sample/fixed_map_test/map_sample.rb +0 -121
data/sample/text.png ADDED
Binary file
@@ -0,0 +1,190 @@
1
+ #encoding: utf-8
2
+ #テキストボックス サンプル
3
+ #2009 Cyross Makoto
4
+
5
+ require 'Miyako/miyako'
6
+
7
+ include Miyako
8
+
9
+ TEXTBOX_MARGIN = 16
10
+
11
+ # pause用カーソルの用意
12
+ ws = Sprite.new(:file=>"../img/wait_cursor.png", :type=>:ac)
13
+ ws.oh = ws.ow
14
+ @ws = SpriteAnimation.new(:sprite=>ws, :wait=>0.2, :pattern_list=>[0,1,2,3,2,1])
15
+
16
+ # 選択用カーソルの用意
17
+ cs = Sprite.new(:file=>"../img/cursor.png", :type=>:ac)
18
+ cs.oh = cs.ow
19
+ @cs = SpriteAnimation.new(:sprite=>cs, :wait=>0.2, :pattern_list=>[0,1,2,3,2,1])
20
+
21
+ # フォントの用意
22
+ font = Font.sans_serif
23
+ font.color = Color[:white]
24
+ font.size = 16
25
+
26
+ # テキストボックスの用意
27
+ box = TextBox.new(:size=>[32,20], :wait_cursor => @ws, :select_cursor => @cs, :font => font)
28
+
29
+ # テキストボックス背景の用意
30
+ box_bg = Sprite.new(:size => box.size.to_a.map{|v| v + TEXTBOX_MARGIN}, :type => :ac)
31
+ box_bg.fill([128,0,64,128])
32
+
33
+ # Partsをまとめて一つのボックスにする
34
+ @parts = Parts.new(box.size)
35
+ @parts[:box_bg] = box_bg
36
+ @parts[:box] = box
37
+ @parts[:box_bg].centering
38
+ @parts[:box].centering
39
+ @parts.centering
40
+
41
+ # 選択肢の作成
42
+ list = [
43
+ [Shape.text(:font=>font, :text=>"選択肢1"), nil, 1],
44
+ [Shape.text(:font=>font, :text=>"選択肢2"), nil, 2],
45
+ [Shape.text(:font=>font, :text=>"選択肢3"), nil, 3]
46
+ ]
47
+ @choices = @parts[:box].create_choices_chain(list)
48
+
49
+ # カーソルのアニメーションの開始
50
+ @parts[:box].start
51
+
52
+ # 実行させる処理をテキストボックスに登録
53
+ @parts[:box].execute(@choices){|box, params|
54
+ box.draw_text "やあ。"
55
+ box.pause.cr
56
+
57
+ box.draw_text "Miyakoのテキストボックスサンプルにようこそ。"
58
+ box.pause.cr
59
+
60
+ box.draw_text "ここでは、テキストボックスの機能をいくつか例示してみます。"
61
+ box.pause.clear
62
+
63
+ box.draw_text "まず、"
64
+ box.pause.cr
65
+
66
+ box.font_size_during(24){ box.draw_text "文字の大きさを変えます。" }
67
+ box.pause.cr
68
+
69
+ box.draw_text "変わりましたね?"
70
+ box.pause.clear
71
+
72
+ box.draw_text "次に、"
73
+ box.pause.cr
74
+
75
+ box.color_during(:blue){ box.draw_text "文字の色を変えてみます。" }
76
+ box.pause.cr
77
+
78
+ box.draw_text "変わりましたね?"
79
+ box.pause.clear
80
+
81
+ box.draw_text "続いて、"
82
+ box.pause.cr
83
+
84
+ box.font_size_during(24){
85
+ box.color_during(:blue){
86
+ box.draw_text "文字の大きさを変えながら"
87
+ box.cr
88
+ box.draw_text "色を変えてみます。"
89
+ }
90
+ }
91
+ box.pause.cr
92
+
93
+ box.draw_text "ほら、簡単でしょ?"
94
+ box.pause.clear
95
+
96
+ box.draw_text "文字の修飾も出来ます。"
97
+ box.pause.cr
98
+
99
+ box.font_bold{ box.draw_text "ボールド体でも" }
100
+ box.pause.cr
101
+
102
+ box.font_italic{ box.draw_text "イタリック体でも(フォントによって可・不可あるかも)" }
103
+ box.pause.cr
104
+
105
+ box.font_under_line{ box.draw_text "下線付きでも" }
106
+ box.pause.cr
107
+
108
+ box.draw_text "OKです"
109
+ box.pause.clear
110
+
111
+ box.draw_text "文字の位置を変更してみましょう。"
112
+ box.pause.cr
113
+
114
+ box.draw_text "一番左に表示しています"
115
+ box.cr
116
+
117
+ text = "真ん中に表示しています"
118
+ # 文字列の長さ(ピクセル単位)を取得
119
+ len = box.font.text_size(text)[0]
120
+ # x座標の位置を変更
121
+ box.locate.x = (box.size.w-len)/2
122
+ box.draw_text text
123
+ box.cr
124
+
125
+ text = "右に表示しています"
126
+ # 文字列の長さ(ピクセル単位)を取得
127
+ len = box.font.text_size(text)[0]
128
+ # x座標の位置を変更
129
+ box.locate.x = (box.size.w-len)
130
+ box.draw_text text
131
+ box.cr
132
+
133
+ text = "一番下の真ん中に表示しています"
134
+ # 文字列の長さ(ピクセル単位)を取得
135
+ len = box.font.text_size(text)
136
+ # x座標の位置を変更
137
+ box.locate.x = (box.size.w-len[0])/2
138
+ box.locate.y = (box.size.h-len[1])
139
+ box.draw_text text
140
+ box.cr
141
+
142
+ box.pause.clear
143
+
144
+ box.draw_text "最後に、選択肢を表示させてみます"
145
+ box.pause.cr
146
+
147
+ # params[0] == @choices
148
+ box.command params[0]
149
+
150
+ box.draw_text "選択結果は#{box.result}ですね。"
151
+ box.pause.cr.cr
152
+
153
+ box.draw_text "だいたい、テキストボックスの使い方が"
154
+ box.cr
155
+
156
+ box.draw_text "おわかりになりましたでしょうか?"
157
+ box.pause.cr
158
+
159
+ box.draw_text "それでは、そろそろ失礼いたします・・・。"
160
+ box.pause.cr
161
+ }
162
+
163
+ # テキストボックスのまとめ処理
164
+ def process_textbox
165
+ @parts[:box].update_animation
166
+ @parts.render
167
+ end
168
+
169
+ Miyako.main_loop do
170
+ break if Input.quit_or_escape? || !@parts[:box].execute?
171
+ # テキストボックスはポーズ中?
172
+ # ポーズ中はupdateを呼んではいけないので、ポーズ中は直前で回避している
173
+ if @parts[:box].pause?
174
+ # 1ボタンを押したとき、ポーズを解除する
175
+ @parts[:box].release if Input.pushed_any?(:btn1)
176
+ process_textbox
177
+ next
178
+ end
179
+ # テキストボックスはコマンド選択中?
180
+ if @parts[:box].selecting?
181
+ # カーソルの移動
182
+ @parts[:box].move_cursor(*Input.pushed_amount)
183
+ # 1ボタンを押したとき、選択状態を解除する
184
+ @parts[:box].finish_command if Input.pushed_any?(:btn1)
185
+ process_textbox
186
+ next
187
+ end
188
+ @parts[:box].update
189
+ process_textbox
190
+ end
@@ -0,0 +1,54 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # 画像拡大・縮小・回転サンプル
3
+ # 2009.4.12 Cyross Makoto
4
+
5
+ require 'Miyako/miyako'
6
+
7
+ include Miyako
8
+
9
+ Screen::fps_view = true
10
+
11
+ MAX = 8.0 # 最大拡大率8倍
12
+ MIN = -8.0 # 最小拡大率8分の1
13
+ RATE = 0.4 # 拡大率間隔0.4倍
14
+
15
+ @sprite = Sprite.new(:file=>"map_test/map.png", :type=>:ck).centering
16
+
17
+ # 変形対象画像を半透明にする
18
+ Bitmap.dec_alpha!(@sprite, 0.5)
19
+
20
+ # スプライトの変形中心を設定
21
+ @sprite.center_x = @sprite.ow/2
22
+ @sprite.center_y = @sprite.oh/2
23
+
24
+ # 回転角度単位を30度に設定(ラジアンに変換)
25
+ @rate = Math::PI * 2.0 * 30.0 / 360.0
26
+
27
+ xscale = 4.0 # 初期拡大率(x座標)4倍
28
+ yscale = 4.0 # 初期拡大率(y座標)4倍
29
+ angle = 0.0 # 初期回転角度0度
30
+
31
+ # 画面の中心に画像を表示指定(pre_render)
32
+ Screen.pre_render_array << [Sprite.new(:file=>"Animation1/m1ku_back.jpg", :type=>:ac).centering, @sprite]
33
+
34
+ # 画面の変形中心を設定
35
+ Screen.center_x = Screen.w/2
36
+ Screen.center_y = Screen.h/2
37
+
38
+ Miyako.main_loop do
39
+ break if Input.quit_or_escape?
40
+ Screen.pre_render
41
+ # 回転
42
+ # Bitmap.rotate(@sprite, Screen, angle)
43
+ # 拡大/縮小
44
+ # Bitmap.scale(@sprite, Screen, xscale, yscale)
45
+ # 回転/拡大/縮小
46
+ Bitmap.transform(@sprite, Screen, angle, xscale, yscale)
47
+ # 拡大縮小率の変更
48
+ xscale -= RATE
49
+ xscale = MAX if xscale < MIN
50
+ yscale -= RATE
51
+ yscale = MAX if yscale < MIN
52
+ # 回転角度の変更
53
+ angle = (angle + @rate) % (Math::PI*2.0)
54
+ end
@@ -0,0 +1,73 @@
1
+ # Utility.product_linerサンプル
2
+ # 2009.4.12 Cyross Makoto
3
+
4
+ require 'Miyako/miyako'
5
+
6
+ # 色配列(Enumerator)
7
+ Colors = [[0,0,255], # 青色
8
+ [0,255,0], # 緑色
9
+ [0,255,255], # 水色
10
+ [255,0,0], # 赤色
11
+ [255,0,255], # 紫色
12
+ [255,255,0], # 黄色
13
+ [255,255,255] # 白色
14
+ ].cycle
15
+
16
+ # 線形配列生成メソッドを用意
17
+ def draw_liner(sprite, info)
18
+ # 画面の真ん中から指定の位置までの線形配列を、
19
+ # 1~16間ランダム値の刻みで作成する
20
+ square = Miyako::Square.new(
21
+ Miyako::Screen.w/2, Miyako::Screen.h/2,
22
+ rand(Miyako::Screen.w), rand(Miyako::Screen.h)
23
+ )
24
+ amount = rand(16)+1
25
+ # 線形配列を作成
26
+ array = Miyako::Utility.product_liner_by_square(square, amount)
27
+ # 画像内容の消去
28
+ sprite.fill([0,0,0,0])
29
+ # 配列の位置を元に矩形を描画
30
+ array.each{|pos| Miyako::Drawing.rect(sprite, pos+[amount,amount], Colors.next)}
31
+
32
+ info.dispose if info
33
+ info = Miyako::Shape.text(
34
+ :font => Miyako::Font.serif,
35
+ :text => "square = (#{square[0]}, #{square[1]})-(#{square[2]}, #{square[3]}), amount = #{amount}"
36
+ )
37
+
38
+ [sprite, info]
39
+ end
40
+
41
+ # 描画間隔の設定(ここでは2秒)
42
+ wait = Miyako::WaitCounter.new(2)
43
+
44
+ # 描画用スプライトの作成
45
+ screen = Miyako::Sprite.new(
46
+ :size=>Miyako::Screen.size,
47
+ :type=>:ac
48
+ )
49
+
50
+ # 情報表示用スプライト変数の用意
51
+ screen, info = draw_liner(screen, nil)
52
+
53
+ # メインループの開始
54
+ loop do
55
+ Miyako::Input.update
56
+ # Escキー押下もしくは×印クリックのときは終了
57
+ break if Miyako::Input.quit_or_escape?
58
+ # 時間が来たら画面内容の更新
59
+ if wait.finish?
60
+ screen, info = draw_liner(screen, info)
61
+ wait.start
62
+ end
63
+ # 画面の描画
64
+ # 画面の消去
65
+ Miyako::Screen.clear
66
+ # 線形配列結果の表示
67
+ screen.render
68
+ # 情報画像の表示
69
+ info.render
70
+ # 画面の更新
71
+ Miyako::Screen.render
72
+ end
73
+
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+ # Utility.product_positionサンプル
3
+ # 2009.4.12 Cyross Makoto
4
+
5
+ require 'Miyako/miyako'
6
+
7
+ # 色配列(Enumerator)
8
+ colors = [[0,0,255], # 青色
9
+ [0,255,0], # 緑色
10
+ [0,255,255], # 水色
11
+ [255,0,0], # 赤色
12
+ [255,0,255], # 紫色
13
+ [255,255,0] # 黄色
14
+ ].cycle
15
+
16
+ # 矩形サイズの設定
17
+ size = 16
18
+
19
+ # コリジョンの設定
20
+ collision = Miyako::Collision.new(Miyako::Rect.new(0,0,size,size))
21
+ position = Miyako::Point.new(0, 0)
22
+ amount = 4
23
+
24
+ # メインループの開始
25
+ loop do
26
+ Miyako::Input.update
27
+ # Escキー押下もしくは×印クリックのときは終了
28
+ break if Miyako::Input.quit_or_escape?
29
+
30
+ # キャラの位置の更新
31
+ # キーが押されたとき、移動先が画面の範囲内なら移動
32
+ # [仮移動量,座標,コリジョンサイズ,画面サイズ] の形式で取り込んで、Utility.in_bounds?メソッドで判定
33
+ move_amount = Miyako::Input.trigger_amount.map{|v| v * amount}. # 入力値 * amount = 仮移動量
34
+ zip(position, collision.rect.to_a[2..3], Miyako::Screen.size).
35
+ map{|qual|
36
+ Miyako::Utility.in_bounds?(
37
+ [qual[1],qual[1]+qual[2]-1],
38
+ [0, qual[3]-1],
39
+ qual[0]
40
+ ) ? qual[0] : 0
41
+ }
42
+ position.move(*move_amount)
43
+
44
+ array = Miyako::Utility.product_position(position,collision.rect,[size,size])
45
+
46
+ # 画面の描画
47
+ # 画面の消去
48
+ Miyako::Screen.clear
49
+
50
+ # 当たり判定の表示
51
+ array.each{|pos|
52
+ Miyako::Drawing.rect(Miyako::Screen, pos+[size,size], colors.next)
53
+ }
54
+
55
+ # 現在操作しているキャラの表示
56
+ Miyako::Drawing.rect(Miyako::Screen, position.to_a+collision.rect.to_a[2..3], [255,255,255])
57
+
58
+ # 画面の更新
59
+ Miyako::Screen.render
60
+ end
61
+
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+ # Utility.product_positionサンプル
3
+ # 内部では実数(Utility.product_position_f)で算出
4
+ # 2009.4.19 Cyross Makoto
5
+
6
+ require 'Miyako/miyako'
7
+
8
+ # 色配列(Enumerator)
9
+ colors = [[0,0,255], # 青色
10
+ [0,255,0], # 緑色
11
+ [0,255,255], # 水色
12
+ [255,0,0], # 赤色
13
+ [255,0,255], # 紫色
14
+ [255,255,0] # 黄色
15
+ ].cycle
16
+
17
+ # 矩形サイズの設定
18
+ size = 16
19
+
20
+ # コリジョンの設定
21
+ collision = Miyako::Collision.new(Miyako::Rect.new(0,0,size,size))
22
+ position = Miyako::Point.new(0, 0)
23
+ amount = 4
24
+
25
+ # メインループの開始
26
+ loop do
27
+ Miyako::Input.update
28
+ # Escキー押下もしくは×印クリックのときは終了
29
+ break if Miyako::Input.quit_or_escape?
30
+
31
+ # キャラの位置の更新
32
+ # キーが押されたとき、移動先が画面の範囲内なら移動
33
+ # [仮移動量,座標,コリジョンサイズ,画面サイズ] の形式で取り込んで、Utility.in_bounds?メソッドで判定
34
+ move_amount = Miyako::Input.trigger_amount.map{|v| v * amount}. # 入力値 * amount = 仮移動量
35
+ zip(position, collision.rect.to_a[2..3], Miyako::Screen.size).
36
+ map{|qual|
37
+ Miyako::Utility.in_bounds?(
38
+ [qual[1],qual[1]+qual[2]-1],
39
+ [0, qual[3]-1],
40
+ qual[0]
41
+ ) ? qual[0] : 0
42
+ }
43
+ position.move(*move_amount)
44
+
45
+ # 矩形上の位置の組み合わせを求める
46
+ # 内部では実数で算出
47
+ array = Miyako::Utility.product_position_f(position,collision.rect,[size,size])
48
+
49
+ # 画面の描画
50
+ # 画面の消去
51
+ Miyako::Screen.clear
52
+
53
+ # 当たり判定の表示
54
+ array.each{|pos|
55
+ Miyako::Drawing.rect(Miyako::Screen, pos+[size,size], colors.next)
56
+ }
57
+
58
+ # 現在操作しているキャラの表示
59
+ Miyako::Drawing.rect(Miyako::Screen, position.to_a+collision.rect.to_a[2..3], [255,255,255])
60
+
61
+ # 画面の更新
62
+ Miyako::Screen.render
63
+ end
64
+