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 {