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,
26 dragonblocks.backendCall = (call, plain, data) => {
30 let fetchFunc = plain ? $.get : $.getJSON;
32 let response = fetchFunc({
38 return plain ? response.responseText : response.responseJSON;
41 dragonblocks.settings = $.getJSON("settings.json").responseJSON;
43 let version = dragonblocks.version = $.getJSON("version.json").responseJSON;
44 version.commit = version.development && (dragonblocks.backendCall("commitID", true) || "?");
45 version.string = "Dragonblocks "
48 + (version.patch ? "." + version.patch : "")
49 + (version.development ? "-dev-" + version.commit : "");
51 dragonblocks.isChromeApp = window.chrome && chrome.app;
53 addEventListener("error", event => {
54 if (confirm(event.message + "\nStack trace: \n" + event.error.stack + "\nPlease report this to the dragonblocks developers."))
55 location.href = version.repo + "/issues/new?"
56 + "title=" + encodeURIComponent(event.message)
57 + "&body=" + encodeURIComponent(event.error.stack)
60 dragonblocks.backlog = "";
62 dragonblocks.loadModList = _ => {
63 dragonblocks.gamemods = dragonblocks.backendCall("getGamemods");
64 dragonblocks.mods = dragonblocks.backendCall("getMods");
67 dragonblocks.loggedin = dragonblocks.backendCall("isLoggedin");
68 dragonblocks.username = dragonblocks.loggedin ? dragonblocks.backendCall("getUsername", true) : "singleplayer";
70 dragonblocks.log = text => {
71 console.log("[Dragonblocks] " + text);
72 dragonblocks.backlog += text + "\n";
75 dragonblocks.error = err => {
76 let error = new Error(err);
77 dragonblocks.backlog += error;
82 dragonblocks.getToken = _ => {
83 return "#" + (Math.random() * 10).toString().replace(".", "");
86 dragonblocks.getModInfo = modname => {
87 return dragonblocks.mods[modname] || dragonblocks.gamemods[modname];
90 dragonblocks.getModpath = modname => {
91 return dragonblocks.getModInfo(modname).path;
96 let loadMod = modname => {
97 if (loadingMods[modname])
98 dragonblocks.error("Circular Mod Dependencies: " + modname);
100 if (dragonblocks.loadedMods[modname])
103 let modinfo = dragonblocks.getModInfo(modname);
106 dragonblocks.error("Unresolved Mod Dependencies: " + modname);
108 loadingMods[modname] = true;
110 for (let dependency of modinfo.dependencies)
113 $.getScript(modinfo.path + "/init.js");
115 dragonblocks.loadedMods[modname] = modinfo;
116 loadingMods[modname] = false;
119 dragonblocks.start = selectedMods => {
120 dragonblocks.log("Starting");
122 for (let func of dragonblocks.onStartCallbacks)
126 dragonblocks.loadedMods = {};
128 for (let mod in selectedMods)
129 if (selectedMods[mods])
132 for (let mod in dragonblocks.gamemods)
135 dragonblocks.map = new dragonblocks.Map();
136 dragonblocks.map.load();
138 dragonblocks.player = new dragonblocks.Player();
140 dragonblocks.worldIsLoaded || dragonblocks.generateMap();
142 for (let func of dragonblocks.onStartedCallbacks)
147 dragonblocks.onStartCallbacks = [];
148 dragonblocks.registerOnStart = func => {
149 dragonblocks.onStartCallbacks.push(func);
152 dragonblocks.onStartedCallbacks = [];
153 dragonblocks.registerOnStarted = func => {
154 dragonblocks.onStartedCallbacks.push(func);
157 dragonblocks.quit = _ => {
158 for (let func of dragonblocks.onQuitCallbacks)
161 if (dragonblocks.loggedin)
170 dragonblocks.onQuitCallbacks = [];
171 dragonblocks.registerOnQuit = func => {
172 dragonblocks.onQuitCallbacks.push(func);
193 "inventory_container",
194 "creative_inventory",
212 let moduleCount = modules.length;
214 let status = document.getElementById("elidragon.status");
215 let loadbar = document.getElementById("elidragon.loadbar");
217 let loadNextModuleRecursive = _ => {
218 let nextModule = modules.shift();
221 let filename = nextModule + ".js";
222 status.innerHTML = filename;
225 url: "engine/" + filename,
229 loadbar.style.width = (moduleCount - modules.length) / moduleCount * 100 + "%";
230 loadNextModuleRecursive();
236 loadNextModuleRecursive();