mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| var Module;
 | |
| if (typeof Module === 'undefined') Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()');
 | |
| if (!Module.expectedDataFileDownloads) {
 | |
|   Module.expectedDataFileDownloads = 0;
 | |
|   Module.finishedDataFileDownloads = 0;
 | |
| }
 | |
| Module.expectedDataFileDownloads++;
 | |
| (function() {
 | |
| 
 | |
|     function fetchRemotePackage(packageName, callback, errback) {
 | |
|       var xhr = new XMLHttpRequest();
 | |
|       xhr.open('GET', packageName, true);
 | |
|       xhr.responseType = 'arraybuffer';
 | |
|       xhr.onprogress = function(event) {
 | |
|         var url = packageName;
 | |
|         if (event.loaded && event.total) {
 | |
|           if (!xhr.addedTotal) {
 | |
|             xhr.addedTotal = true;
 | |
|             if (!Module.dataFileDownloads) Module.dataFileDownloads = {};
 | |
|             Module.dataFileDownloads[url] = {
 | |
|               loaded: event.loaded,
 | |
|               total: event.total
 | |
|             };
 | |
|           } else {
 | |
|             Module.dataFileDownloads[url].loaded = event.loaded;
 | |
|           }
 | |
|           var total = 0;
 | |
|           var loaded = 0;
 | |
|           var num = 0;
 | |
|           for (var download in Module.dataFileDownloads) {
 | |
|           var data = Module.dataFileDownloads[download];
 | |
|             total += data.total;
 | |
|             loaded += data.loaded;
 | |
|             num++;
 | |
|           }
 | |
|           total = Math.ceil(total * Module.expectedDataFileDownloads/num);
 | |
|           if (Module['setStatus']) Module['setStatus']('Downloading data... (' + loaded + '/' + total + ')');
 | |
|         } else if (!Module.dataFileDownloads) {
 | |
|           if (Module['setStatus']) Module['setStatus']('Downloading data...');
 | |
|         }
 | |
|       };
 | |
|       xhr.onload = function(event) {
 | |
|         var packageData = xhr.response;
 | |
|         callback(packageData);
 | |
|       };
 | |
|       xhr.send(null);
 | |
|     };
 | |
| 
 | |
|     function handleError(error) {
 | |
|       console.error('package error:', error);
 | |
|     };
 | |
| 
 | |
|       var fetched = null, fetchedCallback = null;
 | |
|       fetchRemotePackage('data.pck', function(data) {
 | |
|         if (fetchedCallback) {
 | |
|           fetchedCallback(data);
 | |
|           fetchedCallback = null;
 | |
|         } else {
 | |
|           fetched = data;
 | |
|         }
 | |
|       }, handleError);
 | |
| 
 | |
|   function runWithFS() {
 | |
| 
 | |
| function assert(check, msg) {
 | |
|   if (!check) throw msg + new Error().stack;
 | |
| }
 | |
| 
 | |
|     function DataRequest(start, end, crunched, audio) {
 | |
|       this.start = start;
 | |
|       this.end = end;
 | |
|       this.crunched = crunched;
 | |
|       this.audio = audio;
 | |
|     }
 | |
|     DataRequest.prototype = {
 | |
|       requests: {},
 | |
|       open: function(mode, name) {
 | |
|         this.name = name;
 | |
|         this.requests[name] = this;
 | |
|         Module['addRunDependency']('fp ' + this.name);
 | |
|       },
 | |
|       send: function() {},
 | |
|       onload: function() {
 | |
|         var byteArray = this.byteArray.subarray(this.start, this.end);
 | |
| 
 | |
|           this.finish(byteArray);
 | |
| 
 | |
|       },
 | |
|       finish: function(byteArray) {
 | |
|         var that = this;
 | |
|         Module['FS_createPreloadedFile'](this.name, null, byteArray, true, true, function() {
 | |
|           Module['removeRunDependency']('fp ' + that.name);
 | |
|         }, function() {
 | |
|           if (that.audio) {
 | |
|             Module['removeRunDependency']('fp ' + that.name); // workaround for chromium bug 124926 (still no audio with this, but at least we don't hang)
 | |
|           } else {
 | |
|             Module.printErr('Preloading file ' + that.name + ' failed');
 | |
|           }
 | |
|         }, false, true); // canOwn this data in the filesystem, it is a slide into the heap that will never change
 | |
|         this.requests[this.name] = null;
 | |
|       },
 | |
|     };
 | |
|       new DataRequest(0, $DPLEN, 0, 0).open('GET', '/data.pck');
 | |
| 
 | |
|     var PACKAGE_PATH;
 | |
|     if (typeof window === 'object') {
 | |
|       PACKAGE_PATH = window['encodeURIComponent'](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf('/')) + '/');
 | |
|     } else {
 | |
|       // worker
 | |
|       PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf('/')) + '/');
 | |
|     }
 | |
|     var PACKAGE_NAME = 'data.pck';
 | |
|     var REMOTE_PACKAGE_NAME = 'data.pck';
 | |
|     var PACKAGE_UUID = 'b39761ce-0348-4959-9b16-302ed8e1592e';
 | |
| 
 | |
|     function processPackageData(arrayBuffer) {
 | |
|       Module.finishedDataFileDownloads++;
 | |
|       assert(arrayBuffer, 'Loading data file failed.');
 | |
|       var byteArray = new Uint8Array(arrayBuffer);
 | |
|       var curr;
 | |
| 
 | |
|       // Reuse the bytearray from the XHR as the source for file reads.
 | |
|       DataRequest.prototype.byteArray = byteArray;
 | |
|           DataRequest.prototype.requests["/data.pck"].onload();
 | |
|           Module['removeRunDependency']('datafile_datapack');
 | |
| 
 | |
|     };
 | |
|     Module['addRunDependency']('datafile_datapack');
 | |
| 
 | |
|     if (!Module.preloadResults) Module.preloadResults = {};
 | |
| 
 | |
|       Module.preloadResults[PACKAGE_NAME] = {fromCache: false};
 | |
|       if (fetched) {
 | |
|         processPackageData(fetched);
 | |
|         fetched = null;
 | |
|       } else {
 | |
|         fetchedCallback = processPackageData;
 | |
|       }
 | |
| 
 | |
|   }
 | |
|   if (Module['calledRun']) {
 | |
|     runWithFS();
 | |
|   } else {
 | |
|     if (!Module['preRun']) Module['preRun'] = [];
 | |
|     Module["preRun"].push(runWithFS); // FS is not initialized yet, wait for it
 | |
|   }
 | |
| 
 | |
| })();
 | 
