Skip to content

Conversation

@GabrielEValenzuela
Copy link
Owner

Resumen

Esta versión introduce tres componentes clave al sistema Refugio 33:

  • Un motor de eventos (EventManager) que genera NPCs en tiempo real con probabilidades configurables.
  • Una consola interactiva (GameConsole) que permite al jugador consultar el estado del juego.
  • Una fábrica de visitantes (VisitorFactory) que crea NPCs en base a su facción con atributos aleatorios.

Además, se integran nuevos mecanismos de serialización y una refactorización general del diseño orientado a entidades. Se unifican patrones de generación de aleatorios (RandomEventGenerator) y se mejora la modularidad del engine para facilitar futuras expansiones.

El motivo de este cambio es la forma en que creció la clase Engine y estaba manejando múltiples responsabilidades —como lógica de juego, gestión de eventos, consola interactiva, visitantes, guardado, etc.— estabamos cayendo en un God Object, lo cual rompe con el principio de Single Responsibility y dificulta el mantenimiento, testing y extensión del sistema.


Cambios incluidos

Características principales

  • EventManager: hilo de eventos que genera visitantes basados en pesos configurables en system.conf, respetando un límite máximo de cola.
  • VisitorFactory: genera instancias polimórficas del tipo VisitanteVariant en base a EngineData::Faction, evitando if anidados con un unordered_map.
  • GameConsole: permite comandos básicos como help, check, history, y está preparado para extender la interacción con el jugador.
  • GameSerializer: serializa el estado del juego (jugador, refugio, configuración) y lo restaura en la carga.
  • Soporte para std::variant, std::visit y estructuras propias (wrapperVector, DoublyLinkedList) integradas al motor.
  • RandomEventGenerator unificado para float, double, int, bool y selección aleatoria de elementos.

Refactorizaciones

Durante el proceso de desarrollo de una aplicación, en el código se van acumulando elementos con una estructura deficiente que ponen en riesgo la aplicabilidad y la compatibilidad del programa. Para solucionar este problema, hay dos opciones: o bien volver a escribir el código desde cero o realizar una reestructuración en pequeños pasos.

La refactorización podría compararse con la corrección de un libro: el producto final de la corrección no es un nuevo libro, sino el mismo texto, pero más comprensible. Así, al igual que en la corrección de un libro se usan procedimientos como la reformulación y la reestructuración o eliminación de frases, en la refactorización de código se aplican métodos como la encapsulación, el reformateo o la extracción para optimizar el código sin cambiar su contenido.

  • Refactor de personajes (NPCs) como Refugiado, Asaltante, Ghoul, Enclave, etc., para cumplir con un diseño orientado a entidades concretas.
  • Mejora del sistema de aleatoriedad y generación de nombres con constantes estáticas internas.
  • Separación de responsabilidades: Engine delega ahora tareas en componentes especializados (m_console, m_eventManager, etc.).
  • RandomGenerator ahora retorna double para mayor precisión en probabilidades.

🧪 Tests
Ver resultados
Cargando[100%]

¿Desea ver el manual del ingeniero de sistemas? (s/n): n


[INFO] Cargando configuracion...
[SUCCESS] Configuración cargada correctamente desde el servidor de VAULT


[INFO] Restableciendo información desde servidores centrales...
[SUCCESS] Sistema VAULT restaurado con éxito.
Inicializando recursos...
Inicializando entidades...
         :---.  .---..---.   :--:..---..---..:------:.  . :-------.:-----:    .-+=.              
          :@@@-  =@@%.*@@@+   *@@#.:%@@-.@@@-.%@@@@@@%. .  =@@@@@@@:*@@@@@+  =@@@@@*             
           +@@%..@@@=:%@@@@.  *@@#.:%@@-.@@@-.::#@@%::.    .:=@@@::.*@@%::..*@@@+::: .           
           :@@@==@@%.=@@@@@=  *@@#.:%@@-.@@@-   #@@#........ -@@@.  *@@%::.-@@@-               . 
           .*@@%%@@=.%@@+@@%. *@@#.:%@@-.@@@-   #@@#.-@@@@@* -@@@.  *@@@@@:=@@@.                 
            .@@@@@%.-@@%.@@@- *@@#.:%@@-.@@@- . #@@#.:+++++- -@@@.  *@@%==.-@@@:                 
             =@@@@-.#@@@@@@@* *@@%.:@@@-.@@@-...#@@#.        -@@@.  *@@%....#@@@-...             
             .%@@%.:@@@:.-@@@:-@@@@@@@@..@@@@@@-#@@#.  .     -@@@.  *@@@@@* .*@@@@@*             
             .=##=.=##+  .*##+..+%@@%=. .######:+##*.   .    :###.  =#####=  ..-#@%=        .    
  .                                                             .      .                          
           .           ..               ..-+%@@@@@@%+-..                       .                  
  .                          .        .=@@@@@@@@@@@@@@@@=.     .           . .      .             
           . .                    ...*@@@@%-:.   ..:-%@@@@*.                                      
                .-*@@@@@@@@@@@@@@@@@@@@@=.       .    .=@@@@@@@@@@@@@@@@@@@@@*-..             .   
                .-%@@@@@@@@@@@@@@@@@@@#.    .-*##*-.  . .#@@@@@@@@@@@@@@@@@@@%-.         ..       
                   ..............:@@@+.   :%@@@@@@@@%:   .+@@@:..............                     
        .          .          . .#@@%. ..=@@@@@@@@@@@@=.  .%@@*.      .              .     .      
   .:+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+   :@@@@@@@@@@@@@%: . *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+:..   .
  .*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+   :@@@@@@@@@@@@@@: . +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*.    
    ..:-+++++++++++++++++++++++++@@@*.  .%@@@@@@@@@@@@%.  .#@@@+++++++++++++++++++++++++-:..      
 .                              .+@@@:  ..%@@@@@@@@@@%..  :@@@+                                   
      .          .:=*%@@@@@@@@@@@@@@@%.   .=%@@@@@@%-.   .@@@@@@@@@@@@@@@@%*-..                   
       .        :%@@@@@@@@@@@@@@@@@@@@@-   .            -@@@@@@@@@@@@@@@@@@@@@%:                  
                  .:=*###############@@@@=.          .=@@@@###############*-:.           .        
      .            ..                :#@@@@@#+=--=+#@@@@@#.                  .                    
            .                .         .=%@@@@@@@@@@@@%=.                                         
                  . .               ..    ...-=++=:...                   .                        
