修复存档时地图压缩问题
This commit is contained in:
parent
555e11b751
commit
8547e946eb
19
libs/maps.js
19
libs/maps.js
@ -43,8 +43,7 @@ maps.prototype.loadFloor = function (floorId, map) {
|
|||||||
map = {"map": map};
|
map = {"map": map};
|
||||||
}
|
}
|
||||||
var content = {};
|
var content = {};
|
||||||
var notCopy = ["firstArrive", "eachArrive", "parallelDo", "map", "bgmap", "fgmap",
|
var notCopy = this._loadFloor_doNotCopy();
|
||||||
"events", "changeFloor", "afterBattle", "afterGetItem", "afterOpenDoor", "cannotMove"];
|
|
||||||
for (var name in floor) {
|
for (var name in floor) {
|
||||||
if (notCopy.indexOf(name) == -1 && floor[name] != null)
|
if (notCopy.indexOf(name) == -1 && floor[name] != null)
|
||||||
content[name] = core.clone(floor[name]);
|
content[name] = core.clone(floor[name]);
|
||||||
@ -60,6 +59,13 @@ maps.prototype.loadFloor = function (floorId, map) {
|
|||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maps.prototype._loadFloor_doNotCopy = function () {
|
||||||
|
return [
|
||||||
|
"firstArrive", "eachArrive", "blocks", "parallelDo", "map", "bgmap", "fgmap",
|
||||||
|
"events", "changeFloor", "afterBattle", "afterGetItem", "afterOpenDoor", "cannotMove"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/// 根据需求解析出blocks
|
/// 根据需求解析出blocks
|
||||||
maps.prototype.extractBlocks = function (map) {
|
maps.prototype.extractBlocks = function (map) {
|
||||||
map = map || core.status.floorId;
|
map = map || core.status.floorId;
|
||||||
@ -353,7 +359,7 @@ maps.prototype.saveMap = function (floorId) {
|
|||||||
var map = maps[floorId];
|
var map = maps[floorId];
|
||||||
var thisFloor = this._compressFloorData(map, core.floors[floorId]);
|
var thisFloor = this._compressFloorData(map, core.floors[floorId]);
|
||||||
if (map.blocks) {
|
if (map.blocks) {
|
||||||
var mapArr = this.compressMap(this._getMapArrayFromBlocks(map.blocks, map.width, map.height), floorId);
|
var mapArr = this.compressMap(this._getMapArrayFromBlocks(map.blocks, map.width, map.height, true), floorId);
|
||||||
if (mapArr != null) thisFloor.map = mapArr;
|
if (mapArr != null) thisFloor.map = mapArr;
|
||||||
}
|
}
|
||||||
return thisFloor;
|
return thisFloor;
|
||||||
@ -361,8 +367,9 @@ maps.prototype.saveMap = function (floorId) {
|
|||||||
|
|
||||||
maps.prototype._compressFloorData = function (map, floor) {
|
maps.prototype._compressFloorData = function (map, floor) {
|
||||||
var thisFloor = {};
|
var thisFloor = {};
|
||||||
|
var notCopy = this._loadFloor_doNotCopy();
|
||||||
for (var name in map) {
|
for (var name in map) {
|
||||||
if (name != 'blocks') {
|
if (notCopy.indexOf(name) == -1) {
|
||||||
var floorData = floor[name];
|
var floorData = floor[name];
|
||||||
if (!core.utils.same(map[name], floorData)) {
|
if (!core.utils.same(map[name], floorData)) {
|
||||||
thisFloor[name] = core.clone(map[name]);
|
thisFloor[name] = core.clone(map[name]);
|
||||||
@ -432,11 +439,12 @@ maps.prototype._updateMapArray = function (floorId, x, y) {
|
|||||||
else map.map[y][x] = block.id;
|
else map.map[y][x] = block.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
maps.prototype._getMapArrayFromBlocks = function (blockArray, width, height) {
|
maps.prototype._getMapArrayFromBlocks = function (blockArray, width, height, showDisable) {
|
||||||
var blocks = [];
|
var blocks = [];
|
||||||
for (var x = 0; x < height; x++) blocks.push(Array(width).fill(0));
|
for (var x = 0; x < height; x++) blocks.push(Array(width).fill(0));
|
||||||
|
|
||||||
blockArray.forEach(function (block) {
|
blockArray.forEach(function (block) {
|
||||||
|
if (showDisable || !block.disable)
|
||||||
blocks[block.y][block.x] = block.id;
|
blocks[block.y][block.x] = block.id;
|
||||||
});
|
});
|
||||||
return blocks;
|
return blocks;
|
||||||
@ -1714,6 +1722,7 @@ maps.prototype.hideBlock = function (x, y, floorId) {
|
|||||||
|
|
||||||
block.disable = true;
|
block.disable = true;
|
||||||
core.setMapBlockDisabled(floorId, block.x, block.y, true);
|
core.setMapBlockDisabled(floorId, block.x, block.y, true);
|
||||||
|
this._updateMapArray(floorId, block.x, block.y);
|
||||||
|
|
||||||
// 删除动画,清除地图
|
// 删除动画,清除地图
|
||||||
this._removeBlockFromMap(floorId, block);
|
this._removeBlockFromMap(floorId, block);
|
||||||
|
|||||||
@ -420,6 +420,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
|||||||
parent.appendChild(input2);
|
parent.appendChild(input2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
core.maps._loadFloor_doNotCopy = function () {
|
||||||
|
return [
|
||||||
|
"firstArrive", "eachArrive", "blocks", "parallelDo", "map", "bgmap", "fgmap", "bg2map", "fg2map",
|
||||||
|
"events", "changeFloor", "afterBattle", "afterGetItem", "afterOpenDoor", "cannotMove"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
////// 绘制背景和前景层 //////
|
////// 绘制背景和前景层 //////
|
||||||
core.maps._drawBg_draw = function (floorId, toDrawCtx, cacheCtx, config) {
|
core.maps._drawBg_draw = function (floorId, toDrawCtx, cacheCtx, config) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user