Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 90 additions & 1 deletion js/plugins/PageSwitch.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
};

Expand Down Expand Up @@ -39,6 +41,93 @@
return true;
};

/*
2021.1.2 开关关
下面的checkCases2方法针对的是写成这样的注释:

<conditions>
( A or B ) and C
A : SelfData name is "HeartCase"
B : SelfData name is "AngelHeartCase"
C : GameVariable 5 > 10086
</conditions>

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('<conditions>') != -1) {
started = i;
}
} else {
if(list[i].code == 400 || 108) {
if (list[i].parameters[0].search('</conditions>') != -1) {
break;
} else {
arrayExpression.push(list[i].parameters[0]);
}
}
}
}
console.log('提取出注释中从<conditions>到</conditions>中间的内容');
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) => {
Expand All @@ -57,4 +146,4 @@

window.PageSwitch = { registerCase, checkCase };
window.$caseHandlers = caseHandlers;
}
}