Frameworks de code
Recette : borner une valeur
Gardez une valeur dans un intervalle avec math.max et math.min.
Objectif
Empêchez les PV de passer sous zéro quand un Keeper subit des dégâts.
Le changement
Lisez la valeur actuelle, puis écrivez le résultat borné.
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));
}- Ligne 2 Lisez les PV actuels.
- Ligne 3 math.max garde le résultat à 0 ou plus. Écrivez la valeur finale avec ledger.set.
Utilisez math.min(limit, value) pour garder une valeur à une limite ou en dessous.
Une limite peut être un autre champ. Pour garder Sanity à un champ max_sanity ou en dessous, lisez les deux et écrivez math.min(max_sanity, sanity + amount). La règle de soin du démarrage rapide fait cela avec max_hp. Testez l'étape plafonnée.
Testez-le
La règle définit maintenant une valeur, donc l'écriture attendue est ledger.set au lieu de ledger.add. Ajoutez une étape qui passerait sous zéro.
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 }]
}
]- Lignes 7-11 Subir 6 dégâts : 10 moins 6 font 4.
- Lignes 12-16 Un coup de 20 passerait sous zéro. La règle écrit 0.
- Lignes 17-21 Soigner 3 à partir de 0.

