remove unsorted2
This commit is contained in:
parent
64c2e43d00
commit
a7cfeac272
@ -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();
|
||||
@ -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<image.width;i++) {
|
||||
for (var j=0;j<image.height;j++) {
|
||||
var pixel = editor.util.getPixel(imgData, i, j);
|
||||
if (pixel[0]==0 && pixel[1]==0 && pixel[2]==0 && 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;
|
||||
}
|
||||
*/
|
||||
|
||||
// Step 2: 检测长宽比
|
||||
var ysize = editor.dom.selectAppend.value.endsWith('48') ? 48 : 32;
|
||||
if ((image.width % 32 != 0 || image.height % ysize != 0) && (image.width <= 128 && image.height <= ysize * 4)
|
||||
&& confirm("目标长宽不符合条件,是否自动进行调整?")) {
|
||||
var ncanvas = document.createElement('canvas').getContext('2d');
|
||||
ncanvas.canvas.width = 128;
|
||||
ncanvas.canvas.height = 4 * ysize;
|
||||
ncanvas.mozImageSmoothingEnabled = false;
|
||||
ncanvas.webkitImageSmoothingEnabled = false;
|
||||
ncanvas.msImageSmoothingEnabled = false;
|
||||
ncanvas.imageSmoothingEnabled = false;
|
||||
var w = image.width / 4, h = image.height / 4;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
for (var j = 0; j < 4; j++) {
|
||||
ncanvas.drawImage(tempCanvas.canvas, i * w, j * h, w, h, i * 32 + (32 - w) / 2, j * ysize + (ysize - h) / 2, w, h);
|
||||
}
|
||||
}
|
||||
tempCanvas = ncanvas;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (!changed) {
|
||||
callback(image);
|
||||
}
|
||||
else {
|
||||
var nimg = new Image();
|
||||
nimg.onload = function () {
|
||||
callback(nimg);
|
||||
};
|
||||
nimg.src = tempCanvas.canvas.toDataURL();
|
||||
}
|
||||
}
|
||||
|
||||
editor.dom.selectFileBtn.onclick = function () {
|
||||
var loadImage = function (content, callback) {
|
||||
var image = new Image();
|
||||
try {
|
||||
image.onload = function () {
|
||||
callback(image);
|
||||
}
|
||||
image.src = content;
|
||||
}
|
||||
catch (e) {
|
||||
printe(e);
|
||||
}
|
||||
}
|
||||
core.readFile(function (content) {
|
||||
loadImage(content, function (image) {
|
||||
autoAdjust(image, function (image) {
|
||||
editor_mode.appendPic.img = image;
|
||||
editor_mode.appendPic.width = image.width;
|
||||
editor_mode.appendPic.height = image.height;
|
||||
|
||||
if (editor.dom.selectAppend.value == 'autotile') {
|
||||
for (var ii = 0; ii < 3; ii++) {
|
||||
var newsprite = editor.dom.appendPicCanvas.children[ii];
|
||||
newsprite.style.width = (newsprite.width = image.width) / editor.uivalues.ratio + 'px';
|
||||
newsprite.style.height = (newsprite.height = image.height) / editor.uivalues.ratio + 'px';
|
||||
}
|
||||
editor.dom.spriteCtx.clearRect(0, 0, editor.dom.sprite.width, editor.dom.sprite.height);
|
||||
editor.dom.spriteCtx.drawImage(image, 0, 0);
|
||||
}
|
||||
else {
|
||||
var ysize = editor.dom.selectAppend.value.endsWith('48') ? 48 : 32;
|
||||
for (var ii = 0; ii < 3; ii++) {
|
||||
var newsprite = editor.dom.appendPicCanvas.children[ii];
|
||||
newsprite.style.width = (newsprite.width = Math.floor(image.width / 32) * 32) / editor.uivalues.ratio + 'px';
|
||||
newsprite.style.height = (newsprite.height = Math.floor(image.height / ysize) * ysize) / editor.uivalues.ratio + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
//画灰白相间的格子
|
||||
var bgc = editor.dom.bg.getContext('2d');
|
||||
var colorA = ["#f8f8f8", "#cccccc"];
|
||||
var colorIndex;
|
||||
var sratio = 4;
|
||||
for (var ii = 0; ii < image.width / 32 * sratio; ii++) {
|
||||
colorIndex = 1 - ii % 2;
|
||||
for (var jj = 0; jj < image.height / 32 * sratio; jj++) {
|
||||
bgc.fillStyle = colorA[colorIndex];
|
||||
colorIndex = 1 - colorIndex;
|
||||
bgc.fillRect(ii * 32 / sratio, jj * 32 / sratio, 32 / sratio, 32 / sratio);
|
||||
}
|
||||
}
|
||||
|
||||
//把导入的图片画出
|
||||
editor.dom.sourceCtx.drawImage(image, 0, 0);
|
||||
editor_mode.appendPic.sourceImageData = editor.dom.sourceCtx.getImageData(0, 0, image.width, image.height);
|
||||
|
||||
//重置临时变量
|
||||
editor.dom.selectAppend.onchange();
|
||||
});
|
||||
});
|
||||
}, null, 'img');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
editor.uifunctions.changeColorInput_func = function () {
|
||||
var changeColorInput = document.getElementById('changeColorInput')
|
||||
changeColorInput.oninput = function () {
|
||||
var delta = (~~changeColorInput.value) * 30;
|
||||
var imgData = editor_mode.appendPic.sourceImageData;
|
||||
var nimgData = new ImageData(imgData.width, imgData.height);
|
||||
// ImageData .data 形如一维数组,依次排着每个点的 R(0~255) G(0~255) B(0~255) A(0~255)
|
||||
var convert = function (rgba, delta) {
|
||||
var rgbToHsl = editor.util.rgbToHsl
|
||||
var hue2rgb = editor.util.hue2rgb
|
||||
var hslToRgb = editor.util.hslToRgb
|
||||
//
|
||||
var hsl = rgbToHsl(rgba)
|
||||
hsl[0] = (hsl[0] + delta) % 360
|
||||
var nrgb = hslToRgb(hsl)
|
||||
nrgb.push(rgba[3])
|
||||
return nrgb
|
||||
}
|
||||
for (var x = 0; x < imgData.width; x++) {
|
||||
for (var y = 0; y < imgData.height; y++) {
|
||||
editor.util.setPixel(nimgData, x, y, convert(editor.util.getPixel(imgData, x, y), delta))
|
||||
}
|
||||
}
|
||||
editor.dom.sourceCtx.clearRect(0, 0, imgData.width, imgData.height);
|
||||
editor.dom.sourceCtx.putImageData(nimgData, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
editor.uifunctions.picClick_func = function () {
|
||||
|
||||
|
||||
var eToLoc = function (e) {
|
||||
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft
|
||||
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop
|
||||
var loc = {
|
||||
'x': scrollLeft + e.clientX + editor.dom.appendPicCanvas.scrollLeft - editor.dom.left1.offsetLeft - editor.dom.appendPicCanvas.offsetLeft,
|
||||
'y': scrollTop + e.clientY + editor.dom.appendPicCanvas.scrollTop - editor.dom.left1.offsetTop - editor.dom.appendPicCanvas.offsetTop,
|
||||
'size': 32,
|
||||
'ysize': editor.dom.selectAppend.value.endsWith('48') ? 48 : 32
|
||||
};
|
||||
return loc;
|
||||
}//返回可用的组件内坐标
|
||||
|
||||
var locToPos = function (loc) {
|
||||
var pos = { 'x': ~~(loc.x / loc.size), 'y': ~~(loc.y / loc.ysize), 'ysize': loc.ysize }
|
||||
return pos;
|
||||
}
|
||||
|
||||
editor.dom.picClick.onclick = function (e) {
|
||||
var loc = eToLoc(e);
|
||||
var pos = locToPos(loc);
|
||||
//console.log(e,loc,pos);
|
||||
var num = editor_mode.appendPic.num;
|
||||
var ii = editor_mode.appendPic.index;
|
||||
if (ii + 1 >= 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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//////////////////// 公共事件 //////////////////////////////////////////
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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)');
|
||||
|
||||
@ -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;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<image.width;i++) {
|
||||
for (var j=0;j<image.height;j++) {
|
||||
var pixel = editor.util.getPixel(imgData, i, j);
|
||||
if (pixel[0]==0 && pixel[1]==0 && pixel[2]==0 && 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;
|
||||
}
|
||||
*/
|
||||
|
||||
// Step 2: 检测长宽比
|
||||
var ysize = editor.dom.selectAppend.value.endsWith('48') ? 48 : 32;
|
||||
if ((image.width%32!=0 || image.height%ysize!=0) && (image.width<=128 && image.height<=ysize*4)
|
||||
&& confirm("目标长宽不符合条件,是否自动进行调整?")) {
|
||||
var ncanvas = document.createElement('canvas').getContext('2d');
|
||||
ncanvas.canvas.width = 128;
|
||||
ncanvas.canvas.height = 4*ysize;
|
||||
ncanvas.mozImageSmoothingEnabled = false;
|
||||
ncanvas.webkitImageSmoothingEnabled = false;
|
||||
ncanvas.msImageSmoothingEnabled = false;
|
||||
ncanvas.imageSmoothingEnabled = false;
|
||||
var w = image.width / 4, h = image.height / 4;
|
||||
for (var i=0;i<4;i++) {
|
||||
for (var j=0;j<4;j++) {
|
||||
ncanvas.drawImage(tempCanvas.canvas, i*w, j*h, w, h, i*32 + (32-w)/2, j*ysize + (ysize-h)/2, w, h);
|
||||
}
|
||||
}
|
||||
tempCanvas = ncanvas;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (!changed) {
|
||||
callback(image);
|
||||
}
|
||||
else {
|
||||
var nimg = new Image();
|
||||
nimg.onload = function () {
|
||||
callback(nimg);
|
||||
};
|
||||
nimg.src = tempCanvas.canvas.toDataURL();
|
||||
}
|
||||
}
|
||||
|
||||
var selectFileBtn = document.getElementById('selectFileBtn');
|
||||
selectFileBtn.onclick = function () {
|
||||
var loadImage = function (content, callback) {
|
||||
var image = new Image();
|
||||
try {
|
||||
image.onload = function () {
|
||||
callback(image);
|
||||
}
|
||||
image.src = content;
|
||||
}
|
||||
catch (e) {
|
||||
printe(e);
|
||||
}
|
||||
}
|
||||
core.readFile(function (content) {
|
||||
loadImage(content, function (image) {
|
||||
autoAdjust(image, function (image) {
|
||||
editor_mode.appendPic.img = image;
|
||||
editor_mode.appendPic.width = image.width;
|
||||
editor_mode.appendPic.height = image.height;
|
||||
|
||||
if (editor.dom.selectAppend.value == 'autotile') {
|
||||
for (var ii = 0; ii < 3; ii++) {
|
||||
var newsprite = editor.dom.appendPicCanvas.children[ii];
|
||||
newsprite.style.width = (newsprite.width = image.width) / editor.uivalues.ratio + 'px';
|
||||
newsprite.style.height = (newsprite.height = image.height) / editor.uivalues.ratio + 'px';
|
||||
}
|
||||
editor.dom.spriteCtx.clearRect(0, 0, editor.dom.sprite.width, editor.dom.sprite.height);
|
||||
editor.dom.spriteCtx.drawImage(image, 0, 0);
|
||||
}
|
||||
else {
|
||||
var ysize = editor.dom.selectAppend.value.endsWith('48') ? 48 : 32;
|
||||
for (var ii = 0; ii < 3; ii++) {
|
||||
var newsprite = editor.dom.appendPicCanvas.children[ii];
|
||||
newsprite.style.width = (newsprite.width = Math.floor(image.width / 32) * 32) / editor.uivalues.ratio + 'px';
|
||||
newsprite.style.height = (newsprite.height = Math.floor(image.height / ysize) * ysize) / editor.uivalues.ratio + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
//画灰白相间的格子
|
||||
var bgc = editor.dom.bg.getContext('2d');
|
||||
var colorA = ["#f8f8f8", "#cccccc"];
|
||||
var colorIndex;
|
||||
var sratio = 4;
|
||||
for (var ii = 0; ii < image.width / 32 * sratio; ii++) {
|
||||
colorIndex = 1 - ii % 2;
|
||||
for (var jj = 0; jj < image.height / 32 * sratio; jj++) {
|
||||
bgc.fillStyle = colorA[colorIndex];
|
||||
colorIndex = 1 - colorIndex;
|
||||
bgc.fillRect(ii * 32 / sratio, jj * 32 / sratio, 32 / sratio, 32 / sratio);
|
||||
}
|
||||
}
|
||||
|
||||
//把导入的图片画出
|
||||
editor.dom.sourceCtx.drawImage(image, 0, 0);
|
||||
editor_mode.appendPic.sourceImageData=editor.dom.sourceCtx.getImageData(0,0,image.width,image.height);
|
||||
|
||||
//重置临时变量
|
||||
editor.dom.selectAppend.onchange();
|
||||
});
|
||||
});
|
||||
}, null, 'img');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var changeColorInput=document.getElementById('changeColorInput')
|
||||
changeColorInput.oninput=function(){
|
||||
var delta=(~~changeColorInput.value)*30;
|
||||
var imgData=editor_mode.appendPic.sourceImageData;
|
||||
var nimgData=new ImageData(imgData.width,imgData.height);
|
||||
// ImageData .data 形如一维数组,依次排着每个点的 R(0~255) G(0~255) B(0~255) A(0~255)
|
||||
var convert=function(rgba,delta){
|
||||
var rgbToHsl = editor.util.rgbToHsl
|
||||
var hue2rgb = editor.util.hue2rgb
|
||||
var hslToRgb = editor.util.hslToRgb
|
||||
//
|
||||
var hsl=rgbToHsl(rgba)
|
||||
hsl[0]=(hsl[0]+delta)%360
|
||||
var nrgb=hslToRgb(hsl)
|
||||
nrgb.push(rgba[3])
|
||||
return nrgb
|
||||
}
|
||||
for(var x=0; x<imgData.width; x++){
|
||||
for(var y=0 ; y<imgData.height; y++){
|
||||
editor.util.setPixel(nimgData,x,y,convert(editor.util.getPixel(imgData,x,y),delta))
|
||||
}
|
||||
}
|
||||
editor.dom.sourceCtx.clearRect(0, 0, imgData.width, imgData.height);
|
||||
editor.dom.sourceCtx.putImageData(nimgData, 0, 0);
|
||||
}
|
||||
|
||||
var left1 = document.getElementById('left1');
|
||||
var eToLoc = function (e) {
|
||||
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft
|
||||
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop
|
||||
var loc = {
|
||||
'x': scrollLeft + e.clientX + editor.dom.appendPicCanvas.scrollLeft - left1.offsetLeft - editor.dom.appendPicCanvas.offsetLeft,
|
||||
'y': scrollTop + e.clientY + editor.dom.appendPicCanvas.scrollTop - left1.offsetTop - editor.dom.appendPicCanvas.offsetTop,
|
||||
'size': 32,
|
||||
'ysize': editor.dom.selectAppend.value.endsWith('48') ? 48 : 32
|
||||
};
|
||||
return loc;
|
||||
}//返回可用的组件内坐标
|
||||
|
||||
var locToPos = function (loc) {
|
||||
var pos = {'x': ~~(loc.x / loc.size), 'y': ~~(loc.y / loc.ysize), 'ysize': loc.ysize}
|
||||
return pos;
|
||||
}
|
||||
|
||||
editor.dom.picClick.onclick = function (e) {
|
||||
var loc = eToLoc(e);
|
||||
var pos = locToPos(loc);
|
||||
//console.log(e,loc,pos);
|
||||
var num = editor_mode.appendPic.num;
|
||||
var ii = editor_mode.appendPic.index;
|
||||
if (ii + 1 >= 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<thiseval.length; ++i) {
|
||||
if (map[thiseval[i]]) {
|
||||
alert("警告:存在重复定义!");
|
||||
return false;
|
||||
}
|
||||
map[thiseval[i]] = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
editor_mode.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.changeDoubleClickModeByButton=function(mode){
|
||||
({
|
||||
delete:function(){
|
||||
printf('下一次双击表格的项删除,切换下拉菜单可取消;编辑后需刷新浏览器生效。');
|
||||
editor_mode.doubleClickMode=mode;
|
||||
},
|
||||
add:function(){
|
||||
printf('下一次双击表格的项则在同级添加新项,切换下拉菜单可取消;编辑后需刷新浏览器生效。');
|
||||
editor_mode.doubleClickMode=mode;
|
||||
}
|
||||
}[mode])();
|
||||
}
|
||||
|
||||
if (Boolean(callback)) callback();
|
||||
}
|
||||
|
||||
}
|
||||
@ -574,7 +574,6 @@
|
||||
<script src='_server/editor_datapanel.js'></script>
|
||||
<script src='_server/editor_materialpanel.js'></script>
|
||||
<script src='_server/editor_listen.js'></script>
|
||||
<script src='_server/editor_unsorted_2.js'></script>
|
||||
<script src='_server/editor_unsorted_3.js'></script>
|
||||
<script src='libs/thirdparty/lz-string.min.js'></script>
|
||||
<script src='libs/thirdparty/localforage.min.js'></script>
|
||||
@ -584,7 +583,7 @@
|
||||
editor.isMobile=true;
|
||||
editor.init(function () {
|
||||
editor.listen();
|
||||
editor.mode.listen();
|
||||
editor.mode_listen();
|
||||
editor.mobile_listen();
|
||||
});
|
||||
//main.listen();
|
||||
|
||||
@ -559,7 +559,6 @@
|
||||
<script src='_server/editor_datapanel.js'></script>
|
||||
<script src='_server/editor_materialpanel.js'></script>
|
||||
<script src='_server/editor_listen.js'></script>
|
||||
<script src='_server/editor_unsorted_2.js'></script>
|
||||
<script src='_server/editor_unsorted_3.js'></script>
|
||||
<script src='libs/thirdparty/lz-string.min.js'></script>
|
||||
<script src='libs/thirdparty/localforage.min.js'></script>
|
||||
@ -568,7 +567,7 @@
|
||||
<script>
|
||||
editor.init(function () {
|
||||
editor.listen();
|
||||
editor.mode.listen();
|
||||
editor.mode_listen();
|
||||
editor.mobile_listen();
|
||||
});
|
||||
//main.listen();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user