feat(client): Improve pages aiscript

This commit is contained in:
syuilo
2020-04-13 23:46:53 +09:00
parent 63225ed0fd
commit a19e252c9e
6 changed files with 61 additions and 37 deletions

View File

@ -17,41 +17,45 @@ export class ASEvaluator {
private variables: Variable[];
private pageVars: PageVar[];
private envVars: Record<keyof typeof envVarsDef, any>;
public aiscript: AiScript;
public aiscript: AiScript | undefined;
private pageVarUpdatedCallback;
private opts: {
randomSeed: string; visitor?: any; page?: any; url?: string;
enableAiScript: boolean;
};
constructor(vm: any, variables: Variable[], pageVars: PageVar[], opts: ASEvaluator['opts']) {
this.variables = variables;
this.pageVars = pageVars;
this.opts = opts;
this.aiscript = new AiScript({ ...createAiScriptEnv(vm, {
storageKey: 'pages:' + opts.page.id
}), ...{
'MkPages:updated': values.FN_NATIVE(([callback]) => {
this.pageVarUpdatedCallback = callback;
})
}}, {
in: (q) => {
return new Promise(ok => {
vm.$root.dialog({
title: q,
input: {}
}).then(({ canceled, result: a }) => {
ok(a);
if (this.opts.enableAiScript) {
this.aiscript = new AiScript({ ...createAiScriptEnv(vm, {
storageKey: 'pages:' + opts.page.id
}), ...{
'MkPages:updated': values.FN_NATIVE(([callback]) => {
this.pageVarUpdatedCallback = callback;
})
}}, {
in: (q) => {
return new Promise(ok => {
vm.$root.dialog({
title: q,
input: {}
}).then(({ canceled, result: a }) => {
ok(a);
});
});
});
},
out: (value) => {
console.log(value);
},
log: (type, params) => {
},
maxStep: 16384
});
},
out: (value) => {
console.log(value);
},
log: (type, params) => {
},
maxStep: 16384
});
}
const date = new Date();
@ -79,7 +83,7 @@ export class ASEvaluator {
if (pageVar !== undefined) {
pageVar.value = value;
if (this.pageVarUpdatedCallback) {
this.aiscript.execFn(this.pageVarUpdatedCallback, [values.STR(name), utils.jsToVal(value)]);
if (this.aiscript) this.aiscript.execFn(this.pageVarUpdatedCallback, [values.STR(name), utils.jsToVal(value)]);
}
} else {
throw new AoiScriptError(`No such page var '${name}'`);
@ -142,7 +146,11 @@ export class ASEvaluator {
}
if (block.type === 'aiScriptVar') {
return utils.valToJs(this.aiscript.scope.get(block.value));
if (this.aiscript) {
return utils.valToJs(this.aiscript.scope.get(block.value));
} else {
return null;
}
}
if (isFnBlock(block)) { // ユーザー関数定義