From 3d188025ca13e057f227ea125748bf14ee19b56a Mon Sep 17 00:00:00 2001 From: oc Date: Thu, 13 Sep 2018 00:22:20 +0800 Subject: [PATCH] set bg/fg map --- _server/blockly/MotaAction.g4 | 6 ++-- libs/control.js | 6 ---- libs/maps.js | 52 +++++++++++++++++++++++++++++------ libs/ui.js | 15 ++++------ styles.css | 2 +- 5 files changed, 54 insertions(+), 27 deletions(-) diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index db191884..d3d4d957 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -629,7 +629,7 @@ helpUrl : https://ckcz123.github.io/mota-js/#/event?id=changefloor%EF%BC%9A%E6%A default : ["MT1","0","0",null,500] colour : this.dataColor DirectionEx_List_0 = DirectionEx_List_0 && (', "direction": "'+DirectionEx_List_0+'"'); -Int_0 = Int_0 ?(', "time": '+Int_0):''; +Int_0 = (Int_0!=='') ?(', "time": '+Int_0):''; var floorstr = ''; if (PosString_0 && PosString_1) { floorstr = ', "loc": ['+PosString_0+','+PosString_1+']'; @@ -1474,8 +1474,10 @@ ActionParser.prototype.parse = function (obj,type) { obj.floorType=obj.floorId; delete obj.floorId; } + if (!this.isset(obj.time)) obj.time=500; return MotaActionBlocks['changeFloor_m'].xmlText([ - obj.floorType||'floorId',obj.floorId,obj.stair||'loc',obj.loc[0],obj.loc[1],obj.direction,obj.time||0,!this.isset(obj.portalWithoutTrigger) + obj.floorType||'floorId',obj.floorId,obj.stair||'loc',obj.loc[0],obj.loc[1],obj.direction, + obj.time,!this.isset(obj.portalWithoutTrigger) ]); case 'point': diff --git a/libs/control.js b/libs/control.js index a59adf5a..ff75214c 100644 --- a/libs/control.js +++ b/libs/control.js @@ -2933,8 +2933,6 @@ control.prototype.resize = function(clientWidth, clientHeight) { rules: { width: (canvasWidth - SPACE*2) + unit, height:(canvasWidth - SPACE*2) + unit, - top: (canvasTop + SPACE) + unit, - right: SPACE + unit, } }, { @@ -2942,8 +2940,6 @@ control.prototype.resize = function(clientWidth, clientHeight) { rules: { width: (canvasWidth - SPACE*2) + unit, height:(canvasWidth - SPACE*2) + unit, - top: (canvasTop + SPACE) + unit, - right: SPACE + unit, } }, { @@ -2951,8 +2947,6 @@ control.prototype.resize = function(clientWidth, clientHeight) { rules: { width: (canvasWidth - SPACE*2) + unit, height:(canvasWidth - SPACE*2) + unit, - top: (canvasTop + SPACE) + unit, - right: SPACE + unit, } }, { diff --git a/libs/maps.js b/libs/maps.js index ba9653c8..f206ab25 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -340,20 +340,54 @@ maps.prototype.drawBlock = function (block, animate, dx, dy) { } } +////// 背景/前景图块的绘制 ////// +maps.prototype.drawBgFgMap = function (floorId, canvas, name) { + var width = core.floors[floorId].width || 13; + var height = core.floors[floorId].height || 13; + + var groundId = core.floors[floorId].defaultGround || "ground"; + var blockIcon = core.material.icons.terrains[groundId]; + var blockImage = core.material.images.terrains; + + var getMapArray = function (name) { + var arr = core.floors[floorId][name+"map"] || []; + for (var x = 0; x < width; x++) { + for (var y = 0; y < height; y++) { + arr[y] = arr[y] || []; + if (core.hasFlag(name + "_" + floorId + "_" + x + "_" + y)) arr[y][x] = 0; + else arr[y][x] = core.getFlag(name + "v_" + floorId + "_" + x + "_" + y, arr[y][x] || 0); + } + } + return arr; + } + var arr = getMapArray(name); + for (var x = 0; x < width; x++) { + for (var y = 0; y < height; y++) { + if (name=='bg') + canvas.drawImage(blockImage, 0, blockIcon * 32, 32, 32, x * 32, y * 32, 32, 32); + if (arr[y][x]>0) { + var block = core.maps.initBlock(x, y, arr[y][x]); + if (core.isset(block.event)) { + var id = block.event.id, cls = block.event.cls; + if (cls == 'autotile') + core.drawAutotile(canvas, arr, block, 32, 0, 0); + else + canvas.drawImage(core.material.images[cls], 0, core.material.icons[cls][id] * 32, 32, 32, x * 32, y * 32, 32, 32); + } + } + } + } + +} + ////// 绘制某张地图 ////// maps.prototype.drawMap = function (mapName, callback) { core.clearMap('all'); core.removeGlobalAnimate(null, null, true); var drawBg = function(){ - var groundId = core.floors[mapName].defaultGround || "ground"; - var blockIcon = core.material.icons.terrains[groundId]; - var blockImage = core.material.images.terrains; - - for (var x = 0; x < core.bigmap.width; x++) { - for (var y = 0; y < core.bigmap.height; y++) { - core.canvas.bg.drawImage(blockImage, 0, blockIcon * 32, 32, 32, x * 32, y * 32, 32, 32); - } - } + + core.maps.drawBgFgMap(mapName, core.canvas.bg, "bg"); + core.maps.drawBgFgMap(mapName, core.canvas.event2, "event2"); var images = []; if (core.isset(core.floors[mapName].images)) { diff --git a/libs/ui.js b/libs/ui.js index ea88e6ed..1fcf48e2 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1826,15 +1826,9 @@ ui.prototype.drawThumbnail = function(floorId, canvas, blocks, x, y, size, cente tempCanvas.canvas.height = tempHeight; tempCanvas.clearRect(0, 0, tempWidth, tempHeight); - var groundId = core.floors[floorId].defaultGround || "ground"; - var blockIcon = core.material.icons.terrains[groundId]; - var blockImage = core.material.images.terrains; - // background - for (var j=0;j