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

