diff --git a/_server/editor.js b/_server/editor.js
index 82186895..e31d6a3c 100644
--- a/_server/editor.js
+++ b/_server/editor.js
@@ -53,6 +53,8 @@ function editor() {
lastUsedCtx: document.getElementById('lastUsed').getContext('2d'),
lockMode: document.getElementById('lockMode'),
gameInject: document.getElementById('gameInject'),
+ maps: ['bgmap', 'fgmap', 'map'],
+ canvas: ['bg', 'fg'],
};
this.uivalues={
@@ -266,11 +268,9 @@ editor.prototype.mapInit = function () {
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.dom.maps.forEach(function (one) {
+ editor.currentFloorData[one] = editor[one] = JSON.parse(JSON.stringify(editor.map));
+ });
editor.currentFloorData.firstArrive = [];
editor.currentFloorData.eachArrive = [];
editor.currentFloorData.events = {};
@@ -282,7 +282,7 @@ editor.prototype.mapInit = function () {
}
editor.prototype.changeFloor = function (floorId, callback) {
- for(var ii=0,name;name=['map','bgmap','fgmap'][ii];ii++){
+ for(var ii=0,name;name=editor.dom.maps[ii];ii++){
var mapArray=editor[name].map(function (v) {
return v.map(function (v) {
return v.idnum || v || 0
@@ -386,10 +386,11 @@ editor.prototype.updateMap = function () {
var updateMap = function () {
core.removeGlobalAnimate();
- core.clearMap('bg');
+ editor.dom.canvas.forEach(function (one) {
+ core.clearMap(one);
+ });
core.clearMap('event');
core.clearMap('event2');
- core.clearMap('fg');
core.maps._drawMap_drawAll();
}
updateMap();
@@ -418,12 +419,10 @@ editor.prototype.updateMap = function () {
// 绘制地图 start
for (var y = 0; y < editor.map.length; y++) {
for (var x = 0; x < editor.map[0].length; x++) {
- var tileInfo = editor.map[y][x];
- drawTile(editor.dom.evCtx, x, y, tileInfo);
- tileInfo = editor.fgmap[y][x];
- drawTile(editor.dom.fgCtx, x, y, tileInfo);
- tileInfo = editor.bgmap[y][x];
- drawTile(editor.dom.bgCtx, x, y, tileInfo);
+ drawTile(editor.dom.evCtx, x, y, editor.map[y][x]);
+ editor.dom.canvas.forEach(function (one) {
+ drawTile(editor.dom[one + 'Ctx'], x, y, editor[one+'map'][y][x]);
+ });
}
}
// 绘制地图 end
diff --git a/_server/editor_datapanel.js b/_server/editor_datapanel.js
index 21af16b9..336cecfb 100644
--- a/_server/editor_datapanel.js
+++ b/_server/editor_datapanel.js
@@ -530,7 +530,7 @@ editor_datapanel_wrapper = function (editor) {
newFloorData.height = height;
// Step 2:更新map, bgmap和fgmap
- ["bgmap", "fgmap", "map"].forEach(function (name) {
+ editor.dom.maps.forEach(function (name) {
newFloorData[name] = [];
if (currentFloorData[name] && currentFloorData[name].length > 0) {
for (var j = 0; j < height; ++j) {
diff --git a/_server/editor_file.js b/_server/editor_file.js
index 981add58..d414dd15 100644
--- a/_server/editor_file.js
+++ b/_server/editor_file.js
@@ -83,7 +83,9 @@ editor_file_wrapper = function (editor) {
var datastr = ['main.floors.', floorId, '=\n'];
var tempJsonObj = Object.assign({}, floorData);
- var tempMap = [['map', editor.util.guid()], ['bgmap', editor.util.guid()], ['fgmap', editor.util.guid()]];
+ var tempMap = editor.dom.maps.map(function (one) {
+ return [one, editor.util.guid()]
+ });
tempMap.forEach(function (v) {
v[2] = tempJsonObj[v[0]];
tempJsonObj[v[0]] = v[1];
@@ -164,11 +166,8 @@ editor_file = function (editor, callback) {
/* if (!isset(editor.currentFloorId) || !isset(editor.currentFloorData)) {
callback('未选中文件或无数据');
} */
- var filename = 'project/floors/' + editor.currentFloorId + '.js';
- var datastr = ['main.floors.', editor.currentFloorId, '=\n'];
-
if (core.floorIds.indexOf(editor.currentFloorId) >= 0) {
- for(var ii=0,name;name=['map','bgmap','fgmap'][ii];ii++){
+ for(var ii=0,name;name=editor.dom.maps[ii];ii++){
var mapArray=editor[name].map(function (v) {
return v.map(function (v) {
return v.idnum || v || 0
@@ -667,9 +666,7 @@ editor_file = function (editor, callback) {
Object.keys(editor.file.comment._data.floors._data.loc._data).forEach(function (v) {
delete(locObj[v]);
});
- delete(locObj.map);
- delete(locObj.bgmap);
- delete(locObj.fgmap);
+ editor.dom.maps.forEach(function (one) { delete locObj[one]; });
return locObj;
})(),
editor.file.comment._data.floors._data.floor,
diff --git a/_server/editor_game.js b/_server/editor_game.js
index ad659416..a62f54a4 100644
--- a/_server/editor_game.js
+++ b/_server/editor_game.js
@@ -151,7 +151,8 @@ editor_game_wrapper = function (editor, main, core) {
// 补出缺省的数据
editor.currentFloorData.autoEvent = editor.currentFloorData.autoEvent || {};
//
- for (var ii = 0, name; name = ['bgmap', 'fgmap'][ii]; ii++) {
+ for (var ii = 0, name; name = editor.dom.canvas[ii]; ii++) {
+ name += 'map';
var mapArray = editor.currentFloorData[name];
if (!mapArray || JSON.stringify(mapArray) == JSON.stringify([])) {//未设置或空数组
//与editor.map同形的全0
diff --git a/_server/editor_mappanel.js b/_server/editor_mappanel.js
index 895a07ca..e11a193a 100644
--- a/_server/editor_mappanel.js
+++ b/_server/editor_mappanel.js
@@ -717,29 +717,27 @@ editor_mappanel_wrapper = function (editor) {
editor.brushMod = editor.dom.brushMod4.value;
}
+ editor.uifunctions.setLayerMod = function (layer) {
+ editor.layerMod = layer;
+ var canvas = ['ev', 'ev2'].concat(editor.dom.canvas);
+ canvas.forEach(function (one) {
+ editor.dom[one+'c'].style.opacity = 1;
+ });
+ if (layer != 'map') {
+ canvas.filter(function (one) {
+ return one + 'map' != editor.layerMod
+ }).forEach(function (one) {
+ editor.dom[one+'c'].style.opacity = 0.3;
+ });
+ }
+ }
+
/**
* editor.dom.layerMod.onchange
* 切换编辑的层
*/
editor.uifunctions.layerMod_onchange = function () {
- editor.layerMod = editor.dom.layerMod.value;
- [editor.dom.bgc, editor.dom.fgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) {
- x.style.opacity = 1;
- });
-
- // 手机端....
- if (editor.isMobile) {
- if (editor.dom.layerMod.value == 'bgmap') {
- [editor.dom.fgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) {
- x.style.opacity = 0.3;
- });
- }
- if (editor.dom.layerMod.value == 'fgmap') {
- [editor.dom.bgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) {
- x.style.opacity = 0.3;
- });
- }
- }
+ editor.uifunctions.setLayerMod(editor.dom.layerMod.value);
}
/**
@@ -747,11 +745,7 @@ editor_mappanel_wrapper = function (editor) {
* 切换编辑的层
*/
editor.uifunctions.layerMod2_onchange = function () {
- editor.layerMod = editor.dom.layerMod2.value;
- [editor.dom.fgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) {
- x.style.opacity = 0.3;
- });
- editor.dom.bgc.style.opacity = 1;
+ editor.uifunctions.setLayerMod('bgmap');
}
/**
@@ -759,11 +753,7 @@ editor_mappanel_wrapper = function (editor) {
* 切换编辑的层
*/
editor.uifunctions.layerMod3_onchange = function () {
- editor.layerMod = editor.dom.layerMod3.value;
- [editor.dom.bgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) {
- x.style.opacity = 0.3;
- });
- editor.dom.fgc.style.opacity = 1;
+ editor.uifunctions.setLayerMod('fgmap');
}
/**
@@ -977,11 +967,10 @@ editor_mappanel_wrapper = function (editor) {
}
editor.constructor.prototype.savePreMap = function () {
- var dt = {
- map: editor.map,
- fgmap: editor.fgmap,
- bgmap: editor.bgmap,
- };
+ var dt = {};
+ editor.dom.maps.forEach(function (one) {
+ dt[one] = editor[one];
+ });
if (editor.uivalues.preMapData.length == 0
|| !core.same(editor.uivalues.preMapData[editor.uivalues.preMapData.length - 1], dt)) {
editor.uivalues.preMapData.push(core.clone(dt));
diff --git a/_server/editor_ui.js b/_server/editor_ui.js
index 1a83af89..61961c3a 100644
--- a/_server/editor_ui.js
+++ b/_server/editor_ui.js
@@ -190,9 +190,9 @@ editor_ui_wrapper = function (editor) {
e.preventDefault();
if (editor.uivalues.preMapData.length > 0) {
var data = editor.uivalues.preMapData.pop();
- editor.map = JSON.parse(JSON.stringify(data.map));
- editor.fgmap = JSON.parse(JSON.stringify(data.fgmap));
- editor.bgmap = JSON.parse(JSON.stringify(data.bgmap));
+ editor.dom.maps.forEach(function (one) {
+ editor[one] = JSON.parse(JSON.stringify(data[one]));
+ });
editor.updateMap();
editor.uivalues.postMapData.push(data);
editor.uifunctions.highlightSaveFloorButton();
@@ -205,9 +205,9 @@ editor_ui_wrapper = function (editor) {
e.preventDefault();
if (editor.uivalues.postMapData.length > 0) {
var data = editor.uivalues.postMapData.pop();
- editor.map = JSON.parse(JSON.stringify(data.map));
- editor.fgmap = JSON.parse(JSON.stringify(data.fgmap));
- editor.bgmap = JSON.parse(JSON.stringify(data.bgmap));
+ editor.dom.maps.forEach(function (one) {
+ editor[one] = JSON.parse(JSON.stringify(data[one]));
+ });
editor.updateMap();
editor.uivalues.preMapData.push(data);
editor.uifunctions.highlightSaveFloorButton();
@@ -709,6 +709,7 @@ editor_ui_wrapper = function (editor) {
html += '
';
});
html += "
如果文件未在此列表显示,请检查文件名是否合法(只能由数字字母下划线横线和点组成),后缀名是否正确。
"; uievent.elements.extraBody.innerHTML = html; }); } diff --git a/libs/maps.js b/libs/maps.js index 2514e4bc..a7ac82f7 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -1487,6 +1487,7 @@ maps.prototype._removeBlockFromMap = function (floorId, block) { if (block.event.cls == 'autotile') { core.drawMap(); } else { + var x = block.x, y = block.y; core.removeGlobalAnimate(x, y); core.clearMap('event', x * 32, y * 32, 32, 32); var height = block.event.height || 32; diff --git a/project/floors/sample0.js b/project/floors/sample0.js index db837884..b38c0dff 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -30,11 +30,6 @@ main.floors.sample0= "background": "winskin.png", "time": 0 }, - { - "type": "setValue", - "name": "status:animate", - "value": "true" - }, "\t[样板提示]首次到达某层可以触发 firstArrive 事件,该事件可类似于RMXP中的“自动执行脚本”。\n\n本事件支持一切的事件类型,常常用来触发对话,例如:", "\t[hero]\b[up,hero]我是谁?我从哪来?我又要到哪去?", "\t[仙子,fairy]你问我...?我也不知道啊...", diff --git a/project/plugins.js b/project/plugins.js index 9ecb01a3..ccb8b675 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -324,6 +324,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = editor.dom.bg2Ctx = core.canvas.bg2; editor.dom.fg2c = core.canvas.fg2.canvas; editor.dom.fg2Ctx = core.canvas.fg2; + editor.dom.maps.push('bg2map', 'fg2map'); + editor.dom.canvas.push('bg2', 'fg2'); // 默认全空 var defaultMap = []; @@ -400,255 +402,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = return; } _isEditorInit = true; - // 编辑器更新地图 - editor.updateMap = function () { - var blocks = core.maps._mapIntoBlocks(editor.map.map(function (v) { - return v.map(function (v) { - try { - return v.idnum || v || 0; - } catch (e) { - console.log("Unable to read idnum from " + v); - return 0; - } - }); - }), { 'events': editor.currentFloorData.events }, editor.currentFloorId); - core.status.thisMap.blocks = blocks; - - var updateMap = function () { - // 新增图层也需要刷新 - core.removeGlobalAnimate(); - core.clearMap('bg'); - core.clearMap('bg2'); - core.clearMap('event'); - core.clearMap('event2'); - core.clearMap('fg'); - core.clearMap('fg2'); - core.maps._drawMap_drawAll(); - }; - updateMap(); - - var drawTile = function (ctx, x, y, tileInfo) { // 绘制一个普通块 - - //ctx.clearRect(x*32, y*32, 32, 32); - if (tileInfo == 0) return; - - if (typeof (tileInfo) == typeof ([][0]) || !Object.prototype.hasOwnProperty.call(tileInfo, 'idnum')) { //未定义块画红块 - if (typeof (tileInfo) != typeof ([][0]) && Object.prototype.hasOwnProperty.call(tileInfo, 'images')) { - ctx.drawImage(core.material.images[tileInfo.images], 0, tileInfo.y * 32, 32, 32, x * 32, y * 32, 32, 32); - } - ctx.strokeStyle = 'red'; - var OFFSET = 2; - ctx.lineWidth = OFFSET; - ctx.strokeRect(x * 32 + OFFSET, y * 32 + OFFSET, 32 - OFFSET * 2, 32 - OFFSET * 2); - ctx.font = "30px Verdana"; - ctx.textAlign = 'center'; - ctx.fillStyle = 'red'; - ctx.fillText("?", x * 32 + 16, y * 32 + 27); - return; - } - //ctx.drawImage(core.material.images[tileInfo.images], 0, tileInfo.y*32, 32, 32, x*32, y*32, 32, 32); - }; - // 绘制地图 start - for (var y = 0; y < editor.map.length; y++) { - for (var x = 0; x < editor.map[0].length; x++) { - var tileInfo = editor.map[y][x]; - drawTile(editor.dom.evCtx, x, y, tileInfo); - tileInfo = editor.fgmap[y][x]; - drawTile(editor.dom.fgCtx, x, y, tileInfo); - tileInfo = editor.bgmap[y][x]; - drawTile(editor.dom.bgCtx, x, y, tileInfo); - // 新增图层的未定义图块绘制 - tileInfo = editor.fg2map[y][x]; - drawTile(editor.dom.fgCtx, x, y, tileInfo); - tileInfo = editor.bg2map[y][x]; - drawTile(editor.dom.bgCtx, x, y, tileInfo); - } - } - // 绘制地图 end - - // 下面这行是2.7新增内容 - editor.drawEventBlock(); - this.updateLastUsedMap(); - }; - // 编辑器写入文件 - editor.file.saveFloor = function (floorData, callback) { - //callback(err:String) - var floorId = floorData.floorId; - var filename = 'project/floors/' + floorId + '.js'; - var datastr = ['main.floors.', floorId, '=\n']; - - var tempJsonObj = Object.assign({}, floorData); - // 多写入两个图层 - var tempMap = [ - ['map', editor.util.guid()], - ['bgmap', editor.util.guid()], - ['bg2map', editor.util.guid()], - ['fgmap', editor.util.guid()], - ['fg2map', editor.util.guid()] - ]; - tempMap.forEach(function (v) { - v[2] = tempJsonObj[v[0]]; - tempJsonObj[v[0]] = v[1]; - }); - var tempJson = JSON.stringify(tempJsonObj, editor.game.replacerForSaving, 4); - tempMap.forEach(function (v) { - tempJson = tempJson.replace('"' + v[1] + '"', '[\n' + editor.file.formatMap(v[2], v[0] != 'map') + '\n]'); - }); - datastr = datastr.concat([tempJson]); - datastr = datastr.join(''); - editor.file.alertWhenCompress(); - editor.fs.writeFile(filename, editor.util.encode64(datastr), 'base64', function (err, data) { - editor.addUsedFlags(datastr); - callback(err); - }); - }; - editor.file.saveFloorFile = function (callback) { - //callback(err:String) - editor.util.checkCallback(callback); - /* if (!isset(editor.currentFloorId) || !isset(editor.currentFloorData)) { - callback('未选中文件或无数据'); - } */ - if (core.floorIds.indexOf(editor.currentFloorId) >= 0) { - // 增加背景层2与前景层2的当前地图数据绑定 - for (var ii = 0, name; name = ['map', 'bgmap', 'bg2map', 'fgmap', 'fg2map'][ii]; ii++) { - var mapArray = editor[name].map(function (v) { - return v.map(function (v) { - return v.idnum || v || 0; - }) - }); - editor.currentFloorData[name] = mapArray; - } - } - editor.file.saveFloor(editor.currentFloorData, callback); - }; - // 编辑器取得地图数据 - editor.game.fetchMapFromCore = function () { - var mapArray = core.getMapArray(core.status.floorId, true); - // 2.6.6原写法:var mapArray = core.maps.saveMap(core.status.floorId); - editor.map = mapArray.map(function (v) { - return v.map(function (v) { - var x = parseInt(v), - y = editor.indexs[x]; - if (y == null) { - printe("素材数字" + x + "未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?"); - y = [0]; - } - return editor.ids[y[0]]; - }); - }); - editor.currentFloorId = core.status.floorId; - editor.currentFloorData = core.floors[core.status.floorId]; - // 补出缺省的数据 - editor.currentFloorData.autoEvent = editor.currentFloorData.autoEvent || {}; - // 前景层2与背景层2的editor地图数据绑定 - for (var ii = 0, name; name = ['bgmap', 'bg2map', 'fgmap', 'fg2map'][ii]; ii++) { - var mapArray = editor.currentFloorData[name]; - if (!mapArray || JSON.stringify(mapArray) == JSON.stringify([])) { //未设置或空数组 - //与editor.map同形的全0 - mapArray = eval('[' + Array(editor.map.length + 1).join('[' + Array(editor.map[0].length + 1).join('0,') + '],') + ']'); - } - editor[name] = mapArray.map(function (v) { - return v.map(function (v) { - var x = parseInt(v), - y = editor.indexs[x]; - if (y == null) { - printe("素材数字" + x + "未定义。是不是忘了注册,或者接档时没有覆盖icons.js和maps.js?"); - y = [0]; - } - return editor.ids[y[0]]; - }); - }); - } - }; - // 选中背景层2或前景层2时其他图层的透明度变更 - editor.uifunctions.layerMod_onchange = function () { - editor.layerMod = editor.dom.layerMod.value; - [editor.dom.bg2c, editor.dom.fg2c, editor.dom.bgc, editor.dom.fgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) { - x.style.opacity = 1; - }); - - // 手机端.... - if (editor.isMobile) { - var arr = ["bg", "bg2", "fg", "fg2"]; - for (var i = 0; i < arr.length; i++) { - if (editor.dom.layerMod.value == arr[i] + "map") { - var newArr = arr.concat(["ev", "ev2"]); - for (var ii = 0; ii < newArr.length; ii++) { - if (ii != i) editor.dom[newArr[ii] + "c"].style.opacity = 0.3; - } - return; - } - } - } - }; - editor.uifunctions.layerMod2_onchange = function () { - editor.layerMod = editor.dom.layerMod2.value; - [editor.dom.bg2c, editor.dom.fg2c, editor.dom.fgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) { - x.style.opacity = 0.3; - }); - editor.dom.bgc.style.opacity = 1; - }; - editor.uifunctions.layerMod3_onchange = function () { - editor.layerMod = editor.dom.layerMod3.value; - [editor.dom.bg2c, editor.dom.fg2c, editor.dom.bgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) { - x.style.opacity = 0.3; - }); - editor.dom.fgc.style.opacity = 1; - }; - // 当背景层2按钮选中情况发生变动 - editor.uifunctions.layerMod4_onchange = function () { - editor.layerMod = editor.dom.layerMod4.value; - [editor.dom.fgc, editor.dom.fg2c, editor.dom.bgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) { - x.style.opacity = 0.3; - }); - editor.dom.bg2c.style.opacity = 1; - }; - // 当前景层2按钮选中情况发生变动 - editor.uifunctions.layerMod5_onchange = function () { - editor.layerMod = editor.dom.layerMod5.value; - [editor.dom.bg2c, editor.dom.fgc, editor.dom.bgc, editor.dom.evc, editor.dom.ev2c].forEach(function (x) { - x.style.opacity = 0.3; - }); - editor.dom.fg2c.style.opacity = 1; - }; // 绑定onchange - editor.dom.layerMod4.onchange = editor.uifunctions.layerMod4_onchange; - editor.dom.layerMod5.onchange = editor.uifunctions.layerMod5_onchange; - // 编辑器下移动图块 - editor.constructor.moveBgFg = function (startPos, endPos, name, callback) { - if (!startPos || !endPos || ["bgmap", "bg2map", "fgmap", "fg2map"].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.exchangeBgFg = function (startPos, endPos, name, callback) { - if (!startPos || !endPos || ["bgmap", "bg2map", "fgmap", "fg2map"].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.dom.layerMod4.onchange = function () { + editor.uifunctions.setLayerMod('bg2map'); }; + editor.dom.layerMod5.onchange = function () { + editor.uifunctions.setLayerMod('fg2map'); + } // 继续进行afterCoreReset if (callback) callback(); }; @@ -754,7 +514,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ], "cannotOut", direction)) return false; if (this._canMoveHero_checkCannotInOut([ - extraData.bgArray[ny][nx], extraData.bg2Array[y][x], extraData.fgArray[ny][nx], extraData.fg2Array[y][x], extraData.eventArray[ny][nx] + extraData.bgArray[ny][nx], extraData.bg2Array[ny][nx], extraData.fgArray[ny][nx], extraData.fg2Array[ny][nx], extraData.eventArray[ny][nx] ], "cannotIn", direction)) return false;