diff --git a/_docs/api.md b/_docs/api.md
index f8268b3f..e7c3f2e2 100644
--- a/_docs/api.md
+++ b/_docs/api.md
@@ -1358,9 +1358,12 @@ canMoveDirectlyArray: fn(locs?: [[number]])
hideFloorImage: fn(loc?: [number]|[[number]], floorId?: string, callback?: fn())
隐藏一个楼层贴图
-extractBlocks: fn(map?: [[number]], flags?: flags)
+extractBlocks: fn(map?: ?)
根据需求解析出blocks
+extractBlocksForUI: fn(map?: ?, flags?: flags)
+根据需求为UI解析出blocks
+
getBlockId: fn(x: number, y: number, floorId?: string, showDisable?: bool) -> string
判定某个点的图块id
例如:if(core.getBlockId(x1, y1) != 'greenSlime' && core.getBlockId(x2, y2) != 'redSlime') core.openDoor(x3, y3); // 一个简单的机关门事件,打败或炸掉这一对绿头怪和红头怪就开门
@@ -1442,7 +1445,7 @@ ctx: 某画布的ctx,用于绘制缩略图,一般不需要
getBlock: fn(x: number, y: number, floorId?: string, showDisable?: bool) -> {index: number, block: block}
获得某个点的block
-initBlock: fn(x: number, y: number, id: string|number, addInfo?: bool, eventFloor?: ?, flags?: ?) -> block
+initBlock: fn(x: number, y: number, id: string|number, addInfo?: bool, eventFloor?: ?) -> block
初始化一个图块
addGlobalAnimate: fn(block?: block)
diff --git a/_server/CodeMirror/defs.js b/_server/CodeMirror/defs.js
index 3d6e0332..89942a05 100644
--- a/_server/CodeMirror/defs.js
+++ b/_server/CodeMirror/defs.js
@@ -3172,7 +3172,11 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [
},
"extractBlocks": {
"!doc": "根据需求解析出blocks",
- "!type": "fn(map?: [[number]], flags?: flags)"
+ "!type": "fn(map?: ?)"
+ },
+ "extractBlocksForUI": {
+ "!doc": "根据需求为UI解析出blocks",
+ "!type": "fn(map?: ?, flags?: ?)"
},
"getBlockId": {
"!doc": "判定某个点的图块id
例如:if(core.getBlockId(x1, y1) != 'greenSlime' && core.getBlockId(x2, y2) != 'redSlime') core.openDoor(x3, y3); // 一个简单的机关门事件,打败或炸掉这一对绿头怪和红头怪就开门
x: 横坐标
y: 纵坐标
floorId: 地图id,不填视为当前地图
showDisable: 隐藏点是否不返回null,true表示不返回null
返回值:图块id,该点无图块则返回null",
@@ -3240,7 +3244,7 @@ var terndefs_f6783a0a_522d_417e_8407_94c67b692e50 = [
},
"initBlock": {
"!doc": "初始化一个图块",
- "!type": "fn(x: number, y: number, id: string|number, addInfo?: bool, eventFloor?: ?, flags?: ?) -> block"
+ "!type": "fn(x: number, y: number, id: string|number, addInfo?: bool, eventFloor?: ?) -> block"
},
"addGlobalAnimate": {
"!doc": "添加一个全局动画",
diff --git a/libs/maps.js b/libs/maps.js
index 4703b7f9..7c064f8c 100644
--- a/libs/maps.js
+++ b/libs/maps.js
@@ -61,7 +61,7 @@ maps.prototype.loadFloor = function (floorId, map) {
}
/// 根据需求解析出blocks
-maps.prototype.extractBlocks = function (map, flags) {
+maps.prototype.extractBlocks = function (map) {
map = map || core.status.floorId;
if (typeof map == 'string') map = (core.status.maps||{})[map];
if (!map) return;
@@ -71,16 +71,16 @@ maps.prototype.extractBlocks = function (map, flags) {
return;
}
var floorId = map.floorId;
- map.blocks = this._mapIntoBlocks(this.decompressMap(map.map, floorId), core.floors[floorId], floorId, flags);
+ map.blocks = this._mapIntoBlocks(this.decompressMap(map.map, floorId), core.floors[floorId], floorId);
}
-maps.prototype._mapIntoBlocks = function (map, floor, floorId, flags) {
+maps.prototype._mapIntoBlocks = function (map, floor, floorId) {
var blocks = [];
var mw = core.floors[floorId].width;
var mh = core.floors[floorId].height;
for (var i = 0; i < mh; i++) {
for (var j = 0; j < mw; j++) {
- var block = this.initBlock(j, i, (map[i] || [])[j], true, floor, flags);
+ var block = this.initBlock(j, i, (map[i] || [])[j], true, floor);
if (block.id != 0 || block.event.trigger)
blocks.push(block);
}
@@ -88,6 +88,23 @@ maps.prototype._mapIntoBlocks = function (map, floor, floorId, flags) {
return blocks;
}
+maps.prototype.extractBlocksForUI = function (map, flags) {
+ if (!map || map.blocks) return;
+ if (map.deleted) return map.blocks = [];
+ var floorId = map.floorId;
+ var decompressed = this.decompressMap(map.map, floorId);
+ map.blocks = [];
+ var mw = core.floors[floorId].width;
+ var mh = core.floors[floorId].height;
+ for (var i = 0; i < mh; i++) {
+ for (var j = 0; j < mw; j++) {
+ var number = (decompressed[i] || [])[j] || 0;
+ if (!number || number == 17 || this.isMapBlockDisabled(floorId, i, j, flags)) continue;
+ map.blocks.push(this.initBlock(j, i, number));
+ }
+ }
+}
+
////// 从ID获得数字 //////
maps.prototype.getNumberById = function (id) {
id = this.getIdOfThis(id);
@@ -129,11 +146,10 @@ maps.prototype.getIdOfThis = function (id) {
}
////// 数字和ID的对应关系 //////
-maps.prototype.initBlock = function (x, y, id, addInfo, eventFloor, flags) {
+maps.prototype.initBlock = function (x, y, id, addInfo, eventFloor) {
var disable = null;
if (eventFloor != null) {
- if (flags == null) flags = (core.status.hero || {}).flags || {};
- disable = this.isMapBlockDisabled(eventFloor.floorId, x, y, flags);
+ disable = this.isMapBlockDisabled(eventFloor.floorId, x, y);
}
var block = {'x': x, 'y': y, 'id': id};
if (disable != null) block.disable = disable;
@@ -1373,10 +1389,10 @@ maps.prototype.drawThumbnail = function (floorId, blocks, options, toDraw) {
}
maps.prototype._drawThumbnail_drawTempCanvas = function (floorId, blocks, options) {
- core.extractBlocks(floorId);
- blocks = blocks || core.status.maps[floorId].blocks;
- options = options || {}
-
+ if (!blocks) {
+ core.extractBlocks(floorId);
+ blocks = core.status.maps[floorId].blocks;
+ }
var width = core.floors[floorId].width;
var height = core.floors[floorId].height;
// 绘制到tempCanvas上面
diff --git a/libs/ui.js b/libs/ui.js
index a1b5f5f3..89237ffa 100644
--- a/libs/ui.js
+++ b/libs/ui.js
@@ -2778,7 +2778,7 @@ ui.prototype._drawSLPanel_drawRecord = function(title, data, x, y, size, cho, hi
if (data && data.floorId) {
core.setTextAlign('ui', "center");
var map = core.maps.loadMap(data.maps, data.floorId);
- core.extractBlocks(map, data.hero.flags);
+ core.extractBlocksForUI(map, data.hero.flags);
core.drawThumbnail(data.floorId, map.blocks, {
heroLoc: data.hero.loc, heroIcon: data.hero.image, flags: data.hero.flags
}, {
diff --git a/runtime.d.ts b/runtime.d.ts
index 71d86617..d49316a6 100644
--- a/runtime.d.ts
+++ b/runtime.d.ts
@@ -1710,6 +1710,9 @@ declare class maps {
loadFloor(floorId?: string, map?: any): any
/** 根据需求解析出blocks */
+ extractBlocks(map?: any): void
+
+ /** 根据需求为UI解析出blocks */
extractBlocks(map?: any, flags?: any): void
/** 根据数字获得图块 */
@@ -1722,7 +1725,7 @@ declare class maps {
getIdOfThis(id?: string): string
/** 初始化一个图块 */
- initBlock(x?: number, y?: number, id?: string | number, addInfo?: boolean, eventFloor?: any, flags?: any): any
+ initBlock(x?: number, y?: number, id?: string | number, addInfo?: boolean, eventFloor?: any): any
/** 压缩地图 */
compressMap(mapArr?: any, floorId?: string): any