Appv2 + DataModel migration completed
This commit is contained in:
142
modules/applications/sheets/cellule-sheet.mjs
Normal file
142
modules/applications/sheets/cellule-sheet.mjs
Normal file
@@ -0,0 +1,142 @@
|
||||
import HawkmoonActorSheet from "./base-actor-sheet.mjs"
|
||||
|
||||
const __ALLOWED_ITEM_CELLULE = { talent: 1, ressource: 1, contact: 1, equipement: 1, protection: 1, artefact: 1, arme: 1, monnaie: 1 }
|
||||
|
||||
export default class HawkmoonCelluleSheet extends HawkmoonActorSheet {
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = {
|
||||
...super.DEFAULT_OPTIONS,
|
||||
classes: [...super.DEFAULT_OPTIONS.classes],
|
||||
window: {
|
||||
...super.DEFAULT_OPTIONS.window,
|
||||
title: "SHEETS.Actor.cellule",
|
||||
},
|
||||
actions: {
|
||||
...super.DEFAULT_OPTIONS.actions,
|
||||
editActor: HawkmoonCelluleSheet.#onEditActor,
|
||||
deleteActor: HawkmoonCelluleSheet.#onDeleteActor,
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-hawkmoon-cyd/templates/cellule-sheet.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
tabGroups = { primary: "talents" }
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
const actor = this.document
|
||||
|
||||
// Add cellule-specific data
|
||||
context.talents = foundry.utils.duplicate(actor.getTalents() || {})
|
||||
context.ressources = foundry.utils.duplicate(actor.getRessources ? actor.getRessources() : [])
|
||||
context.contacts = foundry.utils.duplicate(actor.getContacts ? actor.getContacts() : [])
|
||||
context.members = this.#getMembers()
|
||||
context.equipements = foundry.utils.duplicate(actor.getEquipments ? actor.getEquipments() : [])
|
||||
context.artefacts = foundry.utils.duplicate(actor.getArtefacts ? actor.getArtefacts() : [])
|
||||
context.armes = foundry.utils.duplicate(actor.getWeapons ? actor.getWeapons() : [])
|
||||
context.monnaies = foundry.utils.duplicate(actor.getMonnaies ? actor.getMonnaies() : [])
|
||||
context.protections = foundry.utils.duplicate(actor.getArmors ? actor.getArmors() : [])
|
||||
context.richesse = actor.computeRichesse ? actor.computeRichesse() : 0
|
||||
context.valeurEquipement = actor.computeValeurEquipement ? actor.computeValeurEquipement() : 0
|
||||
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(actor.system.description || "", { async: true })
|
||||
|
||||
return context
|
||||
}
|
||||
|
||||
/**
|
||||
* Get members of the cellule with full actor data
|
||||
* @returns {Array}
|
||||
* @private
|
||||
*/
|
||||
#getMembers() {
|
||||
let membersFull = []
|
||||
for (let memberId of this.actor.system.members) {
|
||||
let actor = game.actors.get(memberId)
|
||||
if (actor) {
|
||||
membersFull.push({ name: actor.name, id: actor.id, img: actor.img })
|
||||
}
|
||||
}
|
||||
return membersFull
|
||||
}
|
||||
|
||||
/**
|
||||
* Override _onDropItem to filter allowed item types for cellule
|
||||
* @override
|
||||
*/
|
||||
async _onDropItem(event, data) {
|
||||
const item = await fromUuid(data.uuid)
|
||||
|
||||
// Check if item type is allowed for cellule
|
||||
if (!__ALLOWED_ITEM_CELLULE[item.type]) {
|
||||
ui.notifications.warn(`Le type d'item ${item.type} n'est pas autorisé pour une cellule`)
|
||||
return false
|
||||
}
|
||||
|
||||
return super._onDropItem(event, data)
|
||||
}
|
||||
|
||||
/**
|
||||
* Override _onDropActor to handle adding members
|
||||
* @override
|
||||
*/
|
||||
async _onDropActor(event, data) {
|
||||
const droppedActor = await fromUuid(data.uuid)
|
||||
|
||||
if (droppedActor.type !== "personnage") {
|
||||
ui.notifications.warn("Seuls les personnages peuvent être ajoutés à une cellule")
|
||||
return false
|
||||
}
|
||||
|
||||
// Check if already a member
|
||||
const isMember = this.actor.system.members.includes(droppedActor.id)
|
||||
if (isMember) {
|
||||
ui.notifications.warn("Ce personnage est déjà membre de cette cellule")
|
||||
return false
|
||||
}
|
||||
|
||||
// Add member ID
|
||||
const members = [...this.actor.system.members, droppedActor.id]
|
||||
await this.actor.update({ "system.members": members })
|
||||
return true
|
||||
}
|
||||
|
||||
// #region Cellule-specific Actions
|
||||
|
||||
/**
|
||||
* Edit an actor (member)
|
||||
* @param {Event} event
|
||||
* @param {HTMLElement} target
|
||||
* @private
|
||||
*/
|
||||
static async #onEditActor(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const actorId = li?.dataset.actorId
|
||||
if (!actorId) return
|
||||
const actor = game.actors.get(actorId)
|
||||
if (actor) actor.sheet.render(true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an actor (remove member)
|
||||
* @param {Event} event
|
||||
* @param {HTMLElement} target
|
||||
* @private
|
||||
*/
|
||||
static async #onDeleteActor(event, target) {
|
||||
const li = target.closest(".item")
|
||||
const actorId = li?.dataset.actorId
|
||||
if (actorId) {
|
||||
const members = this.actor.system.members.filter(id => id !== actorId)
|
||||
await this.actor.update({ "system.members": members })
|
||||
}
|
||||
}
|
||||
|
||||
// #endregion
|
||||
}
|
||||
Reference in New Issue
Block a user