From 99cef0a288662015960b5a97fdf7d3b43da0d54d Mon Sep 17 00:00:00 2001 From: -=yb4f310 Date: Mon, 30 Oct 2017 17:56:54 +0100 Subject: [PATCH] override camera --- src/game-lib-d3-api-scene.js | 8 ++++++++ src/game-lib-d3-renderer.js | 20 +++++++++++++++----- src/game-lib-d3-scene.js | 12 +++++++++++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/game-lib-d3-api-scene.js b/src/game-lib-d3-api-scene.js index fff60d6..7ce2584 100644 --- a/src/game-lib-d3-api-scene.js +++ b/src/game-lib-d3-api-scene.js @@ -8,6 +8,7 @@ * @param materials [GameLib.D3.API.Material] * @param images * @param fog + * @param renderCamera - this is a camera which takes precedence over the renderer camera at time of render * @param parentEntity * @constructor */ @@ -20,6 +21,7 @@ GameLib.D3.API.Scene = function( materials, images, fog, + renderCamera, parentEntity ) { @@ -63,6 +65,11 @@ GameLib.D3.API.Scene = function( } this.fog = fog; + if (GameLib.Utils.UndefinedOrNull(renderCamera)) { + renderCamera = null; + } + this.renderCamera = renderCamera; + if (GameLib.Utils.UndefinedOrNull(parentEntity)) { parentEntity = null; } @@ -155,6 +162,7 @@ GameLib.D3.API.Scene.FromObject = function(objectScene) { apiMaterials, apiImages, objectScene.fog, + objectScene.renderCamera, objectScene.parentEntity ); diff --git a/src/game-lib-d3-renderer.js b/src/game-lib-d3-renderer.js index 55df90b..db9cb2f 100644 --- a/src/game-lib-d3-renderer.js +++ b/src/game-lib-d3-renderer.js @@ -368,14 +368,24 @@ GameLib.D3.Renderer.prototype.render = function(delta, scenes) { return; } - if (!this.camera.instance) { + if (!this.camera.instance && !(scene.renderCamera || scene.renderCamera.instance)) { return; } - this.instance.render( - scene.instance, - this.camera.instance - ) + /** + * A scene's renderCamera instance overrides the default renderer camera + */ + if (scene.renderCamera && scene.renderCamera.instance) { + this.instance.render( + scene.instance, + scene.renderCamera.instance + ) + } else { + this.instance.render( + scene.instance, + this.camera.instance + ) + } }.bind(this)); diff --git a/src/game-lib-d3-scene.js b/src/game-lib-d3-scene.js index 20bc0f2..e4779f9 100644 --- a/src/game-lib-d3-scene.js +++ b/src/game-lib-d3-scene.js @@ -30,6 +30,7 @@ GameLib.D3.Scene = function ( apiScene.materials, apiScene.images, apiScene.fog, + apiScene.renderCamera, apiScene.parentEntity ); @@ -131,6 +132,13 @@ GameLib.D3.Scene = function ( ) } + if (this.renderCamera instanceof GameLib.D3.API.Camera) { + this.renderCamera = new GameLib.D3.Camera( + this.graphics, + this.renderCamera + ) + } + /** * Runtime scenes have helpers (just used to store which helper belongs to which scene) * @type {Array} @@ -146,7 +154,8 @@ GameLib.D3.Scene = function ( 'textures' : [GameLib.D3.Texture], 'materials' : [GameLib.D3.Material], 'images' : [GameLib.D3.Image], - 'fog' : GameLib.D3.Fog + 'fog' : GameLib.D3.Fog, + 'renderCamera' : GameLib.D3.Camera } ); }; @@ -315,6 +324,7 @@ GameLib.D3.Scene.prototype.toApiObject = function() { apiMaterials, apiImages, GameLib.Utils.IdOrNull(this.fog), + GameLib.Utils.IdOrNull(this.renderCamera), GameLib.Utils.IdOrNull(this.parentEntity) ); };