Browse Source

Fixed confusing naming and default to babylon loader if extension is not registered

Gary Hsu 9 years ago
parent
commit
7ac21a464f
1 changed files with 24 additions and 11 deletions
  1. 24 11
      src/Loading/babylon.sceneLoader.ts

+ 24 - 11
src/Loading/babylon.sceneLoader.ts

@@ -17,7 +17,7 @@
         loadAsync: (scene: Scene, data: string, rootUrl: string, onsuccess: () => void, onerror: () => void) => boolean;
     }
 
-    interface IRegisteredExtension {
+    interface IRegisteredPlugin {
         plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync;
         isBinary: boolean;
     }
@@ -70,9 +70,22 @@
         }
 
         // Members
-        private static _registeredExtensions: { [extension: string]: IRegisteredExtension } = {};
+        private static _registeredPlugins: { [extension: string]: IRegisteredPlugin } = {};
 
-        private static _getPluginForFilename(sceneFilename: string): IRegisteredExtension {
+        private static _getDefaultPlugin(): IRegisteredPlugin {
+            return SceneLoader._registeredPlugins[".babylon"];
+        }
+
+        private static _getPluginForExtension(extension: string): IRegisteredPlugin {
+            var registeredExtension = SceneLoader._registeredPlugins[extension];
+            if (registeredExtension) {
+                return registeredExtension;
+            }
+
+            return SceneLoader._getDefaultPlugin();
+        }
+
+        private static _getPluginForFilename(sceneFilename: string): IRegisteredPlugin {
             var dotPosition = sceneFilename.lastIndexOf(".");
 
             var queryStringPosition = sceneFilename.indexOf("?");
@@ -82,7 +95,7 @@
             }
 
             var extension = sceneFilename.substring(dotPosition, queryStringPosition).toLowerCase();
-            return SceneLoader._registeredExtensions[extension];
+            return SceneLoader._getPluginForExtension(extension);
         }
 
         // use babylon file loader directly if sceneFilename is prefixed with "data:"
@@ -96,13 +109,13 @@
 
         // Public functions
         public static GetPluginForExtension(extension: string): ISceneLoaderPlugin | ISceneLoaderPluginAsync {
-            return SceneLoader._registeredExtensions[extension].plugin;
+            return SceneLoader._getPluginForExtension(extension).plugin;
         }
 
         public static RegisterPlugin(plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync): void {
             if (typeof plugin.extensions === "string") {
                 var extension = <string>plugin.extensions;
-                SceneLoader._registeredExtensions[extension.toLowerCase()] = {
+                SceneLoader._registeredPlugins[extension.toLowerCase()] = {
                     plugin: plugin,
                     isBinary: false
                 };
@@ -110,7 +123,7 @@
             else {
                 var extensions = <ISceneLoaderPluginExtensions>plugin.extensions;
                 Object.keys(extensions).forEach(extension => {
-                    SceneLoader._registeredExtensions[extension.toLowerCase()] = {
+                    SceneLoader._registeredPlugins[extension.toLowerCase()] = {
                         plugin: plugin,
                         isBinary: extensions[extension].isBinary
                     };
@@ -129,7 +142,7 @@
                 return;
             }
 
-            var directLoad = this._getDirectLoad(sceneFilename);
+            var directLoad = SceneLoader._getDirectLoad(sceneFilename);
 
             var loadingToken = {};
             scene._addPendingData(loadingToken);
@@ -137,7 +150,7 @@
             var manifestChecked = success => {
                 scene.database = database;
 
-                var registeredExtension = directLoad ? this._registeredExtensions[".babylon"] : SceneLoader._getPluginForFilename(sceneFilename);
+                var registeredExtension = directLoad ? SceneLoader._getDefaultPlugin() : SceneLoader._getPluginForFilename(sceneFilename);
                 var plugin = registeredExtension.plugin;
                 var useArrayBuffer = registeredExtension.isBinary;
 
@@ -228,8 +241,8 @@
                 return;
             }
 
-            var directLoad = this._getDirectLoad(sceneFilename);
-            var registeredExtension = directLoad ? this._registeredExtensions[".babylon"] : SceneLoader._getPluginForFilename(sceneFilename);
+            var directLoad = SceneLoader._getDirectLoad(sceneFilename);
+            var registeredExtension = directLoad ? SceneLoader._getDefaultPlugin() : SceneLoader._getPluginForFilename(sceneFilename);
             var plugin = registeredExtension.plugin;
             var useArrayBuffer = registeredExtension.isBinary;
             var database;