Browse Source

parsing general cameras

Function now parses not only a FreeCamera but any camera that will be
sent to it.
Not yet including all properties read by the scene loader.
Raanan Weber 10 years ago
parent
commit
33601a45d5
2 changed files with 42 additions and 29 deletions
  1. 17 11
      Babylon/Tools/babylon.sceneSerializer.js
  2. 25 18
      Babylon/Tools/babylon.sceneSerializer.ts

+ 17 - 11
Babylon/Tools/babylon.sceneSerializer.js

@@ -56,21 +56,27 @@ var BABYLON;
         if (camera.parent) {
             serializationObject.parentId = camera.parent.id;
         }
-        // Target
-        serializationObject.rotation = camera.rotation.asArray();
-        // Locked target
-        if (camera.lockedTarget && camera.lockedTarget.id) {
-            serializationObject.lockedTargetId = camera.lockedTarget.id;
-        }
         serializationObject.fov = camera.fov;
         serializationObject.minZ = camera.minZ;
         serializationObject.maxZ = camera.maxZ;
-        serializationObject.speed = camera.speed;
         serializationObject.inertia = camera.inertia;
-        serializationObject.checkCollisions = camera.checkCollisions;
-        serializationObject.applyGravity = camera.applyGravity;
-        if (camera.ellipsoid) {
-            serializationObject.ellipsoid = camera.ellipsoid.asArray();
+        //general properties that not all cameras have. The [] is due to typescript's type safety
+        if (camera['speed'] !== undefined) {
+            serializationObject.speed = camera['speed'];
+        }
+        // Target
+        if (camera['rotation'] && camera['rotation'] instanceof BABYLON.Vector3) {
+            serializationObject.rotation = camera['rotation'].asArray();
+        }
+        // Locked target
+        if (camera['lockedTarget'] && camera['lockedTarget'].id) {
+            serializationObject.lockedTargetId = camera['lockedTarget'].id;
+        }
+        //will be undefined if not defined.
+        serializationObject.checkCollisions = camera['checkCollisions'];
+        serializationObject.applyGravity = camera['applyGravity'];
+        if (camera['ellipsoid']) {
+            serializationObject.ellipsoid = camera['ellipsoid'].asArray();
         }
         // Animations
         appendAnimations(camera, serializationObject);

+ 25 - 18
Babylon/Tools/babylon.sceneSerializer.ts

@@ -6,22 +6,22 @@
         serializationObject.id = light.id;
         serializationObject.tags = Tags.GetTags(light);
 
-        if (light instanceof BABYLON.PointLight) {
+        if (light instanceof PointLight) {
             serializationObject.type = 0;
             serializationObject.position = (<PointLight>light).position.asArray();
-        } else if (light instanceof BABYLON.DirectionalLight) {
+        } else if (light instanceof DirectionalLight) {
             serializationObject.type = 1;
             var directionalLight = <DirectionalLight>light;
             serializationObject.position = directionalLight.position.asArray();
             serializationObject.direction = directionalLight.direction.asArray();
-        } else if (light instanceof BABYLON.SpotLight) {
+        } else if (light instanceof SpotLight) {
             serializationObject.type = 2;
             var spotLight = <SpotLight>light;
             serializationObject.position = spotLight.position.asArray();
             serializationObject.direction = spotLight.position.asArray();
             serializationObject.angle = spotLight.angle;
             serializationObject.exponent = spotLight.exponent;
-        } else if (light instanceof BABYLON.HemisphericLight) {
+        } else if (light instanceof HemisphericLight) {
             serializationObject.type = 3;
             var hemisphericLight = <HemisphericLight>light;
             serializationObject.direction = hemisphericLight.direction.asArray();
@@ -52,7 +52,7 @@
         return serializationObject;
     }
 
-    var serializeCamera = (camera: FreeCamera): any => {
+    var serializeCamera = (camera: Camera): any => {
         var serializationObject:any = {};
         serializationObject.name = camera.name;
         serializationObject.tags = Tags.GetTags(camera);
@@ -64,26 +64,33 @@
             serializationObject.parentId = camera.parent.id;
         }
 
-        // Target
-        serializationObject.rotation = camera.rotation.asArray();
-
-        // Locked target
-        if (camera.lockedTarget && camera.lockedTarget.id) {
-            serializationObject.lockedTargetId = camera.lockedTarget.id;
-        }
-
         serializationObject.fov = camera.fov;
         serializationObject.minZ = camera.minZ;
         serializationObject.maxZ = camera.maxZ;
 
-        serializationObject.speed = camera.speed;
         serializationObject.inertia = camera.inertia;
+        
+        //general properties that not all cameras have. The [] is due to typescript's type safety
+        if (camera['speed'] !== undefined) {
+            serializationObject.speed = camera['speed'];
+        }
+
+        // Target
+        if (camera['rotation'] && camera['rotation'] instanceof Vector3) {
+            serializationObject.rotation = camera['rotation'].asArray();
+        }
+
+        // Locked target
+        if (camera['lockedTarget'] && camera['lockedTarget'].id) {
+            serializationObject.lockedTargetId = camera['lockedTarget'].id;
+        }
 
-        serializationObject.checkCollisions = camera.checkCollisions;
-        serializationObject.applyGravity = camera.applyGravity;
+        //will be undefined if not defined.
+        serializationObject.checkCollisions = camera['checkCollisions'];
+        serializationObject.applyGravity = camera['applyGravity'];
 
-        if (camera.ellipsoid) {
-            serializationObject.ellipsoid = camera.ellipsoid.asArray();
+        if (camera['ellipsoid']) {
+            serializationObject.ellipsoid = camera['ellipsoid'].asArray();
         }
 
         // Animations