Phaser.TilemapParser = { tileset: function (game, key, tileWidth, tileHeight, tileMargin, tileSpacing, rows, columns, total){ var img = game.cache.getTilesetImage(key); if (img === null ) { console.warn("Phaser.TilemapParser.tileSet: Invalid image key given"); return null ; } var width = img.width; var height = img.height; if (rows === -1) { rows = Math.round(width / tileWidth); } if (columns === -1) { columns = Math.round(height / tileHeight); } if (total === -1) { total = rows * columns; } if (width === 0 || height === 0 || width < tileWidth || height < tileHeight || total === 0) { console.warn("Phaser.TilemapParser.tileSet: width/height zero or width/height < given tileWidth/tileHeight"); return null ; } return new Phaser.Tileset(img, key, tileWidth, tileHeight, tileMargin, tileSpacing, rows, columns, total); } , parse: function (game, key){ var map = game.cache.getTilemapData(key); if (map) { if (map.format === Phaser.Tilemap.CSV) { return this.parseCSV(map.data); } else if (map.format === Phaser.Tilemap.TILED_JSON) { return this.parseTiledJSON(map.data); } } else { return { layers: [] , objects: [] , images: [] , tilesets: [] } ; } } , parseCSV: function (data){ data = data.trim(); var output = [] ; var rows = data.split("\n"); var height = _AN_Read_length("length", rows); var width = 0; for (var i = 0; i < _AN_Read_length("length", rows); i++ ){ output[i] = [] ; var column = rows[i].split(","); for (var c = 0; c < _AN_Read_length("length", column); c++ ){ output[i][c] = parseInt(column[c], 10); } if (width === 0) { width = _AN_Read_length("length", column); } } return [{ name: 'csv', width: width, height: height, alpha: 1, visible: true , indexes: [] , tileMargin: 0, tileSpacing: 0, data: output} ] ; } , parseTiledJSON: function (json){ if (json.orientation !== 'orthogonal') { console.warn('TilemapParser.parseTiledJSON: Only orthogonal map types are supported in this version of Phaser'); return null ; } var map = { } ; map.width = json.width; map.height = json.height; map.tileWidth = json.tilewidth; map.tileHeight = json.tileheight; map.orientation = json.orientation; map.version = json.version; map.properties = json.properties; map.widthInPixels = map.width * map.tileWidth; map.heightInPixels = map.height * map.tileHeight; var layers = [] ; for (var i = 0; i < _AN_Read_length('length', json.layers); i++ ){ if (json.layers[i].type !== 'tilelayer') { continue ; } var layer = { name: json.layers[i].name, x: json.layers[i].x, y: json.layers[i].y, width: json.layers[i].width, height: json.layers[i].height, widthInPixels: json.layers[i].width * json.tilewidth, heightInPixels: json.layers[i].height * json.tileheight, alpha: json.layers[i].opacity, visible: json.layers[i].visible, properties: { } , indexes: [] , callbacks: [] } ; if (json.layers[i].properties) { layer.properties = json.layers[i].properties; } var x = 0; var row = [] ; var output = [] ; for (var t = 0, len = _AN_Read_length('length', json.layers[i].data); t < len; t++ ){ if (json.layers[i].data[t] > 0) { row.push(new Phaser.Tile(layer, json.layers[i].data[t], x, (_AN_Read_length('length', output)), json.tilewidth, json.tileheight)); } else { row.push(null ); } x++ ; if (x === json.layers[i].width) { output.push(row); x = 0; row = [] ; } } layer.data = output; layers.push(layer); } map.layers = layers; var images = [] ; for (var i = 0; i < _AN_Read_length('length', json.layers); i++ ){ if (json.layers[i].type !== 'imagelayer') { continue ; } var image = { name: json.layers[i].name, image: json.layers[i].image, x: json.layers[i].x, y: json.layers[i].y, alpha: json.layers[i].opacity, visible: json.layers[i].visible, properties: { } } ; if (json.layers[i].properties) { image.properties = json.layers[i].properties; } images.push(image); } map.images = images; var objects = { } ; for (var i = 0; i < _AN_Read_length('length', json.layers); i++ ){ if (json.layers[i].type !== 'objectgroup') { continue ; } objects[json.layers[i].name] = [] ; for (var v = 0, len = _AN_Read_length('length', json.layers[i].objects); v < len; v++ ){ if (json.layers[i].objects[v].gid) { var object = { gid: json.layers[i].objects[v].gid, name: json.layers[i].objects[v].name, x: json.layers[i].objects[v].x, y: json.layers[i].objects[v].y, visible: json.layers[i].objects[v].visible, properties: json.layers[i].objects[v].properties} ; objects[json.layers[i].name].push(object); } } } map.objects = objects; var tilesets = [] ; for (var i = 0; i < _AN_Read_length('length', json.tilesets); i++ ){ var set = json.tilesets[i]; var newSet = new Phaser.Tileset(set.name, set.firstgid, set.tilewidth, set.tileheight, set.margin, set.spacing, set.properties); if (set.tileproperties) { newSet.tileProperties = set.tileproperties; } newSet.rows = (set.imageheight - set.margin) / (set.tileheight + set.spacing); newSet.columns = (set.imagewidth - set.margin) / (set.tilewidth + set.spacing); newSet.total = newSet.rows * newSet.columns; tilesets.push(newSet); } map.tilesets = tilesets; map.tiles = [] ; for (var i = 0; i < _AN_Read_length('length', map.tilesets); i++ ){ var set = map.tilesets[i]; var x = set.tileMargin; var y = set.tileMargin; var count = 0; var countX = 0; var countY = 0; for (var t = set.firstgid; t < set.firstgid + set.total; t++ ){ map.tiles[t] = [x, y, i] ; x += set.tileWidth + set.tileSpacing; count++ ; if (count === set.total) { break ; } countX++ ; if (countX === set.columns) { x = set.tileMargin; y += set.tileHeight + set.tileSpacing; countX = 0; countY++ ; if (countY === set.rows) { break ; } } } } return map; } } ;