Aller au contenu principal

Frameworks de code

Comment Fabled exécute votre code

Suivez un projet de la source au jeu : ce qui s'exécute et quand, comment fonctionne le registre, et ce que prouve un scénario.

De la source au jeu

Votre projet passe par cinq étapes. Seule la dernière est le jeu. Les étapes avant elle ne modifient jamais un personnage en ligne.

  1. Écrire

    Vous modifiez les fichiers source dans l'éditeur de code source. Rien ne s'exécute encore.

  2. Vérifier

    Vérifier et prévisualiser compile vos modifications actuelles et exécute chaque scénario, enregistrées ou non. Les problèmes apparaissent dans le panneau Problèmes. Rien n'est publié.

  3. Enregistrer

    Enregistrer le projet conserve la source comme une nouvelle version de votre jeu. Préparer ne fonctionne que sur une version enregistrée, donc enregistrez avant de préparer.

  4. Préparer

    Préparer mon jeu construit des Frameworks, des Cadres et du contenu privés à partir de la version enregistrée. Le serveur vérifie à nouveau le projet, et son verdict est final.

  5. Jouer

    Un joueur crée un personnage à partir de votre Framework. Le constructeur le construit, et les actions le modifient.

Ce qui s'exécute et quand

PartieQuand il s'exécuteCe qu'il fait
ConstructeurUne seule fois, quand un Élément est créé à partir du Framework.Transforme les entrées en valeurs de départ. N'écrit jamais.
Fonction de registreQuand l'Élément est construit, dans l'ordre où le schéma déclare les fonctions, puis après chaque action.Dérive une valeur à partir des valeurs stockées. Une action ne peut pas l'écrire.
ActionQuand un joueur utilise un bouton qui l'appelle.Écrit dans le registre avec ledger.set et ledger.add.
CadreChaque fois que la fiche est affichée.Lit les valeurs stockées et les dessine. Ses boutons appellent des actions.
ScénarioDans Vérifier et prévisualiser, jamais en jeu.Construit un Élément, exécute des actions et compare chaque valeur et chaque écriture.

Le registre

Les valeurs d'un Élément ne sont jamais modifiées sur place. Chaque changement est une écriture dans son registre. ledger.set remplace une valeur et ledger.add y ajoute un montant. Les scénarios listent ces écritures, donc vous voyez exactement ce que fait une règle.

Une valeur dérivée vient d'une fonction de registre, donc une action ne peut pas l'écrire. La vérification la refuse :

which is a non-writable state field

Le constructeur retourne quand même un champ qu'une fonction de registre dérive, avec une valeur provisoire comme 0. La fonction de registre remplace cette valeur quand l'Élément est construit. Un scénario compare ses expectedValues aux valeurs obtenues après les fonctions de registre : écrivez donc la valeur dérivée, pas la valeur provisoire.

Les fonctions de registre s'exécutent dans l'ordre où le schéma les déclare, et chacune voit les résultats des précédentes. Déclarez une fonction après celles dont elle lit les champs. Ici total lit base, mais elle est déclarée en premier, donc elle lit la valeur provisoire :

{
  "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

Utilisez une fonction de registre pour une valeur qui doit suivre d'autres champs et qu'aucune action n'écrit. Utilisez une valeur de constructeur pour un nombre que le personnage possède et que les actions changent, comme hp. Le constructeur la calcule une seule fois, donc un changement ultérieur des champs dont elle vient ne la déplace pas.

Ce que prouve un scénario

  • Le constructeur retourne les valeurs attendues.
  • Chaque action fait exactement les écritures que vous listez.
  • Les valeurs dérivées sont correctes, aussi après une action.
  • Chaque fichier est utilisé et tout le projet compile.

Un scénario ne prouve ni l'aspect d'une fiche, ni l'effet d'une règle en jeu. Essayez le jeu préparé pour cela.

La suite