FluxState
Resumen
Imova.Flux.FluxState es una clase abstracta que hereda de MonoBehaviour. Representa la estrategia de comportamiento (el "modo") que FluxManager delega para decidir cómo se evalúan los triggers y cómo se avanza entre pasos de una secuencia. No es instanciable directamente: el sistema incluye dos implementaciones concretas (ver Estados de Flujo Incluidos), y es el punto de extensión recomendado para agregar nuevos modos de flujo.
Incluye el enum anidado:
enum FluxStateMode { Sequential, Free }
Cuándo usarla
Se hereda de FluxState cuando se necesita crear un nuevo modo de comportamiento del flujo, distinto de los ya incluidos (Default_FluxState para secuencial y FreeMode_FluxState para libre). Es el punto de extensión relevante para desarrolladores que necesitan una lógica de avance de pasos no cubierta por los modos existentes (ver Puntos de Extensión → Nuevo modo de flujo).
Propiedades
| Propiedad | Tipo | Descripción |
|---|---|---|
UID | string | Identificador único de esta instancia de FluxState, usado por FluxManager.SetState(uidFluxState) para activarlo. |
FluxConfig | FluxConfig | Configuración obtenida desde el FluxAssetData vinculado a este estado. |
Mode | FluxStateMode (virtual) | Indica el tipo de comportamiento del estado (secuencial o libre). Por defecto Sequential: "los estados existentes en otros proyectos no necesitan cambios a menos que sean de tipo libre." |
Métodos
Los siguientes métodos son abstractos y deben implementarse en cada subclase:
abstract void OnInit()
Se invoca durante la inicialización del estado. Es el lugar recomendado para preparar cualquier estructura interna que la implementación necesite (por ejemplo, el HashSet de pasos completados en FreeMode_FluxState).
abstract void OnEnter()
Se llama cuando este estado se activa a través de FluxManager.SetState(uidFluxState). Debe usarse para dejar el estado listo para operar como el FluxState activo.
abstract void BeforeCheckTriggerAction(Step step, List<string> uidActionList)
Hook de preprocesado que se ejecuta antes de evaluar el trigger de una acción. Recibe el Step involucrado y la lista de UIDs de acciones disparadas. Cada implementación puede usarlo, por ejemplo, para reubicar el índice de paso activo antes de la evaluación (como hace FreeMode_FluxState).
abstract int CheckTriggerAction(Step step, List<string> uidActionList, bool checkOrder, out bool isCorrect)
Evalúa si las acciones disparadas (uidActionList) corresponden al trigger correcto del step dado, respetando el orden si checkOrder es true. Retorna el índice del siguiente paso a activar (o -1 si no corresponde avanzar), y entrega por out isCorrect si el trigger fue correcto.
abstract void ActivateNextStep(int indexStep)
Activa el paso identificado por indexStep según la semántica propia del modo (por ejemplo, avance lineal en modo secuencial, o marcado de "completado" en modo libre).
abstract void OnExit()
Se llama cuando este estado deja de estar activo, típicamente porque FluxManager.SetState activó otro FluxState. Debe usarse para liberar o limpiar cualquier recurso propio del estado.
El siguiente método no es abstracto y está disponible para todas las subclases:
bool CheckStringList(List<string> list1, List<string> list2, bool checkOrder)
"Check if two lists of strings are equals. If checkOrder is true, the order of the strings must be the same." Es el helper de comparación de listas de UIDs que las implementaciones concretas usan para comparar la lista de triggers disparados contra TriggerCorrectList de un Step.
Ejemplo de código
using System.Collections.Generic;
using Imova.Flux;
public class MiFluxStatePersonalizado : FluxState
{
public override FluxStateMode Mode => FluxStateMode.Free;
public override void OnInit()
{
// Preparar estructuras internas propias del estado.
}
public override void OnEnter()
{
// Lógica al activarse este estado vía FluxManager.SetState(UID).
}
public override void BeforeCheckTriggerAction(Step step, List<string> uidActionList)
{
// Preprocesado antes de evaluar el trigger, si corresponde.
}
public override int CheckTriggerAction(Step step, List<string> uidActionList, bool checkOrder, out bool isCorrect)
{
isCorrect = CheckStringList(step.TriggerCorrectList, uidActionList, checkOrder);
return isCorrect ? /* índice del siguiente paso */ 0 : -1;
}
public override void ActivateNextStep(int indexStep)
{
// Activar el paso indicado según la semántica del nuevo modo.
}
public override void OnExit()
{
// Limpieza al desactivarse este estado.
}
}