]> git.lizzy.rs Git - dragonblocks.git/blob - engine/skin.js
Reset file permissions to defaults
[dragonblocks.git] / engine / skin.js
1 /*
2  * skin.js
3  * 
4  * Copyright 2020 Elias Fleckenstein <eliasfleckenstein@web.de>
5  * 
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.
10  * 
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.
15  * 
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,
19  * MA 02110-1301, USA.
20  * 
21  * 
22  */
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);
30 }
31 {
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){
49                         i = parseInt(i);
50                         let x = i % columns;
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"));
68                         });
69                         container.addEventListener("update", event => {
70                                 if(dragonblocks.player.skin != dragonblocks.registeredSkins[i].name)
71                                         skinDisplay.style.boxShadow = "none";
72                         });
73                         skinDisplay.addEventListener("mouseover", event => {
74                                 if(dragonblocks.player.skin != dragonblocks.registeredSkins[i].name)
75                                         event.srcElement.style.boxShadow = "0 0 0 1px black";
76                         });
77                         skinDisplay.addEventListener("mouseleave", event => {
78                                 if(dragonblocks.player.skin != dragonblocks.registeredSkins[i].name)
79                                         event.srcElement.style.boxShadow = "none";
80                         });
81                 }
82         });
83         dragonblocks.menu.addButton("Change Skin", _ => {
84                 gui.open();
85         });
86 }