Wizard de Creacion - vykymoon/rpg-character-creator GitHub Wiki
El wizard guía la creación en 5 pantallas. Cada una tiene su FXML en src/main/resources/fxml/ y su propio controlador.
flowchart LR
G[Galería] --> S1[1. Nombre y raza]
S1 --> S2[2. Clase]
S2 --> S3[3. Habilidades]
S3 --> S4[4. Vestuario]
S4 --> S5[5. Resumen]
S5 -->|Confirmar| G
S2 -.Atrás.-> S1
S3 -.Atrás.-> S2
S4 -.Atrás.-> S3
S5 -.Atrás.-> S4
| Paso | Controlador | FXML | Obligatorio |
|---|---|---|---|
| 1 | Step1NameRaceController |
step1_name_race.fxml |
Nombre y raza |
| 2 | Step2ClassController |
step2_class.fxml |
Clase |
| 3 | Step3SkillsController |
step3_skills.fxml |
No (puede no llevar habilidades) |
| 4 | Step4OutfitController |
step4_outfit.fxml |
No (puede no llevar vestuario) |
| 5 | Step5SummaryController |
step5_summary.fxml |
Confirmar |
WizardSession es un objeto simple que se pasa por constructor de un paso al siguiente. Guarda nombre, raza, clase y las listas de habilidades y vestuario elegidas. Como cada pantalla lee y escribe ahí, volver atrás conserva lo ya elegido: al iniciar, cada paso rellena sus controles con lo que hay en la sesión.
El Character definitivo no existe hasta el paso 5.
- Llena el
ComboBox<Race>conCatalogManager.getInstance().getAvailableRaces(). - Al cambiar la raza muestra la foto (
RaceAvatarLoader), la descripción y los atributos base (FUE/DES/INT/VIT). - Al avanzar valida: nombre no vacío y raza elegida (si no, muestra una alerta "Faltan datos").
- Botón para volver al menú (galería).
Llena el combo con las clases del catálogo, valida la selección y avanza. No sabe nada de JSON ni de otras pantallas.
- Lista con selección múltiple.
- Muestra solo las habilidades que cumplen
skill.isAvailableFor(raza, clase). - Si hay ocultas, una etiqueta avisa: "N habilidad(es) no aparecen: requieren otra raza o clase."
- Al ir atrás o adelante guarda la selección en la sesión.
Igual que el paso 3 pero con Outfit. Cada fila muestra el sprite (SpriteLoader), el nombre y el slot. Si el PNG falta o está corrupto, SpriteLoader dibuja un recuadro de color según el slot con la inicial de la pieza, en vez de fallar o dejar un hueco.
Muestra en un TextArea el nombre, raza, clase, habilidades y vestuario. Al confirmar (onConfirm):
- Comprueba
characterDAO.existsByName(nombre); si ya existe, avisa "Nombre duplicado" y se queda en la pantalla. - Construye el personaje con
CharacterBuilder(withName,withRace,withClass,addSkill×N,addOutfit×N,build). - Guarda con
characterDAO.save(character). - Muestra "Personaje creado" y vuelve a la galería.
Si el Builder lanza IllegalStateException (ítem no permitido, falta un dato), se muestra con DialogUtils.warning.
| Nivel | Qué hace |
|---|---|
| UI (pasos 3 y 4) | Filtra y oculta lo no elegible: el usuario normalmente no puede elegirlo |
CharacterBuilder |
Rechaza lo no elegible aunque la UI falle (sesión con datos viejos, bug de navegación) |
- Tema retro en
css/retro-theme.csscon la fuente Press Start 2P (licencia OFL incluida enfonts/OFL.txt). -
DialogUtilscentraliza los diálogos (info,warning,confirm). -
SceneNavigatorcambia de pantalla reemplazando la raíz de la escena.