// 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");
/// <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);
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;
/// </summary>
private void RestoreTolastDecomposedTask(
Stack<DecompositionState> decompHistory,
- Queue<HTNTask> tasksToProcess,
+ Stack<HTNTask> tasksToProcess,
List<Dictionary<string, object>?> appliedStates,
List<HTNPrimitiveTask> finalPlan,
ref int primitiveCount,
primitiveCount = lastDecomp.PrimitiveCount;
blackboard = lastDecomp.Blackboard;
- tasksToProcess.Enqueue(lastDecomp.CompoundTask);
+ tasksToProcess.Push(lastDecomp.CompoundTask);
}
/// <summary>