From 32cadcc280f11ca6b1922f36773411e35e62fdb6 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Fri, 15 May 2020 19:51:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A1=AB=E5=85=85=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/css/editor.css | 2 +- _server/editor.js | 1 + _server/editor_datapanel.js | 12 ++++++-- _server/editor_listen.js | 1 + _server/editor_mappanel.js | 43 +++++++++++++++++++++++++++ _server/editor_ui.js | 2 +- _server/thirdparty/awesomplete.css | 1 - _server/thirdparty/awesomplete.min.js | 1 - editor-mobile.html | 1 + editor.html | 6 ++-- 10 files changed, 61 insertions(+), 9 deletions(-) diff --git a/_server/css/editor.css b/_server/css/editor.css index 642fd168..83b262bd 100644 --- a/_server/css/editor.css +++ b/_server/css/editor.css @@ -170,7 +170,7 @@ body { #tip { float: right; - width: 50%; + width: 48%; height: 95%; padding: 5px 10px 10px 10px; margin-right: 0; diff --git a/_server/editor.js b/_server/editor.js index 67b80e7c..d5217afa 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -26,6 +26,7 @@ function editor() { brushMod:document.getElementById('brushMod'), brushMod2:document.getElementById('brushMod2'), brushMod3:document.getElementById('brushMod3'), + brushMod4:document.getElementById('brushMod4'), bgc : document.getElementById('bg'), bgCtx : document.getElementById('bg').getContext('2d'), fgc : document.getElementById('fg'), diff --git a/_server/editor_datapanel.js b/_server/editor_datapanel.js index 263cae55..827c57ff 100644 --- a/_server/editor_datapanel.js +++ b/_server/editor_datapanel.js @@ -544,7 +544,7 @@ editor_datapanel_wrapper = function (editor) { }); // Step 3:更新所有坐标 - ["afterBattle", "afterGetItem", "afterOpenDoor", "changeFloor", "autoEvent", "cannotMove"].forEach(function (name) { + ["events", "afterBattle", "afterGetItem", "afterOpenDoor", "changeFloor", "autoEvent", "cannotMove"].forEach(function (name) { newFloorData[name] = {}; if (!currentFloorData[name]) return; for (var loc in currentFloorData[name]) { @@ -564,8 +564,14 @@ editor_datapanel_wrapper = function (editor) { } }); - console.log(currentFloorData); - console.log(newFloorData); + editor.file.saveFloor(newFloorData, function (err) { + if (err) { + printe(err); + throw(err) + } + ;alert('地图更改大小成功,即将刷新地图...\n请检查所有点的事件是否存在问题。'); + window.location.reload(); + }); } } diff --git a/_server/editor_listen.js b/_server/editor_listen.js index 3563b42e..7fff8ff5 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -41,6 +41,7 @@ editor_listen_wrapper = function (editor) { editor.dom.brushMod.onchange = editor.uifunctions.brushMod_onchange if (editor.dom.brushMod2) editor.dom.brushMod2.onchange = editor.uifunctions.brushMod2_onchange; if (editor.dom.brushMod3) editor.dom.brushMod3.onchange = editor.uifunctions.brushMod3_onchange; + if (editor.dom.brushMod4) editor.dom.brushMod4.onchange = editor.uifunctions.brushMod4_onchange; editor.dom.layerMod.onchange = editor.uifunctions.layerMod_onchange if (editor.dom.layerMod2) editor.dom.layerMod2.onchange = editor.uifunctions.layerMod2_onchange; diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index 996a66ea..fcfb0fd3 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -247,6 +247,11 @@ editor_mappanel_wrapper = function (editor) { editor[editor.layerMod][editor.uivalues.stepPostfix[ii].y][editor.uivalues.stepPostfix[ii].x] = editor.ids[editor.indexs[idnum + editor.uivalues.stepPostfix[ii].x - x0]]; } } else { + // 检测是否是填充模式 + if (editor.uivalues.stepPostfix.length == 1 && editor.brushMod == 'fill') { + editor.uivalues.stepPostfix = editor.uifunctions._fillMode_bfs(editor[editor.layerMod], editor.uivalues.stepPostfix[0].x, editor.uivalues.stepPostfix[0].y, + editor[editor.layerMod][0].length, editor[editor.layerMod].length); + } for (var ii = 0; ii < editor.uivalues.stepPostfix.length; ii++) editor[editor.layerMod][editor.uivalues.stepPostfix[ii].y][editor.uivalues.stepPostfix[ii].x] = editor.info; } @@ -263,6 +268,32 @@ editor_mappanel_wrapper = function (editor) { return false; } + /** + * bfs找寻和某点相连的全部相同图块坐标 + */ + editor.uifunctions._fillMode_bfs = function (array, x, y, maxWidth, maxHeight) { + var _getNumber = function (x, y) { + if (x<0 || y<0 || x>=maxWidth || y>=maxHeight) return null; + return array[y][x].idnum || array[y][x] || 0; + } + var number = _getNumber(x, y) || 0; + var visited = {}, result = []; + var list = [{x:x, y:y}]; + while (list.length != 0) { + var next = list.shift(), key = next.x+","+next.y; + if (visited[key]) continue; + visited[key] = true; + result.push(next); + [[-1,0],[1,0],[0,-1],[0,1]].forEach(function (dir) { + var nx = next.x + dir[0], ny = next.y + dir[1]; + if (_getNumber(nx, ny) == number) { + list.push({x: nx, y: ny}); + } + }); + } + return result; + } + /** * editor.dom.mid.onmousewheel * 在地图编辑区域滚轮切换楼层 @@ -586,6 +617,11 @@ editor_mappanel_wrapper = function (editor) { */ editor.uifunctions.brushMod_onchange = function () { editor.brushMod = editor.dom.brushMod.value; + if (editor.brushMod == 'fill') { + tip.isSelectedBlock(false); + tip.msgs[11] = String('填充模式下,将会用选中的素材替换所有和目标点联通的相同素材'); + tip.whichShow(12); + } } /** @@ -612,6 +648,13 @@ editor_mappanel_wrapper = function (editor) { editor.brushMod = editor.dom.brushMod3.value; } + editor.uifunctions.brushMod4_onchange = function () { + tip.isSelectedBlock(false); + tip.msgs[11] = String('填充模式下,将会用选中的素材替换所有和目标点联通的相同素材'); + tip.whichShow(12); + editor.brushMod = editor.dom.brushMod4.value; + } + /** * editor.dom.layerMod.onchange * 切换编辑的层 diff --git a/_server/editor_ui.js b/_server/editor_ui.js index 2bb6e774..4965f1ea 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -220,7 +220,7 @@ editor_ui_wrapper = function (editor) { var clickpath = editor.uifunctions.getClickpath(e); var unselect = true; - for (var ii = 0, thisId; thisId = ['edit', 'tip', 'brushMod', 'brushMod2', 'brushMod3', 'layerMod', 'layerMod2', 'layerMod3', 'viewportButtons'][ii]; ii++) { + for (var ii = 0, thisId; thisId = ['edit', 'tip', 'brushMod', 'brushMod2', 'brushMod3', 'brushMode4', 'layerMod', 'layerMod2', 'layerMod3', 'viewportButtons'][ii]; ii++) { if (clickpath.indexOf(thisId) !== -1) { unselect = false; break; diff --git a/_server/thirdparty/awesomplete.css b/_server/thirdparty/awesomplete.css index b36a7035..ed09e453 100644 --- a/_server/thirdparty/awesomplete.css +++ b/_server/thirdparty/awesomplete.css @@ -101,4 +101,3 @@ background: hsl(86, 100%, 21%); color: inherit; } -/*# sourceMappingURL=awesomplete.css.map */ \ No newline at end of file diff --git a/_server/thirdparty/awesomplete.min.js b/_server/thirdparty/awesomplete.min.js index 5328bd9b..ccaf6b07 100644 --- a/_server/thirdparty/awesomplete.min.js +++ b/_server/thirdparty/awesomplete.min.js @@ -1,3 +1,2 @@ // Awesomplete - Lea Verou - MIT license !function(){function t(t){var e=Array.isArray(t)?{label:t[0],value:t[1]}:"object"==typeof t&&"label"in t&&"value"in t?t:{label:t,value:t};this.label=e.label||e.value,this.value=e.value}function e(t,e,i){for(var n in e){var s=e[n],r=t.input.getAttribute("data-"+n.toLowerCase());"number"==typeof s?t[n]=parseInt(r):!1===s?t[n]=null!==r:s instanceof Function?t[n]=null:t[n]=r,t[n]||0===t[n]||(t[n]=n in i?i[n]:s)}}function i(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function n(t,e){return o.call((e||document).querySelectorAll(t))}function s(){n("input.awesomplete").forEach(function(t){new r(t)})}var r=function(t,n){var s=this;r.count=(r.count||0)+1,this.count=r.count,this.isOpened=!1,this.input=i(t),this.input.setAttribute("autocomplete","off"),this.input.setAttribute("aria-expanded","false"),this.input.setAttribute("aria-owns","awesomplete_list_"+this.count),this.input.setAttribute("role","combobox"),this.options=n=n||{},e(this,{minChars:2,maxItems:10,autoFirst:!1,data:r.DATA,filter:r.FILTER_CONTAINS,sort:!1!==n.sort&&r.SORT_BYLENGTH,container:r.CONTAINER,item:r.ITEM,replace:r.REPLACE,tabSelect:!1},n),this.index=-1,this.container=this.container(t),this.ul=i.create("ul",{hidden:"hidden",role:"listbox",id:"awesomplete_list_"+this.count,inside:this.container}),this.status=i.create("span",{className:"visually-hidden",role:"status","aria-live":"assertive","aria-atomic":!0,inside:this.container,textContent:0!=this.minChars?"Type "+this.minChars+" or more characters for results.":"Begin typing for results."}),this._events={input:{input:this.evaluate.bind(this),blur:this.close.bind(this,{reason:"blur"}),keydown:function(t){var e=t.keyCode;s.opened&&(13===e&&s.selected?(t.preventDefault(),s.select()):9===e&&s.selected&&s.tabSelect?s.select():27===e?s.close({reason:"esc"}):38!==e&&40!==e||(t.preventDefault(),s[38===e?"previous":"next"]()))}},form:{submit:this.close.bind(this,{reason:"submit"})},ul:{mousedown:function(t){t.preventDefault()},click:function(t){var e=t.target;if(e!==this){for(;e&&!/li/i.test(e.nodeName);)e=e.parentNode;e&&0===t.button&&(t.preventDefault(),s.select(e,t.target))}}}},i.bind(this.input,this._events.input),i.bind(this.input.form,this._events.form),i.bind(this.ul,this._events.ul),this.input.hasAttribute("list")?(this.list="#"+this.input.getAttribute("list"),this.input.removeAttribute("list")):this.list=this.input.getAttribute("data-list")||n.list||[],r.all.push(this)};r.prototype={set list(t){if(Array.isArray(t))this._list=t;else if("string"==typeof t&&t.indexOf(",")>-1)this._list=t.split(/\s*,\s*/);else if((t=i(t))&&t.children){var e=[];o.apply(t.children).forEach(function(t){if(!t.disabled){var i=t.textContent.trim(),n=t.value||i,s=t.label||i;""!==n&&e.push({label:s,value:n})}}),this._list=e}document.activeElement===this.input&&this.evaluate()},get selected(){return this.index>-1},get opened(){return this.isOpened},close:function(t){this.opened&&(this.input.setAttribute("aria-expanded","false"),this.ul.setAttribute("hidden",""),this.isOpened=!1,this.index=-1,this.status.setAttribute("hidden",""),i.fire(this.input,"awesomplete-close",t||{}))},open:function(){this.input.setAttribute("aria-expanded","true"),this.ul.removeAttribute("hidden"),this.isOpened=!0,this.status.removeAttribute("hidden"),this.autoFirst&&-1===this.index&&this.goto(0),i.fire(this.input,"awesomplete-open")},destroy:function(){if(i.unbind(this.input,this._events.input),i.unbind(this.input.form,this._events.form),!this.options.container){var t=this.container.parentNode;t.insertBefore(this.input,this.container),t.removeChild(this.container)}this.input.removeAttribute("autocomplete"),this.input.removeAttribute("aria-autocomplete");var e=r.all.indexOf(this);-1!==e&&r.all.splice(e,1)},next:function(){var t=this.ul.children.length;this.goto(this.index-1&&e.length>0&&(e[t].setAttribute("aria-selected","true"),this.status.textContent=e[t].textContent+", list item "+(t+1)+" of "+e.length,this.input.setAttribute("aria-activedescendant",this.ul.id+"_item_"+this.index),this.ul.scrollTop=e[t].offsetTop-this.ul.clientHeight+e[t].clientHeight,i.fire(this.input,"awesomplete-highlight",{text:this.suggestions[this.index]}))},select:function(t,e){if(t?this.index=i.siblingIndex(t):t=this.ul.children[this.index],t){var n=this.suggestions[this.index];i.fire(this.input,"awesomplete-select",{text:n,origin:e||t})&&(this.replace(n),this.close({reason:"select"}),i.fire(this.input,"awesomplete-selectcomplete",{text:n}))}},evaluate:function(){var e=this,i=this.input.value;i.length>=this.minChars&&this._list&&this._list.length>0?(this.index=-1,this.ul.innerHTML="",this.suggestions=this._list.map(function(n){return new t(e.data(n,i))}).filter(function(t){return e.filter(t,i)}),!1!==this.sort&&(this.suggestions=this.suggestions.sort(this.sort)),this.suggestions=this.suggestions.slice(0,this.maxItems),this.suggestions.forEach(function(t,n){e.ul.appendChild(e.item(t,i,n))}),0===this.ul.children.length?(this.status.textContent="No results found",this.close({reason:"nomatches"})):(this.open(),this.status.textContent=this.ul.children.length+" results found")):(this.close({reason:"nomatches"}),this.status.textContent="No results found")}},r.all=[],r.FILTER_CONTAINS=function(t,e){return RegExp(i.regExpEscape(e.trim()),"i").test(t)},r.FILTER_STARTSWITH=function(t,e){return RegExp("^"+i.regExpEscape(e.trim()),"i").test(t)},r.SORT_BYLENGTH=function(t,e){return t.length!==e.length?t.length-e.length:t$&"),role:"option","aria-selected":"false",id:"awesomplete_list_"+this.count+"_item_"+n})},r.REPLACE=function(t){this.input.value=t.value},r.DATA=function(t){return t},Object.defineProperty(t.prototype=Object.create(String.prototype),"length",{get:function(){return this.label.length}}),t.prototype.toString=t.prototype.valueOf=function(){return""+this.label};var o=Array.prototype.slice;i.create=function(t,e){var n=document.createElement(t);for(var s in e){var r=e[s];if("inside"===s)i(r).appendChild(n);else if("around"===s){var o=i(r);o.parentNode.insertBefore(n,o),n.appendChild(o),null!=o.getAttribute("autofocus")&&o.focus()}else s in n?n[s]=r:n.setAttribute(s,r)}return n},i.bind=function(t,e){if(t)for(var i in e){var n=e[i];i.split(/\s+/).forEach(function(e){t.addEventListener(e,n)})}},i.unbind=function(t,e){if(t)for(var i in e){var n=e[i];i.split(/\s+/).forEach(function(e){t.removeEventListener(e,n)})}},i.fire=function(t,e,i){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0);for(var s in i)n[s]=i[s];return t.dispatchEvent(n)},i.regExpEscape=function(t){return t.replace(/[-\\^$*+?.()|[\]{}]/g,"\\$&")},i.siblingIndex=function(t){for(var e=0;t=t.previousElementSibling;e++);return e},"undefined"!=typeof self&&(self.Awesomplete=r),"undefined"!=typeof Document&&("loading"!==document.readyState?s():document.addEventListener("DOMContentLoaded",s)),r.$=i,r.$$=n,"object"==typeof module&&module.exports&&(module.exports=r)}(); -//# sourceMappingURL=awesomplete.min.js.map \ No newline at end of file diff --git a/editor-mobile.html b/editor-mobile.html index 5d908a89..143408e6 100644 --- a/editor-mobile.html +++ b/editor-mobile.html @@ -384,6 +384,7 @@ + 锁定模式
- 画线 - 画矩形 + 线 + 矩形 tileset贴图 + 填充 +