ruby-miyako-mswin32 2.1.0 → 2.1.1

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 (59) hide show
  1. data/README +275 -20
  2. data/install_miyako.rb +5 -3
  3. data/lib/Miyako/API/audio.rb +11 -6
  4. data/lib/Miyako/API/basic_data.rb +0 -985
  5. data/lib/Miyako/API/bitmap.rb +19 -22
  6. data/lib/Miyako/API/choices.rb +203 -69
  7. data/lib/Miyako/API/collision.rb +451 -9
  8. data/lib/Miyako/API/color.rb +177 -0
  9. data/lib/Miyako/API/diagram.rb +18 -20
  10. data/lib/Miyako/API/fixedmap.rb +207 -73
  11. data/lib/Miyako/API/font.rb +111 -18
  12. data/lib/Miyako/API/i_yuki.rb +1201 -0
  13. data/lib/Miyako/API/input.rb +65 -0
  14. data/lib/Miyako/API/layout.rb +41 -29
  15. data/lib/Miyako/API/map.rb +202 -157
  16. data/lib/Miyako/API/map_event.rb +86 -19
  17. data/lib/Miyako/API/map_struct.rb +268 -0
  18. data/lib/Miyako/API/modules.rb +136 -37
  19. data/lib/Miyako/API/movie.rb +8 -8
  20. data/lib/Miyako/API/parts.rb +63 -20
  21. data/lib/Miyako/API/plane.rb +4 -4
  22. data/lib/Miyako/API/screen.rb +16 -8
  23. data/lib/Miyako/API/sprite.rb +290 -23
  24. data/lib/Miyako/API/sprite_animation.rb +23 -11
  25. data/lib/Miyako/API/sprite_list.rb +406 -183
  26. data/lib/Miyako/API/story.rb +4 -65
  27. data/lib/Miyako/API/struct_point.rb +157 -0
  28. data/lib/Miyako/API/struct_rect.rb +233 -0
  29. data/lib/Miyako/API/struct_segment.rb +641 -0
  30. data/lib/Miyako/API/struct_size.rb +158 -0
  31. data/lib/Miyako/API/struct_square.rb +253 -0
  32. data/lib/Miyako/API/textbox.rb +49 -35
  33. data/lib/Miyako/API/viewport.rb +5 -5
  34. data/lib/Miyako/API/wait_counter.rb +350 -0
  35. data/lib/Miyako/API/yuki.rb +95 -60
  36. data/lib/Miyako/EXT/raster_scroll.rb +30 -8
  37. data/lib/Miyako/EXT/slides.rb +6 -6
  38. data/lib/Miyako/miyako.rb +25 -11
  39. data/lib/Miyako/miyako_no_katana.so +0 -0
  40. data/lib/miyako.rb +28 -0
  41. data/lib/miyako_require_only.rb +35 -0
  42. data/sample/Diagram_sample/diagram_sample_yuki2.rb +30 -30
  43. data/sample/Room3/blue.rb +19 -19
  44. data/sample/Room3/green.rb +9 -9
  45. data/sample/Room3/main.rb +12 -12
  46. data/sample/Room3/red.rb +12 -12
  47. data/sample/Room3/title.rb +15 -10
  48. data/sample/collision_test2.rb +2 -1
  49. data/sample/fixed_map_test/fixed_map_sample.rb +7 -6
  50. data/sample/map_test/main_scene.rb +12 -10
  51. data/sample/map_test/map_manager.rb +14 -13
  52. data/sample/rasterscroll.rb +5 -5
  53. data/sample/takahashi.rb +3 -3
  54. data/sample/textbox_sample.rb +8 -5
  55. data/sample/transform.rb +2 -1
  56. data/uninstall_miyako.rb +4 -1
  57. metadata +13 -4
  58. data/lib/Miyako/EXT/miyako_cairo.rb +0 -62
  59. data/sample/cairo_sample.rb +0 -25
