test(save): 更新验证窗口模拟 OnNodeStart 自动档判定
This commit is contained in:
@@ -315,8 +315,8 @@ namespace AibisDream.SaveSystem.Editor
|
||||
{
|
||||
EditorGUILayout.LabelField("可存点判定框架检查", EditorStyles.boldLabel);
|
||||
EditorGUILayout.HelpBox(
|
||||
"手动设置节点名和 tags,测试 SavePointEvaluator.CanAutoSave 的判定结果。\n" +
|
||||
"不涉及真实 DialogController,因此 IsRestoring/GamePaused 等状态仍按实际运行时取值。",
|
||||
"手动设置节点名和 tags,模拟 OnNodeStart 自动档判定(含 DetourResume)。\n" +
|
||||
"InProgress 来自运行时 DialogController;全局门控按实际 Play Mode 状态取值。",
|
||||
MessageType.None);
|
||||
|
||||
_testNodeName = EditorGUILayout.TextField("节点名", _testNodeName);
|
||||
@@ -543,10 +543,42 @@ namespace AibisDream.SaveSystem.Editor
|
||||
|
||||
try
|
||||
{
|
||||
var result = SavePointEvaluator.CanAutoSave(out var reason);
|
||||
Log($"CanAutoSave = {result}, Reason = {reason}\n" +
|
||||
$"(当前 IsRestoring = {SaveRestoreOrchestrator.IsRestoring}, " +
|
||||
$"GameManager.pause = {(GameManager.Instance != null ? GameManager.Instance.state.isInPause.ToString() : "N/A")})");
|
||||
var projectId = DialogController.Instance?.DialogueRunner?.YarnProject?.name;
|
||||
var tags = ParseTestTags(_testTags);
|
||||
var inProgress = SavePointEvaluator.InProgressNodeNames;
|
||||
|
||||
if (SaveRestoreOrchestrator.IsAutoSaveSuppressed)
|
||||
{
|
||||
Log("全局门控: AutoSaveSuppressed");
|
||||
return;
|
||||
}
|
||||
|
||||
if (SaveRestoreOrchestrator.IsRestoring)
|
||||
{
|
||||
Log("全局门控: Restoring(读档重进走 OnRestoreEnterNode,不写盘)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (GameManager.Instance != null && GameManager.Instance.state.isInPause)
|
||||
{
|
||||
Log("全局门控: GamePaused");
|
||||
return;
|
||||
}
|
||||
|
||||
var detourResume = !string.IsNullOrEmpty(_testNodeName)
|
||||
&& inProgress.Contains(_testNodeName);
|
||||
var tagOk = SavePointEvaluator.EvaluateNodeTagsForAutoSave(
|
||||
_testNodeName, tags, out var tagReason);
|
||||
var wouldSave = !detourResume && tagOk;
|
||||
|
||||
Log(
|
||||
$"Project = {projectId ?? "(null)"}\n" +
|
||||
$"InProgress = [{string.Join(", ", inProgress)}]\n" +
|
||||
$"模拟节点 = {_testNodeName}, tags = [{string.Join(", ", tags)}]\n" +
|
||||
$"DetourResume = {detourResume}\n" +
|
||||
$"Tag 判定 = {tagOk}, TagReason = {tagReason}\n" +
|
||||
$"OnNodeStart 会自动存 = {wouldSave}\n" +
|
||||
$"(DialogController 当前上下文 CanAutoSave = {SavePointEvaluator.CanAutoSave(out var ctxReason)}, Reason = {ctxReason})");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -554,6 +586,19 @@ namespace AibisDream.SaveSystem.Editor
|
||||
}
|
||||
}
|
||||
|
||||
private static string[] ParseTestTags(string raw)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(raw))
|
||||
{
|
||||
return Array.Empty<string>();
|
||||
}
|
||||
|
||||
return raw.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(tag => tag.Trim())
|
||||
.Where(tag => tag.Length > 0)
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private void RestoreLatestSlot()
|
||||
{
|
||||
var latest = SlotManager.GetLatestSlotIndex();
|
||||
|
||||
Reference in New Issue
Block a user