- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
import * as fileUtil from "../../utils/file.js";
import level from "../../level/level.js";
import * as TMXUtils from "../../level/tiled/TMXUtils.js";
import { tmxList } from "../cache.js";
import { fetchData } from "./fetchdata.js";
/**
* parse/preload a TMX file
* @param {loader.Asset} data - asset data
* @param {Function} [onload] - function to be called when the asset is loaded
* @param {Function} [onload] - function to be called when the resource is loaded
* @param {Function} [onerror] - function to be called in case of error
* @param {Object} [settings] - Additional settings to be passed when loading the asset
* @returns {number} the amount of corresponding resource parsed/preloaded
* @ignore
*/
export function preloadTMX(tmxData, onload, onerror, settings) {
if (typeof tmxList[tmxData.name] !== "undefined") {
// already loaded
return 0;
}
/**
* @ignore
*/
function addToTMXList(data) {
// set the TMX content
tmxList[tmxData.name] = data;
// add the tmx to the level manager
if (tmxData.type === "tmx") {
level.add(tmxData.type, tmxData.name);
}
}
//if the data is in the tmxData object, don't get it via a XMLHTTPRequest
if (tmxData.data) {
addToTMXList(tmxData.data);
if (typeof onload === "function") {
onload();
}
return;
}
fetchData(tmxData.src, "text", settings)
.then(response => {
if (typeof response !== "string") {
throw new Error("Invalid response type");
}
let result;
switch (fileUtil.getExtension(tmxData.src)) {
case "xml":
case "tmx":
case "tsx": {
const parser = new DOMParser();
if (typeof parser.parseFromString === "undefined") {
throw new Error(
"XML file format loading supported, use the JSON file format instead"
);
}
const xmlDoc = parser.parseFromString(response, "text/xml");
const data = TMXUtils.parse(xmlDoc);
result = data.map || data.tilesets[0] || data;
break;
}
case "json":
case "tmj":
case "tsj":
result = JSON.parse(response);
break;
default:
throw new Error(`TMX file format not supported: ${fileUtil.getExtension(tmxData.src)}`);
}
addToTMXList(result);
if (typeof onload === "function") {
onload();
}
})
.catch(error => {
if (typeof onerror === "function") {
onerror(error);
}
});
return 1;
}