Merge branch 'v2.0' of https://github.com/ckcz123/mota-js into v2.0

This commit is contained in:
oc 2019-01-16 21:19:06 +08:00
commit c89a65ff13
21 changed files with 310 additions and 130 deletions

View File

@ -1,14 +1,14 @@
var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = var comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
{ {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"items": { "items": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"items": { "items": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"cls": { "cls": {
@ -89,7 +89,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
}, },
"items_template" : {'cls': 'items', 'name': '新物品'}, "items_template" : {'cls': 'items', 'name': '新物品'},
"enemys": { "enemys": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"name": { "name": {
@ -197,7 +197,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
}, },
"enemys_template" : {'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0}, "enemys_template" : {'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'experience': 0, 'point': 0, 'special': 0},
"maps": { "maps": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"id": { "id": {
@ -271,11 +271,11 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"floors": { "floors": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"floor": { "floor": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"floorId": { "floorId": {
@ -407,7 +407,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"loc": { "loc": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"events": { "events": {

View File

@ -254,6 +254,22 @@ body {
overflow: auto; overflow: auto;
} }
#edata{
position: absolute;
z-index:0;
left: 0;
top: 0;
}
#iconImages {
z-index: 0;
overflow: hidden;
}
#iconImages img {
position: absolute;
}
.egameCanvas { .egameCanvas {
position: absolute; position: absolute;
} }

View File

@ -238,6 +238,22 @@ body {
overflow: auto; overflow: auto;
} }
#edata{
position: absolute;
z-index:0;
left: 0;
top: 0;
}
#iconImages {
z-index: 0;
overflow: hidden;
}
#iconImages img {
position: absolute;
}
.egameCanvas { .egameCanvas {
position: absolute; position: absolute;
} }

View File

@ -1,10 +1,10 @@
var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
{ {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"main": { "main": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"floorIds": { "floorIds": {
@ -125,7 +125,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"firstData": { "firstData": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"title": { "title": {
@ -154,7 +154,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_data": "初始楼层的ID" "_data": "初始楼层的ID"
}, },
"hero": { "hero": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"name": { "name": {
@ -214,7 +214,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_data": "初始装上的装备,此处建议请直接留空数组" "_data": "初始装上的装备,此处建议请直接留空数组"
}, },
"items": { "items": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"keys": { "keys": {
@ -245,7 +245,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_data": "初始可飞的楼层;一般留空数组即可" "_data": "初始可飞的楼层;一般留空数组即可"
}, },
"loc": { "loc": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"direction": { "direction": {
@ -316,7 +316,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"values": { "values": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"lavaDamage": { "lavaDamage": {
@ -407,7 +407,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"flags": { "flags": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"enableFloor": { "enableFloor": {

View File

@ -417,7 +417,46 @@ editor.prototype.drawInitData = function (icons) {
if (fullWidth > edata.width) edata.style.width = (edata.width = fullWidth) / ratio + 'px'; if (fullWidth > edata.width) edata.style.width = (edata.width = fullWidth) / ratio + 'px';
edata.style.height = (edata.height = fullHeight) / ratio + 'px'; edata.style.height = (edata.height = fullHeight) / ratio + 'px';
var dc = edata.getContext('2d'); iconImages.style.width = (iconImages.width = fullWidth) / ratio + 'px';
iconImages.style.height = (iconImages.height = fullHeight) / ratio + 'px';
var dc = {drawImage:function(){
var image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight;
var a=Array.from(arguments)
if(arguments.length==3){
// [image, dx, dy]=arguments
// [sx, sy, sWidth, sHeight, dWidth, dHeight]=[0,0,image.width,image.height,image.width,image.height]
image=a[0]
a=[a[0],0,0,image.width,image.height,a[1],a[2],image.width,image.height]
}
if(arguments.length==5){
// [image, dx, dy, dWidth, dHeight]=arguments
// [sx, sy, sWidth, sHeight]=[0,0,image.width,image.height]
image=a[0]
a=[a[0],0,0,image.width,image.height,a[1],a[2],a[3],a[4]]
}
if(arguments.length==9){
// [image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight]=arguments
}
image=a[0];
sx=a[1];
sy=a[2];
sWidth=a[3];
sHeight=a[4];
dx=a[5];
dy=a[6];
dWidth=a[7];
dHeight=a[8];
//放弃对 dWidth, dHeight 的支持, 始终画一样大的
var dimg=new Image()
dimg.src = image.src;
dimg.style.clip=['rect(',sy,'px,',sx+sWidth,'px,',sy+sHeight,'px,',sx,'px)'].join('')
dimg.style.top=dy-sy+'px'
dimg.style.left=dx-sx+'px'
dimg.width=image.width/ratio
dimg.height=image.height/ratio
iconImages.appendChild(dimg)
}}
// var dc = edata.getContext('2d');
var nowx = 0; var nowx = 0;
var nowy = 0; var nowy = 0;
for (var ii = 0; ii < imgNames.length; ii++) { for (var ii = 0; ii < imgNames.length; ii++) {

View File

@ -82,7 +82,7 @@ editor_file = function (editor, callback) {
callback('未选中文件或无数据'); callback('未选中文件或无数据');
} */ } */
var filename = 'project/floors/' + editor.currentFloorId + '.js'; var filename = 'project/floors/' + editor.currentFloorId + '.js';
var datastr = ['main.floors.', editor.currentFloorId, '=\n{']; var datastr = ['main.floors.', editor.currentFloorId, '=\n'];
if (editor.currentFloorData.map == 'new') { if (editor.currentFloorData.map == 'new') {
/* /*
editor.currentFloorData.map = editor.map.map(function (v) { editor.currentFloorData.map = editor.map.map(function (v) {
@ -108,14 +108,18 @@ editor_file = function (editor, callback) {
editor.currentFloorData[name]=mapArray; editor.currentFloorData[name]=mapArray;
} }
} }
for (var ii in editor.currentFloorData) // format 更改实现方式以支持undefined删除
if (editor.currentFloorData.hasOwnProperty(ii)) { var tempJsonObj=Object.assign({},editor.currentFloorData);
if (['map','bgmap','fgmap'].indexOf(ii)!==-1) var tempMap=[['map',editor.guid()],['bgmap',editor.guid()],['fgmap',editor.guid()]];
datastr = datastr.concat(['\n"', ii, '": [\n', formatMap(editor.currentFloorData[ii],ii!='map'), '\n],']); tempMap.forEach(function(v){
else v[2]=tempJsonObj[v[0]];
datastr = datastr.concat(['\n"', ii, '": ', JSON.stringify(editor.currentFloorData[ii], null, 4), ',']); tempJsonObj[v[0]]=v[1];
} });
datastr = datastr.concat(['\n}']); var tempJson=JSON.stringify(tempJsonObj, null, 4);
tempMap.forEach(function(v){
tempJson=tempJson.replace('"'+v[1]+'"','[\n'+ formatMap(v[2],v[0]!='map')+ '\n]')
});
datastr = datastr.concat([tempJson]);
datastr = datastr.join(''); datastr = datastr.join('');
alertWhenCompress(); alertWhenCompress();
fs.writeFile(filename, encode(datastr), 'base64', function (err, data) { fs.writeFile(filename, encode(datastr), 'base64', function (err, data) {
@ -626,7 +630,7 @@ editor_file = function (editor, callback) {
actionList.forEach(function (value) { actionList.forEach(function (value) {
value[1] = value[1] + "['" + x + "," + y + "']"; value[1] = value[1] + "['" + x + "," + y + "']";
}); });
saveSetting('floors', actionList, function (err) { saveSetting('floorloc', actionList, function (err) {
callback([ callback([
(function () { (function () {
var locObj = {}; var locObj = {};
@ -745,7 +749,7 @@ editor_file = function (editor, callback) {
if (isset(editor.main[v])) if (isset(editor.main[v]))
locObj.main[v] = data_obj.main[v]; locObj.main[v] = data_obj.main[v];
else else
locObj[v] = null; locObj.main[v] = null;
}); });
return locObj; return locObj;
})(), })(),
@ -761,7 +765,7 @@ editor_file = function (editor, callback) {
if (isset(editor.main[v])) if (isset(editor.main[v]))
locObj.main[v] = data_obj.main[v]; locObj.main[v] = data_obj.main[v];
else else
locObj[v] = null; locObj.main[v] = null;
}); });
return locObj; return locObj;
})(), })(),
@ -976,13 +980,18 @@ editor_file = function (editor, callback) {
}); });
return; return;
} }
if (file == 'floors') { if (file == 'floorloc') {
actionList.forEach(function (value) { actionList.forEach(function (value) {
// 检测null/undefined // 检测null/undefined
if (core.isset(value[2])) if (!core.isset(value[2]))value[2]=undefined;
eval("editor.currentFloorData" + value[1] + '=' + JSON.stringify(value[2])); eval("editor.currentFloorData" + value[1] + '=' + JSON.stringify(value[2]));
else });
eval("delete editor.currentFloorData"+value[1]); editor_file.saveFloorFile(callback);
return;
}
if (file == 'floors') {
actionList.forEach(function (value) {
eval("editor.currentFloorData" + value[1] + '=' + JSON.stringify(value[2]));
}); });
editor_file.saveFloorFile(callback); editor_file.saveFloorFile(callback);
return; return;

View File

@ -18,6 +18,7 @@ editor_mode = function (editor) {
this.mode = ''; this.mode = '';
this.info = {}; this.info = {};
this.appendPic = {}; this.appendPic = {};
this.doubleClickMode='change';
} }
editor_mode.prototype.init = function (callback) { editor_mode.prototype.init = function (callback) {
@ -91,9 +92,25 @@ editor_mode = function (editor) {
* @param {Object} pcobj * @param {Object} pcobj
*/ */
var recursionParse = function (pfield, pcfield, pvobj, pcobj) { var recursionParse = function (pfield, pcfield, pvobj, pcobj) {
var keysForTableOrder={};
var voidMark={};
// 1. 按照pcobj排序生成 // 1. 按照pcobj排序生成
if (pcobj && pcobj['_data']){
for (var ii in pcobj['_data']) keysForTableOrder[ii]=voidMark;
}
// 2. 对每个pvobj且不在pcobj的再添加到最后 // 2. 对每个pvobj且不在pcobj的再添加到最后
var generate = function (ii) { keysForTableOrder=Object.assign(keysForTableOrder,pvobj)
for (var ii in keysForTableOrder) {
// 3. 对于pcobj有但是pvobj中没有的, 弹出提示, (正常情况下editor_file会补全成null)
// 事实上能执行到这一步工程没崩掉打不开,就继续吧..
if(keysForTableOrder[ii]===voidMark){
if(typeof id_815975ad_ee6f_4684_aac7_397b7e392702==="undefined"){
alert('comment和data不匹配,请在群 HTML5造塔技术交流群 959329661 内反馈')
console.error('comment和data不匹配,请在群 HTML5造塔技术交流群 959329661 内反馈')
id_815975ad_ee6f_4684_aac7_397b7e392702=1;
}
pvobj[ii]=null;
}
var field = pfield + "['" + ii + "']"; var field = pfield + "['" + ii + "']";
var cfield = pcfield + "['_data']['" + ii + "']"; var cfield = pcfield + "['_data']['" + ii + "']";
var vobj = pvobj[ii]; var vobj = pvobj[ii];
@ -113,7 +130,7 @@ editor_mode = function (editor) {
if (cobj[key] instanceof Function) cobj[key] = cobj[key](args); if (cobj[key] instanceof Function) cobj[key] = cobj[key](args);
} }
// 标记为_hide的属性不展示 // 标记为_hide的属性不展示
if (cobj._hide) return; if (cobj._hide)continue;
if (!cobj._leaf) { if (!cobj._leaf) {
// 不是叶节点时, 插入展开的标记并继续遍历, 此处可以改成按钮用来添加新项或折叠等 // 不是叶节点时, 插入展开的标记并继续遍历, 此处可以改成按钮用来添加新项或折叠等
outstr.push(["<tr><td>----</td><td>----</td><td>", field, "</td></tr>\n"].join('')); outstr.push(["<tr><td>----</td><td>----</td><td>", field, "</td></tr>\n"].join(''));
@ -125,24 +142,18 @@ editor_mode = function (editor) {
guids.push(leafnode[1]); guids.push(leafnode[1]);
} }
} }
var done = {};
if (pcobj && pcobj['_data']) {
for (var ii in pcobj['_data']) {
generate(ii);
done[ii] = true;
}
}
for (var ii in pvobj) {
if (done[ii]) continue;
generate(ii);
}
} }
// 开始遍历 // 开始遍历
recursionParse("", "", obj, commentObj); recursionParse("", "", obj, commentObj);
var checkRange = function (evalstr, thiseval) { var checkRange = function (cobj, thiseval) {
if (evalstr) { if (cobj._range) {
return eval(evalstr); return eval(cobj._range);
}
if (cobj._select) {
return cobj._select.values.indexOf(thiseval)!==-1;
}
if (cobj._bool) {
return [true,false].indexOf(thiseval)!==-1;
} }
return true; return true;
} }
@ -156,12 +167,12 @@ editor_mode = function (editor) {
var input = thisTr.children[2].children[0].children[0]; var input = thisTr.children[2].children[0].children[0];
var field = thisTr.children[0].getAttribute('title'); var field = thisTr.children[0].getAttribute('title');
var cobj = JSON.parse(thisTr.children[1].getAttribute('cobj')); var cobj = JSON.parse(thisTr.children[1].getAttribute('cobj'));
var modeNode = thisTr.parentNode;
while (!editor_mode._ids.hasOwnProperty(modeNode.getAttribute('id'))) {
modeNode = modeNode.parentNode;
}
input.onchange = function () { input.onchange = function () {
var node = thisTr.parentNode; editor_mode.onmode(editor_mode._ids[modeNode.getAttribute('id')]);
while (!editor_mode._ids.hasOwnProperty(node.getAttribute('id'))) {
node = node.parentNode;
}
editor_mode.onmode(editor_mode._ids[node.getAttribute('id')]);
var thiseval = null; var thiseval = null;
if (input.checked != null) input.value = input.checked; if (input.checked != null) input.value = input.checked;
try { try {
@ -170,16 +181,31 @@ editor_mode = function (editor) {
printe(field + ' : ' + ee); printe(field + ' : ' + ee);
throw ee; throw ee;
} }
if (checkRange(cobj._range, thiseval)) { if (checkRange(cobj, thiseval)) {
editor_mode.addAction(['change', field, thiseval]); editor_mode.addAction(['change', field, thiseval]);
editor_mode.onmode('save');//自动保存 editor_mode.onmode('save');//自动保存 删掉此行的话点保存按钮才会保存
} else { } else {
printe(field + ' : 输入的值不合要求,请鼠标放置在注释上查看说明'); printe(field + ' : 输入的值不合要求,请鼠标放置在注释上查看说明');
} }
} }
// 双击表格时
// 正常编辑: 尝试用事件编辑器或多行文本编辑器打开
// 添加: 在该项的同一级创建一个内容为null新的项, 刷新后生效并可以继续编辑
// 删除: 删除该项, 刷新后生效
// 在点击按钮 添加/删除 后,下一次双击将被视为 添加/删除
var dblclickfunc=function () { var dblclickfunc=function () {
if (cobj._type === 'event') editor_blockly.import(guid, {type: cobj._event}); if(editor_mode.doubleClickMode==='change'){
if (cobj._type === 'textarea') editor_multi.import(guid, {lint: cobj._lint, string: cobj._string}); if (cobj._type === 'event') editor_blockly.import(guid, {type: cobj._event});
if (cobj._type === 'textarea') editor_multi.import(guid, {lint: cobj._lint, string: cobj._string});
}
if(editor_mode.doubleClickMode==='add'){
editor_mode.doubleClickMode='change';
addfunc()
}
if(editor_mode.doubleClickMode==='delete'){
editor_mode.doubleClickMode='change';
deletefunc()
}
} }
input.ondblclick = dblclickfunc input.ondblclick = dblclickfunc
var doubleClickCheck=[0]; var doubleClickCheck=[0];
@ -191,6 +217,46 @@ editor_mode = function (editor) {
dblclickfunc() dblclickfunc()
} }
} }
var deletefunc=function(){
editor_mode.onmode(editor_mode._ids[modeNode.getAttribute('id')]);
if (checkRange(cobj, null)) {
editor_mode.addAction(['delete', field, undefined]);
editor_mode.onmode('save');//自动保存 删掉此行的话点保存按钮才会保存
} else {
printe(field + ' : 该值不允许为null,无法删除');
}
}
var addfunc=function(){
editor_mode.onmode(editor_mode._ids[modeNode.getAttribute('id')]);
// 1.输入id
var newid=prompt('请输入新项的id','newid');
// 2.检查id是否符合规范或与已有id重复
if (!/^[a-zA-Z0-9_]+$/.test(newid)){
printe('id不符合规范, 请使用大小写字母数字下划线来构成');
return;
}
var conflict=true;
var basefield=field.replace(/\[[^\[]*\]$/,'');
if (basefield==="['main']"){
printe("全塔属性 ~ ['main'] 不允许添加新值");
return;
}
try {
var baseobj=eval('obj'+basefield);
conflict=newid in baseobj;
} catch (ee) {
// 理论上这里不会发生错误
printe(ee);
throw ee;
}
if (conflict){
printe('id已存在, 请直接修改该项的值');
return;
}
// 3.添加
editor_mode.addAction(['add',basefield+"['"+newid+"']",null]);
editor_mode.onmode('save');//自动保存 删掉此行的话点保存按钮才会保存
}
}); });
} }
return {"HTML": outstr.join(''), "guids": guids, "listen": listen}; return {"HTML": outstr.join(''), "guids": guids, "listen": listen};
@ -212,7 +278,7 @@ editor_mode = function (editor) {
editor_mode.prototype.objToTr_ = function (obj, commentObj, field, cfield, vobj, cobj) { editor_mode.prototype.objToTr_ = function (obj, commentObj, field, cfield, vobj, cobj) {
var guid = editor.guid(); var guid = editor.guid();
var thiseval = vobj; var thiseval = vobj;
var comment = cobj._data; var comment = String(cobj._data);
var charlength = 10; var charlength = 10;
// "['a']['b']" => "b" // "['a']['b']" => "b"
@ -239,7 +305,6 @@ editor_mode = function (editor) {
editor_mode.prototype.objToTd_ = function (obj, commentObj, field, cfield, vobj, cobj) { editor_mode.prototype.objToTd_ = function (obj, commentObj, field, cfield, vobj, cobj) {
var thiseval = vobj; var thiseval = vobj;
if (thiseval === undefined) thiseval = null;
if (cobj._select) { if (cobj._select) {
var values = cobj._select.values; var values = cobj._select.values;
var outstr = ['<select>\n', "<option value='", JSON.stringify(thiseval), "'>", JSON.stringify(thiseval), '</option>\n']; var outstr = ['<select>\n', "<option value='", JSON.stringify(thiseval), "'>", JSON.stringify(thiseval), '</option>\n'];
@ -362,6 +427,7 @@ editor_mode = function (editor) {
editor_mode.dom[name].style = 'z-index:-1;opacity: 0;'; editor_mode.dom[name].style = 'z-index:-1;opacity: 0;';
} }
editor_mode.dom[mode].style = ''; editor_mode.dom[mode].style = '';
editor_mode.doubleClickMode='change';
// clear // clear
editor.drawEventBlock(); editor.drawEventBlock();
if (editor_mode[mode]) editor_mode[mode](); if (editor_mode[mode]) editor_mode[mode]();
@ -1136,6 +1202,19 @@ editor_mode = function (editor) {
return true return true
} }
editor_mode.changeDoubleClickModeByButton=function(mode){
({
delete:function(){
printf('下一次双击表格的项删除, 编辑后刷新浏览器生效 (正常模式下双击是用事件编辑器或文本编辑器编辑)');
editor_mode.doubleClickMode=mode;
},
add:function(){
printf('下一次双击表格的项, 在同级添加新项, 编辑后刷新浏览器生效 (正常模式下双击是用事件编辑器或文本编辑器编辑)');
editor_mode.doubleClickMode=mode;
}
}[mode])();
}
if (Boolean(callback)) callback(); if (Boolean(callback)) callback();
} }

View File

@ -56,7 +56,7 @@
callback(null, data); callback(null, data);
} }
}, function (e) { }, function (e) {
console.log(e); main.log(e);
callback(e+":请检查启动服务是否处于正常运行状态。"); callback(e+":请检查启动服务是否处于正常运行状态。");
}, "text/plain; charset=x-user-defined"); }, "text/plain; charset=x-user-defined");
} }

View File

@ -1,10 +1,10 @@
var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
{ {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"events": { "events": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"initGame": { "initGame": {
@ -106,7 +106,7 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"enemys": { "enemys": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"getSpecials": { "getSpecials": {
@ -136,7 +136,7 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"actions": { "actions": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"onKeyUp": { "onKeyUp": {
@ -148,7 +148,7 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"control": { "control": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"flyTo": { "flyTo": {
@ -178,7 +178,7 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"ui": { "ui": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"drawStatusBar": { "drawStatusBar": {
@ -202,7 +202,7 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
} }
}, },
"plugins": { "plugins": {
"_leaf": false,
"_type": "object", "_type": "object",
"_data": { "_data": {
"parallelDo": { "parallelDo": {

View File

@ -1851,7 +1851,7 @@ core.insertAction([
try { try {
eval(core.floors[core.status.floorId].parallelDo); eval(core.floors[core.status.floorId].parallelDo);
} catch (e) { } catch (e) {
console.log(e); main.log(e);
} }
} }

View File

@ -116,7 +116,7 @@
</div> </div>
</div> </div>
<div id="left3" class='leftTab' style="z-index:-1;opacity: 0;"><!-- enemyitem --> <div id="left3" class='leftTab' style="z-index:-1;opacity: 0;"><!-- enemyitem -->
<h3 class="leftTabHeader">图块属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button> <h3 class="leftTabHeader">图块属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>
</h3> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div id='newIdIdnum'><!-- id and idnum --> <div id='newIdIdnum'><!-- id and idnum -->
@ -142,7 +142,7 @@
</div> </div>
</div> </div>
<div id="left4" class='leftTab' style="z-index:-1;opacity: 0;"><!-- floor --> <div id="left4" class='leftTab' style="z-index:-1;opacity: 0;"><!-- floor -->
<h3 class="leftTabHeader">楼层属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button> <h3 class="leftTabHeader">楼层属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>
</h3> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -159,7 +159,7 @@
</div> </div>
</div> </div>
<div id="left5" class='leftTab' style="z-index:-1;opacity: 0;"><!-- tower --> <div id="left5" class='leftTab' style="z-index:-1;opacity: 0;"><!-- tower -->
<h3 class="leftTabHeader">全塔属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button> <h3 class="leftTabHeader">全塔属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>
</h3> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -257,7 +257,8 @@
</div> </div>
<div id="right" style="z-index:-1;opacity: 0;"> <div id="right" style="z-index:-1;opacity: 0;">
<div id="iconLib"> <div id="iconLib">
<canvas class='egameCanvas' id='edata' width='416' height='416' style='z-index:0'></canvas> <div id="iconImages"></div>
<canvas class='egameCanvas' id='edata' width='416' height='416'></canvas>
<div id="selectBox"> <div id="selectBox">
<div id='dataSelection' v-show="isSelected" v-cloak></div> <div id='dataSelection' v-show="isSelected" v-cloak></div>
</div> </div>

View File

@ -112,7 +112,7 @@
</div> </div>
</div> </div>
<div id="left3" class='leftTab' style="z-index:-1;opacity: 0;"><!-- enemyitem --> <div id="left3" class='leftTab' style="z-index:-1;opacity: 0;"><!-- enemyitem -->
<h3 class="leftTabHeader">图块属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button> <h3 class="leftTabHeader">图块属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>
</h3> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div id='newIdIdnum'><!-- id and idnum --> <div id='newIdIdnum'><!-- id and idnum -->
@ -138,7 +138,7 @@
</div> </div>
</div> </div>
<div id="left4" class='leftTab' style="z-index:-1;opacity: 0;"><!-- floor --> <div id="left4" class='leftTab' style="z-index:-1;opacity: 0;"><!-- floor -->
<h3 class="leftTabHeader">楼层属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button> <h3 class="leftTabHeader">楼层属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('delete')">删除</button>
</h3> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -155,7 +155,7 @@
</div> </div>
</div> </div>
<div id="left5" class='leftTab' style="z-index:-1;opacity: 0;"><!-- tower --> <div id="left5" class='leftTab' style="z-index:-1;opacity: 0;"><!-- tower -->
<h3 class="leftTabHeader">全塔属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button> <h3 class="leftTabHeader">全塔属性&nbsp;&nbsp;<button onclick="editor.mode.onmode('save')">保存</button>&nbsp;&nbsp;<button onclick="editor.mode.changeDoubleClickModeByButton('add')">添加</button>
</h3> </h3>
<div class="leftTabContent"> <div class="leftTabContent">
<div class='etable'> <div class='etable'>
@ -304,7 +304,8 @@
</div> </div>
<div id="right"> <div id="right">
<div id="iconLib"> <div id="iconLib">
<canvas class='egameCanvas' id='edata' width='416' height='416' style='z-index:0'></canvas> <div id="iconImages"></div>
<canvas class='egameCanvas' id='edata' width='416' height='416'></canvas>
<div id="selectBox"> <div id="selectBox">
<div id='dataSelection' v-show="isSelected" v-cloak></div> <div id='dataSelection' v-show="isSelected" v-cloak></div>
</div> </div>

View File

@ -275,7 +275,7 @@ control.prototype.setRequestAnimationFrame = function () {
} }
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
} }
}); });
} }
@ -2206,7 +2206,7 @@ control.prototype.doSL = function (id, type) {
if (id == 'autoSave') core.saves.autosave.data = core.clone(data); if (id == 'autoSave') core.saves.autosave.data = core.clone(data);
afterGet(data); afterGet(data);
}, function(err) { }, function(err) {
console.log(err); main.log(err);
alert("无效的存档"); alert("无效的存档");
}) })
} }
@ -2248,7 +2248,7 @@ control.prototype.doSL = function (id, type) {
if (id == 'autoSave') core.saves.autosave.data = core.clone(data); if (id == 'autoSave') core.saves.autosave.data = core.clone(data);
afterGet(data); afterGet(data);
}, function(err) { }, function(err) {
console.log(err); main.log(err);
alert("无效的存档"); alert("无效的存档");
}) })
} }
@ -2425,7 +2425,7 @@ control.prototype.getSaves = function (index, callback) {
core.getLocalForage("save"+index, null, function(data) { core.getLocalForage("save"+index, null, function(data) {
if (core.isset(callback)) callback(data); if (core.isset(callback)) callback(data);
}, function(err) { }, function(err) {
console.log(err); main.log(err);
if (core.isset(callback)) if (core.isset(callback))
callback(null); callback(null);
}) })
@ -2445,7 +2445,7 @@ control.prototype.getSaves = function (index, callback) {
saves.push(data); saves.push(data);
load(index+1, callback); load(index+1, callback);
}, function(err) { }, function(err) {
console.log(err); main.log(err);
load(index+1, callback); load(index+1, callback);
}) })
} }
@ -2556,7 +2556,7 @@ control.prototype.playBgm = function (bgm) {
core.material.bgms[bgm].pause(); core.material.bgms[bgm].pause();
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
} }
return; return;
} }
@ -2589,7 +2589,7 @@ control.prototype.playBgm = function (bgm) {
} }
catch (e) { catch (e) {
console.log("无法播放BGM "+bgm); console.log("无法播放BGM "+bgm);
console.log(e); main.log(e);
core.musicStatus.playingBgm = null; core.musicStatus.playingBgm = null;
} }
} }
@ -2604,7 +2604,7 @@ control.prototype.pauseBgm = function () {
} }
catch (e) { catch (e) {
console.log("无法暂停BGM"); console.log("无法暂停BGM");
console.log(e); main.log(e);
} }
this.setMusicBtn(); this.setMusicBtn();
@ -2620,7 +2620,7 @@ control.prototype.resumeBgm = function () {
} }
catch (e) { catch (e) {
console.log("无法恢复BGM"); console.log("无法恢复BGM");
console.log(e); main.log(e);
} }
this.setMusicBtn(); this.setMusicBtn();
} }
@ -2666,7 +2666,7 @@ control.prototype.playSound = function (sound) {
source.noteOn(0); source.noteOn(0);
} }
catch (ee) { catch (ee) {
console.log(ee); main.log(ee);
} }
} }
} }
@ -2677,7 +2677,7 @@ control.prototype.playSound = function (sound) {
} }
catch (eee) { catch (eee) {
console.log("无法播放SE "+sound); console.log("无法播放SE "+sound);
console.log(eee); main.log(eee);
} }
} }

