| <script lang="ts"> | |
| export let fieldEffects: Array<{ effect: string; turnsRemaining?: number; side?: string }> = []; | |
| function getFieldEffectColor(effect: string): string { | |
| if (effect.includes('weather')) return '#4dabf7'; | |
| if (effect.includes('terrain')) return '#51cf66'; | |
| if (effect.includes('hazard')) return '#ff6b6b'; | |
| return '#868e96'; | |
| } | |
| function getFieldEffectIcon(effect: string): string { | |
| if (effect.includes('storm')) return 'βοΈ'; | |
| if (effect.includes('rain')) return 'π§οΈ'; | |
| if (effect.includes('sun')) return 'βοΈ'; | |
| if (effect.includes('snow')) return 'π¨οΈ'; | |
| if (effect.includes('spikes')) return 'β‘'; | |
| if (effect.includes('reflect')) return 'π‘οΈ'; | |
| return 'π'; | |
| } | |
| </script> | |
| {#if fieldEffects.length > 0} | |
| <div class="field-effects"> | |
| <div class="field-effects-header">Field Effects</div> | |
| {#each fieldEffects as effect} | |
| <div | |
| class="field-effect" | |
| style="background-color: {getFieldEffectColor(effect.effect)}" | |
| title="{effect.effect}{effect.turnsRemaining ? ` (${effect.turnsRemaining} turns)` : ''}" | |
| > | |
| <span class="effect-icon">{getFieldEffectIcon(effect.effect)}</span> | |
| <span class="effect-name">{effect.effect}</span> | |
| {#if effect.turnsRemaining} | |
| <span class="turns-remaining">{effect.turnsRemaining}</span> | |
| {/if} | |
| {#if effect.side} | |
| <span class="effect-side">({effect.side})</span> | |
| {/if} | |
| </div> | |
| {/each} | |
| </div> | |
| {/if} | |
| <style> | |
| .field-effects { | |
| position: absolute; | |
| top: 10px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 4px; | |
| z-index: 10; | |
| } | |
| .field-effects-header { | |
| background: rgba(0, 0, 0, 0.7); | |
| color: white; | |
| padding: 2px 8px; | |
| border-radius: 12px; | |
| font-size: 0.7rem; | |
| font-weight: bold; | |
| } | |
| .field-effect { | |
| display: flex; | |
| align-items: center; | |
| gap: 4px; | |
| padding: 3px 8px; | |
| border-radius: 12px; | |
| color: white; | |
| font-size: 0.7rem; | |
| font-weight: bold; | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); | |
| background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.1) 50%, transparent 70%); | |
| animation: shimmer 2s infinite; | |
| } | |
| .effect-icon { | |
| font-size: 0.8rem; | |
| } | |
| .effect-name { | |
| font-size: 0.6rem; | |
| text-transform: capitalize; | |
| } | |
| .turns-remaining { | |
| background: rgba(255, 255, 255, 0.3); | |
| border-radius: 8px; | |
| padding: 1px 4px; | |
| font-size: 0.6rem; | |
| } | |
| .effect-side { | |
| font-size: 0.6rem; | |
| opacity: 0.8; | |
| } | |
| @keyframes shimmer { | |
| 0%, 100% { background-position: -100% 0; } | |
| 50% { background-position: 100% 0; } | |
| } | |
| </style> |