'use client'; import { Progress } from '@/components/ui/progress'; import { Badge } from '@/components/ui/badge'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { Shield, Wind, Heart, ShieldCheck, Skull } from 'lucide-react'; import type { RoomDisplayProps } from '@/lib/game/types'; import { ELEMENTS } from '@/lib/game/constants'; const ROOM_TYPE_CONFIG: Record = { combat: { label: 'Combat', icon: '⚔️', color: '#EF4444' }, swarm: { label: 'Swarm', icon: '🐝', color: '#F59E0B' }, speed: { label: 'Speed', icon: '💨', color: '#3B82F6' }, guardian: { label: 'Guardian', icon: '🛡️', color: '#EF4444' }, puzzle: { label: 'Puzzle', icon: '🧩', color: '#8B5CF6' }, } as const; export function RoomDisplay({ roomType, roomConfig, primaryEnemy, swarmEnemies, puzzleId, puzzleProgress, simpleMode, floorElemDef, floorHP, floorMaxHP, totalDPS, currentAction, activeEquipmentSpells, }: RoomDisplayProps) { // Puzzle Room Display if (roomType === 'puzzle') { return (
🧩 {puzzleId ? puzzleId.replace(/_/g, ' ').toUpperCase() : 'Puzzle Room'}
Progress {((puzzleProgress || 0) * 100).toFixed(0)}%
); } // Single Enemy Display (Combat/Speed/Guardian - non-swarm) if ((roomType === 'combat' || roomType === 'speed' || roomType === 'guardian') && primaryEnemy) { return (
{primaryEnemy.name || 'Unknown Enemy'}
{ELEMENTS[primaryEnemy.element]?.sym} {ELEMENTS[primaryEnemy.element]?.name}
{/* Enemy HP Bar */}
{fmt(primaryEnemy.hp)} / {fmt(primaryEnemy.maxHP)} HP
{/* Enemy Properties */}
); } // Swarm Enemies Display if (roomType === 'swarm' && swarmEnemies && swarmEnemies.length > 0) { return (
Swarm Enemies ({swarmEnemies.length})
{swarmEnemies.map((enemy: any, index: number) => (
{enemy.name || `Enemy ${index + 1}`}
{ELEMENTS[enemy.element]?.sym} {fmt(enemy.hp)}/{fmt(enemy.maxHP)} HP
))}
); } // Floor HP Bar (non-swarm, non-puzzle) return (
{fmt(floorHP)} / {fmt(floorMaxHP)} HP DPS: {currentAction === 'climb' && activeEquipmentSpells.length > 0 ? fmtDec(totalDPS) : '—'}
); } function EnemyProperties({ enemy, small }: { enemy: any; small?: boolean }) { const props = []; if (enemy.armor > 0) props.push({ type: 'armor', label: `${(enemy.armor * 100).toFixed(0)}% Armor`, icon: Shield }); if (enemy.dodgeChance > 0) props.push({ type: 'dodge', label: `${(enemy.dodgeChance * 100).toFixed(0)}% Dodge`, icon: Wind }); if (enemy.healthRegen > 0) props.push({ type: 'regen', label: `${(enemy.healthRegen * 100).toFixed(1)}% Regen`, icon: Heart }); if (enemy.barrier > 0) props.push({ type: 'barrier', label: `${(enemy.barrier * 100).toFixed(0)}% Barrier`, icon: ShieldCheck }); if (props.length === 0) return null; return (
{props.map((p, i) => { const Icon = p.icon; return ( {p.label}

Reduces incoming damage by {(enemy.armor * 100).toFixed(0)}%

); })}
); } function fmt(value: number): string { if (value >= 1e12) return (value / 1e12).toFixed(2) + 't'; if (value >= 1e9) return (value / 1e9).toFixed(2) + 'b'; if (value >= 1e6) return (value / 1e6).toFixed(2) + 'm'; if (value >= 1e3) return (value / 1e3).toFixed(2) + 'k'; return value.toFixed(0); } function fmtDec(value: number): string { if (value >= 1e12) return (value / 1e12).toFixed(2) + 't'; if (value >= 1e9) return (value / 1e9).toFixed(2) + 'b'; if (value >= 1e6) return (value / 1e6).toFixed(2) + 'm'; if (value >= 1e3) return (value / 1e3).toFixed(2) + 'k'; return value.toFixed(0); }