bedrock-protocol/examples/viewer/client/BotViewer.js
2021-04-03 20:34:42 -04:00

73 lines
2.1 KiB
JavaScript

/* global THREE */
const { Viewer, MapControls } = require('prismarine-viewer/viewer')
const { Vec3 } = require('vec3')
const { BotProvider } = require('./BotProvider')
const { ProxyProvider } = require('./ProxyProvider')
global.THREE = require('three')
const MCVER = '1.16.1'
class BotViewer {
constructor () {
}
start () {
// this.bot = new BotProvider()
this.bot = new ProxyProvider()
// return
// Create three.js context, add to page
this.renderer = new THREE.WebGLRenderer()
this.renderer.setPixelRatio(window.devicePixelRatio || 1)
this.renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(this.renderer.domElement)
// Create viewer
this.viewer = new Viewer(this.renderer)
this.viewer.setVersion(MCVER)
// Attach controls to viewer
this.controls = new MapControls(this.viewer.camera, this.renderer.domElement)
// Enable damping (inertia) on movement
this.controls.enableDamping = true
this.controls.dampingFactor = 0.09
console.info('Registered handlers')
// Link WorldView and Viewer
this.viewer.listen(this.bot)
this.bot.on('spawn', ({ position }) => {
// Initialize viewer, load chunks
this.bot.init(position)
// Start listening for keys
this.registerBrowserEvents()
})
this.controls.update()
// Browser animation loop
const animate = () => {
window.requestAnimationFrame(animate)
if (this.controls) this.controls.update()
this.viewer.update()
this.renderer.render(this.viewer.scene, this.viewer.camera)
}
animate()
window.addEventListener('resize', () => {
this.viewer.camera.aspect = window.innerWidth / window.innerHeight
this.viewer.camera.updateProjectionMatrix()
this.renderer.setSize(window.innerWidth, window.innerHeight)
})
}
onKeyDown = (evt) => {
console.log('Key down', evt)
// this.bot.initPhys()
// this.bot.startPhys()
}
registerBrowserEvents () {
this.renderer.domElement.parentElement.addEventListener('keydown', this.onKeyDown)
}
}
module.exports = { BotViewer }