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

    クラス MapWindow

    地図ボタンから開く全画面の子ウィンドウ。既知の土地のカードを、ユーザがドラッグで並べて 自分だけの地図を作る(Windows.md 7節 地図ウィンドウ)。

    背景の島の輪郭は実際の地形ではなく、カードを置くときの目安になる「個性のない円形に近い島」。 実際の配置を写してしまうと、自分で地図を描き上げる遊びが成り立たないため。

    ピンチ(スマホ)・ホイール(PC)で等倍〜MAX_ZOOM倍に拡大でき、拡大中は背景のドラッグで 見る範囲を動かせる。カードの位置は画面に対する正規化座標で持ち、ズームとパンは描画の変換 だけに閉じる——保存される位置(onPlace)がズーム状態に依存しないようにするため。

    インデックス
    cardLayer: Container

    土地のカードだけを入れる器。掴んだ札を手前へ出す先をこの中に閉じるためのもの——シーンごと 持ち上げると、階梯の層を持つ表示物まで越えてしまう(screenDepth.ts)。

    cards: Map<number, Card> = ...

    サイトindex→そのカードと、正規化座標での現在位置(ウィンドウ内の真実はこちら)。

    metrics: ScreenMetrics
    outline: Graphics
    ownedObjects: GameObject[] = []
    panLast: Vector2 | undefined

    背景ドラッグ(パン)の直前のポインタ位置。差分で送ることでピンチと干渉しない。

    panX: number = 0
    panY: number = 0
    pinchDistance: number | undefined

    ピンチ中の直前の2本指の間隔と中点(両指が揃っていない間はundefined)。

    pinchMid: Vector2 | undefined
    placements: Map<number, MapPlacement> = ...
    roadInk: Graphics
    roads: readonly MapRoadView[]
    scene: Scene
    sceneListeners: { event: string; handler: (...args: never[]) => void }[] = []

    シーン全体の入力に付けた聞き手。closeで必ず外す。

    zoom: number = 1

    描画の変換。screen = norm × 画面寸法 × zoom + pan。

    • 背景のドラッグで見る範囲を動かす(等倍では動く余地が無いので実質ズーム中だけ)。

      パラメータ

      • surface: Rectangle

      戻り値 void

    • ホイールとピンチの拡大縮小。どちらもポインタ位置(2本指なら中点)の下の地点を動かさずに 倍率だけを変える。ピンチはシーン全体の入力で見る——2本目の指はカードや背景のどれを押して いるか分からないため、オブジェクト単位のイベントでは追えない。

      戻り値 void

    • 今の変換(ズーム・パン)で、島の輪郭・カード・道を描き直す。

      戻り値 void

    • カードの左上位置を、閉じるボタンの帯を除いた画面内へ収める。

      パラメータ

      • x: number
      • y: number
      • zoom: number

      戻り値 { x: number; y: number }

    • 2点を結ぶ2次ベジェの弧に沿って、等間隔に点を打つ。膨らむ向きは辺ごとに固定(bendSign)で、 開くたび・描き直すたびに同じ形になる。

      パラメータ

      • from: Vector2
      • to: Vector2
      • bendSign: number

      戻り値 void

    • 発見済みの道を、カードの中心同士を結ぶ太めの点線の弧として描き直す。ドラッグ中も毎回呼ぶ。

      戻り値 void

    • パラメータ

      • event: string
      • handler: (...args: never[]) => void

      戻り値 void

    • 保存済みの位置が無い土地のうち、これまでに待機列へ並べた数(次に使う待機列の枠番号)。

      パラメータ

      戻り値 number

    • 開いた時点のカードの位置。保存済みならその位置(画面の向きが変わって画面外を指していても 画面内へ収め直す)、まだ置かれていなければ下端の待機列に並べる。開く時点は必ず等倍なので、 画面座標のクランプを正規化座標へそのまま書き戻せる。

      パラメータ

      戻り値 MapPlacement

    • まだ置かれていないカードの初期位置。閉じるボタンにかからないよう、その上の帯へ左から並べ、 入りきらない分は上の行へ折り返す。ここはあくまで待機列で、位置はドラッグで置くまで保存しない。

      パラメータ

      • index: number

      戻り値 MapPlacement

    • ポインタ位置の下の地点を固定したまま倍率を変える(等倍〜MAX_ZOOM倍)。

      パラメータ

      • factor: number
      • x: number
      • y: number

      戻り値 void