diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 4c6d5257..27575f29 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -627,8 +627,8 @@ function omitedcheckUpdateFunction(event) { // console.log(obj); if (obj.length > 0 && b.type.startsWith(obj[0].type)) { if (b.type == 'previewUI_s') - uievent.previewUI(obj[0].action); - else uievent.previewUI([obj[0]]); + editor.uievent.previewUI(obj[0].action); + else editor.uievent.previewUI([obj[0]]); } } catch (e) {main.log(e);} return true; @@ -790,7 +790,7 @@ function omitedcheckUpdateFunction(event) { if (!isNaN(yv)) y = yv; if (arr[2] != null) floorId = block.getFieldValue(arr[2]) || floorId; } - uievent.selectPoint(floorId, x, y, arr && arr[2] == null, function (fv, xv, yv) { + editor.uievent.selectPoint(floorId, x, y, arr && arr[2] == null, 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_unsorted_3.js b/_server/editor_legacy.js similarity index 61% rename from _server/editor_unsorted_3.js rename to _server/editor_legacy.js index 32cdcf20..1313ebbc 100644 --- a/_server/editor_unsorted_3.js +++ b/_server/editor_legacy.js @@ -1,4 +1,6 @@ - +// 由于历史遗留原因, 以下变量作为全局变量使用 +// exportMap mapEditArea pout mapEditArea copyMap clearMapButton deleteMap printf printe tip selectBox +// 除对这些量的功能修改外, 误在此文件中增加新变量或函数 exportMap = document.getElementById('exportMap') exportMap.isExport=false exportMap.onclick=function(){ @@ -373,201 +375,4 @@ selectBox.isSelected=function(value){ return selectBox._isSelected } -// ------ UI预览 & 地图选点相关 ------ // - -uievent = { - elements: {}, - values: {}, - isOpen: false, - mode: "" -}; - -uievent.elements.div = document.getElementById('uieventDiv'); -uievent.elements.title = document.getElementById('uieventTitle'); -uievent.elements.yes = document.getElementById('uieventYes'); -uievent.elements.no = document.getElementById('uieventNo'); -uievent.elements.selectBackground = document.getElementById('uieventBackground'); -uievent.elements.selectPoint = document.getElementById('selectPoint'); -uievent.elements.selectFloor = document.getElementById('selectPointFloor'); -uievent.elements.selectPointBox = document.getElementById('selectPointBox'); -uievent.elements.body = document.getElementById('uieventBody'); -uievent.elements.selectPointButtons = document.getElementById('selectPointButtons'); - -uievent.confirm = function () { - var callback = uievent.values.callback, floorId = uievent.values.floorId, - x = uievent.values.x, y = uievent.values.y; - uievent.close(); - if (callback) { - callback(floorId, x, y); - } -} -uievent.elements.yes.onclick = uievent.confirm; - -uievent.close = function () { - uievent.isOpen = false; - uievent.elements.div.style.display = 'none'; - uievent.values = {}; -} -uievent.elements.no.onclick = uievent.close; - -uievent.elements.selectBackground.onchange = function () { - uievent.drawPreviewUI(); -} - -uievent.drawPreviewUI = function () { - core.setAlpha('uievent', 1); - core.clearMap('uievent'); - - // 绘制UI - var background = uievent.elements.selectBackground.value; - if (background == 'thumbnail') { - core.drawThumbnail(editor.currentFloorId, null, {}, 'uievent'); - } - else { - core.fillRect('uievent', 0, 0, core.__PIXELS__, core.__PIXELS__, background); - } - - if (uievent.values.list instanceof Array) { - uievent.values.list.forEach(function (data) { - var type = data.type; - if (!type || !core.ui["_uievent_"+type]) return; - core.ui["_uievent_"+type](data); - }) - } -} - -uievent.previewUI = function (list) { - uievent.isOpen = true; - uievent.elements.div.style.display = 'block'; - uievent.mode = 'previewUI'; - uievent.elements.selectPoint.style.display = 'none'; - uievent.elements.yes.style.display = 'none'; - uievent.elements.title.innerText = 'UI绘制预览'; - uievent.elements.selectBackground.style.display = 'inline'; - uievent.elements.selectBackground.value = 'thumbnail'; - uievent.elements.selectPointBox.style.display = 'none'; - - uievent.values.list = list; - uievent.drawPreviewUI(); -} - -uievent.selectPoint = function (floorId, x, y, hideFloor, callback) { - uievent.values.hideFloor = hideFloor; - uievent.values.callback = callback; - 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'; - uievent.mode = 'selectPoint'; - 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.selectPointBox.style.display = 'block'; - - // Append children - var floors = ""; - core.floorIds.forEach(function (f) { - floors += ""; - }) - uievent.elements.selectFloor.innerHTML = floors; - - this.setPoint(floorId || editor.currentFloorId, core.calValue(x) || 0, core.calValue(y) || 0); -} - -uievent.updateSelectPoint = function (redraw) { - uievent.elements.title.innerText = '地图选点 ('+uievent.values.x+","+uievent.values.y+')'; - if (redraw) { - core.setAlpha('uievent', 1); - core.clearMap('uievent'); - core.drawThumbnail(uievent.values.floorId, null, null, - {ctx: 'uievent', centerX: uievent.values.left + core.__HALF_SIZE__, - centerY: uievent.values.top + core.__HALF_SIZE__}); - } - 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"; -} - -uievent.setPoint = function (floorId, x, y) { - if (core.floorIds.indexOf(floorId) == -1) floorId = editor.currentFloorId; - uievent.values.floorId = floorId; - uievent.elements.selectFloor.value = floorId; - uievent.values.x = x != null ? x : ( uievent.values.x || 0); - uievent.values.y = y != null ? y : ( uievent.values.y || 0); - uievent.values.width = core.floors[uievent.values.floorId].width || core.__SIZE__; - uievent.values.height = core.floors[uievent.values.floorId].height || core.__SIZE__; - uievent.values.left = core.clamp(uievent.values.x - core.__HALF_SIZE__, 0, uievent.values.width - core.__SIZE__); - uievent.values.top = core.clamp(uievent.values.y - core.__HALF_SIZE__, 0, uievent.values.height - core.__SIZE__); - uievent.updateSelectPoint(true); -} - -uievent.elements.selectFloor.onchange = function () { - uievent.setPoint(uievent.elements.selectFloor.value); -} - -uievent.elements.selectPointBox.onclick = function (e) { - e.stopPropagation(); -} - -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); - uievent.updateSelectPoint(false); -} - -uievent.move = function (dx, dy) { - if (uievent.mode != 'selectPoint') 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); -}; - -(function() { - - var viewportButtons = uievent.elements.selectPointButtons; - var pressTimer = null; - for(var ii=0,node;node=viewportButtons.children[ii];ii++){ - (function(x,y){ - var move = function () { - uievent.move(x, y); - } - node.onmousedown = function () { - clearTimeout(pressTimer); - pressTimer = setTimeout(function () { - pressTimer = -1; - var f = function () { - if (pressTimer != null) { - move(); - setTimeout(f, 150); - } - } - f(); - }, 500); - }; - node.onmouseup = function () { - if (pressTimer > 0) { - clearTimeout(pressTimer); - move(); - } - pressTimer = null; - } - })([-1,0,0,1][ii],[0,-1,1,0][ii]); - } -})(); - -uievent.elements.div.onmousewheel = function (e) { - if (uievent.mode != 'selectPoint' || uievent.values.hideFloor) return; - var index = core.floorIds.indexOf(uievent.values.floorId); - try { - if (e.wheelDelta) - index+=Math.sign(e.wheelDelta); - else if (e.detail) - index+=Math.sign(e.detail); - } catch (ee) { main.log(ee); } - index = core.clamp(index, 0, core.floorIds.length - 1); - uievent.setPoint(core.floorIds[index]); -} - +// 修改此文件前先看文件开头的说明 \ No newline at end of file diff --git a/_server/editor_ui.js b/_server/editor_ui.js index 98a88073..8c295a72 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -263,4 +263,207 @@ editor_ui_wrapper = function (editor) { ); } + + // ------ UI预览 & 地图选点相关 ------ // + + var uievent = { + elements: {}, + values: {}, + isOpen: false, + mode: "" + }; + + uievent.elements.div = document.getElementById('uieventDiv'); + uievent.elements.title = document.getElementById('uieventTitle'); + uievent.elements.yes = document.getElementById('uieventYes'); + uievent.elements.no = document.getElementById('uieventNo'); + uievent.elements.selectBackground = document.getElementById('uieventBackground'); + uievent.elements.selectPoint = document.getElementById('selectPoint'); + uievent.elements.selectFloor = document.getElementById('selectPointFloor'); + uievent.elements.selectPointBox = document.getElementById('selectPointBox'); + uievent.elements.body = document.getElementById('uieventBody'); + uievent.elements.selectPointButtons = document.getElementById('selectPointButtons'); + + uievent.confirm = function () { + var callback = uievent.values.callback, floorId = uievent.values.floorId, + x = uievent.values.x, y = uievent.values.y; + uievent.close(); + if (callback) { + callback(floorId, x, y); + } + } + uievent.elements.yes.onclick = uievent.confirm; + + uievent.close = function () { + uievent.isOpen = false; + uievent.elements.div.style.display = 'none'; + uievent.values = {}; + } + uievent.elements.no.onclick = uievent.close; + + uievent.elements.selectBackground.onchange = function () { + uievent.drawPreviewUI(); + } + + uievent.drawPreviewUI = function () { + core.setAlpha('uievent', 1); + core.clearMap('uievent'); + + // 绘制UI + var background = uievent.elements.selectBackground.value; + if (background == 'thumbnail') { + core.drawThumbnail(editor.currentFloorId, null, {}, 'uievent'); + } + else { + core.fillRect('uievent', 0, 0, core.__PIXELS__, core.__PIXELS__, background); + } + + if (uievent.values.list instanceof Array) { + uievent.values.list.forEach(function (data) { + var type = data.type; + if (!type || !core.ui["_uievent_" + type]) return; + core.ui["_uievent_" + type](data); + }) + } + } + + uievent.previewUI = function (list) { + uievent.isOpen = true; + uievent.elements.div.style.display = 'block'; + uievent.mode = 'previewUI'; + uievent.elements.selectPoint.style.display = 'none'; + uievent.elements.yes.style.display = 'none'; + uievent.elements.title.innerText = 'UI绘制预览'; + uievent.elements.selectBackground.style.display = 'inline'; + uievent.elements.selectBackground.value = 'thumbnail'; + uievent.elements.selectPointBox.style.display = 'none'; + + uievent.values.list = list; + uievent.drawPreviewUI(); + } + + uievent.selectPoint = function (floorId, x, y, hideFloor, callback) { + uievent.values.hideFloor = hideFloor; + uievent.values.callback = callback; + 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'; + uievent.mode = 'selectPoint'; + 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.selectPointBox.style.display = 'block'; + + // Append children + var floors = ""; + core.floorIds.forEach(function (f) { + floors += ""; + }) + uievent.elements.selectFloor.innerHTML = floors; + + this.setPoint(floorId || editor.currentFloorId, core.calValue(x) || 0, core.calValue(y) || 0); + } + + uievent.updateSelectPoint = function (redraw) { + uievent.elements.title.innerText = '地图选点 (' + uievent.values.x + "," + uievent.values.y + ')'; + if (redraw) { + core.setAlpha('uievent', 1); + core.clearMap('uievent'); + core.drawThumbnail(uievent.values.floorId, null, null, + { + ctx: 'uievent', centerX: uievent.values.left + core.__HALF_SIZE__, + centerY: uievent.values.top + core.__HALF_SIZE__ + }); + } + 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"; + } + + uievent.setPoint = function (floorId, x, y) { + if (core.floorIds.indexOf(floorId) == -1) floorId = editor.currentFloorId; + uievent.values.floorId = floorId; + uievent.elements.selectFloor.value = floorId; + uievent.values.x = x != null ? x : (uievent.values.x || 0); + uievent.values.y = y != null ? y : (uievent.values.y || 0); + uievent.values.width = core.floors[uievent.values.floorId].width || core.__SIZE__; + uievent.values.height = core.floors[uievent.values.floorId].height || core.__SIZE__; + uievent.values.left = core.clamp(uievent.values.x - core.__HALF_SIZE__, 0, uievent.values.width - core.__SIZE__); + uievent.values.top = core.clamp(uievent.values.y - core.__HALF_SIZE__, 0, uievent.values.height - core.__SIZE__); + uievent.updateSelectPoint(true); + } + + uievent.elements.selectFloor.onchange = function () { + uievent.setPoint(uievent.elements.selectFloor.value); + } + + uievent.elements.selectPointBox.onclick = function (e) { + e.stopPropagation(); + } + + 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); + uievent.updateSelectPoint(false); + } + + uievent.move = function (dx, dy) { + if (uievent.mode != 'selectPoint') 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); + }; + + (function () { + + var viewportButtons = uievent.elements.selectPointButtons; + var pressTimer = null; + for (var ii = 0, node; node = viewportButtons.children[ii]; ii++) { + (function (x, y) { + var move = function () { + uievent.move(x, y); + } + node.onmousedown = function () { + clearTimeout(pressTimer); + pressTimer = setTimeout(function () { + pressTimer = -1; + var f = function () { + if (pressTimer != null) { + move(); + setTimeout(f, 150); + } + } + f(); + }, 500); + }; + node.onmouseup = function () { + if (pressTimer > 0) { + clearTimeout(pressTimer); + move(); + } + pressTimer = null; + } + })([-1, 0, 0, 1][ii], [0, -1, 1, 0][ii]); + } + })(); + + uievent.elements.div.onmousewheel = function (e) { + if (uievent.mode != 'selectPoint' || uievent.values.hideFloor) return; + var index = core.floorIds.indexOf(uievent.values.floorId); + try { + if (e.wheelDelta) + index += Math.sign(e.wheelDelta); + else if (e.detail) + index += Math.sign(e.detail); + } catch (ee) { main.log(ee); } + index = core.clamp(index, 0, core.floorIds.length - 1); + uievent.setPoint(core.floorIds[index]); + } + + editor.constructor.prototype.uievent=uievent; + } \ No newline at end of file diff --git a/_server/refactoring.md b/_server/refactoring.md index d3450f08..f3020440 100644 --- a/_server/refactoring.md +++ b/_server/refactoring.md @@ -1,5 +1,7 @@ # 重构 +> 目前状态: 按功能分类已基本完成 + 总体思路 + 按功能拆分文件 + 左侧页面模块化, 方便添加 @@ -12,8 +14,6 @@ editor_file之后是更改editor.map的储存方式, 现有的存对象的模式要在对象和数字间来回转换, 非常繁琐和奇怪 -再之后是把editor_unsorted_*.js整理清晰 - ## 文件结构 (全部小写,必要时用下划线分割) diff --git a/editor-mobile.html b/editor-mobile.html index e657dbfa..bd934fde 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -574,7 +574,7 @@ - + diff --git a/editor.html b/editor.html index c05c2e84..6b94af81 100644 --- a/editor.html +++ b/editor.html @@ -559,7 +559,7 @@ - +