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

    クラス WorldCodexYamlLoader

    YAMLファイル群からWorldCodexを組み立てるロード処理の入口(GameElementDefinition.md 3節)。

    パース全般をこのクラスが担い、名前空間ごとのNameRegistryを保持する(objectNames以下のゲッター参照)。「trait解決込みでobject_defを 組み立てる」責務はRawObjectDef.resolveが担う。props/slots/interactionsはフィールド 単位のtrait上書きマージ対象のため、深い意味解釈とprop/slot名等のInternはload時点ではなく resolveまで遅延する。object_def自身のglobalIdのみtrait解決に依存しないため、RawObjectDefを 作る時点で確定する。

    load系メソッドは何度でも呼べ、呼ぶたびにこのインスタンスへ追記する(thisを返すため new WorldCodexYamlLoader().load(label, text).buildAndReset()と書ける)。

    object_defs/trait名の重複は、呼び出し元・ファイル・ディレクトリを問わず常にエラー(3.3節の 厳格モード)。「後勝ちで上書き」の規則は一切持たない(MODによる差し替えは専用のpatch文法で 表現する想定)。

    buildAndResetは蓄積内容から不変のWorldCodexを組み立てて返し、このインスタンスの蓄積状態を初期化する。

    インデックス
    _engine: EngineVocabulary = ...

    エンジンが規約として直接読み書きする単語(EngineVocabulary)。世界を組み立てる前から要る ——中身の重さの伝播(containerPropagation)を型へ生やすのに、resolveの時点でIDが要るため。 どんなYAMLを載せても変わらないので、著者の宣言を1つも見ずに作れる。

    _objectNames: NameRegistry<ObjectGlobalId> = ...
    _propertyNames: NameRegistry<PropertyGlobalId> = ...
    _propertyTagNames: NameRegistry<PropertyTagGlobalId> = ...
    _slotNames: NameRegistry<SlotGlobalId> = ...
    _symbolNames: NameRegistry<SymbolGlobalId> = ...
    _tagNames: NameRegistry<TagGlobalId> = ...
    craftingConditions: Requirements | undefined

    製作の工程を進めるのに要る条件(crafting_conditions、13.3節)。全レシピ共通の1本。

    declarationReferences: DeclarationReference[] = []

    別の宣言を名前で名指しした箇所(DeclarationReference)。指した先が在るかも、在っても指せる形かも、 相手の宣言を読み終えるまで分からないので、判定はWorldCodexへ渡してそちらで行う。

    generationAxes: Map<string, AxisDef> = ...

    load系メソッドで蓄積した地形生成定義。parseGeneration.tsの関数群だけが読み書きする。

    generationLocationTypes: LocationTypeDef[] = []
    generationScopes: Map<string, GenerationScopeDef> = ...
    globalObjectDefs: Map<string, RawObjectDef> = ...

    load系メソッドで蓄積した、パース済みだがtrait未解決のobject_defs/traits。

    globalTraits: Map<string, RawTrait> = ...
    inProgressTagIds: Set<TagGlobalId> = ...

    製作中オブジェクトが完成品から引き継ぐタグ(in_progress_tags、RecipeSystem.md 5節)。 引き継ぐかどうかを問うだけなので、並び順は持たない。

    patches: RawPatch[] = []

    読み込んだpatch(3.4節)。当たる先が全部揃ってからでないと当てられないので、buildAndResetまで貯める。

    rawCardFilters: RawCardFilter[] = []

    フィルターバーのボタン(card_filters、ScreenLayout.md 8.1.3節)。タグは名前のまま貯める ——型のtagsが解決されるのはbuildAndResetなので、綴りが実在するかはこの時点では見られない。

    recipeCategoryTagIdsByPriority: TagGlobalId[] = []

    レシピ一覧の棚に使うタグ(recipe_categories、Windows.md 9節)。宣言順がそのまま優先順位。

    requiredPropsByTag: Map<TagGlobalId, PropertyGlobalId[]> = ...

    タグが宣言を義務づけるプロパティ(required_props、4.2節)。タグID → プロパティIDの並び。

    • get objectNames(): NameLookup<ObjectGlobalId>

      名前空間(object/property/slot/tag/property_tag/symbol)。型・プロパティ・スロットは引くだけの窓 (NameLookup)を配るので、ここから名前は作れない——この3つは「定義の場」(object_defs・props・ slotsのキー)を持つので、名前を作る口と名指しする口を分けてある(GameElementDefinition.md 3.6節)。 作るのはdefine…Name、名指しはreferTo…が受ける。

      戻り値 NameLookup<ObjectGlobalId>

    • フィルターバーのボタン(ScreenLayout.md 8.1.3節)。綴りの誤りはここでは見ない——指すタグは ファイルをまたいで付く(食のタグはfoods.yaml、火のタグはfire.yaml)ので、どのファイルまで 読んだ時点で「実在しない」と言えるかが決まらない。recipe_categoriesと同じくinternし、綴りは 同梱の世界を丸ごと読む試験が見張る(tests/world-codex/cardFiltersYaml.test.ts)。

      戻り値 readonly CardFilter[]

    • テキストとして渡された1つのYAMLを読み込む(labelはエラーメッセージ用の出所表示)。 アセットパックのぶんは、どのパックのものかをfromで渡す(PackSource)。

      パラメータ

      • label: string
      • yamlText: string
      • オプションfrom: PackSource

      戻り値 this

    • パース済みの1つのYAMLを読み込む。渡したDocumentは書き換えないので、同じものを何度でも 渡してよい(loadWorldCodex)。patch(3.4節)が書き換える宣言のノードも、そこへ接ぎ木する値も、 読み込み元から切り離した複製の側にある(RawObjectDef.modifyDeclaration・RawPatch.value)。

      書き換えれば tests/loader/bundledParseCache.test.ts が落ちる——同梱ぶんを丸ごと通して、渡した Documentの字面が動いていないかを見ている。型では塞げない(同テストの該当itを参照)。

      パラメータ

      • label: string
      • doc: Document
      • オプションfrom: PackSource

      戻り値 this

    • 生成したobject_defsを読み込み、新しく現れた型だけを解決して生成型として登録する。

      どの生成器も手順は同じ——違うのは何を生成するかと、型ごとの座標の出所だけなので、 生成器はYAMLと座標の組(GeneratedObjectDefs)で答え、ここは1本で足りる。生成が空ならしない。

      パラメータ

      戻り値 void

    • 型を値に持つプロパティ(6.9節)から行き先を引いた宣言を1件覚える(parseDestinationRefから)。

      パラメータ

      戻り値 void

    • 型を名前で名指しする(spawnのobject・matchesのobjectなど)。IDを配ると同時に、その型が 定義されているかの判定をWorldCodexへ持ち越す(referToPropertyと同じ理由)。

      パラメータ

      • objectName: string
      • context: string

      戻り値 ObjectGlobalId

    • 他所で宣言されたプロパティを名前で名指しする(条件のprop・deftnessのskillなど)。 IDを配ると同時に、綴りが実在するかの判定をWorldCodexへ持ち越す。

      作る口と分けてあるのは、internが綴り違いをその場で新しい名前にしてしまうから——引く先の 無いプロパティは実行時にただ「持っていない」と読まれるので、宣言は落ちずに一度も効かない。

      パラメータ

      • propName: string
      • context: string

      戻り値 PropertyGlobalId

    • プロパティの段(6.4節)を名前で名指しした宣言を1件覚える(in_stage・from_stageなど)。 段はinternしない——段の名前空間は型ごとのPropertyDefの中にあり、世界で1つではないため (ConditionNode)。プロパティ自身の名指しは呼び出し側がreferToPropertyで済ませている。

      パラメータ

      戻り値 void

    • 型の名前で行き先を指した宣言(to_object・into_object、型を値に持つプロパティのobject)を 名指しする。在るかに加えて、世界にただ1つ在る型かを判定へ持ち越す。

      パラメータ

      • objectName: string
      • context: string

      戻り値 ObjectGlobalId