ruby-miyako 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/README +275 -20
  2. data/extern.h +21 -1
  3. data/install_miyako.rb +5 -3
  4. data/lib/Miyako/API/audio.rb +11 -6
  5. data/lib/Miyako/API/basic_data.rb +0 -985
  6. data/lib/Miyako/API/bitmap.rb +19 -22
  7. data/lib/Miyako/API/choices.rb +203 -69
  8. data/lib/Miyako/API/collision.rb +451 -9
  9. data/lib/Miyako/API/color.rb +177 -0
  10. data/lib/Miyako/API/diagram.rb +18 -20
  11. data/lib/Miyako/API/fixedmap.rb +207 -73
  12. data/lib/Miyako/API/font.rb +111 -18
  13. data/lib/Miyako/API/i_yuki.rb +1201 -0
  14. data/lib/Miyako/API/input.rb +65 -0
  15. data/lib/Miyako/API/layout.rb +41 -29
  16. data/lib/Miyako/API/map.rb +202 -157
  17. data/lib/Miyako/API/map_event.rb +86 -19
  18. data/lib/Miyako/API/map_struct.rb +268 -0
  19. data/lib/Miyako/API/modules.rb +136 -37
  20. data/lib/Miyako/API/movie.rb +8 -8
  21. data/lib/Miyako/API/parts.rb +63 -20
  22. data/lib/Miyako/API/plane.rb +4 -4
  23. data/lib/Miyako/API/screen.rb +16 -8
  24. data/lib/Miyako/API/sprite.rb +290 -23
  25. data/lib/Miyako/API/sprite_animation.rb +23 -11
  26. data/lib/Miyako/API/sprite_list.rb +406 -183
  27. data/lib/Miyako/API/story.rb +4 -65
  28. data/lib/Miyako/API/struct_point.rb +157 -0
  29. data/lib/Miyako/API/struct_rect.rb +233 -0
  30. data/lib/Miyako/API/struct_segment.rb +641 -0
  31. data/lib/Miyako/API/struct_size.rb +158 -0
  32. data/lib/Miyako/API/struct_square.rb +253 -0
  33. data/lib/Miyako/API/textbox.rb +49 -35
  34. data/lib/Miyako/API/viewport.rb +5 -5
  35. data/lib/Miyako/API/wait_counter.rb +350 -0
  36. data/lib/Miyako/API/yuki.rb +95 -60
  37. data/lib/Miyako/EXT/raster_scroll.rb +30 -8
  38. data/lib/Miyako/EXT/slides.rb +6 -6
  39. data/lib/Miyako/miyako.rb +25 -11
  40. data/lib/miyako.rb +28 -0
  41. data/lib/miyako_require_only.rb +35 -0
  42. data/miyako_basicdata.c +201 -17
  43. data/miyako_collision.c +315 -6
  44. data/miyako_diagram.c +331 -0
  45. data/miyako_drawing.c +26 -7
  46. data/miyako_font.c +259 -129
  47. data/miyako_input_audio.c +24 -14
  48. data/miyako_layout.c +106 -8
  49. data/miyako_no_katana.c +398 -171
  50. data/miyako_sprite2.c +275 -38
  51. data/miyako_transform.c +113 -107
  52. data/miyako_utility.c +34 -48
  53. data/miyako_yuki.c +241 -0
  54. data/sample/Diagram_sample/diagram_sample_yuki2.rb +30 -30
  55. data/sample/Room3/blue.rb +19 -19
  56. data/sample/Room3/green.rb +9 -9
  57. data/sample/Room3/main.rb +12 -12
  58. data/sample/Room3/red.rb +12 -12
  59. data/sample/Room3/title.rb +15 -10
  60. data/sample/collision_test2.rb +2 -1
  61. data/sample/fixed_map_test/fixed_map_sample.rb +7 -6
  62. data/sample/map_test/main_scene.rb +12 -10
  63. data/sample/map_test/map_manager.rb +14 -13
  64. data/sample/rasterscroll.rb +5 -5
  65. data/sample/takahashi.rb +3 -3
  66. data/sample/textbox_sample.rb +7 -6
  67. data/sample/transform.rb +2 -1
  68. data/uninstall_miyako.rb +4 -1
  69. data/win/miyako_no_katana.so +0 -0
  70. metadata +15 -4
  71. data/lib/Miyako/EXT/miyako_cairo.rb +0 -62
  72. data/sample/cairo_sample.rb +0 -25
