72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
export default class ScreenRenderer {
|
|
|
|
constructor(minecraft, window) {
|
|
this.minecraft = minecraft;
|
|
this.window = window;
|
|
}
|
|
|
|
initialize() {
|
|
let scale = this.getLimitedScaleFactor();
|
|
|
|
// Update camera size
|
|
this.window.canvas.width = this.window.width * scale;
|
|
this.window.canvas.height = this.window.height * scale;
|
|
|
|
// Get context stack of 2d canvas
|
|
this.stack2d = this.window.canvas.getContext('2d');
|
|
this.stack2d.webkitImageSmoothingEnabled = false;
|
|
this.stack2d.mozImageSmoothingEnabled = false;
|
|
this.stack2d.imageSmoothingEnabled = false;
|
|
}
|
|
|
|
render(partialTicks) {
|
|
let scale = this.getLimitedScaleFactor();
|
|
|
|
let mouseX = this.minecraft.window.mouseX;
|
|
let mouseY = this.minecraft.window.mouseY;
|
|
|
|
this.stack2d.save();
|
|
|
|
// Draw world to canvas
|
|
if (this.minecraft.isInGame()) {
|
|
this.stack2d.drawImage(this.window.canvasWorld, 0, 0, this.window.width * scale, this.window.height * scale);
|
|
} else {
|
|
this.reset();
|
|
}
|
|
|
|
// Scale GUI
|
|
this.stack2d.scale(scale, scale, scale);
|
|
|
|
try {
|
|
// Render in-game overlay
|
|
if (this.minecraft.isInGame() && this.minecraft.loadingScreen === null) {
|
|
this.minecraft.ingameOverlay.render(this.stack2d, mouseX, mouseY, partialTicks);
|
|
}
|
|
|
|
// Render current screen
|
|
if (this.minecraft.currentScreen !== null) {
|
|
this.minecraft.currentScreen.drawScreen(this.stack2d, mouseX, mouseY, partialTicks)
|
|
}
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
|
|
// Scale GUI back
|
|
let actualScale = this.window.scaleFactor;
|
|
this.stack2d.scale(1 / actualScale, 1 / actualScale, 1 / actualScale);
|
|
|
|
// Render items
|
|
this.stack2d.drawImage(this.window.canvasItems, 0, 0);
|
|
|
|
this.stack2d.restore();
|
|
}
|
|
|
|
reset() {
|
|
this.stack2d.clearRect(0, 0, this.window.canvas.width, this.window.canvas.height);
|
|
}
|
|
|
|
getLimitedScaleFactor() {
|
|
return Math.min(this.window.scaleFactor, 4);
|
|
}
|
|
|
|
} |