2021-12-02 07:38:59 +01:00
|
|
|
import { PegasusUtility } from "./pegasus-utility.js";
|
|
|
|
|
2023-09-13 17:37:30 +02:00
|
|
|
/* -------------------------------------------- */
|
|
|
|
export class PegasusCombatTracker extends CombatTracker {
|
|
|
|
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
static get defaultOptions() {
|
|
|
|
let path = "systems/fvtt-pegasus-rpg/templates/pegasus-combat-tracker.html";
|
|
|
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
|
|
|
template: path,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
activateListeners(html) {
|
|
|
|
super.activateListeners(html)
|
|
|
|
|
|
|
|
html.find('.combat-tracker-tic').click(ev => {
|
|
|
|
let ticNum = $(ev.currentTarget).data("tic-num")
|
|
|
|
let combatantId = $(ev.currentTarget).data("combatant-id")
|
|
|
|
game.combat.revealTIC(ticNum, combatantId)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2021-12-02 07:38:59 +01:00
|
|
|
/* -------------------------------------------- */
|
|
|
|
export class PegasusCombat extends Combat {
|
2023-09-13 17:37:30 +02:00
|
|
|
|
2021-12-02 07:38:59 +01:00
|
|
|
/* -------------------------------------------- */
|
2023-09-13 17:37:30 +02:00
|
|
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
2021-12-02 07:38:59 +01:00
|
|
|
ids = typeof ids === "string" ? [ids] : ids;
|
|
|
|
for (let cId = 0; cId < ids.length; cId++) {
|
2021-12-20 11:54:19 +01:00
|
|
|
const c = this.combatants.get(ids[cId]);
|
|
|
|
let id = c._id || c.id;
|
2023-09-13 17:37:30 +02:00
|
|
|
let initBonus = c.actor ? c.actor.getInitiativeScore(this.id, id) : -1;
|
|
|
|
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: initBonus }]);
|
2021-12-02 07:38:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return this;
|
|
|
|
}
|
2022-01-28 10:05:54 +01:00
|
|
|
|
2023-09-13 17:37:30 +02:00
|
|
|
/* -------------------------------------------- */
|
|
|
|
isCharacter(combatantId) {
|
|
|
|
const combatant = game.combat.combatants.get(combatantId)
|
|
|
|
if (combatant) {
|
|
|
|
return combatant.actor.type == "character"
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
async setTic(combatantId, rollData) {
|
|
|
|
if ( !combatantId) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
const combatant = game.combat.combatants.get(combatantId)
|
|
|
|
if (combatant) {
|
|
|
|
await combatant.setFlag("world", "tic1", { revealed: false, text: rollData.tic1 })
|
|
|
|
await combatant.setFlag("world", "tic2", { revealed: false, text: rollData.tic2 })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
getTIC(num, combatantId) {
|
|
|
|
if ( !combatantId) {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
const combatant = game.combat.combatants.get(combatantId)
|
|
|
|
if (combatant) {
|
|
|
|
let ticData = combatant.getFlag("world", "tic" + num)
|
|
|
|
if (ticData) {
|
|
|
|
let ticText = "TIC" + num + ":" + ticData.text
|
|
|
|
/* returns if revealed or if GM and NPC or if player and owner */
|
|
|
|
if (ticData.revealed || (game.user.isGM && combatant.isNPC) || (!game.user.isGM && combatant.isOwner)) {
|
|
|
|
return ticText
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return "TIC" + num + ":???"
|
|
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
async revealTIC(num, combatantId) {
|
|
|
|
if ( !num || !combatantId) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
const combatant = game.combat.combatants.get(combatantId)
|
|
|
|
if (combatant) {
|
|
|
|
let ticData = combatant.getFlag("world", "tic" + num)
|
|
|
|
if (ticData) {
|
|
|
|
ticData.revealed = true
|
|
|
|
await combatant.setFlag("world", "tic" + num, ticData)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-28 10:05:54 +01:00
|
|
|
/* -------------------------------------------- */
|
|
|
|
_onUpdate(changed, options, userId) {
|
|
|
|
}
|
|
|
|
|
2022-03-11 14:00:14 +01:00
|
|
|
/* -------------------------------------------- */
|
|
|
|
static async checkTurnPosition() {
|
|
|
|
while (game.combat.turn > 0) {
|
|
|
|
await game.combat.previousTurn()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-28 10:05:54 +01:00
|
|
|
/* -------------------------------------------- */
|
2023-09-13 17:37:30 +02:00
|
|
|
static async decInitBy10(combatantId, value) {
|
2022-01-28 10:05:54 +01:00
|
|
|
const combatant = game.combat.combatants.get(combatantId)
|
|
|
|
let initValue = combatant.initiative + value
|
2022-02-17 19:17:24 +01:00
|
|
|
await game.combat.setInitiative(combatantId, initValue)
|
2023-09-13 17:37:30 +02:00
|
|
|
setTimeout(this.checkTurnPosition, 400) // The setInitiative is no more blocking for unknown reason
|
2022-01-28 10:05:54 +01:00
|
|
|
}
|
|
|
|
|
2021-12-02 07:38:59 +01:00
|
|
|
}
|