Optimize extractBlocks

This commit is contained in:
ckcz123 2020-07-03 17:06:26 +08:00
parent 94e62f926a
commit bde409bae2
5 changed files with 43 additions and 17 deletions

View File

@ -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)

View File

@ -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<br/>例如if(core.getBlockId(x1, y1) != 'greenSlime' && core.getBlockId(x2, y2) != 'redSlime') core.openDoor(x3, y3); // 一个简单的机关门事件,打败或炸掉这一对绿头怪和红头怪就开门<br/>x: 横坐标<br/>y: 纵坐标<br/>floorId: 地图id不填视为当前地图<br/>showDisable: 隐藏点是否不返回nulltrue表示不返回null<br/>返回值图块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": "添加一个全局动画",

View File

@ -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上面

View File

@ -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
}, {

5
runtime.d.ts vendored
View File

@ -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