// vue 相关处理 document.body.onmousedown = function(e){ //console.log(e); var eid=[]; e.path.forEach(function(node){ if(!node.getAttribute)return; var id_ = node.getAttribute('id'); if (id_){ if(['left','left1','left2','left3','left4','left5','left8'].indexOf(id_)!==-1)eid.push('edit'); eid.push(id_); } }); //console.log(eid); if(eid.indexOf('edit')===-1){ if(eid.indexOf('tip')===-1)selectBox.isSelected = false; } //editor.mode.onmode(''); editor.info = {}; } iconLib.onmousedown = function(e){ e.stopPropagation(); } var exportM = new Vue({ el: '#exportM', data: { isExport: false, }, methods: { exportMap: function(){ editor.updateMap(); var filestr=''; for (var yy = 0; yy < 13; yy++){ filestr+='[' for (var xx = 0; xx < 13; xx++) { var mapxy=editor.map[yy][xx]; if(typeof(mapxy)==typeof({})){ if ('idnum' in mapxy)mapxy=mapxy.idnum; else { // mapxy='!!?'; tip.whichShow = 3; return; } }else if(typeof(mapxy)=='undefined'){ tip.whichShow = 3; return; } mapxy=String(mapxy); mapxy=Array(Math.max(4-mapxy.length,0)).join(' ')+mapxy; filestr+=mapxy+(xx==12?'':',') } filestr += ']'+(yy==12?'':',\n'); } pout.value = filestr; editArea.mapArr = filestr; this.isExport = true; editArea.error = 0; tip.whichShow = 2; } } }) var editArea = new Vue({ el: '#editArea', data: { mapArr: '', errors: [ // 编号1,2,3,4 "格式错误!请使用正确格式(13*13数组,如不清楚,可先点击生成地图查看正确格式)", "当前有未定义ID(在地图区域显示红块),请修改ID或者到icons.js和maps.js中进行定义!", "ID越界(在地图区域显示红块),当前编辑器暂时支持编号小于400,请修改编号!", // "发生错误!", ], error: 0, formatTimer: null, }, watch: { mapArr: function (val, oldval) { var that = this; if(val=='') return; if(exportM.isExport){ exportM.isExport = false; return; } if(that.formatArr()){ that.error = 0; setTimeout(function(){ that.mapArr = that.formatArr(); that.drawMap(); tip.whichShow = 8 }, 1000); that.formatTimer = setTimeout(function(){ pout.value = that.formatArr(); }, 5000); //5s后再格式化,不然光标跳到最后很烦 }else{ that.error = 1; } }, error: function(){ // console.log(editArea.mapArr); } }, methods: { drawMap: function(){ var that = this; // var mapArray = that.mapArr.split(/\D+/).join(' ').trim().split(' '); var mapArray = JSON.parse('['+that.mapArr+']'); for(var y=0; y<13; y++) for(var x=0; x<13; x++){ var num = mapArray[y][x]; if(num == 0 ) editor.map[y][x] = 0; else if(num >= 400){ that.error = 3; editor.map[y][x] = undefined; }else if(typeof(editor.indexs[num][0]) == 'undefined'){ that.error = 2; editor.map[y][x] = undefined; }else editor.map[y][x] = editor.ids[[editor.indexs[num][0]]]; } editor.updateMap(); }, formatArr: function(){ var formatArrStr = ''; var that = this; clearTimeout(that.formatTimer); if(this.mapArr.split(/\D+/).join(' ').trim().split(' ').length != 169) return false; var arr = this.mapArr.replace(/\s+/g, '').split('],['); if(arr.length != 13) return ; for(var i =0; i<13; i++){ var a = []; formatArrStr +='['; if(i==0||i==12) a = arr[i].split(/\D+/).join(' ').trim().split(' '); else a = arr[i].split(/\D+/); if(a.length != 13){ formatArrStr = ''; return ; } for(var k=0; k<13; k++){ var num = parseInt(a[k]); formatArrStr += Array(Math.max(4-String(num).length,0)).join(' ')+num+(k==12?'':','); } formatArrStr += ']'+(i==12?'':',\n'); } return formatArrStr; } } }); var editTip = new Vue({ el: '#editTip', data: { err: '' }, methods: { copyMap: function(){ tip.whichShow = 0; if(pout.value.trim() != ''){ if(editArea.error) { this.err = editArea.errors[editArea.error-1]; tip.whichShow = 5 return; } try{ pout.select(); document.execCommand("Copy"); tip.whichShow = 6; }catch(e){ this.err= e; tip.whichShow = 5; } }else{ tip.whichShow = 7; } } }, }) var clear = new Vue({ el: '#clear', methods: { clearMap: function(){ editor.mapInit(); editor.updateMap(); clearTimeout(editArea.formatTimer); clearTimeout(tip.timer); pout.value = ''; editArea.mapArr = ''; tip.whichShow = 4; editArea.error = 0; } } }) printf = function(str_,type) { selectBox.isSelected = false; if(!type){ tip.whichShow=11; } else { tip.whichShow=12; } setTimeout(function(){ if(!type){ tip.msgs[11]=String(str_); tip.whichShow=12; } else { tip.msgs[10]=String(str_); tip.whichShow=11; } },1); } printe = function(str_){printf(str_,'error')} tip_in_showMode = [ '涉及图片的更改需要F5刷新浏览器来生效', '文本域可以通过双击,在文本编辑器或事件编辑器中编辑', '事件编辑器中的显示文本和自定义脚本的方块也可以双击', "画出的地图要点击\"保存地图\"才会写入到文件中", ]; var tip = new Vue({ el: '#tip', data: { infos: {}, hasId: true, isAutotile: false, isSelectedBlock: false, isClearBlock: false, geneMapSuccess: false, timer: null, msgs: [ //分别编号1,2,3,4,5,6,7,8,9,10;奇数警告,偶数成功 "当前未选择任何图块,请先在右边选择要画的图块!", "生成地图成功!可点击复制按钮复制地图数组到剪切板", "生成失败! 地图中有未定义的图块,建议先用其他有效图块覆盖或点击清除地图!", "地图清除成功!", "复制失败!", "复制成功!可直接粘贴到楼层文件的地图数组中。", "复制失败!当前还没有数据", "修改成功!可点击复制按钮复制地图数组到剪切板", "选择背景图片失败!文件名格式错误或图片不存在!", "更新背景图片成功!", "11:警告", "12:成功" ], mapMsg: '', whichShow: 0, }, watch: { infos: { handler: function(val, oldval){ this.isClearBlock = false; if(typeof(val) != 'undefined'){ if(val==0) { this.isClearBlock = true; return; } if('id' in val){ this.hasId = true; }else{ this.hasId = false; } this.isAutotile = false; if(val.images == "autotile" && this.hasId) this.isAutotile = true; } }, deep: true }, whichShow: function(){ var that = this; that.mapMsg = ''; that.msgs[4] = "复制失败!"+editTip.err; clearTimeout(that.timer); if(that.whichShow){ that.mapMsg = that.msgs[that.whichShow-1]; that.timer = setTimeout(function() { if(!(that.whichShow%2)) that.whichShow = 0; }, 5000); //5秒后自动清除success,warn不清除 } } } }) var selectBox = new Vue({ el: '#selectBox', data: { isSelected: false }, watch: { isSelected: function(){ tip.isSelectedBlock = this.isSelected; tip.whichShow = 0; clearTimeout(tip.timer); } } }) var bgSelect = new Vue({ el: '#bgSelect', data: { bgs: {}, selectedBg: 'ground', imgname: '' }, watch:{ selectedBg: function(){ editor.bgY = this.bgs.indexOf(this.selectedBg); editor.drawMapBg(); } }, methods: { updatebg: function(){ tip.whichShow = 0; var regx = /\S+\.(png|bmp|jpg|jpeg|gif)$/i; if(regx.test(this.imgname)){ var url = 'images/'+this.imgname; editor.loadImg(url).then(function(img){ editor.drawMapBg(img); tip.whichShow = 10; }).catch(function(err){ console.log(err); tip.whichShow = 9; }); }else{ tip.whichShow = 9; } } } })