Files
Ajedrez_Purgatorio/BLOQUEADORES_JUGABILIDAD.md
T

11 KiB

Bloqueadores Críticos para Jugabilidad

Fecha: 12 de mayo de 2026
Estado del Código: 100% compilado, 0 errores
Problema: Código completo pero falta integración entre sistemas


🔴 BLOQUEADORES CRÍTICOS (Impiden jugar)

1. CampaignManager NO integra con BoardManager ⚠️ CRÍTICO

Problema:

  • CampaignManager.LoadChapter() NO llama a BoardManager.SetupBoard(CampaignState)
  • El tablero siempre usa PlacePieces() (setup estándar) en vez de respetar piezas vivas
  • Sistema de persistencia de piezas NO funciona

Impacto:

  • Cuando un jugador pierde piezas en capítulo 1, en capítulo 2 reaparecen
  • El core loop de la campaña (piezas permanentes) está roto
  • El desafío progresivo no existe

Solución:

// En CampaignManager.cs, método LoadChapter(), después de línea ~167
// Agregar ANTES de "// Configurar IA según el capítulo"

// Configurar tablero con piezas disponibles
if (BoardManager.Instance != null && _campaignState != null)
{
    BoardManager.Instance.SetupBoard(_campaignState);
}
else
{
    Debug.LogWarning("[CampaignManager] BoardManager o CampaignState no disponible. Usando setup estándar.");
}

Ubicación exacta: Assets/Game/Scripts/Mono/Core/CampaignManager.cs, línea ~175

Prioridad: 🔴 BLOQUEANTE - Sin esto, la campaña no funciona


2. BoardManager necesita prefabs asignados ⚠️ CRÍTICO

Problema:

  • BoardManager tiene 14 campos SerializeField para prefabs:
    • 6 piezas blancas (pawn, rook, knight, bishop, queen, king)
    • 6 piezas negras
    • 2 casillas (brown, gray)
  • NINGUNO está asignado porque no hay prefabs creados

Impacto:

  • Al dar Play, el tablero intenta instanciar null → NullReferenceException
  • El juego no arranca

Solución:

  1. Crear prefabs de piezas (12 prefabs):

    • Navegar a carpeta donde estén los modelos 3D o sprites de piezas
    • Crear prefab para cada pieza
    • Agregar componente correspondiente (Pawn.cs, Rook.cs, etc.)
    • Guardar en Assets/Game/Prefabs/Pieces/
  2. Crear prefabs de casillas (2 prefabs):

    • Crear cubo o quad 3D
    • Material marrón y gris
    • Guardar en Assets/Game/Prefabs/Board/
  3. Asignar en Inspector:

    • Seleccionar GameObject con BoardManager
    • Arrastrar los 14 prefabs a sus slots correspondientes

Prioridad: 🔴 BLOQUEANTE - Sin esto, ni siquiera aparece el tablero


3. Scenes necesitan componentes críticos ⚠️ CRÍTICO

Problema:

  • Las scenes Chapter1/2/3 no existen o no tienen los componentes necesarios
  • Sin scenes configuradas, no hay nada que jugar

Componentes mínimos para Chapter scenes:

Chapter1.unity
├─ Main Camera
├─ BoardManager ← Con prefabs asignados
├─ GameManager
├─ AIController ← Para enemigo
├─ PieceIdentityManager ← Para identidades de piezas
├─ CampaignManager ← Persistencia entre escenas (DontDestroyOnLoad)
├─ DialogueSystem
├─ GameHUDCanvas (con GameHUD script)
└─ PauseMenuCanvas (desactivada, con PauseMenuController)

Impacto:

  • No hay escena para jugar
  • New Campaign en MainMenu intenta cargar "Chapter1" → Scene not found error

Solución:

  • Seguir el manual de implementación punto 5 (MANUAL_IMPLEMENTACION_UNITY.md)
  • Crear Chapter1.unity con todos los componentes
  • Duplicar para Chapter2 y Chapter3

Prioridad: 🔴 BLOQUEANTE - Sin scenes, no hay juego


4. ScriptableObjects necesitan ser creados ⚠️ ALTO

Problema:

  • CampaignState.asset y DeadKingPool.asset no existen
  • Scripts esperan cargarlos con Resources.Load<>()

