improve gui rendering

This commit is contained in:
LabyStudio
2022-02-03 12:41:29 +01:00
parent 85c62325c1
commit 88db6b5e80
4 changed files with 89 additions and 75 deletions
+31 -27
View File
@@ -1,36 +1,26 @@
window.GameWindow = class {
constructor(minecraft, renderer, canvasWrapperId) {
this.renderer = renderer;
constructor(minecraft, canvasWrapperId) {
this.canvasWrapperId = canvasWrapperId;
this.mouseMotionX = 0;
this.mouseMotionY = 0;
this.mouseLocked = false;
let wrapper = document.getElementById(this.canvasWrapperId);
this.wrapper = document.getElementById(this.canvasWrapperId);
// Stats
this.stats = new Stats()
this.stats.showPanel(0);
wrapper.appendChild(this.stats.dom);
this.wrapper.appendChild(this.stats.dom);
// Add web renderer canvas to wrapper
let canvas = renderer.canvasElement;
wrapper.appendChild(canvas);
// Init
this.onResize();
// Initialize window size
this.updateWindowSize();
// On resize
let scope = this;
window.addEventListener('resize', _ => scope.onResize(), false);
// Request focus
canvas.onclick = function () {
canvas.requestPointerLock();
}
// Focus listener
document.addEventListener('pointerlockchange', _ => this.onFocusChanged(), false);
@@ -44,25 +34,38 @@ window.GameWindow = class {
Keyboard.create();
}
loadRenderer(renderer) {
this.renderer = renderer;
let canvas = renderer.canvasElement;
// Add web renderer canvas to wrapper
this.wrapper.appendChild(canvas);
// Initialize window size
this.onResize();
// Request focus
canvas.onclick = function () {
canvas.requestPointerLock();
}
}
updateWindowSize() {
this.width = this.wrapper.offsetWidth;
this.height = this.wrapper.offsetHeight;
}
onResize() {
// Get canvas size
let canvasElement = document.getElementById(this.canvasWrapperId);
this.width = canvasElement.offsetWidth;
this.height = canvasElement.offsetHeight;
this.updateWindowSize();
// Adjust camera
this.renderer.camera.aspect = this.width / this.height;
this.renderer.camera.updateProjectionMatrix();
this.renderer.webRenderer.setSize(this.width, this.height);
// Update HUD camera
this.renderer.camera2D.left = -this.width / 2;
this.renderer.camera2D.right = this.width / 2;
this.renderer.camera2D.top = this.height / 2;
this.renderer.camera2D.bottom = -this.height / 2;
this.renderer.camera2D.updateProjectionMatrix();
console.log("Resize");
// Reinitialize gui
this.renderer.initializeGui();
}
onFocusChanged() {
@@ -75,4 +78,5 @@ window.GameWindow = class {
this.mouseX = event.clientX;
this.mouseY = event.clientY;
}
}