8-bit Enemy Health Display
8bitcn/enemy-health-displayFreeComponent
A retro-styled enemy health display component with health bar, name, and level
Install it
npx shadcn@latest add https://www.8bitcn.com/r/enemy-health-display.jsonSource
1import { type VariantProps, cva } from "class-variance-authority";23import { cn } from "@/lib/utils";45import HealthBar from "@/components/ui/8bit/health-bar";67import "@/components/ui/8bit/styles/retro.css";89export const enemyHealthDisplayVariants = cva("", {10 variants: {11 variant: {12 default: "",13 retro: "retro",14 },15 size: {16 sm: "text-xs",17 md: "text-sm",18 lg: "text-base",19 },20 textColor: {21 red: "text-red-500",22 orange: "text-orange-500",23 yellow: "text-yellow-500",24 green: "text-green-500",25 blue: "text-blue-500",26 purple: "text-purple-500",27 },28 },29 defaultVariants: {30 variant: "retro",31 size: "md",32 textColor: "red",33 },34});3536export interface EnemyHealthDisplayProps37 extends React.ComponentProps<"div">,38 VariantProps<typeof enemyHealthDisplayVariants> {39 enemyName: string;40 level?: number;41 currentHealth: number;42 maxHealth: number;43 showLevel?: boolean;44 showHealthText?: boolean;45 healthBarVariant?: "retro" | "default";46 healthBarColor?: string;47 enemyNameColor?: string;48}4950export default function EnemyHealthDisplay({51 className,52 variant,53 size,54 textColor,55 enemyName,56 level,57 currentHealth,58 maxHealth,59 showLevel = true,60 showHealthText = true,61 healthBarVariant = "retro",62 healthBarColor = "bg-red-500",63 enemyNameColor = "text-foreground",64 ...props65}: EnemyHealthDisplayProps) {66 const healthPercentage = Math.max(67 0,68 Math.min(100, (currentHealth / maxHealth) * 100)69 );70 const healthText = `${currentHealth}/${maxHealth}`;7172 return (73 <div74 className={cn(75 "relative w-full space-y-2",76 enemyHealthDisplayVariants({ variant, size, textColor }),77 className78 )}79 {...props}80 >81 {/* Enemy Name and Level */}82 <div className="flex items-center justify-between">83 <div className="flex items-center gap-2">84 <span className={cn("font-bold", enemyNameColor)}>{enemyName}</span>85 {showLevel && level && (86 <span className="text-muted-foreground">Lv.{level}</span>87 )}88 </div>89 {showHealthText && (90 <span className="text-muted-foreground text-[9px]">{healthText}</span>91 )}92 </div>9394 {/* Health Bar Container */}95 <div className="relative">96 <HealthBar97 value={healthPercentage}98 variant={healthBarVariant}99 className="w-full"100// … truncated
Files it writes
More from 8bitcn
All 121 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| 8-bit Accordionaccordion | 8bitcn | Components | Free | no deps · 2 files | |
| 8-bit Alertalert | 8bitcn | Components | Free | no deps · 2 files | |
| 8-bit Alert Dialogalert-dialog | 8bitcn | Components | Free | no deps · 2 files | |
| 8-bit Avataravatar | 8bitcn | Components | Free | no deps · 2 files | |
| 8-bit Badgebadge | 8bitcn | Components | Free | no deps · 2 files | |
| 8-bit Breadcrumbbreadcrumb | 8bitcn | Components | Free | no deps · 2 files | |
| 8-bit Buttonbutton | 8bitcn | Components | Free | no deps · 2 files | |
| 8-bit Button Groupbutton-group | 8bitcn | Components | Free | no deps · 4 files |
