babylon.sceneLoader.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. var BABYLON;
  2. (function (BABYLON) {
  3. var SceneLoader = (function () {
  4. function SceneLoader() {
  5. }
  6. Object.defineProperty(SceneLoader, "ForceFullSceneLoadingForIncremental", {
  7. get: function () {
  8. return SceneLoader._ForceFullSceneLoadingForIncremental;
  9. },
  10. set: function (value) {
  11. SceneLoader._ForceFullSceneLoadingForIncremental = value;
  12. },
  13. enumerable: true,
  14. configurable: true
  15. });
  16. Object.defineProperty(SceneLoader, "ShowLoadingScreen", {
  17. get: function () {
  18. return SceneLoader._ShowLoadingScreen;
  19. },
  20. set: function (value) {
  21. SceneLoader._ShowLoadingScreen = value;
  22. },
  23. enumerable: true,
  24. configurable: true
  25. });
  26. SceneLoader._getPluginForFilename = function (sceneFilename) {
  27. var dotPosition = sceneFilename.lastIndexOf(".");
  28. var queryStringPosition = sceneFilename.indexOf("?");
  29. if (queryStringPosition === -1) {
  30. queryStringPosition = sceneFilename.length;
  31. }
  32. var extension = sceneFilename.substring(dotPosition, queryStringPosition).toLowerCase();
  33. for (var index = 0; index < this._registeredPlugins.length; index++) {
  34. var plugin = this._registeredPlugins[index];
  35. if (plugin.extensions.indexOf(extension) !== -1) {
  36. return plugin;
  37. }
  38. }
  39. return this._registeredPlugins[this._registeredPlugins.length - 1];
  40. };
  41. // Public functions
  42. SceneLoader.RegisterPlugin = function (plugin) {
  43. plugin.extensions = plugin.extensions.toLowerCase();
  44. SceneLoader._registeredPlugins.push(plugin);
  45. };
  46. SceneLoader.ImportMesh = function (meshesNames, rootUrl, sceneFilename, scene, onsuccess, progressCallBack, onerror) {
  47. if (sceneFilename.substr && sceneFilename.substr(0, 1) === "/") {
  48. BABYLON.Tools.Error("Wrong sceneFilename parameter");
  49. return;
  50. }
  51. var manifestChecked = function (success) {
  52. scene.database = database;
  53. var plugin = SceneLoader._getPluginForFilename(sceneFilename);
  54. var importMeshFromData = function (data) {
  55. var meshes = [];
  56. var particleSystems = [];
  57. var skeletons = [];
  58. try {
  59. if (!plugin.importMesh(meshesNames, scene, data, rootUrl, meshes, particleSystems, skeletons)) {
  60. if (onerror) {
  61. onerror(scene, 'unable to load the scene');
  62. }
  63. return;
  64. }
  65. }
  66. catch (e) {
  67. if (onerror) {
  68. onerror(scene, e);
  69. }
  70. return;
  71. }
  72. if (onsuccess) {
  73. scene.importedMeshesFiles.push(rootUrl + sceneFilename);
  74. onsuccess(meshes, particleSystems, skeletons);
  75. }
  76. };
  77. if (sceneFilename.substr && sceneFilename.substr(0, 5) === "data:") {
  78. // Direct load
  79. importMeshFromData(sceneFilename.substr(5));
  80. return;
  81. }
  82. BABYLON.Tools.LoadFile(rootUrl + sceneFilename, function (data) {
  83. importMeshFromData(data);
  84. }, progressCallBack, database);
  85. };
  86. // Checking if a manifest file has been set for this scene and if offline mode has been requested
  87. var database = new BABYLON.Database(rootUrl + sceneFilename, manifestChecked);
  88. };
  89. /**
  90. * Load a scene
  91. * @param rootUrl a string that defines the root url for scene and resources
  92. * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
  93. * @param engine is the instance of BABYLON.Engine to use to create the scene
  94. */
  95. SceneLoader.Load = function (rootUrl, sceneFilename, engine, onsuccess, progressCallBack, onerror) {
  96. SceneLoader.Append(rootUrl, sceneFilename, new BABYLON.Scene(engine), onsuccess, progressCallBack, onerror);
  97. };
  98. /**
  99. * Append a scene
  100. * @param rootUrl a string that defines the root url for scene and resources
  101. * @param sceneFilename a string that defines the name of the scene file. can start with "data:" following by the stringified version of the scene
  102. * @param scene is the instance of BABYLON.Scene to append to
  103. */
  104. SceneLoader.Append = function (rootUrl, sceneFilename, scene, onsuccess, progressCallBack, onerror) {
  105. if (sceneFilename.substr && sceneFilename.substr(0, 1) === "/") {
  106. BABYLON.Tools.Error("Wrong sceneFilename parameter");
  107. return;
  108. }
  109. var plugin = this._getPluginForFilename(sceneFilename.name || sceneFilename);
  110. var database;
  111. if (SceneLoader.ShowLoadingScreen) {
  112. scene.getEngine().displayLoadingUI();
  113. }
  114. var loadSceneFromData = function (data) {
  115. scene.database = database;
  116. if (!plugin.load(scene, data, rootUrl)) {
  117. if (onerror) {
  118. onerror(scene);
  119. }
  120. scene.getEngine().hideLoadingUI();
  121. return;
  122. }
  123. if (onsuccess) {
  124. onsuccess(scene);
  125. }
  126. if (SceneLoader.ShowLoadingScreen) {
  127. scene.executeWhenReady(function () {
  128. scene.getEngine().hideLoadingUI();
  129. });
  130. }
  131. };
  132. var manifestChecked = function (success) {
  133. BABYLON.Tools.LoadFile(rootUrl + sceneFilename, loadSceneFromData, progressCallBack, database);
  134. };
  135. if (sceneFilename.substr && sceneFilename.substr(0, 5) === "data:") {
  136. // Direct load
  137. loadSceneFromData(sceneFilename.substr(5));
  138. return;
  139. }
  140. if (rootUrl.indexOf("file:") === -1) {
  141. // Checking if a manifest file has been set for this scene and if offline mode has been requested
  142. database = new BABYLON.Database(rootUrl + sceneFilename, manifestChecked);
  143. }
  144. else {
  145. BABYLON.Tools.ReadFile(sceneFilename, loadSceneFromData, progressCallBack);
  146. }
  147. };
  148. // Flags
  149. SceneLoader._ForceFullSceneLoadingForIncremental = false;
  150. SceneLoader._ShowLoadingScreen = true;
  151. // Members
  152. SceneLoader._registeredPlugins = new Array();
  153. return SceneLoader;
  154. })();
  155. BABYLON.SceneLoader = SceneLoader;
  156. ;
  157. })(BABYLON || (BABYLON = {}));
  158. //# sourceMappingURL=babylon.sceneLoader.js.map