Saltar a contenido

Categoría FLOW

La categoría FLOW contiene nodos que controlan el cuándo y el cuántas veces de la ejecución, sin ser condiciones de valor. No evalúan datos externos — mantienen su propio estado interno para modificar el flujo de control.

Diferencia con condiciones

Tipo Ejemplos Lee datos externos
Condición BTCondition, Distance Check Sí (ai_dist, blackboard…)
FLOW Do Once, Flip Flop, Gate, Delay No — solo cuentan o miden tiempo

Los nodos FLOW son ciegos a los datos — no importa quién les llegue, solo importa cuándo y cuántas veces.

Nodos

Nodo Tipo Descripción
Do Once Branch (True/False) Ejecuta True solo la primera vez; False en las siguientes
Flip Flop Branch (True/False) Alterna True/False en cada llamada
Gate Branch (Out/Skip) Deja pasar cada N llamadas
Delay Branch (True/False) Ejecuta True después de N segundos

Variables internas por nodo

Cada nodo usa variables de instancia nombradas con el nombre del nodo:

Nodo Variable(s) interna(s)
Do Once self._do1_<nombre>
Flip Flop self._ff_<nombre>
Gate self._gate_<nombre>
Delay self._dly_<nombre>, self._dly_<nombre>_done

Renombrar un nodo en el editor resetea su estado — el nombre del nodo determina las variables.

Patrones comunes

Inicialización única

[OnUpdate] → [Do Once]
                ├── True  ──► [BT Set Blackboard: initialized = True] → [setup logic]
                └── False ──► (nada — ya inicializado)

Toggle de estado

[OnCollision] → [Flip Flop]
                    ├── True  ──► [BT Custom Task: open_door()]
                    └── False ──► [BT Custom Task: close_door()]

Heartbeat cada 5 segundos

[OnUpdate] → [Delay: 5.0s, Repeat=True]
                 ├── True  ──► [BTCustomTask: update_minimap()]
                 └── False ──► (esperando)

Ejecutar solo cada 3 frames activos

[OnUpdate] → [Gate: N=3]
                 ├── Out  ──► [lógica costosa]
                 └── Skip ──► (nada)