Initial
This commit is contained in:
82
resources/app/client/apps/forms/combat-config.js
Normal file
82
resources/app/client/apps/forms/combat-config.js
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user