Spaces:
Running
Running
import jszip from 'jszip'; | |
import fileSaver from 'file-saver'; | |
export default class save { | |
constructor (options) { | |
this.scene = options.scene; | |
this.globals = this.scene.sys.game.globals; | |
this.city = this.scene.city; | |
} | |
export () { | |
this.data = { | |
info: { | |
name: this.city.name, | |
rotation: this.city.rotation, | |
waterLevel: this.city.waterLevel, | |
width: this.city.width, | |
height: this.city.height, | |
}, | |
cells: [] | |
}; | |
this.createCellList(); | |
this.downloadSave(); | |
} | |
createCellList () { | |
for (let x = 0; x < this.city.width; x++) { | |
for (let y = 0; y < this.city.height; y++) { | |
let mapCell = this.city.map.getCell(x, y); | |
let cell = { | |
x: mapCell.x, | |
y: mapCell.y, | |
z: mapCell.z, | |
cornersTopLeft: mapCell.properties.cornersTopLeft, | |
cornersTopRight: mapCell.properties.cornersTopRight, | |
cornersBottomLeft: mapCell.properties.cornersBottomLeft, | |
cornersBottomRight: mapCell.properties.cornersBottomRight, | |
conductive: mapCell.properties.conductive, | |
powered: mapCell.properties.powered, | |
piped: mapCell.properties.piped, | |
watered: mapCell.properties.watered, | |
rotate: mapCell.properties.rotate, | |
landValueMask: mapCell.properties.landValueMask, | |
saltWater: mapCell.properties.saltWater, | |
waterCovered: mapCell.properties.waterCovered, | |
missileSilo: mapCell.properties.missileSilo, | |
waterLevel: mapCell.properties.waterLevel, | |
surfaceWater: mapCell.properties.surfaceWater, | |
tunnelLevel: mapCell.properties.tunnelLevel, | |
altWaterCovered: mapCell.properties.altWaterCovered, | |
terrainWaterLevel: mapCell.properties.terrainWaterLevel, | |
tiles: { | |
building: mapCell.getBuildingTileId(), | |
zone: mapCell.getZoneTileId(), | |
water: mapCell.getWaterTileId(), | |
road: mapCell.getRoadTileId(), | |
rail: mapCell.getRailTileId(), | |
power: mapCell.getPowerTileId(), | |
highway: mapCell.getHighwayTileId(), | |
terrain: mapCell.getTerrainTileId(), | |
heightmap: mapCell.getHeightmapTileId(), | |
subway: mapCell.getSubwayTileId(), | |
pipe: mapCell.getPipeTileId(), | |
} | |
}; | |
this.data.cells.push(cell); | |
} | |
} | |
} | |
downloadSave () { | |
let json = JSON.stringify(this.data); | |
let zip = new jszip(); | |
let options = { | |
type: 'blob', | |
compression: 'DEFLATE', | |
compressionOptions: { | |
level: 9 | |
} | |
}; | |
zip.file('data.json', json); | |
zip.generateAsync(options).then((content) => { | |
fileSaver.saveAs(content, this.data.info.name + '.opensc2k'); | |
}); | |
} | |
} |