目次へもどる

フェーズタイマーの追加

えー,コードを書いてから半年くらい経ってようやくこのチャプターを書いているので, 記憶が曖昧になってしまったが,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でカウントを減らす.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-30 (金) 22:04:39 (1846d)