API: Eventos

Hay varios tipos diferentes de eventos a los que puedes responder. En general, cada tipo de objeto tiene un evento correspondiente para cambios, adiciones y eliminaciones. Cada evento se activará una vez por objeto que cambie. Si más de una propiedad en el objeto cambia al mismo tiempo, solo se activa un evento "global" (por ejemplo, cambio:gráfico).


Parámetros de retrollamada

Cuando escuchas un evento, creas una función conocida como unaretrollamadaque se ejecuta cada vez que ocurre el evento. La función de retrollamada recibe varios parámetros que son objetos que te proporcionan información que quieres saber sobre el evento para poder decidir qué hacer.

Los parámetros de retrollamada para cada evento serán diferentes, pero incluyen:

obj

El objeto que ha cambiado. Cualquier cambio que realices en este objeto también se guardará en el juego. Así que si quieres mover un objeto gráfico hacia la izquierda, debes modificar la propiedad left del objeto objutilizando el método set.

  • obj.get("property")retorna el valor actual de la propiedad.
  • obj.set("property", "newvalue")establece un nuevo valor para la propiedad. Si estás cambiando varias propiedades al mismo tiempo, puedes pasar un objeto:obj.set({left: 10, top: 20});


prev

Este es un objeto de las propiedades deobjtal como estaban antes de realizar cambios debido a este evento. Útil para determinar cuánto ha cambiado una propiedad.

NOTA:Este es un objeto básico, por lo que puedes acceder a las propiedades utilizando la notación de corchetes:prev["bar1_value"], NO utilizando las funciones set o get.


Orden de eventos

Los eventos se disparan de manera síncrona (lo que significa que cada función no comenzará hasta que la anterior haya terminado) en orden desde el primero enlazado hasta el último enlazado, y también desde la propiedad específica hasta el objeto general. Dado lo siguiente:

en("cambio:gráfico", función1);
en("cambio:gráfico", función2);
en("cambio:gráfico:izquierda", función3);

Si los objetosizquierdahan cambiado de propiedad, el orden sería función3, luego función1 y luego función2.

Además, si tienes varios scripts en tu campaña, los scripts se cargan en el mismo orden en que aparecen en tu página de Scripts de la Campaña, de izquierda a derecha.

Nota: Los eventos solo se activan por cambios realizados por los jugadores/el DJ que jueguen la partida. Los eventos no se desencadenarán por cambios de la API. Entonces, si un jugador mueve una pieza en la mesa, recibirías un evento "cambio:gráfico". Si modificas la propiedad del mismo gráfico en un script de Mod (API), no se activará un evento "change:graphic".


Eventos de la Campaña

listo

Este evento se activa después de que todos los datos actuales de la campaña hayan sido cargados. Así que si quieres encontrar una lista de todos los objetos en una campaña, o un objeto específico que ya está en la Campaña, asegúrate de buscarlo solo después de que se active el evento de listo. Además, si se vincula a eventosadd(comoadd:graphic) antes de que se dispare el eventoready, recibirá eventos add para objetos que ya estaban presentes en la campaña.

on ("ready", function() {
  var tokenThatAlreadyExisted = getObj("graphic", "-ABc123");
});

change:campaign:playerpageid

Se activa cada vez que cambia la página en la que los jugadores se encuentran actualmente.

change:campaign:turnorder

Se activa cada vez que cambia la lista de orden de turno de la campaña.

change:campaign:initiativepage

Se activa cada vez que se oculta o muestra el orden de turno para una página. Esto puede que no sea lo mismo que el ID de la página actualmente activa. Si esto se establece como false (incluido si un script de Mod (API) lo establece como falso), se cerrará la lista de turnos para todos los DJ/jugadores. Si se ajusta a un ID de página válido, se abrirá para todos los GMs/jugadores.


Eventos del objeto

cambiar:gráfico

Se activa cada vez que cambia un objeto gráfico (que es casi cualquier tipo de objeto del tablero, incluidas fichas, mapas y cartas).

Nota: Los objetos gráficos creados por la API activarán este evento al crearse.

Parámetros de la llamada de retorno: obj, prev

on("change:graphic", function(obj, prev) {    
  //Haga algo con "obj" aquí. "prev" es una lista de valores anteriores.
  // Tenga en cuenta que "obj" y "prev" son TIPOS de objetos diferentes. 
  // para trabajar con obj debe utilizar obj.get("nombre");
  // para trabajar con prev puede utilizar prev["nombre"];
});

cambiar:gráfico:(propiedad)

También puedes vincularte a un evento para cada propiedad específica en el objeto. Así, si tiene un script que desea ejecutar sólo cuando cambie la rotación de, lo haría:

on("change:graphic:rotation", function(obj, prev) {    
  //Siempre establece la rotación en 0, para que nadie pueda rotar los objetos.    
  obj.set("rotation", 0);
});

add:graphic

Se activa cuando se agrega un objeto gráfico al tablero por primera vez. También se llamará para objetos existentes cuando el tablero se inicie si te vinculas a este eventofuera dela listalistalista.

Parámetros de devolución de llamada: obj

on("add:graphic", function(obj) {
  //Se llamará para todos los gráficos nuevos, incluidos los que ya existían al iniciar la sesión de juego.
});

var started = false;

on("ready", function() {
  on("add:graphic", function(obj) {
    //Solo se llamará para los nuevos objetos que se agreguen, ya que los objetos existentes ya se han cargado antes de que se dispare el evento de preparado.
  });
  //También podrías establecer una variable e ignorar los eventos de adición hasta que sea verdadera.
  started = true;
});

destroy:graphic

Desencadenado cuando se elimina un objeto gráfico de la mesa de juego.

Parámetros de devolución de llamada: obj

Otros tipos de objetos

También hay eventos para todos los demás tipos de objetos y subtipos, como:

change:path, add:path, destroy:path, change:text, add:text, destroy:text, change:token, add:token, destroy:token, change:card, add:card, destroy:card

Ver la referencia de objetos para ver una lista completa de todos los tipos y subtipos de objetos.

¿Fue útil este artículo?
Usuarios a los que les pareció útil: 11 de 14