| <script lang="ts"> | |
| import type { StatusEffect } from '$lib/battle-engine/types'; | |
| export let statusEffects: { type: StatusEffect; turnsLeft?: number }[] = []; | |
| function getStatusColor(status: StatusEffect): string { | |
| switch (status) { | |
| case 'burn': return '#ff6b6b'; | |
| case 'freeze': return '#74c0fc'; | |
| case 'paralyze': return '#ffd43b'; | |
| case 'poison': return '#9775fa'; | |
| case 'sleep': return '#868e96'; | |
| case 'confuse': return '#ff8cc8'; | |
| default: return '#495057'; | |
| } | |
| } | |
| function getStatusIcon(status: StatusEffect): string { | |
| switch (status) { | |
| case 'burn': return 'π₯'; | |
| case 'freeze': return 'βοΈ'; | |
| case 'paralyze': return 'β‘'; | |
| case 'poison': return 'β οΈ'; | |
| case 'sleep': return 'π€'; | |
| case 'confuse': return 'π΅'; | |
| default: return '?'; | |
| } | |
| } | |
| </script> | |
| {#if statusEffects.length > 0} | |
| <div class="status-effects"> | |
| {#each statusEffects as effect} | |
| <div | |
| class="status-effect" | |
| style="background-color: {getStatusColor(effect.type)}" | |
| title="{effect.type}{effect.turnsLeft ? ` (${effect.turnsLeft} turns)` : ''}" | |
| > | |
| <span class="status-icon">{getStatusIcon(effect.type)}</span> | |
| <span class="status-name">{effect.type.toUpperCase()}</span> | |
| {#if effect.turnsLeft} | |
| <span class="turns-left">{effect.turnsLeft}</span> | |
| {/if} | |
| </div> | |
| {/each} | |
| </div> | |
| {/if} | |
| <style> | |
| .status-effects { | |
| display: flex; | |
| gap: 4px; | |
| flex-wrap: wrap; | |
| margin: 4px 0; | |
| } | |
| .status-effect { | |
| display: flex; | |
| align-items: center; | |
| gap: 2px; | |
| padding: 2px 6px; | |
| border-radius: 12px; | |
| color: white; | |
| font-size: 0.7rem; | |
| font-weight: bold; | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); | |
| animation: pulse 1.5s infinite; | |
| } | |
| .status-icon { | |
| font-size: 0.8rem; | |
| } | |
| .status-name { | |
| font-size: 0.6rem; | |
| } | |
| .turns-left { | |
| background: rgba(255, 255, 255, 0.3); | |
| border-radius: 8px; | |
| padding: 1px 4px; | |
| font-size: 0.6rem; | |
| margin-left: 2px; | |
| } | |
| @keyframes pulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.7; } | |
| } | |
| </style> |