Pular para o conteúdo principal

Code frameworks

Como o Fabled executa seu código

Acompanhe um projeto do código-fonte até o jogo: o que roda e quando, como o ledger funciona e o que um cenário prova.

Do código-fonte ao jogo

Seu projeto passa por cinco etapas. Só a última é o jogo. As etapas anteriores nunca mudam um personagem ao vivo.

  1. Escrever

    Você edita os arquivos de código-fonte no editor de código-fonte. Nada roda ainda.

  2. Verificar

    Verificar e visualizar compila suas edições atuais e executa todos os cenários, salvas ou não. Os problemas aparecem no painel Problemas. Nada é publicado.

  3. Salvar

    Salvar projeto guarda o código-fonte como uma nova versão do seu jogo. Preparar só funciona com uma versão salva, então salve antes de preparar.

  4. Preparar

    Preparar meu jogo cria Frameworks, Frames e conteúdo privados a partir da versão salva. O servidor verifica o projeto de novo, e o veredito dele é o que vale.

  5. Jogar

    Um jogador cria um personagem a partir do seu Framework. O construtor o cria, e as ações o mudam.

O que roda e quando

ParteQuando rodaO que faz
ConstructorUma vez, quando um Element é criado a partir do Framework.Transforma as entradas nos valores iniciais. Nunca escreve.
Função de ledgerQuando o Element é criado, na ordem em que o schema declara as funções, e de novo depois de cada ação.Deriva um valor a partir de valores salvos. Uma ação não pode escrevê-lo.
AçãoQuando um jogador usa um botão que a chama.Escreve no ledger com ledger.set e ledger.add.
FrameSempre que a ficha é mostrada.Lê valores salvos e os desenha. Seus botões chamam ações.
CenárioEm Verificar e visualizar, nunca no jogo.Cria um Element, executa ações e compara cada valor e cada escrita.

O ledger

Os valores de um Element nunca são editados no lugar. Toda mudança é uma escrita no seu ledger. ledger.set troca um valor e ledger.add soma a ele. Os cenários listam essas escritas, então você vê exatamente o que uma regra faz.

Um valor derivado vem de uma função de ledger, então uma ação não pode escrevê-lo. A verificação recusa:

which is a non-writable state field

O constructor ainda retorna um campo que uma função de ledger deriva, com um marcador como 0. A função de ledger troca o marcador quando o Element é criado. Um cenário compara seus expectedValues com os valores depois que as funções de ledger rodaram, então escreva ali o valor derivado, não o marcador.

As funções de ledger rodam na ordem em que o schema as declara, e cada uma vê os resultados das anteriores. Declare uma função depois das funções cujos campos ela lê. Aqui total lê base, mas é declarada primeiro, então lê o 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

Use uma função de ledger para um valor que deve acompanhar outros campos e que nenhuma ação escreve. Use um valor do constructor para um número que o personagem possui e que as ações mudam, como hp. O constructor o calcula uma vez, então uma mudança posterior nos campos de origem não o move.

O que um cenário prova

  • O construtor retorna os valores que você espera.
  • Cada ação faz exatamente as escritas que você lista.
  • Os valores derivados saem certos, também depois de uma ação.
  • Todo arquivo é usado e o projeto inteiro compila.

Um cenário não prova a aparência de uma ficha nem a sensação de uma regra no jogo. Teste o jogo preparado para isso.

Próximo