bool pre(const scene::INodePtr& node) { // Don't traverse hidden nodes if (!node->visible()) { return false; } SelectablePtr selectable = Node_getSelectable(node); // ignore worldspawn Entity* entity = Node_getEntity(node); if (entity != NULL) { if (entity->getKeyValue("classname") == "worldspawn") { return true; } } bool selected = false; if (selectable != NULL && node->getParent() != NULL && !node->isRoot()) { for (std::size_t i = 0; i < _count; ++i) { // Check if the selectable passes the AABB test if (policy.evaluate(_aabbs[i], node)) { selectable->setSelected(true); selected = true; break; } } } // Only traverse the children of this node, if the node itself couldn't be selected return !selected; }
bool pre(const scene::INodePtr& node) { SelectablePtr selectable = Node_getSelectable(node); // If a visible selectable was found and the path depth is appropriate, add it if (selectable != NULL && node->visible()) { _targetList.push_back(node); } return true; }
bool pre(const scene::INodePtr& node) { // Ignore hidden nodes if (!node->visible()) return false; Entity* entity = Node_getEntity(node); // Check if we have a selectable SelectablePtr selectable = Node_getSelectable(node); if (selectable != NULL) { switch (_mode) { case SelectionSystem::eEntity: if (entity != NULL && entity->getKeyValue("classname") != "worldspawn") { _selectable = selectable; } break; case SelectionSystem::ePrimitive: _selectable = selectable; break; case SelectionSystem::eComponent: // Check if we have a componentselectiontestable instance ComponentSelectionTestablePtr compSelTestable = Node_getComponentSelectionTestable(node); // Only add it to the list if the instance has components and is already selected if (compSelTestable != NULL && selectable->isSelected()) { _selectable = selectable; } break; } } // Do we have a groupnode? If yes, don't traverse the children if (entity != NULL && node_is_group(node) && entity->getKeyValue("classname") != "worldspawn") { // Don't traverse the children of this groupnode return false; } return true; }