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.
- data/README +275 -20
- data/install_miyako.rb +5 -3
- data/lib/Miyako/API/audio.rb +11 -6
- data/lib/Miyako/API/basic_data.rb +0 -985
- data/lib/Miyako/API/bitmap.rb +19 -22
- data/lib/Miyako/API/choices.rb +203 -69
- data/lib/Miyako/API/collision.rb +451 -9
- data/lib/Miyako/API/color.rb +177 -0
- data/lib/Miyako/API/diagram.rb +18 -20
- data/lib/Miyako/API/fixedmap.rb +207 -73
- data/lib/Miyako/API/font.rb +111 -18
- data/lib/Miyako/API/i_yuki.rb +1201 -0
- data/lib/Miyako/API/input.rb +65 -0
- data/lib/Miyako/API/layout.rb +41 -29
- data/lib/Miyako/API/map.rb +202 -157
- data/lib/Miyako/API/map_event.rb +86 -19
- data/lib/Miyako/API/map_struct.rb +268 -0
- data/lib/Miyako/API/modules.rb +136 -37
- data/lib/Miyako/API/movie.rb +8 -8
- data/lib/Miyako/API/parts.rb +63 -20
- data/lib/Miyako/API/plane.rb +4 -4
- data/lib/Miyako/API/screen.rb +16 -8
- data/lib/Miyako/API/sprite.rb +290 -23
- data/lib/Miyako/API/sprite_animation.rb +23 -11
- data/lib/Miyako/API/sprite_list.rb +406 -183
- data/lib/Miyako/API/story.rb +4 -65
- data/lib/Miyako/API/struct_point.rb +157 -0
- data/lib/Miyako/API/struct_rect.rb +233 -0
- data/lib/Miyako/API/struct_segment.rb +641 -0
- data/lib/Miyako/API/struct_size.rb +158 -0
- data/lib/Miyako/API/struct_square.rb +253 -0
- data/lib/Miyako/API/textbox.rb +49 -35
- data/lib/Miyako/API/viewport.rb +5 -5
- data/lib/Miyako/API/wait_counter.rb +350 -0
- data/lib/Miyako/API/yuki.rb +95 -60
- data/lib/Miyako/EXT/raster_scroll.rb +30 -8
- data/lib/Miyako/EXT/slides.rb +6 -6
- data/lib/Miyako/miyako.rb +25 -11
- data/lib/Miyako/miyako_no_katana.so +0 -0
- data/lib/miyako.rb +28 -0
- data/lib/miyako_require_only.rb +35 -0
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +30 -30
- data/sample/Room3/blue.rb +19 -19
- data/sample/Room3/green.rb +9 -9
- data/sample/Room3/main.rb +12 -12
- data/sample/Room3/red.rb +12 -12
- data/sample/Room3/title.rb +15 -10
- data/sample/collision_test2.rb +2 -1
- data/sample/fixed_map_test/fixed_map_sample.rb +7 -6
- data/sample/map_test/main_scene.rb +12 -10
- data/sample/map_test/map_manager.rb +14 -13
- data/sample/rasterscroll.rb +5 -5
- data/sample/takahashi.rb +3 -3
- data/sample/textbox_sample.rb +8 -5
- data/sample/transform.rb +2 -1
- data/uninstall_miyako.rb +4 -1
- metadata +13 -4
- data/lib/Miyako/EXT/miyako_cairo.rb +0 -62
- 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
|
+
|