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