Zum Hauptinhalt springen

Code-Frameworks

Rezept: ein abgeleiteter Wert

Berechne einen Wert aus anderen Werten mit einer Ledger-Funktion.

Ziel

Zeige ein Ward, das die Hälfte der maximalen hp ist, abgerundet.

Die Änderung

Deklariere die Funktion im Schema.

schemas/keeper.json
  "ledgerFunctions": [
    {
      "id": "ward",
      "name": "Ward",
      "field": "ward",
      "source": "rules/ward.ts"
    }
  ]
  1. Zeilen 19-22 field ist der gespeicherte Wert, den Ward füllt.
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. Zeile 1 currentValue ist der Wert bis jetzt. Die meisten abgeleiteten Werte ignorieren ihn.
  2. Zeile 2 Lies mit element.var, was du brauchst.
  3. Zeile 3 Gib die abgeleitete Zahl zurück.

Der Konstruktor gibt das Feld weiterhin zurück, mit dem Startwert 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. Zeilen 4-5 ward wird als 0 zurückgegeben. Die Ledger-Funktion leitet es gleich danach ab.

Teste es

scenarios/new-keeper.json
  "ledger": [{ "function": "ward", "currentValue": 0, "expected": 5 }]
  1. Zeile 6 Prüft die Funktion: Sie startet bei 0 und muss 5 zurückgeben.

Füge ward außerdem in jedem Szenario für den Keeper zu expectedValues hinzu.

Weiter