48 lines
1.6 KiB
JavaScript
48 lines
1.6 KiB
JavaScript
import { DarkStarsUtility } from "./dark-stars-utility.js";
|
|
|
|
/* -------------------------------------------- */
|
|
export class DarkStarsCombat extends Combat {
|
|
|
|
/* -------------------------------------------- */
|
|
processOtherTurns(c, initScore) {
|
|
let toCreate = []
|
|
let token = canvas.tokens.get(c.tokenId)
|
|
let hasLastWord = token.actor.hasLastWord()
|
|
while ( (initScore > 5) || (hasLastWord && initScore >= 5)) {
|
|
initScore -= 5;
|
|
toCreate.push({tokenId: c.tokenId, sceneId: c.sceneId, actorId: c.actorId, hidden: c.hidden, initiative: initScore, flags: { world: { isDuplicated: true} } } );
|
|
}
|
|
this.createEmbeddedDocuments("Combatant", toCreate);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
|
ids = typeof ids === "string" ? [ids] : ids;
|
|
for (let cId of ids) {
|
|
const c = this.combatants.get(cId);
|
|
let id = c._id || c.id;
|
|
let initScore = c.actor ? await c.actor.getInitiativeScore(this.id, id) : -1;
|
|
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: initScore }]);
|
|
setTimeout(() => this.processOtherTurns(c, initScore), 400)
|
|
}
|
|
return this;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
nextRound() {
|
|
super.nextRound()
|
|
let toDelete = []
|
|
for (let c of this.combatants) {
|
|
if (c.flags?.world?.isDuplicated) {
|
|
toDelete.push(c._id)
|
|
}
|
|
}
|
|
this.deleteEmbeddedDocuments("Combatant", toDelete);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
_onUpdate(changed, options, userId) {
|
|
}
|
|
|
|
}
|