大地图选点;removeBlock自动元件

This commit is contained in:
ckcz123 2020-05-30 12:28:24 +08:00
parent 8409bb13ed
commit 217e9f8966
8 changed files with 96 additions and 42 deletions

View File

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

View File

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

View File

@ -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();
})

View File

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

View File

@ -374,6 +374,7 @@
<input type="button" style="padding:1px 6px" value="↑"/>
<input type="button" style="padding:1px 6px" value="↓"/>
<input type="button" style="padding:1px 1px" value="→"/>
<input type="button" value="大地图" style="margin-left: 5px"/>
</div>
<select id="selectFloor" style="clear:left"></select>
<input type="button" value="保存地图" id='saveFloor'/>
@ -557,6 +558,7 @@
<input type="button" value="↑"/>
<input type="button" value="↓"/>
<input type="button" value="→"/>
<input type="button" value="大地图" style="margin-left: 5px"/>
</div>
</div>
</div>

View File

@ -336,6 +336,7 @@
<input type="button" value="↑"/>
<input type="button" value="↓"/>
<input type="button" value="→"/>
<input type="button" value="大地图" style="margin-left: 5px"/>
</div>
<br>
<select id="selectFloor"></select>
@ -539,6 +540,7 @@
<input type="button" value="↑"/>
<input type="button" value="↓"/>
<input type="button" value="→"/>
<input type="button" value="切换大地图" style="margin-left: 10px;">
</div>
</div>
</div>

View File

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

View File

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