import type { Achievement } from "@elysium/types"; import { useState } from "react"; import { useGame } from "../../context/GameContext.js"; import { formatNumber } from "../../utils/format.js"; import { LockToggle } from "../ui/LockToggle.js"; const conditionDescription = (achievement: Achievement): string => { const { condition } = achievement; switch (condition.type) { case "totalGoldEarned": return `Earn ${formatNumber(condition.amount)} total gold`; case "totalClicks": return `Click ${formatNumber(condition.amount)} times`; case "bossesDefeated": return `Defeat ${condition.amount} boss${condition.amount > 1 ? "es" : ""}`; case "questsCompleted": return `Complete ${condition.amount} quest${condition.amount > 1 ? "s" : ""}`; case "adventurerTotal": return `Recruit ${formatNumber(condition.amount)} total adventurers`; case "prestigeCount": return `Prestige ${condition.amount} time${condition.amount > 1 ? "s" : ""}`; case "equipmentOwned": return `Own ${condition.amount} equipment item${condition.amount > 1 ? "s" : ""}`; } }; interface AchievementCardProps { achievement: Achievement; } const AchievementCard = ({ achievement }: AchievementCardProps): React.JSX.Element => { const isUnlocked = achievement.unlockedAt !== null; return (
{achievement.description}
{conditionDescription(achievement)}
{achievement.reward?.crystals != null && (💎 +{achievement.reward.crystals} Crystals
)}Loading...
{unlocked.length} / {achievements.length} unlocked