# Test_Huoshan Yarn 完整流程图(Debug 用) > 基于 `Test_Huoshan.yarnproject` 及所有 `.yarn` 文件生成 ## 0. Yarn Graph 布局说明 节点已按逻辑分组,position 与 tags 便于在 Yarn Editor 中浏览: | 区域 | X 范围 | 内容 | |------|--------|------| | 核心枢纽 | 300 | Start → VarsInit → Center(竖直) | | Stage1 | 100 | 诊室开场(左列) | | Stage2 主流程 | 150-450 | 检查表达→滤波器→情绪(中) | | Stage2 分支 | 50-650 | 检查记忆/逻辑/视觉(插线入口上方) | | 插线桥接 | 50-650, y=600 | Emo/Speak/Logic/Color/Memory/EyePlugIn | | Stage3 销售 | 100-350 | 步进→转动完成→安装日志→旋钮(左中) | | 销售桥接 | 550 | 销售模块转动完成、处理器单次调节失败 | | Stage4-8 | 500 | 各 Stage 入口与结束(右列竖直) | | 波形工具 | 700 | 波形_* 节点(最右) | **colorID 含义:** 1=入口, 2=Stage, 3=主流程/Expression, 4=变量, 5=销售, 6=波形, 7=桥接, 8=通用 ## 1. 主流程总览 ```mermaid flowchart TB subgraph entry ["入口"] Start --> VarsInit VarsInit --> Center end subgraph center ["Center 调度 (按 $gameStage)"] Center -->|1| Stage1 Center -->|2| Stage2 Center -->|3| Stage3 Center -->|4| Stage4 Center -->|5| Stage5 Center -->|6| Stage6 Center -->|7| Stage7 Center -->|8| Stage8 Center -->|100| 测试 Center -->|999| NextYarn end subgraph stage_flow ["Stage 流转"] Stage1 --> S1_end["gameStage=2"] Stage2 --> S2_end["gameStage=3"] Stage3 --> S3_end["gameStage=4"] Stage4 --> S4_end["gameStage=5"] Stage5 --> S5_end["gameStage=6"] Stage6 --> S6_end["gameStage=7"] Stage7 --> S7_end["gameStage=8"] Stage8 --> S8_end["gameStage=999"] S1_end --> Center S2_end --> Center S3_end --> Center S4_end --> Center S5_end --> Center S6_end --> Center S7_end --> Center S8_end --> Center end ``` --- ## 2. 变量初始化 (VarsInit) | 变量 | 说明 | |------|------| | `$gameStage` | 当前流程阶段 (1-8, 100=测试, 999=结束) | | `$TaskToDo` | 待完成任务数 | | `$emoChecked` / `$memoryChecked` / `$logicChecked` / `$eyeChecked` / `$speakerChecked` / `$colorChecked` / `$expressionChecked` | 各模块首次检查标记 | | `$emoDeepChecked` / `$expressionSentenceGet` / `$hasTimestamp` | 深入检查标记 | | `$currentSocket` / `$PlugCount` / `$PlugAll` | 插线相关 | | `$salesTurnIndex` | 销售模块转动轮次 (1-based) | | `$knobFailCount` | 旋钮调节失败次数 | --- ## 3. Stage 1 - 诊室开场 ```mermaid flowchart LR Stage1 --> 开头对话 开头对话 -->|"set $gameStage=2"| Center ``` - 内容:火山说笑话、发热 → 去诊室 --- ## 4. Stage 2 - 后脑检查(插线) ```mermaid flowchart TB Stage2["Stage2 入口"] Stage2 --> Task["Task: 检查表达模块"] Task --> 检查表达 subgraph 表达流程 检查表达 -->|"gameStage==2"| 表达完成["完成Task\nModuleHightLight Speak→color\nTask: 检查滤波器"] 表达完成 --> 检查销售模块 end 检查销售模块 -->|"gameStage==2"| 滤波器完成["波形分析\n发现锯齿波\nTask: 检查情绪模块"] 滤波器完成 --> 检查情绪 subgraph 情绪与波形 检查情绪 --> 条件{"speakerChecked &&\ncolorChecked"} 条件 -->|是| 查询情绪波形["对比预测波形与真实情绪\n发现对不上"] 条件 -->|否| 结束 查询情绪波形 --> 结束Stage2["结束Stage2\ngameStage=3"] end 检查表达 -.->|其他插线| 检查记忆 检查表达 -.->|其他插线| 检查逻辑 检查表达 -.->|其他插线| 检查视觉 检查表达 -.->|其他插线| 检查情绪 ``` **Stage2 插线入口(EventNode):** | 插线节点 | jump 目标 | |----------|-----------| | EmoPlugIn | 检查情绪 | | SpeakPlugIn | 检查表达 | | LogicPlugIn | 检查逻辑 | | SalePlugIn | 检查销售模块 | | MemoryPlugIn | 检查记忆 | | EyePlugIn | 检查视觉 | **关键顺序(gameStage==2):** 表达 → 滤波器 → 情绪(情绪需 speaker+color 都检查过才会对比波形 → 结束Stage2) --- ## 5. Stage 3 - 滤波器深入(步进 + 销售模块) ```mermaid flowchart TB Stage3["Stage3 入口\nTask: 检查滤波器处理链路"] Stage3 --> 步进查看模式 subgraph 步进流程["步进流程(Yarn 仅显示情绪输入,其余由转动监听驱动)"] 步进查看模式 --> 步进_情绪输入["步进_情绪输入\n显示原始情绪波形\n转动发条来检测吧"] 步进_情绪输入 -->|"等待 SalesManager\n转动完成事件"| 销售模块转动完成 end subgraph EventNode_销售["销售模块转动完成(EventNode 仅桥接,分发到 Stage3)"] 销售模块转动完成["销售模块转动完成"] 销售模块转动完成 -->|salesTurnIndex==1| 语义合成["销售转动_语义合成"] 销售模块转动完成 -->|salesTurnIndex==2| 语言审查["销售转动_语言审查"] 销售模块转动完成 -->|salesTurnIndex==3| 异常检测["销售转动_异常检测"] end subgraph 安装日志与旋钮["调取安装日志 → 解锁旋钮 → 监听旋钮"] 异常检测 --> 查询异常进程["查询异常进程\n情绪修改器组件"] 查询异常进程 --> 查看安装日志["查看安装日志\n3年无复查"] 查看安装日志 -->|"unlock_knob\n节点结束,等待旋钮"| 等待旋钮["KnobController 监听"] 等待旋钮 -->|"用户转动超阈值"| 处理器单次调节失败 end subgraph EventNode_旋钮["旋钮失败时 KnobController 跳入(EventNode 仅桥接)"] 处理器单次调节失败["处理器单次调节失败\n<>"] 处理器单次调节失败 --> 旋钮调节失败 end subgraph 旋钮调节失败_Stage3["旋钮调节失败 (Stage3)"] 旋钮调节失败["旋钮调节失败"] 旋钮调节失败 -->|knobFailCount==1| 重试["再试一次\nreset_knob"] 旋钮调节失败 -->|knobFailCount>=2| 最终失败["lock_knob + 叙事\njump 结束Stage3"] end ``` **Stage3 关键流程:** 1. 步进_情绪输入 结束 → 对话暂停,等待玩家转动发条 2. **转1**:销售模块转动完成 → 语义合成完成 3. **转2**:销售模块转动完成 → 语言审查通过 4. **转3**:销售模块转动完成 → 检测异常 → 进入处理器 → lock_knob → 查询异常进程 → 查看安装日志 → unlock_knob → 等待旋钮 5. 旋钮失败 → 处理器单次调节失败(1次重试)→ 处理器功率调节失败 → 结束Stage3 --- ## 6. Stage 4 - 表达模块 RAM ```mermaid flowchart TB Stage4["Stage4 入口\nTask: 检查表达模块"] Stage4 --> 检查表达 检查表达 -->|"gameStage==4"| RAM发现["发现未释放log\nRAM溢出"] RAM发现 --> 结束Stage4["结束Stage4\ngameStage=5"] ``` --- ## 7. Stage 5 - 诊室对话 ```mermaid flowchart TB Stage5["Stage5 入口"] Stage5 --> 诊室对话["诊室对话\n火山承认+达成共识"] 诊室对话 --> 结束Stage5["结束Stage5\ngameStage=6"] ``` --- ## 8. Stage 6 - 释放 RAM ```mermaid flowchart TB Stage6["Stage6 入口\nTask: 释放表达模块RAM"] Stage6 --> 检查表达 检查表达 -->|"gameStage==6"| 释放log["释放log\n自动释放 log1/2/3"] 释放log --> 手动释放["遇到被干扰log\n进入手动释放"] 手动释放 --> 手动释放log["手动释放log\nswitch Expression"] 手动释放log --> LOG1["LOG1: 哈哈|嘿嘿|呵呵 → 我很害怕"] LOG1 --> LOG1梳理完成 LOG1梳理完成 --> LOG2["LOG2: ... → 她都是为了我"] LOG2 --> LOG2梳理完成 LOG2梳理完成 --> LOG3["LOG3: ... → 我不想再继续逃了"] LOG3 --> LOG疏通全部完成 LOG疏通全部完成 --> 结束Stage6["结束Stage6\ngameStage=7"] ``` --- ## 9. Stage 7 - 最终检查 ```mermaid flowchart TB Stage7["Stage7 入口\nTaskToDo=2"] Stage7 --> Task1["Task: 检查表达模块"] Stage7 --> Task2["Task: 检查滤波器"] 检查表达 -->|"gameStage==7"| 表达OK["完成Task\nTaskToDo--"] 检查销售模块 -->|"gameStage==7"| 滤波器OK["完成Task\nTaskToDo--"] 表达OK --> 判断1{"TaskToDo==0?"} 滤波器OK --> 判断1 判断1 -->|是| 结束Stage7["结束Stage7\ngameStage=8"] 判断1 -->|否| 继续["继续等待另一项完成"] ``` --- ## 10. Stage 8 - 结束对话 ```mermaid flowchart TB Stage8["Stage8 入口"] Stage8 --> 结束对话["结束对话\n火山说出真话"] 结束对话 -->|"gameStage=999"| Center ``` --- ## 11. EventNode 与波形节点 ```mermaid flowchart TB subgraph 插线入口 EmoPlugIn SpeakPlugIn LogicPlugIn SalePlugIn MemoryPlugIn EyePlugIn end subgraph 销售相关 销售模块转动完成 处理器单次调节失败 处理器功率调节失败 end subgraph 波形 波形_显示并连接 波形_显示情绪 波形_显示滤波器输出 波形_隐藏 end ``` --- ## 12. Debug 检查清单 | 现象 | 可能原因 | 检查点 | |------|----------|--------| | 流程卡住 | `$gameStage` 未正确更新 | Center 各 Stage 分支 | | Stage2 不推进 | 表达/滤波器/情绪未按顺序完成 | 检查表达→滤波器→情绪,以及 speakerChecked+colorChecked | | Stage3 步进不走 | 未从滤波器进入步进;或 SalesManager 未触发转动完成 | 检查销售模块 gameStage==3 的「进入步进查看模式」;检查 totalTurns≥3、crankCompleteNode | | 销售模块无反馈 | SalesManager/KnobController 未跳转 | EventNode: 销售模块转动完成、处理器单次调节失败 | | Stage4 无法进 | 需从 Stage3 结束 或 处理器功率调节失败 | 结束Stage3 与 处理器功率调节失败 都 `<>` | | Stage6 手动释放卡住 | Expression 模块/start_expression | start_expression 完成节点 | | Stage7 TaskToDo 不清零 | 表达/滤波器 有一项未完成 | 两项都需 `complete_task` 且 `TaskToDo--` | | 测试模式 | gameStage=100 | 测试 节点直接进入 Sales+EmotionWave | --- ## 13. 文件与节点索引 | 文件 | 节点 | |------|------| | Center.yarn | Start, VarsInit, Center, 测试 | | EventNode.yarn | EmoPlugIn, SpeakPlugIn, LogicPlugIn, SalePlugIn, MemoryPlugIn, EyePlugIn, 销售模块转动完成, 处理器单次调节失败(桥接), 波形_* | | Stage1.yarn | Stage1, 开头对话 | | Stage2.yarn | Stage2, 检查表达, 检查销售模块, 检查情绪, 检查记忆, 检查逻辑, 检查视觉, 结束Stage2 | | Stage3.yarn | Stage3, 步进查看模式, 步进_情绪输入, 销售转动_语义合成/语言审查/异常检测, 查询异常进程, 查看安装日志, 旋钮调节失败, 结束Stage3 | | Stage4.yarn | Stage4, 结束Stage4 | | Stage5.yarn | Stage5, 结束Stage5 | | Stage6.yarn | Stage6, 手动释放log, LOG1/2/3梳理完成, LOG疏通全部完成, 结束Stage6 | | Stage7.yarn | Stage7, 结束Stage7 | | Stage8.yarn | Stage8, 结束对话 |