*光源 [#t30fdfd8]
**構造体 [#i3f59171]
light_source は位置情報を持つ物体(現在はobjとmonst)にくっつけることができ、 type と id で識別される

|type|id|備考|h
|LS_OBJECT|struct obj *|oil lampなど|
|LS_MONSTER|struct monst *|yellow lightなど|

**光源とタイマー [#nf063cd0]
永久光源は[[タイマー]]を使用しない。寿命があるものは以下のように[[タイマー]]と obj->age を利用している。

***消灯時 [#n4dd7df8]
obj->age は残りターン数
***点灯時 [#fc4b6eed]
obj->age は「タイマーが0になった後の残りターン数」
-brass lantern, oil lamp: 150, 100, 50, 25, 0
-Candelabrum of Invocation, tallow candle, wax candle: 75, 15, 0

タイマーが0になったときに、burn_object() が obj->age を上記のマジックナンバーと比較し、一致したらメッセージを出し、begin_burn() を呼んで新たなタイマーをセット
-obj->age がこれらの特定の値になるようにセットしているのは begin_burn()
-obj->age が 1000 の oil lamp に対して begin_burn() を呼ぶと、期間850のタイマーがセットされ、obj->age は 150 となる
-begin_burn() → burn_object() → begin_burn() → burn_object() → end_burn() → stop_timer() → cleanup_burn()

**注意 [#g1f68055]
光源のように、obj->age を時刻としてではなく相対時間の値として扱うオブジェクトは、[[age_is_relative]]() に対して TRUE を返す必要がある。そうでないと ice box に入れていた期間の分だけ obj->age が増加してしまう。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS