Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resumen
Esta versión introduce tres componentes clave al sistema
Refugio 33:EventManager) que genera NPCs en tiempo real con probabilidades configurables.GameConsole) que permite al jugador consultar el estado del juego.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
Enginey 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 ensystem.conf, respetando un límite máximo de cola.VisitorFactory: genera instancias polimórficas del tipoVisitanteVarianten base aEngineData::Faction, evitandoifanidados con ununordered_map.GameConsole: permite comandos básicos comohelp,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.std::variant,std::visity estructuras propias (wrapperVector,DoublyLinkedList) integradas al motor.RandomEventGeneratorunificado parafloat,double,int,booly 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.
Refugiado,Asaltante,Ghoul,Enclave, etc., para cumplir con un diseño orientado a entidades concretas.Enginedelega ahora tareas en componentes especializados (m_console,m_eventManager, etc.).RandomGeneratorahora retornadoublepara mayor precisión en probabilidades.🧪 Tests
Ver resultados