177 lines
5.7 KiB
JavaScript
177 lines
5.7 KiB
JavaScript
import GraphicSet from "../../../js/GraphicSet.js";
|
|
import Setting from "../../../js/Setting.js";
|
|
import TilorswiftTilesetSelectedEvent from "../events/TilorswiftTilesetSelectedEvent.js";
|
|
import {Checkbox} from "./elements/Checkbox.js";
|
|
|
|
export default class Dialog
|
|
{
|
|
constructor()
|
|
{
|
|
this.htmlElement = document.createElement('div');
|
|
this.htmlElement.classList.add('dialog');
|
|
this.boxElement = document.createElement('div');
|
|
this.boxElement.classList.add('dialog-box');
|
|
this.htmlElement.appendChild(this.boxElement);
|
|
this.messageElement = document.createElement('div');
|
|
this.messageElement.classList.add('dialog-message');
|
|
this.boxElement.appendChild(this.messageElement);
|
|
this.inputAreaElement = document.createElement('div');
|
|
this.inputAreaElement.classList.add('dialog-input-area');
|
|
this.boxElement.appendChild(this.inputAreaElement);
|
|
this.buttonAreaElement = document.createElement('div');
|
|
this.buttonAreaElement.classList.add('dialog-button-area');
|
|
this.boxElement.appendChild(this.buttonAreaElement);
|
|
|
|
document.body.appendChild(this.htmlElement);
|
|
}
|
|
|
|
createButton(text)
|
|
{
|
|
let button = document.createElement('span');
|
|
button.classList.add('dialog-button');
|
|
button.innerText = text;
|
|
this.buttonAreaElement.appendChild(button);
|
|
|
|
button.addEventListener(
|
|
'click',
|
|
() => {
|
|
this.htmlElement.remove();
|
|
}
|
|
);
|
|
|
|
return button;
|
|
}
|
|
|
|
createInputNumber(label, value = 0, min = 0, max = 999999, step = 1)
|
|
{
|
|
let htmlElement = document.createElement('div');
|
|
htmlElement.classList.add('dialog-input-area');
|
|
|
|
let htmlElementLabel = document.createElement('div');
|
|
htmlElementLabel.classList.add('dialog-label');
|
|
htmlElementLabel.innerText = label;
|
|
|
|
let htmlElementInput = document.createElement('input');
|
|
htmlElementInput.classList.add('dialog-input');
|
|
htmlElementInput.type = 'number';
|
|
htmlElementInput.value = value;
|
|
htmlElementInput.max = max;
|
|
htmlElementInput.min = min;
|
|
htmlElementInput.step = step;
|
|
|
|
htmlElement.appendChild(htmlElementLabel);
|
|
htmlElement.appendChild(htmlElementInput);
|
|
|
|
this.inputAreaElement.appendChild(htmlElement);
|
|
|
|
return htmlElementInput;
|
|
}
|
|
|
|
createCheckbox(label, value, isChecked = false, onClick = () => {})
|
|
{
|
|
const checkbox = new Checkbox(label, value, isChecked);
|
|
checkbox.onClick = onClick;
|
|
|
|
this.inputAreaElement.appendChild(checkbox.htmlElement);
|
|
|
|
return checkbox;
|
|
}
|
|
|
|
createTilesetSelector()
|
|
{
|
|
let htmlElement = document.createElement('div');
|
|
htmlElement.id = 'tileset-selector';
|
|
|
|
let htmlElementLabel = document.createElement('div');
|
|
htmlElementLabel.classList.add('dialog-label');
|
|
htmlElementLabel.innerText = 'Terrain';
|
|
|
|
let htmlAvatarElement = document.createElement('div');
|
|
htmlAvatarElement.id = 'tileset-avatar';
|
|
htmlAvatarElement.style.backgroundImage = 'url("../' + Setting.TILESET_LOCATION + GraphicSet[0].tileset + '")';
|
|
|
|
let htmlListElement = document.createElement('div');
|
|
htmlListElement.id = 'tileset-list';
|
|
|
|
htmlElement.appendChild(htmlElementLabel);
|
|
htmlElement.appendChild(htmlAvatarElement);
|
|
htmlElement.appendChild(htmlListElement);
|
|
|
|
htmlAvatarElement.addEventListener(
|
|
'click',
|
|
() => {
|
|
htmlListElement.style.display = 'block';
|
|
}
|
|
);
|
|
|
|
GraphicSet.forEach(
|
|
(graphicSet, index) => {
|
|
let htmlTilesetElement = document.createElement('div');
|
|
htmlTilesetElement.classList.add('tileset');
|
|
|
|
let htmlThumbnail = document.createElement('div');
|
|
htmlThumbnail.classList.add('tileset-thumbnail');
|
|
|
|
const image = new Image();
|
|
image.src = '../' + Setting.TILESET_LOCATION + graphicSet.tileset;
|
|
|
|
htmlThumbnail.style.backgroundImage = 'url(' + image.src + ')';
|
|
htmlThumbnail.style.backgroundPositionX = -(image.width / graphicSet.tiles) * graphicSet.tilePreview + 'px';
|
|
htmlTilesetElement.appendChild(htmlThumbnail);
|
|
|
|
let htmlTitleElement = document.createElement('div');
|
|
htmlTitleElement.classList.add('tileset-title');
|
|
htmlTitleElement.innerText = graphicSet.name;
|
|
htmlTilesetElement.appendChild(htmlTitleElement);
|
|
|
|
htmlTilesetElement.addEventListener(
|
|
'click',
|
|
() => {
|
|
htmlListElement.style.display = 'none';
|
|
htmlAvatarElement.style.backgroundImage = 'url(' + image.src + ')';
|
|
htmlAvatarElement.style.backgroundPositionX = -96 * graphicSet.tilePreview + 'px';
|
|
|
|
window.dispatchEvent(new TilorswiftTilesetSelectedEvent(index));
|
|
}
|
|
);
|
|
|
|
htmlListElement.appendChild(htmlTilesetElement);
|
|
}
|
|
);
|
|
|
|
this.inputAreaElement.appendChild(htmlElement);
|
|
|
|
return htmlElement;
|
|
}
|
|
|
|
|
|
|
|
createFileInput(types = [])
|
|
{
|
|
let input = document.createElement('input');
|
|
input.type = 'file';
|
|
|
|
if (types.length > 0) {
|
|
for (const t in types) {
|
|
types[t] = '.' + types[t]
|
|
}
|
|
|
|
input.accept = types.join(', ');
|
|
}
|
|
|
|
this.inputAreaElement.appendChild(input);
|
|
|
|
return input;
|
|
}
|
|
|
|
setMessage(message)
|
|
{
|
|
this.messageElement.innerText = message;
|
|
}
|
|
|
|
close()
|
|
{
|
|
this.htmlElement.remove();
|
|
}
|
|
}
|