diff --git a/_server/editor_mode.js b/_server/editor_mode.js index 7cd86e40..4bf207ad 100644 --- a/_server/editor_mode.js +++ b/_server/editor_mode.js @@ -18,7 +18,7 @@ editor_mode = function (editor) { this._ids = {} this.dom = {} this.actionList = []; - this.mode = ''; + this.mode = 'tower'; // 初始默认显示全塔属性 this.info = {}; this.appendPic = {}; this.doubleClickMode = 'change'; @@ -176,6 +176,7 @@ editor_mode = function (editor) { printe(err); throw Error(err); } + var notExist = null; thiseval.map(function (v) { var name = v.indexOf('.') < 0 ? (v+'.png') : v; if (data.indexOf(name) < 0) notExist = name; diff --git a/_server/editor_table.js b/_server/editor_table.js index c01e3512..c9d0ce31 100644 --- a/_server/editor_table.js +++ b/_server/editor_table.js @@ -192,6 +192,7 @@ editor_table_wrapper = function (editor) { // 当cobj的参数为函数时,代入args算出值 for (var key in cobj) { if (key === '_data') continue; + if (key === '_transform' || key == '_onconfirm') cobj[key] = cobj[key].toString(); if (cobj[key] instanceof Function) cobj[key] = cobj[key](args); } pvobj[ii] = vobj = args.vobj; @@ -363,8 +364,10 @@ editor_table_wrapper = function (editor) { var tr = button.parentNode.parentNode; var guid = tr.getAttribute('id'); var cobj = JSON.parse(tr.children[1].getAttribute('cobj')); + var input = tr.children[2].children[0].children[0]; 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 (cobj._type === 'material') editor.table.selectMaterial(input, cobj); } /** @@ -378,6 +381,7 @@ editor_table_wrapper = function (editor) { if (editor_mode.doubleClickMode === 'change') { 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 (cobj._type === 'material') editor.table.selectMaterial(input, cobj); } else if (editor_mode.doubleClickMode === 'add') { editor_mode.doubleClickMode = 'change'; editor.table.addfunc(guid, obj, commentObj, thisTr, input, field, cobj, modeNode) @@ -387,6 +391,17 @@ editor_table_wrapper = function (editor) { } } + editor_table.prototype.selectMaterial = function (input, cobj) { + editor.uievent.selectMaterial(input.value, cobj._docs || cobj._data || '请选择素材', cobj._directory, function (one) { + if (!/^[-A-Za-z0-9_.]+$/.test(one)) return null; + if (cobj._transform) return eval("("+cobj._transform+")(one)"); + return one; + }, function (data) { + input.value = JSON.stringify(cobj._onconfirm ? eval("("+cobj._onconfirm+")(JSON.parse(input.value), data)") : data); + input.onchange(); + }) + } + /** * 删除表格项 */ diff --git a/_server/editor_ui.js b/_server/editor_ui.js index 9e5d3256..47e26bdb 100644 --- a/_server/editor_ui.js +++ b/_server/editor_ui.js @@ -468,16 +468,7 @@ editor_ui_wrapper = function (editor) { uievent.elements.canvas = document.getElementById('uievent'); uievent.elements.usedFlags = document.getElementById('uieventUsedFlags'); uievent.elements.usedFlagList = document.getElementById('uieventUsedFlagList'); - - uievent.confirm = function () { - var callback = uievent.values.callback, floorId = uievent.values.floorId, - x = uievent.values.x, y = uievent.values.y; - uievent.close(); - if (callback) { - callback(floorId, x, y); - } - } - uievent.elements.yes.onclick = uievent.confirm; + uievent.elements.materialList = document.getElementById('uieventMaterialList'); uievent.close = function () { uievent.isOpen = false; @@ -534,7 +525,6 @@ editor_ui_wrapper = function (editor) { uievent.selectPoint = function (floorId, x, y, hideFloor, callback) { uievent.values.hideFloor = hideFloor; - uievent.values.callback = callback; uievent.values.size = editor.isMobile ? window.innerWidth / core.__SIZE__ : 32; uievent.elements.selectPointBox.style.width = (uievent.values.size - 6) + "px"; uievent.elements.selectPointBox.style.height = (uievent.values.size - 6) + "px"; @@ -552,6 +542,13 @@ editor_ui_wrapper = function (editor) { uievent.elements.usedFlags.style.display = 'none'; uievent.elements.usedFlagList.style.display = 'none'; uievent.elements.body.style.overflow = "hidden"; + uievent.elements.yes.onclick = function () { + var floorId = uievent.values.floorId, x = uievent.values.x, y = uievent.values.y; + uievent.close(); + if (callback) { + callback(floorId, x, y); + } + } // Append children var floors = ""; @@ -745,6 +742,60 @@ editor_ui_wrapper = function (editor) { return list; } + // ------ 素材选择框 ------ // + uievent.selectMaterial = function (value, title, directory, transform, callback) { + fs.readdir(directory, function (err, data) { + if (err) { + printe(directory + '不存在!'); + throw (directory + '不存在!'); + } + if (!(data instanceof Array)) { + printe('没有可显示的内容') + return; + } + value = value || []; + data = (transform ? data.map(transform) : data).filter(function (one) {return one;}).sort(); + + uievent.isOpen = true; + uievent.elements.div.style.display = 'block'; + uievent.mode = 'selectMaterial'; + uievent.elements.selectPoint.style.display = 'none'; + uievent.elements.yes.style.display = 'block'; + uievent.elements.title.innerText = title; + uievent.elements.selectBackground.style.display = 'none'; + uievent.elements.selectFloor.style.display = 'none'; + uievent.elements.selectPointBox.style.display = 'none'; + uievent.elements.canvas.style.display = 'none'; + uievent.elements.usedFlags.style.display = 'none'; + uievent.elements.usedFlagList.style.display = 'none'; + uievent.elements.materialList.style.display = 'block'; + uievent.elements.body.style.overflow = "auto"; + + uievent.elements.yes.onclick = function () { + var list = Array.from(document.getElementsByClassName('materialCheckbox')).filter(function (one) { + return one.checked; + }).map(function (one) {return one.getAttribute('key'); }); + uievent.close(); + if (callback) callback(list); + } + + // 显示每一项内容 + var html = "
";
+ html += "
";
+ data.forEach(function (one) {
+ html += `= 0? 'checked' : ''} /> ${one}
`;
+ });
+ html += "