139 lines
2.7 KiB
JavaScript
139 lines
2.7 KiB
JavaScript
/**
|
|
* 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 = [];
|
|
};
|
|
|