View File

@ -293,13 +293,13 @@ core.prototype.init = function (coreData, callback) {
core.removeLocalForage("__test__"); core.removeLocalForage("__test__");
} }
} }
catch (e) {console.log(e); core.platform.useLocalForage=false;} catch (e) {main.log(e); core.platform.useLocalForage=false;}
}, function(e) {console.log(e); core.platform.useLocalForage=false;}) }, function(e) {main.log(e); core.platform.useLocalForage=false;})
} }
catch (e) {console.log(e); core.platform.useLocalForage=false;} catch (e) {main.log(e); core.platform.useLocalForage=false;}
}, function(e) {console.log(e); core.platform.useLocalForage=false;}) }, function(e) {main.log(e); core.platform.useLocalForage=false;})
} }
catch (e) {console.log(e); core.platform.useLocalForage=false;} catch (e) {main.log(e); core.platform.useLocalForage=false;}
} }
core.platform.extendKeyboard = core.getLocalStorage("extendKeyboard", false); core.platform.extendKeyboard = core.getLocalStorage("extendKeyboard", false);

View File

@ -978,7 +978,7 @@ events.prototype.doAction = function() {
core.setFlag((prefix||"global")+"@"+data.name.substring(7), value); core.setFlag((prefix||"global")+"@"+data.name.substring(7), value);
} }
} }
catch (e) {console.log(e)} catch (e) {main.log(e)}
core.updateStatusBar(); core.updateStatusBar();
this.doAction(); this.doAction();
break; break;
@ -1052,7 +1052,7 @@ events.prototype.doAction = function() {
value = core.decodeBase64(action.substring(7)); value = core.decodeBase64(action.substring(7));
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
core.stopReplay(); core.stopReplay();
core.drawTip("录像文件出错"); core.drawTip("录像文件出错");
return; return;
@ -1147,7 +1147,7 @@ events.prototype.doAction = function() {
} }
} }
} catch (e) { } catch (e) {
console.log(e); main.log(e);
} }
if (!data.async) if (!data.async)
this.doAction(); this.doAction();

