import { useEffect, useState } from "react"; import { ROGUE_TRIALS_TRIO_ROUND, RUN_BUFFS, bossHealthMultiplier, effectiveRunBuffRank, formatRunBuffEffect } from "../game/roguelike"; import { HEALER_CLASSES } from "../game/healers"; import { isRunBuffInputLocked, useGameStore } from "../game/store"; import { DEFAULT_CONTROLLER_GLYPHS } from "../input/controllerGlyphs"; export function BuffDraftPanel({ className = "" }: { className?: string }) { const round = useGameStore((state) => state.round); const runMode = useGameStore((state) => state.runMode); const healerClassId = useGameStore((state) => state.healerClassId); const runBuffRanks = useGameStore((state) => state.runBuffRanks); const passiveRunBuffId = useGameStore((state) => state.passiveRunBuffId); const choices = useGameStore((state) => state.draftBuffIds); const selected = useGameStore((state) => state.selectedRunBuffId); const inputUnlockAt = useGameStore((state) => state.runBuffInputUnlockAt); const setSelected = useGameStore((state) => state.setSelectedRunBuff); const choose = useGameStore((state) => state.chooseRunBuff); const continueRun = useGameStore((state) => state.continueRoguelikeRound); const nextRound = round + 1; const nextBossCount = runMode === "rogue-trials" && nextRound === ROGUE_TRIALS_TRIO_ROUND ? 3 : 2; const abilities = HEALER_CLASSES[healerClassId].abilities; const [inputLocked, setInputLocked] = useState(() => isRunBuffInputLocked(useGameStore.getState())); useEffect(() => { const remaining = inputUnlockAt - Date.now(); setInputLocked(remaining > 0); if (remaining <= 0) return; const timer = window.setTimeout(() => setInputLocked(false), remaining); return () => window.clearTimeout(timer); }, [inputUnlockAt]); return (
Claim required. Round {nextRound} begins with {nextBossCount === 3 ? "an unseen trio" : "two new bosses"} at {Math.round(bossHealthMultiplier(nextRound) * 100)}% base HP.