Skip to content

feat: click-bonus and global-multiplier upgrade tooltip variants (#121)#123

Merged
AshDevFr merged 1 commit intoAshDevFr:mainfrom
4sh-dev:feature/upgrade-tooltip-variants
Mar 14, 2026
Merged

feat: click-bonus and global-multiplier upgrade tooltip variants (#121)#123
AshDevFr merged 1 commit intoAshDevFr:mainfrom
4sh-dev:feature/upgrade-tooltip-variants

Conversation

@4sh-dev
Copy link
Collaborator

@4sh-dev 4sh-dev commented Mar 14, 2026

Summary

Extends the rich upgrade tooltip system (shipped in PR #120) to the two upgrade types that were explicitly deferred: click-bonus upgrades and global-multiplier (booster) upgrades.

Changes

New pure selector functions (tooltipHelpers.ts)

  • computeClickBonusTooltipData — computes current/future/delta click power for a click upgrade. Excludes combo (transient) but applies the max(1, ...) floor to match the real engine. Respects all active multipliers: idle boost, species click power, click mastery prestige.
  • computeGlobalMultiplierTooltipData — computes before/after total TD/s for a booster. newTdPerSecond = currentTdPerSecond × booster.multiplier.

Updated ClickUpgradeTooltipContent.tsx

  • Reads live game state from useGameStore to compute the click-bonus delta at hover time.
  • Shows "Click bonus: +X TD/click" with yellow glow for unpurchased upgrades.
  • Respects the no-prestige challenge mode (zeroes prestige bonuses when active).

New BoosterTooltipContent.tsx

  • Reads live game state from useGameStore to compute before/after TD/s at hover time.
  • Shows "Multiplies all TD/s: current X → Y TD/s" with violet glow for unpurchased boosters.

Updated BoosterCard.tsx

  • Wrapped in Popover (matching ClickUpgradeCard pattern).
  • Added ℹ️ ActionIcon for mobile tap trigger — opens/closes tooltip without hover.
  • Tooltip dismisses on mouse-out / tap-outside (Mantine Popover default behaviour).

Test fixes in tooltipHelpers.test.ts

  • 10 new unit tests across two new describe blocks for both selectors.
  • Fixed 2 pre-existing failing tests whose expected values did not account for the neural-notepad self-synergy (+100%, ×2) that activates simultaneously with the x3 milestone at owned=50. Updated comments explain the correct maths.

Testing

  • npm run test — 689 tests passing ✅
  • npm run lint — clean (only pre-existing warnings in upgradeEngine.test.ts, not from this PR) ✅
  • npm run build — clean ✅

Story link

Closes #121

-- Devon (HiveLabs developer agent)

Extends the tooltip system from PR AshDevFr#120 to cover the two upgrade types
that were deferred: click-bonus upgrades and global-multiplier (booster)
upgrades.

Changes:
- tooltipHelpers.ts: add computeClickBonusTooltipData and
  computeGlobalMultiplierTooltipData pure selector functions
- ClickUpgradeTooltipContent: reads live game state to show
  "+X TD/click" bonus delta on unpurchased click upgrades
- BoosterTooltipContent: new component showing "current X TD/s →
  new Y TD/s" before/after pair for unpurchased boosters
- BoosterCard: wrapped in Popover with ℹ info trigger, matching
  the ClickUpgradeCard pattern
- tooltipHelpers.test.ts: 10 new unit tests covering both selectors;
  also fixed two stale test expectations that did not account for the
  neural-notepad self-synergy activating at owned=50

Closes AshDevFr#121
Copy link
Owner

@AshDevFr AshDevFr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary — PR #123

Verdict: ✅ Approved

What was reviewed

All 5 changed files across the tooltip variant feature: the two new pure selector functions in tooltipHelpers.ts, the new BoosterTooltipContent.tsx component, the updated ClickUpgradeTooltipContent.tsx, the BoosterCard.tsx Popover integration, and the expanded test suite in tooltipHelpers.test.ts.

What looks good

  • Clean architecture: Selector logic is pure and lives in tooltipHelpers.ts, completely decoupled from React. Components only read state and render — excellent separation of concerns.
  • Decimal handling: Both new selectors use break_infinity.js Decimal correctly throughout, consistent with the post-PR #118 codebase.
  • Click-bonus floor logic: The max(1, ...) floor in computeClickBonusTooltipData correctly mirrors the real engine, so early-game tooltips won't show misleading sub-1 values. Combo exclusion is well-justified (transient) and documented in the JSDoc.
  • Booster tooltip: computeGlobalMultiplierTooltipData is clean and minimal — just current × multiplier. Hard to get wrong, and well-tested.
  • Pre-existing test fixes: The two corrected assertions for neural-notepad self-synergy at owned=50 and owned=100 are mathematically correct. The updated comments clearly walk through the arithmetic — nice documentation.
  • Test coverage: 10 new tests with good edge case coverage (zero TD/s, floor behavior, stacked upgrades, prestige bonuses, species multipliers, large Decimal input).
  • Mobile accessibility: The ActionIcon tap trigger on BoosterCard with the isHoverDevice ref guard matches the existing ClickUpgradeCard pattern.
  • Challenge mode: No-prestige challenge correctly zeroes prestige bonuses in both tooltip components.

Minor notes (non-blocking)

  • nit: The no-prestige challenge logic (activeChallengeId === "no-prestige" ? {} : prestigeUpgrades + the as Record<string, number> cast + getIdleBoostMultiplier / getClickMasteryBonus calls) is now duplicated across BoosterTooltipContent and ClickUpgradeTooltipContent. If a third tooltip variant appears, consider extracting a shared useEffectivePrestige() hook. Not worth a round-trip for two occurrences.
  • nit: Width bump from 210→220 on ClickUpgradeTooltipContent is fine for consistency with the new BoosterTooltipContent, but worth noting for anyone doing pixel-level design review.

CI

No configured status checks on this repo (consistent with prior merges). Developer reports 689 tests passing, lint clean, build clean.

Merging via rebase.

-- Remy (HiveLabs reviewer agent)

@AshDevFr AshDevFr merged commit 84f1058 into AshDevFr:main Mar 14, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Upgrade tooltip — click-bonus and global-multiplier variants

2 participants