View File

@ -35,7 +35,7 @@ items.prototype.getItemEffect = function(itemId, itemNum) {
eval(this.itemEffect[itemId]); eval(this.itemEffect[itemId]);
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
} }
} }
core.status.hero.statistics.hp += core.status.hero.hp - curr_hp; core.status.hero.statistics.hp += core.status.hero.hp - curr_hp;
@ -55,7 +55,7 @@ items.prototype.getItemEffectTip = function(itemId) {
try { try {
return eval(this.itemEffectTip[itemId])||""; return eval(this.itemEffectTip[itemId])||"";
} catch (e) { } catch (e) {
console.log(e); main.log(e);
return ""; return "";
} }
} }
@ -76,7 +76,7 @@ items.prototype.useItem = function (itemId, callback) {
eval(this.useItemEffect[itemId]); eval(this.useItemEffect[itemId]);
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
} }
} }
// 记录路线 // 记录路线
@ -107,7 +107,7 @@ items.prototype.canUseItem = function (itemId) {
able = eval(this.canUseItemEffect[itemId]); able = eval(this.canUseItemEffect[itemId]);
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
} }
} }
if (!able) core.status.event.data = null; if (!able) core.status.event.data = null;
@ -218,7 +218,7 @@ items.prototype.loadEquip = function (equipId, callback) {
} }
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
} }
} }

