From 97ba00cb336537511b300fb374f7f9c1248b1e38 Mon Sep 17 00:00:00 2001
From: ckcz123
Date: Mon, 30 Dec 2019 18:38:50 +0800
Subject: [PATCH] tileset bind width&height
---
_server/editor.js | 4 ++-
_server/editor_datapanel.js | 44 +++++++++++++++++++++++++++------
_server/editor_legacy.js | 2 +-
_server/editor_listen.js | 1 +
_server/editor_mappanel.js | 15 +++++++++--
_server/editor_materialpanel.js | 17 +++++++++++++
editor.html | 1 +
7 files changed, 72 insertions(+), 12 deletions(-)
diff --git a/_server/editor.js b/_server/editor.js
index 84b3f424..c7396183 100644
--- a/_server/editor.js
+++ b/_server/editor.js
@@ -85,8 +85,10 @@ function editor() {
copyEnemyItem : {
type: null,
data: {}
- }
+ },
+ // tile
+ tileSize: [1,1],
};
window.onerror = function (msg, url, lineNo, columnNo, error) {
diff --git a/_server/editor_datapanel.js b/_server/editor_datapanel.js
index a533d758..a962efe0 100644
--- a/_server/editor_datapanel.js
+++ b/_server/editor_datapanel.js
@@ -636,6 +636,8 @@ editor_datapanel_wrapper = function (editor) {
editor.uifunctions.appendConfirm_func = function () {
+ var appendRegister = document.getElementById('appendRegister');
+
var appendConfirm = document.getElementById('appendConfirm');
appendConfirm.onclick = function () {
@@ -699,15 +701,28 @@ editor_datapanel_wrapper = function (editor) {
}
var dt = editor.dom.spriteCtx.getImageData(0, 0, editor.dom.sprite.width, editor.dom.sprite.height);
var imgbase64 = editor.dom.sprite.toDataURL('image/png');
- fs.writeFile('./project/images/' + editor_mode.appendPic.imageName + '.png', imgbase64.split(',')[1], 'base64', function (err, data) {
+ var imgName = editor_mode.appendPic.imageName;
+ fs.writeFile('./project/images/' + imgName + '.png', imgbase64.split(',')[1], 'base64', function (err, data) {
if (err) {
printe(err);
throw (err)
}
- printf('追加素材成功,你可以继续追加其他素材,最后再刷新以显示在素材区');
- editor.dom.sprite.style.height = (editor.dom.sprite.height = (editor.dom.sprite.height + ysize)) + "px";
+ var currHeight = editor.dom.sprite.height;
+ editor.dom.sprite.style.height = (editor.dom.sprite.height = (currHeight + ysize)) + "px";
editor.dom.spriteCtx.putImageData(dt, 0, 0);
- core.material.images[editor.dom.selectAppend.value].src = imgbase64;
+ core.material.images[imgName].src = imgbase64;
+ editor.widthsX[imgName][3] = currHeight;
+ if (appendRegister && appendRegister.checked) {
+ editor.file.autoRegister({images: imgName}, function (e) {
+ if (e) {
+ printe(e);
+ throw e;
+ }
+ printf('追加素材并自动注册成功!你可以继续追加其他素材,最后再刷新以使用。');
+ });
+ } else {
+ printf('追加素材成功!你可以继续追加其他素材,最后再刷新以使用。');
+ }
});
}
@@ -731,15 +746,28 @@ editor_datapanel_wrapper = function (editor) {
dt = editor.dom.spriteCtx.getImageData(0, 0, editor.dom.sprite.width, editor.dom.sprite.height);
var imgbase64 = editor.dom.sprite.toDataURL('image/png');
- fs.writeFile('./project/images/' + editor_mode.appendPic.imageName + '.png', imgbase64.split(',')[1], 'base64', function (err, data) {
+ var imgName = editor_mode.appendPic.imageName;
+ fs.writeFile('./project/images/' + imgName + '.png', imgbase64.split(',')[1], 'base64', function (err, data) {
if (err) {
printe(err);
throw (err)
}
- printf('快速追加素材成功,你可以继续追加其他素材,最后再刷新以显示在素材区');
- editor.dom.sprite.style.height = (editor.dom.sprite.height = (editor.dom.sprite.height + ysize)) + "px";
+ var currHeight = editor.dom.sprite.height;
+ editor.dom.sprite.style.height = (editor.dom.sprite.height = (currHeight + ysize)) + "px";
editor.dom.spriteCtx.putImageData(dt, 0, 0);
- core.material.images[editor.dom.selectAppend.value].src = imgbase64;
+ core.material.images[imgName].src = imgbase64;
+ editor.widthsX[imgName][3] = currHeight;
+ if (appendRegister && appendRegister.checked) {
+ editor.file.autoRegister({images: imgName}, function (e) {
+ if (e) {
+ printe(e);
+ throw e;
+ }
+ printf('快速追加素材并自动注册成功!你可以继续追加其他素材,最后再刷新以使用。');
+ })
+ } else {
+ printf('快速追加素材成功!你可以继续追加其他素材,最后再刷新以使用。');
+ }
});
}
diff --git a/_server/editor_legacy.js b/_server/editor_legacy.js
index 7242553c..35e5518d 100644
--- a/_server/editor_legacy.js
+++ b/_server/editor_legacy.js
@@ -216,7 +216,7 @@ tip.showHelp = function(value) {
'双击事件编辑器的图块可以进行长文本编辑/脚本编辑/地图选点/UI绘制预览等操作',
'ESC或点击空白处可以自动保存当前修改',
'H键可以打开操作帮助哦',
- 'tileset贴图模式下可以按选中tileset素材,并在地图上拖动来一次绘制一个区域',
+ 'tileset贴图模式可以在地图上拖动来一次绘制一个区域;右键额外素材也可以绑定宽高',
'可以拖动地图上的图块和事件,或按Ctrl+C, Ctrl+X和Ctrl+V进行复制,剪切和粘贴,Delete删除',
'Alt+数字键保存图块,数字键读取保存的图块',
];
diff --git a/_server/editor_listen.js b/_server/editor_listen.js
index 1e50f6af..62bb2e73 100644
--- a/_server/editor_listen.js
+++ b/_server/editor_listen.js
@@ -24,6 +24,7 @@ editor_listen_wrapper = function (editor) {
editor.dom.iconExpandBtn.onclick = editor.uifunctions.fold_material_click
editor.dom.iconLib.onmousedown = editor.uifunctions.material_ondown
+ editor.dom.iconLib.oncontextmenu = function (e) { e.preventDefault() }
editor.dom.extraEvent.onmousedown = editor.uifunctions.extraEvent_click
editor.dom.chooseThis.onmousedown = editor.uifunctions.chooseThis_click
diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js
index 59d538ee..f36f4d33 100644
--- a/_server/editor_mappanel.js
+++ b/_server/editor_mappanel.js
@@ -221,8 +221,19 @@ editor_mappanel_wrapper = function (editor) {
}
}
}
- // console.log(editor.uivalues.stepPostfix);
- if (editor.brushMod === 'tileset' && core.tilesets.indexOf(editor.info.images) !== -1) {
+ var useBrushMode = editor.brushMod == 'tileset';
+ if (editor.uivalues.stepPostfix.length == 1 && (editor.uivalues.tileSize[0] > 1 || editor.uivalues.tileSize[1] > 1)) {
+ useBrushMode = true;
+ var x0 = editor.uivalues.stepPostfix[0].x;
+ var y0 = editor.uivalues.stepPostfix[0].y;
+ editor.uivalues.stepPostfix = [];
+ for (var jj = y0; jj < y0 + editor.uivalues.tileSize[1]; ++jj) {
+ for (var ii = x0; ii < x0 + editor.uivalues.tileSize[0]; ++ii) {
+ editor.uivalues.stepPostfix.push({ x: ii, y: jj });
+ }
+ }
+ }
+ if (useBrushMode && core.tilesets.indexOf(editor.info.images) !== -1) {
var imgWidth = ~~(core.material.images.tilesets[editor.info.images].width / 32);
var x0 = editor.uivalues.stepPostfix[0].x;
var y0 = editor.uivalues.stepPostfix[0].y;
diff --git a/_server/editor_materialpanel.js b/_server/editor_materialpanel.js
index 2c0daabe..f5dd9916 100644
--- a/_server/editor_materialpanel.js
+++ b/_server/editor_materialpanel.js
@@ -50,6 +50,7 @@ editor_materialpanel_wrapper = function (editor) {
*/
editor.uifunctions.material_ondown = function (e) {
e.stopPropagation();
+ e.preventDefault();
if (!editor.isMobile && e.clientY >= editor.dom.iconLib.offsetHeight - editor.uivalues.scrollBarHeight) return;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
@@ -59,6 +60,7 @@ editor_materialpanel_wrapper = function (editor) {
'size': 32
};
editor.loc = loc;
+ editor.uivalues.tileSize = [1,1];
var pos = editor.uifunctions.locToPos(loc);
for (var spriter in editor.widthsX) {
if (pos.x >= editor.widthsX[spriter][1] && pos.x < editor.widthsX[spriter][2]) {
@@ -126,6 +128,21 @@ editor_materialpanel_wrapper = function (editor) {
break;
}
}
+
+ if (editor.info.isTile && e.button == 2) {
+ var v = prompt("请输入该额外素材区域绑定宽高,以逗号分隔", "1,1");
+ if (v != null && /^\d+,\d+$/.test(v)) {
+ v = v.split(",");
+ var x = parseInt(v[0]), y = parseInt(v[1]);
+ var widthX = editor.widthsX[editor.info.images];
+ if (x <= 0 || y <= 0 || editor.info.x + x > widthX[2] - widthX[1] || 32*(editor.info.y + y) > widthX[3]) {
+ alert("不合法的输入范围,已经越界");
+ } else {
+ editor.uivalues.tileSize = [x, y];
+ }
+ }
+ }
+
}
tip.infos(JSON.parse(JSON.stringify(editor.info)));
editor_mode.onmode('nextChange');
diff --git a/editor.html b/editor.html
index b1a645f7..ef0cf608 100644
--- a/editor.html
+++ b/editor.html
@@ -73,6 +73,7 @@
+ 自动注册
色相: