/* globals AFRAME */
import Renderer from './Renderer';
import networkedPhysics from './aframe/system';
/**
* The A-Frame Renderer
*/
class AFrameRenderer extends Renderer {
/**
* Constructor of the Renderer singleton.
* @param {GameEngine} gameEngine - Reference to the GameEngine instance.
* @param {ClientEngine} clientEngine - Reference to the ClientEngine instance.
*/
constructor(gameEngine, clientEngine) {
super(gameEngine, clientEngine);
// set up the networkedPhysics as an A-Frame system
networkedPhysics.setGlobals(gameEngine, this);
AFRAME.registerSystem('networked-physics', networkedPhysics);
}
reportSlowFrameRate() {
this.gameEngine.emit('client__slowFrameRate');
}
/**
* Initialize the renderer.
* @return {Promise} Resolves when renderer is ready.
*/
init() {
let p = super.init();
let sceneElArray = document.getElementsByTagName('a-scene');
if (sceneElArray.length !== 1) {
throw new Error('A-Frame scene element not found');
}
this.scene = sceneElArray[0];
this.gameEngine.on('objectRemoved', (o) => {
o.renderObj.remove();
});
return p; // eslint-disable-line new-cap
}
/**
* In AFrame, we set the draw method (which is called at requestAnimationFrame)
* to a NO-OP. See tick() instead
*/
draw() {}
tick(t, dt) {
super.draw(t, dt);
}
}
export default AFrameRenderer;