Fix HTN task ordering bug (#32909)

* first, bad ordering

* fix

* Revert "first, bad ordering", recording artifacts

This reverts commit 22307675d79b417371775a0558c39781f59423d6.
This commit is contained in:
osjarw
2025-04-17 15:42:31 +03:00
committed by GitHub
parent 7be3811413
commit 700cb02d5e

View File

@@ -56,16 +56,16 @@ public sealed class HTNPlanJob : Job<HTNPlan>
// hence we'll store it here.
var appliedStates = new List<Dictionary<string, object>?>();
var tasksToProcess = new Queue<HTNTask>();
var tasksToProcess = new Stack<HTNTask>();
var finalPlan = new List<HTNPrimitiveTask>();
tasksToProcess.Enqueue(_rootTask);
tasksToProcess.Push(_rootTask);
// How many primitive tasks we've added since last record.
var primitiveCount = 0;
int tasksProcessed = 0;
while (tasksToProcess.TryDequeue(out var currentTask))
while (tasksToProcess.TryPop(out var currentTask))
{
if (tasksProcessed++ > _rootTask.MaximumTasks)
throw new Exception("HTN Planner exceeded maximum tasks");
@@ -161,7 +161,7 @@ public sealed class HTNPlanJob : Job<HTNPlan>
/// <summary>
/// Goes through each compound task branch and tries to find an appropriate one.
/// </summary>
private bool TryFindSatisfiedMethod(HTNCompoundTask compoundId, Queue<HTNTask> tasksToProcess, NPCBlackboard blackboard, ref int mtrIndex)
private bool TryFindSatisfiedMethod(HTNCompoundTask compoundId, Stack<HTNTask> tasksToProcess, NPCBlackboard blackboard, ref int mtrIndex)
{
var compound = _protoManager.Index<HTNCompoundPrototype>(compoundId.Task);
@@ -182,9 +182,9 @@ public sealed class HTNPlanJob : Job<HTNPlan>
if (!isValid)
continue;
foreach (var task in branch.Tasks)
foreach (var task in branch.Tasks.AsEnumerable().Reverse())
{
tasksToProcess.Enqueue(task);
tasksToProcess.Push(task);
}
return true;
@@ -198,7 +198,7 @@ public sealed class HTNPlanJob : Job<HTNPlan>
/// </summary>
private void RestoreTolastDecomposedTask(
Stack<DecompositionState> decompHistory,
Queue<HTNTask> tasksToProcess,
Stack<HTNTask> tasksToProcess,
List<Dictionary<string, object>?> appliedStates,
List<HTNPrimitiveTask> finalPlan,
ref int primitiveCount,
@@ -223,7 +223,7 @@ public sealed class HTNPlanJob : Job<HTNPlan>
primitiveCount = lastDecomp.PrimitiveCount;
blackboard = lastDecomp.Blackboard;
tasksToProcess.Enqueue(lastDecomp.CompoundTask);
tasksToProcess.Push(lastDecomp.CompoundTask);
}
/// <summary>