フェーズタイマーの追加 †えー,コードを書いてから半年くらい経ってようやくこのチャプターを書いているので, 記憶が曖昧になってしまったが,Phaseクラスにタイマーを追加した. 追加した理由はたしか以下の通り. 現状フェーズの進行を一時止める役割はwaitが持っている. waitはフェーズの進行をそのまま止めるまさにその意味である. すなわちフェーズ遷移のコンディションチェックも停止する. その一方でフェーズ遷移にウェイトを設けたい場合がある.
そこで新しくフェーズにタイマーを設けた.
タイマーはウェイトとは異なり単純に設定したタイムカウントを減らしていくだけの
汎用タイマーの役割を持つ.
フェーズ遷移時に遷移元のエンドハンドラーでタイマーをセットし,コンディションチェックでタイマーを監視すればフェーズ遷移にウェイトを与える事ができる. まあこんな感じだがタイマーの実装はいたって普通で簡単なので追加した部分だけ適当に載せておくことにする. class Phase
def initialize
@start_handler = {} # call method when phase starting
@end_handler = {} # call method before phase changing
@trans_condition_handler = {} # call method of phase change condition
@phase = nil # present phase
@next_phase = nil # next phase
@wait = 0 # wait count
@timer = 0 # timer
end
def set_timer(time)
@timer = time
end
def pred_timer
return true if !timer?
@timer -= 1
!timer?
end
def timer?
@timer > 0
end
end
set_timerでタイマーをセットして,pred_timerでカウントを減らす. |