Impacto:

  • CampaignManager.Instance lanza error: "CampaignState is null"
  • DeadKingPool.Instance lanza error: "DeadKingPool not found in Resources"
  • El juego crashea al intentar empezar campaña

Solución:

  1. En Unity: Assets/Game/Data/ → Create → Ajedrez Purgatorio → Campaign → Campaign State
  2. Mover CampaignState.asset a Assets/Game/Data/Resources/
  3. Repetir para DeadKingPool

Prioridad: 🟠 ALTO - Bloqueante para modo campaña (pero no para juego individual)


🟡 PROBLEMAS IMPORTANTES (Afectan experiencia pero no bloquean)

5. GameManager falta eventos para GameHUD

Problema:

  • GameHUD espera eventos OnPieceCaptured y OnCheckResolved
  • GameManager NO los tiene definidos

Código afectado:

// En GameHUD.cs (comentado como TODO)
// GameManager.Instance.OnPieceCaptured += OnPieceCaptured;
// GameManager.Instance.OnCheckResolved += OnCheckResolved;

Impacto:

  • ⚠️ GameHUD no muestra piezas capturadas
  • ⚠️ Indicador de CHECK no desaparece cuando se resuelve

Solución:

// En GameManager.cs, línea ~71 (después de OnPieceMoved)
public event Action<Piece> OnPieceCaptured;
public event Action OnCheckResolved;

// En TryMoveTo(), después de capturar pieza (~línea 200):
OnPieceCaptured?.Invoke(captured);

// En AfterMove(), cuando check se resuelve (~línea 250):
if (wasInCheck && !nowInCheck) {
    OnCheckResolved?.Invoke();
}

Prioridad: 🟡 MEDIO - GameHUD funciona sin esto, pero incompleto


6. CampaignManager falta referencia a DeadKingRevealUI

Problema:

  • ShowDeadKingReveal() tiene código comentado como TODO
  • No muestra la UI de Dead King derrotado

Código actual:

private void ShowDeadKingReveal(System.Action onContinue)
{
    Debug.Log("[CampaignManager] TODO: Show Dead King Reveal UI");
    // TODO: Get reference to DeadKingRevealUI in scene
    onContinue?.Invoke();
}

Solución:

// Agregar field en CampaignManager
[SerializeField] private DeadKingRevealUI _deadKingRevealUI;

// En ShowDeadKingReveal():
if (_deadKingRevealUI != null && _currentDeadKing != null)
{
    _deadKingRevealUI.Show(_currentDeadKing, onContinue);
}
else
{
    onContinue?.Invoke();
}

Prioridad: 🟡 MEDIO - Dead Kings spawn pero no se revela visualmente


7. CampaignManager falta integración con AIController

Problema:

  • ApplyChapterAIConfiguration() está comentado como TODO
  • AI siempre usa misma dificultad

Código actual:

private void ApplyChapterAIConfiguration(string aiConfig)
{
    // TODO (S4-005): Configurar AIController con la dificultad del capítulo
    Debug.Log("[CampaignManager] TODO: Aplicar configuración a AIController");
}

Solución:

[SerializeField] private AIController _aiController;

private void ApplyChapterAIConfiguration(string aiConfig)
{
    if (_aiController == null)
    {
        _aiController = FindObjectOfType<AIController>();
    }
    
    if (_aiController != null && aiConfig != null)
    {
        // Parsear aiConfig y configurar dificultad
        // Ejemplo: "Easy", "Medium", "Hard"
        if (System.Enum.TryParse<AIDifficulty>(aiConfig, out var difficulty))
        {
            _aiController.SetDifficulty(difficulty);
        }
    }
}

Prioridad: 🟡 MEDIO - AI funciona pero no escala dificultad


8. DeadKingInputUI usa stats placeholder

Problema:

  • GatherCampaignStats() retorna todos 0s
  • Dead Kings se guardan sin estadísticas reales

Código actual:

private CampaignStats GatherCampaignStats()
{
    // TODO: Track from GameManager
    return new CampaignStats(
        moves: 0,      // Necesita contador en GameManager
        captures: 0,   // Necesita contador en GameManager
        pWins: 0,      // Necesita acceso a PurgatoryManager
        pLosses: 0     // Necesita acceso a PurgatoryManager
    );
}

Solución:

