| 2297 | } |
| 2298 | |
| 2299 | void UpdateTogglableNodes(std::vector<TogglableNode>& togglableNodes, donut::engine::SceneGraphNode* node) |
| 2300 | { |
| 2301 | auto addIfTogglable = [ & ](const std::string & token, SceneGraphNode* node) -> TogglableNode * |
| 2302 | { |
| 2303 | const size_t tokenLen = token.length(); |
| 2304 | const std::string name = node->GetName(); const size_t nameLen = name.length(); |
| 2305 | if (nameLen > tokenLen && name.substr(nameLen - tokenLen) == token) |
| 2306 | { |
| 2307 | TogglableNode tn; |
| 2308 | tn.SceneNode = node; |
| 2309 | tn.UIName = name.substr(0, nameLen - tokenLen); |
| 2310 | tn.OriginalTranslation = node->GetTranslation(); |
| 2311 | togglableNodes.push_back(tn); |
| 2312 | return &togglableNodes.back(); |
| 2313 | } |
| 2314 | return nullptr; |
| 2315 | }; |
| 2316 | TogglableNode * justAdded = addIfTogglable("_togglable", node); |
| 2317 | if (justAdded==nullptr) |
| 2318 | { |
| 2319 | justAdded = addIfTogglable("_togglable_off", node); |
| 2320 | if( justAdded != nullptr ) |
| 2321 | justAdded->SetSelected(false); |
| 2322 | } |
| 2323 | |
| 2324 | for (int i = (int)node->GetNumChildren() - 1; i >= 0; i--) |
| 2325 | UpdateTogglableNodes( togglableNodes, node->GetChild(i) ); |
| 2326 | } |
no test coverage detected