var Loader = /** @constructor */ function() {

	this.env = null;

	this.init = function(loadPromise, basePath, config) {
		var me = this;
		return new Promise(function(resolve, reject) {
			var cfg = config || {};
			cfg['locateFile'] = Utils.createLocateRewrite(basePath);
			cfg['instantiateWasm'] = Utils.createInstantiatePromise(loadPromise);
			loadPromise = null;
			Godot(cfg).then(function(module) {
				me.env = module;
				resolve();
			});
		});
	}

	this.start = function(preloadedFiles, args) {
		var me = this;
		return new Promise(function(resolve, reject) {
			if (!me.env) {
				reject(new Error('The engine must be initialized before it can be started'));
			}
			preloadedFiles.forEach(function(file) {
				Utils.copyToFS(me.env['FS'], file.path, file.buffer);
			});
			preloadedFiles.length = 0; // Clear memory
			me.env['callMain'](args);
			resolve();
		});
	}
};