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

    クラス PropertyPassiveEffect抽象

    対象プロパティへ寄与として登録される持続効果(modify/add)。

    2つは別クラスで表し、判別用のkindは持たない。唯一の差は「PropertyValueのどちらのincomingへ 登録されるか」で、registerIntoの実装で表現する。

    登録先の解決と登録/解除はtargetの種別に応じて自分で行い、呼び出し側(WorldObject)はライフサイクルの 契機で登録/解除を依頼するだけで、どのtargetがどこへ紐付くかは知らない。

    アクション/combination/pickの一時的な add(実行の瞬間に1回だけ効く)は、持続するゲート判定が不要な ため、この登録の仕組みには乗らない。

    階層 (一覧を見る)

    インデックス
    target: PropertyPath
    • get relationRegistration(): RelationRegistration

      登録の契機を受け取る関係(8.1節の target の起点)と、それを受け取る自分自身。寄与として 登録されない効果(transfer)ではundefined。仕分ける側(PassiveEffects)が種別で振り分けずに 済むよう、効果自身が名乗る。

      戻り値 RelationRegistration

    • get reversible(): boolean

      可逆な寄与(modify、8.3節)か。影響の一覧が記号の形をこれで選ぶ(PropertyInfluence)。

      戻り値 boolean

    • get tickTransfer(): TransferPassiveEffect | undefined

      tick毎に走る輸送(8.4節)ならそれ自身。寄与として登録される効果(modify/add)ではundefined。 走らせる側(ObjectPassiveEffects)が種別で振り分けずに済むよう、効果自身が名乗る。

      戻り値 TransferPassiveEffect | undefined

    • 実体値へ積む寄与(add)なら、動かす先を稼ぎの数え先として名乗る。可逆な寄与(modify)は 実体値を動かさないので名乗らない。

      相手もゲートの役もcontextから解く(setRegisteredInContextと同じ、登録先と同じ物になる)。 呼ばれるのは操作の宣言だけで、そこにchildは書けない(8.1節)ので、ゲートのselfはownerでよい。

      名乗るのは先だけで、量は言わない。 数えられるのはそのプロパティがこのtickで実際に動いた量 (PropertyValue.tick)で、同じtickの他の寄与も端のクランプも既に引かれている。

      相手がまだそのプロパティを持っていなくても名乗る。 このtickの積分の途中でbecomeが走れば、 新しい型にしか無いプロパティはそこで生える(9.9.1節)ので、持っているかを名乗りの条件にすると 生えたtickぶんだけが稼ぎから漏れる。

      今tick何も足さないなら名乗らない。 ゲートが閉じている効果の対象を数え先にすると、物が 自分で宣言した増減まで操作の稼ぎになる。

      パラメータ

      戻り値 void

    • この効果が何を宣言しているかを読み上げる(PassiveReader参照)。抽象なのは取りこぼしを防ぐため ——既定を持たせると、動詞を1つ足したときに読み手が黙って何も受け取らなくなる。

      パラメータ

      戻り値 void

    • childがparentに付く/離れる際に、parent(owner)側のtarget=child効果を、その付いた/離れた子(child)へ 登録/解除する。childは相手がownerから一意に辿れない唯一の関係のため、childを明示的に受け取る。

      パラメータ

      戻り値 void

    • contextで対象を解いて、この効果を相手へ登録/解除する。役の解決先を呼び出し側が持っているとき だけ呼ぶ——操作が宣言した持続効果(11.7節)の役は、宣言したその操作の関係が答えるもので、 宣言元が後から別の関係へ加わっても動かない(WorldSession.whileInteractionPassives)。

      憶えるのは登録先だけではない。 ゲート(8.2節)が見る役も同じ関係が答えるので、contextを 登録そのものへ持たせる(RegisteredPassiveEffect)。

      パラメータ

      戻り値 void

    • 対象(relationRegistrationで名乗った関係)の相手へ、この効果を登録/解除する。相手はowner自身から 解決するので、呼び出し側は相手を知らなくてよい。呼ばれるのは名乗った関係の契機だけ (仕分けはObjectPassiveEffectsが持つ)。

      ancestorは、ツリー構造が変わる前に解除・変わった後に登録という順序を呼び出し側 (WorldObject.setAncestorTargetsRegistered)が守る前提で、「今この瞬間の祖先」を毎回辿るだけで よく、前回の登録先を憶えない。

      操作の役(11.5節)も、ownerが今役を解く関係から辿れるので同じ経路に乗る。頼まれる契機は 関係を張った/外したときだけではない——関係の内側で型が変われば、宣言も登録先も入れ替わるので そこでも張り直す(頼む側はWorldObject.setRoleTargetsRegisteredの呼び手)。

      childは相手(どの子か)がownerから一意に辿れないため、ここでは扱わずsetChildRegisteredを使う。

      パラメータ

      戻り値 void

    • 内部共通処理: relatedの対象プロパティへこの効果を登録/解除する。 gateのself(=slotBearer)はエッジの子側(child対象なら子=related、それ以外はowner)。 対象と食い違うrelatedを外部から渡せないよう非公開。

      interactionRolesは、ゲートの役を答える文脈(RegisteredPassiveEffect参照)。

      パラメータ

      戻り値 void