Optimize extractBlocks
This commit is contained in:
parent
94e62f926a
commit
bde409bae2
@ -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)
|
||||
|
||||
@ -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: 隐藏点是否不返回null,true表示不返回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": "添加一个全局动画",
|
||||
|
||||
38
libs/maps.js
38
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上面
|
||||
|
||||
@ -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
5
runtime.d.ts
vendored
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user