From 3ab48511a068190adfe8668a0e70cdf884afde90 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sat, 9 Dec 2023 01:04:33 +0100 Subject: [PATCH] =?UTF-8?q?Sort=20en=20r=C3=A9serve=20en=20fleuve?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les sorts en réserve en fleuve sont indiqués sur toutes les cases fleuve --- icons/tmr/sort-reserve-humide.svg | 102 ++++++++++++++++++++++++++++++ module/rdd-tmr-dialog.js | 37 ++++++----- module/tmr/draconique.js | 13 +++- module/tmr/effets-draconiques.js | 4 +- module/tmr/sort-reserve.js | 17 +++++ 5 files changed, 151 insertions(+), 22 deletions(-) create mode 100644 icons/tmr/sort-reserve-humide.svg diff --git a/icons/tmr/sort-reserve-humide.svg b/icons/tmr/sort-reserve-humide.svg new file mode 100644 index 00000000..3c156328 --- /dev/null +++ b/icons/tmr/sort-reserve-humide.svg @@ -0,0 +1,102 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 3e04dac4..bb0c7202 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -17,6 +17,7 @@ import { STATUSES } from "./settings/status-effects.js"; import { RdDRencontre } from "./item/rencontre.js"; import { RdDTimestamp } from "./time/rdd-timestamp.js"; import { TYPES } from "./item.js"; +import { Misc } from "./misc.js"; const TMR_DISPLAY_SIZE = { code: 'tmr-display-size', @@ -141,7 +142,7 @@ export class RdDTMRDialog extends Dialog { // Le reste... this.updateValuesDisplay(); } - + async onDeplacement() { await this.manageRencontre(TMRUtility.getTMR(this._getCoordActor())); } @@ -249,26 +250,21 @@ export class RdDTMRDialog extends Dialog { /* -------------------------------------------- */ _getTokensCasesTmr() { - return this.casesSpeciales.map(c => this._tokenCaseSpeciale(c)).filter(token => token); - } - _getTokensRencontres() { - return this.rencontresExistantes.map(it => this._tokenRencontre(it)); - } - _getTokensSortsReserve() { - return this.actor.itemTypes[TYPES.sortreserve].map(it => this._tokenSortEnReserve(it)); + return Misc.concat(this.casesSpeciales.map(caseSpeciale => + Draconique.get(caseSpeciale.system.specific)?.token(this.pixiTMR, caseSpeciale, () => caseSpeciale.system.coord) + )) } - /* -------------------------------------------- */ - _tokenRencontre(rencontre) { - return EffetsDraconiques.rencontre.token(this.pixiTMR, rencontre, () => rencontre.system.coord); + _getTokensRencontres() { + return Misc.concat(this.rencontresExistantes.map(rencontre => + EffetsDraconiques.rencontre.tokens(this.pixiTMR, rencontre, () => rencontre.system.coord) + )) } - _tokenCaseSpeciale(casetmr) { - const caseData = casetmr; - const draconique = Draconique.get(caseData.system.specific); - return draconique?.token(this.pixiTMR, caseData, () => caseData.system.coord); - } - _tokenSortEnReserve(sortReserve) { - return EffetsDraconiques.sortReserve.token(this.pixiTMR, sortReserve, () => sortReserve.system.coord); + + _getTokensSortsReserve() { + const sortsReserve = this.actor.itemTypes[TYPES.sortreserve]; + return Misc.concat(sortsReserve.map(sortReserve => + EffetsDraconiques.sortReserve.tokens(this.pixiTMR, sortReserve, () => sortReserve.system.coord))) } _tokenDemiReve() { @@ -344,7 +340,7 @@ export class RdDTMRDialog extends Dialog { this._tellToGM(this.actor.name + " a quitté les terres médianes"); } await this.actor.santeIncDec((ReglesOptionnelles.isUsing("appliquer-fatigue") ? "fatigue" : "endurance"), - this.cumulFatigue) + this.cumulFatigue) } await super.close(); this.pixiTMR.close() @@ -1128,6 +1124,9 @@ export class RdDTMRDialog extends Dialog { /* -------------------------------------------- */ _trackToken(token) { + if (!token) { + return + } if (this.demiReve === token && this.isDemiReveCache()) { return; } diff --git a/module/tmr/draconique.js b/module/tmr/draconique.js index 88f75f17..90b58092 100644 --- a/module/tmr/draconique.js +++ b/module/tmr/draconique.js @@ -18,8 +18,8 @@ export class Draconique { static isTeteDragon(item) { return item.type == TYPES.tete; } static isQueueSouffle(item) { return Draconique.isQueueDragon(item) || Draconique.isSouffleDragon(item); } - static register(draconique) { - registeredEffects[draconique.code()] = draconique; + static register(draconique, code = undefined) { + registeredEffects[code ?? draconique.code()] = draconique; if (draconique.img()) { PixiTMR.register(draconique.code(), draconique.img()) } @@ -90,6 +90,15 @@ export class Draconique { */ token(pixiTMR, linkData, coordTMR, type = undefined) { const tooltip = this.tooltip(linkData); + return this._createToken(pixiTMR, linkData, coordTMR, type, tooltip); + } + + tokens(pixiTMR, linkData, coordTMR, type = undefined) { + const tooltip = this.tooltip(linkData); + return [this._createToken(pixiTMR, linkData, coordTMR, type, tooltip)]; + } + + _createToken(pixiTMR, linkData, coordTMR, type, tooltip) { const token = { sprite: this.createSprite(pixiTMR), coordTMR: coordTMR, diff --git a/module/tmr/effets-draconiques.js b/module/tmr/effets-draconiques.js index 42e45b2f..1b0753d1 100644 --- a/module/tmr/effets-draconiques.js +++ b/module/tmr/effets-draconiques.js @@ -6,7 +6,7 @@ import { ReserveExtensible } from "./reserve-extensible.js"; import { DemiReve } from "./demi-reve.js"; import { TrouNoir } from "./trou-noir.js"; import { Rencontre } from "./rencontre.js"; -import { SortReserve } from "./sort-reserve.js"; +import { SortReserve, SortReserveHumide } from "./sort-reserve.js"; import { CarteTmr } from "./carte-tmr.js"; import { PontImpraticable } from "./pont-impraticable.js"; import { Draconique } from "./draconique.js"; @@ -26,6 +26,7 @@ export class EffetsDraconiques { static demiReve = new DemiReve(); static rencontre = new Rencontre(); static sortReserve = new SortReserve(); + static sortReserveHumide = new SortReserveHumide(); static debordement = new Debordement(); static presentCites = new PresentCites(); static fermetureCites = new FermetureCites(); @@ -49,6 +50,7 @@ export class EffetsDraconiques { Draconique.register(EffetsDraconiques.demiReve); Draconique.register(EffetsDraconiques.rencontre); Draconique.register(EffetsDraconiques.sortReserve); + Draconique.register(EffetsDraconiques.sortReserveHumide); Draconique.register(EffetsDraconiques.debordement); Draconique.register(EffetsDraconiques.fermetureCites); Draconique.register(EffetsDraconiques.queteEaux); diff --git a/module/tmr/sort-reserve.js b/module/tmr/sort-reserve.js index 7f4bec3e..c0f2aeec 100644 --- a/module/tmr/sort-reserve.js +++ b/module/tmr/sort-reserve.js @@ -1,5 +1,7 @@ import { tmrTokenZIndex } from "../tmr-constants.js"; +import { TMRUtility } from "../tmr-utility.js"; import { Draconique } from "./draconique.js"; +import { EffetsDraconiques } from "./effets-draconiques.js"; export class SortReserve extends Draconique { @@ -19,4 +21,19 @@ export class SortReserve extends Draconique { taille: () => pixiTMR.sizes.third, }); } + + tokens(pixiTMR, linkData, coordTMR, type = undefined) { + if (TMRUtility.getTMR(coordTMR()).type == 'fleuve') { + const tooltip = this.tooltip(linkData) + const fleuves = TMRUtility.getListTMR('fleuve') + return fleuves.map(f => EffetsDraconiques.sortReserveHumide._createToken(pixiTMR, linkData, () => f.coord, type?? this.code(), tooltip)) + } + return super.tokens(pixiTMR, linkData, coordTMR, type) + } +} + +export class SortReserveHumide extends SortReserve { + code() { return 'sortreservehumide' } + tooltip(sort) { return `${sort.name} en fleuve, r${sort.system.ptreve}` } + img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/sort-reserve-humide.svg' } }