216 lines
5.4 KiB
JavaScript
216 lines
5.4 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
|
||
|
*/
|
||
|
GameLib.D3.API.Game = function(
|
||
|
id,
|
||
|
name,
|
||
|
baseUrl,
|
||
|
path,
|
||
|
imageFactory,
|
||
|
gameType,
|
||
|
cameras,
|
||
|
composers,
|
||
|
viewports,
|
||
|
renderers,
|
||
|
renderTargets,
|
||
|
systems,
|
||
|
entityManager,
|
||
|
parentEntity
|
||
|
) {
|
||
|
GameLib.Component.call(
|
||
|
this,
|
||
|
GameLib.Component.COMPONENT_GAME,
|
||
|
{
|
||
|
'imageFactory' : GameLib.D3.ImageFactory,
|
||
|
'cameras' : [GameLib.D3.Camera],
|
||
|
'composers' : [GameLib.D3.Composer],
|
||
|
'viewports' : [GameLib.D3.Viewport],
|
||
|
'renderers' : [GameLib.D3.Renderer],
|
||
|
'renderTargets' : [GameLib.D3.RenderTarget],
|
||
|
'systems' : [GameLib.System],
|
||
|
'entityManager' : GameLib.EntityManager
|
||
|
},
|
||
|
null,
|
||
|
parentEntity
|
||
|
);
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(id)) {
|
||
|
id = GameLib.Utils.RandomId();
|
||
|
}
|
||
|
this.id = id;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(name)) {
|
||
|
name = 'Game (' + this.id + ')';
|
||
|
}
|
||
|
this.name = name;
|
||
|
|
||
|
if (GameLib.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 (GameLib.Utils.UndefinedOrNull(path)) {
|
||
|
path = '';
|
||
|
}
|
||
|
this.path = path;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(imageFactory)) {
|
||
|
imageFactory = null;
|
||
|
}
|
||
|
this.imageFactory = imageFactory;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(gameType)) {
|
||
|
gameType = GameLib.D3.Game.GAME_TYPE_VR_PONG;
|
||
|
}
|
||
|
this.gameType = gameType;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(cameras)) {
|
||
|
cameras = [];
|
||
|
}
|
||
|
this.cameras = cameras;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(composers)) {
|
||
|
composers = [];
|
||
|
}
|
||
|
this.composers = composers;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(viewports)) {
|
||
|
viewports = [];
|
||
|
}
|
||
|
this.viewports = viewports;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(renderers)) {
|
||
|
renderers = [];
|
||
|
}
|
||
|
this.renderers = renderers;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(renderTargets)) {
|
||
|
renderTargets = [];
|
||
|
}
|
||
|
this.renderTargets = renderTargets;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(systems)) {
|
||
|
systems = [];
|
||
|
}
|
||
|
this.systems = systems;
|
||
|
|
||
|
if (GameLib.Utils.UndefinedOrNull(entityManager)) {
|
||
|
entityManager = null;
|
||
|
}
|
||
|
this.entityManager = entityManager;
|
||
|
|
||
|
};
|
||
|
|
||
|
GameLib.D3.API.Game.prototype = Object.create(GameLib.Component.prototype);
|
||
|
GameLib.D3.API.Game.prototype.constructor = GameLib.D3.API.Game;
|
||
|
|
||
|
/**
|
||
|
* Creates an API camera from an Object camera
|
||
|
* @param objectGame
|
||
|
* @constructor
|
||
|
*/
|
||
|
GameLib.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 = GameLib.D3.API.ImageFactory.FromObjectImageFactory(objectGame.imageFactory);
|
||
|
}
|
||
|
|
||
|
if (objectGame.cameras) {
|
||
|
apiCameras = objectGame.cameras.map(
|
||
|
function(objectCamera){
|
||
|
return GameLib.D3.API.Camera.FromObjectCamera(objectCamera);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (objectGame.composers) {
|
||
|
apiComposers = objectGame.composers.map(
|
||
|
function(objectComposer){
|
||
|
return GameLib.D3.API.Composer.FromObjectComponent(objectComposer);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (objectGame.viewports) {
|
||
|
apiViewports = objectGame.viewports.map(
|
||
|
function(objectViewport){
|
||
|
return GameLib.D3.API.Viewport.FromObjectViewport(objectViewport);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (objectGame.renderers) {
|
||
|
apiRenderers = objectGame.renderers.map(
|
||
|
function(objectRenderer){
|
||
|
return GameLib.D3.API.Renderer.FromObjectComponent(objectRenderer);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (objectGame.renderTargets) {
|
||
|
apiRenderTargets = objectGame.renderTargets.map(
|
||
|
function(objectRenderTarget){
|
||
|
return GameLib.D3.API.RenderTarget.FromObjectComponent(objectRenderTarget);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (objectGame.systems) {
|
||
|
apiSystems = objectGame.systems.map(
|
||
|
function(objectSystem){
|
||
|
return GameLib.API.System.FromObjectComponent(objectSystem);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (objectGame.entityManager) {
|
||
|
apiEntityManager = GameLib.API.EntityManager.FromObjectEntityManager(objectGame.entityManager);
|
||
|
}
|
||
|
|
||
|
return new GameLib.D3.API.Game(
|
||
|
objectGame.id,
|
||
|
objectGame.name,
|
||
|
objectGame.baseUrl,
|
||
|
objectGame.path,
|
||
|
apiImageFactory,
|
||
|
objectGame.gameType,
|
||
|
apiCameras,
|
||
|
apiComposers,
|
||
|
apiViewports,
|
||
|
apiRenderers,
|
||
|
apiRenderTargets,
|
||
|
apiSystems,
|
||
|
apiEntityManager,
|
||
|
objectGame.parentEntity
|
||
|
);
|
||
|
|
||
|
};
|