View File

@ -122,7 +122,7 @@ loader.prototype.loadImage = function (imgName, callback) {
image.src = 'project/images/' + name + "?v=" + main.version; image.src = 'project/images/' + name + "?v=" + main.version;
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
} }
} }
@ -146,7 +146,7 @@ loader.prototype.loadAnimates = function () {
image.src = t2; image.src = t2;
data.images.push(image); data.images.push(image);
} catch (e) { } catch (e) {
console.log(e); main.log(e);
data.images.push(null); data.images.push(null);
} }
} }
@ -171,11 +171,11 @@ loader.prototype.loadAnimates = function () {
core.material.animates[t] = data; core.material.animates[t] = data;
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
core.material.animates[t] = null; core.material.animates[t] = null;
} }
}, function (e) { }, function (e) {
console.log(e); main.log(e);
core.material.animates[t] = null; core.material.animates[t] = null;
}, "text/plain; charset=x-user-defined") }, "text/plain; charset=x-user-defined")
}) })
@ -206,11 +206,11 @@ loader.prototype.loadMusic = function () {
core.playBgm(t); core.playBgm(t);
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
core.material.bgms[t] = null; core.material.bgms[t] = null;
} }
}, function (e) { }, function (e) {
console.log(e); main.log(e);
core.material.bgms[t] = null; core.material.bgms[t] = null;
}, "text/plain; charset=x-user-defined") }, "text/plain; charset=x-user-defined")
@ -234,16 +234,16 @@ loader.prototype.loadMusic = function () {
core.musicStatus.audioContext.decodeAudioData(data, function (buffer) { core.musicStatus.audioContext.decodeAudioData(data, function (buffer) {
core.material.sounds[t] = buffer; core.material.sounds[t] = buffer;
}, function (e) { }, function (e) {
console.log(e); main.log(e);
core.material.sounds[t] = null; core.material.sounds[t] = null;
}) })
} }
catch (ee) { catch (ee) {
console.log(ee); main.log(ee);
core.material.sounds[t] = null; core.material.sounds[t] = null;
} }
}, function (e) { }, function (e) {
console.log(e); main.log(e);
core.material.sounds[t] = null; core.material.sounds[t] = null;
}, null, 'arraybuffer'); }, null, 'arraybuffer');
} }

