216 lines
5.2 KiB
JavaScript
216 lines
5.2 KiB
JavaScript
/**
|
|
* Raw Game API object - should always correspond with the Game Schema
|
|
* @param id
|
|
* @param name
|
|
* @param gameType
|
|
* @param imageFactory
|
|
* @param width
|
|
* @param height
|
|
* @param baseUrl
|
|
* @param path
|
|
* @param cameras
|
|
* @param renderers
|
|
* @param composers
|
|
* @param renderTargets
|
|
* @param systems
|
|
* @param viewports
|
|
* @param entityManager
|
|
* @param parentEntity
|
|
* @constructor
|
|
*/
|
|
R3.D3.API.Game = function(
|
|
id,
|
|
name,
|
|
baseUrl,
|
|
path,
|
|
imageFactory,
|
|
gameType,
|
|
cameras,
|
|
composers,
|
|
viewports,
|
|
renderers,
|
|
renderTargets,
|
|
systems,
|
|
entityManager,
|
|
parentEntity
|
|
) {
|
|
R3.Component.call(
|
|
this,
|
|
R3.Component.COMPONENT_GAME,
|
|
{
|
|
'imageFactory' : R3.D3.ImageFactory,
|
|
'cameras' : [R3.D3.Camera],
|
|
'composers' : [R3.D3.Composer],
|
|
'viewports' : [R3.D3.Viewport],
|
|
'renderers' : [R3.D3.Renderer],
|
|
'renderTargets' : [R3.D3.RenderTarget],
|
|
'systems' : [R3.System],
|
|
'entityManager' : R3.EntityManager
|
|
},
|
|
null,
|
|
parentEntity
|
|
);
|
|
|
|
if (R3.Utils.UndefinedOrNull(id)) {
|
|
id = R3.Utils.RandomId();
|
|
}
|
|
this.id = id;
|
|
|
|
if (R3.Utils.UndefinedOrNull(name)) {
|
|
name = 'Game (' + this.id + ')';
|
|
}
|
|
this.name = name;
|
|
|
|
if (R3.Utils.UndefinedOrNull(baseUrl)) {
|
|
baseUrl = '';
|
|
console.warn('The base URL required for downloading images is not set - textured meshes will not render properly');
|
|
}
|
|
this.baseUrl = baseUrl;
|
|
|
|
if (R3.Utils.UndefinedOrNull(path)) {
|
|
path = '';
|
|
}
|
|
this.path = path;
|
|
|
|
if (R3.Utils.UndefinedOrNull(imageFactory)) {
|
|
imageFactory = null;
|
|
}
|
|
this.imageFactory = imageFactory;
|
|
|
|
if (R3.Utils.UndefinedOrNull(gameType)) {
|
|
gameType = R3.D3.Game.GAME_TYPE_VR_PONG;
|
|
}
|
|
this.gameType = gameType;
|
|
|
|
if (R3.Utils.UndefinedOrNull(cameras)) {
|
|
cameras = [];
|
|
}
|
|
this.cameras = cameras;
|
|
|
|
if (R3.Utils.UndefinedOrNull(composers)) {
|
|
composers = [];
|
|
}
|
|
this.composers = composers;
|
|
|
|
if (R3.Utils.UndefinedOrNull(viewports)) {
|
|
viewports = [];
|
|
}
|
|
this.viewports = viewports;
|
|
|
|
if (R3.Utils.UndefinedOrNull(renderers)) {
|
|
renderers = [];
|
|
}
|
|
this.renderers = renderers;
|
|
|
|
if (R3.Utils.UndefinedOrNull(renderTargets)) {
|
|
renderTargets = [];
|
|
}
|
|
this.renderTargets = renderTargets;
|
|
|
|
if (R3.Utils.UndefinedOrNull(systems)) {
|
|
systems = [];
|
|
}
|
|
this.systems = systems;
|
|
|
|
if (R3.Utils.UndefinedOrNull(entityManager)) {
|
|
entityManager = null;
|
|
}
|
|
this.entityManager = entityManager;
|
|
|
|
};
|
|
|
|
R3.D3.API.Game.prototype = Object.create(R3.Component.prototype);
|
|
R3.D3.API.Game.prototype.constructor = R3.D3.API.Game;
|
|
|
|
/**
|
|
* Creates an API camera from an Object camera
|
|
* @param objectGame
|
|
* @constructor
|
|
*/
|
|
R3.D3.API.Game.FromObjectGame = function(objectGame) {
|
|
|
|
var apiImageFactory = null;
|
|
var apiCameras = [];
|
|
var apiComposers = [];
|
|
var apiViewports = [];
|
|
var apiRenderers = [];
|
|
var apiRenderTargets = [];
|
|
var apiSystems = [];
|
|
|
|
var apiEntityManager = null;
|
|
|
|
if (objectGame.imageFactory) {
|
|
apiImageFactory = R3.D3.API.ImageFactory.FromObjectImageFactory(objectGame.imageFactory);
|
|
}
|
|
|
|
if (objectGame.cameras) {
|
|
apiCameras = objectGame.cameras.map(
|
|
function(objectCamera){
|
|
return R3.D3.API.Camera.FromObjectCamera(objectCamera);
|
|
}
|
|
);
|
|
}
|
|
|
|
if (objectGame.composers) {
|
|
apiComposers = objectGame.composers.map(
|
|
function(objectComposer){
|
|
return R3.D3.API.Composer.FromObjectComponent(objectComposer);
|
|
}
|
|
);
|
|
}
|
|
|
|
if (objectGame.viewports) {
|
|
apiViewports = objectGame.viewports.map(
|
|
function(objectViewport){
|
|
return R3.D3.API.Viewport.FromObjectViewport(objectViewport);
|
|
}
|
|
);
|
|
}
|
|
|
|
if (objectGame.renderers) {
|
|
apiRenderers = objectGame.renderers.map(
|
|
function(objectRenderer){
|
|
return R3.D3.API.Renderer.FromObjectComponent(objectRenderer);
|
|
}
|
|
);
|
|
}
|
|
|
|
if (objectGame.renderTargets) {
|
|
apiRenderTargets = objectGame.renderTargets.map(
|
|
function(objectRenderTarget){
|
|
return R3.D3.API.RenderTarget.FromObjectComponent(objectRenderTarget);
|
|
}
|
|
);
|
|
}
|
|
|
|
if (objectGame.systems) {
|
|
apiSystems = objectGame.systems.map(
|
|
function(objectSystem){
|
|
return R3.API.System.FromObjectComponent(objectSystem);
|
|
}
|
|
);
|
|
}
|
|
|
|
if (objectGame.entityManager) {
|
|
apiEntityManager = R3.API.EntityManager.FromObjectEntityManager(objectGame.entityManager);
|
|
}
|
|
|
|
return new R3.D3.API.Game(
|
|
objectGame.id,
|
|
objectGame.name,
|
|
objectGame.baseUrl,
|
|
objectGame.path,
|
|
apiImageFactory,
|
|
objectGame.gameType,
|
|
apiCameras,
|
|
apiComposers,
|
|
apiViewports,
|
|
apiRenderers,
|
|
apiRenderTargets,
|
|
apiSystems,
|
|
apiEntityManager,
|
|
objectGame.parentEntity
|
|
);
|
|
|
|
};
|