Pular para o conteúdo principal

Code frameworks

Receita: um atributo derivado

Calcule um valor a partir de outros valores com uma função do ledger.

Objetivo

Mostrar um ward que é metade do hp máximo, arredondado para baixo.

A mudança

Declare a função no esquema.

schemas/keeper.json
  "ledgerFunctions": [
    {
      "id": "ward",
      "name": "Ward",
      "field": "ward",
      "source": "rules/ward.ts"
    }
  ]
  1. Linhas 19-22 field é o valor guardado que Ward preenche.
rules/ward.ts
export function ward(currentValue: number, self: ElementRef): number {
  const max_hp: number = element.var(self, "max_hp") as number;
  return math.floor(max_hp / 2);
}
  1. Linha 1 currentValue é o valor até agora. A maioria dos valores derivados o ignora.
  2. Linha 2 Leia o que precisar com element.var.
  3. Linha 3 Devolva o número derivado.

O construtor ainda devolve o campo, com valor inicial 0.

rules/keeper.ts
export function construct(
  name: string,
  max_hp: number,
): { name: string; max_hp: number; hp: number; ward: number } {
  return { name: name, max_hp: max_hp, hp: max_hp, ward: 0 };
}
  1. Linhas 4-5 ward é devolvido como 0. A função do ledger o deriva logo depois.

Teste

scenarios/new-keeper.json
  "ledger": [{ "function": "ward", "currentValue": 0, "expected": 5 }]
  1. Linha 6 Confere a função: ela começa em 0 e deve devolver 5.

Adicione também ward a expectedValues em todos os cenários do Keeper.

Próximos passos