editor multi undo
This commit is contained in:
parent
0f65f03083
commit
1216ae7d96
@ -56,12 +56,9 @@ function editor() {
|
|||||||
startPos:null,
|
startPos:null,
|
||||||
endPos:null,
|
endPos:null,
|
||||||
// 撤销/恢复
|
// 撤销/恢复
|
||||||
currDrawData : {
|
preMapData : [],
|
||||||
pos: [],
|
preMapMax: 10,
|
||||||
info: {}
|
postMapData: [],
|
||||||
},
|
|
||||||
reDo : null,
|
|
||||||
preMapData : null,
|
|
||||||
//
|
//
|
||||||
shortcut:{},
|
shortcut:{},
|
||||||
copyedInfo : null,
|
copyedInfo : null,
|
||||||
@ -246,7 +243,8 @@ editor.prototype.changeFloor = function (floorId, callback) {
|
|||||||
});
|
});
|
||||||
editor.currentFloorData[name]=mapArray;
|
editor.currentFloorData[name]=mapArray;
|
||||||
}
|
}
|
||||||
editor.uivalues.preMapData = null;
|
editor.uivalues.preMapData = [];
|
||||||
|
editor.uivalues.postMapData = [];
|
||||||
editor.uifunctions._extraEvent_bindSpecialDoor_doAction(true);
|
editor.uifunctions._extraEvent_bindSpecialDoor_doAction(true);
|
||||||
core.changeFloor(floorId, null, {"x": 0, "y": 0, "direction": "up"}, null, function () {
|
core.changeFloor(floorId, null, {"x": 0, "y": 0, "direction": "up"}, null, function () {
|
||||||
editor.game.fetchMapFromCore();
|
editor.game.fetchMapFromCore();
|
||||||
|
|||||||
@ -206,7 +206,7 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
}
|
}
|
||||||
editor.uivalues.holdingPath = 0;
|
editor.uivalues.holdingPath = 0;
|
||||||
if (editor.uivalues.stepPostfix && editor.uivalues.stepPostfix.length) {
|
if (editor.uivalues.stepPostfix && editor.uivalues.stepPostfix.length) {
|
||||||
editor.uivalues.preMapData = JSON.parse(JSON.stringify({ map: editor.map, fgmap: editor.fgmap, bgmap: editor.bgmap }));
|
editor.savePreMap();
|
||||||
if (editor.brushMod !== 'line') {
|
if (editor.brushMod !== 'line') {
|
||||||
var x0 = editor.uivalues.stepPostfix[0].x;
|
var x0 = editor.uivalues.stepPostfix[0].x;
|
||||||
var y0 = editor.uivalues.stepPostfix[0].y;
|
var y0 = editor.uivalues.stepPostfix[0].y;
|
||||||
@ -221,9 +221,6 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
editor.uivalues.currDrawData.pos = JSON.parse(JSON.stringify(editor.uivalues.stepPostfix));
|
|
||||||
editor.uivalues.currDrawData.info = JSON.parse(JSON.stringify(editor.info));
|
|
||||||
editor.uivalues.reDo = null;
|
|
||||||
// console.log(editor.uivalues.stepPostfix);
|
// console.log(editor.uivalues.stepPostfix);
|
||||||
if (editor.brushMod === 'tileset' && core.tilesets.indexOf(editor.info.images) !== -1) {
|
if (editor.brushMod === 'tileset' && core.tilesets.indexOf(editor.info.images) !== -1) {
|
||||||
var imgWidth = ~~(core.material.images.tilesets[editor.info.images].width / 32);
|
var imgWidth = ~~(core.material.images.tilesets[editor.info.images].width / 32);
|
||||||
@ -511,8 +508,7 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
editor.uifunctions.copyLoc_click = function (e) {
|
editor.uifunctions.copyLoc_click = function (e) {
|
||||||
editor.uifunctions.hideMidMenu();
|
editor.uifunctions.hideMidMenu();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
editor.uivalues.preMapData = null;
|
editor.savePreMap();
|
||||||
editor.uivalues.reDo = null;
|
|
||||||
editor_mode.onmode('');
|
editor_mode.onmode('');
|
||||||
var now = editor.pos, last = editor.uivalues.lastRightButtonPos[1];
|
var now = editor.pos, last = editor.uivalues.lastRightButtonPos[1];
|
||||||
if (now.x == last.x && now.y == last.y) return;
|
if (now.x == last.x && now.y == last.y) return;
|
||||||
@ -535,8 +531,7 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
editor.uifunctions.moveLoc_click = function (e) {
|
editor.uifunctions.moveLoc_click = function (e) {
|
||||||
editor.uifunctions.hideMidMenu();
|
editor.uifunctions.hideMidMenu();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
editor.uivalues.preMapData = null;
|
editor.savePreMap();
|
||||||
editor.uivalues.reDo = null;
|
|
||||||
editor_mode.onmode('');
|
editor_mode.onmode('');
|
||||||
editor.exchangePos(editor.pos, editor.uivalues.lastRightButtonPos[1]);
|
editor.exchangePos(editor.pos, editor.uivalues.lastRightButtonPos[1]);
|
||||||
}
|
}
|
||||||
@ -547,7 +542,6 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
*/
|
*/
|
||||||
editor.uifunctions.clearEvent_click = function (e) {
|
editor.uifunctions.clearEvent_click = function (e) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
editor.uivalues.reDo = null;
|
|
||||||
editor.clearPos(false);
|
editor.clearPos(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -557,7 +551,6 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
*/
|
*/
|
||||||
editor.uifunctions.clearLoc_click = function (e) {
|
editor.uifunctions.clearLoc_click = function (e) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
editor.uivalues.reDo = null;
|
|
||||||
editor.clearPos(true);
|
editor.clearPos(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -768,6 +761,21 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
editor.constructor.prototype.savePreMap = function () {
|
||||||
|
var dt = {
|
||||||
|
map: editor.map,
|
||||||
|
fgmap: editor.fgmap,
|
||||||
|
bgmap: editor.bgmap,
|
||||||
|
};
|
||||||
|
if (editor.uivalues.preMapData.length == 0
|
||||||
|
|| !core.same(editor.uivalues.preMapData[editor.uivalues.preMapData.length - 1], dt)) {
|
||||||
|
editor.uivalues.preMapData.push(core.clone(dt));
|
||||||
|
if (editor.uivalues.preMapData.length > editor.uivalues.preMapMax) {
|
||||||
|
editor.uivalues.preMapData.shift();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
editor.constructor.prototype.moveBgFg = function (startPos, endPos, name, callback) {
|
editor.constructor.prototype.moveBgFg = function (startPos, endPos, name, callback) {
|
||||||
if (!startPos || !endPos || ["bgmap","fgmap"].indexOf(name)<0) return;
|
if (!startPos || !endPos || ["bgmap","fgmap"].indexOf(name)<0) return;
|
||||||
@ -809,7 +817,7 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
var fields = Object.keys(editor.file.comment._data.floors._data.loc._data);
|
var fields = Object.keys(editor.file.comment._data.floors._data.loc._data);
|
||||||
pos = pos || editor.pos;
|
pos = pos || editor.pos;
|
||||||
editor.uifunctions.hideMidMenu();
|
editor.uifunctions.hideMidMenu();
|
||||||
editor.uivalues.preMapData = null;
|
editor.savePreMap();
|
||||||
editor.info = 0;
|
editor.info = 0;
|
||||||
editor_mode.onmode('');
|
editor_mode.onmode('');
|
||||||
if (clearPos)
|
if (clearPos)
|
||||||
|
|||||||
@ -81,14 +81,14 @@ editor_ui_wrapper = function (editor) {
|
|||||||
editor.uifunctions.body_shortcut = function (e) {
|
editor.uifunctions.body_shortcut = function (e) {
|
||||||
|
|
||||||
// UI预览 & 地图选点
|
// UI预览 & 地图选点
|
||||||
if (uievent && uievent.isOpen) {
|
if (editor.uievent && editor.uievent.isOpen) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (e.keyCode == 27) uievent.close();
|
if (e.keyCode == 27) editor.uievent.close();
|
||||||
else if (e.keyCode == 13) uievent.confirm();
|
else if (e.keyCode == 13) editor.uievent.confirm();
|
||||||
else if (e.keyCode == 87) uievent.move(0, -1)
|
else if (e.keyCode == 87) editor.uievent.move(0, -1)
|
||||||
else if (e.keyCode == 65) uievent.move(-1, 0)
|
else if (e.keyCode == 65) editor.uievent.move(-1, 0)
|
||||||
else if (e.keyCode == 83) uievent.move(0, 1);
|
else if (e.keyCode == 83) editor.uievent.move(0, 1);
|
||||||
else if (e.keyCode == 68) uievent.move(1, 0);
|
else if (e.keyCode == 68) editor.uievent.move(1, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,29 +111,6 @@ editor_ui_wrapper = function (editor) {
|
|||||||
if (editor_multi.id != "" || editor_blockly.id != "")
|
if (editor_multi.id != "" || editor_blockly.id != "")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//Ctrl+z 撤销上一步undo
|
|
||||||
if (e.keyCode == 90 && e.ctrlKey && editor.uivalues.preMapData && editor.uivalues.currDrawData.pos.length && selectBox.isSelected()) {
|
|
||||||
editor.map = JSON.parse(JSON.stringify(editor.uivalues.preMapData.map));
|
|
||||||
editor.fgmap = JSON.parse(JSON.stringify(editor.uivalues.preMapData.fgmap));
|
|
||||||
editor.bgmap = JSON.parse(JSON.stringify(editor.uivalues.preMapData.bgmap));
|
|
||||||
editor.updateMap();
|
|
||||||
editor.uivalues.reDo = JSON.parse(JSON.stringify(editor.uivalues.currDrawData));
|
|
||||||
editor.uivalues.currDrawData = { pos: [], info: {} };
|
|
||||||
editor.uivalues.preMapData = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//Ctrl+y 重做一步redo
|
|
||||||
if (e.keyCode == 89 && e.ctrlKey && editor.uivalues.reDo && editor.uivalues.reDo.pos.length && selectBox.isSelected()) {
|
|
||||||
editor.uivalues.preMapData = JSON.parse(JSON.stringify({ map: editor.map, fgmap: editor.fgmap, bgmap: editor.bgmap }));
|
|
||||||
for (var j = 0; j < editor.uivalues.reDo.pos.length; j++)
|
|
||||||
editor.map[editor.uivalues.reDo.pos[j].y][editor.uivalues.reDo.pos[j].x] = JSON.parse(JSON.stringify(editor.uivalues.reDo.info));
|
|
||||||
|
|
||||||
editor.updateMap();
|
|
||||||
editor.uivalues.currDrawData = JSON.parse(JSON.stringify(editor.uivalues.reDo));
|
|
||||||
editor.uivalues.reDo = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PGUP和PGDOWN切换楼层
|
// PGUP和PGDOWN切换楼层
|
||||||
if (e.keyCode == 33 || e.keyCode == 34) {
|
if (e.keyCode == 33 || e.keyCode == 34) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@ -151,7 +128,29 @@ editor_ui_wrapper = function (editor) {
|
|||||||
|
|
||||||
var focusElement = document.activeElement;
|
var focusElement = document.activeElement;
|
||||||
if (!focusElement || focusElement.tagName.toLowerCase() == 'body'
|
if (!focusElement || focusElement.tagName.toLowerCase() == 'body'
|
||||||
|| focusElement.id == 'selectFloor') {
|
|| focusElement.id == 'selectFloor') {
|
||||||
|
|
||||||
|
//Ctrl+z 撤销上一步undo
|
||||||
|
if (e.keyCode == 90 && e.ctrlKey && editor.uivalues.preMapData.length > 0) {
|
||||||
|
e.preventDefault();
|
||||||
|
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.uivalues.postMapData.push(data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Ctrl+y 重做一步redo
|
||||||
|
if (e.keyCode == 89 && e.ctrlKey && editor.uivalues.postMapData.length > 0) {
|
||||||
|
e.preventDefault();
|
||||||
|
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.uivalues.preMapData.push(data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Ctrl+C, Ctrl+X, Ctrl+V
|
// Ctrl+C, Ctrl+X, Ctrl+V
|
||||||
if (e.ctrlKey && e.keyCode == 67 && !selectBox.isSelected()) {
|
if (e.ctrlKey && e.keyCode == 67 && !selectBox.isSelected()) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user