== Map node hover previews ==

Branching map navigation was a coin flip — node labels said “FIGHT” generically with no information about which enemies, which elite, or what’s in the shop. Players couldn’t make strategic path choices.

Now hovering any node shows a multi-line tooltip via the existing FloatingTooltipUI: Combat -> “COMBAT” + bullet list of enemy names EliteCombat -> “ELITE COMBAT” + enemies + “Drops gear on victory” Boss -> “BOSS” + boss name + “End of the act. Heal first.” Shop -> “SHOP” + “3 cards / 3 gear” + “Spend gold to expand…” Rest -> “REST SITE” + “Heal X HP” (uses player’s actual max) + “Or upgrade a card.” Event -> “EVENT” + ”???” + “A choice. Outcomes vary.” Visited -> “CLEARED” (low-noise indicator)

EventTrigger PointerEnter/Exit attached per node in BuildNode. Reuses FloatingTooltipUI which is already used for status icon hovers, so no new tooltip system needed. Rich-text colored to match the node icon glyph color (matching visual identity across hover state and node tile).

== Card draw animation ==

Cards used to instantly snap into hand position. Now they slide in from the deck pile (left of screen) with a fade-in over 0.22s, with a 30ms cascade between cards in the same draw — gives the deck system a tactile “cards being dealt” feel that separates the game from “deckbuilder is just buttons”.

CardUI gains three new coroutines:

  • AnimateInFromDeck(finalPos, finalRot, delay) — slide+fade for draws
  • AnimateOutToDiscard(delay) — slide right + fade-to-half for end of turn cascade (wired in next pass)
  • AnimateExhaust() — red flash + scale-down + fade for exhausted cards (wired in next pass when PlayCard exhaust path gets the call)

CombatUIManager.RefreshHand now diffs old vs new hand by CardData reference. Cards already in hand stay put when the fan re-balances on hand-size change. Newly drawn cards animate in from the deck side with the cascade. Cards no longer in hand (just played) get destroyed in the same RefreshHand pass.

This commit ships the DRAW path. End-of-turn cascade-discard and mid-play exhaust animation are wired in a follow-up — the infrastructure is in place.

Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]


Commit 73fc221 by astafford8488.