83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
/**
|
|
* The Application responsible for configuring the CombatTracker and its contents.
|
|
* @extends {FormApplication}
|
|
*/
|
|
class CombatTrackerConfig extends FormApplication {
|
|
|
|
/** @inheritdoc */
|
|
static get defaultOptions() {
|
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
|
id: "combat-config",
|
|
title: game.i18n.localize("COMBAT.Settings"),
|
|
classes: ["sheet", "combat-sheet"],
|
|
template: "templates/sheets/combat-config.html",
|
|
width: 420
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
async getData(options={}) {
|
|
const attributes = TokenDocument.implementation.getTrackedAttributes();
|
|
attributes.bar.forEach(a => a.push("value"));
|
|
const combatThemeSetting = game.settings.settings.get("core.combatTheme");
|
|
return {
|
|
canConfigure: game.user.can("SETTINGS_MODIFY"),
|
|
settings: game.settings.get("core", Combat.CONFIG_SETTING),
|
|
attributeChoices: TokenDocument.implementation.getTrackedAttributeChoices(attributes),
|
|
combatTheme: combatThemeSetting,
|
|
selectedTheme: game.settings.get("core", "combatTheme"),
|
|
user: game.user
|
|
};
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
async _updateObject(event, formData) {
|
|
game.settings.set("core", "combatTheme", formData["core.combatTheme"]);
|
|
return game.settings.set("core", Combat.CONFIG_SETTING, {
|
|
resource: formData.resource,
|
|
skipDefeated: formData.skipDefeated
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
html.find(".audio-preview").click(this.#onAudioPreview.bind(this));
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
#audioPreviewState = 0;
|
|
|
|
/**
|
|
* Handle previewing a sound file for a Combat Tracker setting
|
|
* @param {Event} event The initial button click event
|
|
* @private
|
|
*/
|
|
#onAudioPreview(event) {
|
|
const themeName = this.form["core.combatTheme"].value;
|
|
const theme = CONFIG.Combat.sounds[themeName];
|
|
if ( !theme || theme === "none" ) return;
|
|
const announcements = CONST.COMBAT_ANNOUNCEMENTS;
|
|
const announcement = announcements[this.#audioPreviewState++ % announcements.length];
|
|
const sounds = theme[announcement];
|
|
if ( !sounds ) return;
|
|
const src = sounds[Math.floor(Math.random() * sounds.length)];
|
|
game.audio.play(src, {context: game.audio.interface});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
async _onChangeInput(event) {
|
|
if ( event.currentTarget.name === "core.combatTheme" ) this.#audioPreviewState = 0;
|
|
return super._onChangeInput(event);
|
|
}
|
|
}
|