simplifications sur EffetsDraconiques

ajout de methode tmrLabel pour les tooltips

ajout de l'item en paramètre aux ajouts/suppressions
ajout d'un 'sourceId' pour les casetmr liées à un souffle/queue/tête
This commit is contained in:
Vincent Vandemeulebrouck 2021-02-12 01:16:02 +01:00
parent 1cb4a7dbf5
commit 42bd63c999
11 changed files with 28 additions and 18 deletions

View File

@ -13,7 +13,7 @@ export class Debordement extends Draconique {
async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); } async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); }
code() { return 'debordement' } code() { return 'debordement' }
tooltip(linkData) { return `Débordement en ${TMRUtility.getTMR(linkData.data.coord).label}` } tooltip(linkData) { return `Débordement en ${this.tmrLabel(linkData)}` }
img() { return 'systems/foundryvtt-reve-de-dragon/icons/svg/wave.svg' } img() { return 'systems/foundryvtt-reve-de-dragon/icons/svg/wave.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {

View File

@ -1,3 +1,4 @@
import { TMRUtility } from "../tmr-utility.js";
import { PixiTMR } from "./pixi-tmr.js"; import { PixiTMR } from "./pixi-tmr.js";
const registeredEffects = [ const registeredEffects = [
@ -14,6 +15,8 @@ export class Draconique
static isTeteDragon(element) { return element.type == 'tete'; } static isTeteDragon(element) { return element.type == 'tete'; }
static isQueueSouffle(it) { return Draconique.isQueueDragon(it) || Draconique.isSouffleDragon(it); } static isQueueSouffle(it) { return Draconique.isQueueDragon(it) || Draconique.isSouffleDragon(it); }
tmrLabel(linkData) { return TMRUtility.getTMRLabel(linkData.data.coord); }
static register(draconique) { static register(draconique) {
registeredEffects[draconique.code()] = draconique; registeredEffects[draconique.code()] = draconique;
if (draconique.img()) { if (draconique.img()) {
@ -48,10 +51,10 @@ export class Draconique
* Méthode responsable de gérer une draconique (par exemple, ajouter des casetmr pour la fermeture des cités). * Méthode responsable de gérer une draconique (par exemple, ajouter des casetmr pour la fermeture des cités).
* @param actor auquel la draconique est ajoutée * @param actor auquel la draconique est ajoutée
*/ */
async onActorCreateOwned(actor) { async onActorCreateOwned(actor, item) {
return false; return false;
} }
async onActorDeleteOwned(actor) { async onActorDeleteOwned(actor, item) {
return false; return false;
} }
/** /**
@ -108,10 +111,15 @@ export class Draconique
return Draconique.isCaseTMR(it) && it.data.specific == this.code() && (coord ? it.data.coord == coord : true); return Draconique.isCaseTMR(it) && it.data.specific == this.code() && (coord ? it.data.coord == coord : true);
} }
async createCaseTmr(actor, label, tmr) { find(list, coord = undefined) {
return list.find(c => this.isCase(c, coord));
}
async createCaseTmr(actor, label, tmr, sourceId=undefined) {
await actor.createOwnedItem({ await actor.createOwnedItem({
name: label, type: 'casetmr', img: this.img(), _id: randomID(16), name: label, type: 'casetmr', img: this.img(), _id: randomID(16),
data: { coord: tmr.coord, specific: this.code() } data: { coord: tmr.coord, specific: this.code(), sourceid:sourceId }
}); });
} }

View File

@ -45,7 +45,8 @@ export class EffetsDraconiques {
/* -------------------------------------------- */ /* -------------------------------------------- */
static isCaseInondee(caseTMR, coord) { static isCaseInondee(caseTMR, coord) {
return EffetsDraconiques.debordement.isCase(caseTMR, coord) || EffetsDraconiques.pontImpraticable.isCase(caseTMR, coord); return EffetsDraconiques.debordement.isCase(caseTMR, coord) ||
EffetsDraconiques.pontImpraticable.isCase(caseTMR, coord);
} }
static isCaseTrouNoir(caseTMR, coord) { static isCaseTrouNoir(caseTMR, coord) {

View File

@ -13,7 +13,7 @@ export class FermetureCites extends Draconique {
async onActorCreateOwned(actor, item) { await this._fermerLesCites(actor); } async onActorCreateOwned(actor, item) { await this._fermerLesCites(actor); }
code() { return 'fermeture' } code() { return 'fermeture' }
tooltip(linkData) { return `La ${TMRUtility.getTMR(linkData.data.coord).label} est fermée` } tooltip(linkData) { return `La ${this.tmrLabel(linkData)} est fermée` }
img() { return 'icons/svg/door-closed.svg' } img() { return 'icons/svg/door-closed.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {

View File

@ -14,7 +14,7 @@ export class PontImpraticable extends Draconique {
async onActorDeleteOwned(actor, item) { await this._supprimerCaseTmr(actor); } async onActorDeleteOwned(actor, item) { await this._supprimerCaseTmr(actor); }
code() { return 'pont-impraticable' } code() { return 'pont-impraticable' }
tooltip(linkData) { return `${TMRUtility.getTMR(linkData.data.coord).label} impraticable` } tooltip(linkData) { return `${this.tmrLabel(linkData)} impraticable` }
img() { return 'systems/foundryvtt-reve-de-dragon/icons/svg/wave.svg' } img() { return 'systems/foundryvtt-reve-de-dragon/icons/svg/wave.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {

View File

@ -14,25 +14,25 @@ export class PresentCites extends Draconique {
async onActorCreateOwned(actor, item) { await this._ajouterPresents(actor); } async onActorCreateOwned(actor, item) { await this._ajouterPresents(actor); }
code() { return 'present-cites' } code() { return 'present-cites' }
tooltip(linkData) { return `La ${TMRUtility.getTMR(linkData.data.coord).label} a un présent` } tooltip(linkData) { return `La ${this.tmrLabel(linkData)} a un présent` }
img() { return 'systems/foundryvtt-reve-de-dragon/icons/svg/gift.svg' } img() { return 'systems/foundryvtt-reve-de-dragon/icons/svg/gift.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {
return pixiTMR.sprite(this.code(), return pixiTMR.sprite(this.code(),
{ {
color: tmrColors.tetes, alpha: 0.7, taille: tmrConstants.third, decallage:tmrConstants.topRight color: tmrColors.tetes, alpha: 0.7, taille: tmrConstants.third, decallage: tmrConstants.topRight
}); });
} }
async _ajouterPresents(actor) { async _ajouterPresents(actor) {
let existants = actor.data.items.filter(it => this.isCase(it)).map(it => it.data.coord); let existants = actor.data.items.filter(it => this.isCase(it)).map(it => it.data.coord);
if (existants.length >0 ) { if (existants.length > 0) {
ChatMessage.create({ ChatMessage.create({
whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user), whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
content: "Vous avez encore des présents dans des cités, vous devrez tirer une autre tête pour remplacer celle ci!" content: "Vous avez encore des présents dans des cités, vous devrez tirer une autre tête pour remplacer celle ci!"
}) })
} }
else{ else {
let cites = TMRUtility.filterTMR(it => it.type == 'cite'); let cites = TMRUtility.filterTMR(it => it.type == 'cite');
for (let tmr of cites) { for (let tmr of cites) {
await this.createCaseTmr(actor, 'Présent: ' + tmr.label, tmr); await this.createCaseTmr(actor, 'Présent: ' + tmr.label, tmr);

View File

@ -12,7 +12,7 @@ export class QueteEaux extends Draconique {
async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); } async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); }
code() { return 'maitrisee' } code() { return 'maitrisee' }
tooltip(linkData) { return `Quête des eaux, le ${TMRUtility.getTMR(linkData.data.coord).label} est maîtrisé` } tooltip(linkData) { return `Quête des eaux, le ${this.tmrLabel(linkData)} est maîtrisé` }
img() { return 'icons/svg/bridge.svg' } img() { return 'icons/svg/bridge.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {

View File

@ -12,7 +12,7 @@ export class ReserveExtensible extends Draconique {
async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); } async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); }
code() { return 'reserve_extensible' } code() { return 'reserve_extensible' }
tooltip(linkData) { return `Réserve extensible en ${TMRUtility.getTMR(linkData.data.coord).label} !` } tooltip(linkData) { return `Réserve extensible en ${this.tmrLabel(linkData)} !` }
img() { return 'icons/svg/chest.svg' } img() { return 'icons/svg/chest.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {

View File

@ -12,7 +12,7 @@ export class TerreAttache extends Draconique {
async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); } async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); }
code() { return 'attache' } code() { return 'attache' }
tooltip(linkData) { return `Terre d'attache en ${TMRUtility.getTMR(linkData.data.coord).label} !` } tooltip(linkData) { return `Terre d'attache en ${this.tmrLabel(linkData)} !` }
img() { return 'icons/svg/anchor.svg' } img() { return 'icons/svg/anchor.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {

View File

@ -12,7 +12,7 @@ export class TrouNoir extends Draconique {
async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); } async onActorCreateOwned(actor, item) { await this._creerCaseTmr(actor); }
code() { return 'trounoir' } code() { return 'trounoir' }
tooltip(linkData) { return `Trou noir en ${TMRUtility.getTMR(linkData.data.coord).label} !` } tooltip(linkData) { return `Trou noir en ${this.tmrLabel(linkData)} !` }
img() { return 'icons/svg/explosion.svg' } img() { return 'icons/svg/explosion.svg' }
_createSprite(pixiTMR) { _createSprite(pixiTMR) {

View File

@ -764,7 +764,8 @@
"type": "", "type": "",
"label": "", "label": "",
"specific": "", "specific": "",
"description": "" "description": "",
"sourceid":""
}, },
"recettealchimique": { "recettealchimique": {
"but": "", "but": "",