feat(save): 添加 Yarn 节点 InProgress 跟踪与 detour 续跑去重

This commit is contained in:
2026-06-29 15:58:15 +08:00
parent 382b784605
commit 0f681b518e
2 changed files with 180 additions and 57 deletions
@@ -87,6 +87,7 @@ namespace AibisDream
/// <param name="yarnProject">Yarn组</param>
public void StartDialog(YarnProject yarnProject)
{
PrepareYarnProjectForDialog(yarnProject);
_dialogueRunner.SetProject(yarnProject);
_ = _dialogueRunner.StartDialogue("Start");
}
@@ -94,14 +95,21 @@ namespace AibisDream
public void StopDialog()
{
_ = _dialogueRunner.Stop();
SavePointEvaluator.ResetForProject(null);
YarnVariableStorage.Instance.Clear();
DialogUIManager.Instance.HideDialog();
}
public void LoadDialog(YarnProject yarnProject)
{
PrepareYarnProjectForDialog(yarnProject);
_dialogueRunner.SetProject(yarnProject);
_ = _dialogueRunner.StartDialogue("Center");
}
private static void PrepareYarnProjectForDialog(YarnProject yarnProject)
{
var projectId = yarnProject != null ? yarnProject.name : null;
SavePointEvaluator.ResetForProjectIfChanged(projectId);
}
public void StartDialogNode(string nodeName)
@@ -163,8 +171,22 @@ namespace AibisDream
{
UpdateCurrentNodeContext(nodeName);
if (!SavePointEvaluator.CanAutoSave(out _))
var projectId = _dialogueRunner?.YarnProject?.name;
var tags = _currentNodeTags ?? Array.Empty<string>();
if (SaveRestoreOrchestrator.IsRestoring)
{
SavePointEvaluator.OnRestoreEnterNode(projectId, nodeName);
return;
}
if (!SavePointEvaluator.OnNodeStartForAutoSave(projectId, nodeName, tags, out var reason))
{
if (reason == SavePointRejectReason.DetourResume)
{
Debug.Log($"[DialogController] 跳过 detour 返回续跑的自动存档: {nodeName}");
}
return;
}
@@ -173,6 +195,7 @@ namespace AibisDream
private void OnNodeComplete(string nodeName)
{
SavePointEvaluator.OnNodeComplete(_dialogueRunner?.YarnProject?.name, nodeName);
ClearCurrentNodeContext();
}