/** * System takes care of updating all the entities (based on their component data) * @param apiSystem GameLib.API.System * @constructor */ GameLib.System.Render = function( apiSystem ) { GameLib.System.call( this, apiSystem ); }; GameLib.System.Render.prototype = Object.create(GameLib.System.prototype); GameLib.System.Render.prototype.constructor = GameLib.System.Render; GameLib.System.Render.prototype.start = function() { this.renderEntities = GameLib.EntityManager.Instance.query( [ GameLib.D3.Viewport, GameLib.D3.Scene, GameLib.D3.Renderer, GameLib.D3.Camera ] ); this.renderEntities.map( function(entity) { var stats = entity.getFirstComponent(GameLib.D3.Stats); stats.resize(); stats.domElement.instance.parentElement.appendChild(stats.instance.dom); } ) }; /** * Update script */ GameLib.System.Render.prototype.update = function() { this.renderEntities.map( function (renderEntity) { var stats = renderEntity.getFirstComponent(GameLib.D3.Stats); if (!stats.instance) { return; } var renderer = renderEntity.getFirstComponent(GameLib.D3.Renderer); var camera = renderEntity.getFirstComponent(GameLib.D3.Camera); var viewports = renderEntity.getComponents(GameLib.D3.Viewport); var scenes = renderEntity.getComponents(GameLib.D3.Scene); if (!renderer.instance) { return; } if (viewports.length > 1) { renderer.instance.autoClear = false; } if (scenes.length > 1) { renderer.instance.autoClear = false; } renderer.instance.clear(); viewports.map( function (viewport) { renderer.instance.setViewport( viewport.x * renderer.width, viewport.y * renderer.height, viewport.width * renderer.width, viewport.height * renderer.height ); function renderScene(scene) { if (!scene.instance) { return; } if (scene.activeCamera) { if (!scene.activeCamera.instance) { return; } renderer.instance.render( scene.instance, scene.activeCamera.instance ); } else { if (!camera.instance) { return; } renderer.instance.render( scene.instance, camera.instance ); } } if (viewport.scenes && viewport.scenes.length > 0) { viewport.scenes.map(renderScene); } else { scenes.map(renderScene); } } ); stats.instance.end(); } ); }; GameLib.System.Render.prototype.stop = function() { this.renderEntities.map( function(entity) { var stats = entity.getFirstComponent(GameLib.D3.Stats); stats.domElement.instance.parentElement.removeChild(stats.instance.dom); } ); this.renderEntities = []; };