Saltar al contenido principal

Code frameworks

Cómo ejecuta Fabled tu código

Sigue un proyecto desde el código hasta el juego: qué se ejecuta y cuándo, cómo funciona el ledger y qué demuestra un escenario.

Del código al juego

Tu proyecto pasa por cinco pasos. Solo el último es jugar. Los pasos anteriores nunca cambian un personaje en vivo.

  1. Escribir

    Editas los archivos de código en el editor de código fuente. Todavía no se ejecuta nada.

  2. Comprobar

    Comprobar y previsualizar compila tus cambios actuales y ejecuta todos los escenarios, estén guardados o no. Los problemas aparecen en el panel Problemas. No se publica nada.

  3. Guardar

    Guardar proyecto conserva el código como una versión nueva de tu juego. Preparar solo funciona con una versión guardada, así que guarda antes de preparar.

  4. Preparar

    Preparar mi juego crea Frameworks, Frames y contenido privados a partir de la versión guardada. El servidor vuelve a comprobar el proyecto, y su veredicto es el que cuenta.

  5. Jugar

    Un jugador crea un personaje a partir de tu Framework. El constructor lo crea y las acciones lo cambian.

Qué se ejecuta y cuándo

ParteCuándo se ejecutaQué hace
ConstructorUna vez, cuando se crea un Elemento a partir del Framework.Convierte las entradas en los valores iniciales. Nunca escribe.
Función del ledgerCuando se crea el Elemento, en el orden en que el esquema declara las funciones, y de nuevo después de cada acción.Deriva un valor a partir de los valores guardados. Una acción no puede escribirlo.
AcciónCuando un jugador usa un botón que la llama.Escribe en el ledger con ledger.set y ledger.add.
FrameCada vez que se muestra la hoja.Lee los valores guardados y los dibuja. Sus botones llaman a acciones.
EscenarioEn Comprobar y previsualizar, nunca al jugar.Crea un Elemento, ejecuta acciones y compara cada valor y cada escritura.

El ledger

Los valores de un Elemento nunca se editan directamente. Cada cambio es una escritura en su ledger. ledger.set reemplaza un valor y ledger.add le suma. Los escenarios enumeran esas escrituras, así que ves exactamente qué hace una regla.

Un valor derivado viene de una función del ledger, así que una acción no puede escribirlo. La comprobación lo rechaza:

which is a non-writable state field

El constructor sigue devolviendo un campo que deriva una función del ledger, con un marcador como 0. La función del ledger reemplaza el marcador cuando se crea el Elemento. Un escenario compara sus expectedValues con los valores después de ejecutar las funciones del ledger, así que escribe ahí el valor derivado, no el marcador.

Las funciones del ledger se ejecutan en el orden en que las declara el esquema, y cada una ve los resultados de las anteriores. Declara una función después de las funciones cuyos campos lee. Aquí total lee base, pero se declara primero, así que lee el marcador:

{
  "ledgerFunctions": [
    {
      "id": "total",
      "name": "Total",
      "field": "total",
      "source": "rules/total.ts"
    },
    {
      "id": "base",
      "name": "Base",
      "field": "base",
      "source": "rules/base.ts"
    }
  ]
}
expectedValues.total: expected 11, constructor returned 1

Usa una función del ledger para un valor que debe seguir a otros campos y que ninguna acción escribe. Usa un valor del constructor para un número que es del personaje y que las acciones cambian, como hp. El constructor lo calcula una vez, así que un cambio posterior en los campos de los que salió no lo mueve.

Qué demuestra un escenario

  • El constructor devuelve los valores que esperas.
  • Cada acción hace exactamente las escrituras que enumeras.
  • Los valores derivados salen bien, también después de una acción.
  • Se usa cada archivo y todo el proyecto compila.

Un escenario no demuestra cómo se ve una hoja ni cómo se siente una regla al jugar. Para eso, prueba el juego preparado.

Siguiente