4 * Copyright 2020 Elias Fleckenstein <eliasfleckenstein@web.de>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
23 dragonblocks.skins = {};
24 dragonblocks.registeredSkins = [];
25 dragonblocks.registerSkin = function(obj){
26 if(!obj || !obj.name || !obj.texture)
27 dragonblocks.error("Can not register skin");
28 dragonblocks.skins[obj.name] = obj;
29 dragonblocks.registeredSkins.push(obj);
32 let gui = dragonblocks.gui.createBox({ keylock: true });
33 let headline = gui.create("h1");
34 headline.innerHTML = "Skins";
35 headline.align = "center";
36 let status = gui.create("span");
37 status.style.position = "absolute";
38 status.style.top = "5px";
39 status.style.left = "5px";
40 let columns = parseInt(parseInt(gui.getDisplay().style.width) / (dragonblocks.settings.map.scale * 1.5));
41 let container = gui.create("div");
42 container.style.width = parseInt(columns * dragonblocks.settings.map.scale * 1.5) + "px";
43 container.style.position = "absolute";
44 container.style.top = "80px";
45 dblib.center(container);
46 dragonblocks.registerOnStarted(_ => {
47 status.innerHTML = dragonblocks.player.skin;
48 for(let i in dragonblocks.registeredSkins){
51 let y = (i - x) / columns;
52 let skinDisplay = container.appendChild(document.createElement("div"));
53 skinDisplay.style.position = "absolute";
54 skinDisplay.style.left = parseInt(x * dragonblocks.settings.map.scale * 1.5) + "px";
55 skinDisplay.style.top = parseInt(y * dragonblocks.settings.map.scale * 2 * 1.5) + "px";
56 skinDisplay.style.width = parseInt(dragonblocks.settings.map.scale) + "px";
57 skinDisplay.style.height = parseInt(dragonblocks.settings.map.scale * 2) + "px";
58 skinDisplay.style.background = dragonblocks.getTexture(dragonblocks.registeredSkins[i].texture);
59 skinDisplay.style.backgroundSize = "cover";
60 skinDisplay.title = dragonblocks.registeredSkins[i].name + (dragonblocks.registeredSkins[i].desc ? "\n" + dragonblocks.registeredSkins[i].desc : "");
61 if(dragonblocks.player.skin == dragonblocks.registeredSkins[i].name)
62 skinDisplay.style.boxShadow = "0 0 0 3px #BEBEBE";
63 skinDisplay.addEventListener("click", event => {
64 event.srcElement.style.boxShadow = "0 0 0 3px #BEBEBE";
65 dragonblocks.player.skin = dragonblocks.registeredSkins[i].name;
66 status.innerHTML = dragonblocks.player.skin;
67 container.dispatchEvent(new Event("update"));
69 container.addEventListener("update", event => {
70 if(dragonblocks.player.skin != dragonblocks.registeredSkins[i].name)
71 skinDisplay.style.boxShadow = "none";
73 skinDisplay.addEventListener("mouseover", event => {
74 if(dragonblocks.player.skin != dragonblocks.registeredSkins[i].name)
75 event.srcElement.style.boxShadow = "0 0 0 1px black";
77 skinDisplay.addEventListener("mouseleave", event => {
78 if(dragonblocks.player.skin != dragonblocks.registeredSkins[i].name)
79 event.srcElement.style.boxShadow = "none";
83 dragonblocks.menu.addButton("Change Skin", _ => {