feat: add readmes
This commit is contained in:
BIN
Content/Art/T_Damage_T1.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Damage_T1.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Damage_T2.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Damage_T2.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Damage_T3.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Damage_T3.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Health_T1.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Health_T1.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Health_T2.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Health_T2.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Health_T3.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Health_T3.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Skill_Damage_T1.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Damage_T1.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Damage_T2.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Damage_T2.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Damage_T3.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Damage_T3.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Health_T1.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Health_T1.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Health_T2.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Health_T2.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Health_T3.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Health_T3.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Speed_T1.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Speed_T1.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Speed_T2.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Speed_T2.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Speed_T3.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Speed_T3.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Skill_Start.uasset
(Stored with Git LFS)
Normal file
BIN
Content/Art/T_Skill_Start.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Content/Art/T_Speed_T1.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Speed_T1.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Speed_T2.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Speed_T2.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Speed_T3.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Speed_T3.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Art/T_Start.uasset
(Stored with Git LFS)
BIN
Content/Art/T_Start.uasset
(Stored with Git LFS)
Binary file not shown.
130
README-es.md
Normal file
130
README-es.md
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
### 5. Capa de UI (Blueprints)
|
||||||
|
**WBP_SkillNode & WBP_SkillNodeTooltip:**
|
||||||
|
- Muestra icono de habilidad, estado, coste
|
||||||
|
- Maneja eventos de clic (seleccionar/deseleccionar)
|
||||||
|
- Almacena SkillID para búsqueda en tiempo de ejecución
|
||||||
|
- Soporte de tooltip personalizado para mostrar detalles de habilidad
|
||||||
|
- Actualizaciones de estado en tiempo real mediante binding de eventos permiten feedback visual instantáneo
|
||||||
|
|
||||||
|
**WBP_SkillTree:**
|
||||||
|
- Contiene nodos de habilidad colocados manualmente
|
||||||
|
- Referencia a SkillTreeComponent
|
||||||
|
- Aloja SkillTreeConnectionsWidget que dibuja líneas entre nodos automáticamente
|
||||||
|
- Se vincula a eventos del componente para actualizaciones de UI
|
||||||
|
|
||||||
|
**Decisión**: La colocación manual de nodos permite diseños personalizados (lineal, radial, ramificado) según preferencia del diseñador.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Decisiones Clave de Diseño
|
||||||
|
|
||||||
|
### 1. Prerrequisitos de habilidades en DataTable
|
||||||
|
**Alternativa**: Hard-coded en C++ o referencias a DataAssets
|
||||||
|
**Elegido**: Array en DataTable
|
||||||
|
**Razón**: Los diseñadores pueden modificar dependencias de habilidades sin intervención del programador y sin recompilar
|
||||||
|
|
||||||
|
### 2. Componente vs Subsistema
|
||||||
|
**Alternativa**: Game Instance Subsystem
|
||||||
|
**Elegido**: Actor Component
|
||||||
|
**Razón**: Soporta múltiples árboles de habilidades por jugador (ej., árbol de combate, árbol de crafteo) y más fácil integración con guardar/cargar
|
||||||
|
|
||||||
|
### 3. Widget de Conexiones Único
|
||||||
|
**Alternativa**: Widgets de línea individuales por conexión con gestión manual
|
||||||
|
**Elegido**: Un widget dibuja todas las líneas automáticamente
|
||||||
|
**Razón**: Elimina gestión de arrays, mejor rendimiento, manejo automático de coordenadas
|
||||||
|
|
||||||
|
### 4. Componente de Estadísticas Separado
|
||||||
|
**Alternativa**: Aplicar estadísticas directamente en SkillTreeComponent
|
||||||
|
**Elegido**: CharacterStatsComponent separado
|
||||||
|
**Razón**: Separación de responsabilidades - SkillTreeComponent es reutilizable para cualquier sistema de progresión, CharacterStatsComponent específicamente maneja estadísticas de personaje. Permite árboles de habilidades sin bonificaciones de stats, o stats sin árboles de habilidades.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Aspectos Técnicos Destacados
|
||||||
|
|
||||||
|
- **Arquitectura basada en eventos**: El componente emite cambios de estado, la UI responde automáticamente
|
||||||
|
- **Validación de máquina de estados**: Previene transiciones inválidas (ej., no se pueden seleccionar habilidades bloqueadas)
|
||||||
|
- **Aplicación automática de estadísticas**: CharacterStatsComponent escucha compras de habilidades, recalcula estadísticas, las aplica al personaje
|
||||||
|
- **Renderizado consciente de geometría**: Las líneas se adaptan a cualquier sistema de posicionamiento de widgets
|
||||||
|
- **Configuración orientada a datos**: Cero cambios de código y no necesita compilar para nuevas habilidades o diseños de árbol
|
||||||
|
- **Funcionalidad de reinicio**: Reembolsa habilidades no iniciales, mantiene puntos de inicio
|
||||||
|
- **Diseño modular**: Progresión de habilidades, estadísticas y visualización son independientes
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
# U-Tad UI Project
|
# U-Tad UI Project
|
||||||
|
|
||||||
|
**English** | **[Leer en Español](README-es.md)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Skill Tree System Implementation
|
## Skill Tree System Implementation
|
||||||
|
|
||||||
### Overview
|
### Overview
|
||||||
|
|||||||
BIN
RawContent/T_Skill_Start.png
(Stored with Git LFS)
Normal file
BIN
RawContent/T_Skill_Start.png
(Stored with Git LFS)
Normal file
Binary file not shown.
Reference in New Issue
Block a user