gl-tiled
Version:
A Tiled editor renderer for WebGL.
93 lines (87 loc) • 4.05 kB
JavaScript
/*!
* gl-tiled - v1.0.0
* Compiled Fri, 29 May 2020 20:11:41 UTC
*
* gl-tiled is licensed under the MIT License.
* http://www.opensource.org/licenses/mit-license
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('resource-loader')) :
typeof define === 'function' && define.amd ? define(['exports', 'resource-loader'], factory) :
(global = global || self, factory((global.glTiled = global.glTiled || {}, global.glTiled['resource-loader'] = {}), global.Loader));
}(this, (function (exports, resourceLoader) { 'use strict';
/**
* Creates the tiled loader middleware function and returns it.
*
* @example
* const loader = new Loader();
*
* // add this middleware so that any map files we load will also have all their sub resources
* // loaded too.
* loader.use(glTiled['resource-loader'].tiledMiddlewareFactory());
* loader.add('lightworld', 'maps/lttp/lightworld/lightworld.json');
* loader.load(function ()
* {
* // create the tilemap using the loaded map data (`resources.lightworld.data`) and passing
* // all resources as the third parameter which is the resource cache the Tilemap object
* // will search for map resources in before trying to load them itself.
* var tilemap = new glTiled.Tilemap(gl, loader.resources.lightworld.data, loader.resources);
* })
*/
function tiledMiddlewareFactory() {
return function tiledMiddleware(resource, next) {
if (!resource.data
|| resource.type !== resourceLoader.ResourceType.Json
|| !resource.data.layers
|| !resource.data.tilesets) {
next();
return;
}
var urlDir = resource.url.replace(this.baseUrl, '');
urlDir = urlDir.substr(0, urlDir.lastIndexOf('/')) + '/';
var addOptions = {
url: '',
crossOrigin: resource.strategy.config.crossOrigin,
strategy: resourceLoader.ImageLoadStrategy,
metadata: resource.metadata ? resource.metadata.imageMetadata : undefined,
parentResource: resource,
};
for (var i = 0; i < resource.data.tilesets.length; ++i) {
var tileset = resource.data.tilesets[i];
if (tileset.image) {
if (!this.resources[tileset.image]) {
var options = Object.assign({}, addOptions);
options.name = tileset.image;
options.url = urlDir + tileset.image;
this.add(options);
}
}
if (resource.data.tiles) {
for (var key in resource.data.tiles) {
var tile = resource.data.tiles[key];
if (tile.image && !this.resources[tile.image]) {
var options = Object.assign({}, addOptions);
options.name = tile.image;
options.url = urlDir + tile.image;
this.add(options);
}
}
}
}
for (var i = 0; i < resource.data.layers.length; ++i) {
var layer = resource.data.layers[i];
if (layer.image) {
if (!this.resources[layer.image]) {
var options = Object.assign({}, addOptions);
options.name = layer.image;
options.url = urlDir + layer.image;
this.add(options);
}
}
}
next();
};
}
exports.tiledMiddlewareFactory = tiledMiddlewareFactory;
Object.defineProperty(exports, '__esModule', { value: true });
})));