Files
FranciaOcupada/CAMBIOS_SESION_2025-12-08.md
Resistencia Dev c67f97845a feat(ui): Enhance responsive design and game flow
- Intro: Change title to 'Sombras en París'
- Roll Call: Make screen fully responsive with fixed header
- Team Building: Clean up leader UI and make player tokens responsive
- Mission History: Fix expand/collapse interaction (z-index issue)
2025-12-12 19:14:14 +01:00

5.6 KiB

RESUMEN DE CAMBIOS - SESIÓN 2025-12-08

1. CORRECCIÓN DE PANTALLAS DE VICTORIA (ALLIED_WIN y NAZIS_WIN)

Problema inicial:

  • Las pantallas de victoria mostraban el tablero de juego encima de la imagen de fondo
  • Había imágenes duplicadas y rutas incorrectas (.jpg vs .png)

Solución implementada:

GameBoard.tsx:

  • Fondo dinámico según fase: El fondo del componente GameBoard ahora cambia según la fase:

    • ALLIED_WIN → muestra /assets/images/tokens/mission_success.png
    • NAZIS_WIN → muestra /assets/images/tokens/mission_fail.png
    • Otras fases → muestra /assets/images/ui/bg_game.png
  • Área del tablero oculta en victorias: El div del tablero (con las cartas de misión, tablero táctico, etc.) se oculta completamente cuando gameState.phase === ALLIED_WIN || gameState.phase === NAZIS_WIN

VictoryScreen.tsx:

  • Eliminada imagen de fondo redundante: Se eliminó el div con la imagen de fondo que intentaba cargar mission_fail.jpg y mission_success.jpg, ya que el GameBoard ahora maneja estos fondos.

Archivos modificados:

  • client/src/components/GameBoard.tsx (líneas 293-307, 309-442)
  • client/src/components/VictoryScreen.tsx (líneas 39-50 eliminadas)

Commit:

  • Hash: 6e65152
  • Mensaje: "feat: Fix victory screens background images"

2. MEJORA DE CARTAS DE MISIÓN (Fase MISSION)

Problema inicial:

  • Las cartas solo se opacaban cuando se seleccionaba la otra
  • Si solo había una carta (jugadores aliados), no había feedback visual de que se había seleccionado

Solución implementada:

Cambio de lógica de opacidad:

ANTES:

  • Sin voto: todas las cartas al 100% de opacidad
  • Con voto: la carta NO seleccionada se opaca al 50%

DESPUÉS:

  • Sin voto: todas las cartas al 50% de opacidad (opacadas por defecto)
  • Con voto: solo la carta seleccionada se pone al 100%, las demás permanecen al 50%

Implementación:

// Carta de Éxito
className={`group transition-opacity ${missionVote === true ? 'opacity-100' : 'opacity-50'}`}

// Carta de Sabotaje (solo alemanes)
className={`group transition-opacity ${missionVote === false ? 'opacity-100' : 'opacity-50'}`}

Archivos modificados:

  • client/src/components/GameBoard.tsx (líneas 628-678)

Beneficio:

  • Ahora es fácil ver qué carta has seleccionado, incluso cuando solo tienes una opción disponible

3. INTENTO DE MEJORA DEL HISTORIAL DE MISIONES (NO FUNCIONAL)

Objetivo:

  • Mostrar los participantes de cada misión al hacer clic en el número del historial

Implementación intentada:

Estado añadido:

const [expandedMission, setExpandedMission] = useState<number | null>(null);

Lógica implementada:

  • Click en número de misión → expande mostrando nombres de participantes
  • Click de nuevo → colapsa la lista
  • Solo una misión puede estar expandida a la vez
  • Indicador visual: anillo amarillo alrededor del número cuando está expandido

Código añadido en GameBoard.tsx (líneas 856-899):

{gameState.missionHistory.map((mission, idx) => {
    const isExpanded = expandedMission === idx;
    
    return (
        <div key={idx} className="relative">
            <div
                className={`... ${isExpanded ? 'ring-2 ring-yellow-400' : ''}`}
                onClick={(e) => {
                    e.stopPropagation();
                    console.log('Click en misión', idx, 'Estado actual:', expandedMission);
                    setExpandedMission(isExpanded ? null : idx);
                }}
            >
                {mission.round}
            </div>
            
            {isExpanded && (
                <div className="absolute top-10 right-0 bg-black/95 p-2 rounded border border-white/30 min-w-max z-[100]">
                    {mission.team.map((playerId) => {
                        const player = gameState.players.find(p => p.id === playerId);
                        return (
                            <div key={playerId} className="text-xs text-white whitespace-nowrap">
                                {player?.name || playerId}
                            </div>
                        );
                    })}
                </div>
            )}
        </div>
    );
})}

Archivos modificados:

  • client/src/components/GameBoard.tsx (líneas 26, 856-899)

Estado:

⚠️ NO FUNCIONAL - El click no dispara la expansión de la lista de participantes. Posibles causas a investigar:

  • Conflicto con otros event handlers
  • Problema con el z-index o posicionamiento
  • Estado no actualizándose correctamente
  • Necesidad de reiniciar servicios Docker

RESUMEN DE COMMITS

  1. 6e65152 - "feat: Fix victory screens background images"
    • Corregidas pantallas de victoria
    • Eliminadas imágenes redundantes
    • Fondo dinámico según fase

ARCHIVOS PRINCIPALES MODIFICADOS

  1. client/src/components/GameBoard.tsx

    • Fondo dinámico para fases de victoria
    • Área del tablero oculta en victorias
    • Opacidad de cartas de misión mejorada
    • Intento de historial expandible (no funcional)
  2. client/src/components/VictoryScreen.tsx

    • Eliminada imagen de fondo redundante

PENDIENTES / PROBLEMAS CONOCIDOS

  1. Historial de misiones expandible no funciona

    • El código está implementado pero el click no dispara la acción
    • Requiere investigación adicional
  2. ⚠️ Errores de lint

    • Múltiples errores de tipo "JSX element implicitly has type 'any'"
    • Son falsos positivos del IDE en entorno Dockerizado
    • No afectan la funcionalidad de la aplicación

Fecha: 2025-12-08 Hora: 22:59