compress & decompress map
This commit is contained in:
parent
d9c12a6b83
commit
f54db99c05
68
libs/maps.js
68
libs/maps.js
@ -23,7 +23,7 @@ maps.prototype.loadFloor = function (floorId, map) {
|
|||||||
if (core.isset(map[e])) content[e] = core.clone(map[e]);
|
if (core.isset(map[e])) content[e] = core.clone(map[e]);
|
||||||
else content[e] = core.clone(floor[e]);
|
else content[e] = core.clone(floor[e]);
|
||||||
});
|
});
|
||||||
map=map.map;
|
map=this.decompressMap(map.map, floorId);
|
||||||
var mapIntoBlocks = function(map,maps,floor,floorId){
|
var mapIntoBlocks = function(map,maps,floor,floorId){
|
||||||
var blocks = [];
|
var blocks = [];
|
||||||
var mw = core.floors[floorId].width || 13;
|
var mw = core.floors[floorId].width || 13;
|
||||||
@ -178,18 +178,59 @@ maps.prototype.initMaps = function (floorIds) {
|
|||||||
return maps;
|
return maps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////// 压缩地图
|
||||||
|
maps.prototype.compressMap = function (mapArr, floorId) {
|
||||||
|
if (core.utils.same(mapArr, core.floors[floorId].map)) return null;
|
||||||
|
|
||||||
|
var mw = core.floors[floorId].width || 13;
|
||||||
|
var mh = core.floors[floorId].height || 13;
|
||||||
|
for (var x=0;x<mh;x++) {
|
||||||
|
if (core.utils.same(mapArr[x], core.floors[floorId].map[x]||[])) {
|
||||||
|
// 没有改变的行直接删掉记成0
|
||||||
|
mapArr[x] = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (var y=0;y<mw;y++) {
|
||||||
|
if (mapArr[x][y] === (core.floors[floorId].map[x]||[])[y]) {
|
||||||
|
// 没有改变的数据记成-1
|
||||||
|
mapArr[x][y] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mapArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
////// 解压缩地图
|
||||||
|
maps.prototype.decompressMap = function (mapArr, floorId) {
|
||||||
|
if (!core.isset(mapArr)) return core.clone(core.floors[floorId].map);
|
||||||
|
|
||||||
|
var mw = core.floors[floorId].width || 13;
|
||||||
|
var mh = core.floors[floorId].height || 13;
|
||||||
|
for (var x=0;x<mh;x++) {
|
||||||
|
if (mapArr[x] === 0) {
|
||||||
|
mapArr[x] = core.clone(core.floors[floorId].map[x]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (var y=0;y<mw;y++) {
|
||||||
|
if (mapArr[x][y] === -1) {
|
||||||
|
mapArr[x][y] = core.floors[floorId].map[x][y];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mapArr;
|
||||||
|
}
|
||||||
|
|
||||||
////// 将当前地图重新变成数字,以便于存档 //////
|
////// 将当前地图重新变成数字,以便于存档 //////
|
||||||
maps.prototype.save = function(maps, floorId) {
|
maps.prototype.save = function(maps, floorId) {
|
||||||
if (!core.isset(floorId)) {
|
if (!core.isset(floorId)) {
|
||||||
var map = {};
|
var map = {};
|
||||||
for (var id in maps) {
|
for (var id in maps) {
|
||||||
map[id] = this.save(maps, id);
|
map[id] = this.save(maps, id);
|
||||||
// map.push(this.save(maps, id));
|
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
var thisFloor = core.clone(maps[floorId]);
|
|
||||||
var mw = core.floors[floorId].width || 13;
|
var mw = core.floors[floorId].width || 13;
|
||||||
var mh = core.floors[floorId].height || 13;
|
var mh = core.floors[floorId].height || 13;
|
||||||
|
|
||||||
@ -200,16 +241,27 @@ maps.prototype.save = function(maps, floorId) {
|
|||||||
blocks[x].push(0);
|
blocks[x].push(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
thisFloor.blocks.forEach(function (block) {
|
maps[floorId].blocks.forEach(function (block) {
|
||||||
if (core.isset(block.disable)) {
|
if (core.isset(block.disable)) {
|
||||||
if (!block.disable) blocks[block.y][block.x] = block.id+":t";
|
if (!block.disable) blocks[block.y][block.x] = block.id+":t";
|
||||||
else blocks[block.y][block.x] = block.id+":f";
|
else blocks[block.y][block.x] = block.id+":f";
|
||||||
}
|
}
|
||||||
else blocks[block.y][block.x] = block.id;
|
else blocks[block.y][block.x] = block.id;
|
||||||
});
|
});
|
||||||
delete thisFloor.blocks;
|
if (main.mode == 'editor') return blocks;
|
||||||
thisFloor.map = blocks;
|
|
||||||
return main.mode == 'editor' ? blocks : thisFloor;
|
var thisFloor = {};
|
||||||
|
for (var name in maps[floorId]) {
|
||||||
|
if (name != 'blocks') {
|
||||||
|
var floorData = core.floors[floorId][name];
|
||||||
|
if (!core.utils.same(maps[floorId][name], floorData)) {
|
||||||
|
thisFloor[name] = core.clone(maps[floorId][name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var map = this.compressMap(blocks, floorId);
|
||||||
|
if (map != null) thisFloor.map = map;
|
||||||
|
return thisFloor;
|
||||||
}
|
}
|
||||||
|
|
||||||
////// 更改地图画布的尺寸
|
////// 更改地图画布的尺寸
|
||||||
|
|||||||
@ -934,6 +934,8 @@ utils.prototype.hashCode = function (obj) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
utils.prototype.same = function (a, b) {
|
utils.prototype.same = function (a, b) {
|
||||||
|
if (!core.isset(a) && !core.isset(b)) return true;
|
||||||
|
if (!core.isset(a) || !core.isset(b)) return false;
|
||||||
if (a === b) return true;
|
if (a === b) return true;
|
||||||
if (a instanceof Array && b instanceof Array) {
|
if (a instanceof Array && b instanceof Array) {
|
||||||
if (a.length != b.length) return false;
|
if (a.length != b.length) return false;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user