diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index e25ee700..8b24cb2e 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -369,7 +369,7 @@ editor_blockly = function () { if (!isNaN(yv)) y = yv; if (arr[2] != null) floorId = block.getFieldValue(arr[2]) || floorId; } - editor.uievent.selectPoint(floorId, x, y, arr && arr[2] == null, function (fv, xv, yv) { + editor.uievent.selectPoint(floorId, x, y, false, function (fv, xv, yv) { if (!arr) return; if (arr[2] != null) { if (fv != editor.currentFloorId) block.setFieldValue(fv, arr[2]); diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 976a5455..895a07ca 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -772,6 +772,13 @@ editor_mappanel_wrapper = function (editor) { editor.uifunctions.viewportButtons_func = function () { var pressTimer = null; for (var ii = 0, node; node = editor.dom.viewportButtons.children[ii]; ii++) { + if (ii == 4) { + // 大地图 + node.onclick = function () { + editor.uievent.selectPoint(null, editor.pos.x, editor.pos.y, true); + } + continue; + } (function (x, y) { var move = function () { editor.moveViewport(x, y); diff --git a/_server/editor_table.js b/_server/editor_table.js index 2a0324f9..a4d63bff 100644 --- a/_server/editor_table.js +++ b/_server/editor_table.js @@ -502,7 +502,7 @@ editor_table_wrapper = function (editor) { } } catch (e) {} } - editor.uievent.selectPoint(editor.currentFloorId, x, y, true, function (floorId, x, y) { + editor.uievent.selectPoint(editor.currentFloorId, x, y, false, function (floorId, x, y) { input.value = '['+x+','+y+']'; input.onchange(); }) diff --git a/_server/editor_ui.js b/_server/editor_ui.js index 1753a49e..1a83af89 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -406,11 +406,9 @@ editor_ui_wrapper = function (editor) { uievent.drawPreviewUI(); } - uievent.selectPoint = function (floorId, x, y, hideFloor, callback) { - uievent.values.hideFloor = hideFloor; + uievent.selectPoint = function (floorId, x, y, bigmap, callback) { + uievent.values.bigmap = bigmap; uievent.values.size = editor.isMobile ? window.innerWidth / core.__SIZE__ : 32; - uievent.elements.selectPointBox.style.width = (uievent.values.size - 6) + "px"; - uievent.elements.selectPointBox.style.height = (uievent.values.size - 6) + "px"; uievent.isOpen = true; uievent.elements.div.style.display = 'block'; @@ -418,7 +416,6 @@ editor_ui_wrapper = function (editor) { uievent.elements.selectPoint.style.display = 'block'; uievent.elements.yes.style.display = 'inline'; uievent.elements.selectBackground.style.display = 'none'; - // uievent.elements.selectFloor.style.display = hideFloor ? 'none' : 'inline'; uievent.elements.selectFloor.style.display = 'inline'; uievent.elements.selectPointBox.style.display = 'block'; uievent.elements.canvas.style.display = 'block'; @@ -451,11 +448,26 @@ editor_ui_wrapper = function (editor) { core.drawThumbnail(uievent.values.floorId, null, null, { ctx: 'uievent', centerX: uievent.values.left + core.__HALF_SIZE__, - centerY: uievent.values.top + core.__HALF_SIZE__ + centerY: uievent.values.top + core.__HALF_SIZE__, all: uievent.values.bigmap }); } - uievent.elements.selectPointBox.style.left = uievent.values.size * (uievent.values.x - uievent.values.left) + "px"; - uievent.elements.selectPointBox.style.top = uievent.values.size * (uievent.values.y - uievent.values.top) + "px"; + // 计算size + uievent.values.boxSize = uievent.values.size * + (uievent.values.bigmap ? (core.__SIZE__ / Math.max(uievent.values.width, uievent.values.height)) : 1); + uievent.values.boxLeft = uievent.values.bigmap ? + (core.__PIXELS__ * Math.max(0, (1 - uievent.values.width / uievent.values.height) / 2)) : 0; + uievent.values.boxTop = uievent.values.bigmap ? + (core.__PIXELS__ * Math.max(0, (1 - uievent.values.height / uievent.values.width) / 2)) : 0; + + if (uievent.values.bigmap) { + uievent.elements.selectPointBox.style.left = uievent.values.boxSize * uievent.values.x + uievent.values.boxLeft + "px"; + uievent.elements.selectPointBox.style.top = uievent.values.boxSize * uievent.values.y + uievent.values.boxTop + "px"; + } else { + uievent.elements.selectPointBox.style.left = uievent.values.boxSize * (uievent.values.x - uievent.values.left) + "px"; + uievent.elements.selectPointBox.style.top = uievent.values.boxSize * (uievent.values.y - uievent.values.top) + "px"; + } + uievent.elements.selectPointBox.style.width = uievent.values.boxSize - 6 + "px"; + uievent.elements.selectPointBox.style.height = uievent.values.boxSize - 6 + "px"; } uievent.setPoint = function (floorId, x, y) { @@ -481,23 +493,39 @@ editor_ui_wrapper = function (editor) { uievent.elements.body.onclick = function (e) { if (uievent.mode != 'selectPoint') return; - uievent.values.x = uievent.values.left + Math.floor(e.offsetX / uievent.values.size); - uievent.values.y = uievent.values.top + Math.floor(e.offsetY / uievent.values.size); + if (uievent.values.bigmap) { + uievent.values.x = core.clamp(Math.floor((e.offsetX - uievent.values.boxLeft) / uievent.values.boxSize), 0, uievent.values.width - 1); + uievent.values.y = core.clamp(Math.floor((e.offsetY - uievent.values.boxTop) / uievent.values.boxSize), 0, uievent.values.height - 1); + } else { + uievent.values.x = uievent.values.left + Math.floor(e.offsetX / uievent.values.size); + uievent.values.y = uievent.values.top + Math.floor(e.offsetY / uievent.values.size); + } uievent.updateSelectPoint(false); } uievent.move = function (dx, dy) { if (uievent.mode != 'selectPoint') return; + if (uievent.values.bigmap) return; uievent.values.left = core.clamp(uievent.values.left + dx, 0, uievent.values.width - core.__SIZE__); uievent.values.top = core.clamp(uievent.values.top + dy, 0, uievent.values.height - core.__SIZE__); this.updateSelectPoint(true); }; + uievent.triggerBigmap = function () { + if (uievent.mode != 'selectPoint') return; + uievent.values.bigmap = !uievent.values.bigmap; + uievent.setPoint(uievent.values.floorId); + }; + (function () { var viewportButtons = uievent.elements.selectPointButtons; var pressTimer = null; for (var ii = 0, node; node = viewportButtons.children[ii]; ii++) { + if (ii == 4) { + node.onclick = uievent.triggerBigmap; + continue; + } (function (x, y) { var move = function () { uievent.move(x, y); @@ -527,7 +555,6 @@ editor_ui_wrapper = function (editor) { })(); uievent.elements.div.onmousewheel = function (e) { - // if (uievent.mode != 'selectPoint' || uievent.values.hideFloor) return; if (uievent.mode != 'selectPoint') return; var index = core.floorIds.indexOf(uievent.values.floorId); try { diff --git a/editor-mobile.html b/editor-mobile.html index 79466fcc..9f75f9bb 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -374,6 +374,7 @@ + @@ -557,6 +558,7 @@ + diff --git a/editor.html b/editor.html index 2e65817b..1cea6d1c 100644 --- a/editor.html +++ b/editor.html @@ -336,6 +336,7 @@ +
@@ -539,6 +540,7 @@ + diff --git a/libs/maps.js b/libs/maps.js index 9b18679f..2514e4bc 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -1439,10 +1439,14 @@ maps.prototype.showBlock = function (x, y, floorId) { block.disable = false; // 在本层,添加动画 if (floorId == core.status.floorId) { - core.drawBlock(block); - core.addGlobalAnimate(block); + if (block.event.cls == 'autotile') { + core.drawMap(); + } else { + core.drawBlock(block); + core.addGlobalAnimate(block); + core.updateStatusBar(); + } } - core.updateStatusBar(); } } @@ -1454,17 +1458,10 @@ maps.prototype.hideBlock = function (x, y, floorId) { var block = core.getBlock(x, y, floorId, true); if (block == null) return; // 不存在 - // 删除动画,清除地图 - if (floorId == core.status.floorId) { - core.removeGlobalAnimate(x, y); - core.clearMap('event', x * 32, y * 32, 32, 32); - var height = block.block.event.height || 32; - if (height > 32) - core.clearMap('event2', x * 32, y * 32 + 32 - height, 32, height - 32); - } - core.hideBlockByIndex(block.index, floorId); - core.updateStatusBar(); + + // 删除动画,清除地图 + this._removeBlockFromMap(floorId, block.block); } ////// 根据图块的索引来隐藏图块 ////// @@ -1485,6 +1482,20 @@ maps.prototype.hideBlockByIndexes = function (indexes, floorId) { }); } +maps.prototype._removeBlockFromMap = function (floorId, block) { + if (floorId != core.status.floorId) return; + if (block.event.cls == 'autotile') { + core.drawMap(); + } else { + core.removeGlobalAnimate(x, y); + core.clearMap('event', x * 32, y * 32, 32, 32); + var height = block.event.height || 32; + if (height > 32) + core.clearMap('event2', x * 32, y * 32 + 32 - height, 32, height - 32); + core.updateStatusBar(); + } +} + ////// 删除某个图块 ////// maps.prototype.removeBlock = function (x, y, floorId) { floorId = floorId || core.status.floorId; @@ -1493,17 +1504,10 @@ maps.prototype.removeBlock = function (x, y, floorId) { var block = core.getBlock(x, y, floorId, true); if (block == null) return false; // 不存在 - // 删除动画,清除地图 - if (floorId == core.status.floorId) { - core.removeGlobalAnimate(x, y); - core.clearMap('event', x * 32, y * 32, 32, 32); - var height = block.block.event.height || 32; - if (height > 32) - core.clearMap('event2', x * 32, y * 32 + 32 - height, 32, height - 32); - } - core.removeBlockByIndex(block.index, floorId); - core.updateStatusBar(); + + // 删除动画,清除地图 + this._removeBlockFromMap(floorId, block.block); return true; } @@ -1612,7 +1616,9 @@ maps.prototype.setBlock = function (number, x, y, floorId) { return; } var originBlock = core.getBlock(x, y, floorId, true); + var originEvent = originBlock == null ? null : originBlock.block.event; if (floorId == core.status.floorId) { + core.removeGlobalAnimate(x, y); core.clearMap('event', x * 32, y * 32, 32, 32); if (originBlock != null) { @@ -1629,11 +1635,21 @@ maps.prototype.setBlock = function (number, x, y, floorId) { originBlock.block.event = block.event; block = originBlock.block; } - if (floorId == core.status.floorId && !block.disable) { - core.drawBlock(block); - if (block.event.cls != 'autotile') - core.addGlobalAnimate(block); - core.updateStatusBar(); + if (floorId == core.status.floorId) { + // 有任何一个是autotile直接重绘地图 + if ((originEvent != null && originEvent.cls == 'autotile') || block.event.cls == 'autotile') { + core.drawMap(); + } else { + if (originEvent != null) { + this._removeBlockFromMap(floorId, {event: originEvent}); + } + if (!block.disable) { + core.drawBlock(block); + } + } + if (originEvent != null) { + this._removeBlockFromMap() + } } } diff --git a/libs/ui.js b/libs/ui.js index 0f940565..c2a247c1 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2984,7 +2984,7 @@ ui.prototype.drawHelp = function () { core.status.event.id = 'help'; core.lockControl(); core.setAlpha('ui', 1); - core.fillRect('ui', 0, 0, this.PIXEL, this.PIXEL, '#FFFFFF'); + core.fillRect('ui', 0, 0, this.PIXEL, this.PIXEL, '#000000'); core.drawImage('ui', core.material.images.keyboard, 32 * (this.HSIZE - 6), 32 * (this.HSIZE - 6)); } else {