// Agregar en GameManager:
private int _totalMoves = 0;
private int _totalCaptures = 0;
public int TotalMoves => _totalMoves;
public int TotalCaptures => _totalCaptures;

// Actualizar en DeadKingInputUI:
private CampaignStats GatherCampaignStats()
{
    int moves = GameManager.Instance?.TotalMoves ?? 0;
    int captures = GameManager.Instance?.TotalCaptures ?? 0;
    int pWins = PurgatoryManager.Instance?.TotalWins ?? 0;
    int pLosses = PurgatoryManager.Instance?.TotalLosses ?? 0;
    
    return new CampaignStats(moves, captures, pWins, pLosses);
}

Prioridad: 🟢 BAJO - Dead Kings se guardan, solo sin stats


📦 ASSETS FALTANTES (No bloqueantes pero recomendados)

9. AudioClips para AudioManager

Estado: AudioManager tiene campos para 6 SFX clips, todos (None)

Impacto: ⚠️ Juego funciona pero sin audio

Solución: Importar audio clips y asignar en Inspector

Prioridad: 🟢 BAJO - Juego funciona en silencio


10. Prefabs de UI (MoveIndicator, CapturedPieceIcon)

Estado: GameHUD y PieceSelectionFeedback esperan estos prefabs

Impacto: ⚠️ No hay feedback visual de movimientos disponibles

Solución: Crear prefabs simples (círculo verde para moves, ícono para captures)

Prioridad: 🟢 BAJO - Juego funciona sin feedback visual


RESUMEN EJECUTIVO

PARA TENER JUGABILIDAD MÍNIMA, SE NECESITA:

🔴 Bloqueantes críticos (sin esto NO arranca):

  1. Código compilando (YA ESTÁ )
  2. Crear prefabs de piezas y casillas (14 prefabs)
  3. Asignar prefabs en BoardManager
  4. Crear scenes Chapter1/2/3 con componentes
  5. Crear ScriptableObjects (CampaignState, DeadKingPool)
  6. Agregar integración CampaignManager → BoardManager (5 líneas código)

🟡 Para experiencia completa (mejoras importantes): 7. Agregar eventos a GameManager (OnPieceCaptured, OnCheckResolved) 8. Integrar DeadKingRevealUI con CampaignManager 9. Integrar AIController con CampaignManager 10. Stats tracking en GameManager

🟢 Polish (nice to have): 11. AudioClips 12. Prefabs de UI feedback


🎯 PLAN DE ACCIÓN RECOMENDADO

Fase 1: Hacer que algo aparezca en pantalla (2-3 horas)

  1. Crear prefabs de piezas básicos (cubos con colores si no hay modelos)
  2. Crear prefabs de casillas (quads con materiales)
  3. Crear Chapter1.scene con BoardManager + GameManager
  4. Asignar prefabs en BoardManager Inspector
  5. Test: Dar Play → Ver tablero con piezas

Fase 2: Modo juego individual funcional (1 hora)

  1. Agregar AIController a scene
  2. Agregar PieceIdentityManager
  3. Test: Jugar partida completa contra IA

Fase 3: Modo campaña funcional (2 horas)

  1. Crear ScriptableObjects (CampaignState, DeadKingPool)
  2. CRÍTICO: Agregar integración CampaignManager → BoardManager
  3. Crear MainMenu.scene
  4. Configurar Build Settings con todas las scenes
  5. Test: New Campaign → Chapter 1 → Perder piezas → Chapter 2 → Verificar piezas faltantes

Fase 4: Polish (1-2 horas)

  1. Agregar eventos a GameManager
  2. Crear GameHUD, PauseMenu UIs
  3. Audio y feedback visual

Tiempo total estimado: 6-8 horas para juego completamente funcional


🚨 ACCIÓN INMEDIATA RECOMENDADA

Si quieres jugar YA (10 minutos):

  1. Crea prefabs placeholder:

    • Cubo blanco → WhitePawnPrefab
    • Cubo negro → BlackPawnPrefab
    • Repetir para las 12 piezas
    • Quad marrón → BrownPrefab
    • Quad gris → GrayPrefab
  2. Crea scene básica:

    • New Scene → Chapter1.unity
    • Agregar BoardManager, GameManager
    • Asignar los 14 prefabs
  3. Dar Play → Deberías ver un tablero jugable (feo pero funcional)

  4. Después iterar mejorando visual, campaña, UI, etc.