diff --git a/_server/editor.js b/_server/editor.js index 297178ec..a93cbed9 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -42,6 +42,10 @@ function editor() { spriteCtx:document.getElementById('appendPicCanvas').children[3].getContext('2d'), appendPicSelection : document.getElementById('appendPicSelection'), selectAppend : document.getElementById('selectAppend'), + selectFileBtn :document.getElementById('selectFileBtn'), + changeFloorId :document.getElementById('changeFloorId'), + left1 : document.getElementById('left1'), + editModeSelect :document.getElementById('editModeSelect'), }; this.uivalues={ @@ -140,7 +144,6 @@ editor.prototype.init = function (callback) { editor_file = editor_file(editor, function () { editor.file = editor_file; editor_mode = editor_mode(editor); - editor_unsorted_2_wrapper(editor_mode); editor.mode = editor_mode; core.resetGame(core.firstData.hero, null, core.firstData.floorId, core.clone(core.initStatus.maps)); core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function () { @@ -563,6 +566,12 @@ editor.prototype.setSelectBoxFromInfo=function(thisevent){ editor_mode.onmode('enemyitem'); } +editor.prototype.addUsedFlags = function (s) { + s.replace(/flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)/g, function (s0, s1) { + editor.used_flags[s1] = true; return s0; + }); +} + editor.prototype.listen = function () { // 移动至 editor_listen.js }//绑定事件 @@ -571,129 +580,7 @@ editor.prototype.mobile_listen=function(){ // 移动至 editor_listen.js } -editor.prototype.copyFromPos = function (pos) { - var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); - pos = pos || editor.pos; - var map = core.clone(editor.map[pos.y][pos.x]); - var events = {}; - fields.forEach(function(v){ - events[v] = core.clone(editor.currentFloorData[v][pos.x+','+pos.y]); - }) - return {map: map, events: events}; -} -editor.prototype.pasteToPos = function (info, pos) { - if (info == null) return; - var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); - pos = pos || editor.pos; - editor.map[pos.y][pos.x] = core.clone(info.map); - fields.forEach(function(v){ - if (info.events[v] == null) delete editor.currentFloorData[v][pos.x+","+pos.y]; - else editor.currentFloorData[v][pos.x+","+pos.y] = core.clone(info.events[v]); - }); -} -editor.prototype.movePos = function (startPos, endPos, callback) { - if (!startPos || !endPos) return; - if (startPos.x == endPos.x && startPos.y == endPos.y) return; - var copyed = editor.copyFromPos(startPos); - editor.pasteToPos({map:0, events: {}}, startPos); - editor.pasteToPos(copyed, endPos); - editor.updateMap(); - editor.file.saveFloorFile(function (err) { - if (err) { - printe(err); - throw(err) - } - ;printf('移动事件成功'); - editor.drawPosSelection(); - if (callback) callback(); - }); -} - -editor.prototype.exchangePos = function (startPos, endPos, callback) { - if (!startPos || !endPos) return; - if (startPos.x == endPos.x && startPos.y == endPos.y) return; - var startInfo = editor.copyFromPos(startPos); - var endInfo = editor.copyFromPos(endPos); - editor.pasteToPos(startInfo, endPos); - editor.pasteToPos(endInfo, startPos); - editor.updateMap(); - editor.file.saveFloorFile(function (err) { - if (err) { - printe(err); - throw(err) - } - ;printf('交换事件成功'); - editor.drawPosSelection(); - if (callback) callback(); - }); -} - -editor.prototype.moveBgFg = function (startPos, endPos, name, callback) { - if (!startPos || !endPos || ["bgmap","fgmap"].indexOf(name)<0) return; - if (startPos.x == endPos.x && startPos.y == endPos.y) return; - editor[name][endPos.y][endPos.x] = editor[name][startPos.y][startPos.x]; - editor[name][startPos.y][startPos.x] = 0; - editor.updateMap(); - editor.file.saveFloorFile(function (err) { - if (err) { - printe(err); - throw(err) - } - ;printf('移动图块成功'); - editor.drawPosSelection(); - if (callback) callback(); - }); -} - -editor.prototype.exchangeBgFg = function (startPos, endPos, name, callback) { - if (!startPos || !endPos || ["bgmap","fgmap"].indexOf(name)<0) return; - if (startPos.x == endPos.x && startPos.y == endPos.y) return; - var value = editor[name][endPos.y][endPos.x]; - editor[name][endPos.y][endPos.x] = editor[name][startPos.y][startPos.x]; - editor[name][startPos.y][startPos.x] = value; - editor.updateMap(); - editor.file.saveFloorFile(function (err) { - if (err) { - printe(err); - throw(err) - } - ;printf('交换图块成功'); - editor.drawPosSelection(); - if (callback) callback(); - }); - -} - -editor.prototype.clearPos = function (clearPos, pos, callback) { - var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); - pos = pos || editor.pos; - editor.uifunctions.hideMidMenu(); - editor.uivalues.preMapData = null; - editor.info = 0; - editor_mode.onmode(''); - if (clearPos) - editor.map[pos.y][pos.x]=editor.info; - editor.updateMap(); - fields.forEach(function(v){ - delete editor.currentFloorData[v][pos.x+','+pos.y]; - }) - editor.file.saveFloorFile(function (err) { - if (err) { - printe(err); - throw(err) - } - ;printf(clearPos?'清空该点和事件成功':'只清空该点事件成功'); - editor.drawPosSelection(); - if (callback) callback(); - }); -} - -editor.prototype.addUsedFlags = function (s) { - s.replace(/flag:([a-zA-Z0-9_\u4E00-\u9FCC]+)/g, function (s0, s1) { - editor.used_flags[s1] = true; return s0; - }); -} editor = new editor(); \ No newline at end of file diff --git a/_server/editor_datapanel.js b/_server/editor_datapanel.js index bdcc18af..84b6edfa 100644 --- a/_server/editor_datapanel.js +++ b/_server/editor_datapanel.js @@ -1,5 +1,7 @@ editor_datapanel_wrapper = function (editor) { + // 此文件内的内容仅做了分类, 未仔细整理函数 + /////////////////////////////////////////////////////////////////////// //////////////////// 地图编辑 ////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// @@ -137,8 +139,6 @@ editor_datapanel_wrapper = function (editor) { /////////////////////////////////////////////////////////////////////// editor.uifunctions.newIdIdnum_func = function () { - - var newIdIdnum = document.getElementById('newIdIdnum'); newIdIdnum.children[2].onclick = function () { if (newIdIdnum.children[0].value && newIdIdnum.children[1].value) { @@ -163,7 +163,6 @@ editor_datapanel_wrapper = function (editor) { printe('请输入id和idnum'); } } - newIdIdnum.children[4].onclick = function () { editor.file.autoRegister(editor_mode.info, function (err) { if (err) { @@ -206,7 +205,6 @@ editor_datapanel_wrapper = function (editor) { - /////////////////////////////////////////////////////////////////////// //////////////////// 楼层属性 ////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// @@ -215,9 +213,8 @@ editor_datapanel_wrapper = function (editor) { editor.uifunctions.changeFloorId_func = function () { - var changeFloorId = document.getElementById('changeFloorId'); - changeFloorId.children[1].onclick = function () { - var floorId = changeFloorId.children[0].value; + editor.dom.changeFloorId.children[1].onclick = function () { + var floorId = editor.dom.changeFloorId.children[0].value; if (floorId) { if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(floorId)) { printe("楼层名 " + floorId + " 不合法!请使用字母、数字、下划线,且不能以数字开头!"); @@ -354,10 +351,301 @@ editor_datapanel_wrapper = function (editor) { editor.dom.selectAppend.onchange(); } + editor.uifunctions.selectFileBtn_func = function () { + + var autoAdjust = function (image, callback) { + var changed = false; + + // Step 1: 检测白底 + var tempCanvas = document.createElement('canvas').getContext('2d'); + tempCanvas.canvas.width = image.width; + tempCanvas.canvas.height = image.height; + tempCanvas.mozImageSmoothingEnabled = false; + tempCanvas.webkitImageSmoothingEnabled = false; + tempCanvas.msImageSmoothingEnabled = false; + tempCanvas.imageSmoothingEnabled = false; + tempCanvas.drawImage(image, 0, 0); + var imgData = tempCanvas.getImageData(0, 0, image.width, image.height); + var trans = 0, white = 0, black = 0; + for (var i = 0; i < image.width; i++) { + for (var j = 0; j < image.height; j++) { + var pixel = editor.util.getPixel(imgData, i, j); + if (pixel[3] == 0) trans++; + if (pixel[0] == 255 && pixel[1] == 255 && pixel[2] == 255 && pixel[3] == 255) white++; + // if (pixel[0]==0 && pixel[1]==0 && pixel[2]==0 && pixel[3]==255) black++; + } + } + if (white > black && white > trans * 10 && confirm("看起来这张图片是以纯白为底色,是否自动调整为透明底色?")) { + for (var i = 0; i < image.width; i++) { + for (var j = 0; j < image.height; j++) { + var pixel = editor.util.getPixel(imgData, i, j); + if (pixel[0] == 255 && pixel[1] == 255 && pixel[2] == 255 && pixel[3] == 255) { + editor.util.setPixel(imgData, i, j, [0, 0, 0, 0]); + } + } + } + tempCanvas.clearRect(0, 0, image.width, image.height); + tempCanvas.putImageData(imgData, 0, 0); + changed = true; + } + /* + if (black>white && black>trans*10 && confirm("看起来这张图片是以纯黑为底色,是否自动调整为透明底色?")) { + for (var i=0;i= num) editor_mode.appendPic.index = ii + 1 - num; + else editor_mode.appendPic.index++; + editor_mode.appendPic.selectPos[ii] = pos; + editor.dom.appendPicSelection.children[ii].style = [ + 'left:', pos.x * 32, 'px;', + 'top:', pos.y * pos.ysize, 'px;', + 'height:', pos.ysize - 6, 'px;' + ].join(''); + } + } + + editor.uifunctions.appendConfirm_func = function () { + + var appendConfirm = document.getElementById('appendConfirm'); + appendConfirm.onclick = function () { + + var confirmAutotile = function () { + var image = editor_mode.appendPic.img; + if (image.width % 96 != 0 || image.height != 128) { + printe("不合法的Autotile图片!"); + return; + } + var imgData = editor.dom.sourceCtx.getImageData(0, 0, image.width, image.height); + editor.dom.spriteCtx.putImageData(imgData, 0, 0); + var imgbase64 = editor.dom.sprite.toDataURL().split(',')[1]; + + // Step 1: List文件名 + fs.readdir('./project/images', function (err, data) { + if (err) { + printe(err); + throw (err); + } + + // Step 2: 选择Autotile文件名 + var filename; + for (var i = 1; ; ++i) { + filename = 'autotile' + i; + if (data.indexOf(filename + ".png") == -1) break; + } + + // Step 3: 写入文件 + fs.writeFile('./project/images/' + filename + ".png", imgbase64, 'base64', function (err, data) { + if (err) { + printe(err); + throw (err); + } + // Step 4: 自动注册 + editor.file.registerAutotile(filename, function (err) { + if (err) { + printe(err); + throw (err); + } + printe('自动元件' + filename + '注册成功,请F5刷新编辑器'); + }) + + }) + + }) + + } + + if (editor.dom.selectAppend.value == 'autotile') { + confirmAutotile(); + return; + } + + var ysize = editor.dom.selectAppend.value.endsWith('48') ? 48 : 32; + for (var ii = 0, v; v = editor_mode.appendPic.selectPos[ii]; ii++) { + // var imgData = editor.dom.sourceCtx.getImageData(v.x * 32, v.y * ysize, 32, ysize); + // editor.dom.spriteCtx.putImageData(imgData, ii * 32, editor.dom.sprite.height - ysize); + // editor.dom.spriteCtx.drawImage(editor_mode.appendPic.img, v.x * 32, v.y * ysize, 32, ysize, ii * 32, height, 32, ysize) + + editor.dom.spriteCtx.drawImage(editor.dom.sourceCtx.canvas, v.x * 32, v.y * ysize, 32, ysize, 32 * ii, editor.dom.sprite.height - ysize, 32, ysize); + } + var dt = editor.dom.spriteCtx.getImageData(0, 0, editor.dom.sprite.width, editor.dom.sprite.height); + var imgbase64 = editor.dom.sprite.toDataURL().split(',')[1]; + fs.writeFile('./project/images/' + editor_mode.appendPic.imageName + '.png', imgbase64, 'base64', function (err, data) { + if (err) { + printe(err); + throw (err) + } + printe('追加素材成功,请F5刷新编辑器,或继续追加当前素材'); + editor.dom.sprite.style.height = (editor.dom.sprite.height = (editor.dom.sprite.height + ysize)) + "px"; + editor.dom.spriteCtx.putImageData(dt, 0, 0); + }); + } + } /////////////////////////////////////////////////////////////////////// //////////////////// 公共事件 ////////////////////////////////////////// diff --git a/_server/editor_listen.js b/_server/editor_listen.js index 67fb72c6..db006864 100644 --- a/_server/editor_listen.js +++ b/_server/editor_listen.js @@ -48,7 +48,6 @@ editor_listen_wrapper = function (editor) { if (!editor.isMobile) return; var mobileview = document.getElementById('mobileview'); - var editModeSelect = document.getElementById('editModeSelect'); var mid = document.getElementById('mid'); var right = document.getElementById('right'); var mobileeditdata = document.getElementById('mobileeditdata'); @@ -58,7 +57,7 @@ editor_listen_wrapper = function (editor) { mid.style = 'z-index:-1;opacity: 0;'; right.style = 'z-index:-1;opacity: 0;'; mobileeditdata.style = ''; - if (callShowMode) editor.mode.showMode(editModeSelect.value); + if (callShowMode) editor.mode.showMode(editor.dom.editModeSelect.value); editor.uifunctions.hideMidMenu(); } mobileview.children[0].onclick = function () { @@ -127,4 +126,33 @@ editor_listen_wrapper = function (editor) { editor.dom.clearLoc.onmousedown = null } + editor.constructor.prototype.mode_listen = function (callback) { + + // 这里的函数还没有写jsdoc, 通过_func()的方式先完成分类 + + editor.uifunctions.newIdIdnum_func() + editor.uifunctions.changeId_func() + + editor.uifunctions.selectFloor_func() + editor.uifunctions.saveFloor_func() + + editor.uifunctions.newMap_func() + + editor.uifunctions.createNewMaps_func() + + editor.uifunctions.changeFloorId_func() + + editor.uifunctions.fixCtx_func() + + editor.uifunctions.selectAppend_func() + editor.uifunctions.selectFileBtn_func() + editor.uifunctions.changeColorInput_func() + editor.uifunctions.picClick_func() + editor.uifunctions.appendConfirm_func() + + editor.dom.editModeSelect.onchange = editor.mode.editModeSelect_onchange + + if (Boolean(callback)) callback(); + } + } \ No newline at end of file diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js index a3a4e899..036aee59 100644 --- a/_server/editor_mappanel.js +++ b/_server/editor_mappanel.js @@ -566,11 +566,127 @@ editor_mappanel_wrapper = function (editor) { + ///////////////////////////////////////////////////////////////////////////// - - - + editor.constructor.prototype.copyFromPos = function (pos) { + var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); + pos = pos || editor.pos; + var map = core.clone(editor.map[pos.y][pos.x]); + var events = {}; + fields.forEach(function(v){ + events[v] = core.clone(editor.currentFloorData[v][pos.x+','+pos.y]); + }) + return {map: map, events: events}; + } + + editor.constructor.prototype.pasteToPos = function (info, pos) { + if (info == null) return; + var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); + pos = pos || editor.pos; + editor.map[pos.y][pos.x] = core.clone(info.map); + fields.forEach(function(v){ + if (info.events[v] == null) delete editor.currentFloorData[v][pos.x+","+pos.y]; + else editor.currentFloorData[v][pos.x+","+pos.y] = core.clone(info.events[v]); + }); + } + + editor.constructor.prototype.movePos = function (startPos, endPos, callback) { + if (!startPos || !endPos) return; + if (startPos.x == endPos.x && startPos.y == endPos.y) return; + var copyed = editor.copyFromPos(startPos); + editor.pasteToPos({map:0, events: {}}, startPos); + editor.pasteToPos(copyed, endPos); + editor.updateMap(); + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf('移动事件成功'); + editor.drawPosSelection(); + if (callback) callback(); + }); + } + + editor.constructor.prototype.exchangePos = function (startPos, endPos, callback) { + if (!startPos || !endPos) return; + if (startPos.x == endPos.x && startPos.y == endPos.y) return; + var startInfo = editor.copyFromPos(startPos); + var endInfo = editor.copyFromPos(endPos); + editor.pasteToPos(startInfo, endPos); + editor.pasteToPos(endInfo, startPos); + editor.updateMap(); + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf('交换事件成功'); + editor.drawPosSelection(); + if (callback) callback(); + }); + } + + editor.constructor.prototype.moveBgFg = function (startPos, endPos, name, callback) { + if (!startPos || !endPos || ["bgmap","fgmap"].indexOf(name)<0) return; + if (startPos.x == endPos.x && startPos.y == endPos.y) return; + editor[name][endPos.y][endPos.x] = editor[name][startPos.y][startPos.x]; + editor[name][startPos.y][startPos.x] = 0; + editor.updateMap(); + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf('移动图块成功'); + editor.drawPosSelection(); + if (callback) callback(); + }); + } + + editor.constructor.prototype.exchangeBgFg = function (startPos, endPos, name, callback) { + if (!startPos || !endPos || ["bgmap","fgmap"].indexOf(name)<0) return; + if (startPos.x == endPos.x && startPos.y == endPos.y) return; + var value = editor[name][endPos.y][endPos.x]; + editor[name][endPos.y][endPos.x] = editor[name][startPos.y][startPos.x]; + editor[name][startPos.y][startPos.x] = value; + editor.updateMap(); + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf('交换图块成功'); + editor.drawPosSelection(); + if (callback) callback(); + }); + + } + + editor.constructor.prototype.clearPos = function (clearPos, pos, callback) { + var fields = Object.keys(editor.file.comment._data.floors._data.loc._data); + pos = pos || editor.pos; + editor.uifunctions.hideMidMenu(); + editor.uivalues.preMapData = null; + editor.info = 0; + editor_mode.onmode(''); + if (clearPos) + editor.map[pos.y][pos.x]=editor.info; + editor.updateMap(); + fields.forEach(function(v){ + delete editor.currentFloorData[v][pos.x+','+pos.y]; + }) + editor.file.saveFloorFile(function (err) { + if (err) { + printe(err); + throw(err) + } + ;printf(clearPos?'清空该点和事件成功':'只清空该点事件成功'); + editor.drawPosSelection(); + if (callback) callback(); + }); + } diff --git a/_server/editor_mode.js b/_server/editor_mode.js index aadbec9a..0d310d9e 100644 --- a/_server/editor_mode.js +++ b/_server/editor_mode.js @@ -21,7 +21,7 @@ editor_mode = function (editor) { this.mode = ''; this.info = {}; this.appendPic = {}; - this.doubleClickMode='change'; + this.doubleClickMode = 'change'; } editor_mode.prototype.init = function (callback) { @@ -52,12 +52,12 @@ editor_mode = function (editor) { editor_mode.prototype.doActionList = function (mode, actionList) { if (actionList.length == 0) return; printf('修改中...'); - var cb=function(objs_){ + var cb = function (objs_) { if (objs_.slice(-1)[0] != null) { printe(objs_.slice(-1)[0]); - throw(objs_.slice(-1)[0]) + throw (objs_.slice(-1)[0]) } - ;printf('修改成功' + (data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.name == 'template' ? '\n\n请注意:全塔属性的name尚未修改,请及时予以设置' : '')); + ; printf('修改成功' + (data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.name == 'template' ? '\n\n请注意:全塔属性的name尚未修改,请及时予以设置' : '')); } switch (mode) { case 'loc': @@ -109,14 +109,78 @@ editor_mode = function (editor) { editor_mode.dom[name].style = 'z-index:-1;opacity: 0;'; } editor_mode.dom[mode].style = ''; - editor_mode.doubleClickMode='change'; + editor_mode.doubleClickMode = 'change'; // clear editor.drawEventBlock(); if (editor_mode[mode]) editor_mode[mode](); - document.getElementById('editModeSelect').value = mode; + editor.dom.editModeSelect.value = mode; if (!selectBox.isSelected()) tip.showHelp(); } + editor_mode.prototype.change = function (value) { + editor_mode.onmode('nextChange'); + editor_mode.onmode(value); + if (editor.isMobile) editor.showdataarea(false); + } + + + editor_mode.prototype.checkUnique = function (thiseval) { + if (!(thiseval instanceof Array)) return false; + var map = {}; + for (var i = 0; i < thiseval.length; ++i) { + if (map[thiseval[i]]) { + alert("警告:存在重复定义!"); + return false; + } + map[thiseval[i]] = true; + } + return true; + } + + editor_mode.prototype.checkFloorIds = function (thiseval) { + if (!editor_mode.checkUnique(thiseval)) return false; + var oldvalue = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.main.floorIds; + fs.readdir('project/floors', function (err, data) { + if (err) { + printe(err); + throw Error(err); + } + var newfiles = thiseval.map(function (v) { return v + '.js' }); + var notExist = ''; + for (var name, ii = 0; name = newfiles[ii]; ii++) { + if (data.indexOf(name) === -1) notExist = name; + } + if (notExist) { + var discard = confirm('文件' + notExist + '不存在, 保存会导致工程无法打开, 是否放弃更改'); + if (discard) { + editor.file.editTower([['change', "['main']['floorIds']", oldvalue]], function (objs_) {//console.log(objs_); + if (objs_.slice(-1)[0] != null) { + printe(objs_.slice(-1)[0]); + throw (objs_.slice(-1)[0]) + } + ; printe('已放弃floorIds的修改,请F5进行刷新'); + }); + } + } + }); + return true + } + + editor_mode.prototype.changeDoubleClickModeByButton = function (mode) { + ({ + delete: function () { + printf('下一次双击表格的项删除,切换下拉菜单可取消;编辑后需刷新浏览器生效。'); + editor_mode.doubleClickMode = mode; + }, + add: function () { + printf('下一次双击表格的项则在同级添加新项,切换下拉菜单可取消;编辑后需刷新浏览器生效。'); + editor_mode.doubleClickMode = mode; + } + }[mode])(); + } + + ///////////////////////////////////////////////////////////////////////////// + editor_mode.prototype.loc = function (callback) { //editor.pos={x: 0, y: 0}; if (!core.isset(editor.pos)) return; @@ -140,7 +204,7 @@ editor_mode = function (editor) { //editor.info=editor.ids[editor.indexs[201]]; if (!core.isset(editor.info)) return; - if (Object.keys(editor.info).length !== 0 && editor.info.idnum!=17) editor_mode.info = editor.info;//避免editor.info被清空导致无法获得是物品还是怪物 + if (Object.keys(editor.info).length !== 0 && editor.info.idnum != 17) editor_mode.info = editor.info;//避免editor.info被清空导致无法获得是物品还是怪物 if (!core.isset(editor_mode.info.id)) { // document.getElementById('table_a3f03d4c_55b8_4ef6_b362_b345783acd72').innerHTML = ''; @@ -232,7 +296,7 @@ editor_mode = function (editor) { tableinfo.listen(tableinfo.guids); if (Boolean(callback)) callback(); } - + editor_mode.prototype.plugins = function (callback) { var objs = []; editor.file.editPlugins([], function (objs_) { @@ -246,11 +310,17 @@ editor_mode = function (editor) { if (Boolean(callback)) callback(); } -///////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////// + + /** + * editor.dom.editModeSelect.onchange + */ + editor_mode.prototype.editModeSelect_onchange = function () { + editor_mode.change(editor.dom.editModeSelect.value); + } editor_mode.prototype.listen = function (callback) { - - // 移动至 editor_unsorted_2.js + // 移动至 editor_listen.js -> editor.constructor.prototype.mode_listen } var editor_mode = new editor_mode(); diff --git a/_server/editor_table.js b/_server/editor_table.js index e141e5ff..7d5e07de 100644 --- a/_server/editor_table.js +++ b/_server/editor_table.js @@ -337,7 +337,7 @@ editor_table_wrapper = function (editor) { editor_table.prototype.addfunc = function (guid, obj, commentObj, thisTr, input, field, cobj, modeNode) { editor_mode.onmode(editor_mode._ids[modeNode.getAttribute('id')]); - var mode = document.getElementById('editModeSelect').value; + var mode = editor.dom.editModeSelect.value; // 1.输入id var newid = prompt('请输入新项的ID(仅公共事件支持中文ID)'); diff --git a/_server/editor_unsorted_2.js b/_server/editor_unsorted_2.js deleted file mode 100644 index 25cbef24..00000000 --- a/_server/editor_unsorted_2.js +++ /dev/null @@ -1,377 +0,0 @@ -editor_unsorted_2_wrapper=function(editor_mode){ - - editor_mode.constructor.prototype.listen=function (callback) { - - // 这里的函数还没有写jsdoc - - editor.uifunctions.newIdIdnum_func() - editor.uifunctions.changeId_func() - - editor.uifunctions.selectFloor_func() - editor.uifunctions.saveFloor_func() - - editor.uifunctions.newMap_func() - - editor.uifunctions.createNewMaps_func() - - editor.uifunctions.changeFloorId_func() - - editor.uifunctions.fixCtx_func() - editor.uifunctions.selectAppend_func() - - - - - var autoAdjust = function (image, callback) { - var changed = false; - - // Step 1: 检测白底 - var tempCanvas = document.createElement('canvas').getContext('2d'); - tempCanvas.canvas.width = image.width; - tempCanvas.canvas.height = image.height; - tempCanvas.mozImageSmoothingEnabled = false; - tempCanvas.webkitImageSmoothingEnabled = false; - tempCanvas.msImageSmoothingEnabled = false; - tempCanvas.imageSmoothingEnabled = false; - tempCanvas.drawImage(image, 0, 0); - var imgData = tempCanvas.getImageData(0, 0, image.width, image.height); - var trans = 0, white = 0, black=0; - for (var i=0;iblack && white>trans*10 && confirm("看起来这张图片是以纯白为底色,是否自动调整为透明底色?")) { - for (var i=0;iwhite && black>trans*10 && confirm("看起来这张图片是以纯黑为底色,是否自动调整为透明底色?")) { - for (var i=0;i= num) editor_mode.appendPic.index = ii + 1 - num; - else editor_mode.appendPic.index++; - editor_mode.appendPic.selectPos[ii] = pos; - editor.dom.appendPicSelection.children[ii].style = [ - 'left:', pos.x * 32, 'px;', - 'top:', pos.y * pos.ysize, 'px;', - 'height:', pos.ysize - 6, 'px;' - ].join(''); - } - - var appendConfirm = document.getElementById('appendConfirm'); - appendConfirm.onclick = function () { - - var confirmAutotile = function () { - var image = editor_mode.appendPic.img; - if (image.width % 96 !=0 || image.height != 128) { - printe("不合法的Autotile图片!"); - return; - } - var imgData = editor.dom.sourceCtx.getImageData(0,0,image.width,image.height); - editor.dom.spriteCtx.putImageData(imgData, 0, 0); - var imgbase64 = editor.dom.sprite.toDataURL().split(',')[1]; - - // Step 1: List文件名 - fs.readdir('./project/images', function (err, data) { - if (err) { - printe(err); - throw(err); - } - - // Step 2: 选择Autotile文件名 - var filename; - for (var i=1;;++i) { - filename = 'autotile'+i; - if (data.indexOf(filename+".png")==-1) break; - } - - // Step 3: 写入文件 - fs.writeFile('./project/images/'+filename+".png", imgbase64, 'base64', function (err, data) { - if (err) { - printe(err); - throw(err); - } - // Step 4: 自动注册 - editor.file.registerAutotile(filename, function (err) { - if (err) { - printe(err); - throw(err); - } - printe('自动元件'+filename+'注册成功,请F5刷新编辑器'); - }) - - }) - - }) - - } - - if (editor.dom.selectAppend.value == 'autotile') { - confirmAutotile(); - return; - } - - var ysize = editor.dom.selectAppend.value.endsWith('48') ? 48 : 32; - for (var ii = 0, v; v = editor_mode.appendPic.selectPos[ii]; ii++) { - // var imgData = editor.dom.sourceCtx.getImageData(v.x * 32, v.y * ysize, 32, ysize); - // editor.dom.spriteCtx.putImageData(imgData, ii * 32, editor.dom.sprite.height - ysize); - // editor.dom.spriteCtx.drawImage(editor_mode.appendPic.img, v.x * 32, v.y * ysize, 32, ysize, ii * 32, height, 32, ysize) - - editor.dom.spriteCtx.drawImage(editor.dom.sourceCtx.canvas, v.x*32, v.y*ysize, 32, ysize, 32*ii, editor.dom.sprite.height - ysize, 32, ysize); - } - var dt = editor.dom.spriteCtx.getImageData(0, 0, editor.dom.sprite.width, editor.dom.sprite.height); - var imgbase64 = editor.dom.sprite.toDataURL().split(',')[1]; - fs.writeFile('./project/images/' + editor_mode.appendPic.imageName + '.png', imgbase64, 'base64', function (err, data) { - if (err) { - printe(err); - throw(err) - } - printe('追加素材成功,请F5刷新编辑器,或继续追加当前素材'); - editor.dom.sprite.style.height = (editor.dom.sprite.height = (editor.dom.sprite.height+ysize)) + "px"; - editor.dom.spriteCtx.putImageData(dt, 0, 0); - }); - } - - editor_mode.change = function (value) { - editor_mode.onmode('nextChange'); - editor_mode.onmode(value); - if(editor.isMobile)editor.showdataarea(false); - } - var editModeSelect = document.getElementById('editModeSelect'); - editModeSelect.onchange = function () { - editor_mode.change(editModeSelect.value); - } - - editor_mode.checkUnique = function (thiseval) { - if (!(thiseval instanceof Array)) return false; - var map = {}; - for (var i = 0; i - @@ -584,7 +583,7 @@ editor.isMobile=true; editor.init(function () { editor.listen(); - editor.mode.listen(); + editor.mode_listen(); editor.mobile_listen(); }); //main.listen(); diff --git a/editor.html b/editor.html index 119fc2af..c05c2e84 100644 --- a/editor.html +++ b/editor.html @@ -559,7 +559,6 @@ - @@ -568,7 +567,7 @@