85 lines
2.9 KiB
JavaScript
85 lines
2.9 KiB
JavaScript
import { ITEM_TYPES } from "../constants.js"
|
|
import { RollBasicParts } from "./roll-basic-parts.mjs"
|
|
import { DIFF, ROLL_TYPE_CUISINE } from "./roll-constants.mjs"
|
|
import { PART_CUISINE } from "./roll-part-cuisine.mjs"
|
|
import { RollType } from "./roll-type.mjs"
|
|
|
|
export class RollTypeCuisine extends RollType {
|
|
get code() { return ROLL_TYPE_CUISINE }
|
|
get name() { return `Interpréter une oeuvre` }
|
|
|
|
visible(rollData) { return rollData.active.actor.isPersonnage() }
|
|
title(rollData) {
|
|
const current = rollData.current[PART_CUISINE]
|
|
return current.recette ? `prépare une recette: ${current.label}` : `prépare: ${current.label}`
|
|
}
|
|
|
|
onSelect(rollData) {
|
|
this.setDiffType(rollData, DIFF.AUCUN)
|
|
}
|
|
|
|
getResult(rollData, impacts) {
|
|
const current = rollData.current[PART_CUISINE]
|
|
const diff = -current.value
|
|
const cuisine = rollData.refs[PART_CUISINE].cuisine
|
|
const qualite = rollData.rolled.ptQualite + (rollData.rolled.isSuccess ? diff : Math.min(diff, cuisine.system.niveau))
|
|
|
|
const result = {
|
|
qualite: qualite,
|
|
exotisme: Math.min(Math.min(qualite, current.exotisme ?? 0), 0),
|
|
messages: []
|
|
}
|
|
if (current.fabriquer) {
|
|
const plat = this.$prepareNourriture(rollData.active.name, current, result)
|
|
result.messages.push(`${plat.system.quantite} ${plat.name} ont été préparés dans l'équipement`)
|
|
impacts.active.addCreatedItem(plat)
|
|
result.plat = { id: plat.id }
|
|
}
|
|
if (current.ingredient) {
|
|
const quantite = Math.min(current.proportions, current.ingredient.system.quantite)
|
|
if (quantite == current.ingredient.system.quantite) {
|
|
impacts.active.addDeletedItem(current.ingredient)
|
|
result.messages.push(`Il n'y a plus de ${ingredient.name}`)
|
|
}
|
|
else {
|
|
impacts.active.addItemDelta(current.ingredient, 'system.quantite', -current.proportions)
|
|
result.messages.push(`${current.proportions} ${current.ingredient.name} ont été utilisés`)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
onApplyImpacts(roll, impacts) {
|
|
if (roll.result.plat) {
|
|
// le plat n'est pas créé immédiatement, il faut donc retrouver l'id
|
|
roll.result.plat.id = impacts.active.itemCreates.find(it => it.id = roll.result.plat.id)?.createdId
|
|
}
|
|
}
|
|
|
|
$prepareNourriture(cuisinier, current, result) {
|
|
return {
|
|
id: foundry.utils.randomID(16),
|
|
name: current.label,
|
|
img: current.img,
|
|
type: ITEM_TYPES.nourritureboisson,
|
|
system: {
|
|
sust: current.sust,
|
|
cuisinier: cuisinier,
|
|
exotisme: result.exotisme,
|
|
encombrement: 0.1,
|
|
quantite: current.proportions,
|
|
qualite: result.qualite,
|
|
cout: result.qualite > 0 ? (result.qualite * 0.01) : 0.01,
|
|
}
|
|
}
|
|
}
|
|
|
|
async onFaireGouter(savedRoll) {
|
|
const actor = RollBasicParts.getTokenActor(savedRoll).actor
|
|
const platId = savedRoll.result.plat.id
|
|
const plat = actor.items.get(platId)
|
|
await plat?.proposerVente()
|
|
}
|
|
|
|
}
|
|
|