@@ -0,0 +1,350 @@
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 WaitCounter
26
+ SECOND2TICK = 1000
27
+
28
+ @@callbacks = {}
29
+ @@post_callbacks = {}
30
+ @@initialized = false
31
+
32
+ #WaitCounterインスタンス固有の名前
33
+ #デフォルトはインスタンスIDを文字列化したもの
34
+ attr_accessor :name
35
+
36
+ #===起算時からのミリ秒数を取得する
37
+ #起算時からのミリ秒数を整数で取得する
38
+ #返却値:: 起算時からのミリ秒数(整数)
39
+ def WaitCounter.tick
40
+ return SDL.getTicks
41
+ end
42
+
43
+ #===起算時からのミリ秒数を取得する
44
+ #起算時からのミリ秒数を整数で取得する
45
+ #返却値:: 起算時からのミリ秒数(整数)
46
+ def WaitCounter.ticks
47
+ return SDL.getTicks
48
+ end
49
+
50
+ def WaitCounter.get_second_to_tick(s) #:nodoc:
51
+ return (SECOND2TICK * s).to_i
52
+ end
53
+
54
+ #===コールバックハッシュを参照する
55
+ #コールバック処理を登録しているハッシュを参照する
56
+ #キー(WaitCounterインスタンス)に対応する中身は配列になっており、
57
+ #[block(callするブロック), loops(呼び出し回数(設定値)), count(呼び出し回数(現在値))]
58
+ #で構成される
59
+ def WaitCounter.callbacks
60
+ @@callbacks
61
+ end
62
+
63
+ #===コールバックハッシュを参照する
64
+ #コールバック処理を登録しているハッシュを参照する
65
+ #キー(WaitCounterインスタンス)に対応する中身は配列になっており、
66
+ #[block(callするブロック), loops(呼び出し回数(設定値)), count(呼び出し回数(現在値))]
67
+ #で構成される
68
+ def WaitCounter.post_callbacks
69
+ @@post_callbacks
70
+ end
71
+
72
+ def WaitCounter.callback_inner(hash) #:nodoc:
73
+ hash.each{|wait, array|
74
+ next unless wait.executing?
75
+ if wait.finished?
76
+ callback[0].call(wait, array[1], array[2])
77
+ if array[1] > 0 && array[1] == array[2]
78
+ wait.stop
79
+ else
80
+ array[2] = array[2] + 1 if array[1] > 0
81
+ wait.start
82
+ end
83
+ end
84
+ }
85
+ end
86
+
87
+ #===コールバック処理を更新する
88
+ #Miyako.main_loop内では、Screen.clearが呼ばれる直前(画面消去直前)に呼ばれる
89
+ #WaitCounterの処理を確認して、タイマーが制限時間オーバーしたら登録しているブロックを評価する
90
+ def WaitCounter.update
91
+ WaitCounter.callback_inner(@@callbacks)
92
+ end
93
+
94
+ #===コールバック処理を更新する
95
+ #Miyako.main_loop内では、Screen.renderが呼ばれる直前(画面更新直前)に呼ばれる
96
+ #WaitCounterの処理を確認して、タイマーが制限時間オーバーしたら登録しているブロックを評価する
97
+ def WaitCounter.post_update
98
+ WaitCounter.callback_inner(@@post_callbacks)
99
+ end
100
+
101
+ #===インスタンスを生成する
102
+ #_seconds_:: タイマーとして設定する秒数(実数で指定可能)
103
+ #_name_:: インスタンス固有の名称。デフォルトはnil
104
+ #(nilを渡した場合、インスタンスIDを文字列化したものが名称になる)
105
+ #返却値:: 生成されたインスタンス
106
+ def initialize(seconds, name=nil)
107
+ @seconds = seconds
108
+ @name = name ? name : __id__.to_s
109
+ @wait = WaitCounter.get_second_to_tick(@seconds)
110
+ @st = 0
111
+ @counting = false
112
+ end
113
+
114
+ #===自分自身をコールバック処理に追加する
115
+ #Miyako.main_loop内では、Screen.clearが呼ばれる直前(画面消去直前)にブロックが評価される
116
+ #コールバックは、レシーバが明示的に起動している間だけ呼ばれる
117
+ #(ただし、繰り返し呼ばれているときは、自動的にタイマーを再起動する
118
+ # また、呼び出し回数が既定値に達したときは自動的にタイマーを終了する)
119
+ #呼び出し時にブロックを渡さないと例外が発生する
120
+ #また、既にappend_post_callbackメソッドで別のコールバックに登録されているときも例外が発生する
121
+ #引数として、呼び出し回数を渡す
122
+ #無限に呼び出すときは0以下の値を渡す。省略時は0を渡す
123
+ #渡される引数は、(レシーバ,呼び出し回数(設定値),呼び出し回数(現在数))で構成される
124
+ #_calls_:: レシーバの呼び出し回数。無限に呼び出すときは0以下の値を渡す。省略時は0を渡す
125
+ #返却値:: レシーバ
126
+ def append_callback(calls = 0, &block)
127
+ raise MiyakoError, "This method needs some block!" unless block_given?
128
+ raise MiyakoError, "This instance registerd to post_callback!" if @@post_callbacks.has_key?(self)
129
+ @@callbacks[self] = [block, calls, 1]
130
+ self
131
+ end
132
+
133
+ #===自分自身をコールバック処理に追加する
134
+ #Miyako.main_loop内では、Screen.renderが呼ばれる直前(画面更新直前)にブロックが評価される
135
+ #コールバックは、レシーバが明示的に起動している間だけ呼ばれる
136
+ #(ただし、繰り返し呼ばれているときは、自動的にタイマーを再起動する
137
+ # また、呼び出し回数が既定値に達したときは自動的にタイマーを終了する)
138
+ #呼び出し時にブロックを渡さないと例外が発生する
139
+ #また、既にappend_callbackメソッドで別のコールバックに登録されているときも例外が発生する
140
+ #引数として、呼び出し回数を渡す
141
+ #無限に呼び出すときは0以下の値を渡す。省略時は0を渡す
142
+ #渡される引数は、(レシーバ,呼び出し回数(設定値),呼び出し回数(現在数))で構成される
143
+ #_calls_:: レシーバの呼び出し回数。無限に呼び出すときは0以下の値を渡す。省略時は0を渡す
144
+ #返却値:: レシーバ
145
+ def append_post_callback(calls = 0, &block)
146
+ raise MiyakoError, "This method needs some block!" unless block_given?
147
+ raise MiyakoError, "This instance registerd to callback!" if @@callbacks.has_key?(self)
148
+ @@post_callbacks[self] = [block, calls, 1]
149
+ self
150
+ end
151
+
152
+ #===自分自身をコールバック処理から解除する
153
+ #コールバックに登録されていないレシーバを指定したときは例外が発生する
154
+ #返却値:: レシーバ
155
+ def remove_callback
156
+ @@callbacks.delete(self) || raise(MiyakoError, "This instance unregisterd to callback!")
157
+ self
158
+ end
159
+
160
+ #===自分自身をコールバック処理から解除する
161
+ #コールバックに登録されていないレシーバを指定したときは例外が発生する
162
+ #返却値:: レシーバ
163
+ def remove_post_callback
164
+ @@post_callbacks.delete(self) || raise(MiyakoError, "This instance unregisterd to post-callback!")
165
+ self
166
+ end
167
+
168
+ #===コールバックを指定したときの呼び出し数を求める
169
+ #コールバックに登録されていないレシーバを指定したときはnilを返す
170
+ #返却値:: 整数もしくはnil
171
+ def callback_calls
172
+ array = @@callbacks[self] || @@post_callbacks[self]
173
+ return nil unless array
174
+ array[1]
175
+ end
176
+
177
+ #===コールバックを指定したときの現在の呼び出し数を求める
178
+ #コールバックに登録されていないレシーバを指定したときはnilを返す
179
+ #呼び出し回数が無限の時は-1を返す
180
+ #返却値:: -1以上の整数もしくはnil
181
+ def callback_count
182
+ array = @@callbacks[self] || @@post_callbacks[self]
183
+ return nil unless array
184
+ return -1 if array[1] <= 0
185
+ return array[2] if @counting==false && array[1] == array[2]
186
+ array[2] - 1
187
+ end
188
+
189
+ #===コールバックブロック内部でコールバックを終了させる
190
+ #コールバック内部で、何らかの理由で次からのコールバックを行わせないときに呼び出す
191
+ #コールバック回数が規定の回数に達したのと同じ効果を与えている
192
+ #現在実行しているブロックには、このメソッドによる影響を受けない
193
+ #返却値:: レシーバ
194
+ def stop_callback_inner
195
+ array = @@callbacks[self] || @@post_callbacks[self] || raise(MiyakoError, "This instance unregisterd to post-callback!")
196
+ array[2] = array[1]
197
+ return self
198
+ end
199
+
200
+ #===設定されているウェイトの長さを求める
201
+ #ウェイトの長さをミリ秒単位で取得する
202
+ #返却値:: ウェイトの長さ
203
+ def length
204
+ return @wait
205
+ end
206
+
207
+ alias :size :length
208
+
209
+ #===開始からの経過時間を求める
210
+ #タイマー実行中のとき現在の経過時間をミリ秒単位(0以上の整数)で取得する
211
+ #制限時間を超えていれば、制限時間+1を返す
212
+ #まだスタートしてないときは-1を返す
213
+ #返却値:: 現在の経過長
214
+ def now
215
+ if @stop_tick
216
+ cnt = @stop_tick - @st
217
+ return @wait < cnt ? @wait+1 : cnt
218
+ end
219
+ return -1 unless @counting
220
+ cnt = SDL.getTicks - @st
221
+ return @wait < cnt ? @wait+1 : cnt
222
+ end
223
+
224
+ #===開始からの残り時間を求める
225
+ #タイマー実行中のとき、残り時間の長さをミリ秒単位(0以上の整数)で取得する
226
+ #制限時間を超えていれば-1を返す
227
+ #まだスタートしてないときは制限時間+1を返す
228
+ #返却値:: 残り時間の長さ
229
+ def remain
230
+ if @stop_tick
231
+ cnt = @stop_tick - @st
232
+ return @wait < cnt ? -1 : @wait - cnt
233
+ end
234
+ return @wait+1 unless @counting
235
+ cnt = SDL.getTicks - @st
236
+ return @wait < cnt ? -1 : @wait - cnt
237
+ end
238
+
239
+ alias :remind :remain
240
+
241
+ #===タイマー処理を開始状態にする
242
+ #返却値:: 自分自身を返す
243
+ def start
244
+ @st = SDL.getTicks
245
+ @stop_tick = nil
246
+ @counting = true
247
+ return self
248
+ end
249
+
250
+ #===タイマー処理を停止状態にする
251
+ #この状態で、startメソッドを呼ぶと、開始前の状態に戻って処理を開始する
252
+ #resumeメソッドを呼ぶと、停止直前の状態に戻って処理を開始する
253
+ #返却値:: 自分自身を返す
254
+ def stop
255
+ @stop_tick = SDL.getTicks
256
+ @counting = false
257
+ return self
258
+ end
259
+
260
+ #===タイマーを開始前の状態に戻す
261
+ #remain,nowの結果がstart前の状態に戻る
262
+ #ただし、停止中の時にしか戻せない
263
+ #返却値:: 自分自身を返す
264
+ def reset
265
+ return self if @counting
266
+ @st = 0
267
+ @stop_tick = nil
268
+ return self
269
+ end
270
+
271
+ #===タイマー処理を再会する
272
+ #停止前の状態から再びタイマー処理を開始する
273
+ #返却値:: 自分自身を返す
274
+ def resume
275
+ return self unless @stop_tick
276
+ @st += (SDL.getTicks - @stop_tick)
277
+ @stop_tick = nil
278
+ @counting = true
279
+ return self
280
+ end
281
+
282
+ #===タイマー処理中かを返す
283
+ #タイマー処理中ならばtrue、停止中ならばfalseを返す
284
+ #返却値:: タイマー処理中かどうかを示すフラグ
285
+ def execute?
286
+ @counting
287
+ end
288
+
289
+ alias :executing? :execute?
290
+
291
+ def wait_inner(f) #:nodoc:
292
+ now_time = @stop_tick ? @stop_tick : SDL.getTicks
293
+ (now_time - @st) >= @wait ? !f : f
294
+ end
295
+
296
+ private :wait_inner
297
+
298
+ #===タイマー処理中かを返す
299
+ #タイマー処理中ならばtrue、停止中ならばfalseを返す
300
+ #返却値:: タイマー処理中かどうかを示すフラグ
301
+ def waiting?
302
+ return wait_inner(true)
303
+ end
304
+
305
+ #===タイマーが制限時間に達したかを返す
306
+ #タイマーが制限時間に達した(もしくはオーバーした)らtrue、制限時間内ならfalseを返す
307
+ #タイマーが
308
+ #返却値:: タイマー処理が終わったかどうかを示すフラグ
309
+ def finish?
310
+ return wait_inner(false)
311
+ end
312
+
313
+ alias :finished? :finish?
314
+
315
+ def wait #:nodoc:
316
+ st = SDL.getTicks
317
+ t = SDL.getTicks
318
+ until (t - st) >= @wait do
319
+ t = SDL.getTicks
320
+ end
321
+ return self
322
+ end
323
+
324
+ #===残り時間に応じたブロックを呼び出す
325
+ #タイマー処理の状態に応じてブロックを評価して、その結果を渡す
326
+ #タイマー開始前はpre、タイマー実行中はwaiting、制限時間オーバー後はpostに渡したブロックを評価する
327
+ #callを呼び出すときに、ブロックに渡すparamsの数とブロックで定義したparamsの数との整合に注意する(例外が発生する)
328
+ #_waiting_:: タイマー実行中に行うブロック。省略時は空のブロックを渡す
329
+ #_pre_:: タイマー開始前に行うブロック。省略時は空のブロックを渡す
330
+ #_post_:: タイマー制限時間オーバ後に実行中に行うブロック。省略時は空のブロックを渡す
331
+ #_params_:: ブロックに渡す引数。可変引数
332
+ #返却値:: 各ブロックを評価した結果
333
+ def call(waiting=lambda{|*params|}, pre=lambda{|*params|}, post=lambda{|*params|}, *params)
334
+ case self.now
335
+ when -1
336
+ return pre.call(*params)
337
+ when @wait+1
338
+ return post.call(*params)
339
+ else
340
+ return waiting.call(*params)
341
+ end
342
+ end
343
+
344
+ #===インスタンスないで所持している領域を開放する
345
+ #(現段階ではダミー)
346
+ def dispose
347
+ end
348
+ end
349
+ end
350
+