ChatMessage.create est async, il faut donc de préférence l'appeler avec un await. Des effets secondaires avaient lieu (ordre de messages, updates ultérieurs parfois pas pris en compte)
56 lines
2.1 KiB
JavaScript
56 lines
2.1 KiB
JavaScript
import { ChatUtility } from "../chat-utility.js";
|
|
import { Grammar } from "../grammar.js";
|
|
import { Misc } from "../misc.js";
|
|
import { RdDRollTables } from "../rdd-rolltables.js";
|
|
import { TMRUtility } from "../tmr-utility.js";
|
|
import { tmrTokenZIndex } from "../tmr-constants.js";
|
|
import { Draconique } from "./draconique.js";
|
|
import { ITEM_TYPES } from "../constants.js";
|
|
import { TMRAnimations } from "./animation.js";
|
|
|
|
export class UrgenceDraconique extends Draconique {
|
|
|
|
type() { return 'queue' }
|
|
match(item) { return Draconique.isQueueDragon(item) && Grammar.toLowerCaseNoAccent(item.name).includes('urgence draconique'); }
|
|
manualMessage() { return false }
|
|
async onActorCreateOwned(actor, queue) {
|
|
const coordSortsReserve = actor.itemTypes[ITEM_TYPES.sortreserve].map(it => it.system.coord) ?? [];
|
|
if (coordSortsReserve.length == 0) {
|
|
// La queue se transforme en idée fixe
|
|
const ideeFixe = await RdDRollTables.getIdeeFixe();
|
|
await ChatMessage.create({
|
|
whisper: ChatUtility.getOwners(actor),
|
|
content: `En l'absence de sorts en réserve, l'urgence draconique de ${actor.name} se transforme en ${ideeFixe.name}`
|
|
});
|
|
await actor.createEmbeddedDocuments('Item', [ideeFixe]);
|
|
await actor.deleteEmbeddedDocuments('Item', [queue.id]);
|
|
}
|
|
else {
|
|
const demiReve = actor.getDemiReve();
|
|
coordSortsReserve.sort(Misc.ascending(t => TMRUtility.distanceCoordTMR(t, demiReve)));
|
|
const tmr = TMRUtility.getTMR(coordSortsReserve[0]);
|
|
await this.createCaseTmr(actor, 'Urgence draconique', tmr, queue.id);
|
|
}
|
|
}
|
|
|
|
async onActorDeleteCaseTmr(actor, casetmr) {
|
|
await actor.deleteEmbeddedDocuments('Item', [casetmr.system.sourceid]);
|
|
}
|
|
|
|
code() { return 'urgence' }
|
|
tooltip(linkData) { return `Urgence draconique` }
|
|
img() { return 'systems/foundryvtt-reve-de-dragon/icons/tmr/urgence.svg' }
|
|
|
|
createSprite(pixiTMR) {
|
|
return TMRAnimations.withAnimation(
|
|
pixiTMR.sprite(this.code(), {
|
|
zIndex: tmrTokenZIndex.conquete,
|
|
decallage: pixiTMR.sizes.decallage(0, 0),
|
|
taille: () => pixiTMR.sizes.half,
|
|
}),
|
|
pixiTMR,
|
|
TMRAnimations.changeZoom()
|
|
)
|
|
}
|
|
}
|