[[目次へもどる>PuyoPuyo]] * フェーズタイマーの追加 [#r35e357d] #contents えー,コードを書いてから半年くらい経ってようやくこのチャプターを書いているので, 記憶が曖昧になってしまったが,Phaseクラスにタイマーを追加した. 追加した理由はたしか以下の通り. 現状フェーズの進行を一時止める役割はwaitが持っている. waitはフェーズの進行をそのまま止めるまさにその意味である. すなわちフェーズ遷移のコンディションチェックも停止する. その一方でフェーズ遷移にウェイトを設けたい場合がある. そこで新しくフェーズにタイマーを設けた. タイマーはウェイトとは異なり単純に設定したタイムカウントを減らしていくだけの 汎用タイマーの役割を持つ. フェーズ遷移時に遷移元のエンドハンドラーでタイマーをセットし,コンディションチェックでタイマーを監視すればフェーズ遷移にウェイトを与える事ができる.~ (さらに半年後読み直したが何を言いたいのかさっぱりわからなかった)~ ともかくウェイトしつつコンディションチェックを行えるらしい. まあこんな感じだがタイマーの実装はいたって普通で簡単なので追加した部分だけ適当に載せておくことにする. #sh(ruby){{ 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でカウントを減らす.