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

    クラス LocalIndexByGlobalId<Id>

    特定の ObjectDef に閉じたローカル配列(PropertyDef[] / SlotDef[] など)と、 ゲーム全体で共有されるグローバルID空間とを対応付ける表。ObjectDef側は自分が実際に持つ ものだけを詰めた密なローカル配列を持ち(グローバルID直インデックスでは疎になるため)、 この表がその変換を担う。

    型引数は引く側のグローバルIDの種類(GlobalId)。名前空間ごとに別の表なので、 プロパティの表へスロットのIDを渡すと型で止まる——通してしまうと、別の名前空間で同じ番号を 持つ何かのローカル位置が返り、持っていないはずのものが引ける。in out(不変)を書く理由は NameLookup と同じ。この表が素の number の表へ広げられないことを見張るのは tests/architecture/globalId.test.ts で、in out はその一手段——今は不変の NameLookup を持っていることでも同じ不変性が出るので、この2語だけを外しても広がらない。

    型パラメーター

    • in out Id extends number
    インデックス
    • 型パラメーター

      • in out Id extends number

      パラメータ

      • names: NameLookup<Id>

        この表が引くIDを配る名前空間。大きさの写しではなく名前空間そのものを持つ ——表を組むのは読み込みの途中で、名前空間はその後も伸びる。組んだ時点の大きさを持つと、 後から配られたIDが全部「表の外」に落ち、配られていない番号と見分けが付かなくなる。

      • globalIdsOrderedByLocalIndex: readonly Id[]

        ローカル配列の並び順そのままに並べたグローバルID列。

      戻り値 LocalIndexByGlobalId<Id>

    globalToLocal: number[]
    missing: -1
    names: NameLookup<Id>
    • そのグローバルIDのローカル位置。この物が宣言していなければ missing。

      この名前空間が配っていない番号は投げる。 名前を経由せずに作った数は、番号としてはそのまま 表を引けてしまう——壊れたIDと「宣言されていない」は呼び手にとって別の話で、黙って畳むと 引き方の間違いが「持っていない」として通る。

      捕まるのは、どの名前も持たない番号だけ。 どのNameRegistryも0から振るので、別の世界が 配ったIDはたいていこちらの範囲にも収まり、番号だけでは見分けが付かない——そちらを止めているのは この検査ではなく、世界をまたいで物を渡さないこと。

      パラメータ

      • globalId: Id

      戻り値 number