UnmappedIsland ソースリファレンス - v0.1.0
    検索インデックスを準備しています...

    クラス ObjectPassiveEffects

    1つの ObjectDef が宣言する持続効果(8節)の一式。役は宣言元の今の参加から解く(PassiveEffects)。

    受け取った契機は、それを宣言している効果だけへ配る。 どの契機を受け取るかは効果自身が名乗り (PassiveEffect.relationRegistration)、こちらは名乗りのとおりに仕分けて持つ。だから契機を伝える 側は、宣言のtargetもkindも見ずに「こうなった」とだけ言えばよい。

    別なのは、輸送を走らせる口(applyTickTransfers)だけ。 輸送は寄与として登録できない(8.4節) のでこちらが走らせるしかなく、走らせる時点(積分の後、WorldObject.tick)が意味を持つ。そこだけは 「こうなった」ではなく「いま走らせろ」を受け、呼ぶ側がその時点を知っている。

    階層 (一覧を見る)

    インデックス
    effects: readonly PassiveEffect[]
    registrationsByRelation: ReadonlyMap<
        ReferenceRoot,
        readonly PropertyPassiveEffect[],
    >

    そのうち寄与として登録される効果を、契機になる関係ごとに仕分けたもの。契機を受け取らない効果まで 回さないため——役の登録は手番が実行されるたびに起き(WorldObject.joinInteraction)、持続効果を 多く持つ型ほど空振りが積もる。

    transfers: readonly TransferPassiveEffect[]

    そのうちtick毎に走る輸送(登録では効かないので、走らせる側が別に持つ)。

    • get declarations(): readonly PassiveEffect[]

      宣言されている持続効果を宣言順に挙げる。1件ずつを別々に扱う相手だけが呼ぶ——宣言ごとに絞り込む・ 1件につき1つの書き出しを作る・宣言があるかを見る、といったもの。一式をまとめて読むならreadByを呼ぶ。

      戻り値 readonly PassiveEffect[]

    • このオブジェクトが宣言する輸送(8.4節の transfer)を1 tick分走らせる。

      宣言順にそのまま適用し、互いの結果を見る(activeの命令と同じ、9節)。だから同じ値から出す 輸送を並べても在庫が二重に動くことはなく、直列に繋いだ輸送の緩衝は速度の差が作る (上流を速くすれば、その差が中間に溜まる。8.4.1節)。

      走らせている最中にownerの型が変わったら、そこで打ち切る(9.9.1節)。輸送はrangeイベントを 起こすので、その先でbecomeが走りうる。

      パラメータ

      戻り値 void

    • この一式が宣言していることを、宣言順にすべて読み上げさせる(PassiveReader参照)。

      一式をまるごと読む相手はこちらを呼ぶ。 宣言を1件ずつ取り出して読ませる形にすると、読み手の 数だけ同じ繰り返しが書き写される。

      パラメータ

      戻り値 void

    • 相手がownerから一意に辿れる関係が変わった契機を、その関係を宣言している効果へ伝える (PropertyPassiveEffect.setRelationRegistered参照。childだけは相手が定まらずsetChildRegisteredが持つ)。

      パラメータ

      戻り値 void