@@ -0,0 +1,177 @@
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
+ #
26
+ #色情報は、[r(赤),g(緑),b(青),a(透明度)]、[r,g,b,a(透明度)]の2種類の配列
27
+ #
28
+ #それぞれの要素の値は0〜255の範囲
29
+ #
30
+ #4要素必要な色情報に3要素の配列を渡すと、自動的に4要素目(値は255)が挿入される
31
+ #
32
+ #(注)本クラスで採用する透明度と、画像が持つ透明度とは別物
33
+ class Color
34
+ @@symbol2color = {:black => [ 0, 0, 0, 255],
35
+ :white => [255,255,255, 255],
36
+ :blue => [ 0, 0,255, 255],
37
+ :green => [ 0,255, 0, 255],
38
+ :red => [255, 0, 0, 255],
39
+ :cyan => [ 0,255,255, 255],
40
+ :purple => [255, 0,255, 255],
41
+ :yellow => [255,255, 0, 255],
42
+ :light_gray => [200,200,200, 255],
43
+ :half_gray => [128,128,128, 255],
44
+ :half_blue => [ 0, 0,128, 255],
45
+ :half_green => [ 0,128, 0, 255],
46
+ :half_red => [128, 0, 0, 255],
47
+ :half_cyan => [ 0,128,128, 255],
48
+ :half_purple => [128, 0,128, 255],
49
+ :half_yellow => [128,128, 0, 255],
50
+ :dark_gray => [ 80, 80, 80, 255],
51
+ :dark_blue => [ 0, 0, 80, 255],
52
+ :dark_green => [ 0, 80, 0, 255],
53
+ :dark_red => [ 80, 0, 0, 255],
54
+ :dark_cyan => [ 0, 80, 80, 255],
55
+ :dark_purple => [ 80, 0, 80, 255],
56
+ :dark_yellow => [ 80, 80, 0, 255]}
57
+ @@symbol2color.default = nil
58
+
59
+ #===シンボルから色情報を取得する
60
+ #_name_::色に対応したシンボル(以下の一覧参照)。存在しないシンボルを渡したときはエラーを返す
61
+ #返却値::シンボルに対応した4要素の配列
62
+ #
63
+ #シンボル:: 色配列([赤,緑,青,透明度])
64
+ #:black:: [ 0, 0, 0, 255]
65
+ #:white:: [255,255,255, 255]
66
+ #:blue:: [ 0, 0,255, 255]
67
+ #:green:: [ 0,255, 0, 255]
68
+ #:red:: [255, 0, 0, 255]
69
+ #:cyan:: [ 0,255,255, 255]
70
+ #:purple:: [255, 0,255, 255]
71
+ #:yellow:: [255,255, 0, 255]
72
+ #:light_gray:: [200,200,200, 255]
73
+ #:half_gray:: [128,128,128, 255]
74
+ #:half_blue:: [ 0, 0,128, 255]
75
+ #:half_green:: [ 0,128, 0, 255]
76
+ #:half_red:: [128, 0, 0, 255]
77
+ #:half_cyan:: [ 0,128,128, 255]
78
+ #:half_purple:: [128, 0,128, 255]
79
+ #:half_yellow:: [128,128, 0, 255]
80
+ #:dark_gray:: [ 80, 80, 80, 255]
81
+ #:dark_blue:: [ 0, 0, 80, 255]
82
+ #:dark_green:: [ 0, 80, 0, 255]
83
+ #:dark_red:: [ 80, 0, 0, 255]
84
+ #:dark_cyan:: [ 0, 80, 80, 255]
85
+ #:dark_purple:: [ 80, 0, 80, 255]
86
+ #:dark_yellow:: [ 80, 80, 0, 255]
87
+ def Color.[](name, alpha = nil)
88
+ c = (@@symbol2color[name.to_sym].dup or raise MiyakoError, "Illegal Color Name! : #{name}")
89
+ c[3] = alpha if alpha
90
+ return c
91
+ end
92
+
93
+ #===Color.[]メソッドで使用できるシンボルと色情報との対を登録する
94
+ #_name_:: 色に対応させるシンボル
95
+ #_value_:: 色情報を示す3〜4要素の配列。3要素のときは4要素目を自動的に追加する
96
+ def Color.[]=(name, value)
97
+ @@symbol2color[name.to_sym] = value
98
+ @@symbol2color[name.to_sym] << 255 if value.length == 3
99
+ end
100
+
101
+ #===様々な形式のデータを色情報に変換する
102
+ #_v_::変換対象のインスタンス。変換可能な内容は以下の一覧参照
103
+ #_alpha_::透明度。デフォルトはnil
104
+ #
105
+ #インスタンス:: 書式
106
+ #配列:: 最低3要素の数値の配列
107
+ #文字列:: ”#RRGGBB"で示す16進数の文字列、もしくは"red"、"black"など。使える文字列はColor.[]で使えるシンボルに対応
108
+ #数値:: 32bitの値を8bitずつ割り当て(aaaaaaaarrrrrrrrggggggggbbbbbbbb)
109
+ #シンボル:: Color.[]と同じ
110
+ def Color::to_rgb(v, alpha = nil)
111
+ c = (v.to_miyako_color or raise MiyakoError, "Illegal parameter")
112
+ c[3] = alpha if alpha
113
+ return c
114
+ end
115
+
116
+ #===色情報をColor.[]メソッドで使用できるシンボルと色情報との対を登録する
117
+ #_cc_:: 色情報(シンボル、文字列)
118
+ #_value_:: 色情報を示す3〜4要素の配列。3要素のときは4要素目を自動的に追加する
119
+ def Color::to_s(cc)
120
+ c = to_rgb(cc)
121
+ return "[#{c[0]},#{c[1]},#{c[2]},#{c[3]}]"
122
+ end
123
+ end
124
+ end
125
+
126
+ # for duck typing
127
+ class Object
128
+ def to_miyako_color #:nodoc:
129
+ raise Miyako::MiyakoError, "Illegal color parameter class!"
130
+ end
131
+ end
132
+
133
+ class String
134
+ def to_miyako_color #:nodoc:
135
+ case self
136
+ when /\A\[\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*(\d+)\s*\]\z/
137
+ #4要素の配列形式
138
+ return [$1.to_i, $2.to_i, $3.to_i, $4.to_i]
139
+ when /\A\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\z/
140
+ #4個の数列形式
141
+ return [$1.to_i, $2.to_i, $3.to_i, $4.to_i]
142
+ when /\A\#([\da-fA-F]{8})\z/
143
+ #HTML形式(#RRGGBBAA)
144
+ return [$1[0,2].hex, $1[2,2].hex, $1[4,2].hex, $1[6,2].hex]
145
+ when /\A\[\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\]\z/
146
+ #3要素の配列形式
147
+ return [$1.to_i, $2.to_i, $3.to_i, 255]
148
+ when /\A\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\z/
149
+ #3個の数列方式
150
+ [$1.to_i, $2.to_i, $3.to_i, 255]
151
+ when /\A\#([\da-fA-F]{6})\z/
152
+ #HTML形式(#RRGGBB)
153
+ return [$1[0,2].hex, $1[2,2].hex, $1[4,2].hex, 255]
154
+ else return self.to_sym.to_miyako_color
155
+ end
156
+ end
157
+ end
158
+
159
+ class Symbol
160
+ def to_miyako_color #:nodoc:
161
+ return Miyako::Color[self]
162
+ end
163
+ end
164
+
165
+ class Integer
166
+ def to_miyako_color #:nodoc:
167
+ return [(self >> 16) & 0xff, (self >> 8) & 0xff, self & 0xff, (self >> 24) & 0xff]
168
+ end
169
+ end
170
+
171
+ class Array
172
+ def to_miyako_color #:nodoc:
173
+ raise Miyako::MiyakoError, "Color Array needs more than 3 elements : #{self.length} elements" if self.length < 3
174
+ return (self[0,3] << 255) if self.length == 3
175
+ return self[0,4]
176
+ end
177
+ end
@@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
23
  module Miyako
24
24
  #==遷移図モジュール群
25
25
  module Diagram
26
-
26
+
27
27
  #==遷移図矢印構造体
28
28
  #ノードの移動先とトリガー(遷移条件)を収めている。
29
29
  #to::移動先ノードのインスタンス
@@ -68,7 +68,7 @@ module Miyako
68
68
  #_params_:: Processor::update_inputメソッドが呼ばれた時のパラメータ群。オーバーライドするときに省略可能
69
69
  def update_input(*params)
70
70
  end
71
-
71
+
72
72
  #===ノードでの更新処理を実装する
73
73
  #Processor#update メソッドが呼ばれたときの処理を実装する
74
74
  #_params_:: Processor::updateメソッドが呼ばれた時のパラメータ群。オーバーライドするときに省略可能
@@ -80,7 +80,7 @@ module Miyako
80
80
  #Processor#reset_input メソッドが呼ばれたときの処理を実装する
81
81
  def reset_input
82
82
  end
83
-
83
+
84
84
  #===ノードでのレンダリング処理を実装する
85
85
  #Screen.update メソッドを呼び出しているときは、本メソッドを実装する必要はない
86
86
  #Processor#render メソッドが呼ばれたときの処理を実装する
@@ -95,7 +95,7 @@ module Miyako
95
95
  def finish?
