move debug cursor in runtime

This commit is contained in:
iisaev committed 2026-10-19 17:39:30 +03:00
1 parent 5200db1562
commit 9f86bdbb0c
2 files changed
+45

No files matched your search

+20
View File
@@ -308,6 +308,26 @@ namespace Cthangover.Mods.Dialog
ScheduleWaitTimer();
}
/// <summary>
/// Moves a running dialog to another action and holds it there
/// (<see cref="DialogRuntime.MoveTo"/>): a pending wait timer and an open
/// answer box are dropped, since they belong to the action left behind;
/// the shown text stays until the new action replaces it.
/// </summary>
public bool MoveTo(int queueIndex)
{
if (!IsRunning)
return false;
ClearWaitTimer();
if (answerBox != null)
{
answerBox.Hide();
answerBox = null;
}
return Runtime.MoveTo(queueIndex);
}
/// <summary>
/// Stops the running dialog without finishing it (<see cref="DialogRuntime.Abort"/>)
/// and frees the box for another queue: closes the answer box, hides
+25
View File
@@ -187,6 +187,31 @@ namespace Cthangover.Mods.Dialog
End();
}
/// <summary>
/// Debugger "set next statement": makes the action at
/// <paramref name="queueIndex"/> the next one to run and holds the
/// runtime before it (<see cref="IsHeld"/>), so nothing runs until
/// <see cref="DialogBox.Resume"/>. The current action is destructed like
/// on a goto; actions between the old and the new position neither run
/// nor roll back — variables and game state stay as they are. Jumping
/// back to an action that already ran re-runs it, exactly like a
/// looping goto does. Returns false for an index outside the queue.
/// </summary>
public bool MoveTo(int queueIndex)
{
if (Lists.IsEmpty(dialogQueue) || queueIndex < 0 || queueIndex >= dialogQueue.Count)
return false;
var current = index >= 0 && index < dialogQueue.Count ? dialogQueue[index] : null;
if (current != null && current.IsConstructed && current.DestructType == DestructType.OnEndAction)
current.Destruct();
index = queueIndex;
isLastGoTo = false;
IsHeld = true;
return true;
}
/// <summary>
/// Main execution loop. Iterates through actions, calling <see cref="IActionCommand.Run"/> on each and advancing
/// automatically for <see cref="WaitType.NoWait"/> actions. Stops the loop on any wait-type action (WaitClick, WaitSelect,