Arquitectura de Clases
El código de Assets/_FluxSystemImova se organiza en capas con responsabilidades bien delimitadas. Esta página describe cada capa y cómo se relacionan sus clases principales.
Orquestación
FluxManager es el singleton (MonoBehaviour) que coordina todo el ciclo de vida de una secuencia: carga de datos, inicialización, ejecución del bucle de disparo de acciones y finalización. Delega el comportamiento específico del modo de flujo (Secuencial o Libre) en FluxState, una clase abstracta que actúa como estrategia intercambiable. Sus dos implementaciones concretas son Default_FluxState (modo Secuencial) y FreeMode_FluxState (modo Libre).
| Clase | Tipo | Responsabilidad |
|---|---|---|
FluxManager | Singleton MonoBehaviour | Orquesta la carga, inicialización, ejecución y cierre de una secuencia; expone los eventos públicos del sistema. |
FluxState | Clase abstracta | Define el contrato de estrategia de comportamiento (chequeo de triggers, avance de pasos) según el modo de flujo. |
Default_FluxState | Implementación de FluxState | Comportamiento del modo Secuencial: avanza por índice según el "happy path". |
FreeMode_FluxState | Implementación de FluxState | Comportamiento del modo Libre: marca pasos como completados en un conjunto, sin orden fijo. |
Modelo de datos
Sequence, Step y Action son POCOs serializables que representan el contenido del flujo de trabajo: qué secuencias existen, qué pasos las componen y qué acciones dispara cada paso. StepHandler es el singleton que actúa como registro runtime de todos los Step cargados en memoria, permitiendo consultarlos por UID sin recorrer manualmente cada Sequence.
| Clase | Tipo | Responsabilidad |
|---|---|---|
Sequence | POCO serializable | Representa un flujo de trabajo completo; contiene la lista ordenada StepsUID. |
Step | POCO serializable | Representa un punto del flujo: descripción, TriggerType, triggers correctos, timeout y Action asociadas. |
Action | POCO serializable | Representa la unidad mínima disparable, identificada por UID. |
StepHandler | Singleton | Registro runtime de todos los Step cargados, consultables por UID. |
Configuración (ScriptableObjects)
La configuración del sistema se administra mediante ScriptableObjects, todos creables desde el menú Assets > Create > ScriptableObjects > Flux: FluxAssetData envuelve un FluxConfig con los parámetros globales del sistema (timers, foco de aplicación, MoveNextStepOnFailure, etc.); StepAssetData actúa como biblioteca local de Step reutilizables; PlatformAssetData describe la identidad de plataforma o arquetipo sobre la que corre la experiencia. FluxAssetData cuenta además con un Editor custom, FluxAssetDataEditor, que mejora su edición dentro del Inspector de Unity.
| Clase | Tipo | Responsabilidad |
|---|---|---|
FluxAssetData | ScriptableObject | Envuelve FluxConfig, los parámetros globales de comportamiento del sistema. |
StepAssetData | ScriptableObject | Biblioteca local de Step reutilizables entre secuencias. |
PlatformAssetData | ScriptableObject | Identidad de plataforma/arquetipo de la experiencia. |
FluxAssetDataEditor | Editor custom | Mejora la edición de FluxAssetData en el Inspector de Unity. |
Componentes de escena
TriggererAction y StepChecker son el puente sin código entre el sistema de flujos y el contenido de la escena: TriggererAction dispara acciones desde botones, colliders o lectores QR, mientras que StepChecker reacciona a los cambios de paso mediante UnityEvents configurables desde el Inspector. Junto a ellos, CountDownTimer gestiona la cuenta regresiva de un paso o secuencia, e InternetConectionManager monitorea el estado de conectividad.
| Clase | Tipo | Responsabilidad |
|---|---|---|
TriggererAction | Componente de escena | Dispara Action desde botones, colliders o lectores QR. |
StepChecker | Componente de escena | Reacciona a cambios de paso mediante UnityEvents, sin necesidad de código. |
CountDownTimer | Componente de escena | Gestiona la cuenta regresiva de tiempo de un paso o secuencia. |
InternetConectionManager | Componente de escena | Monitorea el estado de conectividad a internet. |
Backend de datos (Firebase)
El acceso a datos remotos se abstrae mediante FirebaseInstance, FirebaseData y Session, todas clases abstractas de tipo singleton. Cada una tiene dos implementaciones concretas seleccionadas en tiempo de compilación: una variante Mobile, que usa el SDK oficial de Firebase (#if UNITY_ANDROID || UNITY_IOS), y una variante Web, que usa SimpleFirebaseUnity vía REST (#if UNITY_WEBGL).
| Clase | Tipo | Responsabilidad |
|---|---|---|
FirebaseInstance | Clase abstracta, singleton | Administra la instancia/conexión a Firebase. |
FirebaseData | Clase abstracta, singleton | Expone las operaciones de datos (secuencias, pasos, sesiones). |
Session | Clase abstracta, singleton | Representa la sesión activa del usuario. |
FirebaseInstanceMobile / FirebaseDataMobile | Implementación Mobile | Usa el SDK oficial de Firebase (UNITY_ANDROID / UNITY_IOS). |
FirebaseInstanceWeb / FirebaseDataWeb | Implementación Web | Usa SimpleFirebaseUnity vía REST (UNITY_WEBGL). |
Respaldo local
LocalBackupManager persiste el progreso de la sesión en PlayerPrefs cuando se pierde la conexión a internet, y lo reenvía a Firebase automáticamente al reconectar, evitando la pérdida de datos de evaluación.
| Clase | Tipo | Responsabilidad |
|---|---|---|
LocalBackupManager | Manager | Persiste el progreso en PlayerPrefs sin conexión y lo sincroniza con Firebase al reconectar. |