96
96
  return false
97
97
  end
98
-
98
+
99
99
  #===現在実行しているノードの変数の値を取得するテンプレートメソッド
100
100
  #Diagram#[] メソッドが呼ばれたときの処理を実装する
101
101
  #
@@ -143,12 +143,12 @@ module Miyako
143
143
  #Processor#start メソッドが呼び出されたときの処理を実装する
144
144
  def pre_process
145
145
  end
146
-
146
+
147
147
  #===後始末を実装する
148
148
  #Processor#stop メソッドが呼び出されたときの処理を実装する
149
149
  def post_process
150
150
  end
151
-
151
+
152
152
  #===ノードの更新処理を行うかどうかの問い合わせメソッドを実装する
153
153
  #NodeBase#update を呼び出すかどうかを返す処理を実装する
154
154
  #デフォルトでは、無条件で true を返す
@@ -161,7 +161,7 @@ module Miyako
161
161
  #NodeBase#update を呼び出された後の処理を実装する
162
162
  def post_update
163
163
  end
164
-
164
+
165
165
  #===ノードのレンダリング処理を行うかどうかの問い合わせメソッドを実装する
166
166
  #NodeBase#render を呼び出すかどうかを返す処理を実装する
167
167
  #デフォルトでは、無条件で true を返す
@@ -170,7 +170,7 @@ module Miyako
170
170
  def render?
171
171
  return true
172
172
  end
173
-
173
+
174
174
  #===ノードのレンダリング処理が終わった後の後始末を行う
175
175
  #Screen.update メソッドを呼び出しているときは、本メソッドを実装する必要はない
176
176
  #NodeBase#render を呼び出された後の処理を実装する
@@ -234,7 +234,7 @@ module Miyako
234
234
  def update_input(*params) #:nodoc:
235
235
  @node.update_input(*params)
236
236
  end
237
-
237
+
238
238
  def update(*params) #:nodoc:
239
239
  if @trigger.update?
240
240
  @node.update(*params)
@@ -270,7 +270,7 @@ module Miyako
270
270
  #_new_trigger_:: 置き換え対象のトリガーオブジェクト
