bindSpecialDoor
This commit is contained in:
parent
f0bdd3e026
commit
2d06a1e612
@ -75,6 +75,13 @@ function editor() {
|
||||
//
|
||||
ratio : 1,
|
||||
|
||||
// 绑定机关门事件相关
|
||||
bindSpecialDoor: {
|
||||
loc: null,
|
||||
n: -1,
|
||||
enemys: []
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
window.onerror = function (msg, url, lineNo, columnNo, error) {
|
||||
@ -227,6 +234,7 @@ editor.prototype.changeFloor = function (floorId, callback) {
|
||||
editor.currentFloorData[name]=mapArray;
|
||||
}
|
||||
editor.uivalues.preMapData = null;
|
||||
editor.uifunctions._extraEvent_bindSpecialDoor_doAction(true);
|
||||
core.changeFloor(floorId, null, {"x": 0, "y": 0, "direction": "up"}, null, function () {
|
||||
editor.game.fetchMapFromCore();
|
||||
editor.updateMap();
|
||||
@ -247,10 +255,17 @@ editor.prototype.drawEventBlock = function () {
|
||||
var fg=document.getElementById('efg').getContext('2d');
|
||||
|
||||
fg.clearRect(0, 0, core.__PIXELS__, core.__PIXELS__);
|
||||
var firstData = editor.game.getFirstData();
|
||||
for (var i=0;i<core.__SIZE__;i++) {
|
||||
for (var j=0;j<core.__SIZE__;j++) {
|
||||
var color=[];
|
||||
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])
|
||||
color.push('#FF0000');
|
||||
if (editor.currentFloorData.autoEvent[loc]) {
|
||||
@ -276,6 +291,12 @@ editor.prototype.drawEventBlock = function () {
|
||||
fg.fillStyle = cc;
|
||||
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]);
|
||||
}
|
||||
|
||||
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_game_wrapper(editor);
|
||||
@ -45,6 +45,7 @@ editor_mappanel_wrapper = function (editor) {
|
||||
* 双击地图可以选中素材
|
||||
*/
|
||||
editor.uifunctions.map_doubleClick = function (e) {
|
||||
if (editor.uivalues.bindSpecialDoor.loc != null) return;
|
||||
var loc = editor.uifunctions.eToLoc(e);
|
||||
var pos = editor.uifunctions.locToPos(loc, true);
|
||||
editor.setSelectBoxFromInfo(editor[editor.layerMod][pos.y][pos.x]);
|
||||
@ -68,6 +69,7 @@ editor_mappanel_wrapper = function (editor) {
|
||||
|
||||
/**
|
||||
* editor.dom.eui.onmousedown
|
||||
* + 绑定机关门事件的选择怪物
|
||||
* + 右键进入菜单
|
||||
* + 非绘图时选中
|
||||
* + 绘图时画个矩形在那个位置
|
||||
@ -75,6 +77,18 @@ editor_mappanel_wrapper = function (editor) {
|
||||
editor.uifunctions.map_ondown = function (e) {
|
||||
var loc = editor.uifunctions.eToLoc(e);
|
||||
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) {
|
||||
editor.uifunctions.showMidMenu(e.clientX, e.clientY);
|
||||
return false;
|
||||
@ -321,27 +335,34 @@ editor_mappanel_wrapper = function (editor) {
|
||||
e.stopPropagation();
|
||||
|
||||
var thisevent = editor.map[editor.pos.y][editor.pos.x];
|
||||
return this._extraEvent_bindStartPoint(thisevent) || this._extraEvent_bindStair(thisevent)
|
||||
|| this._extraEvent_bindSpecialDoor(thisevent);
|
||||
return editor.uifunctions._extraEvent_bindStartPoint(thisevent)
|
||||
|| editor.uifunctions._extraEvent_bindStair(thisevent)
|
||||
|| editor.uifunctions._extraEvent_bindSpecialDoor(thisevent);
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定该空地点为起始点
|
||||
*/
|
||||
editor.uifunctions._extraEvent_bindStartPoint = function (thisevent) {
|
||||
if (thisevent != 0) return false;
|
||||
editor.file.editTower([
|
||||
["change", "['firstData']['floorId']", editor.currentFloorId],
|
||||
["change", "['firstData']['hero']['loc']['x']", editor.pos.x],
|
||||
["change", "['firstData']['hero']['loc']['y']", editor.pos.y]
|
||||
], function (objs_) {//console.log(objs_);
|
||||
if (objs_.slice(-1)[0] != null) {
|
||||
printe(objs_.slice(-1)[0]);
|
||||
throw(objs_.slice(-1)[0])
|
||||
}
|
||||
editor.mode.onmode('tower');
|
||||
editor.mode.addAction(["change", "['firstData']['floorId']", editor.currentFloorId]);
|
||||
editor.mode.addAction(["change", "['firstData']['hero']['loc']['x']", editor.pos.x]);
|
||||
editor.mode.addAction(["change", "['firstData']['hero']['loc']['y']", editor.pos.y]);
|
||||
editor.mode.onmode('save', function () {
|
||||
core.firstData.floorId = editor.currentFloorId;
|
||||
core.firstData.hero.loc.x = editor.pos.x;
|
||||
core.firstData.hero.loc.y = editor.pos.y;
|
||||
editor.drawPosSelection();
|
||||
editor_mode.showMode('tower');
|
||||
editor.drawEventBlock();
|
||||
editor.mode.tower();
|
||||
printf('绑定初始点成功');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定该楼梯的楼传事件
|
||||
*/
|
||||
editor.uifunctions._extraEvent_bindStair = function (thisevent) {
|
||||
if (['upFloor', 'downFloor', 'leftPortal', 'rightPortal', 'upPortal', 'downPortal'].indexOf(thisevent.id) < 0)
|
||||
return false;
|
||||
@ -364,14 +385,73 @@ editor_mappanel_wrapper = function (editor) {
|
||||
throw (err)
|
||||
}
|
||||
editor.drawPosSelection();
|
||||
editor.drawEventBlock();
|
||||
editor_mode.showMode('loc');
|
||||
printf('添加楼梯事件成功');
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定该机关门的事件
|
||||
*/
|
||||
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.prototype.doActionList = function (mode, actionList) {
|
||||
editor_mode.prototype.doActionList = function (mode, actionList, callback) {
|
||||
if (actionList.length == 0) return;
|
||||
printf('修改中...');
|
||||
var cb = function (objs_) {
|
||||
@ -58,6 +58,7 @@ editor_mode = function (editor) {
|
||||
throw (objs_.slice(-1)[0])
|
||||
}
|
||||
; printf('修改成功' + (data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.name == 'template' ? '\n\n请注意:全塔属性的name尚未修改,请及时予以设置' : ''));
|
||||
if (callback) callback();
|
||||
}
|
||||
switch (mode) {
|
||||
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 (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 (mode !== 'save') editor_mode.mode = mode;
|
||||
editor_mode.actionList = [];
|
||||
|
||||
@ -368,7 +368,7 @@ dynamicMapEditor.prototype.showHelp = function (fromButton) {
|
||||
text += "基本操作:\n - 点击图块再点地图可以放置;\n - 双击图块可以编辑数据;\n";
|
||||
text += " - [ 键将开关此模式;\n - ] 键将会把改动保存到文件;\n - \\ 键将撤销上步操作。\n\n";
|
||||
text += "最下面三行数据分别是:\n"
|
||||
text += "血攻防魔防;金经黄蓝红;破炸飞和debuff";
|
||||
text += "血攻防魔防;金经黄蓝红;破炸飞和debuff。";
|
||||
if (!fromButton) text += "\n\n点取消将不再提示本页面。";
|
||||
core.myconfirm(text, null, function () {
|
||||
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 emap = {};
|
||||
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 + ":";
|
||||
emap[id_] = JSON.stringify(v);
|
||||
emap[id_] = JSON.stringify(t);
|
||||
return id_;
|
||||
} else return v
|
||||
} else return t;
|
||||
}, '\t');
|
||||
for (var id_ in emap) {
|
||||
estr = estr.replace('"' + id_ + '"', emap[id_])
|
||||
@ -409,7 +411,9 @@ dynamicMapEditor.prototype.saveEnemys = function () {
|
||||
dynamicMapEditor.prototype.saveValues = function () {
|
||||
if (!this.valueModified) return;
|
||||
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 () {
|
||||
@ -451,15 +455,11 @@ dynamicMapEditor.prototype.formatMap = function (mapArr, trySimplify) {
|
||||
}
|
||||
//把二维数组格式化
|
||||
var formatArrStr = '';
|
||||
var arr = JSON.stringify(mapArr).replace(/\s+/g, '').sdatastr
|
||||
var si = mapArr.length - 1, sk = mapArr[0].length - 1;datastr
|
||||
var si = mapArr.length - 1, sk = mapArr[0].length - 1;
|
||||
for (var i = 0; i <= si; i++) {
|
||||
var a = [];
|
||||
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++) {
|
||||
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 += ']' + (i == si ? '' : ',\n');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user