import { DialogSplitItem } from "./dialog-split-item.js"; import { RdDItem } from "./item.js"; export class RdDSheetUtility { static mergeDocumentRights(options, document, editable) { const userRightLevel = game.user.isGM ? CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER : document.getUserLevel(game.user); mergeObject(options, { isGM: game.user.isGM, isOwned: document.parent, editable: editable, cssClass: editable ? "editable" : "locked", isLimited: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.LIMITED, isObserver: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER, isOwner: userRightLevel >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER }); return options; } static getItem(event, actor) { return actor.items.get(RdDSheetUtility.getItemId(event)) } static getItemId(event) { return RdDSheetUtility.getEventItemData(event, "item-id"); } static getEventItemData(event, property) { const node = RdDSheetUtility.getEventElement(event); return node?.data(property); } static getEventElement(event) { return $(event.currentTarget)?.parents(".item"); } static async prepareItemDropParameters(destItemId, actor, dragData, objetVersConteneur) { let item = fromUuidSync(dragData.uuid); if (item.pack && !item.system) { item = await RdDItem.getCorrespondingItem(item); } if (actor.canReceive(item)) { return { destId: destItemId, targetActorId: actor.id, itemId: item.id, sourceActorId: item.actor?.id, srcId: objetVersConteneur[item.id], onEnleverConteneur: () => { delete objetVersConteneur[item.id]; }, onAjouterDansConteneur: (itemId, conteneurId) => { objetVersConteneur[itemId] = conteneurId; } } } else { ui.notifications.warn(`Impossible de donner ${item.name} à ${actor.name}: ${item.type} / ${actor.type}`); } return undefined; } static async splitItem(item, actor, onSplit = () => { }) { const dialog = await DialogSplitItem.create(item, async (item, split) => { await RdDSheetUtility._onSplitItem(item, split, actor); onSplit(); }); dialog.render(true); } static async _onSplitItem(item, split, actor) { if (split >= 1 && split < item.system.quantite) { await item.diminuerQuantite(split); const splitItem = duplicate(item); // todo: ajouter dans le même conteneur? splitItem.system.quantite = split; await actor.createEmbeddedDocuments('Item', [splitItem]) } } }