# Proyecto UI U-Tad **[Read in English](README.md)** | **Español** --- ## Implementación del Sistema de Árbol de Habilidades ### Resumen Un sistema completo de árbol de habilidades con progresión basada en nodos, validación de prerrequisitos, líneas de conexión visuales y configuración orientada a datos.  --- ## Arquitectura: Decisión de Blueprint ### Implementación en Blueprint **Componentes:** `WBP_SkillTree`, `WBP_SkillNode`, `WBP_SkillNodeTooltip` **Justificación:** - **Velocidad de iteración**: El diseño y estilización de UI requiere iteración visual rápida - **Amigable para diseñadores**: Artistas/diseñadores pueden modificar la UI sin conocimientos de C++  --- ## Sistemas Principales ### 1. Capa de Datos (`SkillTreeTypes.h`) **Estructuras:** - `FSkillNodeData`: Fila de definición de habilidad para la tabla de datos (nombre, coste, prerrequisitos, efectos, bandera de inicio) - `FSkillNodeRuntime`: Envoltorio de estado en tiempo de ejecución - `ESkillNodeState`: Enum de estado (Bloqueado, Disponible, Seleccionado, Comprado) **Decisión**: El diseño basado en Data Table permite a no programadores configurar habilidades sin recompilar.  ### 2. Capa de Lógica (`SkillTreeComponent`) **Responsabilidades:** - Inicialización del árbol de habilidades desde DataTable - Gestión de estado (prerrequisitos, comprobaciones de asequibilidad) - Validación de selección y confirmación de compra - Auto-compra de habilidades iniciales - Gestión de puntos de habilidad - Ganchos de aplicación de efectos **Características Clave:** - **Ordenación por orden de compra**: Asegura que los prerrequisitos se compren antes que los dependientes - **Deselección en cascada**: Eliminar un prerrequisito deselecciona las habilidades dependientes - **Habilidades iniciales**: Marcadas en DataTable, auto-compradas en init, preservadas en reset - **Agregación de estadísticas**: Proporciona funciones `GetTotal[Stat]Bonus()` para sumar bonificaciones de todas las habilidades compradas ### 3. Capa de Integración de Estadísticas (`CharacterStatsComponent`) **Responsabilidades:** - Cálculo automático de estadísticas desde habilidades compradas - Gestión de estadísticas del personaje (Salud, Daño, Velocidad) - Actualizaciones en tiempo real cuando se compran habilidades - Integración con velocidad de movimiento **Cómo funciona:** - Encuentra SkillTreeComponent en el mismo actor en BeginPlay - Escucha el evento `OnSkillPurchased` - Itera todas las habilidades compradas, suma bonificaciones planas + porcentuales - Aplica fórmula: `StatFinal = Base + BonusPlano + (Base * BonusPorcentual / 100)` - Auto-actualiza la velocidad de CharacterMovementComponent - Emite eventos de cambio de estadísticas para actualizaciones de UI **Decisión**: Un componente de estadísticas separado mantiene las responsabilidades separadas - SkillTreeComponent maneja la progresión, CharacterStatsComponent maneja la aplicación de estadísticas. Hace ambos reutilizables independientemente. ### 4. Capa de Visualización (`SkillTreeConnectionsWidget`) **Responsabilidades:** - Dibujado automático de líneas entre nodos prerrequisito (¡Solo necesitas colocar los nodos en la UI!) - Coloreado dinámico de líneas basado en estados de habilidades - Refresco basado en eventos cuando cambian los estados **Enfoque Técnico:** - **Búsqueda genérica**: Funciona con cualquier jerarquía de widgets para que diseñadores/artistas no estén limitados al crear el widget del árbol de habilidades (Canvas, Overlay, Grid) - **Override de NativePaint**: Renderizado directo con Slate para rendimiento - **Binding de delegados**: Se refresca automáticamente cuando cambian los estados de las habilidades **Decisión**: Un único widget auto-contenido elimina la gestión manual de líneas y complejidad de Blueprint.