92 lines
2.9 KiB
JavaScript
92 lines
2.9 KiB
JavaScript
/**
|
|
* The Application responsible for configuring a single Tile document within a parent Scene.
|
|
* @param {Tile} tile The Tile object being configured
|
|
* @param {DocumentSheetOptions} [options] Additional application rendering options
|
|
*/
|
|
class TileConfig extends DocumentSheet {
|
|
|
|
/** @inheritdoc */
|
|
static get defaultOptions() {
|
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
|
id: "tile-config",
|
|
title: game.i18n.localize("TILE.ConfigTitle"),
|
|
template: "templates/scene/tile-config.html",
|
|
width: 420,
|
|
height: "auto",
|
|
submitOnChange: true,
|
|
tabs: [{navSelector: ".tabs", contentSelector: "form", initial: "basic"}]
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritdoc */
|
|
async close(options={}) {
|
|
|
|
// If the config was closed without saving, reset the initial display of the Tile
|
|
if ( !options.force ) {
|
|
this.document.reset();
|
|
if ( this.document.object?.destroyed === false ) {
|
|
this.document.object.refresh();
|
|
}
|
|
}
|
|
|
|
// Remove the preview tile and close
|
|
const layer = this.object.layer;
|
|
layer.clearPreviewContainer();
|
|
return super.close(options);
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritdoc */
|
|
getData(options={}) {
|
|
const data = super.getData(options);
|
|
data.submitText = game.i18n.localize(this.object.id ? "TILE.SubmitUpdate" : "TILE.SubmitCreate");
|
|
data.occlusionModes = Object.entries(CONST.OCCLUSION_MODES).reduce((obj, e) => {
|
|
obj[e[1]] = game.i18n.localize(`TILE.OcclusionMode${e[0].titleCase()}`);
|
|
return obj;
|
|
}, {});
|
|
data.gridUnits = this.document.parent.grid.units || game.i18n.localize("GridUnits");
|
|
return data;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritdoc */
|
|
async _onChangeInput(event) {
|
|
|
|
// Handle form element updates
|
|
const el = event.target;
|
|
if ( (el.type === "color") && el.dataset.edit ) this._onChangeColorPicker(event);
|
|
else if ( el.type === "range" ) this._onChangeRange(event);
|
|
|
|
// Update preview object
|
|
const fdo = new FormDataExtended(this.form).object;
|
|
|
|
// To allow a preview without glitches
|
|
fdo.width = Math.abs(fdo.width);
|
|
fdo.height = Math.abs(fdo.height);
|
|
|
|
// Handle tint exception
|
|
let tint = fdo["texture.tint"];
|
|
if ( !foundry.data.validators.isColorString(tint) ) fdo["texture.tint"] = "#ffffff";
|
|
fdo["texture.tint"] = Color.from(fdo["texture.tint"]);
|
|
|
|
// Update preview object
|
|
foundry.utils.mergeObject(this.document, foundry.utils.expandObject(fdo));
|
|
this.document.object.refresh();
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @inheritdoc */
|
|
async _updateObject(event, formData) {
|
|
if ( this.document.id ) return this.document.update(formData);
|
|
else return this.document.constructor.create(formData, {
|
|
parent: this.document.parent,
|
|
pack: this.document.pack
|
|
});
|
|
}
|
|
}
|