function editor() { this.version = "2.0"; this.brushMod = "line";//["line","rectangle","tileset"] this.layerMod = "map";//["fgmap","map","bgmap"] this.isMobile = false; window.onerror = function (msg, url, lineNo, columnNo, error) { var string = msg.toLowerCase(); var substring = "script error"; var message; if (string.indexOf(substring) > -1){ message = 'Script Error: See Browser Console for Detail'; } else { if (url) url = url.substring(url.lastIndexOf('/')+1); message = [ 'Message: ' + msg, 'URL: ' + url, 'Line: ' + lineNo, 'Column: ' + columnNo, 'Error object: ' + JSON.stringify(error) ].join(' - '); // alert(message); } try { printe(message) } catch (e) { alert(message); } return false; }; } /* editor.loc editor.pos editor.info 始终是最后一次点击的结果 注意editor.info可能因为点击其他地方而被清空 */ /////////// 数据相关 /////////// editor.prototype.init = function (callback) { var useCompress = main.useCompress; main.useCompress = false; editor.airwallImg = new Image(); editor.airwallImg.src = './project/images/airwall.png'; main.init('editor', function () { editor_util_wrapper(editor); editor_game_wrapper(editor, main, core); editor_table_wrapper(editor); editor_unsorted_1_wrapper(editor); afterMainInit(); }); var afterMainInit = function () { editor.game.fixFunctionInGameData(); editor.main = main; editor.core = core; editor.fs = fs; 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.initStatus.maps); core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function () { afterCoreReset(); }, true); core.events.setInitData(null); }); } var afterCoreReset = function () { editor.game.idsInit(core.maps, core.icons.icons); // 初始化图片素材信息 editor.drawInitData(core.icons.icons); // 初始化绘图 editor.game.fetchMapFromCore(); editor.updateMap(); editor.buildMark(); editor.drawEventBlock(); editor.pos = {x: 0, y: 0}; editor.mode.loc(); editor.info = editor.ids[editor.indexs[201]]; editor.mode.enemyitem(); editor.mode.floor(); editor.mode.tower(); editor.mode.functions(); editor.mode.commonevent(); editor.mode.showMode('tower'); editor_multi = editor_multi(); editor_blockly = editor_blockly(); if (editor.useCompress == null) editor.useCompress = useCompress; if (Boolean(callback)) callback(); } } editor.prototype.mapInit = function () { var ec = document.getElementById('event').getContext('2d'); ec.clearRect(0, 0, core.bigmap.width*32, core.bigmap.height*32); document.getElementById('event2').getContext('2d').clearRect(0, 0, core.bigmap.width*32, core.bigmap.height*32); editor.map = []; var sy=editor.currentFloorData.map.length,sx=editor.currentFloorData.map[0].length; for (var y = 0; y < sy; y++) { editor.map[y] = []; for (var x = 0; x < sx; x++) { editor.map[y][x] = 0; } } editor.fgmap=JSON.parse(JSON.stringify(editor.map)); editor.bgmap=JSON.parse(JSON.stringify(editor.map)); editor.currentFloorData.map = editor.map; editor.currentFloorData.fgmap = editor.fgmap; editor.currentFloorData.bgmap = editor.bgmap; editor.currentFloorData.firstArrive = []; editor.currentFloorData.eachArrive = []; editor.currentFloorData.events = {}; editor.currentFloorData.changeFloor = {}; editor.currentFloorData.afterBattle = {}; editor.currentFloorData.afterGetItem = {}; editor.currentFloorData.afterOpenDoor = {}; editor.currentFloorData.cannotMove = {}; } editor.prototype.changeFloor = function (floorId, callback) { for(var ii=0,name;name=['map','bgmap','fgmap'][ii];ii++){ var mapArray=editor[name].map(function (v) { return v.map(function (v) { return v.idnum || v || 0 }) }); editor.currentFloorData[name]=mapArray; } editor.preMapData = null; core.changeFloor(floorId, null, {"x": 0, "y": 0, "direction": "up"}, null, function () { core.bigmap.offsetX=0; core.bigmap.offsetY=0; editor.moveViewport(0,0); editor.game.fetchMapFromCore(); editor.updateMap(); editor_mode.floor(); editor.drawEventBlock(); if (callback) callback(); }); } /////////// 游戏绘图相关 /////////// editor.prototype.drawEventBlock = function () { var fg=document.getElementById('efg').getContext('2d'); fg.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__); for (var i=0;i edata.width) edata.style.width = (edata.width = fullWidth) / ratio + 'px'; edata.style.height = (edata.height = fullHeight) / ratio + 'px'; */ iconImages.style.width = (iconImages.width = fullWidth) / ratio + 'px'; iconImages.style.height = (iconImages.height = fullHeight) / ratio + 'px'; var dc = {drawImage:function(){ var image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight; var a=Array.prototype.slice.call(arguments) if(arguments.length==3){ // [image, dx, dy]=arguments // [sx, sy, sWidth, sHeight, dWidth, dHeight]=[0,0,image.width,image.height,image.width,image.height] image=a[0] a=[a[0],0,0,image.width,image.height,a[1],a[2],image.width,image.height] } if(arguments.length==5){ // [image, dx, dy, dWidth, dHeight]=arguments // [sx, sy, sWidth, sHeight]=[0,0,image.width,image.height] image=a[0] a=[a[0],0,0,image.width,image.height,a[1],a[2],a[3],a[4]] } if(arguments.length==9){ // [image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight]=arguments } image=a[0]; sx=a[1]; sy=a[2]; sWidth=a[3]; sHeight=a[4]; dx=a[5]; dy=a[6]; dWidth=a[7]; dHeight=a[8]; //放弃对 dWidth, dHeight 的支持, 始终画一样大的 var dimg=new Image() dimg.src = image.src; dimg.style.clip=['rect(',sy,'px,',sx+sWidth,'px,',sy+sHeight,'px,',sx,'px)'].join('') dimg.style.top=dy-sy+'px' dimg.style.left=dx-sx+'px' dimg.width=image.width/ratio dimg.height=image.height/ratio iconImages.appendChild(dimg) }} // var dc = edata.getContext('2d'); var nowx = 0; var nowy = 0; for (var ii = 0; ii < imgNames.length; ii++) { var img = imgNames[ii]; if (img == 'terrains') { (function(image,dc,nowx){ if (image.complete) { dc.drawImage(image, nowx, 32); core.material.images.airwall = image; delete(editor.airwallImg); } else image.onload = function () { dc.drawImage(image, nowx, 32); core.material.images.airwall = image; delete(editor.airwallImg); editor.updateMap(); } })(editor.airwallImg,dc,nowx); dc.drawImage(images[img], nowx, 32*2); nowx += images[img].width; continue; } if (img == 'autotile') { var autotiles = images[img]; for (var im in autotiles) { dc.drawImage(autotiles[im], 0, 0, 96, 128, nowx, nowy, 96, 128); nowy += autotiles[im].height; } nowx += 3 * 32; continue; } dc.drawImage(images[img], nowx, 0) nowx += images[img].width; } for (var ii in core.tilesets) { var img = core.tilesets[ii]; dc.drawImage(tilesets[img], nowx, 0) nowx += tilesets[img].width; } //editor.mapInit(); } editor.prototype.buildMark = function(){ // 生成定位编号 var arrColMark=document.getElementById('arrColMark'); var arrRowMark=document.getElementById('arrRowMark'); var mapColMark=document.getElementById('mapColMark'); var mapRowMark=document.getElementById('mapRowMark'); var buildMark = function (offsetX,offsetY) { var colNum = ' '; for (var i = 0; i < core.__SIZE__; i++) { var tpl = '' + (i+offsetX) + '
'; colNum += tpl; } arrColMark.innerHTML = '' + colNum + ''; mapColMark.innerHTML = '' + colNum + ''; var rowNum = ' '; for (var i = 0; i < core.__SIZE__; i++) { var tpl = '' + (i+offsetY) + '
'; rowNum += tpl; } arrRowMark.innerHTML = rowNum; mapRowMark.innerHTML = rowNum; } var buildMark_mobile = function (offsetX,offsetY) { var colNum = ' '; for (var i = 0; i < core.__SIZE__; i++) { var tpl = '' + (' '+i).slice(-2).replace(' ',' ') + '
'; colNum += tpl; } arrColMark.innerHTML = '' + colNum + ''; //mapColMark.innerHTML = '' + colNum + ''; var rowNum = ' '; for (var i = 0; i < core.__SIZE__; i++) { var tpl = '' + (' '+i).slice(-2).replace(' ',' ') + '
'; rowNum += tpl; } arrRowMark.innerHTML = rowNum; //mapRowMark.innerHTML = rowNum; //===== var colNum = ' '; for (var i = 0; i < core.__SIZE__; i++) { var tpl = '
' + (' '+(i+offsetX)).slice(-2).replace(' ',' ') + '
'; colNum += tpl; } mapColMark.innerHTML = '
' + colNum + '
'; var rowNum = ' '; for (var i = 0; i < core.__SIZE__; i++) { var tpl = '
' + (' '+(i+offsetY)).slice(-2).replace(' ',' ') + '
'; rowNum += tpl; } mapRowMark.innerHTML = rowNum; } if(editor.isMobile){ buildMark_mobile(core.bigmap.offsetX/32,core.bigmap.offsetY/32); } else { buildMark(core.bigmap.offsetX/32,core.bigmap.offsetY/32); } } editor.prototype.setSelectBoxFromInfo=function(thisevent){ var pos={x: 0, y: 0, images: "terrains"}; var ysize = 32; if(thisevent==0){ } else if (thisevent.idnum==17){ pos.y=1; } else { pos.x=editor.widthsX[thisevent.images][1]; pos.y=thisevent.y; if(thisevent.x)pos.x+=thisevent.x; if(thisevent.images=='terrains')pos.y+=2; ysize = thisevent.images.endsWith('48') ? 48 : 32; } var dataSelection = document.getElementById('dataSelection'); dataSelection.style.left = pos.x * 32 + 'px'; dataSelection.style.top = pos.y * ysize + 'px'; dataSelection.style.height = ysize - 6 + 'px'; setTimeout(function(){selectBox.isSelected(true);}); editor.info = JSON.parse(JSON.stringify(thisevent)); tip.infos(JSON.parse(JSON.stringify(thisevent))); editor.pos=pos; editor_mode.onmode('nextChange'); editor_mode.onmode('enemyitem'); } editor.prototype.listen = function () { // 移动至 editor_unsorted_1.js }//绑定事件 editor.prototype.mobile_listen=function(){ // 移动至 editor_unsorted_1.js } editor = new editor();