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

    クラス WorldCodex

    ロードされたYAMLファイル全体を表す集約オブジェクト(GameElementDefinition.md 3.1節)。 本体データ(ObjectDefTable)、独立した名前空間(object/property/slot/tag/property_tag/symbol)の NameRegistry、およびWorldVocabularyを持つ。ロード完了後は不変として扱う。 symbolNamesはシンボル型props(6節)の値の名前空間。実行時状態(WorldObject)は含まない (runtimeが担う)。

    グローバルID→識別子の引き当ても引き受ける。名前空間をすべて持つのはここだけのため。

    インデックス
    cardFilters: readonly CardFilter[]

    フィルターバーに並ぶボタン(card_filters、ScreenLayout.md 8.1.3節)。宣言順がそのまま 並び順で、絞り込みを解除する「すべて」は含まない(UIが常に先頭へ置く)。

    craftingConditions: Requirements | undefined

    製作の工程を進めるのに満たしていなければならない条件(crafting_conditions、13.3節)。 全レシピ共通の1本で、宣言が無ければどんな状況でも作業できる。

    generatedTypes: GeneratedTypes

    ロード時に生成された型の座標表(GameElementDefinition.md 3.5節)。生成型は名前も表示名も 組み立てた結果でしかないため、素の型と軸の値の組をここへ残す。becomeの行き先解決も、 製作中オブジェクトから完成品を引くのも、この1つの表が答える。

    generation: GenerationDefs | undefined

    地形生成の定義一式(terrain_generation.yaml)。 生成定義を1つも含まないロードではundefined(地形生成を使わないCodexも成立する)。

    objectDefPropertyIds: ReadonlySet<PropertyGlobalId> | undefined

    プロパティのタグ(6.7節)の名前空間。object_defのタグ(tagNames)とは別で、property_tags で 宣言された順にIDが振られる。UIはこのIDの昇順をカテゴリの表示順として使ってよい。

    recipeCategoryTagIdsByPriority: readonly TagGlobalId[]

    レシピ一覧の棚に使うタグ(recipe_categories、Windows.md 9節)のグローバルID。 並びが優先順位で、完成品は最初に一致した棚にだけ載る。

    symbolicPropertyIds: ReadonlySet<PropertyGlobalId> | undefined
    variationAxisValueNames: ReadonlySet<string> | undefined
    vocabulary: WorldVocabulary

    コードがYAMLの単語へ寄せている依存の一覧(WorldVocabulary参照)。

    • get objectDefProperties(): ReadonlySet<PropertyGlobalId>

      型を値に持つ(6.9節)と宣言されたプロパティのグローバルID。読み方はsymbolicPropertiesと同じで、 答えるのは「この値は型か」だけ。

      戻り値 ReadonlySet<PropertyGlobalId>

    • get symbolicProperties(): ReadonlySet<PropertyGlobalId>

      シンボル型(6.6節)と宣言されたプロパティのグローバルID。同じ名前でも型ごとに宣言が違いうるので、 1つでもシンボル型として宣言していれば含める。

      値をどう見せるかは読み手が決めるので、ここが答えるのは「この値はシンボルか」だけ。

      戻り値 ReadonlySet<PropertyGlobalId>

    • このスロットへ、外から持ち込める型が1つでもあるか。単独で在れない型(bound_to_owner、7.9節) しか受け付けないスロットは、持ち主の中で生まれる以外に入りようがない——怪我のスロットがこれ。 画面はこれを見て「落とせる場所」の空枠を出すかを決める。

      パラメータ

      戻り値 boolean

    • その識別子の型が名乗る絵の名前(art、4.3節。宣言が無ければ識別子そのもの、ObjectDef.artName)。 登録の無い識別子でも識別子をそのまま返す——絵の在庫に無ければどのみち絵は出ない。

      絵を引く鍵はこれであって識別子ではない。 識別子で引くと、1枚を共有している型が絵を持たない 扱いになる。

      パラメータ

      • objectName: string

      戻り値 string

    • 生成型(3.5節)の素の型。生成型でなければ自分自身。絵と名前の骨格はここから引く ——変種のために絵を描き足す道は無いので、素の型のものを映す。

      パラメータ

      戻り値 ObjectDef

    • ロード時に自動生成された型か(3.5節)。一覧にも対応表にも自分の場所を持たない——名前も絵も 素の型から組み立てるので、並べても同じ物の別の顔が増えるだけになる。

      パラメータ

      戻り値 boolean

    • 変種の軸の値になっている型か(3.5.1節。液体の種類・食べ物の加工)。軸の先の変種へtraitを配るだけで、 この型自身の個体は作られない。

      作りかけの軸は見ない——その値はレシピの名前で、型の名前ではない(RecipeSystem.md 1節)。 同じ名前の型が在っても、それは軸の値ではない。

      パラメータ

      戻り値 boolean

    • タグ(4.1節)を持つobject_defの識別子を、宣言順(グローバルID順)で返す。誰も持たないタグでは空。 タグは型のグループを指す唯一の手段なので、「locationな型の一覧」「選べるキャラクタの一覧」は いずれもこれで引く。

      受け取るのは名前ではなくID——コードが名指しするタグはWorldVocabularyに並んでいるので、 ここで文字列から引き直すと同じ語が2箇所に書かれる。タグを名前で名乗る宣言から引くなら、 呼ぶ側がtagNamesでIDへ直してから渡す。

      パラメータ

      戻り値 readonly string[]

    • 実効値が実体値と食い違いうる理由。一致するならundefined(requireRangeEventsOnUnmodifiedProperties参照)。

      パラメータ

      戻り値 string | undefined

    • 名前で引いたプロパティが、どこかの型で宣言されているか。名前を作る口(propsのキー)と 名指しする口が同じinternだと、綴りを間違えた宣言はその場で新しい名前を作って通ってしまう ——引く先が無いプロパティは実行時にただ「持っていない」と読まれるので、遊んでも何も起きない。

      「どこかの型が宣言していればよい」までしか見ないのは、誰を見るかが実行時にしか決まらないため (条件のsubjectもdeftnessの作り手も、指す相手は状況で変わる)。持っていない個体を引く宣言は 正しい書き方(「その腕を持つ者だけ速い」)なので、そこまでは踏み込めない。

      パラメータ

      • stageNames: StageNamesByProperty
      • propertyGlobalId: PropertyGlobalId
      • context: string

      戻り値 void

    • 名前で引いたスロットが、どこかの型で宣言されているか。見るのは「どこかの型が宣言しているか」 まで——requireDeclaredPropertyと同じ理由で、指した相手がそのスロットを持つかは実行時にしか 決まらない。

      パラメータ

      戻り値 void

    • 名指しした段(6.4節)が、そのプロパティのどこかの宣言に在るか。段は型ごとのPropertyDefが持つ ので、「どの型が持つか」ではなく「その名前の段を宣言した型が1つでも在るか」までを見る (requireDeclaredPropertyと同じ理由)。

      綴りを間違えた段名はPropertyDef.isInStageが偽を返すだけなので、宣言は落ちずに一度も効かない。

      パラメータ

      • stageNames: StageNamesByProperty
      • propertyGlobalId: PropertyGlobalId
      • stageName: string
      • context: string

      戻り値 void

    • 名前で引いた型が、object_defs(生成された型を含む、3.5節)に在るか。

      パラメータ

      戻り値 void

    • 行き先をプロパティから引くなら、そのプロパティは型を値に持つと宣言されていなければならない (value: {object: ...}、6.9節)。

      ただの数値プロパティを引く宣言は書けてしまうが、実行時にはその値をグローバルIDとして扱うので、 無関係な型を引くか、黙って何も起きないかのどちらかになる。指せる先がsingletonかどうかは ここでは分からない(プロパティは型ごとに違う値を持てる)が、それは宣言の側 (propsの{object: ...})が既に受けている。

      パラメータ

      戻り値 void

    • required_props(4.2節)の約束を果たしているか。タグを名乗った以上、そのタグが要求する プロパティは宣言されていなければならない。

      宣言漏れは静かに効く——weightを書き忘れた道具は0gとして持ち運べ、loadを書き忘れた キャラクタは何を担いでも平気になる。テストではなくロード時に落とすのは、パックの定義も同じ 約束の下に置くため(テストは同梱のYAMLしか通らない)。

      何をどのタグに要求するかはエンジンではなく世界が決める(要求を1つも書かない世界も成立する)。

      パラメータ

      戻り値 void

    • 著者が書いたon_max/on_min(6.3節)を持てるのは、実効値が実体値と一致するプロパティだけ。

      端のイベントは実体値で発火し(PropertyValue.add)、段・バー・conditionsは実効値で読む (getEffectiveValue)。両方が食い違いうるプロパティが端のイベントを持つと、「バーは満ちているのに 何も起きない」「まだ空でないのに尽きる」が起こりうる。そのときの正しい挙動をまだ決めていないので、 決まるまでは書けないようにしておく。

      食い違いの原因はmodify(8.3節)とbase(6.5節)。中身の重さの伝播もエンジンが生やす modifyなので、前者に含まれる(containerPropagation)。 modifyされるかは型ひとつでは分からない(宣言するのは他の型)ので、世界全体を持つここで見る。

      戻り値 void

    • 型の名前で行き先を指せるのは、世界にただ1つ在る型(singleton、15節)だけ。

      複数在りうる型を指すと、どの個体へ行くかは世界の形が決め、著者の書いた通りには動かない ——島へ戻る航路が、出た浜ではなく島で最初の浜へ着いていた。

      パラメータ

      戻り値 void

    • 宣言が名指しした別の宣言(DeclarationReference)を、実際に指せているか。名指しの種類ごとに 見るものは違うが、どれも「書いた時点で分かる誤り」なので、遊んで気づくのではなくロード時に落とす。

      指した先の型もプロパティの宣言も自分より後で読まれうる(複数ファイル・patch_object_defs)ので、 全部が揃ったここで見る。

      パラメータ

      戻り値 void

    • 世界にただ1つ存在する型(singleton: true、15節)のグローバルIDを宣言順で返す。

      「1つだけ存在すべき」を「世界を作った時点で必ず1つ在る」と読む(NewGame.startNewGame)。そうでないと、 型の名前で行き先を指すmoveのto_object(9.6節)が、まだ湧いていない場所を指すことになる。

      戻り値 readonly ObjectGlobalId[]

    • 型が宣言したプロパティと、その宣言が持つ段(6.4節)の名前。プロパティを引けること自体が キーの有無なので、段を持たないプロパティは空の集合を持つ。

      パラメータ

      戻り値 StageNamesByProperty

    • 型を値に持つ(6.9節)と宣言されたプロパティの値を、型の名前へ戻す。越境の扱いは trySymbolNameOfPropertyValue と同じ。

      パラメータ

      • value: number

      戻り値 string | undefined

    • defの座標から、axisValuesで指した軸だけを動かした先の型(become、9.9節)。その座標に型が 居なければundefined=そこへは変われない。

      パラメータ

      • def: ObjectDef
      • axisValues: ReadonlyMap<string, string>

      戻り値 ObjectDef | undefined

    • シンボル型(6.6節)と宣言されたプロパティの値を、シンボルの名前へ戻す。宣言に数値リテラルが 書かれていれば、どのシンボルのIDでもないのでundefined。

      値を名前まで戻すのはここ——値がどの名前空間のものかを知っているのは名前空間を全部持つ このクラスで、読み手(条件の文・カードの説明・天気の表示)はそれを訊くだけ。値からIDへの 読み替えそのものは symbolGlobalIdOfPropertyValue が持つ。

      パラメータ

      • value: number

      戻り値 string | undefined

    • 枠ごとに、その枠が空いているときに薄く敷いて見せる型(CardView.md 11節)。 枠数を宣言していないスロットでは空の並びを返す。

      どの枠も同じ受け入れを宣言しているスロットでは空。 そこへ何が入るかはその場所そのものが 既に言っているので、枠が言っても二度目の答えになる——手持ちの空き枠に持ち物の絵を順に送っても、 何も絞られない。枠によって宣言が違うスロット(炉の火の中と石の上、FireSystem.md 1.1節) でだけ、どの枠がどちらなのかを枠自身が名乗る。

      単独で在れない型(bound_to_owner、7.9節)は挙げない。 探してくる先が無いので、 「これを持ってくればよい」の絵にならない。当てはまる型がまだ1つも無い枠も空になる。 絵にできない受け入れ(TypeMatchRule.canBePictured)も空。

      パラメータ

      戻り値 readonly (readonly ObjectGlobalId[])[]

    • 製作の工程を進める条件のうち、agentが満たしていない最初の要件(満たしていればundefined)。

      可否と「なぜできないか」を同じ1回の評価から返すのは、レシピの解放条件 (RecipeDef.unmetUnlockRequirement)と同じ理由。成果物のインスタンスはまだ無いので、 参照できるのはagentだけ(13.4節)。その1つを欠いた問いは無いので、agentは必ず要る。

      パラメータ

      戻り値 Requirement | undefined

    • この型が素の型からどれだけ動いた先に居るか(3.5節)。軸の名前 → その軸の値の識別子で、素の型では空。

      どの軸かで扱いを分けません。 作りかけも中身入りも「素の型の変種」で、違うのは軸の名前と、 その名前に紐づく書式(Localization.md)だけです。

      パラメータ

      戻り値 ReadonlyMap<string, string>