Initial pass at unicorn pack.
This commit is contained in:
@@ -74,6 +74,11 @@ export function ShopPhase({ view, you, send }: Props) {
|
||||
const myTurn = view.turn === view.youSeat && !you.ready
|
||||
const avocados = you.avocados ?? 0
|
||||
const trumpets = you.trumpets ?? 0
|
||||
const mana = you.mana ?? 0
|
||||
const shopPeek = you.shopPeek
|
||||
const hasBigfoot = (you.deck ?? []).some((c) =>
|
||||
(c.effects as { action?: string }[] | undefined)?.some((e) => e.action === 'peekShop'),
|
||||
)
|
||||
const freeBuy = !!you.firstBuyFree // Manta Ray: next buy costs no gold
|
||||
const canBuy = myTurn && (you.coins > 0 || avocados > 0 || freeBuy)
|
||||
// Nudge the player to pass once there's nothing left to buy.
|
||||
@@ -382,6 +387,28 @@ export function ShopPhase({ view, you, send }: Props) {
|
||||
🎺 ×{trumpets}
|
||||
</div>
|
||||
)}
|
||||
{mana > 0 && (
|
||||
<div className="trumpet-indicator" title="Mana — a persistent resource that powers Unicorn abilities">
|
||||
🔮 ×{mana}
|
||||
</div>
|
||||
)}
|
||||
{hasBigfoot && (
|
||||
<div className="peek-indicator">
|
||||
<button
|
||||
className="btn btn-ghost btn-sm"
|
||||
disabled={!myTurn || !!shopPeek}
|
||||
onClick={() => send({ type: 'peek' })}
|
||||
title="Bigfoot: look at the top of the shop deck (once per round)"
|
||||
>
|
||||
👁 Peek shop deck
|
||||
</button>
|
||||
{shopPeek && (
|
||||
<div className="peek-card" title="Next card off the shop deck">
|
||||
<CardView card={shopPeek} size="sm" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</section>
|
||||
|
||||
{/* Actions */}
|
||||
@@ -496,6 +523,28 @@ export function ShopPhase({ view, you, send }: Props) {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Water of Youth sacrifice picker (Unicorn pack) */}
|
||||
{view.pendingSacrifice?.playerId === you.id && (
|
||||
<div className="modal-backdrop">
|
||||
<div className="modal">
|
||||
<h3>Sacrifice a pet to draw a free tier {view.pendingSacrifice.tier} card</h3>
|
||||
<div className="modal-cards">
|
||||
{(view.pendingSacrifice.options ?? []).map((id) => {
|
||||
const c = deck.find((d) => d.id === id)
|
||||
return c ? (
|
||||
<CardView
|
||||
key={id}
|
||||
card={c}
|
||||
size="lg"
|
||||
onClick={() => send({ type: 'sacrificeChoose', card: id })}
|
||||
/>
|
||||
) : null
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{cardFlyer &&
|
||||
createPortal(
|
||||
<div
|
||||
|
||||
Reference in New Issue
Block a user