Bläddra i källkod

Customs materials loading support

David Catuhe 9 år sedan
förälder
incheckning
6250f1bfd8

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 16 - 16
dist/preview release/babylon.core.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1623 - 1622
dist/preview release/babylon.d.ts


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 23 - 23
dist/preview release/babylon.js


+ 15 - 3
dist/preview release/babylon.max.js

@@ -3904,6 +3904,17 @@ var BABYLON;
     var Tools = (function () {
         function Tools() {
         }
+        Tools.Instantiate = function (className) {
+            var arr = className.split(".");
+            var fn = (window || this);
+            for (var i = 0, len = arr.length; i < len; i++) {
+                fn = fn[arr[i]];
+            }
+            if (typeof fn !== "function") {
+                return null;
+            }
+            return fn;
+        };
         Tools.GetConstructorName = function (obj) {
             var str = (obj.prototype ? obj.prototype.constructor : obj.constructor).toString();
             var cname = str.match(/function\s(\w*)/)[1];
@@ -18756,8 +18767,9 @@ var BABYLON;
             if (!parsedMaterial.customType) {
                 return BABYLON.StandardMaterial.Parse(parsedMaterial, scene, rootUrl);
             }
-            //TODO this is where custom materials are inspected and parsed.
-            return null;
+            var materialType = BABYLON.Tools.Instantiate(parsedMaterial.customType);
+            return materialType.Parse(parsedMaterial, scene, rootUrl);
+            ;
         };
         Material._TriangleFillMode = 0;
         Material._WireFrameFillMode = 1;
@@ -20121,7 +20133,7 @@ var BABYLON;
                             if (!materialFound && parsedData.multiMaterials) {
                                 for (var multimatIndex = 0; multimatIndex < parsedData.multiMaterials.length; multimatIndex++) {
                                     var parsedMultiMaterial = parsedData.multiMaterials[multimatIndex];
-                                    if (parsedMultiMaterial.id == parsedMesh.materialId) {
+                                    if (parsedMultiMaterial.id === parsedMesh.materialId) {
                                         for (var matIndex = 0; matIndex < parsedMultiMaterial.materials.length; matIndex++) {
                                             var subMatId = parsedMultiMaterial.materials[matIndex];
                                             loadedMaterialsIds.push(subMatId);

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 23 - 23
dist/preview release/babylon.noworker.js


+ 1 - 1
src/Loading/Plugins/babylon.babylonFileLoader.js

@@ -95,7 +95,7 @@ var BABYLON;
                             if (!materialFound && parsedData.multiMaterials) {
                                 for (var multimatIndex = 0; multimatIndex < parsedData.multiMaterials.length; multimatIndex++) {
                                     var parsedMultiMaterial = parsedData.multiMaterials[multimatIndex];
-                                    if (parsedMultiMaterial.id == parsedMesh.materialId) {
+                                    if (parsedMultiMaterial.id === parsedMesh.materialId) {
                                         for (var matIndex = 0; matIndex < parsedMultiMaterial.materials.length; matIndex++) {
                                             var subMatId = parsedMultiMaterial.materials[matIndex];
                                             loadedMaterialsIds.push(subMatId);

+ 3 - 3
src/Loading/Plugins/babylon.babylonFileLoader.ts

@@ -4,7 +4,7 @@
         for (var index = 0; index < parsedData.materials.length; index++) {
             var parsedMaterial = parsedData.materials[index];
             if (parsedMaterial.id === id) {
-                return BABYLON.Material.Parse(parsedMaterial, scene, rootUrl);
+                return Material.Parse(parsedMaterial, scene, rootUrl);
             }
         }
 
@@ -28,7 +28,7 @@
         return false;
     };
 
-    BABYLON.SceneLoader.RegisterPlugin({
+    SceneLoader.RegisterPlugin({
         extensions: ".babylon",
         importMesh: (meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: ParticleSystem[], skeletons: Skeleton[]): boolean => {
             var parsedData = JSON.parse(data);
@@ -103,7 +103,7 @@
                         if (!materialFound && parsedData.multiMaterials) {
                             for (var multimatIndex = 0; multimatIndex < parsedData.multiMaterials.length; multimatIndex++) {
                                 var parsedMultiMaterial = parsedData.multiMaterials[multimatIndex];
-                                if (parsedMultiMaterial.id == parsedMesh.materialId) {
+                                if (parsedMultiMaterial.id === parsedMesh.materialId) {
                                     for (var matIndex = 0; matIndex < parsedMultiMaterial.materials.length; matIndex++) {
                                         var subMatId = parsedMultiMaterial.materials[matIndex];
                                         loadedMaterialsIds.push(subMatId);

+ 3 - 2
src/Materials/babylon.material.js

@@ -260,8 +260,9 @@ var BABYLON;
             if (!parsedMaterial.customType) {
                 return BABYLON.StandardMaterial.Parse(parsedMaterial, scene, rootUrl);
             }
-            //TODO this is where custom materials are inspected and parsed.
-            return null;
+            var materialType = BABYLON.Tools.Instantiate(parsedMaterial.customType);
+            return materialType.Parse(parsedMaterial, scene, rootUrl);
+            ;
         };
         Material._TriangleFillMode = 0;
         Material._WireFrameFillMode = 1;

+ 2 - 2
src/Materials/babylon.material.ts

@@ -305,8 +305,8 @@
                 return StandardMaterial.Parse(parsedMaterial, scene, rootUrl);
             }
 
-            //TODO this is where custom materials are inspected and parsed.
-            return null;
+            var materialType = Tools.Instantiate(parsedMaterial.customType);
+            return materialType.Parse(parsedMaterial, scene, rootUrl);;
         }
     }
 } 

+ 11 - 0
src/Tools/babylon.tools.js

@@ -19,6 +19,17 @@ var BABYLON;
     var Tools = (function () {
         function Tools() {
         }
+        Tools.Instantiate = function (className) {
+            var arr = className.split(".");
+            var fn = (window || this);
+            for (var i = 0, len = arr.length; i < len; i++) {
+                fn = fn[arr[i]];
+            }
+            if (typeof fn !== "function") {
+                return null;
+            }
+            return fn;
+        };
         Tools.GetConstructorName = function (obj) {
             var str = (obj.prototype ? obj.prototype.constructor : obj.constructor).toString();
             var cname = str.match(/function\s(\w*)/)[1];

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1006 - 992
src/Tools/babylon.tools.ts