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

    インターフェイス PlayScreenView

    プレイ中の画面が表示する内容。画面の組み立て(PlayScene)とゲーム状態の間を仕切る。

    条件のように、ドメイン側にまだ表示できる形が無い項目はモック(ScreenLayout_Mock.html)と同じ 固定値を返す(fromGameSession参照)。画面の意匠でしかないもの——ボタンの代役アイコンなど——は ここに置かない。 ワールドを映していないものは、ワールドが変わっても変わらない。

    interface PlayScreenView {
        ambientBrightness: number | undefined;
        cardOfObjects: (objects: readonly WorldObject[]) => ObjectCardStack;
        cardOfType: (objectGlobalId: ObjectGlobalId) => CardContent;
        cardsIn: (place: Slot) => readonly (ObjectCardStack | undefined)[];
        characterCard: CardContent;
        characterWindow: ObjectWindowView;
        combinationOf: (
            dragged: ObjectCardStack,
            target: ObjectCardStack,
            count?: number,
        ) => CardCombination | undefined;
        conditions: readonly string[];
        currentLocationCard: CardContent;
        currentLocationTemperature: number | undefined;
        elapsedDays: number;
        hour: number;
        mapLands: readonly MapLandView[];
        mapRoads: readonly MapRoadView[];
        minute: number;
        nestedLocations: readonly NestedLocationView[];
        places: ScreenPlaceResolver;
        properties: readonly StatusContent[];
        propertyCategories: readonly PropertyCategory[];
        slotViewOf: (place: Slot) => SlotView;
        statuses: readonly StatusContent[];
        visible: (object: WorldObject) => boolean;
        weather: string | undefined;
        weatherLabel: string | undefined;
        windowOf: (object: WorldObject) => ObjectWindowView;
    }
    インデックス
    ambientBrightness: number | undefined
    cardOfObjects: (objects: readonly WorldObject[]) => ObjectCardStack

    挙げた個体だけを映すカード。束は割れる——子ウィンドウは束のうち1個だけを借りるので (Windows.md 1.1節)、借りた1個と枠に残る残りが、それぞれ自分の個体だけを動かすカードになる。 表示も操作も先頭を代表とする点は、スロットの中身から作る束(cardsIn)と同じ。

    どこの札かは言い添えません。 その物が今いる場所は世界が答えるので、呼び出し側の思い違いが 札に載ることは無い。

    cardOfType: (objectGlobalId: ObjectGlobalId) => CardContent

    その型(object_defのグローバルID)そのものを表すカード。インスタンスを持たないので、まだ在るとは 限らない物——枠が受け入れる素材(LaneCell.accepts)——を見せるのに使う。

    cardsIn: (place: Slot) => readonly (ObjectCardStack | undefined)[]

    その場所の枠の並び(空き枠はundefined)。枠の位置がそのまま並びになるので、枠数の決まった スロット(手持ち・入れ物の中身)で抜けた枠は詰まらない——世界が枠の位置を保つ以上、画面もそこを 動かさない(SlotSystem.md 3節)。

    手持ちがレーンに入り切らないときだけは、写し取る前に世界の側が詰まる(packToFrontIfHidden)。 ここは詰まった結果をそのまま映すだけで、他の場所と扱いは変わらない。

    製作中オブジェクトの材料スロットだけは空き枠を落として詰める。 その空き枠は画面に出ず (slotCells.materialCells)、レーン上の位置はこの並びの位置で束を引く(ShownDrop.fromIndex)ので、 残すと空き枠より後ろの札がずれた束を指す。

    characterCard: CardContent

    キャラクタ自身を映す札。ポートレイトの枠と、キャラクタの子ウィンドウが同じ姿で出す1枚。

    名前も絵も印もこの札が持つ。 血が流れている傷を負っていれば印が付くのも、動物のカードと 同じ規約(CardView.md 9節)。

    characterWindow: ObjectWindowView

    キャラクタ自身の子ウィンドウ(ポートレイト・日時・装備/怪我のボタンから開く)。

    combinationOf: (
        dragged: ObjectCardStack,
        target: ObjectCardStack,
        count?: number,
    ) => CardCombination | undefined

    draggedをtargetへ重ねたときのcombination(GameElementDefinition.md 12節)。返すものが無ければ undefined。draggedとtargetが同じ束(その束の上の1枚を元の位置へ重ねた)なら、束の中の2つを 組み合わせる。

    実行できるとは限らない——成立するものが無く、宣言が断る理由を持っていれば、それを enabled: false で返す(CardInteraction.md 2.1節)。どちらなのかは受け取った側がenabledで見分ける。

    落とされた側が受け入れる組み合わせも、掴んだ側が受け入れる組み合わせも引く(同2節)。どちらも 宣言順の先頭を採る。選ぶのは成立するほうで、向きが効くのはどちらも成立するとき——両向きとも 成立しないときだけ、落とされた側の断る理由を返す(同2.1節)。

    conditions: readonly string[]

    状況アイコンの絵の識別子(ScreenLayout.md 4.1.1節)。今いる段が名乗ったものだけが並ぶので、 何も妨げていない間は空になる。並びはキャラクタのpropsの宣言順。

    currentLocationCard: CardContent

    現在地を映す札(nestedLocationsの先頭の札)。プレイヤーが今どこに居るかを言う口で、 設置物レーンにピン留めされる札とは別物——レーンは外側の場所を映していることがある。

    currentLocationTemperature: number | undefined

    陽炎が立つかを決める、現在地の気温(ClimateSystem.md 1.1節)。陽炎が歪ませるのはレーン= 今居る土地の地面(ScreenLayout.md 7.5.4節)なので、空ではなく足元を読む。語彙を持たないCodexでは undefined。

    elapsedDays: number
    hour: number
    mapLands: readonly MapLandView[]

    地図ウィンドウに出す既知の土地(現在地と、発見済みの道の両端)。

    mapRoads: readonly MapRoadView[]

    地図ウィンドウに出す発見済みの道。

    minute: number
    nestedLocations: readonly NestedLocationView[]

    設置物レーンが映せる場所(内側から外側へ。先頭が現在地で、必ず1件以上)。現在地がそれ自体 さらに別の場所の中にあるときだけ2件以上になる——筏で海に出ている間、住居の中に居る間。 今どれを映しているかは画面が持つ(ScreenLayout.md 7.1.1節)。

    常に見えている3つのレーンが、現在地について映しているスロット。画面が自分で名指しするのは これだけで、それ以外の場所はカードや現在地が名乗るvisible_slotsから来る(cardPlaces参照)。

    設置物レーンが実際に映しているのはここではなくnestedLocationsのどれか1件。

    properties: readonly StatusContent[]

    キャラクタのプロパティ全部(propsの宣言順)。タグの有無で絞らない——タグが決めるのは どこへ並べるか(常時のバー・プロパティのタブ)だけで、詳細を開ける相手はそれより広い。 ホームシックの詳細に出る居心地のように、どこにも並ばないプロパティが影響の枠として現れる (Windows.md 8.2節)。

    propertyCategories: readonly PropertyCategory[]

    キャラクタのプロパティのカテゴリ(property_tagsの宣言順)。プロパティのタブの中身そのもので、 印を重ねる側(ShownStatuses.tabs)が読む。子ウィンドウへ出るぶんはcharacterWindow.propertiesが持つ。

    slotViewOf: (place: Slot) => SlotView

    その場所を並びとして見せるのに要るもの。場所ごとに変わるので、値ではなく問い合わせ。

    statuses: readonly StatusContent[]

    ステータスエリアに出す候補(statusタグが付いたもの、StatusArea.md)。 このうち実際に出すのは、安全域を外れたものと固定表示にされたものだけ(statusRows参照)。

    visible: (object: WorldObject) => boolean

    その物が現在地から見えるか(ScreenLayout.md 7.1.1節)。見えるのはnestedLocationsのどれかの 中に在るものなので、筏の中に居れば外側の海区に在るものも見えている——「現在地の子か」では 足りないのはそのため。

    答えるのは個体ごとで、どのレーンが今どこを映しているかには依らない。 映す先を切り替えた だけで見えるものが変われば、切り替えのたびに子ウィンドウが閉じることになる。

    weather: string | undefined

    空の演出(ScreenLayout.md 7.5節)が読む、今の天気と明るさ。いずれも語彙を持たないCodexではundefined。 天気は識別子(light_rainなど、ClimateSystem.md 4.2節)、明るさは太陽高度と天気を畳んだ実効値 (EVスケール、IlluminationSystem.md 1節)。

    weatherLabel: string | undefined

    状況エリアの窓に出す天気の名前(Localizationのsymbol_texts節)。絵だけでは晴天どうしを 区別できないため、名前は必ず出す(ScreenLayout.md 5節)。天気の語彙を持たないCodexではundefined。

    windowOf: (object: WorldObject) => ObjectWindowView

    その物の子ウィンドウ。物ごとに変わるので、値ではなく問い合わせで答える。キャラクタと現在地は 画面から名前で開く入口なので、同じ答えを上の2つが持つ。