271
271
  #_timing_:: 置き換えのタイミング。:immediateと:nextの2種類がある
272
272
  def replace_trigger(new_trigger, timing=:next)
273
- raise MiyakoError, "I can't understand Timing Typ! : #{timing}" unless TRIGGER_TYPES.include?(timing)
273
+ raise MiyakoError, "I can't understand Timing Type! : #{timing}" unless TRIGGER_TYPES.include?(timing)
274
274
  case timing
275
275
  when :immediate
276
276
  @trigger.stop
@@ -281,7 +281,7 @@ module Miyako
281
281
  @next_trigger = new_trigger
282
282
  end
283
283
  end
284
-
284
+
285
285
  def dispose #:nodoc:
286
286
  @node.dispose
287
287
  end
@@ -345,7 +345,7 @@ module Miyako
345
345
  @name2idx[from_name].add_arrow(to_name ? @name2idx[to_name] : nil, trigger)
346
346
  return self
347
347
  end
348
-
348
+
349
349
  #===対象の名前を持つノードを取得する
350
350
  #ノード内の変数にアクセスするときに使う
351
351
  #_name_:: ノード名
@@ -354,7 +354,7 @@ module Miyako
354
354
  raise MiyakoError, "Don't set undefined node name!" unless @name2idx.has_key?(name)
355
355
  return @name2idx[name]
356
356
  end
357
-
357
+
358
358
  #===実行開始ノードを変更する
359
359
  #但し、遷移図処理が行われていないときに変更可能
360
360
  #_name_:: ノード名
@@ -382,7 +382,7 @@ module Miyako
382
382
  def nodes
383
383
  return @name2idx.keys
384
384
  end
385
-
385
+
386
386
  def start #:nodoc:
387
387
  @ptr = @first unless @ptr
388
388
  return unless @ptr
@@ -407,7 +407,7 @@ module Miyako
407
407
  def update_input(*params) #:nodoc:
408
408
  @ptr.update_input(*params) if @ptr
409
409
  end
410
-
410
+
411
411
  def update(*params) #:nodoc:
412
412
  return unless @ptr
413
413
  @ptr.update(*params)
@@ -472,7 +472,6 @@ module Miyako
472
472
  #(Manager#add, Manager#add_arrow の各メソッドを参照)
473
473
  #返却値:: 生成されたインスタンス
474
474
  def initialize
475
- @loop = self.method(:main_loop)
476
475
  @states = {:execute => false, :pause => false, :type1 => false }
477
476
  @diagram = Miyako::Diagram::Manager.new
478
477
  @visible = true
@@ -480,7 +479,6 @@ module Miyako
480
479
  end
481
480
 
482
481
  def initialize_copy(obj) #:nodocs:
483
- @loop = @loop.dup
484
482
  @states = @states.dup
485
483
  @diagram = @diagram.dup
486
484
  end
@@ -520,7 +518,7 @@ module Miyako
520
518
  return if @states[:pause]
521
519
  @diagram.update_input(*params)
522
520
  end
523
-
521
+
524
522
  #===処理の更新を行う
525
523
  #現在処理中のノードupdateメソッドを呼び出す。
526
524
  #_params_:: パラメータ群。省略可能
@@ -529,7 +527,7 @@ module Miyako
529
527
  @diagram.update(*params)
530
528
  @states[:execute] = false if @diagram.finish?
531
529
  end
532
-
530
+
533
531
  #===レンダリング処理を行う
534
532
  #現在処理中のノードのrenderメソッドを呼び出す。
535
533
  #visibleメソッドの値がfalseのときは描画されない。
@@ -556,7 +554,7 @@ module Miyako
556
554
  def renderer
557
555
  return Miyako::Diagram::Renderer.new(self.method(:render))
558
556
  end
559
-
557
+
560
558
  #===指定した名前のノードを取得する
561
559
  #_name_:: ノード名(文字列・シンボル)
562
560
  #返却値:: ノード名に対応したノードのインスタンス