logic: Reduced delays when combining TaskDecoratorRepeat and TaskSelector

This commit is contained in:
Eberhard Graether
2018-11-05 18:01:17 +01:00
parent ddc37aee80
commit b6db87ffa4
2 changed files with 8 additions and 6 deletions
@@ -28,7 +28,7 @@ Task::TaskState TaskDecoratorRepeat::doUpdate(std::shared_ptr<Blackboard> blackb
} }
else if (state == Task::STATE_FAILURE) else if (state == Task::STATE_FAILURE)
{ {
state = m_exitState; return m_exitState;
} }
break; break;
} }
@@ -1,6 +1,7 @@
#include "TaskGroupSelector.h" #include "TaskGroupSelector.h"
TaskGroupSelector::TaskGroupSelector() TaskGroupSelector::TaskGroupSelector()
: m_taskIndex(0)
{ {
} }
@@ -20,20 +21,21 @@ Task::TaskState TaskGroupSelector::doUpdate(std::shared_ptr<Blackboard> blackboa
{ {
return STATE_FAILURE; return STATE_FAILURE;
} }
else if (m_taskIndex < 0)
{
return STATE_SUCCESS;
}
TaskState state = m_taskRunners[m_taskIndex]->update(blackboard); TaskState state = m_taskRunners[m_taskIndex]->update(blackboard);
if (state == STATE_FAILURE) if (state == STATE_FAILURE)
{ {
m_taskIndex++; m_taskIndex++;
if (m_taskIndex >= int(m_taskRunners.size()))
{
return STATE_FAILURE;
}
} }
else if (state == STATE_SUCCESS) else if (state == STATE_SUCCESS)
{ {
m_taskIndex = -1; return STATE_SUCCESS;
} }
else if (state == STATE_HOLD) else if (state == STATE_HOLD)
{ {