========== CONSOLA DE OPERACIONES VAULT-TEC v0.1.0 ==========
<> [i] status    - Mostrar estado del refugio
<> [e] events    - Ver historial de eventos
<> [c] check     - Verificar evento activo
<> [x] explore   - Realizar una exploración
<> [f] fight     - Enfrentar a un enemigo
<> [s] save      - Guardar el progreso
<> [q] exit      - Salir del sistema
====================================
> c
=== [INFO] Cargando sistema de eventos ===
=== [INFO] Un nuevo evento requiere de su atención ===
👤 Refugiado: Valentina Acosta
 - Salud: 100/100
 - Origen: Superficie
 - Bolsa de recursos:
                * Herramientas: 1
                * Municiones: 3
                * Medicina: 2
                * Agua: 1
                * Comida: 5

         :---.  .---..---.   :--:..---..---..:------:.  . :-------.:-----:    .-+=.              
          :@@@-  =@@%.*@@@+   *@@#.:%@@-.@@@-.%@@@@@@%. .  =@@@@@@@:*@@@@@+  =@@@@@*             
           +@@%..@@@=:%@@@@.  *@@#.:%@@-.@@@-.::#@@%::.    .:=@@@::.*@@%::..*@@@+::: .           
           :@@@==@@%.=@@@@@=  *@@#.:%@@-.@@@-   #@@#........ -@@@.  *@@%::.-@@@-               . 
           .*@@%%@@=.%@@+@@%. *@@#.:%@@-.@@@-   #@@#.-@@@@@* -@@@.  *@@@@@:=@@@.                 
            .@@@@@%.-@@%.@@@- *@@#.:%@@-.@@@- . #@@#.:+++++- -@@@.  *@@%==.-@@@:                 
             =@@@@-.#@@@@@@@* *@@%.:@@@-.@@@-...#@@#.        -@@@.  *@@%....#@@@-...             
             .%@@%.:@@@:.-@@@:-@@@@@@@@..@@@@@@-#@@#.  .     -@@@.  *@@@@@* .*@@@@@*             
             .=##=.=##+  .*##+..+%@@%=. .######:+##*.   .    :###.  =#####=  ..-#@%=        .    
  .                                                             .      .                          
           .           ..               ..-+%@@@@@@%+-..                       .                  
  .                          .        .=@@@@@@@@@@@@@@@@=.     .           . .      .             
           . .                    ...*@@@@%-:.   ..:-%@@@@*.                                      
                .-*@@@@@@@@@@@@@@@@@@@@@=.       .    .=@@@@@@@@@@@@@@@@@@@@@*-..             .   
                .-%@@@@@@@@@@@@@@@@@@@#.    .-*##*-.  . .#@@@@@@@@@@@@@@@@@@@%-.         ..       
                   ..............:@@@+.   :%@@@@@@@@%:   .+@@@:..............                     
        .          .          . .#@@%. ..=@@@@@@@@@@@@=.  .%@@*.      .              .     .      
   .:+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+   :@@@@@@@@@@@@@%: . *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+:..   .
  .*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+   :@@@@@@@@@@@@@@: . +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*.    
    ..:-+++++++++++++++++++++++++@@@*.  .%@@@@@@@@@@@@%.  .#@@@+++++++++++++++++++++++++-:..      
 .                              .+@@@:  ..%@@@@@@@@@@%..  :@@@+                                   
      .          .:=*%@@@@@@@@@@@@@@@%.   .=%@@@@@@%-.   .@@@@@@@@@@@@@@@@%*-..                   
       .        :%@@@@@@@@@@@@@@@@@@@@@-   .            -@@@@@@@@@@@@@@@@@@@@@%:                  
                  .:=*###############@@@@=.          .=@@@@###############*-:.           .        
      .            ..                :#@@@@@#+=--=+#@@@@@#.                  .                    
            .                .         .=%@@@@@@@@@@@@%=.                                         
                  . .               ..    ...-=++=:...                   .                        
========== CONSOLA DE OPERACIONES VAULT-TEC v0.1.0 ==========
<> [i] status    - Mostrar estado del refugio
<> [e] events    - Ver historial de eventos
<> [c] check     - Verificar evento activo
<> [x] explore   - Realizar una exploración
<> [f] fight     - Enfrentar a un enemigo
<> [s] save      - Guardar el progreso
<> [q] exit      - Salir del sistema
====================================
> i
=== [INFO] Cargando información del refugio ===
🏠 Refugio:      A cargo de: A
        🛡️  Defensa: 0
        ⚔️  Ataque: 0
