diff --git a/docs/3.4-任务流程协议.md b/docs/3.4-任务流程协议.md index aba51a6fcc..23f698449a 100644 --- a/docs/3.4-任务流程协议.md +++ b/docs/3.4-任务流程协议.md @@ -233,6 +233,48 @@ Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" }; 以上这种情况, `"C@B" -> next`(即 `C@A#next`)为 `[ "N1" ]` 而不是 `[ "C@N0" ]`. +## 运行时修改任务 + +- `Task.lazy_parse()` 可以在运行时加载 json 任务配置文件。 lazy_parse 规则与[多文件任务](#多文件任务)相同。 +- `Task.set_task_base()` 可以修改任务的 `baseTask` 字段。 + +### 使用示例 + +假设有任务配置文件如下: + +```json +{ + "A": { + "baseTask": "A_default" + }, + "A_default": { + "next": [ "xxx" ] + }, + "A_mode1": { + "next": [ "yyy" ] + }, + "A_mode2": { + "next": [ "zzz" ] + } +} + ``` + +以下代码可以实现根据 mode 的值改变任务 "A",同时会改变其它依赖任务 "A" 的任务,如 "B@A": + +```cpp +switch (mode) { +case 1: + Task.set_task_base("A", "A_mode1"); // 基本上相当于用 A_mode1 的内容直接替换 A,下同 + break; +case 2: + Task.set_task_base("A", "A_mode2"); + break; +default: + Task.set_task_base("A", "A_default"); + break; +} +``` + ## 表达式计算 | 符号 | 含义 | 实例 |