From a432ed6d326c60c23fa99bab2afd6cc275c634dc Mon Sep 17 00:00:00 2001 From: sladecraven Date: Fri, 8 Jan 2021 16:57:10 +0100 Subject: [PATCH] #124 : Les creatures peuvent avoir de l'equipement --- module/actor-creature-sheet.js | 27 ++++++++------ module/actor-humanoide-sheet.js | 2 +- module/actor-sheet.js | 18 +-------- module/actor.js | 13 +++++-- module/rdd-utility.js | 16 ++++++++ packs/equipement.db | 1 - templates/actor-creature-sheet.html | 57 +++++++++++++++++------------ 7 files changed, 77 insertions(+), 57 deletions(-) diff --git a/module/actor-creature-sheet.js b/module/actor-creature-sheet.js index 9a9affaa..3c9d8843 100644 --- a/module/actor-creature-sheet.js +++ b/module/actor-creature-sheet.js @@ -6,9 +6,10 @@ import { HtmlUtility } from "./html-utility.js"; import { RdDUtility } from "./rdd-utility.js"; +import { RdDActorSheet } from "./actor-sheet.js"; /* -------------------------------------------- */ -export class RdDActorCreatureSheet extends ActorSheet { +export class RdDActorCreatureSheet extends RdDActorSheet { /** @override */ static get defaultOptions() { @@ -26,7 +27,8 @@ export class RdDActorCreatureSheet extends ActorSheet { /* -------------------------------------------- */ getData() { let data = super.getData(); - + console.log("Creature : ", data); + data.itemsByType = {}; for (const item of data.items) { let list = data.itemsByType[item.type]; @@ -48,19 +50,23 @@ export class RdDActorCreatureSheet extends ActorSheet { data.data.isGM = game.user.isGM; data.data.competencecreature = data.itemsByType["competencecreature"]; - + + this.actor.computeEncombrementTotalEtMalusArmure(); RdDUtility.filterItemsPerTypeForSheet(data ); RdDUtility.buildArbreDeConteneur( this, data ); + data.data.encTotal = this.actor.encTotal; + data.data.isGM = game.user.isGM; + + console.log("Creature : ", this.objetVersConteneur , data); return data; } - + /* -------------------------------------------- */ - async _onDrop(event) { - RdDUtility.processItemDropEvent(this, event); - super._onDrop(event); + prepareCreatureData( ) { + } - + /* -------------------------------------------- */ /** @override */ activateListeners(html) { @@ -160,9 +166,8 @@ export class RdDActorCreatureSheet extends ActorSheet { this.actor.remiseANeuf(); } }); -} + } - /* -------------------------------------------- */ /** @override */ @@ -174,9 +179,7 @@ export class RdDActorCreatureSheet extends ActorSheet { return position; } - /* -------------------------------------------- */ - /** @override */ _updateObject(event, formData) { // Update the Actor diff --git a/module/actor-humanoide-sheet.js b/module/actor-humanoide-sheet.js index 3a9c9679..657834e6 100644 --- a/module/actor-humanoide-sheet.js +++ b/module/actor-humanoide-sheet.js @@ -56,7 +56,7 @@ export class RdDActorHumanoideSheet extends ActorSheet { /* -------------------------------------------- */ async _onDrop(event) { - RdDUtility.processItemDropEvent(this, event); + await RdDUtility.processItemDropEvent(this.actor, event); super._onDrop(event); } diff --git a/module/actor-sheet.js b/module/actor-sheet.js index f4d18ef6..84a2aaf6 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -30,6 +30,7 @@ export class RdDActorSheet extends ActorSheet { /* -------------------------------------------- */ getData() { let data = super.getData(); + if ( data.actor.type == 'creature' || data.actor.type == 'humanoide') return data; // Shortcut data.data.editCaracComp = this.options.editCaracComp; data.data.montrerCompetencesNiveauBase = this.options.montrerCompetencesNiveauBase; @@ -137,25 +138,10 @@ export class RdDActorSheet extends ActorSheet { return data; } - /* -------------------------------------------- */ - async processItemDropEvent( event) { - let dragData = JSON.parse(event.dataTransfer.getData("text/plain")); - let dropID = $(event.target).parents(".item").attr("data-item-id"); // Only relevant if container drop - if ( dropID ) { // Dropped over an item !!! - let objetId = dragData.id || dragData.data._id; - if ( this.objetVersConteneur[objetId] != dropID && objetId != dropID) { - if ( this.actor.validateConteneur(objetId, dropID) && this.actor.testConteneurCapacite(objetId, dropID) ) { - await this.actor.enleverDeConteneur(objetId, this.objetVersConteneur[objetId]); - await this.actor.ajouterAConteneur(objetId, dropID); - } - } - } - this.actor.computeEncombrementTotalEtMalusArmure(); - } /* -------------------------------------------- */ async _onDrop(event) { - await this.processItemDropEvent(event); + await RdDUtility.processItemDropEvent(this, event); super._onDrop(event); } diff --git a/module/actor.js b/module/actor.js index 51ae8055..e06a9acc 100644 --- a/module/actor.js +++ b/module/actor.js @@ -98,7 +98,13 @@ export class RdDActor extends Actor { // Make separate methods for each Actor type (character, npc, etc.) to keep // things organized. if (actorData.type === 'personnage') this._prepareCharacterData(actorData); - if (actorData.type === 'creature') this.computeEtatGeneral(actorData); + if (actorData.type === 'creature') this.prepareCreatureData(actorData); + } + + /* -------------------------------------------- */ + prepareCreatureData(actorData) { + this.computeEncombrementTotalEtMalusArmure(); + this.computeEtatGeneral(); } /* -------------------------------------------- */ @@ -755,7 +761,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async computeEncombrementTotalEtMalusArmure( ) { let encTotal = 0; - let malusArmureData = duplicate(this.data.data.attributs.malusarmure); + let malusArmureData = (this.data.data.attributs.malusarmure) ? duplicate(this.data.data.attributs.malusarmure) : {}; let newMalusArmure = 0; for (const item of this.data.items) { if ( item.type == 'armure' && item.data.equipe ) { // Armure équipée, intégration du malus armure total @@ -775,9 +781,10 @@ export class RdDActor extends Actor { } // Mise à jour valeur totale et états this.encTotal = encTotal; + console.log("Enco total : ", this.encTotal); this.detectSurEncombrement(); // Mise à jour éventuelle du malus armure - if (newMalusArmure != malusArmureData.value) { + if (this.data.data.attributs.malusarmure && newMalusArmure != malusArmureData.value) { malusArmureData.value = newMalusArmure; await this.update( {"data.attributs.malusarmure": malusArmureData } ); } diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 9dd6a1f5..f5d4177e 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -276,6 +276,22 @@ export class RdDUtility { data.data.objets = data.data.conteneurs.concat(data.data.materiel).concat(data.data.armes).concat(data.data.armures).concat(data.data.munitions).concat(data.data.livres).concat(data.data.potions).concat(data.data.herbes).concat(data.data.ingredients); } + /* -------------------------------------------- */ + static async processItemDropEvent( actorSheet, event) { + let dragData = JSON.parse(event.dataTransfer.getData("text/plain")); + let dropID = $(event.target).parents(".item").attr("data-item-id"); // Only relevant if container drop + if ( dropID ) { // Dropped over an item !!! + let objetId = dragData.id || dragData.data._id; + if ( actorSheet.objetVersConteneur[objetId] != dropID && objetId != dropID) { + if ( actorSheet.actor.validateConteneur(objetId, dropID) && actorSheet.actor.testConteneurCapacite(objetId, dropID) ) { + await actorSheet.actor.enleverDeConteneur(objetId, actorSheet.objetVersConteneur[objetId]); + await actorSheet.actor.ajouterAConteneur(objetId, dropID); + } + } + } + actorSheet.actor.computeEncombrementTotalEtMalusArmure(); + } + /* -------------------------------------------- */ static buildArbreDeConteneur( actorSheet, data ) { actorSheet.objetVersConteneur = {}; // Table de hash locale pour recupération rapide du conteneur parent (si existant) diff --git a/packs/equipement.db b/packs/equipement.db index e14c6aaa..bd649d1f 100644 --- a/packs/equipement.db +++ b/packs/equipement.db @@ -200,4 +200,3 @@ {"_id":"zQWlnUsd8bPySujd","name":"Aiguille à coudre","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"objet","data":{"description":"","quantite":1,"encombrement":0.01,"equipe":false,"resistance":0,"qualite":0,"cout":0.1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/objets/aiguille.webp","effects":[]} {"_id":"zYI8mDiysWtmsSyy","name":"Carquois","permission":{"default":0,"jOzRscDxoXZWpGS6":3},"type":"conteneur","data":{"description":"","capacite":2,"encombrement":0.1,"equipe":false,"qualite":0,"cout":0.5},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/objets/carquois.webp","effects":[]} {"_id":"zlDa1vwmls6Uf4pt","name":"Bourse de cuir","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"conteneur","data":{"description":"","capacite":0.5,"encombrement":0.01,"equipe":false,"qualite":0,"contenu":[],"cout":0.1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/objets/bourse.webp","effects":[]} -{"_id":"XlKp5BvZX8A03fUg","name":"Sac à dos de cuir","permission":{"default":0,"rYShh2P1DNavdoBD":3},"type":"conteneur","data":{"description":"","capacite":25,"encombrement":0.4,"equipe":false,"qualite":0,"contenu":[],"cout":1},"flags":{},"img":"systems/foundryvtt-reve-de-dragon/icons/objets/sac_a_dos.webp","effects":[]} diff --git a/templates/actor-creature-sheet.html b/templates/actor-creature-sheet.html index b81642a8..b9788a21 100644 --- a/templates/actor-creature-sheet.html +++ b/templates/actor-creature-sheet.html @@ -185,32 +185,41 @@ {{!-- Equipment Tab --}}
- Encombrement total/max : {{numberFormat data.encTotal decimals=1}} / {{data.attributs.encombrement.value}} -
- Porté sur soi -
    + Encombrement total/max : {{numberFormat data.encTotal decimals=1}} / {{data.attributs.encombrement.value}} {{data.surEncombrementMessage}} - + Créer un objet + {{#if data.isGM}} + - Vider tout les conteneurs + {{/if}} +
      +
    • + Nom + Q. + Enc. + Equiper + Editer/Suppr. +
    • {{#each data.objets as |item id|}} - {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} -
    • - -

      {{item.name}}

      - {{#if item.data.quantite}} -

      {{item.data.quantite}}

      - {{/if}} - -
    • - {{/if}} - {{/unless}} + {{#unless item.estContenu}} + {{#if (ne item.type 'conteneur')}} +
    • + + {{item.name}} + {{item.data.quantite}} + {{numberFormat item.data.encTotal decimals=2}} + +
    • + {{/if}} + {{/unless}} {{/each}} - {{#each data.conteneurs as |conteneur id|}} - {{buildConteneur this}} - {{/each}} -
+ {{#each data.conteneurs as |conteneur id|}} + {{buildConteneur this}} + {{/each}} + + {{!-- Biography Tab --}}