Ir al contenido
Wiki Hartico

Ejecuta Pilas

Ejecuta Pilas

En Wired Code: effect.call_stacks

Ejecuta las pilas que hay en los furnis que elijas, como si fueran una continuación de la actual.

Cómo funciona

Es la forma de reutilizar trabajo. Si tienes una secuencia que se usa desde cinco sitios distintos —arrancar la partida, repartir premios, limpiar el tablero—, la montas una sola vez en su baldosa y todas las demás la llaman.

La ventaja frente a copiar la pila cinco veces es evidente el día que hay que cambiarla: se toca en un sitio.

A diferencia de las señales, aquí no se anuncia nada: se ejecutan exactamente las pilas de los furnis que le des como fuente —los que marques a mano, o los del selector, los de la señal o el desencadenante—, y ninguna otra.

Los efectos de la pila llamada van en la misma tanda que los tuyos. No se ejecutan cuando le llega el turno a Ejecuta Pilas, sino que se suman a los efectos de tu pila y todos corren juntos, en el orden de siempre por tipo de efecto, como si estuvieran en la misma baldosa. Si tu pila tiene un Furni a Furni y la llamada un Mover y Rotar Furni, el Mover va primero porque su tipo va antes, aunque esté en la otra pila. Y si tu pila copia el estado de un furni a una variable y la llamada lo cambia con Mutar, la copia ya ve el estado nuevo.

La pila llamada no comprueba sus condiciones. El sistema evalúa sus selectores y sus complementos, pero se salta las condiciones y va derecho a los efectos. Es la trampa más cara de esta pieza: si pones una condición en la pila llamada creyendo que la protege, no protege nada. Las condiciones tienen que estar en la pila que llama.

La pila llamada hereda las fuentes de la que llama. Ve el mismo causante —tanto el usuario como el furni—, el mismo equipo, el mismo usuario clicado o alcanzado y la misma señal. Así que dentro puedes usar fuentes como "Usar furni desencadenante" o "Usar usuarios de señal" y apuntan a lo que disparó la pila de origen. Si esa pila nació de Transacción Completada o de Transacción Fallida, la pila llamada también lee las variables de la transacción, y la que llama las conserva al volver.

Las variables de contexto y los identificadores de texto van en una rama. La llamada abre una rama de la ejecución antes de que corran los efectos de tu pila (la señal la abre después). La pila llamada ve lo que tu pila traía, por ejemplo una variable de contexto o un $(identificador) que le llegó por una señal. Pero no ve lo que tu pila declara: un Dar variable, un complemento de texto o el $(trigger_text) de su causante, aunque la llamada lleve retardo. Lo que declare la llamada tampoco vuelve a tu pila, y si las dos dan la misma variable, cada una tiene la suya. Para pasarle un valor calculado en tu pila, usa una variable de sala o de furni, o una señal.

Lo que no se hereda es la selección: la pila llamada evalúa sus propios selectores desde cero, que es justo lo que la hace reutilizable. Si necesitas que la pila llamada trabaje sobre furnis concretos, pásaselos con una señal: aquí la fuente decide qué pilas se ejecutan, no sobre qué actúan.

Configuración

Ventana de configuración de Ejecuta Pilas

Seleccionar la fuente de furnis, dentro de Mostrar opciones avanzadas: de dónde salen los furnis cuyas pilas se ejecutan. De fábrica es Usar furnis seleccionados, y entonces los picas uno a uno en la sala; también puede ser Usar furnis de Selector, Usar furnis de Señal o Usar furni desencadenante, y se ejecutan las pilas que haya en esos furnis.

Ejemplo

Una rutina de inicio compartida:

Pila A   (sin causante)
│
├─ Efecto: A cero
│    ├─ Elige Furni ............................. Balón clásico · Portón
│    └─ Elige el criterio a programar ........... Estado actual · Dirección actual · Posición actual
│
├─ Efecto: Control de Contador
│    ├─ Elige Furni ............................. Contador Wired Pequeño
│    └─ Opciones ................................ Iniciar
│
└─ Efecto: Mensaje
     ├─ ¿Cuál es el mensaje? .................... "¡Nueva partida!"
     └─ Toda la sala

Pila B
│
├─ Causante: Click en Furni
│    └─ Elige Furni ............................. Interruptor de Suelo 1
│
└─ Efecto: Ejecuta Pilas
     └─ Elige Furni ............................. la baldosa de la Pila A

La pila llamada no necesita causante. Es la clave de este efecto: una pila con solo condiciones y efectos no se ejecuta nunca por su cuenta, y es exactamente lo que quieres para una rutina que solo debe correr cuando alguien la llama.

Notas

No esperes que tu pila termine antes. Como los efectos de las dos pilas van juntos, la llamada no ve "lo que ya hizo" la tuya: cada efecto va en su escalón. Si necesitas que una cosa ocurra estrictamente después de otra, ponle un retardo al Ejecuta Pilas o encadena con Enviar Señal.

La pila llamada también puede llamar. A → B → C → D llega hasta D, y una cadena larga también llega entera. Lo que no se repite es una pila que ya está en el camino de llamadas: si A se llama a sí misma, o A llama a B y B vuelve a llamar a A, esa vuelta no hace nada. Con esta pieza sola no se puede montar un bucle. Por caminos distintos sí se repite: si A llama a B y a C, y las dos llaman a D, D corre dos veces. Lo mismo con dos Ejecuta Pilas que apuntan a la misma pila. En cambio, varios furnis de la misma pila marcados en un solo Ejecuta Pilas cuentan como una.

Ejecutar en Orden solo ordena su propia pila. Puesto en la pila que llama, no mete los efectos de la llamada entre los suyos. Puesto en la llamada, ordena los de ella, y ese bloque entra en la tanda en el escalón de su efecto más bajo.

Con retardo, la llamada corre al cumplirse el tiempo. Y recuerda de dónde viene: si A llama con retardo a B y B llama a A, esa vuelta tampoco se ejecuta, así que el retardo no sirve para cerrar un bucle.

Las llamadas cuentan para el límite de la pila. Una misma pila no corre más de 100 veces en medio segundo, y cada vez que otra la llama cuenta como una más: si ocho pilas se llaman dos veces cada una a la siguiente, la última se queda en 100 en lugar de 256. Un Límite de Ejecución en la pila llamada también la frena.

Los bucles solo salen de otras piezas. En cuanto sales de Ejecuta Pilas —por una señal, o por un causante que se dispare con lo que hagan los efectos— puedes cerrar un círculo, y lo para ese mismo límite. Ver Límites y rendimiento.

No confundir con Enviar Señal. Esto llama a pilas concretas; la señal avisa a todas las que estén escuchando, las conozcas o no.

En esta página