IKHSAN
EN Read in EnglishID

snapme

Publik
Branch
master
Commit terakhir
130fdb828 Oktober 2026

relaySlots.ts

Buka raw
import { LAYOUTS, type LayoutId } from "@/lib/layouts"

/* M8 (SE-01, SE-04): siapa pemilik slot mana di strip estafet. Aturannya satu
   untuk semua layout: indeks genap (0-based) milik pembuat, ganjil milik teman.
   Pembuat selalu mengisi dua slot, jadi tombol "Estafet ke Teman" memenuhi
   syarat "minimal setengah slot terisi" di Strip 4, Strip 3, dan Grid 2 x 2.

   Fungsi murni: dipakai server (menyusun baris `relays`) dan klien (bootstrap
   sesi tamu, penguncian baki foto), tanpa menyentuh jaringan. */

export type RelayRole = "host" | "guest"

interface RelaySlotOwner {
  index: number
  owner: RelayRole
}

export function relaySlotsFor(layoutId: LayoutId): RelaySlotOwner[] {
  return Array.from({ length: LAYOUTS[layoutId].shotCount }, (_, index) => ({
    index,
    owner: index % 2 === 0 ? "host" : "guest",
  }))
}

export function hostSlotIndices(layoutId: LayoutId): number[] {
  return relaySlotsFor(layoutId)
    .filter((slot) => slot.owner === "host")
    .map((slot) => slot.index)
}

/** SE-05: slot pembuat yang ditampilkan sebagai bayangan di pratinjau kamera
 *  teman saat slot `targetIndex` gilirannya. Selalu slot sebelumnya (satu
 *  kolom di atas pada strip, sebelah kiri pada grid); slot pertama null. */
export function ghostSlotFor(targetIndex: number): number | null {
  return targetIndex > 0 ? targetIndex - 1 : null
}
byte
1.364
baris
37
Jenis
ts
Commit terakhir
28 Oktober 2026