Kara Effector ofrece dos funciones para almacenar datos, remember y set_temp, cada una con un propósito específico. Comprender su diferencia es clave para crear efectos complejos y eficientes.
Primero, es fundamental saber que esta casilla no es un editor de scripts de LUA de formato libre. No admite bloques de código como if ... then ... end. (A menos que estén dentro de una función)
En su lugar, funciona mediante asignaciones de variables (variable = valor). Para ejecutar código de forma condicional, se utiliza una construcción común en LUA que funciona como un operador ternario:
mi_variable = (condición) and (valor_si_es_cierto) or (valor_si_es_falso)
Esta estructura es la base para usar remember y set_temp de manera efectiva en la interfaz.
remember(ref, val): La memoria a corto plazoPropósito: Optimizar el rendimiento de un efecto dentro de una única línea de diálogo. Su función es evitar cálculos repetitivos.
¿Cómo funciona?
remember("nombre_del_dato", valor_a_guardar) guarda un valor en la tabla interna recall. Para leerlo, se usa recall.nombre_del_dato. Esta memoria es volátil: se borra por completo cuando Kara Effector termina de procesar la línea actual y pasa a la siguiente.
Imagina un efecto con un bucle de 20 iteraciones (loop = 20) que utiliza la misma figura (shape). Sería ineficiente generar esa figura 20 veces. La solución es crearla solo en la primera iteración (j == 1) y "recordarla" para las demás.
En la casilla "Variables [fx]:"
my_path = j == 1 and remember("circle_path", shape.size(shape.circle, 100)) or recall.circle_path
Análisis de la línea:
my_path.j == 1.
j es 1 (primera iteración): Se ejecuta remember("circle_path", ...). Esta función guarda la shape del círculo en recall y, a su vez, retorna esa misma shape. El valor retornado se asigna a my_path.j es mayor que 1 (iteraciones siguientes): La condición es falsa, por lo que se ejecuta la expresión después del or. Se recupera la shape previamente guardada desde recall.circle_path y se asigna a my_path.Gracias a esto, la variable my_path siempre contiene la shape necesaria, pero el cálculo pesado solo se realiza una vez por línea.
En la casilla "Return [fx]:"
Simplemente se usa la variable, prefijada con var.
return math.shape(var.my_path, nil, nil, maxj)
Resumen (remember):
recall.set_temp(ref, val): La Memoria a Largo PlazoPropósito: Pasar información y mantener un estado entre diferentes líneas de diálogo durante una misma ejecución del script.
¿Cómo funciona?
set_temp("nombre_del_dato", valor_a_guardar) guarda un valor en la tabla interna temp. Para leerlo, se usa temp.nombre_del_dato. Esta memoria es persistente y no se borra al pasar de una línea a otra.
Se quiere crear un efecto de "dominó", donde la animación de una línea comienza justo cuando termina la de la línea anterior.
En la casilla "Variables [fx]:" (esto se aplica a todas las líneas seleccionadas)
update_temp = syl.i == l.syl.n and set_temp("last_fall_time", l.start_time + syl.end_time + 500) or nil
Análisis de la línea:
update_temp se usa solo para ejecutar la función set_temp.syl.i == l.syl.n (¿es esta la última sílaba de la línea?).
set_temp(...). Se calcula el tiempo de finalización del efecto y se almacena en temp.last_fall_time.update_temp se vuelve nil).En la casilla "Line Start Time":
return temp.last_fall_time or l.start_time + syl.start_time
Análisis de la línea:
temp.last_fall_time.Esto crea una secuencia continua de animaciones a través de múltiples líneas de diálogo.
Resumen (set_temp):
temp.| Característica | remember(ref, val) |
set_temp(ref, val) |
|---|---|---|
| Propósito Principal | Optimización (dentro de una línea). | Comunicación (entre líneas). |
| Ámbito / Vida útil | Línea actual (se borra al terminar). | Toda la ejecución del script. |
| Caso de Uso Típico | Calcular una shape compleja una vez y reutilizarla en un bucle (j). |
Guardar el tiempo o posición final de una línea para que la siguiente lo use como valor inicial. |