From 76e14b7597b5f25928a383bc7fcabd273bef8b1e Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 1 Mar 2022 16:50:08 -0300 Subject: [PATCH] Add `link_name: '*'` option. Signed-off-by: Ivan Santiago Paunovic --- src/systems/user_commands/UserCommands.cc | 53 ++++++++++++++--------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/src/systems/user_commands/UserCommands.cc b/src/systems/user_commands/UserCommands.cc index f6f3fc5e8a..9baf168b18 100644 --- a/src/systems/user_commands/UserCommands.cc +++ b/src/systems/user_commands/UserCommands.cc @@ -1468,29 +1468,40 @@ bool WheelSlipCommand::Execute() return false; } Model model{modelEntity}; - Entity linkEntity = model.LinkByName( - *this->iface->ecm, wheelSlipMsg->link_name()); - if (kNullEntity == linkEntity) - { - ignerr << "Failed to find link with name [" << wheelSlipMsg->link_name() - << "] for model [" << wheelSlipMsg->model_name() << "]." - << std::endl; - return false; - } + auto linkName = wheelSlipMsg->link_name(); - auto wheelSlipCmdComp = + auto doForEachLink = [this, wheelSlipMsg](Entity linkEntity) { + auto wheelSlipCmdComp = this->iface->ecm->Component(linkEntity); - if (!wheelSlipCmdComp) - { - this->iface->ecm->CreateComponent( - linkEntity, components::WheelSlipCmd(*wheelSlipMsg)); - } - else - { - auto state = wheelSlipCmdComp->SetData(*wheelSlipMsg, this->wheelSlipEql) ? - ComponentState::OneTimeChange : ComponentState::NoChange; - this->iface->ecm->SetChanged( - linkEntity, components::WheelSlipCmd::typeId, state); + if (!wheelSlipCmdComp) + { + this->iface->ecm->CreateComponent( + linkEntity, components::WheelSlipCmd(*wheelSlipMsg)); + } + else + { + auto state = wheelSlipCmdComp->SetData(*wheelSlipMsg, this->wheelSlipEql) ? + ComponentState::OneTimeChange : ComponentState::NoChange; + this->iface->ecm->SetChanged( + linkEntity, components::WheelSlipCmd::typeId, state); + } + }; + + if (linkName != "*") { + Entity linkEntity = model.LinkByName( + *this->iface->ecm, wheelSlipMsg->link_name()); + if (kNullEntity == linkEntity) + { + ignerr << "Failed to find link with name [" << wheelSlipMsg->link_name() + << "] for model [" << wheelSlipMsg->model_name() << "]." + << std::endl; + return false; + } + doForEachLink(linkEntity); + } else { + for (const auto & linkEntity : model.Links(*this->iface->ecm)) { + doForEachLink(linkEntity); + } } return true; }