Skip to content

Commit

Permalink
Remove duplication related to IDLE
Browse files Browse the repository at this point in the history
  • Loading branch information
facontidavide committed Jan 16, 2019
1 parent 7bbc567 commit 77d2aa7
Show file tree
Hide file tree
Showing 10 changed files with 37 additions and 37 deletions.
2 changes: 2 additions & 0 deletions include/behaviortree_cpp/decorator_node.h
Expand Up @@ -31,6 +31,8 @@ class DecoratorNode : public TreeNode
{
return NodeType::DECORATOR;
}

NodeStatus executeTick() override;
};

/**
Expand Down
1 change: 0 additions & 1 deletion include/behaviortree_cpp/decorators/force_failure_node.h
Expand Up @@ -42,7 +42,6 @@ inline NodeStatus ForceFailureDecorator::tick()
case NodeStatus::FAILURE:
case NodeStatus::SUCCESS:
{
child_node_->setStatus(NodeStatus::IDLE);
return NodeStatus::FAILURE;
}

Expand Down
1 change: 0 additions & 1 deletion include/behaviortree_cpp/decorators/force_success_node.h
Expand Up @@ -42,7 +42,6 @@ inline NodeStatus ForceSuccessDecorator::tick()
case NodeStatus::FAILURE:
case NodeStatus::SUCCESS:
{
child_node_->setStatus(NodeStatus::IDLE);
return NodeStatus::SUCCESS;
}

Expand Down
5 changes: 4 additions & 1 deletion include/behaviortree_cpp/decorators/repeat_node.h
Expand Up @@ -41,8 +41,11 @@ class RepeatNode : public DecoratorNode
bool read_parameter_from_blackboard_;
static constexpr const char* NUM_CYCLES = "num_cycles";

virtual BT::NodeStatus tick() override;
virtual NodeStatus tick() override;

void halt() override;
};

}

#endif
12 changes: 12 additions & 0 deletions src/decorator_node.cpp
Expand Up @@ -67,4 +67,16 @@ NodeStatus SimpleDecoratorNode::tick()
{
return tick_functor_(child()->executeTick(), *this);
}

NodeStatus DecoratorNode::executeTick()
{
NodeStatus status = TreeNode::executeTick();
NodeStatus child_status =child()->status();
if( child_status == NodeStatus::SUCCESS || child_status == NodeStatus::FAILURE )
{
child()->setStatus(NodeStatus::IDLE);
}
return status;
}

}
11 changes: 3 additions & 8 deletions src/decorators/inverter_node.cpp
Expand Up @@ -30,23 +30,18 @@ NodeStatus InverterNode::tick()
{
case NodeStatus::SUCCESS:
{
setStatus(NodeStatus::FAILURE);
child_node_->setStatus(NodeStatus::IDLE);
return NodeStatus::FAILURE;
}
break;

case NodeStatus::FAILURE:
{
setStatus(NodeStatus::SUCCESS);
child_node_->setStatus(NodeStatus::IDLE);
return NodeStatus::SUCCESS;
}
break;

case NodeStatus::RUNNING:
{
setStatus(NodeStatus::RUNNING);
return NodeStatus::RUNNING;
}
break;

default:
{
Expand Down
18 changes: 10 additions & 8 deletions src/decorators/repeat_node.cpp
Expand Up @@ -61,33 +61,35 @@ NodeStatus RepeatNode::tick()
try_index_++;
if (try_index_ >= num_cycles_)
{
setStatus(NodeStatus::SUCCESS);
try_index_ = 0;
return (NodeStatus::SUCCESS);
}
child_node_->setStatus(NodeStatus::IDLE);
}
break;

case NodeStatus::FAILURE:
{
try_index_ = 0;
setStatus(NodeStatus::FAILURE);
child_node_->setStatus(NodeStatus::IDLE);
return (NodeStatus::FAILURE);
}
break;

case NodeStatus::RUNNING:
{
setStatus(NodeStatus::RUNNING);
return (NodeStatus::RUNNING);
}
break;

default:
{
// TODO throw?
}
}

return status();
}

void RepeatNode::halt()
{
try_index_ = 0;
DecoratorNode::halt();
}

}
11 changes: 4 additions & 7 deletions src/decorators/retry_node.cpp
Expand Up @@ -65,28 +65,24 @@ NodeStatus RetryNode::tick()
case NodeStatus::SUCCESS:
{
try_index_ = 0;
setStatus(NodeStatus::SUCCESS);
child_node_->setStatus(NodeStatus::IDLE);
return (NodeStatus::SUCCESS);
}
break;

case NodeStatus::FAILURE:
{
try_index_++;
if (try_index_ >= max_attempts_)
{
try_index_ = 0;
setStatus(NodeStatus::FAILURE);
return (NodeStatus::FAILURE);
}
child_node_->setStatus(NodeStatus::IDLE);
}
break;

case NodeStatus::RUNNING:
{
setStatus(NodeStatus::RUNNING);
return (NodeStatus::RUNNING);
}
break;

default:
{
Expand All @@ -96,4 +92,5 @@ NodeStatus RetryNode::tick()

return status();
}

}
10 changes: 1 addition & 9 deletions src/decorators/subtree_node.cpp
Expand Up @@ -14,14 +14,6 @@ BT::NodeStatus BT::DecoratorSubtreeNode::tick()
{
setStatus(NodeStatus::RUNNING);
}
auto status = child_node_->executeTick();
setStatus(status);

// reset child if completed
if( status == NodeStatus::SUCCESS || status == NodeStatus::FAILURE)
{
child_node_->setStatus(NodeStatus::IDLE);
}
return status;
return child_node_->executeTick();
}

3 changes: 1 addition & 2 deletions src/decorators/timeout_node.cpp
Expand Up @@ -54,7 +54,6 @@ NodeStatus TimeoutNode::tick()
if (!aborted && child()->status() == NodeStatus::RUNNING)
{
child()->halt();
child()->setStatus(NodeStatus::IDLE);
child_halted_ = true;
}
});
Expand All @@ -70,12 +69,12 @@ NodeStatus TimeoutNode::tick()
auto child_status = child()->executeTick();
if (child_status != NodeStatus::RUNNING)
{
child()->setStatus(NodeStatus::IDLE);
timer().cancel(timer_id_);
}
setStatus(child_status);
}

return status();
}

}

0 comments on commit 77d2aa7

Please sign in to comment.