improve texture loading
This commit is contained in:
@@ -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);
|
|
||||||
|
|
||||||
// Calculate character width
|
let bitMap = this.createBitMap(this.texture);
|
||||||
for (let i = 0; i < 128; i++) {
|
|
||||||
scope.charWidths[i] = scope.calculateCharacterWidthAt(bitMap, i % FontRenderer.BITMAP_SIZE, Math.floor(i / FontRenderer.BITMAP_SIZE)) + 2;
|
// Calculate character width
|
||||||
}
|
for (let i = 0; i < 128; i++) {
|
||||||
});
|
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) {
|
||||||
|
|||||||
+96
-61
@@ -37,71 +37,106 @@ 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([
|
||||||
// Dependencies
|
"font.png",
|
||||||
"libraries/three.min.js",
|
"gui.png",
|
||||||
"libraries/stats.min.js",
|
"background.png",
|
||||||
|
"terrain.png",
|
||||||
// Minecraft Source
|
"icons.png"
|
||||||
"src/js/net/minecraft/util/EnumBlockFace.js",
|
|
||||||
"src/js/net/minecraft/util/Timer.js",
|
|
||||||
"src/js/net/minecraft/util/Random.js",
|
|
||||||
"src/js/net/minecraft/util/EnumBlockFace.js",
|
|
||||||
"src/js/net/minecraft/util/EnumSkyBlock.js",
|
|
||||||
"src/js/net/minecraft/util/MetadataChunkBlock.js",
|
|
||||||
"src/js/net/minecraft/util/Vector3.js",
|
|
||||||
"src/js/net/minecraft/util/MovingObjectPosition.js",
|
|
||||||
"src/js/net/minecraft/util/MathHelper.js",
|
|
||||||
"src/js/net/minecraft/util/BoundingBox.js",
|
|
||||||
"src/js/net/minecraft/util/Keyboard.js",
|
|
||||||
"src/js/net/minecraft/client/gui/Gui.js",
|
|
||||||
"src/js/net/minecraft/client/gui/GuiScreen.js",
|
|
||||||
"src/js/net/minecraft/client/gui/widgets/GuiButton.js",
|
|
||||||
"src/js/net/minecraft/client/gui/widgets/GuiKeyButton.js",
|
|
||||||
"src/js/net/minecraft/client/gui/IngameOverlay.js",
|
|
||||||
"src/js/net/minecraft/client/gui/screens/GuiLoadingScreen.js",
|
|
||||||
"src/js/net/minecraft/client/gui/screens/GuiControls.js",
|
|
||||||
"src/js/net/minecraft/client/gui/screens/GuiIngameMenu.js",
|
|
||||||
"src/js/net/minecraft/client/GameWindow.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/Block.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/BlockStone.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/BlockGrass.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/BlockDirt.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/BlockLog.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/BlockLeave.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/BlockWater.js",
|
|
||||||
"src/js/net/minecraft/client/world/block/BlockSand.js",
|
|
||||||
"src/js/net/minecraft/client/world/ChunkSection.js",
|
|
||||||
"src/js/net/minecraft/client/world/Chunk.js",
|
|
||||||
"src/js/net/minecraft/client/world/World.js",
|
|
||||||
"src/js/net/minecraft/client/world/generator/NoiseGenerator.js",
|
|
||||||
"src/js/net/minecraft/client/world/generator/noise/NoiseGeneratorPerlin.js",
|
|
||||||
"src/js/net/minecraft/client/world/generator/noise/NoiseGeneratorOctaves.js",
|
|
||||||
"src/js/net/minecraft/client/world/generator/noise/NoiseGeneratorCombined.js",
|
|
||||||
"src/js/net/minecraft/client/world/generator/WorldGenerator.js",
|
|
||||||
"src/js/net/minecraft/client/entity/Player.js",
|
|
||||||
"src/js/net/minecraft/client/inventory/Inventory.js",
|
|
||||||
"src/js/net/minecraft/client/GameSettings.js",
|
|
||||||
"src/js/net/minecraft/client/Minecraft.js",
|
|
||||||
"src/js/net/minecraft/client/render/isometric/IsometricRenderer.js",
|
|
||||||
"src/js/net/minecraft/client/render/isometric/Point.js",
|
|
||||||
"src/js/net/minecraft/client/render/isometric/TextCoord.js",
|
|
||||||
"src/js/net/minecraft/client/render/isometric/Triangle.js",
|
|
||||||
"src/js/net/minecraft/client/render/gui/FontRenderer.js",
|
|
||||||
"src/js/net/minecraft/client/render/gui/ScreenRenderer.js",
|
|
||||||
"src/js/net/minecraft/client/render/gui/ItemRenderer.js",
|
|
||||||
"src/js/net/minecraft/client/render/Tessellator.js",
|
|
||||||
"src/js/net/minecraft/client/render/WorldRenderer.js",
|
|
||||||
"src/js/net/minecraft/client/render/BlockRenderer.js"
|
|
||||||
]).then(() => {
|
]).then(() => {
|
||||||
// Remove pre status
|
// Load scripts
|
||||||
document.getElementById("pre-status").remove();
|
loadScripts([
|
||||||
|
// Dependencies
|
||||||
|
"libraries/three.min.js",
|
||||||
|
"libraries/stats.min.js",
|
||||||
|
|
||||||
// Start Minecraft
|
// Minecraft Source
|
||||||
window.app = new Minecraft("canvas-container");
|
"src/js/net/minecraft/util/EnumBlockFace.js",
|
||||||
|
"src/js/net/minecraft/util/Timer.js",
|
||||||
|
"src/js/net/minecraft/util/Random.js",
|
||||||
|
"src/js/net/minecraft/util/EnumBlockFace.js",
|
||||||
|
"src/js/net/minecraft/util/EnumSkyBlock.js",
|
||||||
|
"src/js/net/minecraft/util/MetadataChunkBlock.js",
|
||||||
|
"src/js/net/minecraft/util/Vector3.js",
|
||||||
|
"src/js/net/minecraft/util/MovingObjectPosition.js",
|
||||||
|
"src/js/net/minecraft/util/MathHelper.js",
|
||||||
|
"src/js/net/minecraft/util/BoundingBox.js",
|
||||||
|
"src/js/net/minecraft/util/Keyboard.js",
|
||||||
|
"src/js/net/minecraft/client/gui/Gui.js",
|
||||||
|
"src/js/net/minecraft/client/gui/GuiScreen.js",
|
||||||
|
"src/js/net/minecraft/client/gui/widgets/GuiButton.js",
|
||||||
|
"src/js/net/minecraft/client/gui/widgets/GuiKeyButton.js",
|
||||||
|
"src/js/net/minecraft/client/gui/IngameOverlay.js",
|
||||||
|
"src/js/net/minecraft/client/gui/screens/GuiLoadingScreen.js",
|
||||||
|
"src/js/net/minecraft/client/gui/screens/GuiControls.js",
|
||||||
|
"src/js/net/minecraft/client/gui/screens/GuiIngameMenu.js",
|
||||||
|
"src/js/net/minecraft/client/GameWindow.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/Block.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/BlockStone.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/BlockGrass.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/BlockDirt.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/BlockLog.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/BlockLeave.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/BlockWater.js",
|
||||||
|
"src/js/net/minecraft/client/world/block/BlockSand.js",
|
||||||
|
"src/js/net/minecraft/client/world/ChunkSection.js",
|
||||||
|
"src/js/net/minecraft/client/world/Chunk.js",
|
||||||
|
"src/js/net/minecraft/client/world/World.js",
|
||||||
|
"src/js/net/minecraft/client/world/generator/NoiseGenerator.js",
|
||||||
|
"src/js/net/minecraft/client/world/generator/noise/NoiseGeneratorPerlin.js",
|
||||||
|
"src/js/net/minecraft/client/world/generator/noise/NoiseGeneratorOctaves.js",
|
||||||
|
"src/js/net/minecraft/client/world/generator/noise/NoiseGeneratorCombined.js",
|
||||||
|
"src/js/net/minecraft/client/world/generator/WorldGenerator.js",
|
||||||
|
"src/js/net/minecraft/client/entity/Player.js",
|
||||||
|
"src/js/net/minecraft/client/inventory/Inventory.js",
|
||||||
|
"src/js/net/minecraft/client/GameSettings.js",
|
||||||
|
"src/js/net/minecraft/client/Minecraft.js",
|
||||||
|
"src/js/net/minecraft/client/render/isometric/IsometricRenderer.js",
|
||||||
|
"src/js/net/minecraft/client/render/isometric/Point.js",
|
||||||
|
"src/js/net/minecraft/client/render/isometric/TextCoord.js",
|
||||||
|
"src/js/net/minecraft/client/render/isometric/Triangle.js",
|
||||||
|
"src/js/net/minecraft/client/render/gui/FontRenderer.js",
|
||||||
|
"src/js/net/minecraft/client/render/gui/ScreenRenderer.js",
|
||||||
|
"src/js/net/minecraft/client/render/gui/ItemRenderer.js",
|
||||||
|
"src/js/net/minecraft/client/render/Tessellator.js",
|
||||||
|
"src/js/net/minecraft/client/render/WorldRenderer.js",
|
||||||
|
"src/js/net/minecraft/client/render/BlockRenderer.js"
|
||||||
|
]).then(() => {
|
||||||
|
// Remove pre status
|
||||||
|
document.getElementById("pre-status").remove();
|
||||||
|
|
||||||
|
// Start Minecraft
|
||||||
|
window.app = new Minecraft("canvas-container");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user