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

    クラス SlotDef

    1つの ObjectDef が持つ、1つのスロットの定義(GameElementDefinition.md 7.1〜7.3節)。 ObjectDef.slotDefs の1要素として、ローカルIDをそのままindexとする密配列に格納される。

    インデックス
    • パラメータ

      • globalId: SlotGlobalId
      • name: string
      • cells: readonly CellDef[] | undefined
      • sharedCell: CellDef | undefined
      • cellCount: number | undefined
      • capacity: number | undefined
      • autoPlacement: boolean = true
      • putInDuration: DeclaredNumber | undefined = undefined
      • manualPlacement: boolean = true

      戻り値 SlotDef

    autoPlacement: boolean

    誰がここへ物を入れてよいか(placement、GameElementDefinition.md 7.7節。既定は両方)。

    autoはspawn/moveの宣言順走査(同節)の対象になるか、manualはプレイヤーが札を重ねて入れられるか。 どちらもfalseなら、スロット名を名指しした移動でしか入らない(隠された道の枠)。

    capacity: number | undefined

    合計サイズの上限(GameElementDefinition.md 7.3節)。undefined なら無制限。

    cellCount: number | undefined

    枠の数(undefined=決まっていない)。数を決めることと位置が安定することは同じ——枠が5つだと 分かっていれば「5番目が空いている」と言えるが、長さが可変の並びには指し示すべき空き枠が無いので 詰めるしかない(SlotSystem.md 3節)。

    cellDefs: readonly CellDef[]

    枠ごとの定義。cellCountを持つスロットではその長さ、持たないスロットは空(sharedCellを使う)。

    globalId: SlotGlobalId
    manualPlacement: boolean
    name: string
    putInDuration: DeclaredNumber | undefined

    ここへ物を入れるのにかかるゲーム内時間(GameElementDefinition.md 7.10節)。undefinedなら一瞬。

    時間を課すのは入れる側だけで、出すのは常に一瞬。当てるのに手間がかかっても外すのは一瞬、 という非対称の方が普通のため。値の解決はcombinationのdurationと同じ形で、selfが枠の持ち主、 instrumentが入れる物(putInRelation参照)。

    sharedCell: CellDef

    枠数が決まっていないスロットの、すべての枠に共通する定義。

    • get acceptsAtMostOne(): boolean

      どんな型でも1つしか受け取れない枠か(枠が1つで、そこに同種を束ねない)。まとめて落とせるかを 型を持たずに言える唯一の形で、時間のかかる枠がこれを外れていないかの見張りに使う。

      戻り値 boolean

    • get cellCountPolicy(): number | "grows"

      空けておく枠(SlotSystem.md 3節)。枠数を宣言したスロットはその数、宣言していないスロットは 'grows'——物を入れるたびに枠が1つ増え、空になった枠は残さず詰める。

      「枠数が固定か」と「前詰めか」は同じ1つの問いなので、別々には答えない(同節)。読む側が cellCountの有無から組み立てると、その judgment が読む側の数だけ増える。

      戻り値 number | "grows"

    • get cellsReading(): CellsReading

      枠ごとの受け入れ宣言(7.2節)。枠の内訳が位置ごとに違うときだけ位置ごとに並ぶ——全部同じなら 1つで足りるので、読み手は位置を添えるかどうかをこの形で見分ける。

      戻り値 CellsReading

    • get hasPutInDuration(): boolean

      ここへ入れるのに時間がかかるか(put_inの宣言があるか)。値そのものはownerとitemで変わるので、 「宣言しているか」だけを答える。

      公開しているのは、acceptsAtMostOneと対で同梱の宣言を見張るため——put_inを持つ枠を選び出す 口が無いと、その不変条件を数える側が全部の枠へputInMinutesを引くことになる。

      戻り値 boolean

    • どれかの枠が受け入れる型か。「そもそもこのスロットに入りうるか」を型だけで問う。

      パラメータ

      戻り値 boolean

    • index番目の枠の定義。枠数が決まっていないスロットではどの位置でも共通の定義。

      パラメータ

      • index: number

      戻り値 CellDef

    • このスロットへ入れるのにかかる分数(宣言が無ければ0)。関係を張るのは呼び出し側 (Slot.putInRelation)——押す前の問い合わせは張るだけ、入れる実行は動作主も主張する、と張り方が 分かれるので、ここでは決められない。

      参照を誰が解くかは問わない(InteractionDef.minutesForと同じ形)。

      パラメータ

      戻り値 number