feat(save): 添加 Yarn 节点 InProgress 跟踪与 detour 续跑去重
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user