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

    クラス CardDragController

    レーンをまたぐカードのドラッグ&ドロップ(CardInteraction.md 2節 カードのドラッグ&ドロップ)。

    レーン自体も横ドラッグでスクロールするため、カードの上から始まったドラッグがどちらの操作なのかを 押し始めた位置で見分ける: カードの本体から始まればカードを掴んだとみなし、左右の端から始まった ものはレーンのスクロールへ回す(CardLane.isCardBody)。どちらになるかは押した時点で決まっているので、 掴むのに待ち時間は要らない。

    指が運ぶのは実体の札そのもの(CardTable.CarriedCard)。掴んだ時点で元の束から分かれ、最前面の 層で指に追従する——レーンからはみ出したカードは隣接エリアの背景板に隠れてしまう(CardLane参照) ため、レーンの中に置いたままでは持ち出せない。

    落とし先の上で待つと、同じ束の2枚目以降がついてくる(trackCarry)。離せばついてきたぶんが 一度に入る。ついてくるのは入る枚数までで、ついてきた枚数はそのまま「これだけ入る」という約束になる。 運んでいる札そのものはCarriedCardが持ち、ここは「いつ増やすか・何枚まで許されるか」だけを決める。

    インデックス
    gesture: Gesture | undefined
    lanes: CardLane[] = []
    metrics: () => ScreenMetrics

    画面を作り直すと寸法が変わるため、その都度の値を引けるようにしておく。

    scene: Scene
    • Phaserはしきい値なしでポインタを押した時点でdragstartを出すため、ここではまだ何も始めない ——押しただけならタップなので、押し始めた場所だけ控えて動き出すのを待つ(レーン側も スクロールの基準を控えておく)。

      パラメータ

      • object: GameObject
      • pointer: Pointer

      戻り値 void

    • ついてくる札を1枚増やす。入る枚数まで数えたら止まる(それ以上はついてこない)。

      パラメータ

      • gesture: Gesture
      • max: number

      戻り値 boolean

    • タップと見分けられるだけ動いたら、押し始めた位置でカードのドラッグかレーンのスクロールかを 決める。向きは見ない——どちらの操作かは押した時点で決まっており、動きはその始まりを知らせるだけ。

      パラメータ

      • gesture: Gesture
      • pointer: Pointer

      戻り値 void

    • 今のポインタ位置で言うことのあるドロップと、その中身(何も言うことが無ければundefined)。

      返ったからといって、離せば起きるとは限らない。 理由を言うためだけの落とし先も返る (info.enabled がfalse、CardInteraction.md 2.1節)ので、実際に起こす側(end)は必ずenabledで 絞る——絞りを外すと、何も起きない落とし先へonDropが走り、操作ログが「入れた」と嘘の再現手順を 残す(PlayScene.dropLabel)。見せる側(follow)は絞らない。それが理由を出すための落とし先だから。

      パラメータ

      • gesture: Gesture
      • pointer: Pointer

      戻り値 { drop: CardDrop; info: CardDropInfo } | undefined

    • ドロップの実行はカードを動かすので、その前にドラッグ中の表示物を片付けておく。

      パラメータ

      • pointer: Pointer

      戻り値 void

    • 運んでいる札をポインタの中心へ置き、今の位置で言うことのあるドロップ先を枠で示す。枠が出ることは 「離せば起きる」を意味しない——理由を言うためだけの落とし先には灰色の枠が出る(同 2.1節)。

      パラメータ

      • gesture: Gesture
      • pointer: Pointer

      戻り値 void

    • 今掴んでいるカードを受け入れられるカードすべてのふちを光らせる。

      パラメータ

      • gesture: Gesture

      戻り値 void

    • 同じ落とし先の上に指を止めて留まっている間、束の2枚目以降を1枚ずつ引き連れていく(レーンの端を 押し続けて送るのと同じ速さ、holdRepeat)。待ち時間は指が止まってから数える——動いている間に 時計を進めると、落とすつもりで空き枠を横切っただけでついてきてしまう(CARRY_REST_SLOP)。

      落とし先が変わっても、そこがそのまま受け取れるなら運んでいる枚数は保つ。運んでいる枚数は 「これだけ入る」という約束なので、守れなくなる枚数——新しい落とし先に入りきらないぶん——だけを 返せばよい。ハンドレーンの隣の空き枠へずらしただけで数え直しになると、枚数が多いほど待たされる。

      戻り値は運ぶ枚数が変わったかどうか。

      パラメータ

      戻り値 boolean