improve texture loading

This commit is contained in:
LabyStudio
2022-02-12 22:17:15 +01:00
parent d77a7dae0c
commit bb2d830c84
3 changed files with 105 additions and 75 deletions
+2 -6
View File
@@ -110,11 +110,7 @@ window.Gui = class {
stack.restore(); stack.restore();
} }
static loadTexture(path, callback) { static loadTexture(path) {
let img = new Image(); return document.textures[path];
img.src = "src/resources/" + path;
img.onload = callback;
return img;
} }
} }
@@ -8,15 +8,14 @@ window.FontRenderer = class {
constructor() { constructor() {
this.charWidths = []; this.charWidths = [];
let scope = this; this.texture = Gui.loadTexture("font.png")
this.texture = Gui.loadTexture("font.png", function () {
let bitMap = scope.createBitMap(scope.texture); let bitMap = this.createBitMap(this.texture);
// Calculate character width // Calculate character width
for (let i = 0; i < 128; i++) { for (let i = 0; i < 128; i++) {
scope.charWidths[i] = scope.calculateCharacterWidthAt(bitMap, i % FontRenderer.BITMAP_SIZE, Math.floor(i / FontRenderer.BITMAP_SIZE)) + 2; this.charWidths[i] = this.calculateCharacterWidthAt(bitMap, i % FontRenderer.BITMAP_SIZE, Math.floor(i / FontRenderer.BITMAP_SIZE)) + 2;
} }
});
} }
calculateCharacterWidthAt(bitMap, indexX, indexY) { calculateCharacterWidthAt(bitMap, indexX, indexY) {
+38 -3
View File
@@ -37,12 +37,46 @@ function loadScripts(scripts) {
}, Promise.resolve()); }, Promise.resolve());
} }
// Texture loader
function loadTexture(textures) {
let total = textures.length;
let index = 0;
document.textures = [];
return textures.reduce((currentPromise, texturePath) => {
return currentPromise.then(() => {
return new Promise((resolve, reject) => {
// Update status message
updatePreStatus("Loading texture... " + index + "/" + total);
// Load texture
let image = new Image();
image.src = "src/resources/" + texturePath;
image.onload = () => resolve();
document.textures[texturePath] = image;
index++;
});
});
}, Promise.resolve());
}
function updatePreStatus(message) { function updatePreStatus(message) {
document.getElementById("pre-status").innerText = message; document.getElementById("pre-status").innerText = message;
} }
// Load scripts // Load textures
loadScripts([ loadTexture([
"font.png",
"gui.png",
"background.png",
"terrain.png",
"icons.png"
]).then(() => {
// Load scripts
loadScripts([
// Dependencies // Dependencies
"libraries/three.min.js", "libraries/three.min.js",
"libraries/stats.min.js", "libraries/stats.min.js",
@@ -98,10 +132,11 @@ loadScripts([
"src/js/net/minecraft/client/render/Tessellator.js", "src/js/net/minecraft/client/render/Tessellator.js",
"src/js/net/minecraft/client/render/WorldRenderer.js", "src/js/net/minecraft/client/render/WorldRenderer.js",
"src/js/net/minecraft/client/render/BlockRenderer.js" "src/js/net/minecraft/client/render/BlockRenderer.js"
]).then(() => { ]).then(() => {
// Remove pre status // Remove pre status
document.getElementById("pre-status").remove(); document.getElementById("pre-status").remove();
// Start Minecraft // Start Minecraft
window.app = new Minecraft("canvas-container"); window.app = new Minecraft("canvas-container");
});
}); });