import { Misc } from "../misc.js" import { RdDSheetUtility } from "../rdd-sheet-utility.js" import { RdDUtility } from "../rdd-utility.js" /** * TODO: * options.editable ? * */ const _SPACEHOLDER = { placeholder: true } const _VENDRE = { code: 'item-vendre', label: 'Vendre ou donner', icon: it => 'fa-solid fa-comments-dollar', filter: it => Misc.toInt(it.system.quantite) > 0, optionsFilter: options => options.editable, action: (item, actor) => item.proposerVente() } const _ACHAT_SERVICE = { code: 'item-service-acheter', label: 'Acheter', icon: it => 'fa-regular fa-coins', //filter: it => Misc.toInt(it.system.quantite) > 0, //optionsFilter: options => options.editable, //action: (item, actor) => item.proposerVente() } const _MONTRER = { code: 'item-montrer', label: 'Montrer', icon: it => 'fa-solid fa-comment', action: (item, actor) => item.postItemToChat() } const _EDIT = { code: 'item-edit', label: 'Editer', icon: it => 'fa-solid fa-edit', action: (item, actor) => item.sheet.render(true) } const _DELETE = { code: 'item-delete', label: 'Supprimer', icon: it => 'fa-solid fa-trash', optionsFilter: options => options.editable && options.isOwner, action: (item, actor) => RdDUtility.confirmActorItemDelete(item, actor) } const _EQUIPER = { code: 'item-equip', label: 'Equiper', icon: it => it.system.equipe ? 'fa-solid fa-hand-rock' : 'fa-regular fa-hand-paper', filter: it => !it.estContenu && it.isEquipable(), action: (item, actor) => actor.equiperObjet(item) } const _CUISINER = { code: 'item-cuisiner', label: 'Cuisiner', icon: it => 'fa-solid fa-utensils', filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0, optionsFilter: options => options.editable, action: (item, actor) => actor.preparerNourriture(item) } const _MANGER_CRU = { code: 'item-manger-cru', label: 'Manger cru', icon: it => 'fa-solid fa-drumstick-bite', filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0, optionsFilter: options => options.editable, action: (item, actor) => actor.mangerNourriture(item) } const _MANGER = { code: 'item-manger', label: 'Manger', icon: it => 'fa-solid fa-utensils', filter: it => !(it.system.boisson), optionsFilter: options => options.editable, action: (item, actor) => actor.mangerNourriture(item) } const _BOIRE = { code: 'item-boire', label: 'Boire', icon: it => 'fa-solid fa-glass-water', filter: it => it.system.boisson, optionsFilter: options => options.editable, action: (item, actor) => actor.mangerNourriture(item) } const _DECOCTION = { code: 'item-decoction', label: 'Décoction', icon: it => 'fa-solid fa-flask-vial', optionsFilter: options => options.editable, action: (item, actor) => actor.actionHerbe(item) } const _OUVRIR = { code: 'item-edit', label: 'Ouvrir', icon: it => 'fa-solid fa-eye', action: (item, actor) => item.sheet.render(true) } const _LIRE = { code: 'item-lire', label: 'Lire', icon: it => 'fa-solid fa-book-open', optionsFilter: options => options.editable, action: (item, actor) => actor.actionLire(item) } const _REFOULER = { code: 'item-refouler', label: 'Refouler', icon: it => 'fa-solid fa-burst', filter: it => it.system.refoulement > 0, optionsFilter: options => options.editable, action: (item, actor) => actor.actionRefoulement(item) } const _CONSOMMER_POTION = { code: 'item-potion-consommer', label: 'Consommer', icon: it => 'fa-solid fa-vial', optionsFilter: options => options.editable, action: (item, actor) => actor.consommerPotion(item) } const _ENCHANTER = { code: 'item-enchanter', label: 'Enchanter', icon: it => 'fa-solid fa-sparkles', filter: it => it.isEnchantable(), optionsFilter: options => options.editable, action: (item, actor) => item.enchanterPotion() } const _SORT_RESERVE = { code: 'item-sortreserve-add', label: 'Ajouter en réserve', icon: it => 'fa-solid fa-sparkles', filter: it => game.user.isGM && !it.system.isrituel, action: (item, actor) => actor.addSortReserve(item) } export const COMMON_ACTIONS = [_EQUIPER] export const DEFAULT_ACTIONS = [_SPACEHOLDER, _VENDRE, _MONTRER, _EDIT, _DELETE] export const ITEM_ACTIONS = { faune: [_CUISINER, _MANGER_CRU], ingredient: [_CUISINER, _MANGER_CRU], conteneur: [_OUVRIR], herbe: [_DECOCTION, _CUISINER, _MANGER_CRU], livre: [_LIRE], nourritureboisson: [_MANGER, _BOIRE], ombre: [_REFOULER], plante: [_CUISINER, _MANGER_CRU], potion: [_CONSOMMER_POTION, _ENCHANTER], queue: [_REFOULER], sort: [_SORT_RESERVE], service: [_ACHAT_SERVICE] } export class ItemAction { static applies(action, item, options) { return action && item.isActionAllowed(action.code) && (!action.filter || action.filter(item)) && (!action.optionsFilter || action.optionsFilter(options)) } static icon(action, item) { if (action && action.icon) { return action.icon(item) } return undefined } static onActionItem(event, actor, options) { const item = RdDSheetUtility.getItem(event, actor) const code = $(event.currentTarget).data('code') const action = item.itemActions().find(it => it.code == code) if (action && (!action.optionsFilter || action.optionsFilter(options))) { action.action(item, actor) } } }