👥 Moradores: 
👤 Refugiado: Valentina Acosta
 - Salud: 100/100
 - Origen: Superficie
 - Bolsa de recursos:
                * Herramientas: 1
                * Municiones: 3
                * Medicina: 2
                * Agua: 1
                * Comida: 5

        📦 Recursos: 

         :---.  .---..---.   :--:..---..---..:------:.  . :-------.:-----:    .-+=.              
          :@@@-  =@@%.*@@@+   *@@#.:%@@-.@@@-.%@@@@@@%. .  =@@@@@@@:*@@@@@+  =@@@@@*             
           +@@%..@@@=:%@@@@.  *@@#.:%@@-.@@@-.::#@@%::.    .:=@@@::.*@@%::..*@@@+::: .           
           :@@@==@@%.=@@@@@=  *@@#.:%@@-.@@@-   #@@#........ -@@@.  *@@%::.-@@@-               . 
           .*@@%%@@=.%@@+@@%. *@@#.:%@@-.@@@-   #@@#.-@@@@@* -@@@.  *@@@@@:=@@@.                 
            .@@@@@%.-@@%.@@@- *@@#.:%@@-.@@@- . #@@#.:+++++- -@@@.  *@@%==.-@@@:                 
             =@@@@-.#@@@@@@@* *@@%.:@@@-.@@@-...#@@#.        -@@@.  *@@%....#@@@-...             
             .%@@%.:@@@:.-@@@:-@@@@@@@@..@@@@@@-#@@#.  .     -@@@.  *@@@@@* .*@@@@@*             
             .=##=.=##+  .*##+..+%@@%=. .######:+##*.   .    :###.  =#####=  ..-#@%=        .    
  .                                                             .      .                          
           .           ..               ..-+%@@@@@@%+-..                       .                  
  .                          .        .=@@@@@@@@@@@@@@@@=.     .           . .      .             
           . .                    ...*@@@@%-:.   ..:-%@@@@*.                                      
                .-*@@@@@@@@@@@@@@@@@@@@@=.       .    .=@@@@@@@@@@@@@@@@@@@@@*-..             .   
                .-%@@@@@@@@@@@@@@@@@@@#.    .-*##*-.  . .#@@@@@@@@@@@@@@@@@@@%-.         ..       
                   ..............:@@@+.   :%@@@@@@@@%:   .+@@@:..............                     
        .          .          . .#@@%. ..=@@@@@@@@@@@@=.  .%@@*.      .              .     .      
   .:+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+   :@@@@@@@@@@@@@%: . *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%+:..   .
  .*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+   :@@@@@@@@@@@@@@: . +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*.    
    ..:-+++++++++++++++++++++++++@@@*.  .%@@@@@@@@@@@@%.  .#@@@+++++++++++++++++++++++++-:..      
 .                              .+@@@:  ..%@@@@@@@@@@%..  :@@@+                                   
      .          .:=*%@@@@@@@@@@@@@@@%.   .=%@@@@@@%-.   .@@@@@@@@@@@@@@@@%*-..                   
       .        :%@@@@@@@@@@@@@@@@@@@@@-   .            -@@@@@@@@@@@@@@@@@@@@@%:                  
                  .:=*###############@@@@=.          .=@@@@###############*-:.           .        
      .            ..                :#@@@@@#+=--=+#@@@@@#.                  .                    
            .                .         .=%@@@@@@@@@@@@%=.                                         
                  . .               ..    ...-=++=:...                   .                        
========== CONSOLA DE OPERACIONES VAULT-TEC v0.1.0 ==========
<> [i] status    - Mostrar estado del refugio
<> [e] events    - Ver historial de eventos
<> [c] check     - Verificar evento activo
<> [x] explore   - Realizar una exploración
<> [f] fight     - Enfrentar a un enemigo
<> [s] save      - Guardar el progreso
<> [q] exit      - Salir del sistema
====================================
> q
Saliendo...

Revolucionando la seguridad para un futuro incierto :)                                                                                                            

@GabrielEValenzuela GabrielEValenzuela self-assigned this Apr 7, 2025
- Added EventManager for handling event generation and processing.
- Introduced GameConsole for user interaction and command processing.
- Created VisitorFactory to generate NPCs based on different factions.
- Updated Engine class to integrate new components and manage game state.
- Implemented game serialization and deserialization in GameSerializer.
- Enhanced random event generation with improved RNG methods.
- Added necessary headers and forward declarations for new classes.
- Refactored existing code to accommodate new features and maintain structure.
@GabrielEValenzuela
Copy link
Owner Author

Actions pasando

Build & Test with VCPKG + GTest

@GabrielEValenzuela GabrielEValenzuela merged commit cb3a89f into master Apr 14, 2025
@GabrielEValenzuela GabrielEValenzuela deleted the 0.2.0 branch April 14, 2025 00:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants