bindSpecialDoor
This commit is contained in:
parent
f0bdd3e026
commit
2d06a1e612
@ -75,6 +75,13 @@ function editor() {
|
|||||||
//
|
//
|
||||||
ratio : 1,
|
ratio : 1,
|
||||||
|
|
||||||
|
// 绑定机关门事件相关
|
||||||
|
bindSpecialDoor: {
|
||||||
|
loc: null,
|
||||||
|
n: -1,
|
||||||
|
enemys: []
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
window.onerror = function (msg, url, lineNo, columnNo, error) {
|
window.onerror = function (msg, url, lineNo, columnNo, error) {
|
||||||
@ -227,6 +234,7 @@ editor.prototype.changeFloor = function (floorId, callback) {
|
|||||||
editor.currentFloorData[name]=mapArray;
|
editor.currentFloorData[name]=mapArray;
|
||||||
}
|
}
|
||||||
editor.uivalues.preMapData = null;
|
editor.uivalues.preMapData = null;
|
||||||
|
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();
|
||||||
editor.updateMap();
|
editor.updateMap();
|
||||||
@ -247,10 +255,17 @@ editor.prototype.drawEventBlock = function () {
|
|||||||
var fg=document.getElementById('efg').getContext('2d');
|
var fg=document.getElementById('efg').getContext('2d');
|
||||||
|
|
||||||
fg.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__);
|
fg.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__);
|
||||||
|
var firstData = editor.game.getFirstData();
|
||||||
for (var i=0;i<core.__SIZE__;i++) {
|
for (var i=0;i<core.__SIZE__;i++) {
|
||||||
for (var j=0;j<core.__SIZE__;j++) {
|
for (var j=0;j<core.__SIZE__;j++) {
|
||||||
var color=[];
|
var color=[];
|
||||||
var loc=(i+core.bigmap.offsetX/32)+","+(j+core.bigmap.offsetY/32);
|
var loc=(i+core.bigmap.offsetX/32)+","+(j+core.bigmap.offsetY/32);
|
||||||
|
if (editor.currentFloorId == firstData.floorId
|
||||||
|
&& loc == firstData.hero.loc.x + "," + firstData.hero.loc.y) {
|
||||||
|
fg.textAlign = 'center';
|
||||||
|
editor.game.doCoreFunc('fillBoldText', fg, 'S',
|
||||||
|
32 * i + 16, 32 * j + 28, '#FFFFFF', 'bold 30px Verdana');
|
||||||
|
}
|
||||||
if (editor.currentFloorData.events[loc])
|
if (editor.currentFloorData.events[loc])
|
||||||
color.push('#FF0000');
|
color.push('#FF0000');
|
||||||
if (editor.currentFloorData.autoEvent[loc]) {
|
if (editor.currentFloorData.autoEvent[loc]) {
|
||||||
@ -276,6 +291,12 @@ editor.prototype.drawEventBlock = function () {
|
|||||||
fg.fillStyle = cc;
|
fg.fillStyle = cc;
|
||||||
fg.fillRect(32*i+8*kk, 32*j+32-8, 8, 8);
|
fg.fillRect(32*i+8*kk, 32*j+32-8, 8, 8);
|
||||||
}
|
}
|
||||||
|
var index = editor.uivalues.bindSpecialDoor.enemys.indexOf(loc);
|
||||||
|
if (index >= 0) {
|
||||||
|
fg.textAlign = 'right';
|
||||||
|
editor.game.doCoreFunc("fillBoldText", fg, index + 1,
|
||||||
|
32 * i + 28, 32 * j + 15, '#FF7F00', '14px Verdana');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -178,6 +178,18 @@ editor_game_wrapper = function (editor, main, core) {
|
|||||||
callback([editor.core.floorIds, null]);
|
callback([editor.core.floorIds, null]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
editor_game.prototype.doCoreFunc = function (funcname) {
|
||||||
|
return core[funcname].apply(core, Array.prototype.slice.call(arguments, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
editor_game.prototype.getEnemy = function (id) {
|
||||||
|
return core.material.enemys[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
editor_game.prototype.getFirstData = function () {
|
||||||
|
return core.firstData;
|
||||||
|
}
|
||||||
|
|
||||||
editor.constructor.prototype.game = new editor_game();
|
editor.constructor.prototype.game = new editor_game();
|
||||||
}
|
}
|
||||||
//editor_game_wrapper(editor);
|
//editor_game_wrapper(editor);
|
||||||
@ -45,6 +45,7 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
* 双击地图可以选中素材
|
* 双击地图可以选中素材
|
||||||
*/
|
*/
|
||||||
editor.uifunctions.map_doubleClick = function (e) {
|
editor.uifunctions.map_doubleClick = function (e) {
|
||||||
|
if (editor.uivalues.bindSpecialDoor.loc != null) return;
|
||||||
var loc = editor.uifunctions.eToLoc(e);
|
var loc = editor.uifunctions.eToLoc(e);
|
||||||
var pos = editor.uifunctions.locToPos(loc, true);
|
var pos = editor.uifunctions.locToPos(loc, true);
|
||||||
editor.setSelectBoxFromInfo(editor[editor.layerMod][pos.y][pos.x]);
|
editor.setSelectBoxFromInfo(editor[editor.layerMod][pos.y][pos.x]);
|
||||||
@ -68,6 +69,7 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* editor.dom.eui.onmousedown
|
* editor.dom.eui.onmousedown
|
||||||
|
* + 绑定机关门事件的选择怪物
|
||||||
* + 右键进入菜单
|
* + 右键进入菜单
|
||||||
* + 非绘图时选中
|
* + 非绘图时选中
|
||||||
* + 绘图时画个矩形在那个位置
|
* + 绘图时画个矩形在那个位置
|
||||||
@ -75,6 +77,18 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
editor.uifunctions.map_ondown = function (e) {
|
editor.uifunctions.map_ondown = function (e) {
|
||||||
var loc = editor.uifunctions.eToLoc(e);
|
var loc = editor.uifunctions.eToLoc(e);
|
||||||
var pos = editor.uifunctions.locToPos(loc, true);
|
var pos = editor.uifunctions.locToPos(loc, true);
|
||||||
|
if (editor.uivalues.bindSpecialDoor.loc != null) {
|
||||||
|
var x = editor.pos.x, y = editor.pos.y, id = (editor.map[y][x] || {}).id;
|
||||||
|
// 检测是否是怪物
|
||||||
|
if (id && editor.game.getEnemy(id)) {
|
||||||
|
var locstr = x + "," + y, index = editor.uivalues.bindSpecialDoor.enemys.indexOf(locstr);
|
||||||
|
if (index >= 0) editor.uivalues.bindSpecialDoor.enemys.splice(index, 1);
|
||||||
|
else editor.uivalues.bindSpecialDoor.enemys.push(locstr);
|
||||||
|
editor.drawEventBlock();
|
||||||
|
editor.uifunctions._extraEvent_bindSpecialDoor_doAction();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (e.button == 2) {
|
if (e.button == 2) {
|
||||||
editor.uifunctions.showMidMenu(e.clientX, e.clientY);
|
editor.uifunctions.showMidMenu(e.clientX, e.clientY);
|
||||||
return false;
|
return false;
|
||||||
@ -321,27 +335,34 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
var thisevent = editor.map[editor.pos.y][editor.pos.x];
|
var thisevent = editor.map[editor.pos.y][editor.pos.x];
|
||||||
return this._extraEvent_bindStartPoint(thisevent) || this._extraEvent_bindStair(thisevent)
|
return editor.uifunctions._extraEvent_bindStartPoint(thisevent)
|
||||||
|| this._extraEvent_bindSpecialDoor(thisevent);
|
|| editor.uifunctions._extraEvent_bindStair(thisevent)
|
||||||
|
|| editor.uifunctions._extraEvent_bindSpecialDoor(thisevent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定该空地点为起始点
|
||||||
|
*/
|
||||||
editor.uifunctions._extraEvent_bindStartPoint = function (thisevent) {
|
editor.uifunctions._extraEvent_bindStartPoint = function (thisevent) {
|
||||||
if (thisevent != 0) return false;
|
if (thisevent != 0) return false;
|
||||||
editor.file.editTower([
|
editor.mode.onmode('tower');
|
||||||
["change", "['firstData']['floorId']", editor.currentFloorId],
|
editor.mode.addAction(["change", "['firstData']['floorId']", editor.currentFloorId]);
|
||||||
["change", "['firstData']['hero']['loc']['x']", editor.pos.x],
|
editor.mode.addAction(["change", "['firstData']['hero']['loc']['x']", editor.pos.x]);
|
||||||
["change", "['firstData']['hero']['loc']['y']", editor.pos.y]
|
editor.mode.addAction(["change", "['firstData']['hero']['loc']['y']", editor.pos.y]);
|
||||||
], function (objs_) {//console.log(objs_);
|
editor.mode.onmode('save', function () {
|
||||||
if (objs_.slice(-1)[0] != null) {
|
core.firstData.floorId = editor.currentFloorId;
|
||||||
printe(objs_.slice(-1)[0]);
|
core.firstData.hero.loc.x = editor.pos.x;
|
||||||
throw(objs_.slice(-1)[0])
|
core.firstData.hero.loc.y = editor.pos.y;
|
||||||
}
|
|
||||||
editor.drawPosSelection();
|
editor.drawPosSelection();
|
||||||
editor_mode.showMode('tower');
|
editor.drawEventBlock();
|
||||||
|
editor.mode.tower();
|
||||||
printf('绑定初始点成功');
|
printf('绑定初始点成功');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定该楼梯的楼传事件
|
||||||
|
*/
|
||||||
editor.uifunctions._extraEvent_bindStair = function (thisevent) {
|
editor.uifunctions._extraEvent_bindStair = function (thisevent) {
|
||||||
if (['upFloor', 'downFloor', 'leftPortal', 'rightPortal', 'upPortal', 'downPortal'].indexOf(thisevent.id) < 0)
|
if (['upFloor', 'downFloor', 'leftPortal', 'rightPortal', 'upPortal', 'downPortal'].indexOf(thisevent.id) < 0)
|
||||||
return false;
|
return false;
|
||||||
@ -364,14 +385,73 @@ editor_mappanel_wrapper = function (editor) {
|
|||||||
throw (err)
|
throw (err)
|
||||||
}
|
}
|
||||||
editor.drawPosSelection();
|
editor.drawPosSelection();
|
||||||
|
editor.drawEventBlock();
|
||||||
editor_mode.showMode('loc');
|
editor_mode.showMode('loc');
|
||||||
printf('添加楼梯事件成功');
|
printf('添加楼梯事件成功');
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定该机关门的事件
|
||||||
|
*/
|
||||||
editor.uifunctions._extraEvent_bindSpecialDoor = function (thisevent) {
|
editor.uifunctions._extraEvent_bindSpecialDoor = function (thisevent) {
|
||||||
|
if (thisevent.id != 'specialDoor') return false;
|
||||||
|
var number = parseInt(prompt("请输入该机关门的怪物数量", "0"))|| 0;
|
||||||
|
if (number <= 0) return true;
|
||||||
|
editor.uivalues.bindSpecialDoor.n = number;
|
||||||
|
editor.uivalues.bindSpecialDoor.loc = editor.pos.x + ',' + editor.pos.y;
|
||||||
|
editor.uivalues.bindSpecialDoor.enemys = [];
|
||||||
|
printf("请点击选择" + number + "个怪物;切换楼层或刷新页面取消操作。");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 确定绑定该机关门的事件
|
||||||
|
* cancel:是否取消此模式
|
||||||
|
*/
|
||||||
|
editor.uifunctions._extraEvent_bindSpecialDoor_doAction = function (cancel) {
|
||||||
|
var bindSpecialDoor = editor.uivalues.bindSpecialDoor;
|
||||||
|
if (cancel) {
|
||||||
|
bindSpecialDoor.loc = null;
|
||||||
|
bindSpecialDoor.enemys = [];
|
||||||
|
bindSpecialDoor.n = 0;
|
||||||
|
editor.drawEventBlock();
|
||||||
|
printf("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (bindSpecialDoor.loc == null || bindSpecialDoor.enemys.length != bindSpecialDoor.n) return;
|
||||||
|
// 添加机关门自动事件
|
||||||
|
var doorFlag = "flag:door_" + editor.currentFloorId + "_" + bindSpecialDoor.loc.replace(',', '_');
|
||||||
|
editor.currentFloorData.autoEvent[bindSpecialDoor.loc] = {
|
||||||
|
'0': {
|
||||||
|
"condition": doorFlag + "==" + bindSpecialDoor.n,
|
||||||
|
"currentFloor": true,
|
||||||
|
"priority": 0,
|
||||||
|
"delayExecute": false,
|
||||||
|
"multiExecute": false,
|
||||||
|
"data": [
|
||||||
|
{"type": "openDoor"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
bindSpecialDoor.enemys.forEach(function (loc) {
|
||||||
|
editor.currentFloorData.afterBattle[loc] = [
|
||||||
|
{"type": "addValue", "name": doorFlag, "value": "1"}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
editor.file.saveFloorFile(function (err) {
|
||||||
|
if (err) {
|
||||||
|
printe(err);
|
||||||
|
throw (err)
|
||||||
|
}
|
||||||
|
editor.drawEventBlock();
|
||||||
|
editor.drawPosSelection();
|
||||||
|
editor_mode.showMode('loc');
|
||||||
|
printf('绑定机关门事件成功');
|
||||||
|
});
|
||||||
|
bindSpecialDoor.loc = null;
|
||||||
|
bindSpecialDoor.enemys = [];
|
||||||
|
bindSpecialDoor.n = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -49,7 +49,7 @@ editor_mode = function (editor) {
|
|||||||
editor_mode.actionList.push(action);
|
editor_mode.actionList.push(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_mode.prototype.doActionList = function (mode, actionList) {
|
editor_mode.prototype.doActionList = function (mode, actionList, callback) {
|
||||||
if (actionList.length == 0) return;
|
if (actionList.length == 0) return;
|
||||||
printf('修改中...');
|
printf('修改中...');
|
||||||
var cb = function (objs_) {
|
var cb = function (objs_) {
|
||||||
@ -58,6 +58,7 @@ editor_mode = function (editor) {
|
|||||||
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尚未修改,请及时予以设置' : ''));
|
||||||
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 'loc':
|
case 'loc':
|
||||||
@ -95,9 +96,9 @@ editor_mode = function (editor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
editor_mode.prototype.onmode = function (mode) {
|
editor_mode.prototype.onmode = function (mode, callback) {
|
||||||
if (editor_mode.mode != mode) {
|
if (editor_mode.mode != mode) {
|
||||||
if (mode === 'save') editor_mode.doActionList(editor_mode.mode, editor_mode.actionList);
|
if (mode === 'save') editor_mode.doActionList(editor_mode.mode, editor_mode.actionList, callback);
|
||||||
if (editor_mode.mode === 'nextChange' && mode) editor_mode.showMode(mode);
|
if (editor_mode.mode === 'nextChange' && mode) editor_mode.showMode(mode);
|
||||||
if (mode !== 'save') editor_mode.mode = mode;
|
if (mode !== 'save') editor_mode.mode = mode;
|
||||||
editor_mode.actionList = [];
|
editor_mode.actionList = [];
|
||||||
|
|||||||
@ -368,7 +368,7 @@ dynamicMapEditor.prototype.showHelp = function (fromButton) {
|
|||||||
text += "基本操作:\n - 点击图块再点地图可以放置;\n - 双击图块可以编辑数据;\n";
|
text += "基本操作:\n - 点击图块再点地图可以放置;\n - 双击图块可以编辑数据;\n";
|
||||||
text += " - [ 键将开关此模式;\n - ] 键将会把改动保存到文件;\n - \\ 键将撤销上步操作。\n\n";
|
text += " - [ 键将开关此模式;\n - ] 键将会把改动保存到文件;\n - \\ 键将撤销上步操作。\n\n";
|
||||||
text += "最下面三行数据分别是:\n"
|
text += "最下面三行数据分别是:\n"
|
||||||
text += "血攻防魔防;金经黄蓝红;破炸飞和debuff";
|
text += "血攻防魔防;金经黄蓝红;破炸飞和debuff。";
|
||||||
if (!fromButton) text += "\n\n点取消将不再提示本页面。";
|
if (!fromButton) text += "\n\n点取消将不再提示本页面。";
|
||||||
core.myconfirm(text, null, function () {
|
core.myconfirm(text, null, function () {
|
||||||
if (!fromButton) core.setLocalStorage("_dynamicMapEditor_help", true);
|
if (!fromButton) core.setLocalStorage("_dynamicMapEditor_help", true);
|
||||||
@ -393,11 +393,13 @@ dynamicMapEditor.prototype.saveEnemys = function () {
|
|||||||
var datastr = 'var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = \n';
|
var datastr = 'var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = \n';
|
||||||
var emap = {};
|
var emap = {};
|
||||||
var estr = JSON.stringify(core.enemys.enemys, function (k, v) {
|
var estr = JSON.stringify(core.enemys.enemys, function (k, v) {
|
||||||
if (v.hp != null) {
|
var t = core.clone(v);
|
||||||
|
if (t.hp != null) {
|
||||||
|
delete t.id;
|
||||||
var id_ = ":" + k + ":";
|
var id_ = ":" + k + ":";
|
||||||
emap[id_] = JSON.stringify(v);
|
emap[id_] = JSON.stringify(t);
|
||||||
return id_;
|
return id_;
|
||||||
} else return v
|
} else return t;
|
||||||
}, '\t');
|
}, '\t');
|
||||||
for (var id_ in emap) {
|
for (var id_ in emap) {
|
||||||
estr = estr.replace('"' + id_ + '"', emap[id_])
|
estr = estr.replace('"' + id_ + '"', emap[id_])
|
||||||
@ -409,7 +411,9 @@ dynamicMapEditor.prototype.saveEnemys = function () {
|
|||||||
dynamicMapEditor.prototype.saveValues = function () {
|
dynamicMapEditor.prototype.saveValues = function () {
|
||||||
if (!this.valueModified) return;
|
if (!this.valueModified) return;
|
||||||
core.data.values = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.values = core.clone(core.values);
|
core.data.values = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.values = core.clone(core.values);
|
||||||
fs.writeFile('project/data.js', core.encodeBase64(data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d), 'base64', function (e, d) {});
|
var datastr = 'var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = \n' +
|
||||||
|
JSON.stringify(data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d, null, '\t');
|
||||||
|
fs.writeFile('project/data.js', core.encodeBase64(datastr), 'base64', function (e, d) {});
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamicMapEditor.prototype.saveFloors = function () {
|
dynamicMapEditor.prototype.saveFloors = function () {
|
||||||
@ -451,15 +455,11 @@ dynamicMapEditor.prototype.formatMap = function (mapArr, trySimplify) {
|
|||||||
}
|
}
|
||||||
//把二维数组格式化
|
//把二维数组格式化
|
||||||
var formatArrStr = '';
|
var formatArrStr = '';
|
||||||
var arr = JSON.stringify(mapArr).replace(/\s+/g, '').sdatastr
|
var si = mapArr.length - 1, sk = mapArr[0].length - 1;
|
||||||
var si = mapArr.length - 1, sk = mapArr[0].length - 1;datastr
|
|
||||||
for (var i = 0; i <= si; i++) {
|
for (var i = 0; i <= si; i++) {
|
||||||
var a = [];
|
|
||||||
formatArrStr += ' [';
|
formatArrStr += ' [';
|
||||||
if (i == 0 || i == si) a = arr[i].split(/\D+/).join(' ').trim().split(' ');
|
|
||||||
else a = arr[i].split(/\D+/);
|
|
||||||
for (var k = 0; k <= sk; k++) {
|
for (var k = 0; k <= sk; k++) {
|
||||||
var num = parseInt(a[k]);
|
var num = parseInt(mapArr[i][k]);
|
||||||
formatArrStr += Array(Math.max(4 - String(num).length, 0)).join(' ') + num + (k == sk ? '' : ',');
|
formatArrStr += Array(Math.max(4 - String(num).length, 0)).join(' ') + num + (k == sk ? '' : ',');
|
||||||
}
|
}
|
||||||
formatArrStr += ']' + (i == si ? '' : ',\n');
|
formatArrStr += ']' + (i == si ? '' : ',\n');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user