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

    クラス InteractionRelation

    1つの操作が結んでいる、参加者どうしの関係(GameElementDefinition.md 11.5節)。

    関係は世界に刻む。 張っている間、参加者は自分がどの操作に参加しているかを知り、そのprops (base・passives)から役を指せる——道の所要時間が「今歩いている人の遅れ」を土台にできるのは、 条件の判定も所要時間の問い合わせも効果の適用も、同じ関係を張った状態で行うからで、片方だけで 張ると押す前に見せる分数と実際に進む分数がずれる。

    張るのも外すのもここだけ(during)。呼び出し側は「この関係の下で読む/実行する」と頼むだけで、 張り忘れ・外し忘れを覚えておく必要がない。

    インデックス

    この操作で動いている個体(11.5節)。関係を張るのは誰かが動いているときだけなので必ず居る ——誰も動いていない場面(レシピの解放条件、13.2節)は関係を張らずReferenceContext.askingで問う。

    instrument: WorldObject | undefined

    運ばれてきて働きかけに使われる物。それを伴わない操作では居ない(11.5節)。

    patient: WorldObject

    働きかけられる物(11.5節)。操作の宣言が乗っている側で、宣言の中ではselfと同じ物を指す。

    • get participants(): readonly WorldObject[]

      この関係に加わっている物を1つずつ(同じ物が2つの役に就く再帰的な操作、11.5節では1回だけ)。 agentを先頭に置くので、一意性が破れているときは他の誰も加わらないうちに止まる(bound)。

      戻り値 readonly WorldObject[]

    • この関係を張った状態でbodyを実行し、必ず外してから返す(11.5節「1つずつ張って外す」)。 bodyへ渡す文脈の起点はpatient——操作の宣言が乗っている側がそのままselfになる。

      押す前に見せるための問い合わせ(条件・所要時間)がこれ。動作そのものではないので、 agentが動いていると主張しない——実行中の操作の傍らで別の候補の分数を引くことは起こる。

      型パラメーター

      • T

      パラメータ

      戻り値 T

    • roleに就いている物。就いている物が居なければundefined。

      パラメータ

      • role: "agent" | "instrument" | "patient"

      戻り値 WorldObject | undefined

    • この関係に加わっている物のうち、selfでないもの。役を対象にした持続効果(11.5節)の宣言元と相手は、 必ず同じ1つの関係に加わっている——役を指せるのは参加者からだけだから。だから相手を残らず挙げるには、 その物が加わっている関係のそれぞれでここを引く(WorldObject.participantsSharingAnyRelation)。

      パラメータ

      戻り値 readonly WorldObject[]

    • 実行として関係を張る。同じ物が2つの操作のagentになることはない(11.5節の不変条件。動作主は 一度に1つの動作しかできない)ので、既に動いている個体をagentにしようとすればその場で止まる。

      抜けたところが操作の切れ目になる(WorldSession.runToSeam)。実行として張られている間が そのまま操作1つなので、囲うのはここ——時間を使う操作は経過中に手番を配りうるので、囲いを 呼び出し側に任せると、忘れた経路では内側の時間経過自身の切れ目が深さ0で開き、効果を適用する 前に手番が走る。

      切れ目はクレームの外側で閉じる。 内側で閉じると、切れ目が配る待たせた手番が自分自身の操作 (例: 強制的な時間経過、11.5節「再帰的な操作」)だったとき、まだ外れていないクレームへ同じagentの 再クレームが走り、上の不変条件が破れる。

      型パラメーター

      • T

      パラメータ

      戻り値 T