60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
window.GameWindow = class {
|
|
|
|
constructor(minecraft, renderer, canvasWrapperId) {
|
|
this.renderer = renderer;
|
|
this.canvasWrapperId = canvasWrapperId;
|
|
|
|
this.mouseMotionX = 0;
|
|
this.mouseMotionY = 0;
|
|
this.mouseLocked = false;
|
|
|
|
// Add web renderer canvas to wrapper
|
|
let canvas = renderer.canvasElement;
|
|
document.getElementById(this.canvasWrapperId).appendChild(canvas);
|
|
|
|
// Init
|
|
this.onResize();
|
|
|
|
// 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);
|
|
|
|
// Mouse motion
|
|
document.addEventListener('mousemove', event => this.onMouseMove(event), false);
|
|
|
|
// Mouse buttons
|
|
document.addEventListener('click', event => minecraft.onMouseClicked(event.button), false);
|
|
|
|
// Create keyboard
|
|
Keyboard.create();
|
|
}
|
|
|
|
onResize() {
|
|
// Get canvas size
|
|
let canvasElement = document.getElementById(this.canvasWrapperId);
|
|
this.canvasWidth = canvasElement.offsetWidth;
|
|
this.canvasHeight = canvasElement.offsetHeight;
|
|
|
|
// Adjust camera
|
|
this.renderer.camera.aspect = this.canvasWidth / this.canvasHeight;
|
|
this.renderer.camera.updateProjectionMatrix();
|
|
this.renderer.webRenderer.setSize(this.canvasWidth, this.canvasHeight);
|
|
}
|
|
|
|
onFocusChanged() {
|
|
this.mouseLocked = document.pointerLockElement === this.renderer.canvasElement;
|
|
}
|
|
|
|
onMouseMove(event) {
|
|
this.mouseMotionX = event.movementX;
|
|
this.mouseMotionY = -event.movementY;
|
|
}
|
|
} |