Pular para o conteúdo principal

Code frameworks

Receita: limitar um valor

Mantenha um valor dentro de um intervalo com math.max e math.min.

Objetivo

Impedir que hp fique abaixo de zero quando um Keeper sofre dano.

A mudança

Leia o valor atual e depois escreva o resultado limitado.

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. Linha 2 Leia o HP atual.
  2. Linha 3 math.max mantém o resultado em 0 ou mais. Escreva o valor final com ledger.set.

Use math.min(limit, value) para manter um valor igual ou abaixo de um limite.

Um limite pode ser outro campo. Para manter Sanity igual ou abaixo de um campo max_sanity, leia os dois e escreva math.min(max_sanity, sanity + amount). A regra heal do início rápido faz isso com max_hp. Teste o passo limitado.

Teste

A regra agora define um valor, então a escrita esperada é ledger.set em vez de ledger.add. Adicione um passo que iria abaixo de zero.

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. Linhas 7-11 Sofra 6 de dano: 10 menos 6 é 4.
  2. Linhas 12-16 Um golpe de 20 iria abaixo de zero. A regra escreve 0.
  3. Linhas 17-21 Cure 3 a partir de 0.

Próximos passos