View File

@ -2367,14 +2367,14 @@ ui.prototype.drawSLPanel = function(index, refresh) {
core.saves.autosave.data = data; core.saves.autosave.data = data;
core.status.event.ui[i]=data; core.status.event.ui[i]=data;
loadSave(i+1, callback); loadSave(i+1, callback);
}, function(err) {console.log(err);}); }, function(err) {main.log(err);});
} }
} }
else { else {
core.getLocalForage("save"+(5*page+i), null, function(data) { core.getLocalForage("save"+(5*page+i), null, function(data) {
core.status.event.ui[i]=data; core.status.event.ui[i]=data;
loadSave(i+1, callback); loadSave(i+1, callback);
}, function(err) {console.log(err);}); }, function(err) {main.log(err);});
} }
} }

View File

@ -40,6 +40,14 @@ utils.prototype.init = function () {
return to; return to;
}; };
} }
if (typeof String.prototype.endsWith != "function") {
String.prototype.endsWith = function(search, this_len) {
if (this_len === undefined || this_len > this.length) {
this_len = this.length;
}
return this.substring(this_len - search.length, this_len) === search;
};
}
} }
@ -136,7 +144,7 @@ utils.prototype.setLocalStorage = function(key, value) {
return true; return true;
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
return false; return false;
} }
} }
@ -160,7 +168,7 @@ utils.prototype.getLocalStorage = function(key, defaultValue) {
return defaultValue; return defaultValue;
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
return defaultValue; return defaultValue;
} }
} }
@ -226,7 +234,7 @@ utils.prototype.getLocalForage = function (key, defaultValue, successCallback, e
successCallback(JSON.parse(output)); successCallback(JSON.parse(output));
return; return;
} }
catch (ee) {console.log(ee);} catch (ee) {main.log(ee);}
} }
if (core.isset(successCallback)) if (core.isset(successCallback))
successCallback(JSON.parse(value)); successCallback(JSON.parse(value));
@ -669,7 +677,7 @@ utils.prototype.readFileContent = function (content) {
} }
} }
catch (e) { catch (e) {
console.log(e); main.log(e);
alert(e); alert(e);
} }
alert("不是有效的JSON文件"); alert("不是有效的JSON文件");

