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

    クラス TickGate

    tick毎の増減を縛るゲートの、定義だけから読める姿。

    インデックス
    ancestorConditions: readonly PropertyComparison[]

    条件が祖先(=置かれている場所)に課している比較のうち、成立していなければ効かないもの。 外の状態でしか決まらない増減——雨で溜まる水は ancestor.weather が雨の間だけ増える——を、 その状態が続く時間から数えられるようにする。

    conditions: ConditionDeclaration | undefined

    段以外の条件(conditions、14節)。無ければundefined。

    「縛られているか」の1ビットへ畳まず、宣言そのものを持つ。 畳むと、置けば成立する罠の判定と、 囲いと飼葉が要るヤケイの繁殖が同じ姿になり、何の条件かを名前で出せなくなる(issue #961)。 以降のフィールドは、この宣言から特定の問いのために取り出した答えで、条件そのものではない。

    hasConditionsBeyondStages: boolean

    段の名指し——requiredSelfStages・outerStagesのどちらでもない条件が残っているか (gatedOnlyBySelfStagesUnder・heldThroughoutPush)。

    hasRuntimeConditions: boolean

    型だけでは真偽の決まらない条件が残っているか(conditional)。

    outerStages: readonly OuterStageRequirement[]

    増減が効くために、宣言元の外側——親、またはそのプロパティを持つ最初の祖先——が入っていな ければならない段。押し手が傍に在ることで成立する条件を見分けるための手掛かりで、刻んだ芋の 上乗せ(prepped)なら親のheatのcoals以上。

    親と祖先を分けて持たない。 祖先はそのプロパティを持つ最初の親から遡った先なので、親がその プロパティを持っていれば親そのもの——照らし合わせる相手(押し手)がその段を名乗っている時点で、 持っていることは決まっている。

    requiredSelfStages: readonly SelfStageRequirement[]

    増減が効くために、宣言元自身が入っていなければならない段(6.4節)。その増減がいつから いつまで効くかの手掛かりで、膿んだ傷が宿主の菌を押し上げる増減なら infection の festering——そこへ届くまでは効かず、上の段へ抜ければまた効かなくなる。

    段の宣言の下に置かれた増減(8.2節)と、条件が名指した段(in_stage・in_stage_or_above、 14.1節)のどちらもここへ来る。

    selfComparisons: readonly PropertyComparison[]

    条件が宣言元自身の値に課している比較のうち、成立していなければ効かないもの。その増減が いつまで効くかの手掛かりで、出血なら {bleeding, gte: 1}——bleeding が1を割った時点で 血を奪うのが止まる。外れるのは値が比較の外へ出たときなので、lt で見ている条件は値が 上がって外れる。

    論理和・否定の下の比較は来ない——理由はancestorConditionsと同じ。別のプロパティを相手に した比較(valueRef)も来ない——しきい値が定義だけからは決まらない。

    段を名指した条件(in_stage・in_stage_or_above、14.1節)が見ている値はここへ来ない。 段の条件が外れるのは段を出たときで、それは下のrequiredSelfStagesが段の下端と上端から 答える。ここへ混ぜると、下端を書いていない受け皿の段(6.4節)——値が下端まで落ちても居続ける 段——を求める増減まで、比較の外へ出た時点で止まるものとして数えられる。

    selfTypeMatches: readonly TypeMatchReading[]

    条件が宣言元自身の型に課している指定のうち、成立していなければ効かないもの。

    stage: { name: string; propertyGlobalId: PropertyGlobalId } | undefined

    段で縛られているならその段(8.2節)。常時効くならundefined。

    • get conditional(): boolean

      段以外の条件でも縛られているか。真なら、その条件が成立している間だけ効く。

      型だけで真偽の決まる条件は、縛りとして数えない。 塩蔵されていない間だけ効く腐敗(notで curedタグを見る)は、塩漬けの版では一度も効かず、生の版では常に効く——どちらでも「成立する 場合としない場合がある」ではない。成立しない側はpossibleForが宣言ごと落とすので、 ここまで来たものは常に効く。

      戻り値 boolean

    • 押し手が押している間、縛りがrequiredSelfStagesだけになるか。真なら、宣言元がその段に 入ってさえいれば、押されている間は必ず効く。

      conditionalの否定ではない。 段の名指し(in_stage、14.1節)は成立する場面としない 場面のある条件なのでconditionalは真になるが、その段へ届いたかは値から読める——読めないものが 残っているかを問うconditionalとは、別の問いへの答え。段の宣言(8.2節)の下に置いて書いても 条件として書いても同じことなので、書き方で答えが変わってはならない。

      外側の段(outerStages)は、押し手が保証していれば縛りとして数えない——理由は heldThroughoutPushと同じ。

      パラメータ

      戻り値 boolean

    • その増減が、押し手が押している間ずっと効いていると、宣言だけから言い切れるか。真になるのは、 縛りが外側の段(outerStages)だけで、押し手が押している間に居ると分かっている段が そのどれも満たすとき——刻んだ芋が自分で足す加熱は「親の火力が熾火以上」を要るが、火にかけている 相手はまさにその段に居るからこそ押している。

      「同時に成立しうる組み合わせ」の枠から出ないので、押されている間の数に入れてよい。押し手を 打ち消す向きの条件つき——炉の外に居る間だけ冷める石——は、押し手が居る場面をそもそも名乗って いないので、ここでは真にならない。

      パラメータ

      戻り値 boolean

    • その2つのゲートが同時には成立しないと、宣言だけから言い切れるか。言い切れないものは 重なりうる側へ倒す(mutuallyExclusive と同じ約束)。

      言い切れる根拠は、書かれた条件そのものが重なりを禁じていること(同じ気温をltとgteで 見ている寒さと暖かさ)か、要る段が値の並びの上で重ならないこと。段を条件と別に見るのは、 段の宣言(8.2節)が条件の木の外に在るため——炉の火力はconditionsを1つも持たないので、条件だけを 読むと「重なりうる」に倒れ、段ごとの火力が足し合わさる。

      パラメータ

      戻り値 boolean

    • 押し手が押している間、outerStagesがどれも成立していると言い切れるか。外側の段を名指した 条件が押し手について言っているのは、押し手が外側に居るときだけ——持ち主の血を奪う傷のように 内側から押す押し手は、親でも祖先でもない。

      押し方は同時には効かない組が並ぶ(炉の火力の段)ので、押されている間ずっと成り立つと言えるのは どの押し方でも成り立つことだけ。

      要る段が1つも無ければ偽——押し手は何も保証していない。縛りが自身の段だけかを問う側 (gatedOnlyBySelfStagesUnder)が答えを要るのは別の問いなので、そちらが自分で分ける。

      パラメータ

      戻り値 boolean

    • その型で成り立ちうるゲートか。蒸発も雨も口径ごとに宣言が分かれており(self の型を見る 条件)、ヤシの器あての宣言は甕にとって一度も効かない。宣言を持っていることと、それがその型で 効くことは別。

      パラメータ

      戻り値 boolean