diff --git a/js/plugins/PageSwitch.js b/js/plugins/PageSwitch.js
index d352036..22c0554 100644
--- a/js/plugins/PageSwitch.js
+++ b/js/plugins/PageSwitch.js
@@ -8,8 +8,10 @@
const caseHandlers = {};
// 判断状态
+ const checkCase = (caseName, args) => {
const checkCase = (caseName, event, args) => {
const handler = caseHandlers[caseName];
+ return handler(...args);
return handler(event, ...args);
};
@@ -39,6 +41,93 @@
return true;
};
+ /*
+ 2021.1.2 开关关
+ 下面的checkCases2方法针对的是写成这样的注释:
+
+
+ ( A or B ) and C
+ A : SelfData name is "HeartCase"
+ B : SelfData name is "AngelHeartCase"
+ C : GameVariable 5 > 10086
+
+
+ A、B、C在下面的注释中被称为标记。
+ 这段代码尚未测试。
+ */
+ const checkCases2 = (event, page) => {
+ // 第一步:读取注释内容到数组
+ const list = page.list;
+ let started = -1;
+ let arrayExpression = [];
+ for (let i = 0; i < list.length; i++) {
+ if (started == -1) {
+ if(list[i].code == 108 && list[i].parameters[0].search('') != -1) {
+ started = i;
+ }
+ } else {
+ if(list[i].code == 400 || 108) {
+ if (list[i].parameters[0].search('') != -1) {
+ break;
+ } else {
+ arrayExpression.push(list[i].parameters[0]);
+ }
+ }
+ }
+ }
+ console.log('提取出注释中从到中间的内容');
+ console.log(arrayExpression);
+ // 以上是第一步
+ // 第二步:计算每一行的结果(每个子条件)并记录
+ const flag = {}; // 记录每行标记的名称和对应的结果
+ // 翻译每条标记的表达式
+ for (let i = 1; i < arrayExpression.length; i++) {
+ const flagName = arrayExpression[i].split(' : ')[0];
+ const comment = arrayExpression[i].split(' : ')[1];
+ // 下面这段是从checkCases中复制来的
+ for (const key in casePatterns) {
+ const pattern = casePatterns[key];
+ const handler = caseHandlers[key];
+ const match = comment.match(pattern);
+ if (match) {
+ const [_, ...matches] = match;
+ const result = handler(event, ...matches);
+ flag[flagName] = result;
+ }
+ }
+ // 从checkCases中复制来的止于此
+ }
+ console.log('各标记的表达式');
+ console.log(flag);
+ // 以上是第二步
+ // 第三步:翻译总表达式(母条件)
+ let headExpression = arrayExpression[0].split(' ');
+ let headFormula = '';
+ for (let i = 0; i < headExpression.length; i++) {
+ switch headExpression[i] {
+ case '(':
+ headFormula += '( ';
+ break;
+ case ')':
+ headFormula += ') ';
+ break;
+ case 'or':
+ headFormula += '||';
+ break;
+ case 'and':
+ headFormula += '&&';
+ break;
+ default:
+ headFormula += '${flag[' + headExpression[i] + ']} ';
+ }
+ }
+ console.log('总表达式');
+ console.log(headFormula);
+ let headResult = new Function('return ' + '`' + headFormula + '`')();
+ return headResult;
+ };
+
+
// 注册 SwitchCase
// 只注册handler: registerCase('方法名', null, handler)
const registerCase = (key, pattern, handler) => {
@@ -57,4 +146,4 @@
window.PageSwitch = { registerCase, checkCase };
window.$caseHandlers = caseHandlers;
-}
+}
\ No newline at end of file