Zum Hauptinhalt springen

Code-Frameworks

Rezept: einen Wert begrenzen

Halte einen Wert mit math.max und math.min in einem Bereich.

Ziel

Verhindere, dass hp unter null fällt, wenn ein Keeper Schaden nimmt.

Die Änderung

Lies den aktuellen Wert und schreibe dann das begrenzte Ergebnis.

rules/hurt.ts
export function hurt(self: ElementRef, amount: number): void {
  const hp: number = element.var(self, "hp") as number;
  ledger.set(self, "hp", math.max(0, hp - amount));
}
  1. Zeile 2 Lies die aktuellen HP.
  2. Zeile 3 math.max hält das Ergebnis bei 0 oder darüber. Schreibe den Endwert mit ledger.set.

Nutze math.min(limit, value), um einen Wert auf oder unter einer Grenze zu halten.

Eine Grenze kann ein anderes Feld sein. Um Sanity auf oder unter einem Feld max_sanity zu halten, lies beide und schreibe math.min(max_sanity, sanity + amount). Die Heilungsregel im Schnellstart macht das mit max_hp. Teste den begrenzten Schritt.

Teste es

Die Regel setzt jetzt einen Wert, also ist der erwartete Schreibvorgang ledger.set statt ledger.add. Füge einen Schritt hinzu, der unter null fallen würde.

scenarios/heal.json
  "actions": [
    {
      "action": "hurt",
      "parameters": { "amount": 6 },
      "expectedWrites": [{ "op": "ledger.set", "key": "hp", "value": 4 }]
    },
    {
      "action": "hurt",
      "parameters": { "amount": 20 },
      "expectedWrites": [{ "op": "ledger.set", "key": "hp", "value": 0 }]
    },
    {
      "action": "heal",
      "parameters": { "amount": 3 },
      "expectedWrites": [{ "op": "ledger.set", "key": "hp", "value": 3 }]
    }
  ]
  1. Zeilen 7-11 Nimm 6 Schaden: 10 minus 6 ist 4.
  2. Zeilen 12-16 Ein Treffer von 20 würde unter null fallen. Die Regel schreibt 0.
  3. Zeilen 17-21 Heile 3 von 0 aus.

Weiter