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

    クラス ObjectWindow

    カードやスロットのボタンを押すと開く子ウィンドウ(Windows.md 1節 子ウィンドウ)。

    組み方はどれも同じ4段で、最上段が見出し(常にオブジェクトの名前)、その下がタブ、 最下段がボタン(操作の行と「閉じる」の行、addActions)、間がタブの中身。

    タブの中身は面(ObjectWindowPane)が丸ごと持つ。 窓がするのは、開いている面を捨てて次の面を 作ることだけで、何がどう描かれるかは知らない。だから「説明のタブだけがオブジェクト自身のカードを 出す」も「スロットのタブは中段を丸ごと並びに使う」も、窓ではなくそれぞれの面が決めている。

    説明と中身の並びはタブで分ける(Windows.md 1.2節)。どちらか一方しか出せないと、 オブジェクトの一面しか見せられない。

    寸法はタブによらず固定(横幅・高さとも、最も要求の大きい面へ合わせる)。切り替えのたびに枠が 伸び縮みすると、どのタブが今開いているのかより枠の動きのほうが目に付く。

    インデックス
    actionObjects: GameObject[] = []

    最下段のボタン。setActionsで丸ごと作り直すので、他の表示物とは分けて持つ。

    actionRows: readonly Rect[]

    ボタンを並べる行(上が操作、下が「閉じる」)。作り直すときも同じ場所へ置く。

    操作の行は、開いた時点で操作を持つウィンドウにだけ空ける。 説明文だけのウィンドウで空の行を 空けると、下に何も無い帯が残る。開いている間に操作の可否も並びも引き直す(setActions)。

    content: Rect

    タブの中身を置く矩形(中段いっぱい)。タブを切り替えても動かない。

    exploration: ExplorationContent | undefined
    metrics: ScreenMetrics
    onClose: () => void
    onTabChange: ((tab: string) => void) | undefined
    openedTabKey: string = DESCRIPTION_TAB

    今開いているタブの識別子(replacePaneが、実際に開いた面のものを入れる)。

    ownedObjects: GameObject[] = []

    開いている間ずっと在るもの(台紙・見出し・タブ)。

    pane: OpenPane = ...

    今開いているタブの中身。切り替えのたびに捨てて作り直す。

    properties: readonly PropertyCategory[]

    面が読み直す元。面は作られた時点ではなく、読み直すたびにここを見る。

    scene: Scene

    タブのボタン(選択中だけ塗りを変えるので、作り直さず塗りだけ差し替える)。

    tabSpecs: readonly TabSpec[]

    出せるタブ(並び順)。タブの行を作るのも、今どれが選ばれているかを塗るのも、この並びが唯一の根拠。

    tooltip: Tooltip

    アクションのボタンを長押ししている間だけ出す吹き出し(addActions参照)。

    • get openedTab(): string

      今開いているタブの識別子。呼び出し側の指定がそのまま通るとは限らない(並んでいないタブは 説明へ落ちる)ので、覚えるのも場所を引くのもこちらを見る。

      戻り値 string

    • 操作のボタンを並べる。「閉じる」は操作と同じ行に置かない——閉じるは世界を変えない別のもの なのに同じ行に居ると、操作の数が閉じるの大きさを決め、閉じるが操作の幅を1つぶん削る。数で割る 限りこの綱引きは消えないので、行を分けて切り離す。

      閉じるが常に最下段の同じ場所に在ることは変えない。スマホでは「押しやすい場所に必ず在る」 ことが、閉じる操作の値打ちそのものだからで、折り返しを採らないのもこれが理由 (数によって位置が動く)。

      どちらの行も幅は等分し、数が少ないときに間延びしないよう上限で頭打ちにして、行ごと中央へ寄せる。

      アクションのボタンは、長押しの間だけ説明文とかかる時間を吹き出しに出す。ボタンには名前しか 載らないので、実行する前に「何が起きるか・どれだけ時間を取られるか」を確かめられるようにする。

      パラメータ

      戻り値 void

    • タブの行。タブが1つ(=説明しか無い)ウィンドウでは出さない。

      パラメータ

      戻り値 void

    • 出すタブを並び順に組み立てる。説明 → スロット(宣言順)→ 探索 → プロパティ。

      説明のタブは必ず在り、必ず先頭なので、知らない識別子はここへ落ちる(replacePane)。

      パラメータ

      戻り値 readonly TabSpec[]

    • その役割のレーンの、添字の位置の枠。借りた札を運んでくる先・返すときの出発点で、別のタブへ 移っても、窓を閉じたあとも最後の枠を覚えている(OpenPane)。

      パラメータ

      戻り値 Rect | undefined

    • タブを開く(タブのボタンも、プログラムからの指定もここを通る)。記憶と同じ扱いで覚える (呼び出し側がonTabChangeを受ける)——最後に見えていたものが次も見える、を破らないため。

      既に開いているタブなら何もしない。面を作り直すと、そこに借りている札ごと捨てることになる。

      パラメータ

      • tab: string

      戻り値 void

    • 開いている面を捨てて、そのタブの面を作る。窓が中身に触れるのはここだけで、触れ方は 「捨てて作る」しかない。借りた札はタブによらず借りたままで、描かれないだけ。

      並んでいないタブと省略は説明の面へ落とし、落とした先を開いたタブとして覚える(openedTab)。 要求のほうを覚えると、出ていないタブを記憶に書き、その場所を引こうとすることになる。

      パラメータ

      • tab: string | undefined

      戻り値 void

    • 最下段のボタンを差し替える。ボタンは作った時点の可否で固まっているので、中身を出し入れ できるウィンドウでは、並びを差し替えるたびに呼び直す(PlayScene.showView)。素材を入れれば 「作業する」が押せるようになり、抜けば押せなくなる。

      パラメータ

      戻り値 void

    • 探索率を書き直す。

      発見物の並びはここを通しません。 レーンなので、他のレーンと一緒に差し替えを通ります (PlayScene.shownLanes)。

      パラメータ

      戻り値 void

    • プロパティの行の内容を書き直す。開いている面がどれでも控えは残す——面は読み直すたびにここを 見るので、次に開いたときには最新の値で組み立てられる(setExplorationと同じ形)。

      パラメータ

      戻り値 void

    • ボタンを押している間だけ出す吹き出し。実行できるアクションは長押しで「何が起きるか・どれだけ時間を 取られるか」を、実行できないアクションは押した瞬間に「なぜできないか」を出す(待たせる理由が無いため)。

      パラメータ

      戻り値 HoldHandlers