diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 26e42096..ae25dcec 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1078,13 +1078,15 @@ return code; */; clearTextBox_s - : '清除对话框' ':' Int Newline + : '清除对话框' ':' EvalString? Newline /* clearTextBox_s tooltip : 清除对话框 helpUrl : /_docs/#/instruction -default : [1] -var code = '{"type": "clearTextBox", "code": '+Int_0+'},\n'; +default : ["1"] +if (EvalString_0 && !/^\d+(,\d+)*$/.test(EvalString_0)) throw new Error('对话框编号需要以逗号分隔'); +EvalString_0 = EvalString_0 ? (', "code": ['+EvalString_0+']') : ''; +var code = '{"type": "clearTextBox"'+EvalString_0+'},\n'; return code; */; diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js index 6d254695..fa6e9ab5 100644 --- a/_server/MotaActionParser.js +++ b/_server/MotaActionParser.js @@ -301,7 +301,7 @@ ActionParser.prototype.parseAction = function() { data.code, data.loc[0], data.loc[1], data.relative||false, data.moveMode, data.time, data.async, this.next]); break; case "clearTextBox": // 清除对话框 - this.next = MotaActionBlocks['clearTextBox_s'].xmlText([data.code,this.next]); + this.next = MotaActionBlocks['clearTextBox_s'].xmlText([(data.code||"").toString(),this.next]); break; case "autoText": // 自动剧情文本 var info = this.getTitleAndPosition(data.text); @@ -321,7 +321,7 @@ ActionParser.prototype.parseAction = function() { if (!/^\w+\.png$/.test(data.background)) data.background=this.Colour(data.background); this.next = MotaActionBlocks['setText_s'].xmlText([ - data.position,data.offset,data.align,data.title,data.bold,'rgba('+data.title+')', + data.position,data.offset,data.align,data.bold,data.title,'rgba('+data.title+')', data.text,'rgba('+data.text+')',data.background,'rgba('+data.background+')', data.titlefont,data.textfont,data.lineHeight,data.time,data.letterSpacing,data.animateTime,this.next]); break; diff --git a/libs/events.js b/libs/events.js index aa0a995d..a63c887e 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1354,7 +1354,7 @@ events.prototype.__action_doAsyncFunc = function (isAsync, func) { events.prototype._action_text = function (data, x, y, prefix) { if (this.__action_checkReplaying()) return; data.text = core.replaceText(data.text, prefix); - var ctx = data.code ? '__text__' + data.code : null;; + var ctx = data.code ? ('__text__' + data.code) : null;; data.ctx = ctx; if (core.getContextByName(ctx) && !data.showAll) { core.ui._animateUI('hide', ctx, function () { @@ -3127,14 +3127,26 @@ events.prototype._moveTextBox_moving = function (ctx, moveInfo, callback) { ////// 清除对话框 ////// events.prototype.clearTextBox = function (code, callback) { - var ctx = '__text__' + code; - if (!core.getContextByName(ctx)) { - if (callback) callback(); + if (code == null) { + code = Object.keys(core.dymCanvas).filter(function (one) { return one.startsWith('__text__') }) + .map(function (one) { return one.substring('__text__'.length); }) } - core.ui._animateUI('hide', ctx, function () { - core.deleteCanvas(ctx); - if (callback) callback(); - }); + + if (!(code instanceof Array)) code = [code]; + var index = 0; + var _work = function () { + if (index == code.length) { + if (callback) callback(); + return; + } + var ctx = '__text__' + code[index++]; + if (!core.getContextByName(ctx)) return _work(); + core.ui._animateUI('hide', ctx, function () { + core.deleteCanvas(ctx); + _work(); + }); + }; + _work(); } ////// 关门 ////// diff --git a/libs/ui.js b/libs/ui.js index 9414de9b..2324800a 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -1416,6 +1416,7 @@ ui.prototype.drawTextBox = function(content, config) { config = config || {}; this.clearUI(); + content = core.replaceText(content); var ctx = config.ctx || null; if (ctx && main.mode == 'play') {