79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
/**
|
|
* The singleton collection of Combat documents which exist within the active World.
|
|
* This Collection is accessible within the Game object as game.combats.
|
|
* @extends {WorldCollection}
|
|
*
|
|
* @see {@link Combat} The Combat document
|
|
* @see {@link CombatTracker} The CombatTracker sidebar directory
|
|
*/
|
|
class CombatEncounters extends WorldCollection {
|
|
|
|
/** @override */
|
|
static documentName = "Combat";
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* Provide the settings object which configures the Combat document
|
|
* @type {object}
|
|
*/
|
|
static get settings() {
|
|
return game.settings.get("core", Combat.CONFIG_SETTING);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritdoc */
|
|
get directory() {
|
|
return ui.combat;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* Get an Array of Combat instances which apply to the current canvas scene
|
|
* @type {Combat[]}
|
|
*/
|
|
get combats() {
|
|
return this.filter(c => (c.scene === null) || (c.scene === game.scenes.current));
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* The currently active Combat instance
|
|
* @type {Combat}
|
|
*/
|
|
get active() {
|
|
return this.combats.find(c => c.active);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* The currently viewed Combat encounter
|
|
* @type {Combat|null}
|
|
*/
|
|
get viewed() {
|
|
return ui.combat?.viewed ?? null;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* When a Token is deleted, remove it as a combatant from any combat encounters which included the Token
|
|
* @param {string} sceneId The Scene id within which a Token is being deleted
|
|
* @param {string} tokenId The Token id being deleted
|
|
* @protected
|
|
*/
|
|
async _onDeleteToken(sceneId, tokenId) {
|
|
for ( let combat of this ) {
|
|
const toDelete = [];
|
|
for ( let c of combat.combatants ) {
|
|
if ( (c.sceneId === sceneId) && (c.tokenId === tokenId) ) toDelete.push(c.id);
|
|
}
|
|
if ( toDelete.length ) await combat.deleteEmbeddedDocuments("Combatant", toDelete);
|
|
}
|
|
}
|
|
}
|