compressMap __initFloorMap

This commit is contained in:
oc 2019-02-25 22:25:26 +08:00
parent 8170d30861
commit 4ae6decb8a

View File

@ -178,20 +178,42 @@ maps.prototype.initMaps = function (floorIds) {
return maps; return maps;
} }
maps.prototype.__initFloorMap = function (floorId) {
var map = 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 (!core.isset(map[x])) map[x] = [];
for (var y=0;y<mw;y++) {
if (!core.isset(map[x][y])) map[x][y]=0;
// check "disable"
var event = core.floors[floorId].events[y+","+x];
if (core.isset(event) && event.enable === false && main.mode == 'play') {
map[x][y] += ":f";
}
}
}
return map;
}
////// 压缩地图 ////// 压缩地图
maps.prototype.compressMap = function (mapArr, floorId) { maps.prototype.compressMap = function (mapArr, floorId) {
if (core.utils.same(mapArr, core.floors[floorId].map)) return null; var floorMap = this.__initFloorMap(floorId);
if (core.utils.same(mapArr, floorMap)) return null;
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;
for (var x=0;x<mh;x++) { for (var x=0;x<mh;x++) {
if (core.utils.same(mapArr[x], core.floors[floorId].map[x]||[])) { if (core.utils.same(mapArr[x], floorMap[x])) {
// 没有改变的行直接删掉记成0 // 没有改变的行直接删掉记成0
mapArr[x] = 0; mapArr[x] = 0;
} }
else { else {
for (var y=0;y<mw;y++) { for (var y=0;y<mw;y++) {
if (mapArr[x][y] === (core.floors[floorId].map[x]||[])[y]) { if (mapArr[x][y] === floorMap[x][y]) {
// 没有改变的数据记成-1 // 没有改变的数据记成-1
mapArr[x][y] = -1; mapArr[x][y] = -1;
} }
@ -203,19 +225,19 @@ maps.prototype.compressMap = function (mapArr, floorId) {
////// 解压缩地图 ////// 解压缩地图
maps.prototype.decompressMap = function (mapArr, floorId) { maps.prototype.decompressMap = function (mapArr, floorId) {
if (!core.isset(mapArr)) return core.clone(core.floors[floorId].map); var floorMap = this.__initFloorMap(floorId);
if (!core.isset(mapArr)) return floorMap;
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;
for (var x=0;x<mh;x++) { for (var x=0;x<mh;x++) {
var floorMap = core.floors[floorId].map[x] || [];
if (mapArr[x] === 0) { if (mapArr[x] === 0) {
mapArr[x] = floorMap; mapArr[x] = floorMap[x];
} }
else { else {
for (var y=0;y<mw;y++) { for (var y=0;y<mw;y++) {
if (mapArr[x][y] === -1) { if (mapArr[x][y] === -1) {
mapArr[x][y] = floorMap[y] || 0; mapArr[x][y] = floorMap[x][y];
} }
} }
} }