33
main.js
View File

@ -309,6 +309,17 @@ main.prototype.setMainTipsText = function (text) {
main.dom.mainTips.innerHTML = text; main.dom.mainTips.innerHTML = text;
} }
main.prototype.log = function (e) {
if (e) {
if (main.core && main.core.platform && !main.core.platform.isPC) {
console.log((e.stack || e.toString()).replace("\n", " --- "));
}
else {
console.log(e);
}
}
}
main.prototype.listen = function () { main.prototype.listen = function () {
@ -316,7 +327,7 @@ main.prototype.listen = function () {
window.onresize = function () { window.onresize = function () {
try { try {
main.core.resize(main.dom.body.clientWidth, main.dom.body.clientHeight); main.core.resize(main.dom.body.clientWidth, main.dom.body.clientHeight);
}catch (e) { console.log(e); } }catch (e) { main.log(e); }
} }
////// 在界面上按下某按键时 ////// ////// 在界面上按下某按键时 //////
@ -324,7 +335,7 @@ main.dom.body.onkeydown = function(e) {
try { try {
if (main.core && (main.core.isPlaying() || main.core.status.lockControl)) if (main.core && (main.core.isPlaying() || main.core.status.lockControl))
main.core.onkeyDown(e); main.core.onkeyDown(e);
} catch (ee) { console.log(ee); } } catch (ee) { main.log(ee); }
} }
////// 在界面上放开某按键时 ////// ////// 在界面上放开某按键时 //////
@ -332,7 +343,7 @@ main.dom.body.onkeyup = function(e) {
try { try {
if (main.core && (main.core.isPlaying() || main.core.status.lockControl)) if (main.core && (main.core.isPlaying() || main.core.status.lockControl))
main.core.onkeyUp(e); main.core.onkeyUp(e);
} catch (ee) { console.log(ee); } } catch (ee) { main.log(ee); }
} }
////// 开始选择时 ////// ////// 开始选择时 //////
@ -347,7 +358,7 @@ main.dom.data.onmousedown = function (e) {
var loc = main.core.getClickLoc(e.clientX, e.clientY); var loc = main.core.getClickLoc(e.clientX, e.clientY);
if (loc == null) return; if (loc == null) return;
main.core.ondown(loc); main.core.ondown(loc);
} catch (ee) { console.log(ee); } } catch (ee) { main.log(ee); }
} }
////// 鼠标移动时 ////// ////// 鼠标移动时 //////
@ -357,14 +368,14 @@ main.dom.data.onmousemove = function (e) {
var loc = main.core.getClickLoc(e.clientX, e.clientY); var loc = main.core.getClickLoc(e.clientX, e.clientY);
if (loc == null) return; if (loc == null) return;
main.core.onmove(loc); main.core.onmove(loc);
}catch (ee) { console.log(ee); } }catch (ee) { main.log(ee); }
} }
////// 鼠标放开时 ////// ////// 鼠标放开时 //////
main.dom.data.onmouseup = function () { main.dom.data.onmouseup = function () {
try { try {
main.core.onup(); main.core.onup();
}catch (e) { console.log(e); } }catch (e) { main.log(e); }
} }
////// 鼠标滑轮滚动时 ////// ////// 鼠标滑轮滚动时 //////
@ -374,7 +385,7 @@ main.dom.data.onmousewheel = function(e) {
main.core.onmousewheel(Math.sign(e.wheelDelta)) main.core.onmousewheel(Math.sign(e.wheelDelta))
else if (e.detail) else if (e.detail)
main.core.onmousewheel(Math.sign(e.detail)); main.core.onmousewheel(Math.sign(e.detail));
} catch (ee) { console.log(ee); } } catch (ee) { main.log(ee); }
} }
////// 手指在触摸屏开始触摸时 ////// ////// 手指在触摸屏开始触摸时 //////
@ -384,7 +395,7 @@ main.dom.data.ontouchstart = function (e) {
var loc = main.core.getClickLoc(e.targetTouches[0].clientX, e.targetTouches[0].clientY); var loc = main.core.getClickLoc(e.targetTouches[0].clientX, e.targetTouches[0].clientY);
if (loc == null) return; if (loc == null) return;
main.core.ondown(loc); main.core.ondown(loc);
}catch (ee) { console.log(ee); } }catch (ee) { main.log(ee); }
} }
////// 手指在触摸屏上移动时 ////// ////// 手指在触摸屏上移动时 //////
@ -394,7 +405,7 @@ main.dom.data.ontouchmove = function (e) {
var loc = main.core.getClickLoc(e.targetTouches[0].clientX, e.targetTouches[0].clientY); var loc = main.core.getClickLoc(e.targetTouches[0].clientX, e.targetTouches[0].clientY);
if (loc == null) return; if (loc == null) return;
main.core.onmove(loc); main.core.onmove(loc);
}catch (ee) { console.log(ee); } }catch (ee) { main.log(ee); }
} }
////// 手指离开触摸屏时 ////// ////// 手指离开触摸屏时 //////
@ -403,7 +414,7 @@ main.dom.data.ontouchend = function (e) {
e.preventDefault(); e.preventDefault();
main.core.onup(); main.core.onup();
} catch (e) { } catch (e) {
console.log(e); main.log(e);
} }
} }
@ -623,7 +634,7 @@ main.dom.musicBtn.onclick = function () {
try { try {
if (main.core) if (main.core)
main.core.triggerBgm(); main.core.triggerBgm();
} catch (e) {console.log(e);} } catch (e) {main.log(e);}
} }
window.onblur = function () { window.onblur = function () {

View File

@ -1211,7 +1211,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
try { try {
eval(core.floors[core.status.floorId].parallelDo); eval(core.floors[core.status.floorId].parallelDo);
} catch (e) { } catch (e) {
console.log(e); main.log(e);
} }
} }